@netless/app-slide 0.3.0-canary.20 → 0.3.0-canary.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.js +2 -2
- package/dist/main.js.map +1 -1
- package/dist/main.mjs +578 -549
- package/dist/main.mjs.map +1 -1
- package/package.json +6 -6
- package/src/SlideViewer/index.ts +2 -1
- package/src/index.ts +2 -0
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sources":["../../../node_modules/.pnpm/side-effect-manager@1.2.1/node_modules/side-effect-manager/dist/side-effect-manager.es.js","../src/constants.ts","../src/Refrigerator.ts","../../../node_modules/.pnpm/remitter@0.2.9/node_modules/remitter/dist/remitter.mjs","../../../node_modules/.pnpm/color-name@1.1.4/node_modules/color-name/index.js","../../../node_modules/.pnpm/is-arrayish@0.3.2/node_modules/is-arrayish/index.js","../../../node_modules/.pnpm/simple-swizzle@0.2.2/node_modules/simple-swizzle/index.js","../../../node_modules/.pnpm/color-string@1.9.1/node_modules/color-string/index.js","../src/utils.ts","../src/SlideViewer/utils.ts","../src/icons/sidebar.ts","../src/icons/arrow-left.ts","../src/icons/play.ts","../src/icons/pause.ts","../src/icons/arrow-right.ts","../src/icons/save.ts","../src/icons/spinner.ts","../src/SlideViewer/footer.ts","../../../node_modules/.pnpm/vanilla-lazyload@17.8.3/node_modules/vanilla-lazyload/dist/lazyload.esm.js","../src/SlideViewer/sidebar.ts","../src/SlideViewer/index.ts","../src/Logger.ts","../src/connect.ts","../src/preview.ts","../src/index.ts"],"sourcesContent":["const SOUP = \"!#%()*+,-./:;=?@[]^_`{|}~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\nconst SOUP_LEN = 87;\nconst ID_LEN = 20;\nconst reusedIdCarrier = [];\nconst genUID = () => {\n for (let i = 0; i < ID_LEN; i++) {\n reusedIdCarrier[i] = SOUP.charAt(Math.random() * SOUP_LEN);\n }\n return reusedIdCarrier.join(\"\");\n};\nfunction invoke(fn) {\n try {\n return fn();\n } catch (e) {\n console.error(e);\n }\n}\nclass SideEffectManager {\n constructor() {\n this.push = this.addDisposer;\n this.disposers = new Map();\n }\n addDisposer(disposer, disposerID = this.genUID()) {\n this.flush(disposerID);\n this.disposers.set(disposerID, Array.isArray(disposer) ? joinDisposers(disposer) : disposer);\n return disposerID;\n }\n add(executor, disposerID = this.genUID()) {\n const disposers = executor();\n return disposers ? this.addDisposer(disposers, disposerID) : disposerID;\n }\n addEventListener(el, type, listener, options, disposerID = this.genUID()) {\n el.addEventListener(type, listener, options);\n this.addDisposer(() => el.removeEventListener(type, listener, options), disposerID);\n return disposerID;\n }\n setTimeout(handler, timeout, disposerID = this.genUID()) {\n const ticket = window.setTimeout(() => {\n this.remove(disposerID);\n handler();\n }, timeout);\n return this.addDisposer(() => window.clearTimeout(ticket), disposerID);\n }\n setInterval(handler, timeout, disposerID = this.genUID()) {\n const ticket = window.setInterval(handler, timeout);\n return this.addDisposer(() => window.clearInterval(ticket), disposerID);\n }\n remove(disposerID) {\n const disposer = this.disposers.get(disposerID);\n this.disposers.delete(disposerID);\n return disposer;\n }\n flush(disposerID) {\n const disposer = this.remove(disposerID);\n if (disposer) {\n disposer();\n }\n }\n flushAll() {\n this.disposers.forEach(invoke);\n this.disposers.clear();\n }\n genUID() {\n let uid;\n do {\n uid = genUID();\n } while (this.disposers.has(uid));\n return uid;\n }\n}\nfunction joinDisposers(disposers) {\n return () => disposers.forEach(invoke);\n}\nclass AsyncSideEffectManager {\n constructor() {\n this.push = this.addDisposer;\n this.finished = Promise.resolve();\n this.disposers = new Map();\n this._nextTask = new Map();\n this._isRunning = new Set();\n }\n add(executor, disposerID = this.genUID()) {\n if (this._isRunning.has(disposerID)) {\n this._nextTask.set(disposerID, () => this._add(executor, disposerID));\n } else {\n this._add(executor, disposerID);\n }\n return disposerID;\n }\n async _add(executor, disposerID) {\n this._startTask(disposerID);\n const disposer = this.remove(disposerID);\n if (disposer) {\n try {\n await disposer();\n } catch (e) {\n console.error(e);\n }\n }\n try {\n const disposers = await executor();\n if (disposers) {\n this.disposers.set(disposerID, Array.isArray(disposers) ? joinAsyncDisposers(disposers) : disposers);\n }\n } catch (e) {\n console.error(e);\n }\n this._endTask(disposerID);\n const task = this._nextTask.get(disposerID);\n if (task) {\n this._nextTask.delete(disposerID);\n task();\n }\n }\n addDisposer(disposer, disposerID = this.genUID()) {\n return this.add(() => disposer, disposerID);\n }\n remove(disposerID) {\n const disposer = this.disposers.get(disposerID);\n this.disposers.delete(disposerID);\n return disposer;\n }\n flush(disposerID) {\n if (this._isRunning.has(disposerID)) {\n this._nextTask.set(disposerID, () => this._flush(disposerID));\n } else {\n this._flush(disposerID);\n }\n }\n async _flush(disposerID) {\n const disposer = this.remove(disposerID);\n if (disposer) {\n this._startTask(disposerID);\n try {\n await disposer();\n } catch (e) {\n console.error(e);\n }\n this._endTask(disposerID);\n }\n const task = this._nextTask.get(disposerID);\n if (task) {\n this._nextTask.delete(disposerID);\n task();\n }\n }\n flushAll() {\n this.disposers.forEach((_, disposerID) => this.flush(disposerID));\n }\n genUID() {\n let uid;\n do {\n uid = genUID();\n } while (this.disposers.has(uid));\n return uid;\n }\n _startTask(disposerID) {\n this._isRunning.add(disposerID);\n if (!this._resolveFinished) {\n this.finished = new Promise((resolve) => {\n this._resolveFinished = resolve;\n });\n }\n }\n _endTask(disposerID) {\n this._isRunning.delete(disposerID);\n if (this._resolveFinished && this._isRunning.size <= 0 && this._nextTask.size <= 0) {\n this._resolveFinished();\n this._resolveFinished = void 0;\n }\n }\n}\nfunction joinAsyncDisposers(disposers) {\n return () => Promise.all(disposers.map(invoke));\n}\nclass Disposable {\n constructor() {\n this.push = this.addDisposer;\n this.disposers = new Set();\n }\n addDisposer(disposers) {\n if (Array.isArray(disposers)) {\n disposers.forEach((disposer) => {\n this.disposers.add(disposer);\n });\n } else {\n this.disposers.add(disposers);\n }\n }\n add(executor) {\n const disposers = executor();\n if (disposers) {\n this.push(disposers);\n }\n }\n addEventListener(el, type, listener, options) {\n el.addEventListener(type, listener, options);\n const disposer = () => el.removeEventListener(type, listener, options);\n this.push(disposer);\n return disposer;\n }\n setTimeout(handler, timeout) {\n const ticket = window.setTimeout(() => {\n this.remove(disposer);\n handler();\n }, timeout);\n const disposer = () => window.clearTimeout(ticket);\n this.push(disposer);\n return disposer;\n }\n setInterval(handler, timeout) {\n const ticket = setInterval(handler, timeout);\n const disposer = () => clearInterval(ticket);\n this.push(disposer);\n return disposer;\n }\n remove(disposer) {\n this.disposers.delete(disposer);\n }\n flush(disposer) {\n this.remove(disposer);\n disposer();\n }\n flushAll() {\n this.disposers.forEach(invoke);\n this.disposers.clear();\n }\n}\nexport { AsyncSideEffectManager, Disposable, SideEffectManager, genUID, joinAsyncDisposers, joinDisposers };\n//# sourceMappingURL=side-effect-manager.es.js.map\n","export const class_name = \"netless-app-slide\";\n\nexport const DefaultUrl = \"https://convertcdn.netless.link/dynamicConvert\";\n","import type { ReadonlyTeleBox } from \"@netless/window-manager\";\nimport type { SlideViewer } from \"./SlideViewer\";\nimport type { AddHooks } from \"./typings\";\n\nexport class Refrigerator {\n threshold = 2;\n\n private _map = new Map<string, SlideViewer>();\n private _box = new Map<string, ReadonlyTeleBox>();\n private _queue: string[] = [];\n\n set(appId: string, viewer: SlideViewer, box: ReadonlyTeleBox) {\n this._map.set(appId, viewer);\n this._box.set(appId, box);\n if (!this._queue.includes(appId)) {\n this._queue.unshift(appId);\n }\n this._refresh();\n return () => {\n this.delete(appId);\n };\n }\n\n delete(appId: string) {\n this._map.delete(appId);\n this._box.delete(appId);\n this._queue = this._queue.filter(id => id !== appId);\n this._refresh();\n }\n\n focus(appId: string) {\n const index = this._queue.indexOf(appId);\n if (index >= 0) {\n this._queue.splice(index, 1);\n }\n this._queue.unshift(appId);\n this._refresh();\n }\n\n private _refresh() {\n let viewer: SlideViewer | undefined;\n // queue = [5, 4, 3, 2, 1]\n this._queue.sort((a, b) => {\n const za = this._box.get(a)?.zIndex ?? 0;\n const zb = this._box.get(b)?.zIndex ?? 0;\n return -(za - zb);\n });\n this._queue.forEach((appId, i) => {\n if (!(viewer = this._map.get(appId))) return;\n if (i < this.threshold) {\n viewer.unfreeze();\n } else {\n viewer.freeze();\n }\n });\n if (import.meta.env.DEV) {\n console.log(\n \"[Slide] refrigerator._refresh\",\n `[${this._queue.slice(0, this.threshold)}]`,\n `[${this._queue.slice(this.threshold)}]`\n );\n }\n }\n}\n\nexport const refrigerator = new Refrigerator();\nif (import.meta.env.DEV) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (window as any).refrigerator = refrigerator;\n}\n\nexport const addHooks: AddHooks = function addHooks(emitter) {\n emitter.on(\"focus\", event => {\n refrigerator.focus(event.appId);\n });\n};\n","class Remitter {\n constructor() {\n this.a = /* @__PURE__ */ new Map();\n this.b = /* @__PURE__ */ new Set();\n }\n emit(eventName, eventData) {\n const listeners = this.a.get(eventName);\n if (listeners) {\n for (const listener of listeners) {\n try {\n listener(eventData);\n } catch (e) {\n console.error(e);\n }\n }\n }\n }\n on(eventName, listener) {\n let listeners = this.a.get(eventName);\n if (!listeners) {\n listeners = /* @__PURE__ */ new Set();\n this.a.set(eventName, listeners);\n }\n listeners.add(listener);\n if (listeners.size === 1) {\n for (const listener2 of this.b) {\n listener2.e(eventName);\n }\n }\n return () => {\n this.off(eventName, listener);\n };\n }\n once(eventName, listener) {\n const onceListener = (eventData) => {\n this.off(eventName, listener);\n return listener(eventData);\n };\n this.c = this.c || /* @__PURE__ */ new WeakMap();\n this.c.set(listener, onceListener);\n return this.on(eventName, onceListener);\n }\n off(eventName, listener) {\n var _a;\n const listeners = this.a.get(eventName);\n if (listeners) {\n const result = listeners.delete(\n ((_a = this.c) == null ? void 0 : _a.get(listener)) || listener\n );\n if (listeners.size <= 0) {\n this.a.delete(eventName);\n for (const listener2 of this.b) {\n listener2.d(eventName);\n }\n }\n return result;\n }\n return false;\n }\n clear(eventName) {\n var _a;\n if (eventName) {\n (_a = this.a.get(eventName)) == null ? void 0 : _a.clear();\n } else {\n this.a.clear();\n }\n }\n count(eventName) {\n var _a;\n if (eventName) {\n return ((_a = this.a.get(eventName)) == null ? void 0 : _a.size) || 0;\n } else {\n let count = 0;\n for (const listeners of this.a.values()) {\n count += listeners.size;\n }\n return count;\n }\n }\n remit(eventName, start) {\n var _a;\n let disposer;\n const relayListener = {\n e: (name) => {\n if (name === eventName) {\n try {\n disposer = start(this);\n } catch (e) {\n console.error(e);\n }\n }\n },\n d: (name) => {\n if (disposer && (!name || name === eventName)) {\n try {\n disposer();\n } catch (e) {\n console.error(e);\n }\n }\n }\n };\n this.b.add(relayListener);\n if ((_a = this.a.get(eventName)) == null ? void 0 : _a.size) {\n relayListener.e(eventName);\n }\n return () => {\n this.b.delete(relayListener);\n relayListener.d();\n };\n }\n destroy() {\n this.clear();\n for (const listener of this.b) {\n listener.d();\n }\n this.b.clear();\n }\n}\nexport {\n Remitter\n};\n//# sourceMappingURL=remitter.mjs.map\n","'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","module.exports = function isArrayish(obj) {\n\tif (!obj || typeof obj === 'string') {\n\t\treturn false;\n\t}\n\n\treturn obj instanceof Array || Array.isArray(obj) ||\n\t\t(obj.length >= 0 && (obj.splice instanceof Function ||\n\t\t\t(Object.getOwnPropertyDescriptor(obj, (obj.length - 1)) && obj.constructor.name !== 'String')));\n};\n","'use strict';\n\nvar isArrayish = require('is-arrayish');\n\nvar concat = Array.prototype.concat;\nvar slice = Array.prototype.slice;\n\nvar swizzle = module.exports = function swizzle(args) {\n\tvar results = [];\n\n\tfor (var i = 0, len = args.length; i < len; i++) {\n\t\tvar arg = args[i];\n\n\t\tif (isArrayish(arg)) {\n\t\t\t// http://jsperf.com/javascript-array-concat-vs-push/98\n\t\t\tresults = concat.call(results, slice.call(arg));\n\t\t} else {\n\t\t\tresults.push(arg);\n\t\t}\n\t}\n\n\treturn results;\n};\n\nswizzle.wrap = function (fn) {\n\treturn function () {\n\t\treturn fn(swizzle(arguments));\n\t};\n};\n","/* MIT license */\nvar colorNames = require('color-name');\nvar swizzle = require('simple-swizzle');\nvar hasOwnProperty = Object.hasOwnProperty;\n\nvar reverseNames = Object.create(null);\n\n// create a list of reverse color names\nfor (var name in colorNames) {\n\tif (hasOwnProperty.call(colorNames, name)) {\n\t\treverseNames[colorNames[name]] = name;\n\t}\n}\n\nvar cs = module.exports = {\n\tto: {},\n\tget: {}\n};\n\ncs.get = function (string) {\n\tvar prefix = string.substring(0, 3).toLowerCase();\n\tvar val;\n\tvar model;\n\tswitch (prefix) {\n\t\tcase 'hsl':\n\t\t\tval = cs.get.hsl(string);\n\t\t\tmodel = 'hsl';\n\t\t\tbreak;\n\t\tcase 'hwb':\n\t\t\tval = cs.get.hwb(string);\n\t\t\tmodel = 'hwb';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tval = cs.get.rgb(string);\n\t\t\tmodel = 'rgb';\n\t\t\tbreak;\n\t}\n\n\tif (!val) {\n\t\treturn null;\n\t}\n\n\treturn {model: model, value: val};\n};\n\ncs.get.rgb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar abbr = /^#([a-f0-9]{3,4})$/i;\n\tvar hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i;\n\tvar rgba = /^rgba?\\(\\s*([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/;\n\tvar per = /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/;\n\tvar keyword = /^(\\w+)$/;\n\n\tvar rgb = [0, 0, 0, 1];\n\tvar match;\n\tvar i;\n\tvar hexAlpha;\n\n\tif (match = string.match(hex)) {\n\t\thexAlpha = match[2];\n\t\tmatch = match[1];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\t// https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19\n\t\t\tvar i2 = i * 2;\n\t\t\trgb[i] = parseInt(match.slice(i2, i2 + 2), 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = parseInt(hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(abbr)) {\n\t\tmatch = match[1];\n\t\thexAlpha = match[3];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = parseInt(match[i] + match[i], 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(rgba)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = parseInt(match[i + 1], 0);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\tif (match[5]) {\n\t\t\t\trgb[3] = parseFloat(match[4]) * 0.01;\n\t\t\t} else {\n\t\t\t\trgb[3] = parseFloat(match[4]);\n\t\t\t}\n\t\t}\n\t} else if (match = string.match(per)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\tif (match[5]) {\n\t\t\t\trgb[3] = parseFloat(match[4]) * 0.01;\n\t\t\t} else {\n\t\t\t\trgb[3] = parseFloat(match[4]);\n\t\t\t}\n\t\t}\n\t} else if (match = string.match(keyword)) {\n\t\tif (match[1] === 'transparent') {\n\t\t\treturn [0, 0, 0, 0];\n\t\t}\n\n\t\tif (!hasOwnProperty.call(colorNames, match[1])) {\n\t\t\treturn null;\n\t\t}\n\n\t\trgb = colorNames[match[1]];\n\t\trgb[3] = 1;\n\n\t\treturn rgb;\n\t} else {\n\t\treturn null;\n\t}\n\n\tfor (i = 0; i < 3; i++) {\n\t\trgb[i] = clamp(rgb[i], 0, 255);\n\t}\n\trgb[3] = clamp(rgb[3], 0, 1);\n\n\treturn rgb;\n};\n\ncs.get.hsl = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar hsl = /^hsla?\\(\\s*([+-]?(?:\\d{0,3}\\.)?\\d+)(?:deg)?\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*(?:[,|\\/]\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/;\n\tvar match = string.match(hsl);\n\n\tif (match) {\n\t\tvar alpha = parseFloat(match[4]);\n\t\tvar h = ((parseFloat(match[1]) % 360) + 360) % 360;\n\t\tvar s = clamp(parseFloat(match[2]), 0, 100);\n\t\tvar l = clamp(parseFloat(match[3]), 0, 100);\n\t\tvar a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1);\n\n\t\treturn [h, s, l, a];\n\t}\n\n\treturn null;\n};\n\ncs.get.hwb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar hwb = /^hwb\\(\\s*([+-]?\\d{0,3}(?:\\.\\d+)?)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/;\n\tvar match = string.match(hwb);\n\n\tif (match) {\n\t\tvar alpha = parseFloat(match[4]);\n\t\tvar h = ((parseFloat(match[1]) % 360) + 360) % 360;\n\t\tvar w = clamp(parseFloat(match[2]), 0, 100);\n\t\tvar b = clamp(parseFloat(match[3]), 0, 100);\n\t\tvar a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1);\n\t\treturn [h, w, b, a];\n\t}\n\n\treturn null;\n};\n\ncs.to.hex = function () {\n\tvar rgba = swizzle(arguments);\n\n\treturn (\n\t\t'#' +\n\t\thexDouble(rgba[0]) +\n\t\thexDouble(rgba[1]) +\n\t\thexDouble(rgba[2]) +\n\t\t(rgba[3] < 1\n\t\t\t? (hexDouble(Math.round(rgba[3] * 255)))\n\t\t\t: '')\n\t);\n};\n\ncs.to.rgb = function () {\n\tvar rgba = swizzle(arguments);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')'\n\t\t: 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')';\n};\n\ncs.to.rgb.percent = function () {\n\tvar rgba = swizzle(arguments);\n\n\tvar r = Math.round(rgba[0] / 255 * 100);\n\tvar g = Math.round(rgba[1] / 255 * 100);\n\tvar b = Math.round(rgba[2] / 255 * 100);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)'\n\t\t: 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')';\n};\n\ncs.to.hsl = function () {\n\tvar hsla = swizzle(arguments);\n\treturn hsla.length < 4 || hsla[3] === 1\n\t\t? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)'\n\t\t: 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')';\n};\n\n// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n// (hwb have alpha optional & 1 is default value)\ncs.to.hwb = function () {\n\tvar hwba = swizzle(arguments);\n\n\tvar a = '';\n\tif (hwba.length >= 4 && hwba[3] !== 1) {\n\t\ta = ', ' + hwba[3];\n\t}\n\n\treturn 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')';\n};\n\ncs.to.keyword = function (rgb) {\n\treturn reverseNames[rgb.slice(0, 3)];\n};\n\n// helpers\nfunction clamp(num, min, max) {\n\treturn Math.min(Math.max(min, num), max);\n}\n\nfunction hexDouble(num) {\n\tvar str = Math.round(num).toString(16).toUpperCase();\n\treturn (str.length < 2) ? '0' + str : str;\n}\n","import type { AppContext, Player } from \"@netless/window-manager\";\n\nimport ColorString from \"color-string\";\nimport { class_name } from \"./constants\";\n\nexport function noop() {\n return;\n}\n\nexport function h<K extends keyof HTMLElementTagNameMap>(tag: K) {\n return document.createElement(tag);\n}\n\nexport function hc<K extends keyof HTMLElementTagNameMap>(tag: K, name: string) {\n const el = h(tag);\n set_class(el, name);\n return el;\n}\n\nexport function append(parent: HTMLElement, child: HTMLElement) {\n return parent.appendChild(child);\n}\n\nexport function wrap_class(name: string) {\n return `${class_name}-${name}`;\n}\n\nexport function set_class(el: HTMLElement, name: string) {\n el.className = wrap_class(name);\n}\n\nexport function trim_slash(s: string) {\n return s.endsWith(\"/\") ? s.slice(0, -1) : s;\n}\n\nexport function get(o: unknown, k: string): unknown {\n if (typeof o === \"object\" && o !== null) return (o as Record<string, unknown>)[k];\n}\n\nexport function block<T = void>(): [p: Promise<T>, resolve: (t: T) => void] {\n let resolve!: (t: T) => void;\n const p = new Promise<T>(r => {\n resolve = r;\n });\n return [p, resolve];\n}\n\nexport function make_timestamp(context: AppContext): () => number {\n const room = context.room;\n const player = context.displayer as Player;\n if (room) {\n return () => room.calibrationTimestamp;\n } else if (player) {\n return () => player.beginTimestamp + player.progressTime;\n } else {\n return () => Date.now();\n }\n}\n\nexport function make_bg_color(el: HTMLElement): string {\n try {\n let bg = window.getComputedStyle(el).backgroundColor;\n if (bg !== \"rgba(0, 0, 0, 0)\" && bg !== \"transparent\") {\n bg = hex(bg);\n console.log(\"[Slide] guess bg color:\", bg);\n return bg;\n }\n if (el.parentElement) {\n return make_bg_color(el.parentElement);\n }\n } catch {\n // ignored\n }\n return \"#ffffff\";\n}\n\n// https://github.com/Qix-/color-convert/blob/8dfdbbc6b46fa6a305bf394d942cc1b08e23fca5/conversions.js#L616\nexport function hex(color: string): string {\n const result = ColorString.get(color);\n if (result && result.model === \"rgb\") {\n const args = result.value;\n\n const integer =\n ((Math.round(args[0]) & 0xff) << 16) +\n ((Math.round(args[1]) & 0xff) << 8) +\n (Math.round(args[2]) & 0xff);\n\n const string = integer.toString(16);\n return \"#\" + \"000000\".substring(string.length) + string;\n } else {\n return color;\n }\n}\n","import type { PreviewInfo, SlideAttributes, SlideInfo } from \"./typings\";\n\nimport { DefaultUrl } from \"../constants\";\nimport { noop, trim_slash } from \"../utils\";\n\nexport function make_prefix(taskId: string, url?: string) {\n return `${trim_slash(url || DefaultUrl)}/${taskId}`;\n}\n\nexport async function fetch_slide_info({ taskId, url }: SlideAttributes): Promise<{\n preview: PreviewInfo | null;\n slide: SlideInfo;\n}> {\n const prefix = make_prefix(taskId, url);\n const imgSrc = `${prefix}/preview/1.png`;\n const jsonUrl = `${prefix}/jsonOutput/slide-1.json`;\n\n const p1 = new Promise<PreviewInfo | null>(resolve => {\n const image = new Image();\n image.onload = () => resolve(image);\n image.onerror = () => resolve(null);\n image.src = imgSrc;\n });\n\n const p2: Promise<SlideInfo> = fetch(jsonUrl).then(r => r.json());\n\n return { preview: await p1, slide: await p2 };\n}\n\nexport function on_visibility_change(callback: (visible: boolean) => void) {\n if (typeof document !== \"undefined\") {\n const listener = () => callback(document.visibilityState === \"visible\");\n document.addEventListener(\"visibilitychange\", listener);\n return () => document.removeEventListener(\"visibilitychange\", listener);\n }\n return noop;\n}\n","export function sidebarSVG(namespace: string): SVGElement {\n const NS = \"http://www.w3.org/2000/svg\";\n\n const $svg = document.createElementNS(NS, \"svg\");\n $svg.setAttribute(\"class\", `${namespace}-footer-icon-sidebar`);\n $svg.setAttribute(\"viewBox\", \"0 0 64 64\");\n\n const $path = document.createElementNS(NS, \"path\");\n $path.setAttribute(\"fill\", \"currentColor\");\n $path.setAttribute(\n \"d\",\n \"M50 8H14c-3.309 0-6 2.691-6 6v36c0 3.309 2.691 6 6 6h36c3.309 0 6-2.691 6-6V14c0-3.309-2.691-6-6-6zM12 50V14c0-1.103.897-2 2-2h8v40h-8c-1.103 0-2-.897-2-2zm40 0c0 1.103-.897 2-2 2H26V12h24c1.103 0 2 .897 2 2z\"\n );\n\n $svg.appendChild($path);\n\n return $svg;\n}\n","export function arrowLeftSVG(namespace: string): SVGElement {\n const NS = \"http://www.w3.org/2000/svg\";\n\n const $svg = document.createElementNS(NS, \"svg\");\n $svg.setAttribute(\"class\", `${namespace}-footer-icon-arrow-left`);\n $svg.setAttribute(\"viewBox\", \"0 0 500 500\");\n\n const $path = document.createElementNS(NS, \"path\");\n $path.setAttribute(\"fill\", \"currentColor\");\n $path.setAttribute(\n \"d\",\n \"M177.81 249.959L337.473 90.295c2.722-2.865 2.651-7.378-.143-10.1-2.793-2.65-7.163-2.65-9.956 0l-164.75 164.75c-2.793 2.793-2.793 7.306 0 10.1l164.75 164.75c2.865 2.722 7.378 2.65 10.099-.143 2.651-2.794 2.651-7.163 0-9.957L177.809 249.959z\"\n );\n\n $svg.appendChild($path);\n\n return $svg;\n}\n","export function playSVG(namespace: string): SVGElement {\n const NS = \"http://www.w3.org/2000/svg\";\n\n const $svg = document.createElementNS(NS, \"svg\");\n $svg.setAttribute(\"class\", `${namespace}-footer-icon-play`);\n $svg.setAttribute(\"viewBox\", \"0 0 500 500\");\n\n const $path = document.createElementNS(NS, \"path\");\n $path.setAttribute(\"fill\", \"currentColor\");\n $path.setAttribute(\n \"d\",\n \"M418.158 257.419L174.663 413.33c-6.017 3.919-15.708 3.772-21.291-.29-2.791-2.018-4.295-4.483-4.295-7.084V94.109c0-5.65 6.883-10.289 15.271-10.289 4.298 0 8.391 1.307 11.181 3.332l242.629 155.484c6.016 3.917 6.451 10.292.649 14.491-.216.154-.432.154-.649.292zM170.621 391.288l223.116-141.301L170.71 107.753l-.089 283.535z\"\n );\n\n $svg.appendChild($path);\n\n return $svg;\n}\n","export function pauseSVG(namespace: string): SVGElement {\n const NS = \"http://www.w3.org/2000/svg\";\n\n const $svg = document.createElementNS(NS, \"svg\");\n $svg.setAttribute(\"class\", `${namespace}-footer-icon-pause`);\n $svg.setAttribute(\"viewBox\", \"0 0 500 500\");\n\n const $path = document.createElementNS(NS, \"path\");\n $path.setAttribute(\"fill\", \"currentColor\");\n $path.setAttribute(\n \"d\",\n \"M312.491 78.261c0-6.159 4.893-11.213 11.04-11.213 6.158 0 11.211 5.054 11.211 11.213v343.478c0 6.159-5.053 11.213-11.211 11.213-6.147 0-11.04-5.054-11.04-11.213V78.261zM165.257 78.261c0-6.159 4.893-11.213 11.04-11.213 6.158 0 11.211 5.054 11.211 11.213v343.478c0 6.159-5.053 11.213-11.211 11.213-6.147 0-11.04-5.054-11.04-11.213V78.261z\"\n );\n\n $svg.appendChild($path);\n\n return $svg;\n}\n","export function arrowRightSVG(namespace: string): SVGElement {\n const NS = \"http://www.w3.org/2000/svg\";\n\n const $svg = document.createElementNS(NS, \"svg\");\n $svg.setAttribute(\"class\", `${namespace}-footer-icon-arrow-right`);\n $svg.setAttribute(\"viewBox\", \"0 0 500 500\");\n\n const $path = document.createElementNS(NS, \"path\");\n $path.setAttribute(\"fill\", \"currentColor\");\n $path.setAttribute(\n \"d\",\n \"M322.19 250.041L162.527 409.705c-2.722 2.865-2.651 7.378.143 10.1 2.793 2.65 7.163 2.65 9.956 0l164.75-164.75c2.793-2.793 2.793-7.306 0-10.1l-164.75-164.75c-2.865-2.722-7.378-2.65-10.099.143-2.651 2.794-2.651 7.163 0 9.957l159.664 159.736z\"\n );\n\n $svg.appendChild($path);\n\n return $svg;\n}\n","export function saveSVG(namespace: string): SVGElement {\n const NS = \"http://www.w3.org/2000/svg\";\n\n const $svg = document.createElementNS(NS, \"svg\");\n $svg.setAttribute(\"class\", `${namespace}-footer-icon-save`);\n $svg.setAttribute(\"viewBox\", \"0 0 448 512\");\n\n const $path = document.createElementNS(NS, \"path\");\n $path.setAttribute(\"fill\", \"currentColor\");\n $path.setAttribute(\n \"d\",\n \"M224 256c-35.2 0-64 28.8-64 64c0 35.2 28.8 64 64 64c35.2 0 64-28.8 64-64C288 284.8 259.2 256 224 256zM433.1 129.1l-83.9-83.9C341.1 37.06 328.8 32 316.1 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V163.9C448 151.2 442.9 138.9 433.1 129.1zM128 80h144V160H128V80zM400 416c0 8.836-7.164 16-16 16H64c-8.836 0-16-7.164-16-16V96c0-8.838 7.164-16 16-16h16v104c0 13.25 10.75 24 24 24h192C309.3 208 320 197.3 320 184V83.88l78.25 78.25C399.4 163.2 400 164.8 400 166.3V416z\"\n );\n\n $svg.appendChild($path);\n\n return $svg;\n}\n","export function spinnerSVG(namespace: string): SVGElement {\n const NS = \"http://www.w3.org/2000/svg\";\n\n const $svg = document.createElementNS(NS, \"svg\");\n $svg.setAttribute(\"class\", `${namespace}-footer-icon-spinner`);\n $svg.setAttribute(\"viewBox\", \"0 0 512 512\");\n\n const $path = document.createElementNS(NS, \"path\");\n $path.setAttribute(\"fill\", \"currentColor\");\n $path.setAttribute(\n \"d\",\n \"M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z\"\n );\n\n const $animate = document.createElementNS(NS, \"animateTransform\");\n $animate.setAttribute(\"attributeName\", \"transform\");\n $animate.setAttribute(\"attributeType\", \"xml\");\n $animate.setAttribute(\"type\", \"rotate\");\n $animate.setAttribute(\"from\", \"0 256 256\");\n $animate.setAttribute(\"to\", \"360 256 256\");\n $animate.setAttribute(\"begin\", \"0s\");\n $animate.setAttribute(\"dur\", \"2s\");\n $animate.setAttribute(\"fill\", \"freeze\");\n $animate.setAttribute(\"repeatCount\", \"indefinite\");\n $path.appendChild($animate);\n\n const $progress = document.createElementNS(NS, \"text\");\n $progress.setAttribute(\"x\", \"125\");\n $progress.setAttribute(\"y\", \"345\");\n $progress.setAttribute(\"data-id\", \"progress\");\n $progress.style.fontSize = \"246px\";\n $progress.textContent = \"20\";\n $svg.appendChild($progress);\n $svg.appendChild($path);\n\n return $svg;\n}\n","import { class_name } from \"../constants\";\nimport { arrowLeftSVG, arrowRightSVG, pauseSVG, playSVG, sidebarSVG } from \"../icons\";\nimport { hc, noop, wrap_class } from \"../utils\";\nimport { saveSVG } from \"../icons/save\";\nimport { spinnerSVG } from \"../icons/spinner\";\n\nexport function create_footer() {\n type NewPageIndexCallback = (newPageIndex: number) => void;\n let new_page_index_callback: NewPageIndexCallback = noop;\n const on_new_page_index = (callback: NewPageIndexCallback) => {\n new_page_index_callback = callback;\n };\n\n let toggle_preview_callback: () => void = noop;\n const on_toggle_preview = (callback: () => void) => {\n toggle_preview_callback = callback;\n };\n\n let play_callback: () => void = noop;\n const on_play = (callback: () => void) => {\n play_callback = callback;\n };\n\n let readonly = false;\n let sidebar = false;\n let page_index = 0;\n let page_count = 0;\n\n const $footer = hc(\"div\", \"footer\");\n\n const $btnSidebar = hc(\"button\", \"btn-sidebar\");\n $btnSidebar.classList.add(wrap_class(\"footer-btn\"));\n $btnSidebar.appendChild(sidebarSVG(class_name));\n $btnSidebar.onclick = function on_click_btn_sidebar() {\n if (readonly) return;\n toggle_preview_callback();\n };\n $btnSidebar.style.display = \"none\";\n $footer.appendChild($btnSidebar);\n\n const $pageJumps = hc(\"div\", \"page-jumps\");\n\n const $btnPageBack = hc(\"button\", \"btn-page-back\");\n $btnPageBack.classList.add(wrap_class(\"footer-btn\"));\n $btnPageBack.appendChild(arrowLeftSVG(class_name));\n $btnPageBack.onclick = function on_click_btn_page_back() {\n if (readonly) return;\n new_page_index_callback(page_index - 1);\n };\n $pageJumps.appendChild($btnPageBack);\n\n const $btnPlay = hc(\"button\", \"btn-page-play\");\n $btnPlay.classList.add(wrap_class(\"footer-btn\"));\n $btnPlay.appendChild(playSVG(class_name));\n $btnPlay.appendChild(pauseSVG(class_name));\n let returnPlayTimer = 0;\n $btnPlay.onclick = function on_click_btn_play() {\n if (readonly) return;\n $btnPlay.classList.add(wrap_class(\"footer-btn-playing\"));\n play_callback();\n clearTimeout(returnPlayTimer);\n returnPlayTimer = window.setTimeout(() => {\n $btnPlay.classList.remove(wrap_class(\"footer-btn-playing\"));\n }, 500);\n };\n $pageJumps.appendChild($btnPlay);\n\n const $btnPageNext = hc(\"button\", \"btn-page-next\");\n $btnPageNext.classList.add(wrap_class(\"footer-btn\"));\n $btnPageNext.appendChild(arrowRightSVG(class_name));\n $btnPageNext.onclick = function on_click_btn_page_next() {\n if (readonly) return;\n new_page_index_callback(page_index + 1);\n };\n $pageJumps.appendChild($btnPageNext);\n\n const $pageNumber = hc(\"div\", \"page-number\");\n\n const $pageNumberInput = hc(\"input\", \"page-number-input\");\n $pageNumberInput.value = String(page_index + 1);\n $pageNumberInput.onchange = function on_change_page_number_input() {\n if (readonly) return;\n if ($pageNumberInput.value) {\n new_page_index_callback(Number($pageNumberInput.value) - 1);\n }\n };\n\n const $totalPage = hc(\"span\", \"total-page\");\n $totalPage.textContent = \" / \";\n\n $pageNumber.appendChild($pageNumberInput);\n $pageNumber.appendChild($totalPage);\n\n $footer.appendChild($pageJumps);\n $footer.appendChild($pageNumber);\n\n const class_readonly = wrap_class(\"readonly\");\n\n let saveToPdf: (progressCallback: (p: number) => void) => void = noop;\n const on_save_to_pdf = (callback: (progressCallback: (p: number) => void) => void) => {\n saveToPdf = callback;\n };\n const progressCallback = (p: number) => {\n if (p < 99) {\n spinnerIcon.style.display = \"block\";\n saveIcon.style.display = \"none\";\n const progress = spinnerIcon.querySelector(\"[data-id]\");\n if (progress) {\n progress.textContent = p.toString().padStart(2, \"0\");\n }\n } else {\n spinnerIcon.style.display = \"none\";\n saveIcon.style.display = \"block\";\n }\n };\n const saveIcon = saveSVG(class_name);\n const spinnerIcon = spinnerSVG(class_name);\n spinnerIcon.style.display = \"none\";\n const $saveBtn = hc(\"button\", \"footer-btn\");\n $saveBtn.appendChild(saveIcon);\n $saveBtn.onclick = function () {\n saveToPdf(progressCallback);\n };\n $saveBtn.appendChild(spinnerIcon);\n\n // $footer.appendChild($saveBtn);\n\n function set_readonly(readonly_: boolean) {\n if (readonly !== readonly_) {\n readonly = readonly_;\n $footer.classList.toggle(class_readonly, readonly);\n $pageNumberInput.disabled = readonly;\n }\n }\n\n function set_sidebar(sidebar_: boolean) {\n if (sidebar !== sidebar_) {\n sidebar = sidebar_;\n $btnSidebar.style.display = sidebar ? \"\" : \"none\";\n }\n }\n\n function set_page_index(page_index_: number, force = false) {\n if (force || page_index !== page_index_) {\n page_index = page_index_;\n $pageNumberInput.value = String(page_index + 1);\n }\n }\n\n function set_page_count(page_count_: number) {\n if (page_count !== page_count_) {\n page_count = page_count_;\n $totalPage.textContent = ` / ${page_count}`;\n }\n }\n\n return {\n $footer,\n $pageNumberInput,\n set_readonly,\n set_sidebar,\n set_page_index,\n set_page_count,\n on_new_page_index,\n on_toggle_preview,\n on_play,\n on_save_to_pdf,\n };\n}\n","const runningOnBrowser = typeof window !== \"undefined\";\n\nconst isBot =\n (runningOnBrowser && !(\"onscroll\" in window)) ||\n (typeof navigator !== \"undefined\" && /(gle|ing|ro)bot|crawl|spider/i.test(navigator.userAgent));\n\nconst supportsIntersectionObserver = runningOnBrowser && \"IntersectionObserver\" in window;\n\nconst supportsClassList = runningOnBrowser && \"classList\" in document.createElement(\"p\");\n\nconst isHiDpi = runningOnBrowser && window.devicePixelRatio > 1;\n\nconst defaultSettings = {\n elements_selector: \".lazy\",\n container: isBot || runningOnBrowser ? document : null,\n threshold: 300,\n thresholds: null,\n data_src: \"src\",\n data_srcset: \"srcset\",\n data_sizes: \"sizes\",\n data_bg: \"bg\",\n data_bg_hidpi: \"bg-hidpi\",\n data_bg_multi: \"bg-multi\",\n data_bg_multi_hidpi: \"bg-multi-hidpi\",\n data_bg_set: \"bg-set\",\n data_poster: \"poster\",\n class_applied: \"applied\",\n class_loading: \"loading\",\n class_loaded: \"loaded\",\n class_error: \"error\",\n class_entered: \"entered\",\n class_exited: \"exited\",\n unobserve_completed: true,\n unobserve_entered: false,\n cancel_on_exit: true,\n callback_enter: null,\n callback_exit: null,\n callback_applied: null,\n callback_loading: null,\n callback_loaded: null,\n callback_error: null,\n callback_finish: null,\n callback_cancel: null,\n use_native: false,\n restore_on_error: false,\n};\n\nconst getExtendedSettings = (customSettings) => {\n return Object.assign({}, defaultSettings, customSettings);\n};\n\n/* Creates instance and notifies it through the window element */\nconst createInstance = function(classObj, options) {\n let event;\n const eventString = \"LazyLoad::Initialized\";\n const instance = new classObj(options);\n try {\n // Works in modern browsers\n event = new CustomEvent(eventString, { detail: { instance } });\n } catch (err) {\n // Works in Internet Explorer (all versions)\n event = document.createEvent(\"CustomEvent\");\n event.initCustomEvent(eventString, false, false, { instance });\n }\n window.dispatchEvent(event);\n};\n\n/* Auto initialization of one or more instances of lazyload, depending on the \n options passed in (plain object or an array) */\nconst autoInitialize = (classObj, options) => {\n if (!options) {\n return;\n }\n if (!options.length) {\n // Plain object\n createInstance(classObj, options);\n } else {\n // Array of objects\n for (let i = 0, optionsItem; (optionsItem = options[i]); i += 1) {\n createInstance(classObj, optionsItem);\n }\n }\n};\n\nconst SRC = \"src\";\nconst SRCSET = \"srcset\";\nconst SIZES = \"sizes\";\nconst POSTER = \"poster\";\nconst ORIGINALS = \"llOriginalAttrs\";\nconst DATA = \"data\";\n\nconst statusLoading = \"loading\";\nconst statusLoaded = \"loaded\";\nconst statusApplied = \"applied\";\nconst statusEntered = \"entered\";\nconst statusError = \"error\";\nconst statusNative = \"native\";\n\nconst dataPrefix = \"data-\";\nconst statusDataName = \"ll-status\";\n\nconst getData = (element, attribute) => {\n return element.getAttribute(dataPrefix + attribute);\n};\n\nconst setData = (element, attribute, value) => {\n var attrName = dataPrefix + attribute;\n if (value === null) {\n element.removeAttribute(attrName);\n return;\n }\n element.setAttribute(attrName, value);\n};\n\nconst getStatus = (element) => getData(element, statusDataName);\nconst setStatus = (element, status) => setData(element, statusDataName, status);\nconst resetStatus = (element) => setStatus(element, null);\n\nconst hasEmptyStatus = (element) => getStatus(element) === null;\nconst hasStatusLoading = (element) => getStatus(element) === statusLoading;\nconst hasStatusError = (element) => getStatus(element) === statusError;\nconst hasStatusNative = (element) => getStatus(element) === statusNative;\n\nconst statusesAfterLoading = [statusLoading, statusLoaded, statusApplied, statusError];\nconst hadStartedLoading = (element) => statusesAfterLoading.indexOf(getStatus(element)) >= 0;\n\nconst safeCallback = (callback, arg1, arg2, arg3) => {\n\tif (!callback) {\n\t\treturn;\n\t}\n\n\tif (arg3 !== undefined) {\n\t\tcallback(arg1, arg2, arg3);\n\t\treturn;\n\t}\n\tif (arg2 !== undefined) {\n\t\tcallback(arg1, arg2);\n\t\treturn;\n\t}\n\tcallback(arg1);\n};\n\nconst addClass = (element, className) => {\n\tif (supportsClassList) {\n\t\telement.classList.add(className);\n\t\treturn;\n\t}\n\telement.className += (element.className ? \" \" : \"\") + className;\n};\n\nconst removeClass = (element, className) => {\n\tif (supportsClassList) {\n\t\telement.classList.remove(className);\n\t\treturn;\n\t}\n\telement.className = element.className.\n\t\treplace(new RegExp(\"(^|\\\\s+)\" + className + \"(\\\\s+|$)\"), \" \").\n\t\treplace(/^\\s+/, \"\").\n\t\treplace(/\\s+$/, \"\");\n};\n\nconst addTempImage = (element) => {\n element.llTempImage = document.createElement(\"IMG\");\n};\n\nconst deleteTempImage = (element) => {\n delete element.llTempImage;\n};\n\nconst getTempImage = (element) => element.llTempImage;\n\nconst unobserve = (element, instance) => {\n if (!instance) return;\n const observer = instance._observer;\n if (!observer) return;\n observer.unobserve(element);\n};\n\nconst resetObserver = (observer) => {\n observer.disconnect();\n};\n\nconst unobserveEntered = (element, settings, instance) => {\n if (settings.unobserve_entered) unobserve(element, instance);\n};\n\nconst updateLoadingCount = (instance, delta) => {\n if (!instance) return;\n instance.loadingCount += delta;\n};\n\nconst decreaseToLoadCount = (instance) => {\n if (!instance) return;\n instance.toLoadCount -= 1;\n};\n\nconst setToLoadCount = (instance, value) => {\n if (!instance) return;\n instance.toLoadCount = value;\n};\n\nconst isSomethingLoading = (instance) => instance.loadingCount > 0;\n\nconst haveElementsToLoad = (instance) => instance.toLoadCount > 0;\n\nconst getSourceTags = (parentTag) => {\n let sourceTags = [];\n for (let i = 0, childTag; (childTag = parentTag.children[i]); i += 1) {\n if (childTag.tagName === \"SOURCE\") {\n sourceTags.push(childTag);\n }\n }\n return sourceTags;\n};\n\nconst forEachPictureSource = (element, fn) => {\n const parent = element.parentNode;\n if (!parent || parent.tagName !== \"PICTURE\") {\n return;\n }\n let sourceTags = getSourceTags(parent);\n sourceTags.forEach(fn);\n};\n\nconst forEachVideoSource = (element, fn) => {\n let sourceTags = getSourceTags(element);\n sourceTags.forEach(fn);\n};\n\nconst attrsSrc = [SRC];\nconst attrsSrcPoster = [SRC, POSTER];\nconst attrsSrcSrcsetSizes = [SRC, SRCSET, SIZES];\nconst attrsData = [DATA];\n\nconst hasOriginalAttrs = (element) => !!element[ORIGINALS];\nconst getOriginalAttrs = (element) => element[ORIGINALS];\nconst deleteOriginalAttrs = (element) => delete element[ORIGINALS];\n\n// ## SAVE ##\n\nconst setOriginalsObject = (element, attributes) => {\n if (hasOriginalAttrs(element)) {\n return;\n }\n const originals = {};\n attributes.forEach((attribute) => {\n originals[attribute] = element.getAttribute(attribute);\n });\n element[ORIGINALS] = originals;\n};\n\nconst saveOriginalBackgroundStyle = (element) => {\n if (hasOriginalAttrs(element)) {\n return;\n }\n element[ORIGINALS] = { backgroundImage: element.style.backgroundImage };\n};\n\n// ## RESTORE ##\n\nconst setOrResetAttribute = (element, attrName, value) => {\n if (!value) {\n element.removeAttribute(attrName);\n return;\n }\n element.setAttribute(attrName, value);\n};\n\nconst restoreOriginalAttrs = (element, attributes) => {\n if (!hasOriginalAttrs(element)) {\n return;\n }\n const originals = getOriginalAttrs(element);\n attributes.forEach((attribute) => {\n setOrResetAttribute(element, attribute, originals[attribute]);\n });\n};\n\nconst restoreOriginalBgImage = (element) => {\n if (!hasOriginalAttrs(element)) {\n return;\n }\n const originals = getOriginalAttrs(element);\n element.style.backgroundImage = originals.backgroundImage;\n};\n\nconst manageApplied = (element, settings, instance) => {\n addClass(element, settings.class_applied);\n setStatus(element, statusApplied);\n // Instance is not provided when loading is called from static class\n if (!instance) return;\n if (settings.unobserve_completed) {\n // Unobserve now because we can't do it on load\n unobserve(element, settings);\n }\n safeCallback(settings.callback_applied, element, instance);\n};\n\nconst manageLoading = (element, settings, instance) => {\n addClass(element, settings.class_loading);\n setStatus(element, statusLoading);\n // Instance is not provided when loading is called from static class\n if (!instance) return;\n updateLoadingCount(instance, +1);\n safeCallback(settings.callback_loading, element, instance);\n};\n\nconst setAttributeIfValue = (element, attrName, value) => {\n if (!value) {\n return;\n }\n element.setAttribute(attrName, value);\n};\n\nconst setImageAttributes = (element, settings) => {\n setAttributeIfValue(element, SIZES, getData(element, settings.data_sizes));\n setAttributeIfValue(element, SRCSET, getData(element, settings.data_srcset));\n setAttributeIfValue(element, SRC, getData(element, settings.data_src));\n};\n\nconst setSourcesImg = (imgEl, settings) => {\n forEachPictureSource(imgEl, (sourceTag) => {\n setOriginalsObject(sourceTag, attrsSrcSrcsetSizes);\n setImageAttributes(sourceTag, settings);\n });\n setOriginalsObject(imgEl, attrsSrcSrcsetSizes);\n setImageAttributes(imgEl, settings);\n};\n\nconst setSourcesIframe = (iframe, settings) => {\n setOriginalsObject(iframe, attrsSrc);\n setAttributeIfValue(iframe, SRC, getData(iframe, settings.data_src));\n};\n\nconst setSourcesVideo = (videoEl, settings) => {\n forEachVideoSource(videoEl, (sourceEl) => {\n setOriginalsObject(sourceEl, attrsSrc);\n setAttributeIfValue(sourceEl, SRC, getData(sourceEl, settings.data_src));\n });\n setOriginalsObject(videoEl, attrsSrcPoster);\n\n setAttributeIfValue(videoEl, POSTER, getData(videoEl, settings.data_poster));\n setAttributeIfValue(videoEl, SRC, getData(videoEl, settings.data_src));\n videoEl.load();\n};\n\nconst setSourcesObject = (object, settings) => {\n setOriginalsObject(object, attrsData);\n setAttributeIfValue(object, DATA, getData(object, settings.data_src));\n};\n\nconst setBackground = (element, settings, instance) => {\n const bg1xValue = getData(element, settings.data_bg);\n const bgHiDpiValue = getData(element, settings.data_bg_hidpi);\n const bgDataValue = isHiDpi && bgHiDpiValue ? bgHiDpiValue : bg1xValue;\n if (!bgDataValue) return;\n element.style.backgroundImage = `url(\"${bgDataValue}\")`;\n getTempImage(element).setAttribute(SRC, bgDataValue);\n manageLoading(element, settings, instance);\n};\n\n// NOTE: THE TEMP IMAGE TRICK CANNOT BE DONE WITH data-multi-bg\n// BECAUSE INSIDE ITS VALUES MUST BE WRAPPED WITH URL() AND ONE OF THEM\n// COULD BE A GRADIENT BACKGROUND IMAGE\nconst setMultiBackground = (element, settings, instance) => {\n const bg1xValue = getData(element, settings.data_bg_multi);\n const bgHiDpiValue = getData(element, settings.data_bg_multi_hidpi);\n const bgDataValue = isHiDpi && bgHiDpiValue ? bgHiDpiValue : bg1xValue;\n if (!bgDataValue) {\n return;\n }\n element.style.backgroundImage = bgDataValue;\n manageApplied(element, settings, instance);\n};\n\nconst setImgsetBackground = (element, settings, instance) => {\n const bgImgSetDataValue = getData(element, settings.data_bg_set);\n if (!bgImgSetDataValue) {\n return;\n }\n const imgSetValues = bgImgSetDataValue.split(\"|\");\n let bgImageValues = imgSetValues.map((value) => `image-set(${value})`);\n element.style.backgroundImage = bgImageValues.join();\n // Temporary fix for Chromeium with the -webkit- prefix\n if (element.style.backgroundImage === '') {\n bgImageValues = imgSetValues.map((value) => `-webkit-image-set(${value})`);\n element.style.backgroundImage = bgImageValues.join();\n }\n manageApplied(element, settings, instance);\n};\n\nconst setSourcesFunctions = {\n IMG: setSourcesImg,\n IFRAME: setSourcesIframe,\n VIDEO: setSourcesVideo,\n OBJECT: setSourcesObject\n};\n\nconst setSourcesNative = (element, settings) => {\n const setSourcesFunction = setSourcesFunctions[element.tagName];\n if (!setSourcesFunction) {\n return;\n }\n setSourcesFunction(element, settings);\n};\n\nconst setSources = (element, settings, instance) => {\n const setSourcesFunction = setSourcesFunctions[element.tagName];\n if (!setSourcesFunction) {\n return;\n }\n setSourcesFunction(element, settings);\n manageLoading(element, settings, instance);\n};\n\nconst elementsWithLoadEvent = [\"IMG\", \"IFRAME\", \"VIDEO\", \"OBJECT\"];\nconst hasLoadEvent = (element) => elementsWithLoadEvent.indexOf(element.tagName) > -1;\n\nconst checkFinish = (settings, instance) => {\n if (instance && !isSomethingLoading(instance) && !haveElementsToLoad(instance)) {\n safeCallback(settings.callback_finish, instance);\n }\n};\n\nconst addEventListener = (element, eventName, handler) => {\n element.addEventListener(eventName, handler);\n element.llEvLisnrs[eventName] = handler;\n};\n\nconst removeEventListener = (element, eventName, handler) => {\n element.removeEventListener(eventName, handler);\n};\n\nconst hasEventListeners = (element) => {\n return !!element.llEvLisnrs;\n};\n\nconst addEventListeners = (element, loadHandler, errorHandler) => {\n if (!hasEventListeners(element)) element.llEvLisnrs = {};\n const loadEventName = element.tagName === \"VIDEO\" ? \"loadeddata\" : \"load\";\n addEventListener(element, loadEventName, loadHandler);\n addEventListener(element, \"error\", errorHandler);\n};\n\nconst removeEventListeners = (element) => {\n if (!hasEventListeners(element)) {\n return;\n }\n const eventListeners = element.llEvLisnrs;\n for (let eventName in eventListeners) {\n const handler = eventListeners[eventName];\n removeEventListener(element, eventName, handler);\n }\n delete element.llEvLisnrs;\n};\n\nconst doneHandler = (element, settings, instance) => {\n deleteTempImage(element);\n updateLoadingCount(instance, -1);\n decreaseToLoadCount(instance);\n removeClass(element, settings.class_loading);\n if (settings.unobserve_completed) {\n unobserve(element, instance);\n }\n};\n\nconst loadHandler = (event, element, settings, instance) => {\n const goingNative = hasStatusNative(element);\n doneHandler(element, settings, instance);\n addClass(element, settings.class_loaded);\n setStatus(element, statusLoaded);\n safeCallback(settings.callback_loaded, element, instance);\n if (!goingNative) checkFinish(settings, instance);\n};\n\nconst errorHandler = (event, element, settings, instance) => {\n const goingNative = hasStatusNative(element);\n doneHandler(element, settings, instance);\n addClass(element, settings.class_error);\n setStatus(element, statusError);\n safeCallback(settings.callback_error, element, instance);\n if (settings.restore_on_error) restoreOriginalAttrs(element, attrsSrcSrcsetSizes);\n if (!goingNative) checkFinish(settings, instance);\n};\n\nconst addOneShotEventListeners = (element, settings, instance) => {\n const elementToListenTo = getTempImage(element) || element;\n if (hasEventListeners(elementToListenTo)) {\n // This happens when loading is retried twice\n return;\n }\n const _loadHandler = (event) => {\n loadHandler(event, element, settings, instance);\n removeEventListeners(elementToListenTo);\n };\n const _errorHandler = (event) => {\n errorHandler(event, element, settings, instance);\n removeEventListeners(elementToListenTo);\n };\n addEventListeners(elementToListenTo, _loadHandler, _errorHandler);\n};\n\nconst loadBackground = (element, settings, instance) => {\n addTempImage(element);\n addOneShotEventListeners(element, settings, instance);\n saveOriginalBackgroundStyle(element);\n setBackground(element, settings, instance);\n setMultiBackground(element, settings, instance);\n setImgsetBackground(element, settings, instance);\n};\n\nconst loadRegular = (element, settings, instance) => {\n addOneShotEventListeners(element, settings, instance);\n setSources(element, settings, instance);\n};\n\nconst load = (element, settings, instance) => {\n if (hasLoadEvent(element)) {\n loadRegular(element, settings, instance);\n } else {\n loadBackground(element, settings, instance);\n }\n};\n\nconst loadNative = (element, settings, instance) => {\n element.setAttribute(\"loading\", \"lazy\");\n addOneShotEventListeners(element, settings, instance);\n setSourcesNative(element, settings);\n setStatus(element, statusNative);\n};\n\nconst removeImageAttributes = (element) => {\n element.removeAttribute(SRC);\n element.removeAttribute(SRCSET);\n element.removeAttribute(SIZES);\n};\n\nconst resetSourcesImg = (element) => {\n forEachPictureSource(element, (sourceTag) => {\n removeImageAttributes(sourceTag);\n });\n removeImageAttributes(element);\n};\n\nconst restoreImg = (imgEl) => {\n forEachPictureSource(imgEl, (sourceEl) => {\n restoreOriginalAttrs(sourceEl, attrsSrcSrcsetSizes);\n });\n restoreOriginalAttrs(imgEl, attrsSrcSrcsetSizes);\n};\n\nconst restoreVideo = (videoEl) => {\n forEachVideoSource(videoEl, (sourceEl) => {\n restoreOriginalAttrs(sourceEl, attrsSrc);\n });\n restoreOriginalAttrs(videoEl, attrsSrcPoster);\n videoEl.load();\n};\n\nconst restoreIframe = (iframeEl) => {\n restoreOriginalAttrs(iframeEl, attrsSrc);\n};\n\nconst restoreObject = (objectEl) => {\n restoreOriginalAttrs(objectEl, attrsData);\n};\n\nconst restoreFunctions = {\n IMG: restoreImg,\n IFRAME: restoreIframe,\n VIDEO: restoreVideo,\n OBJECT: restoreObject\n};\n\nconst restoreAttributes = (element) => {\n const restoreFunction = restoreFunctions[element.tagName];\n if (!restoreFunction) {\n restoreOriginalBgImage(element);\n return;\n }\n restoreFunction(element);\n};\n\nconst resetClasses = (element, settings) => {\n if (hasEmptyStatus(element) || hasStatusNative(element)) {\n return;\n }\n removeClass(element, settings.class_entered);\n removeClass(element, settings.class_exited);\n removeClass(element, settings.class_applied);\n removeClass(element, settings.class_loading);\n removeClass(element, settings.class_loaded);\n removeClass(element, settings.class_error);\n};\n\nconst restore = (element, settings) => {\n restoreAttributes(element);\n resetClasses(element, settings);\n resetStatus(element);\n deleteOriginalAttrs(element);\n};\n\nconst cancelLoading = (element, entry, settings, instance) => {\n if (!settings.cancel_on_exit) return;\n if (!hasStatusLoading(element)) return;\n if (element.tagName !== \"IMG\") return; //Works only on images\n removeEventListeners(element);\n resetSourcesImg(element);\n restoreImg(element);\n removeClass(element, settings.class_loading);\n updateLoadingCount(instance, -1);\n resetStatus(element);\n safeCallback(settings.callback_cancel, element, entry, instance);\n};\n\nconst onEnter = (element, entry, settings, instance) => {\n const dontLoad = hadStartedLoading(element); /* Save status \n before setting it, to prevent loading it again. Fixes #526. */\n setStatus(element, statusEntered);\n addClass(element, settings.class_entered);\n removeClass(element, settings.class_exited);\n unobserveEntered(element, settings, instance);\n safeCallback(settings.callback_enter, element, entry, instance);\n if (dontLoad) return;\n load(element, settings, instance);\n};\n\nconst onExit = (element, entry, settings, instance) => {\n if (hasEmptyStatus(element)) return; //Ignore the first pass, at landing\n addClass(element, settings.class_exited);\n cancelLoading(element, entry, settings, instance);\n safeCallback(settings.callback_exit, element, entry, instance);\n};\n\nconst tagsWithNativeLazy = [\"IMG\", \"IFRAME\", \"VIDEO\"];\n\nconst shouldUseNative = (settings) =>\n settings.use_native && \"loading\" in HTMLImageElement.prototype;\n\nconst loadAllNative = (elements, settings, instance) => {\n elements.forEach((element) => {\n if (tagsWithNativeLazy.indexOf(element.tagName) === -1) {\n return;\n }\n loadNative(element, settings, instance);\n });\n setToLoadCount(instance, 0);\n};\n\nconst isIntersecting = (entry) => entry.isIntersecting || entry.intersectionRatio > 0;\n\nconst getObserverSettings = (settings) => ({\n root: settings.container === document ? null : settings.container,\n rootMargin: settings.thresholds || settings.threshold + \"px\"\n});\n\nconst intersectionHandler = (entries, settings, instance) => {\n entries.forEach((entry) =>\n isIntersecting(entry)\n ? onEnter(entry.target, entry, settings, instance)\n : onExit(entry.target, entry, settings, instance)\n );\n};\n\nconst observeElements = (observer, elements) => {\n elements.forEach((element) => {\n observer.observe(element);\n });\n};\n\nconst updateObserver = (observer, elementsToObserve) => {\n resetObserver(observer);\n observeElements(observer, elementsToObserve);\n};\n\nconst setObserver = (settings, instance) => {\n if (!supportsIntersectionObserver || shouldUseNative(settings)) {\n return;\n }\n instance._observer = new IntersectionObserver((entries) => {\n intersectionHandler(entries, settings, instance);\n }, getObserverSettings(settings));\n};\n\nconst toArray = (nodeSet) => Array.prototype.slice.call(nodeSet);\n\nconst queryElements = (settings) =>\n settings.container.querySelectorAll(settings.elements_selector);\n\nconst excludeManagedElements = (elements) => toArray(elements).filter(hasEmptyStatus);\n\nconst hasError = (element) => hasStatusError(element);\nconst filterErrorElements = (elements) => toArray(elements).filter(hasError);\n\nconst getElementsToLoad = (elements, settings) =>\n excludeManagedElements(elements || queryElements(settings));\n\nconst retryLazyLoad = (settings, instance) => {\n const errorElements = filterErrorElements(queryElements(settings));\n errorElements.forEach((element) => {\n removeClass(element, settings.class_error);\n resetStatus(element);\n });\n instance.update();\n};\n\nconst setOnlineCheck = (settings, instance) => {\n if (!runningOnBrowser) {\n return;\n }\n instance._onlineHandler = () => {\n retryLazyLoad(settings, instance);\n };\n window.addEventListener(\"online\", instance._onlineHandler);\n};\n\nconst resetOnlineCheck = (instance) => {\n if (!runningOnBrowser) {\n return;\n }\n window.removeEventListener(\"online\", instance._onlineHandler);\n};\n\nconst LazyLoad = function (customSettings, elements) {\n const settings = getExtendedSettings(customSettings);\n this._settings = settings;\n this.loadingCount = 0;\n setObserver(settings, this);\n setOnlineCheck(settings, this);\n this.update(elements);\n};\n\nLazyLoad.prototype = {\n update: function (givenNodeset) {\n const settings = this._settings;\n const elementsToLoad = getElementsToLoad(givenNodeset, settings);\n setToLoadCount(this, elementsToLoad.length);\n\n if (isBot || !supportsIntersectionObserver) {\n this.loadAll(elementsToLoad);\n return;\n }\n if (shouldUseNative(settings)) {\n loadAllNative(elementsToLoad, settings, this);\n return;\n }\n\n updateObserver(this._observer, elementsToLoad);\n },\n\n destroy: function () {\n // Observer\n if (this._observer) {\n this._observer.disconnect();\n }\n // Clean handlers\n resetOnlineCheck(this);\n // Clean custom attributes on elements\n queryElements(this._settings).forEach((element) => {\n deleteOriginalAttrs(element);\n });\n // Delete all internal props\n delete this._observer;\n delete this._settings;\n delete this._onlineHandler;\n delete this.loadingCount;\n delete this.toLoadCount;\n },\n\n loadAll: function (elements) {\n const settings = this._settings;\n const elementsToLoad = getElementsToLoad(elements, settings);\n elementsToLoad.forEach((element) => {\n unobserve(element, this);\n load(element, settings, this);\n });\n },\n\n restoreAll: function() {\n const settings = this._settings;\n queryElements(settings).forEach((element) => {\n restore(element, settings);\n });\n }\n};\n\nLazyLoad.load = (element, customSettings) => {\n const settings = getExtendedSettings(customSettings);\n load(element, settings);\n};\n\nLazyLoad.resetStatus = (element) => {\n resetStatus(element);\n};\n\n// Automatic instances creation if required (useful for async script loading)\nif (runningOnBrowser) {\n autoInitialize(LazyLoad, window.lazyLoadOptions);\n}\n\nexport { LazyLoad as default };\n","import type { ILazyLoadInstance } from \"vanilla-lazyload\";\nimport type { PreviewPage } from \"./typings\";\n\nimport LazyLoad from \"vanilla-lazyload\";\nimport { append, h, hc, noop, wrap_class } from \"../utils\";\n\nexport function create_sidebar() {\n type NewPageIndexCallback = (newPageIndex: number) => void;\n let new_page_index_callback: NewPageIndexCallback = noop;\n const on_new_page_index = (callback: NewPageIndexCallback) => {\n new_page_index_callback = callback;\n };\n\n let destroyed = false;\n let readonly = false;\n let active = false;\n let pages: PreviewPage[] = [];\n let page_index = 0;\n\n const class_readonly = wrap_class(\"readonly\");\n const class_preview_active = wrap_class(\"preview-active\");\n\n const $content = hc(\"div\", \"content\");\n\n const $previewMask = hc(\"div\", \"preview-mask\");\n $previewMask.onclick = function on_click_preview_mask(ev) {\n if (readonly) return;\n if (ev.target !== $previewMask) return;\n set_active(false);\n };\n append($content, $previewMask);\n\n const $preview = hc(\"div\", \"preview\");\n $preview.classList.add(wrap_class(\"tele-fancy-scrollbar\"));\n $preview.onclick = function on_click_preview(ev) {\n if (readonly) return;\n const page_index = (ev.target as HTMLElement).dataset?.pageIndex;\n if (page_index) {\n ev.preventDefault();\n ev.stopPropagation();\n ev.stopImmediatePropagation();\n new_page_index_callback(Number(page_index));\n set_active(false);\n }\n };\n append($content, $preview);\n\n let lazyload: ILazyLoadInstance | undefined;\n\n function set_readonly(readonly_: boolean) {\n if (readonly !== readonly_) {\n readonly = readonly_;\n $content.classList.toggle(class_readonly, readonly);\n }\n }\n\n function set_active(active_: boolean) {\n if (active !== active_) {\n active = active_;\n $content.classList.toggle(class_preview_active, active);\n if (active && !lazyload) {\n lazyload = new LazyLoad({\n container: $preview,\n elements_selector: `.${wrap_class(\"preview-page>img\")}`,\n });\n }\n }\n }\n\n function set_pages(pages_: PreviewPage[]) {\n if (pages !== pages_) {\n pages = pages_;\n\n const page_class = wrap_class(\"preview-page\");\n const page_name_class = wrap_class(\"preview-page-name\");\n\n pages.forEach((page, i) => {\n const pageIndex = String(i);\n\n const $page = h(\"a\");\n $page.className = page_class + \" \" + wrap_class(`preview-page-${i}`);\n $page.href = \"#\";\n $page.dataset.pageIndex = pageIndex;\n\n const $name = h(\"span\");\n $name.className = page_name_class;\n $name.textContent = String(i + 1);\n $name.dataset.pageIndex = pageIndex;\n\n const $img = h(\"img\");\n $img.width = page.width;\n $img.height = page.height;\n $img.alt = `page-${i}`;\n $img.dataset.src = page.thumbnail;\n $img.dataset.pageIndex = pageIndex;\n\n append($page, $img);\n append($page, $name);\n append($preview, $page);\n });\n\n if (!destroyed) {\n lazyload?.update();\n }\n }\n }\n\n function set_page_index(page_index_: number, force = false) {\n if (force || page_index !== page_index_) {\n page_index = page_index_;\n const $page = $preview.querySelector<HTMLElement>(\n `.${wrap_class(`preview-page-${page_index}`)}`\n );\n if ($page) {\n $preview.scrollTo({ top: $page.offsetTop - 16 });\n }\n }\n }\n\n function destroy() {\n destroyed = true;\n lazyload?.destroy();\n }\n\n function get_active() {\n return active;\n }\n\n return {\n $content,\n $preview,\n set_readonly,\n set_active,\n get_active,\n set_pages,\n on_new_page_index,\n set_page_index,\n destroy,\n };\n}\n","import type { ISlideConfig } from \"@netless/slide\";\nimport type { SlideAttributes } from \"./typings\";\n\nimport { Slide } from \"@netless/slide\";\nimport { SideEffectManager } from \"side-effect-manager\";\nimport { Remitter } from \"remitter\";\n\nimport { DefaultUrl } from \"../constants\";\nimport { append, block, hc, noop } from \"../utils\";\nimport { fetch_slide_info, make_prefix, on_visibility_change } from \"./utils\";\n\nimport styles from \"../style.scss?inline\";\nimport { create_footer } from \"./footer\";\nimport { create_sidebar } from \"./sidebar\";\n\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\n\nexport type SlideViewerOptions = MakeOptional<\n Omit<ISlideConfig & SlideAttributes, \"anchor\">,\n \"mode\" | \"interactive\"\n>;\n\nexport interface SlideViewerInfoResponse {\n width: number;\n height: number;\n slideCount: number;\n}\n\nexport interface SlideViewerEventData {\n freeze: void;\n unfreeze: void;\n renderError: { error: Error; index: number };\n prepareError: Error;\n renderStart: void;\n renderEnd: void;\n}\n\nexport class SlideViewer {\n static styles = styles;\n static fetchSlideInfo = fetch_slide_info;\n\n readonly sideEffect = new SideEffectManager();\n readonly events = new Remitter<SlideViewerEventData>();\n\n readonly $slide = hc(\"div\", \"slide\");\n readonly $overlay = hc(\"div\", \"overlay\");\n readonly sidebar = create_sidebar();\n readonly footer = create_footer();\n readonly $content: HTMLElement;\n readonly $footer: HTMLElement;\n\n readonly slide: Slide;\n\n _slideTitle = \"\";\n _getWhiteSnapshot:\n | ((index: number, canvas: HTMLCanvasElement, ctx: CanvasRenderingContext2D) => void)\n | null = null;\n\n private readonly _readyPromise: Promise<void>;\n private readonly _infoPromise: Promise<SlideViewerInfoResponse>;\n private _ready = false;\n private _slideCount = 0;\n private _destroyed = false;\n private _isFrozen = false;\n private _cachedIsFrozen = false;\n\n constructor(options: SlideViewerOptions) {\n // user interface\n this.$content = this.sidebar.$content;\n this.$footer = this.footer.$footer;\n append(this.$content, this.$slide);\n append(this.$content, this.$overlay);\n\n // bind user actions\n this.sidebar.on_new_page_index(this.onNewPageIndex);\n this.footer.on_new_page_index(this.onNewPageIndex);\n this.footer.on_toggle_preview(this.onTogglePreview);\n this.footer.on_play(this.onPlay);\n this.footer.on_save_to_pdf(this.toPdf);\n\n // remove dom on cleanup\n this.sideEffect.push(this.sidebar.destroy);\n this.sideEffect.push(() => this.slide.destroy());\n this.sideEffect.push(() => {\n this.$content.parentElement && this.$content.remove();\n this.$footer.parentElement && this.$footer.remove();\n this.$slide.parentElement && this.$slide.remove();\n });\n\n // auto freeze on lost focus\n this.sideEffect.push(\n on_visibility_change(visible => {\n if (this._destroyed) return;\n if (!visible) {\n this._cachedIsFrozen = this._isFrozen;\n this.freeze();\n } else {\n if (!this._cachedIsFrozen) this.unfreeze();\n }\n })\n );\n\n // start loading slide\n // prepare(info) -> slide.renderEnd(ready)\n const [infoPromise, resolveInfo] = block<SlideViewerInfoResponse>();\n this._infoPromise = infoPromise;\n\n const fetching = SlideViewer.fetchSlideInfo(options).then(({ preview, slide }) => {\n if (this._destroyed) return;\n\n this._slideCount = slide.slideCount;\n\n if (preview) {\n const { taskId, url } = options;\n const { slideCount } = slide;\n const { width, height } = preview;\n\n const prefix = make_prefix(taskId, url);\n const pages = Array.from({ length: slideCount }, (_, i) => ({\n width,\n height,\n thumbnail: `${prefix}/preview/${i + 1}.png`,\n }));\n\n this.sidebar.set_pages(pages);\n this.footer.set_sidebar(true);\n }\n\n this.footer.set_page_count(slide.slideCount);\n resolveInfo(slide);\n });\n\n fetching.catch(error => {\n console.log(\"[Slide] fetch slide info error\");\n console.error(error);\n this.events.emit(\"prepareError\", error);\n });\n\n const [readyPromise, resolveReady] = block();\n this._readyPromise = readyPromise;\n\n this.slide = new Slide({\n anchor: this.$slide,\n mode: \"local\",\n interactive: true,\n enableGlobalClick: true,\n useLocalCache: true,\n ...options,\n });\n this.slide.setResource(options.taskId, options.url || DefaultUrl);\n\n this.slide.on(\"renderStart\", () => {\n if (this._destroyed) return;\n this.events.emit(\"renderStart\");\n });\n\n this.slide.on(\"slideChange\", page => {\n if (this._destroyed) return;\n this.setPage(page);\n this.$overlay.style.opacity = \"\";\n\n // renderStart -> renderEnd -> slideChange\n // So we just treat `slideChange` as `renderEnd`\n this.events.emit(\"renderEnd\");\n });\n\n // TODO: export `once()` in the slide package.\n (this.slide as any).once(\"renderEnd\", () => {\n // ready = first render end\n if (!this._ready) {\n setTimeout(() => {\n this._ready = true;\n resolveReady();\n }, 1000);\n }\n });\n\n // show overlay on render error\n this.slide.on(\"renderError\", ev => {\n if (this._destroyed) return;\n if (ev.error) {\n console.error(ev.error);\n this.$overlay.textContent = `Error on slide.index=${ev.index}: ${ev.error.message}`;\n this.$overlay.style.opacity = \"1\";\n this.events.emit(\"renderError\", ev);\n }\n });\n\n this.ready(() => {\n if (this._isFrozen) {\n this.freeze();\n }\n });\n }\n\n prepare(callback: (response: SlideViewerInfoResponse) => void) {\n return this._infoPromise.then(callback);\n }\n\n ready(callback: () => void) {\n return this._readyPromise.then(callback);\n }\n\n destroy() {\n this._destroyed = true;\n this.sideEffect.flushAll();\n }\n\n onPlay = () => {\n this.slide.nextStep();\n };\n\n onNewPageIndex = (index: number) => {\n if (this._ready && index >= 0 && index < this._slideCount) {\n this.slide.renderSlide(index + 1);\n } else {\n this.setPage(this.slide.slideState.currentSlideIndex);\n }\n };\n\n onTogglePreview = () => {\n this.sidebar.set_active(!this.sidebar.get_active());\n };\n\n setReadonly(readonly: boolean) {\n this.slide.setInteractive(!readonly);\n this.sidebar.set_readonly(readonly);\n this.footer.set_readonly(readonly);\n }\n\n setPage(page: number) {\n this.sidebar.set_page_index(page - 1, true);\n this.footer.set_page_index(page - 1, true);\n }\n\n freeze() {\n if (this._destroyed) return;\n this._isFrozen = true;\n if (!this._ready) return;\n this.slide.frozen();\n this.events.emit(\"freeze\");\n }\n\n unfreeze() {\n if (this._destroyed) return;\n this._isFrozen = false;\n if (!this._ready) return;\n this.slide.release();\n this.events.emit(\"unfreeze\");\n }\n\n toPdf = async (progressCallback: (progress: number) => void) => {\n const MAX = 1920;\n const resizeCanvas = document.createElement(\"canvas\");\n const resizeCtx = resizeCanvas.getContext(\"2d\");\n const { slideCount, width, height } = this.slide;\n let pdfWidth = Math.floor(width);\n let pdfHeight = Math.floor(height);\n if (pdfWidth > MAX) {\n pdfWidth = MAX;\n pdfHeight = Math.floor((height * pdfWidth) / width);\n }\n if (pdfHeight > MAX) {\n pdfHeight = MAX;\n pdfWidth = Math.floor((width * pdfHeight) / height);\n }\n resizeCanvas.width = pdfWidth;\n resizeCanvas.height = pdfHeight;\n\n const whiteSnapshotCanvas = document.createElement(\"canvas\");\n whiteSnapshotCanvas.width = width;\n whiteSnapshotCanvas.height = height;\n const whiteCtx = whiteSnapshotCanvas.getContext(\"2d\");\n if (!whiteCtx || !this._getWhiteSnapshot || !resizeCtx) {\n return null;\n }\n\n const orientation = pdfWidth > pdfHeight ? \"l\" : \"p\";\n const { jsPDF } = await import(\"jspdf\");\n\n const pdf = new jsPDF({\n format: [pdfWidth, pdfHeight],\n orientation,\n compress: true,\n });\n\n for (let i = 1; i <= slideCount; i++) {\n const slideSnapshot = await this.slide.snapshotWithTimingEnd(i);\n\n if (slideSnapshot) {\n const img = document.createElement(\"img\");\n img.src = slideSnapshot;\n await new Promise(resolve => (img.onload = resolve));\n resizeCtx.drawImage(img, 0, 0, pdfWidth, pdfHeight);\n }\n whiteCtx.clearRect(0, 0, width, height);\n this._getWhiteSnapshot(i, whiteSnapshotCanvas, whiteCtx);\n try {\n const whiteSnapshot = whiteSnapshotCanvas.toDataURL(\"image/png\");\n const whiteImg = document.createElement(\"img\");\n whiteImg.src = whiteSnapshot;\n await new Promise(resolve => (whiteImg.onload = resolve));\n resizeCtx.drawImage(whiteImg, 0, 0, pdfWidth, pdfHeight);\n } catch (e) {\n // ignore\n }\n\n const outputDataUrl = resizeCanvas.toDataURL(\"image/jpeg\", 0.6);\n if (i > 1) {\n pdf.addPage();\n }\n pdf.addImage(outputDataUrl, \"JPEG\", 0, 0, pdfWidth, pdfHeight, \"\", \"FAST\");\n resizeCtx.clearRect(0, 0, pdfWidth, pdfHeight);\n progressCallback(Math.ceil((i / slideCount) * 100));\n }\n const dataUrl = pdf.output(\"arraybuffer\");\n const blob = new Blob([dataUrl]);\n const downloadUrl = URL.createObjectURL(blob);\n const element = document.createElement(\"a\");\n element.setAttribute(\"href\", downloadUrl);\n element.setAttribute(\"download\", `${this._slideTitle || \"snapshot\"}.pdf`);\n element.style.display = \"none\";\n document.body.appendChild(element);\n element.click();\n document.body.removeChild(element);\n window.postMessage({ type: \"@app-slide/_download_pdf_\", buf: dataUrl });\n };\n}\n","import type { AppContext } from \"@netless/window-manager\";\n\nexport interface ILogger {\n info(this: void, msg: string): void;\n}\n\nfunction getRoomLogger(context: AppContext) {\n return (context.displayer as unknown as { logger: ILogger }).logger;\n}\n\nexport class Logger implements ILogger {\n static active = new Set<string>();\n static roomLogger: ILogger | null = null;\n\n constructor(readonly context: AppContext | null) {\n if (context) {\n Logger.active.add(context.appId);\n Logger.roomLogger = getRoomLogger(context);\n }\n }\n\n info = (msg: string) => {\n if (Logger.roomLogger && this.context) {\n Logger.roomLogger.info(msg + ` (${this.context.appId})`);\n } else if (this.context) {\n console.debug(msg + ` (${this.context.appId})`);\n } else {\n console.debug(msg);\n }\n };\n\n destroy() {\n this.context && Logger.active.delete(this.context.appId);\n if (Logger.active.size === 0) {\n Logger.roomLogger = null;\n }\n }\n}\n","import type { AppContext, Storage, WhiteBoardView } from \"@netless/window-manager\";\nimport type { SideEffectManager } from \"side-effect-manager\";\nimport type { SlideViewer } from \"./SlideViewer\";\nimport type { Attributes } from \"./typings\";\n\nimport { get, wrap_class } from \"./utils\";\n\nexport interface ConnectParams {\n context: AppContext;\n storage: Storage<Attributes>;\n viewer: SlideViewer;\n sideEffect: SideEffectManager;\n logger: { info: (msg: string) => void };\n}\n\nexport function connect({ context, storage, viewer, sideEffect, logger }: ConnectParams) {\n const log = logger.info.bind(logger);\n\n let whiteboard: WhiteBoardView | null = null;\n\n viewer.prepare(({ width, height, slideCount }) => {\n if (context.destroyed) return;\n width && context.box.setStageRatio(height / width);\n whiteboard = context.createWhiteBoardView({ size: slideCount });\n whiteboard.setBaseRect({ width, height });\n\n viewer._slideTitle = context.box.title;\n viewer._getWhiteSnapshot = (\n index: number,\n canvas: HTMLCanvasElement,\n ctx: CanvasRenderingContext2D\n ) => {\n if (!whiteboard) {\n return null;\n }\n const scenePath = whiteboard.pageState.pages[index - 1];\n const { width, height } = whiteboard.view.size;\n canvas.width = width;\n canvas.height = height;\n whiteboard.view.screenshotToCanvas(ctx, scenePath, width, height, whiteboard.view.camera);\n };\n\n kick_start();\n });\n\n const { slide } = viewer;\n\n function dump_state(state: unknown = storage.state.state) {\n return JSON.stringify(state);\n }\n\n function kick_start() {\n if (storage.state.state) {\n log(\"[Slide] restore \" + dump_state());\n slide.setSlideState(storage.state.state);\n } else if (context.isAddApp) {\n log(\"[Slide] kick start\");\n slide.renderSlide(1);\n } else {\n log(\"[Slide] wait for restore\");\n const timeoutID = sideEffect.add(() => {\n const timer = setInterval(() => {\n if (!storage.state.state) {\n log(\"[Slide] timeout\");\n slide.renderSlide(1);\n }\n }, 15 * 1000);\n return () => clearInterval(timer);\n });\n const disposerID = sideEffect.push(\n storage.on(\"stateChanged\", () => {\n if (storage.state.state) {\n log(\"[Slide] restore \" + dump_state());\n slide.setSlideState(storage.state.state);\n sideEffect.flush(disposerID);\n sideEffect.flush(timeoutID);\n }\n })\n );\n }\n }\n\n // setup sync event\n slide.on(\"stateChange\", () => {\n if (storage.isWritable) {\n // log(\"[Slide] save state \" + dump_state(slide.slideState));\n storage.setState({ state: slide.slideState });\n }\n });\n slide.on(\"syncDispatch\", payload => {\n if (context.isWritable) {\n log(\"[Slide] dispatch \" + dump_state(get(payload, \"uuid\")));\n context.dispatchMagixEvent(\"syncDispatch\", payload);\n }\n });\n sideEffect.push(\n context.addMagixEventListener(\n \"syncDispatch\",\n ({ payload }) => {\n log(\"[Slide] receive \" + dump_state(get(payload, \"uuid\")));\n slide.emit(\"syncReceive\", payload);\n },\n { fireSelfEventAfterCommit: true }\n )\n );\n\n // save state\n slide.on(\"slideChange\", page => {\n if (context.isWritable && whiteboard) {\n log(\"[Slide] page to \" + page);\n whiteboard.jumpPage(page - 1);\n }\n });\n\n // handle ui events\n function disable_whiteboard() {\n if (whiteboard && whiteboard.view.divElement) {\n whiteboard.view.divElement.classList.add(wrap_class(\"wb-view-hidden\"));\n }\n }\n\n function enable_whiteboard() {\n if (whiteboard && whiteboard.view.divElement) {\n whiteboard.view.divElement.classList.remove(wrap_class(\"wb-view-hidden\"));\n }\n }\n\n viewer.setReadonly(!context.isWritable);\n sideEffect.push([\n context.emitter.on(\"writableChange\", () => viewer.setReadonly(!context.isWritable)),\n viewer.events.on(\"renderStart\", disable_whiteboard),\n viewer.events.on(\"renderEnd\", enable_whiteboard),\n ]);\n\n const isEditable = (el: EventTarget | null) => {\n if (!el) return false;\n const tagName = (el as HTMLElement).tagName;\n return tagName === \"INPUT\" || tagName === \"TEXTAREA\" || tagName === \"SELECT\";\n };\n\n sideEffect.addEventListener(window, \"keydown\", ev => {\n if (!ev || (ev.target as HTMLElement).className === \"telebox-quarantine-outer\") return;\n if (context.box.focus && !context.box.readonly && !isEditable(ev.target)) {\n if (ev.key === \"ArrowUp\" || ev.key === \"ArrowLeft\") {\n viewer.slide.prevStep();\n }\n if (ev.key === \"ArrowRight\" || ev.key === \"ArrowDown\") {\n viewer.slide.nextStep();\n }\n }\n });\n}\n","import type { SlideViewerOptions } from \"./SlideViewer\";\n\nimport { SlideViewer } from \"./SlideViewer\";\nimport { hc } from \"./utils\";\n\nexport function previewSlide(options: SlideViewerOptions & { container: HTMLElement }) {\n const { container, ...slideOptions } = options;\n const wrapper = hc(\"div\", \"preview-wrapper\");\n const viewer = new SlideViewer(slideOptions);\n wrapper.appendChild(document.createElement(\"style\")).textContent = SlideViewer.styles;\n wrapper.appendChild(viewer.$content);\n wrapper.appendChild(viewer.$footer);\n container.appendChild(wrapper);\n viewer.prepare(() => viewer.slide.renderSlide(1));\n return viewer;\n}\n\nif (import.meta.env.DEV) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (window as any).previewSlide = previewSlide;\n}\n","import type { NetlessApp } from \"@netless/window-manager\";\nimport type { SlideViewerOptions } from \"./SlideViewer\";\nimport type { AddHooks, AppOptions, Attributes, MagixEvents, SlideState } from \"./typings\";\n\nexport type { SlideState, AddHooks, AppOptions, Attributes, MagixEvents, SlideViewerOptions };\n\nimport { Slide } from \"@netless/slide\";\nimport { SideEffectManager } from \"side-effect-manager\";\n\nimport { DefaultUrl } from \"./constants\";\nimport { addHooks, refrigerator } from \"./Refrigerator\";\nimport { SlideViewer } from \"./SlideViewer\";\nimport { Logger } from \"./Logger\";\nimport { connect } from \"./connect\";\nimport { previewSlide } from \"./preview\";\nimport { make_bg_color, make_timestamp } from \"./utils\";\n\nexport { Slide, SlideViewer, refrigerator, addHooks, DefaultUrl, previewSlide };\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const usePlugin = /* @__PURE__ */ Slide.usePlugin.bind(Slide) as (plugin: any) => void;\n\nexport const version = __APP_VERSION__;\n\nconst SlideApp: NetlessApp<Attributes, MagixEvents, AppOptions, void> = {\n kind: \"Slide\",\n config: { enableShadowDOM: false },\n setup(context) {\n console.log(\"[Slide] setup @ \" + __APP_VERSION__ + \" (\" + context.appId + \")\");\n\n const logger = new Logger(context);\n logger.info(\"[Slide] setup @ \" + __APP_VERSION__);\n\n if (!context.attributes.taskId) {\n throw new Error(\"[Slide] no taskId\");\n }\n\n const storage = context.createStorage(\"slide\", context.attributes);\n\n const appOptions = context.getAppOptions() || {};\n const renderOptions = appOptions.renderOptions || {};\n\n const sideEffect = new SideEffectManager();\n\n // Create UI\n const viewer = new SlideViewer({\n interactive: true,\n mode: \"interactive\",\n enableGlobalClick: true,\n timestamp: make_timestamp(context),\n logger: appOptions.logger || logger,\n renderOptions: {\n minFPS: renderOptions.minFPS || 25,\n maxFPS: renderOptions.maxFPS || 30,\n autoFPS: renderOptions.autoFPS ?? true,\n autoResolution: renderOptions.autoResolution ?? true,\n resolution: renderOptions.resolution,\n maxResolutionLevel: renderOptions.maxResolutionLevel,\n transactionBgColor: renderOptions.transactionBgColor || make_bg_color(context.box.$content),\n },\n rtcAudio: appOptions.rtcAudio,\n useLocalCache: appOptions.useLocalCache,\n resourceTimeout: appOptions.resourceTimeout,\n loaderDelegate: appOptions.loaderDelegate,\n navigatorDelegate: appOptions.navigatorDelegate,\n fixedFrameSize: appOptions.fixedFrameSize,\n taskId: storage.state.taskId,\n url: storage.state.url,\n });\n\n // For debugging.\n Object.assign(viewer, { context, logger });\n\n sideEffect.push(refrigerator.set(context.appId, viewer, context.box));\n\n if (import.meta.env.DEV) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (window as any).slideViewer = viewer;\n }\n\n // Log more\n sideEffect.push(viewer.events.on(\"freeze\", () => logger.info(\"[Slide] freeze\")));\n sideEffect.push(viewer.events.on(\"unfreeze\", () => logger.info(\"[Slide] unfreeze\")));\n sideEffect.push(\n viewer.events.on(\"prepareError\", error =>\n logger.info(\"[Slide] fetch slide info failed: \" + error.message)\n )\n );\n sideEffect.push(\n viewer.events.on(\"renderError\", ({ error, index }) =>\n logger.info(\"[Slide] render failed \" + `[${index}]: ${error.message}`)\n )\n );\n\n // Mount UI\n context.box.mountStyles(SlideViewer.styles);\n context.box.mountStage(viewer.$slide);\n context.box.mountFooter(viewer.$footer);\n context.box.mountContent(viewer.$content);\n sideEffect.push(() => viewer.destroy());\n\n // Connect UI with Netless App\n connect({ context, storage, viewer, sideEffect, logger });\n\n context.emitter.on(\"destroy\", () => {\n logger.info(\"[Slide] destroy\");\n logger.destroy();\n sideEffect.flushAll();\n });\n\n return viewer;\n },\n};\n\nexport default SlideApp;\n"],"names":["SOUP","SOUP_LEN","ID_LEN","reusedIdCarrier","genUID","i","invoke","fn","e","SideEffectManager","disposer","disposerID","joinDisposers","executor","disposers","el","type","listener","options","handler","timeout","ticket","uid","class_name","DefaultUrl","Refrigerator","__publicField","appId","viewer","box","id","index","a","b","za","_a","zb","_b","refrigerator","addHooks","emitter","event","Remitter","eventName","eventData","listeners","listener2","onceListener","result","count","start","relayListener","name","colorName","isArrayish","obj","require$$0","concat","slice","swizzle","simpleSwizzleModule","args","results","len","arg","colorNames","require$$1","hasOwnProperty","reverseNames","cs","colorStringModule","string","prefix","val","model","abbr","hex","rgba","per","keyword","rgb","match","hexAlpha","i2","clamp","hsl","alpha","h","s","l","hwb","w","hexDouble","r","g","hsla","hwba","num","min","max","str","noop","tag","hc","set_class","append","parent","child","wrap_class","trim_slash","get","o","k","block","resolve","make_timestamp","context","room","player","make_bg_color","bg","color","ColorString","make_prefix","taskId","url","fetch_slide_info","imgSrc","jsonUrl","p1","image","p2","on_visibility_change","callback","sidebarSVG","namespace","NS","$svg","$path","arrowLeftSVG","playSVG","pauseSVG","arrowRightSVG","saveSVG","spinnerSVG","$animate","$progress","create_footer","new_page_index_callback","on_new_page_index","toggle_preview_callback","on_toggle_preview","play_callback","on_play","readonly","sidebar","page_index","page_count","$footer","$btnSidebar","$pageJumps","$btnPageBack","$btnPlay","returnPlayTimer","$btnPageNext","$pageNumber","$pageNumberInput","$totalPage","class_readonly","saveToPdf","on_save_to_pdf","progressCallback","p","spinnerIcon","saveIcon","progress","$saveBtn","set_readonly","readonly_","set_sidebar","sidebar_","set_page_index","page_index_","force","set_page_count","page_count_","runningOnBrowser","isBot","supportsIntersectionObserver","supportsClassList","isHiDpi","defaultSettings","getExtendedSettings","customSettings","createInstance","classObj","eventString","instance","autoInitialize","optionsItem","SRC","SRCSET","SIZES","POSTER","ORIGINALS","DATA","statusLoading","statusLoaded","statusApplied","statusEntered","statusError","statusNative","dataPrefix","statusDataName","getData","element","attribute","setData","value","attrName","getStatus","setStatus","status","resetStatus","hasEmptyStatus","hasStatusLoading","hasStatusError","hasStatusNative","statusesAfterLoading","hadStartedLoading","safeCallback","arg1","arg2","arg3","addClass","className","removeClass","addTempImage","deleteTempImage","getTempImage","unobserve","observer","resetObserver","unobserveEntered","settings","updateLoadingCount","delta","decreaseToLoadCount","setToLoadCount","isSomethingLoading","haveElementsToLoad","getSourceTags","parentTag","sourceTags","childTag","forEachPictureSource","forEachVideoSource","attrsSrc","attrsSrcPoster","attrsSrcSrcsetSizes","attrsData","hasOriginalAttrs","getOriginalAttrs","deleteOriginalAttrs","setOriginalsObject","attributes","originals","saveOriginalBackgroundStyle","setOrResetAttribute","restoreOriginalAttrs","restoreOriginalBgImage","manageApplied","manageLoading","setAttributeIfValue","setImageAttributes","setSourcesImg","imgEl","sourceTag","setSourcesIframe","iframe","setSourcesVideo","videoEl","sourceEl","setSourcesObject","object","setBackground","bg1xValue","bgHiDpiValue","bgDataValue","setMultiBackground","setImgsetBackground","bgImgSetDataValue","imgSetValues","bgImageValues","setSourcesFunctions","setSourcesNative","setSourcesFunction","setSources","elementsWithLoadEvent","hasLoadEvent","checkFinish","addEventListener","removeEventListener","hasEventListeners","addEventListeners","loadHandler","errorHandler","loadEventName","removeEventListeners","eventListeners","doneHandler","goingNative","addOneShotEventListeners","elementToListenTo","loadBackground","loadRegular","load","loadNative","removeImageAttributes","resetSourcesImg","restoreImg","restoreVideo","restoreIframe","iframeEl","restoreObject","objectEl","restoreFunctions","restoreAttributes","restoreFunction","resetClasses","restore","cancelLoading","entry","onEnter","dontLoad","onExit","tagsWithNativeLazy","shouldUseNative","loadAllNative","elements","isIntersecting","getObserverSettings","intersectionHandler","entries","observeElements","updateObserver","elementsToObserve","setObserver","toArray","nodeSet","queryElements","excludeManagedElements","hasError","filterErrorElements","getElementsToLoad","retryLazyLoad","setOnlineCheck","resetOnlineCheck","LazyLoad","givenNodeset","elementsToLoad","create_sidebar","destroyed","active","pages","class_preview_active","$content","$previewMask","ev","set_active","$preview","lazyload","active_","set_pages","pages_","page_class","page_name_class","page","pageIndex","$page","$name","$img","destroy","get_active","_SlideViewer","resizeCanvas","resizeCtx","slideCount","width","height","pdfWidth","pdfHeight","whiteSnapshotCanvas","whiteCtx","orientation","jsPDF","pdf","slideSnapshot","img","whiteSnapshot","whiteImg","outputDataUrl","dataUrl","blob","downloadUrl","visible","infoPromise","resolveInfo","preview","slide","_","error","readyPromise","resolveReady","Slide","SlideViewer","styles","getRoomLogger","_Logger","msg","Logger","connect","storage","sideEffect","logger","log","whiteboard","canvas","ctx","scenePath","kick_start","dump_state","state","timeoutID","timer","payload","disable_whiteboard","enable_whiteboard","isEditable","tagName","previewSlide","container","slideOptions","wrapper","usePlugin","version","SlideApp","appOptions","renderOptions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"main.js","sources":["../../../node_modules/.pnpm/side-effect-manager@1.2.2/node_modules/side-effect-manager/dist/index.mjs","../src/constants.ts","../src/Refrigerator.ts","../../../node_modules/.pnpm/remitter@0.2.17/node_modules/remitter/dist/main.mjs","../../../node_modules/.pnpm/color-name@1.1.4/node_modules/color-name/index.js","../../../node_modules/.pnpm/is-arrayish@0.3.2/node_modules/is-arrayish/index.js","../../../node_modules/.pnpm/simple-swizzle@0.2.2/node_modules/simple-swizzle/index.js","../../../node_modules/.pnpm/color-string@1.9.1/node_modules/color-string/index.js","../src/utils.ts","../src/SlideViewer/utils.ts","../src/icons/sidebar.ts","../src/icons/arrow-left.ts","../src/icons/play.ts","../src/icons/pause.ts","../src/icons/arrow-right.ts","../src/icons/save.ts","../src/icons/spinner.ts","../src/SlideViewer/footer.ts","../../../node_modules/.pnpm/vanilla-lazyload@17.8.5/node_modules/vanilla-lazyload/dist/lazyload.esm.js","../src/SlideViewer/sidebar.ts","../src/SlideViewer/index.ts","../src/Logger.ts","../src/connect.ts","../src/preview.ts","../src/index.ts"],"sourcesContent":["// src/gen-uid.ts\nvar SOUP = \"!#%()*+,-./:;=?@[]^_`{|}~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\nvar SOUP_LEN = 87;\nvar ID_LEN = 20;\nvar reusedIdCarrier = [];\nvar genUID = () => {\n for (let i = 0; i < ID_LEN; i++) {\n reusedIdCarrier[i] = SOUP.charAt(Math.random() * SOUP_LEN);\n }\n return reusedIdCarrier.join(\"\");\n};\n\n// src/utils.ts\nfunction invoke(fn) {\n try {\n return fn();\n } catch (e) {\n console.error(e);\n }\n}\n\n// src/side-effect-manager.ts\nvar SideEffectManager = class {\n constructor() {\n /**\n * @alias addDisposer\n * Add a disposer directly.\n * @param disposer a disposer or a list of disposers\n * @param disposerID Optional id for the disposer\n * @returns disposerID\n */\n this.push = this.addDisposer;\n /**\n * All disposers. Use this only when you know what you are doing.\n */\n this.disposers = /* @__PURE__ */ new Map();\n }\n /**\n * Add a disposer directly.\n * @param disposer a disposer or a list of disposers\n * @param disposerID Optional id for the disposer\n * @returns disposerID\n */\n addDisposer(disposer, disposerID = this.genUID()) {\n this.flush(disposerID);\n this.disposers.set(\n disposerID,\n Array.isArray(disposer) ? joinDisposers(disposer) : disposer\n );\n return disposerID;\n }\n /**\n * Add a side effect.\n * @param executor Executes side effect. Return a disposer or a list of disposers. Returns null or false to ignore.\n * @param disposerID Optional id for the disposer\n * @returns disposerID\n */\n add(executor, disposerID = this.genUID()) {\n const disposers = executor();\n return disposers ? this.addDisposer(disposers, disposerID) : disposerID;\n }\n addEventListener(el, type, listener, options, disposerID = this.genUID()) {\n el.addEventListener(type, listener, options);\n this.addDisposer(\n () => el.removeEventListener(type, listener, options),\n disposerID\n );\n return disposerID;\n }\n /**\n * Sugar for setTimeout.\n * @param handler\n * @param timeout\n * @param disposerID Optional id for the disposer\n * @returns disposerID\n */\n setTimeout(handler, timeout, disposerID = this.genUID()) {\n const ticket = window.setTimeout(() => {\n this.remove(disposerID);\n handler();\n }, timeout);\n return this.addDisposer(() => window.clearTimeout(ticket), disposerID);\n }\n /**\n * Sugar for setInterval.\n * @param handler\n * @param timeout\n * @param disposerID Optional id for the disposer\n * @returns disposerID\n */\n setInterval(handler, timeout, disposerID = this.genUID()) {\n const ticket = window.setInterval(handler, timeout);\n return this.addDisposer(() => window.clearInterval(ticket), disposerID);\n }\n /**\n * Remove but not run the disposer. Do nothing if not found.\n * @param disposerID\n */\n remove(disposerID) {\n const disposer = this.disposers.get(disposerID);\n this.disposers.delete(disposerID);\n return disposer;\n }\n /**\n * Remove and run the disposer. Do nothing if not found.\n * @param disposerID\n */\n flush(disposerID) {\n const disposer = this.remove(disposerID);\n if (disposer) {\n disposer();\n }\n }\n /**\n * Remove and run all of the disposers.\n */\n flushAll() {\n this.disposers.forEach(invoke);\n this.disposers.clear();\n }\n genUID() {\n let uid;\n do {\n uid = genUID();\n } while (this.disposers.has(uid));\n return uid;\n }\n};\nfunction joinDisposers(disposers) {\n return () => disposers.forEach(invoke);\n}\n\n// src/async-side-effect-manager.ts\nvar AsyncSideEffectManager = class {\n constructor() {\n /**\n * @alias addDisposer\n * Add a disposer directly.\n * @param disposer a disposer\n * @param disposerID Optional id for the disposer\n * @returns disposerID\n */\n this.push = this.addDisposer;\n /**\n * @returns a Promise resolved when current tasks are finished.\n */\n this.finished = Promise.resolve();\n /**\n * All disposers. Use this only when you know what you are doing.\n */\n this.disposers = /* @__PURE__ */ new Map();\n this._n = /* @__PURE__ */ new Map();\n this._i = /* @__PURE__ */ new Set();\n }\n /**\n * Add a side effect.\n * @param executor Execute side effect. Return a disposer or a disposer array. Return null or false to ignore.\n * @param disposerID Optional id for the disposer\n * @returns disposerID\n */\n add(executor, disposerID = this.genUID()) {\n if (this._i.has(disposerID)) {\n this._n.set(disposerID, () => this._a(executor, disposerID));\n } else {\n this._a(executor, disposerID);\n }\n return disposerID;\n }\n async _a(executor, disposerID) {\n this._s(disposerID);\n const disposer = this.remove(disposerID);\n if (disposer) {\n try {\n await disposer();\n } catch (e) {\n console.error(e);\n }\n }\n try {\n const disposers = await executor();\n if (disposers) {\n this.disposers.set(\n disposerID,\n Array.isArray(disposers) ? joinAsyncDisposers(disposers) : disposers\n );\n }\n } catch (e) {\n console.error(e);\n }\n this._e(disposerID);\n const task = this._n.get(disposerID);\n if (task) {\n this._n.delete(disposerID);\n task();\n }\n }\n /**\n * Add a disposer directly.\n * @param disposer a disposer\n * @param disposerID Optional id for the disposer\n * @returns disposerID\n */\n addDisposer(disposer, disposerID = this.genUID()) {\n return this.add(() => disposer, disposerID);\n }\n /**\n * Remove but not run the disposer. Do nothing if not found.\n * @param disposerID\n */\n remove(disposerID) {\n const disposer = this.disposers.get(disposerID);\n this.disposers.delete(disposerID);\n return disposer;\n }\n /**\n * Remove and run the disposer. Do nothing if not found.\n * @param disposerID\n */\n flush(disposerID) {\n if (this._i.has(disposerID)) {\n this._n.set(disposerID, () => this._f(disposerID));\n } else {\n this._f(disposerID);\n }\n }\n async _f(disposerID) {\n const disposer = this.remove(disposerID);\n if (disposer) {\n this._s(disposerID);\n try {\n await disposer();\n } catch (e) {\n console.error(e);\n }\n this._e(disposerID);\n }\n const task = this._n.get(disposerID);\n if (task) {\n this._n.delete(disposerID);\n task();\n }\n }\n /**\n * Remove and run all of the disposers.\n */\n flushAll() {\n this.disposers.forEach((_, disposerID) => this.flush(disposerID));\n }\n genUID() {\n let uid;\n do {\n uid = genUID();\n } while (this.disposers.has(uid));\n return uid;\n }\n _s(disposerID) {\n this._i.add(disposerID);\n if (!this._r) {\n this.finished = new Promise((resolve) => {\n this._r = resolve;\n });\n }\n }\n _e(disposerID) {\n this._i.delete(disposerID);\n if (this._r && this._i.size <= 0 && this._n.size <= 0) {\n this._r();\n this._r = void 0;\n }\n }\n};\nfunction joinAsyncDisposers(disposers) {\n return () => Promise.all(disposers.map(invoke));\n}\n\n// src/disposable.ts\nvar Disposable = class {\n constructor() {\n /**\n * @alias addDisposer\n * Add a disposer directly.\n * @param disposer a disposer or a list of disposers\n */\n this.push = this.addDisposer;\n /**\n * All disposers. Use this only when you know what you are doing.\n */\n this.disposers = /* @__PURE__ */ new Set();\n }\n /**\n * Add a disposer directly.\n * @param disposers a disposer or a list of disposers\n */\n addDisposer(disposers) {\n if (Array.isArray(disposers)) {\n disposers.forEach((disposer) => {\n this.disposers.add(disposer);\n });\n } else {\n this.disposers.add(disposers);\n }\n }\n /**\n * Add a side effect.\n * @param executor Executes side effect. Return a disposer or a list of disposers. Returns null or false to ignore.\n */\n add(executor) {\n const disposers = executor();\n if (disposers) {\n this.push(disposers);\n }\n }\n addEventListener(el, type, listener, options) {\n el.addEventListener(type, listener, options);\n const disposer = () => el.removeEventListener(type, listener, options);\n this.push(disposer);\n return disposer;\n }\n /**\n * Sugar for setTimeout.\n * @param handler\n * @param timeout\n * @returns ticket\n */\n setTimeout(handler, timeout) {\n const ticket = window.setTimeout(() => {\n this.remove(disposer);\n handler();\n }, timeout);\n const disposer = () => window.clearTimeout(ticket);\n this.push(disposer);\n return disposer;\n }\n /**\n * Sugar for setInterval.\n * @param handler\n * @param timeout\n * @returns ticket\n */\n setInterval(handler, timeout) {\n const ticket = setInterval(handler, timeout);\n const disposer = () => clearInterval(ticket);\n this.push(disposer);\n return disposer;\n }\n /**\n * Remove but not run the disposer. Do nothing if not found.\n * @param disposer\n */\n remove(disposer) {\n this.disposers.delete(disposer);\n }\n /**\n * Remove and run the disposer. Do nothing if not found.\n * @param disposer\n */\n flush(disposer) {\n this.remove(disposer);\n disposer();\n }\n /**\n * Remove and run all of the disposers.\n */\n flushAll() {\n this.disposers.forEach(invoke);\n this.disposers.clear();\n }\n};\n\nexport { AsyncSideEffectManager, Disposable, SideEffectManager, genUID, joinAsyncDisposers, joinDisposers };\n","export const class_name = \"netless-app-slide\";\n\nexport const DefaultUrl = \"https://convertcdn.netless.link/dynamicConvert\";\n","import type { ReadonlyTeleBox } from \"@netless/window-manager\";\nimport type { SlideViewer } from \"./SlideViewer\";\nimport type { AddHooks } from \"./typings\";\n\nexport class Refrigerator {\n threshold = 2;\n\n private _map = new Map<string, SlideViewer>();\n private _box = new Map<string, ReadonlyTeleBox>();\n private _queue: string[] = [];\n\n set(appId: string, viewer: SlideViewer, box: ReadonlyTeleBox) {\n this._map.set(appId, viewer);\n this._box.set(appId, box);\n if (!this._queue.includes(appId)) {\n this._queue.unshift(appId);\n }\n this._refresh();\n return () => {\n this.delete(appId);\n };\n }\n\n delete(appId: string) {\n this._map.delete(appId);\n this._box.delete(appId);\n this._queue = this._queue.filter(id => id !== appId);\n this._refresh();\n }\n\n focus(appId: string) {\n const index = this._queue.indexOf(appId);\n if (index >= 0) {\n this._queue.splice(index, 1);\n }\n this._queue.unshift(appId);\n this._refresh();\n }\n\n private _refresh() {\n let viewer: SlideViewer | undefined;\n // queue = [5, 4, 3, 2, 1]\n this._queue.sort((a, b) => {\n const za = this._box.get(a)?.zIndex ?? 0;\n const zb = this._box.get(b)?.zIndex ?? 0;\n return -(za - zb);\n });\n this._queue.forEach((appId, i) => {\n if (!(viewer = this._map.get(appId))) return;\n if (i < this.threshold) {\n viewer.unfreeze();\n } else {\n viewer.freeze();\n }\n });\n if (import.meta.env.DEV) {\n console.log(\n \"[Slide] refrigerator._refresh\",\n `[${this._queue.slice(0, this.threshold)}]`,\n `[${this._queue.slice(this.threshold)}]`\n );\n }\n }\n}\n\nexport const refrigerator = new Refrigerator();\nif (import.meta.env.DEV) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (window as any).refrigerator = refrigerator;\n}\n\nexport const addHooks: AddHooks = function addHooks(emitter) {\n emitter.on(\"focus\", event => {\n refrigerator.focus(event.appId);\n });\n};\n","// src/constants.ts\nvar ANY_EVENT = Symbol.for(\"$\\u2009ANY_EVENT\\u2009$\");\n\n// src/utils.ts\nvar tryCall = (fn, arg) => {\n try {\n return fn(arg);\n } catch (e) {\n console.error(e);\n }\n};\nvar noop = () => {\n};\n\n// src/relay.ts\nvar startRelay = (listener, remitter) => {\n listener.a = tryCall(listener.c, remitter) || noop;\n};\nvar tryStartAllRelay = (listeners, remitter) => {\n for (const listener of listeners) {\n if (!listener.a) {\n if (\n /*\n Sugar for\n ```\n listener.eventName_ === ANY_EVENT\n ? remitter.count() > 0\n : remitter.count(listener.eventName_) > 0 ||\n remitter.count(ANY_EVENT) > 0\n ```\n `tryStartAll_` will always be called when remitter.count() > 0\n */\n listener.b === ANY_EVENT || remitter.count(listener.b) > 0 || remitter.count(ANY_EVENT) > 0\n ) {\n startRelay(listener, remitter);\n }\n }\n }\n};\nvar stopRelay = (listener) => {\n if (listener.a) {\n tryCall(listener.a);\n listener.a = null;\n }\n};\nvar tryStopAllRelay = (listeners, remitter) => {\n for (const listener of listeners) {\n if (listener.a) {\n if (listener.b === ANY_EVENT ? remitter.count() <= 0 : remitter.count(ANY_EVENT) <= 0 && remitter.count(listener.b) <= 0) {\n stopRelay(listener);\n }\n }\n }\n};\n\n// node_modules/.pnpm/@wopjs+disposable@0.0.9/node_modules/@wopjs/disposable/dist/index.mjs\nvar invoke = (fn) => {\n try {\n fn();\n } catch (e) {\n console.error(e);\n }\n};\nvar abortable = (disposer) => {\n const abortable2 = () => {\n if (disposer) {\n invoke(disposer);\n disposer = null;\n }\n abortable2.abortable();\n };\n abortable2.dispose = abortable2;\n abortable2.abortable = abortable$abortable;\n return abortable2;\n};\nfunction abortable$abortable(onDispose) {\n if (this._o) {\n invoke(this._o);\n }\n this._o = onDispose;\n}\n\n// src/remitter.ts\nvar ReadonlyRemitter = class {\n ANY_EVENT = ANY_EVENT;\n _l = /* @__PURE__ */ new Map();\n _r;\n _o;\n emit(event, data) {\n const listeners = this._l.get(event);\n if (listeners) {\n for (const listener of listeners) {\n tryCall(listener, data);\n }\n }\n if (event !== ANY_EVENT && this.count(ANY_EVENT)) {\n this.emit(ANY_EVENT, {\n event,\n data\n });\n }\n }\n on(eventName, listener) {\n let listeners = this._l.get(eventName);\n if (!listeners) {\n listeners = /* @__PURE__ */ new Set();\n this._l.set(eventName, listeners);\n }\n listeners.add(listener);\n if (this._r && listeners.size === 1) {\n tryStartAllRelay(\n this._r,\n this\n );\n }\n return () => {\n this.off(eventName, listener);\n };\n }\n once(eventName, listener) {\n const off = abortable(() => this.off(eventName, onceListener));\n const onceListener = (eventData) => (off(), listener(eventData));\n (this._o || (this._o = /* @__PURE__ */ new WeakMap())).set(\n listener,\n onceListener\n );\n this.on(eventName, onceListener);\n return off;\n }\n /**\n * Remove a listener from the eventName.\n */\n off(eventName, listener) {\n const listeners = this._l.get(eventName);\n if (listeners) {\n let result = listeners.delete(listener);\n const onceListener = this._o?.get(listener);\n if (onceListener) {\n result = listeners.delete(onceListener) || result;\n }\n if (listeners.size <= 0) {\n this._l.delete(eventName);\n if (this._r) {\n tryStopAllRelay(this._r, this);\n }\n }\n return result;\n }\n return false;\n }\n clear(eventName) {\n if (eventName) {\n this._l.get(eventName)?.clear();\n } else {\n this._l.clear();\n }\n if (this._r) {\n tryStopAllRelay(this._r, this);\n }\n }\n /**\n * Returns the number of listeners for the eventName.\n * @param eventName If empty returns the number of listeners for all events.\n * @returns\n */\n count(eventName) {\n if (eventName) {\n return this._l.get(eventName)?.size || 0;\n } else {\n let count = 0;\n for (const listeners of this._l.values()) {\n count += listeners.size;\n }\n return count;\n }\n }\n /**\n * Start a side effect when the eventName has a first listener.\n * Dispose the side effect when the eventName has no listeners.\n * For example tap into other events.\n *\n * remit `ANY_EVENT` will be started when any event is listened.\n *\n * @param eventName\n * @param start A function that is called when listener count if `eventName` grows from 0 to 1. Returns a disposer when listener count if `eventName` drops from 1 to 0.\n */\n remit(eventName, start) {\n const relayListener = {\n c: start,\n b: eventName\n };\n (this._r || (this._r = /* @__PURE__ */ new Set())).add(\n relayListener\n );\n if (this.count(eventName) > 0 || this.count(ANY_EVENT) > 0) {\n startRelay(relayListener, this);\n }\n return () => {\n this._r?.delete(relayListener);\n stopRelay(relayListener);\n };\n }\n /**\n * Dispose all listeners.\n */\n dispose() {\n this.clear();\n this._r?.clear();\n }\n};\nvar Remitter = class extends ReadonlyRemitter {\n constructor() {\n super();\n }\n emit = super.emit;\n remit = super.remit;\n};\n\nexport { ANY_EVENT, ReadonlyRemitter, Remitter };\n","'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","module.exports = function isArrayish(obj) {\n\tif (!obj || typeof obj === 'string') {\n\t\treturn false;\n\t}\n\n\treturn obj instanceof Array || Array.isArray(obj) ||\n\t\t(obj.length >= 0 && (obj.splice instanceof Function ||\n\t\t\t(Object.getOwnPropertyDescriptor(obj, (obj.length - 1)) && obj.constructor.name !== 'String')));\n};\n","'use strict';\n\nvar isArrayish = require('is-arrayish');\n\nvar concat = Array.prototype.concat;\nvar slice = Array.prototype.slice;\n\nvar swizzle = module.exports = function swizzle(args) {\n\tvar results = [];\n\n\tfor (var i = 0, len = args.length; i < len; i++) {\n\t\tvar arg = args[i];\n\n\t\tif (isArrayish(arg)) {\n\t\t\t// http://jsperf.com/javascript-array-concat-vs-push/98\n\t\t\tresults = concat.call(results, slice.call(arg));\n\t\t} else {\n\t\t\tresults.push(arg);\n\t\t}\n\t}\n\n\treturn results;\n};\n\nswizzle.wrap = function (fn) {\n\treturn function () {\n\t\treturn fn(swizzle(arguments));\n\t};\n};\n","/* MIT license */\nvar colorNames = require('color-name');\nvar swizzle = require('simple-swizzle');\nvar hasOwnProperty = Object.hasOwnProperty;\n\nvar reverseNames = Object.create(null);\n\n// create a list of reverse color names\nfor (var name in colorNames) {\n\tif (hasOwnProperty.call(colorNames, name)) {\n\t\treverseNames[colorNames[name]] = name;\n\t}\n}\n\nvar cs = module.exports = {\n\tto: {},\n\tget: {}\n};\n\ncs.get = function (string) {\n\tvar prefix = string.substring(0, 3).toLowerCase();\n\tvar val;\n\tvar model;\n\tswitch (prefix) {\n\t\tcase 'hsl':\n\t\t\tval = cs.get.hsl(string);\n\t\t\tmodel = 'hsl';\n\t\t\tbreak;\n\t\tcase 'hwb':\n\t\t\tval = cs.get.hwb(string);\n\t\t\tmodel = 'hwb';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tval = cs.get.rgb(string);\n\t\t\tmodel = 'rgb';\n\t\t\tbreak;\n\t}\n\n\tif (!val) {\n\t\treturn null;\n\t}\n\n\treturn {model: model, value: val};\n};\n\ncs.get.rgb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar abbr = /^#([a-f0-9]{3,4})$/i;\n\tvar hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i;\n\tvar rgba = /^rgba?\\(\\s*([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/;\n\tvar per = /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/;\n\tvar keyword = /^(\\w+)$/;\n\n\tvar rgb = [0, 0, 0, 1];\n\tvar match;\n\tvar i;\n\tvar hexAlpha;\n\n\tif (match = string.match(hex)) {\n\t\thexAlpha = match[2];\n\t\tmatch = match[1];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\t// https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19\n\t\t\tvar i2 = i * 2;\n\t\t\trgb[i] = parseInt(match.slice(i2, i2 + 2), 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = parseInt(hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(abbr)) {\n\t\tmatch = match[1];\n\t\thexAlpha = match[3];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = parseInt(match[i] + match[i], 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(rgba)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = parseInt(match[i + 1], 0);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\tif (match[5]) {\n\t\t\t\trgb[3] = parseFloat(match[4]) * 0.01;\n\t\t\t} else {\n\t\t\t\trgb[3] = parseFloat(match[4]);\n\t\t\t}\n\t\t}\n\t} else if (match = string.match(per)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\tif (match[5]) {\n\t\t\t\trgb[3] = parseFloat(match[4]) * 0.01;\n\t\t\t} else {\n\t\t\t\trgb[3] = parseFloat(match[4]);\n\t\t\t}\n\t\t}\n\t} else if (match = string.match(keyword)) {\n\t\tif (match[1] === 'transparent') {\n\t\t\treturn [0, 0, 0, 0];\n\t\t}\n\n\t\tif (!hasOwnProperty.call(colorNames, match[1])) {\n\t\t\treturn null;\n\t\t}\n\n\t\trgb = colorNames[match[1]];\n\t\trgb[3] = 1;\n\n\t\treturn rgb;\n\t} else {\n\t\treturn null;\n\t}\n\n\tfor (i = 0; i < 3; i++) {\n\t\trgb[i] = clamp(rgb[i], 0, 255);\n\t}\n\trgb[3] = clamp(rgb[3], 0, 1);\n\n\treturn rgb;\n};\n\ncs.get.hsl = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar hsl = /^hsla?\\(\\s*([+-]?(?:\\d{0,3}\\.)?\\d+)(?:deg)?\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*(?:[,|\\/]\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/;\n\tvar match = string.match(hsl);\n\n\tif (match) {\n\t\tvar alpha = parseFloat(match[4]);\n\t\tvar h = ((parseFloat(match[1]) % 360) + 360) % 360;\n\t\tvar s = clamp(parseFloat(match[2]), 0, 100);\n\t\tvar l = clamp(parseFloat(match[3]), 0, 100);\n\t\tvar a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1);\n\n\t\treturn [h, s, l, a];\n\t}\n\n\treturn null;\n};\n\ncs.get.hwb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar hwb = /^hwb\\(\\s*([+-]?\\d{0,3}(?:\\.\\d+)?)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/;\n\tvar match = string.match(hwb);\n\n\tif (match) {\n\t\tvar alpha = parseFloat(match[4]);\n\t\tvar h = ((parseFloat(match[1]) % 360) + 360) % 360;\n\t\tvar w = clamp(parseFloat(match[2]), 0, 100);\n\t\tvar b = clamp(parseFloat(match[3]), 0, 100);\n\t\tvar a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1);\n\t\treturn [h, w, b, a];\n\t}\n\n\treturn null;\n};\n\ncs.to.hex = function () {\n\tvar rgba = swizzle(arguments);\n\n\treturn (\n\t\t'#' +\n\t\thexDouble(rgba[0]) +\n\t\thexDouble(rgba[1]) +\n\t\thexDouble(rgba[2]) +\n\t\t(rgba[3] < 1\n\t\t\t? (hexDouble(Math.round(rgba[3] * 255)))\n\t\t\t: '')\n\t);\n};\n\ncs.to.rgb = function () {\n\tvar rgba = swizzle(arguments);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')'\n\t\t: 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')';\n};\n\ncs.to.rgb.percent = function () {\n\tvar rgba = swizzle(arguments);\n\n\tvar r = Math.round(rgba[0] / 255 * 100);\n\tvar g = Math.round(rgba[1] / 255 * 100);\n\tvar b = Math.round(rgba[2] / 255 * 100);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)'\n\t\t: 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')';\n};\n\ncs.to.hsl = function () {\n\tvar hsla = swizzle(arguments);\n\treturn hsla.length < 4 || hsla[3] === 1\n\t\t? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)'\n\t\t: 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')';\n};\n\n// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n// (hwb have alpha optional & 1 is default value)\ncs.to.hwb = function () {\n\tvar hwba = swizzle(arguments);\n\n\tvar a = '';\n\tif (hwba.length >= 4 && hwba[3] !== 1) {\n\t\ta = ', ' + hwba[3];\n\t}\n\n\treturn 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')';\n};\n\ncs.to.keyword = function (rgb) {\n\treturn reverseNames[rgb.slice(0, 3)];\n};\n\n// helpers\nfunction clamp(num, min, max) {\n\treturn Math.min(Math.max(min, num), max);\n}\n\nfunction hexDouble(num) {\n\tvar str = Math.round(num).toString(16).toUpperCase();\n\treturn (str.length < 2) ? '0' + str : str;\n}\n","import type { AppContext, Player } from \"@netless/window-manager\";\n\nimport ColorString from \"color-string\";\nimport { class_name } from \"./constants\";\n\nexport function noop() {\n return;\n}\n\nexport function h<K extends keyof HTMLElementTagNameMap>(tag: K) {\n return document.createElement(tag);\n}\n\nexport function hc<K extends keyof HTMLElementTagNameMap>(tag: K, name: string) {\n const el = h(tag);\n set_class(el, name);\n return el;\n}\n\nexport function append(parent: HTMLElement, child: HTMLElement) {\n return parent.appendChild(child);\n}\n\nexport function wrap_class(name: string) {\n return `${class_name}-${name}`;\n}\n\nexport function set_class(el: HTMLElement, name: string) {\n el.className = wrap_class(name);\n}\n\nexport function trim_slash(s: string) {\n return s.endsWith(\"/\") ? s.slice(0, -1) : s;\n}\n\nexport function get(o: unknown, k: string): unknown {\n if (typeof o === \"object\" && o !== null) return (o as Record<string, unknown>)[k];\n}\n\nexport function block<T = void>(): [p: Promise<T>, resolve: (t: T) => void] {\n let resolve!: (t: T) => void;\n const p = new Promise<T>(r => {\n resolve = r;\n });\n return [p, resolve];\n}\n\nexport function make_timestamp(context: AppContext): () => number {\n const room = context.room;\n const player = context.displayer as Player;\n if (room) {\n return () => room.calibrationTimestamp;\n } else if (player) {\n return () => player.beginTimestamp + player.progressTime;\n } else {\n return () => Date.now();\n }\n}\n\nexport function make_bg_color(el: HTMLElement): string {\n try {\n let bg = window.getComputedStyle(el).backgroundColor;\n if (bg !== \"rgba(0, 0, 0, 0)\" && bg !== \"transparent\") {\n bg = hex(bg);\n console.log(\"[Slide] guess bg color:\", bg);\n return bg;\n }\n if (el.parentElement) {\n return make_bg_color(el.parentElement);\n }\n } catch {\n // ignored\n }\n return \"#ffffff\";\n}\n\n// https://github.com/Qix-/color-convert/blob/8dfdbbc6b46fa6a305bf394d942cc1b08e23fca5/conversions.js#L616\nexport function hex(color: string): string {\n const result = ColorString.get(color);\n if (result && result.model === \"rgb\") {\n const args = result.value;\n\n const integer =\n ((Math.round(args[0]) & 0xff) << 16) +\n ((Math.round(args[1]) & 0xff) << 8) +\n (Math.round(args[2]) & 0xff);\n\n const string = integer.toString(16);\n return \"#\" + \"000000\".substring(string.length) + string;\n } else {\n return color;\n }\n}\n","import type { PreviewInfo, SlideAttributes, SlideInfo } from \"./typings\";\n\nimport { DefaultUrl } from \"../constants\";\nimport { noop, trim_slash } from \"../utils\";\n\nexport function make_prefix(taskId: string, url?: string) {\n return `${trim_slash(url || DefaultUrl)}/${taskId}`;\n}\n\nexport async function fetch_slide_info({ taskId, url }: SlideAttributes): Promise<{\n preview: PreviewInfo | null;\n slide: SlideInfo;\n}> {\n const prefix = make_prefix(taskId, url);\n const imgSrc = `${prefix}/preview/1.png`;\n const jsonUrl = `${prefix}/jsonOutput/slide-1.json`;\n\n const p1 = new Promise<PreviewInfo | null>(resolve => {\n const image = new Image();\n image.onload = () => resolve(image);\n image.onerror = () => resolve(null);\n image.src = imgSrc;\n });\n\n const p2: Promise<SlideInfo> = fetch(jsonUrl).then(r => r.json());\n\n return { preview: await p1, slide: await p2 };\n}\n\nexport function on_visibility_change(callback: (visible: boolean) => void) {\n if (typeof document !== \"undefined\") {\n const listener = () => callback(document.visibilityState === \"visible\");\n document.addEventListener(\"visibilitychange\", listener);\n return () => document.removeEventListener(\"visibilitychange\", listener);\n }\n return noop;\n}\n","export function sidebarSVG(namespace: string): SVGElement {\n const NS = \"http://www.w3.org/2000/svg\";\n\n const $svg = document.createElementNS(NS, \"svg\");\n $svg.setAttribute(\"class\", `${namespace}-footer-icon-sidebar`);\n $svg.setAttribute(\"viewBox\", \"0 0 64 64\");\n\n const $path = document.createElementNS(NS, \"path\");\n $path.setAttribute(\"fill\", \"currentColor\");\n $path.setAttribute(\n \"d\",\n \"M50 8H14c-3.309 0-6 2.691-6 6v36c0 3.309 2.691 6 6 6h36c3.309 0 6-2.691 6-6V14c0-3.309-2.691-6-6-6zM12 50V14c0-1.103.897-2 2-2h8v40h-8c-1.103 0-2-.897-2-2zm40 0c0 1.103-.897 2-2 2H26V12h24c1.103 0 2 .897 2 2z\"\n );\n\n $svg.appendChild($path);\n\n return $svg;\n}\n","export function arrowLeftSVG(namespace: string): SVGElement {\n const NS = \"http://www.w3.org/2000/svg\";\n\n const $svg = document.createElementNS(NS, \"svg\");\n $svg.setAttribute(\"class\", `${namespace}-footer-icon-arrow-left`);\n $svg.setAttribute(\"viewBox\", \"0 0 500 500\");\n\n const $path = document.createElementNS(NS, \"path\");\n $path.setAttribute(\"fill\", \"currentColor\");\n $path.setAttribute(\n \"d\",\n \"M177.81 249.959L337.473 90.295c2.722-2.865 2.651-7.378-.143-10.1-2.793-2.65-7.163-2.65-9.956 0l-164.75 164.75c-2.793 2.793-2.793 7.306 0 10.1l164.75 164.75c2.865 2.722 7.378 2.65 10.099-.143 2.651-2.794 2.651-7.163 0-9.957L177.809 249.959z\"\n );\n\n $svg.appendChild($path);\n\n return $svg;\n}\n","export function playSVG(namespace: string): SVGElement {\n const NS = \"http://www.w3.org/2000/svg\";\n\n const $svg = document.createElementNS(NS, \"svg\");\n $svg.setAttribute(\"class\", `${namespace}-footer-icon-play`);\n $svg.setAttribute(\"viewBox\", \"0 0 500 500\");\n\n const $path = document.createElementNS(NS, \"path\");\n $path.setAttribute(\"fill\", \"currentColor\");\n $path.setAttribute(\n \"d\",\n \"M418.158 257.419L174.663 413.33c-6.017 3.919-15.708 3.772-21.291-.29-2.791-2.018-4.295-4.483-4.295-7.084V94.109c0-5.65 6.883-10.289 15.271-10.289 4.298 0 8.391 1.307 11.181 3.332l242.629 155.484c6.016 3.917 6.451 10.292.649 14.491-.216.154-.432.154-.649.292zM170.621 391.288l223.116-141.301L170.71 107.753l-.089 283.535z\"\n );\n\n $svg.appendChild($path);\n\n return $svg;\n}\n","export function pauseSVG(namespace: string): SVGElement {\n const NS = \"http://www.w3.org/2000/svg\";\n\n const $svg = document.createElementNS(NS, \"svg\");\n $svg.setAttribute(\"class\", `${namespace}-footer-icon-pause`);\n $svg.setAttribute(\"viewBox\", \"0 0 500 500\");\n\n const $path = document.createElementNS(NS, \"path\");\n $path.setAttribute(\"fill\", \"currentColor\");\n $path.setAttribute(\n \"d\",\n \"M312.491 78.261c0-6.159 4.893-11.213 11.04-11.213 6.158 0 11.211 5.054 11.211 11.213v343.478c0 6.159-5.053 11.213-11.211 11.213-6.147 0-11.04-5.054-11.04-11.213V78.261zM165.257 78.261c0-6.159 4.893-11.213 11.04-11.213 6.158 0 11.211 5.054 11.211 11.213v343.478c0 6.159-5.053 11.213-11.211 11.213-6.147 0-11.04-5.054-11.04-11.213V78.261z\"\n );\n\n $svg.appendChild($path);\n\n return $svg;\n}\n","export function arrowRightSVG(namespace: string): SVGElement {\n const NS = \"http://www.w3.org/2000/svg\";\n\n const $svg = document.createElementNS(NS, \"svg\");\n $svg.setAttribute(\"class\", `${namespace}-footer-icon-arrow-right`);\n $svg.setAttribute(\"viewBox\", \"0 0 500 500\");\n\n const $path = document.createElementNS(NS, \"path\");\n $path.setAttribute(\"fill\", \"currentColor\");\n $path.setAttribute(\n \"d\",\n \"M322.19 250.041L162.527 409.705c-2.722 2.865-2.651 7.378.143 10.1 2.793 2.65 7.163 2.65 9.956 0l164.75-164.75c2.793-2.793 2.793-7.306 0-10.1l-164.75-164.75c-2.865-2.722-7.378-2.65-10.099.143-2.651 2.794-2.651 7.163 0 9.957l159.664 159.736z\"\n );\n\n $svg.appendChild($path);\n\n return $svg;\n}\n","export function saveSVG(namespace: string): SVGElement {\n const NS = \"http://www.w3.org/2000/svg\";\n\n const $svg = document.createElementNS(NS, \"svg\");\n $svg.setAttribute(\"class\", `${namespace}-footer-icon-save`);\n $svg.setAttribute(\"viewBox\", \"0 0 448 512\");\n\n const $path = document.createElementNS(NS, \"path\");\n $path.setAttribute(\"fill\", \"currentColor\");\n $path.setAttribute(\n \"d\",\n \"M224 256c-35.2 0-64 28.8-64 64c0 35.2 28.8 64 64 64c35.2 0 64-28.8 64-64C288 284.8 259.2 256 224 256zM433.1 129.1l-83.9-83.9C341.1 37.06 328.8 32 316.1 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V163.9C448 151.2 442.9 138.9 433.1 129.1zM128 80h144V160H128V80zM400 416c0 8.836-7.164 16-16 16H64c-8.836 0-16-7.164-16-16V96c0-8.838 7.164-16 16-16h16v104c0 13.25 10.75 24 24 24h192C309.3 208 320 197.3 320 184V83.88l78.25 78.25C399.4 163.2 400 164.8 400 166.3V416z\"\n );\n\n $svg.appendChild($path);\n\n return $svg;\n}\n","export function spinnerSVG(namespace: string): SVGElement {\n const NS = \"http://www.w3.org/2000/svg\";\n\n const $svg = document.createElementNS(NS, \"svg\");\n $svg.setAttribute(\"class\", `${namespace}-footer-icon-spinner`);\n $svg.setAttribute(\"viewBox\", \"0 0 512 512\");\n\n const $path = document.createElementNS(NS, \"path\");\n $path.setAttribute(\"fill\", \"currentColor\");\n $path.setAttribute(\n \"d\",\n \"M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z\"\n );\n\n const $animate = document.createElementNS(NS, \"animateTransform\");\n $animate.setAttribute(\"attributeName\", \"transform\");\n $animate.setAttribute(\"attributeType\", \"xml\");\n $animate.setAttribute(\"type\", \"rotate\");\n $animate.setAttribute(\"from\", \"0 256 256\");\n $animate.setAttribute(\"to\", \"360 256 256\");\n $animate.setAttribute(\"begin\", \"0s\");\n $animate.setAttribute(\"dur\", \"2s\");\n $animate.setAttribute(\"fill\", \"freeze\");\n $animate.setAttribute(\"repeatCount\", \"indefinite\");\n $path.appendChild($animate);\n\n const $progress = document.createElementNS(NS, \"text\");\n $progress.setAttribute(\"x\", \"125\");\n $progress.setAttribute(\"y\", \"345\");\n $progress.setAttribute(\"data-id\", \"progress\");\n $progress.style.fontSize = \"246px\";\n $progress.textContent = \"20\";\n $svg.appendChild($progress);\n $svg.appendChild($path);\n\n return $svg;\n}\n","import { class_name } from \"../constants\";\nimport { arrowLeftSVG, arrowRightSVG, pauseSVG, playSVG, sidebarSVG } from \"../icons\";\nimport { hc, noop, wrap_class } from \"../utils\";\nimport { saveSVG } from \"../icons/save\";\nimport { spinnerSVG } from \"../icons/spinner\";\n\nexport function create_footer() {\n type NewPageIndexCallback = (newPageIndex: number) => void;\n let new_page_index_callback: NewPageIndexCallback = noop;\n const on_new_page_index = (callback: NewPageIndexCallback) => {\n new_page_index_callback = callback;\n };\n\n let toggle_preview_callback: () => void = noop;\n const on_toggle_preview = (callback: () => void) => {\n toggle_preview_callback = callback;\n };\n\n let play_callback: () => void = noop;\n const on_play = (callback: () => void) => {\n play_callback = callback;\n };\n\n let readonly = false;\n let sidebar = false;\n let page_index = 0;\n let page_count = 0;\n\n const $footer = hc(\"div\", \"footer\");\n\n const $btnSidebar = hc(\"button\", \"btn-sidebar\");\n $btnSidebar.classList.add(wrap_class(\"footer-btn\"));\n $btnSidebar.appendChild(sidebarSVG(class_name));\n $btnSidebar.onclick = function on_click_btn_sidebar() {\n if (readonly) return;\n toggle_preview_callback();\n };\n $btnSidebar.style.display = \"none\";\n $footer.appendChild($btnSidebar);\n\n const $pageJumps = hc(\"div\", \"page-jumps\");\n\n const $btnPageBack = hc(\"button\", \"btn-page-back\");\n $btnPageBack.classList.add(wrap_class(\"footer-btn\"));\n $btnPageBack.appendChild(arrowLeftSVG(class_name));\n $btnPageBack.onclick = function on_click_btn_page_back() {\n if (readonly) return;\n new_page_index_callback(page_index - 1);\n };\n $pageJumps.appendChild($btnPageBack);\n\n const $btnPlay = hc(\"button\", \"btn-page-play\");\n $btnPlay.classList.add(wrap_class(\"footer-btn\"));\n $btnPlay.appendChild(playSVG(class_name));\n $btnPlay.appendChild(pauseSVG(class_name));\n let returnPlayTimer = 0;\n $btnPlay.onclick = function on_click_btn_play() {\n if (readonly) return;\n $btnPlay.classList.add(wrap_class(\"footer-btn-playing\"));\n play_callback();\n clearTimeout(returnPlayTimer);\n returnPlayTimer = window.setTimeout(() => {\n $btnPlay.classList.remove(wrap_class(\"footer-btn-playing\"));\n }, 500);\n };\n $pageJumps.appendChild($btnPlay);\n\n const $btnPageNext = hc(\"button\", \"btn-page-next\");\n $btnPageNext.classList.add(wrap_class(\"footer-btn\"));\n $btnPageNext.appendChild(arrowRightSVG(class_name));\n $btnPageNext.onclick = function on_click_btn_page_next() {\n if (readonly) return;\n new_page_index_callback(page_index + 1);\n };\n $pageJumps.appendChild($btnPageNext);\n\n const $pageNumber = hc(\"div\", \"page-number\");\n\n const $pageNumberInput = hc(\"input\", \"page-number-input\");\n $pageNumberInput.value = String(page_index + 1);\n $pageNumberInput.onchange = function on_change_page_number_input() {\n if (readonly) return;\n if ($pageNumberInput.value) {\n new_page_index_callback(Number($pageNumberInput.value) - 1);\n }\n };\n\n const $totalPage = hc(\"span\", \"total-page\");\n $totalPage.textContent = \" / \";\n\n $pageNumber.appendChild($pageNumberInput);\n $pageNumber.appendChild($totalPage);\n\n $footer.appendChild($pageJumps);\n $footer.appendChild($pageNumber);\n\n const class_readonly = wrap_class(\"readonly\");\n\n let saveToPdf: (progressCallback: (p: number) => void) => void = noop;\n const on_save_to_pdf = (callback: (progressCallback: (p: number) => void) => void) => {\n saveToPdf = callback;\n };\n const progressCallback = (p: number) => {\n if (p < 99) {\n spinnerIcon.style.display = \"block\";\n saveIcon.style.display = \"none\";\n const progress = spinnerIcon.querySelector(\"[data-id]\");\n if (progress) {\n progress.textContent = p.toString().padStart(2, \"0\");\n }\n } else {\n spinnerIcon.style.display = \"none\";\n saveIcon.style.display = \"block\";\n }\n };\n const saveIcon = saveSVG(class_name);\n const spinnerIcon = spinnerSVG(class_name);\n spinnerIcon.style.display = \"none\";\n const $saveBtn = hc(\"button\", \"footer-btn\");\n $saveBtn.appendChild(saveIcon);\n $saveBtn.onclick = function () {\n saveToPdf(progressCallback);\n };\n $saveBtn.appendChild(spinnerIcon);\n\n // $footer.appendChild($saveBtn);\n\n function set_readonly(readonly_: boolean) {\n if (readonly !== readonly_) {\n readonly = readonly_;\n $footer.classList.toggle(class_readonly, readonly);\n $pageNumberInput.disabled = readonly;\n }\n }\n\n function set_sidebar(sidebar_: boolean) {\n if (sidebar !== sidebar_) {\n sidebar = sidebar_;\n $btnSidebar.style.display = sidebar ? \"\" : \"none\";\n }\n }\n\n function set_page_index(page_index_: number, force = false) {\n if (force || page_index !== page_index_) {\n page_index = page_index_;\n $pageNumberInput.value = String(page_index + 1);\n }\n }\n\n function set_page_count(page_count_: number) {\n if (page_count !== page_count_) {\n page_count = page_count_;\n $totalPage.textContent = ` / ${page_count}`;\n }\n }\n\n return {\n $footer,\n $pageNumberInput,\n set_readonly,\n set_sidebar,\n set_page_index,\n set_page_count,\n on_new_page_index,\n on_toggle_preview,\n on_play,\n on_save_to_pdf,\n };\n}\n","const runningOnBrowser = typeof window !== \"undefined\";\n\nconst isBot =\n (runningOnBrowser && !(\"onscroll\" in window)) ||\n (typeof navigator !== \"undefined\" && /(gle|ing|ro)bot|crawl|spider/i.test(navigator.userAgent));\n\nconst supportsIntersectionObserver = runningOnBrowser && \"IntersectionObserver\" in window;\n\nconst supportsClassList = runningOnBrowser && \"classList\" in document.createElement(\"p\");\n\nconst isHiDpi = runningOnBrowser && window.devicePixelRatio > 1;\n\nconst defaultSettings = {\n elements_selector: \".lazy\",\n container: isBot || runningOnBrowser ? document : null,\n threshold: 300,\n thresholds: null,\n data_src: \"src\",\n data_srcset: \"srcset\",\n data_sizes: \"sizes\",\n data_bg: \"bg\",\n data_bg_hidpi: \"bg-hidpi\",\n data_bg_multi: \"bg-multi\",\n data_bg_multi_hidpi: \"bg-multi-hidpi\",\n data_bg_set: \"bg-set\",\n data_poster: \"poster\",\n class_applied: \"applied\",\n class_loading: \"loading\",\n class_loaded: \"loaded\",\n class_error: \"error\",\n class_entered: \"entered\",\n class_exited: \"exited\",\n unobserve_completed: true,\n unobserve_entered: false,\n cancel_on_exit: true,\n callback_enter: null,\n callback_exit: null,\n callback_applied: null,\n callback_loading: null,\n callback_loaded: null,\n callback_error: null,\n callback_finish: null,\n callback_cancel: null,\n use_native: false,\n restore_on_error: false\n};\n\nconst getExtendedSettings = (customSettings) => {\n return Object.assign({}, defaultSettings, customSettings);\n};\n\n/* Creates instance and notifies it through the window element */\nconst createInstance = function(classObj, options) {\n let event;\n const eventString = \"LazyLoad::Initialized\";\n const instance = new classObj(options);\n try {\n // Works in modern browsers\n event = new CustomEvent(eventString, { detail: { instance } });\n } catch (err) {\n // Works in Internet Explorer (all versions)\n event = document.createEvent(\"CustomEvent\");\n event.initCustomEvent(eventString, false, false, { instance });\n }\n window.dispatchEvent(event);\n};\n\n/* Auto initialization of one or more instances of LazyLoad, depending on the\n options passed in (plain object or an array) */\nconst autoInitialize = (classObj, options) => {\n if (!options) {\n return;\n }\n if (!options.length) {\n // Plain object\n createInstance(classObj, options);\n } else {\n // Array of objects\n for (let i = 0, optionsItem; (optionsItem = options[i]); i += 1) {\n createInstance(classObj, optionsItem);\n }\n }\n};\n\nconst SRC = \"src\";\nconst SRCSET = \"srcset\";\nconst SIZES = \"sizes\";\nconst POSTER = \"poster\";\nconst ORIGINALS = \"llOriginalAttrs\";\nconst DATA = \"data\";\n\nconst statusLoading = \"loading\";\nconst statusLoaded = \"loaded\";\nconst statusApplied = \"applied\";\nconst statusEntered = \"entered\";\nconst statusError = \"error\";\nconst statusNative = \"native\";\n\nconst dataPrefix = \"data-\";\nconst statusDataName = \"ll-status\";\n\nconst getData = (element, attribute) => {\n return element.getAttribute(dataPrefix + attribute);\n};\n\nconst setData = (element, attribute, value) => {\n const attrName = dataPrefix + attribute;\n if (value === null) {\n element.removeAttribute(attrName);\n return;\n }\n element.setAttribute(attrName, value);\n};\n\nconst getStatus = (element) => getData(element, statusDataName);\nconst setStatus = (element, status) => setData(element, statusDataName, status);\nconst resetStatus = (element) => setStatus(element, null);\n\nconst hasEmptyStatus = (element) => getStatus(element) === null;\nconst hasStatusLoading = (element) => getStatus(element) === statusLoading;\nconst hasStatusError = (element) => getStatus(element) === statusError;\nconst hasStatusNative = (element) => getStatus(element) === statusNative;\n\nconst statusesAfterLoading = [statusLoading, statusLoaded, statusApplied, statusError];\nconst hadStartedLoading = (element) => statusesAfterLoading.indexOf(getStatus(element)) >= 0;\n\nconst safeCallback = (callback, arg1, arg2, arg3) => {\n if (!callback || typeof callback !== 'function') {\n return;\n } \n if (arg3 !== undefined) {\n callback(arg1, arg2, arg3);\n return;\n }\n if (arg2 !== undefined) {\n callback(arg1, arg2);\n return;\n }\n callback(arg1);\n};\n\nconst addClass = (element, className) => {\n if (supportsClassList) {\n element.classList.add(className);\n return;\n }\n element.className += (element.className ? \" \" : \"\") + className;\n};\n\nconst removeClass = (element, className) => {\n if (supportsClassList) {\n element.classList.remove(className);\n return;\n }\n element.className = element.className.replace(new RegExp(\"(^|\\\\s+)\" + className + \"(\\\\s+|$)\"), \" \").replace(/^\\s+/, \"\").replace(/\\s+$/, \"\");\n};\n\nconst addTempImage = (element) => {\n element.llTempImage = document.createElement(\"IMG\");\n};\n\nconst deleteTempImage = (element) => {\n delete element.llTempImage;\n};\n\nconst getTempImage = (element) => element.llTempImage;\n\nconst unobserve = (element, instance) => {\n if (!instance) return;\n const observer = instance._observer;\n if (!observer) return;\n observer.unobserve(element);\n};\n\nconst resetObserver = (observer) => {\n observer.disconnect();\n};\n\nconst unobserveEntered = (element, settings, instance) => {\n if (settings.unobserve_entered) unobserve(element, instance);\n};\n\nconst updateLoadingCount = (instance, delta) => {\n if (!instance) return;\n instance.loadingCount += delta;\n};\n\nconst decreaseToLoadCount = (instance) => {\n if (!instance) return;\n instance.toLoadCount -= 1;\n};\n\nconst setToLoadCount = (instance, value) => {\n if (!instance) return;\n instance.toLoadCount = value;\n};\n\nconst isSomethingLoading = (instance) => instance.loadingCount > 0;\n\nconst haveElementsToLoad = (instance) => instance.toLoadCount > 0;\n\nconst getSourceTags = (parentTag) => {\n let sourceTags = [];\n for (let i = 0, childTag; (childTag = parentTag.children[i]); i += 1) {\n if (childTag.tagName === \"SOURCE\") {\n sourceTags.push(childTag);\n }\n }\n return sourceTags;\n};\n\nconst forEachPictureSource = (element, fn) => {\n const parent = element.parentNode;\n if (!parent || parent.tagName !== \"PICTURE\") {\n return;\n }\n let sourceTags = getSourceTags(parent);\n sourceTags.forEach(fn);\n};\n\nconst forEachVideoSource = (element, fn) => {\n let sourceTags = getSourceTags(element);\n sourceTags.forEach(fn);\n};\n\nconst attrsSrc = [SRC];\nconst attrsSrcPoster = [SRC, POSTER];\nconst attrsSrcSrcsetSizes = [SRC, SRCSET, SIZES];\nconst attrsData = [DATA];\n\nconst hasOriginalAttrs = (element) => !!element[ORIGINALS];\nconst getOriginalAttrs = (element) => element[ORIGINALS];\nconst deleteOriginalAttrs = (element) => delete element[ORIGINALS];\n\n// ## SAVE ##\n\nconst setOriginalsObject = (element, attributes) => {\n if (hasOriginalAttrs(element)) {\n return;\n }\n const originals = {};\n attributes.forEach((attribute) => {\n originals[attribute] = element.getAttribute(attribute);\n });\n element[ORIGINALS] = originals;\n};\n\nconst saveOriginalBackgroundStyle = (element) => {\n if (hasOriginalAttrs(element)) {\n return;\n }\n element[ORIGINALS] = { backgroundImage: element.style.backgroundImage };\n};\n\n// ## RESTORE ##\n\nconst setOrResetAttribute = (element, attrName, value) => {\n if (!value) {\n element.removeAttribute(attrName);\n return;\n }\n element.setAttribute(attrName, value);\n};\n\nconst restoreOriginalAttrs = (element, attributes) => {\n if (!hasOriginalAttrs(element)) {\n return;\n }\n const originals = getOriginalAttrs(element);\n attributes.forEach((attribute) => {\n setOrResetAttribute(element, attribute, originals[attribute]);\n });\n};\n\nconst restoreOriginalBgImage = (element) => {\n if (!hasOriginalAttrs(element)) {\n return;\n }\n const originals = getOriginalAttrs(element);\n element.style.backgroundImage = originals.backgroundImage;\n};\n\nconst manageApplied = (element, settings, instance) => {\n addClass(element, settings.class_applied);\n setStatus(element, statusApplied);\n // Instance is not provided when loading is called from static class\n if (!instance) return;\n if (settings.unobserve_completed) {\n // Unobserve now because we can't do it on load\n unobserve(element, settings);\n }\n safeCallback(settings.callback_applied, element, instance);\n};\n\nconst manageLoading = (element, settings, instance) => {\n addClass(element, settings.class_loading);\n setStatus(element, statusLoading);\n // Instance is not provided when loading is called from static class\n if (!instance) return;\n updateLoadingCount(instance, +1);\n safeCallback(settings.callback_loading, element, instance);\n};\n\nconst setAttributeIfValue = (element, attrName, value) => {\n if (!value) {\n return;\n }\n element.setAttribute(attrName, value);\n};\n\nconst setImageAttributes = (element, settings) => {\n setAttributeIfValue(element, SIZES, getData(element, settings.data_sizes));\n setAttributeIfValue(element, SRCSET, getData(element, settings.data_srcset));\n setAttributeIfValue(element, SRC, getData(element, settings.data_src));\n};\n\nconst setSourcesImg = (imgEl, settings) => {\n forEachPictureSource(imgEl, (sourceTag) => {\n setOriginalsObject(sourceTag, attrsSrcSrcsetSizes);\n setImageAttributes(sourceTag, settings);\n });\n setOriginalsObject(imgEl, attrsSrcSrcsetSizes);\n setImageAttributes(imgEl, settings);\n};\n\nconst setSourcesIframe = (iframe, settings) => {\n setOriginalsObject(iframe, attrsSrc);\n setAttributeIfValue(iframe, SRC, getData(iframe, settings.data_src));\n};\n\nconst setSourcesVideo = (videoEl, settings) => {\n forEachVideoSource(videoEl, (sourceEl) => {\n setOriginalsObject(sourceEl, attrsSrc);\n setAttributeIfValue(sourceEl, SRC, getData(sourceEl, settings.data_src));\n });\n setOriginalsObject(videoEl, attrsSrcPoster);\n\n setAttributeIfValue(videoEl, POSTER, getData(videoEl, settings.data_poster));\n setAttributeIfValue(videoEl, SRC, getData(videoEl, settings.data_src));\n videoEl.load();\n};\n\nconst setSourcesObject = (object, settings) => {\n setOriginalsObject(object, attrsData);\n setAttributeIfValue(object, DATA, getData(object, settings.data_src));\n};\n\nconst setBackground = (element, settings, instance) => {\n const bg1xValue = getData(element, settings.data_bg);\n const bgHiDpiValue = getData(element, settings.data_bg_hidpi);\n const bgDataValue = isHiDpi && bgHiDpiValue ? bgHiDpiValue : bg1xValue;\n if (!bgDataValue) return;\n element.style.backgroundImage = `url(\"${bgDataValue}\")`;\n getTempImage(element).setAttribute(SRC, bgDataValue);\n manageLoading(element, settings, instance);\n};\n\n// NOTE: THE TEMP IMAGE TRICK CANNOT BE DONE WITH data-multi-bg\n// BECAUSE INSIDE ITS VALUES MUST BE WRAPPED WITH URL() AND ONE OF THEM\n// COULD BE A GRADIENT BACKGROUND IMAGE\nconst setMultiBackground = (element, settings, instance) => {\n const bg1xValue = getData(element, settings.data_bg_multi);\n const bgHiDpiValue = getData(element, settings.data_bg_multi_hidpi);\n const bgDataValue = isHiDpi && bgHiDpiValue ? bgHiDpiValue : bg1xValue;\n if (!bgDataValue) {\n return;\n }\n element.style.backgroundImage = bgDataValue;\n manageApplied(element, settings, instance);\n};\n\nconst setImgsetBackground = (element, settings, instance) => {\n const bgImgSetDataValue = getData(element, settings.data_bg_set);\n if (!bgImgSetDataValue) {\n return;\n }\n const imgSetValues = bgImgSetDataValue.split(\"|\");\n let bgImageValues = imgSetValues.map((value) => `image-set(${value})`);\n element.style.backgroundImage = bgImageValues.join();\n // Temporary fix for Chromeium with the -webkit- prefix\n if (element.style.backgroundImage === \"\") {\n bgImageValues = imgSetValues.map((value) => `-webkit-image-set(${value})`);\n element.style.backgroundImage = bgImageValues.join();\n }\n manageApplied(element, settings, instance);\n};\n\nconst setSourcesFunctions = {\n IMG: setSourcesImg,\n IFRAME: setSourcesIframe,\n VIDEO: setSourcesVideo,\n OBJECT: setSourcesObject\n};\n\nconst setSourcesNative = (element, settings) => {\n const setSourcesFunction = setSourcesFunctions[element.tagName];\n if (!setSourcesFunction) {\n return;\n }\n setSourcesFunction(element, settings);\n};\n\nconst setSources = (element, settings, instance) => {\n const setSourcesFunction = setSourcesFunctions[element.tagName];\n if (!setSourcesFunction) {\n return;\n }\n setSourcesFunction(element, settings);\n manageLoading(element, settings, instance);\n};\n\nconst elementsWithLoadEvent = [\"IMG\", \"IFRAME\", \"VIDEO\", \"OBJECT\"];\nconst hasLoadEvent = (element) => elementsWithLoadEvent.indexOf(element.tagName) > -1;\n\nconst checkFinish = (settings, instance) => {\n if (instance && !isSomethingLoading(instance) && !haveElementsToLoad(instance)) {\n safeCallback(settings.callback_finish, instance);\n }\n};\n\nconst addEventListener = (element, eventName, handler) => {\n element.addEventListener(eventName, handler);\n element.llEvLisnrs[eventName] = handler;\n};\n\nconst removeEventListener = (element, eventName, handler) => {\n element.removeEventListener(eventName, handler);\n};\n\nconst hasEventListeners = (element) => {\n return !!element.llEvLisnrs;\n};\n\nconst addEventListeners = (element, loadHandler, errorHandler) => {\n if (!hasEventListeners(element)) element.llEvLisnrs = {};\n const loadEventName = element.tagName === \"VIDEO\" ? \"loadeddata\" : \"load\";\n addEventListener(element, loadEventName, loadHandler);\n addEventListener(element, \"error\", errorHandler);\n};\n\nconst removeEventListeners = (element) => {\n if (!hasEventListeners(element)) {\n return;\n }\n const eventListeners = element.llEvLisnrs;\n for (let eventName in eventListeners) {\n const handler = eventListeners[eventName];\n removeEventListener(element, eventName, handler);\n }\n delete element.llEvLisnrs;\n};\n\nconst doneHandler = (element, settings, instance) => {\n deleteTempImage(element);\n updateLoadingCount(instance, -1);\n decreaseToLoadCount(instance);\n removeClass(element, settings.class_loading);\n if (settings.unobserve_completed) {\n unobserve(element, instance);\n }\n};\n\nconst loadHandler = (event, element, settings, instance) => {\n const goingNative = hasStatusNative(element);\n doneHandler(element, settings, instance);\n addClass(element, settings.class_loaded);\n setStatus(element, statusLoaded);\n safeCallback(settings.callback_loaded, element, instance);\n if (!goingNative) checkFinish(settings, instance);\n};\n\nconst errorHandler = (event, element, settings, instance) => {\n const goingNative = hasStatusNative(element);\n doneHandler(element, settings, instance);\n addClass(element, settings.class_error);\n setStatus(element, statusError);\n safeCallback(settings.callback_error, element, instance);\n if (settings.restore_on_error) restoreOriginalAttrs(element, attrsSrcSrcsetSizes);\n if (!goingNative) checkFinish(settings, instance);\n};\n\nconst addOneShotEventListeners = (element, settings, instance) => {\n const elementToListenTo = getTempImage(element) || element;\n if (hasEventListeners(elementToListenTo)) {\n // This happens when loading is retried twice\n return;\n }\n const _loadHandler = (event) => {\n loadHandler(event, element, settings, instance);\n removeEventListeners(elementToListenTo);\n };\n const _errorHandler = (event) => {\n errorHandler(event, element, settings, instance);\n removeEventListeners(elementToListenTo);\n };\n addEventListeners(elementToListenTo, _loadHandler, _errorHandler);\n};\n\nconst loadBackground = (element, settings, instance) => {\n addTempImage(element);\n addOneShotEventListeners(element, settings, instance);\n saveOriginalBackgroundStyle(element);\n setBackground(element, settings, instance);\n setMultiBackground(element, settings, instance);\n setImgsetBackground(element, settings, instance);\n};\n\nconst loadRegular = (element, settings, instance) => {\n addOneShotEventListeners(element, settings, instance);\n setSources(element, settings, instance);\n};\n\nconst load = (element, settings, instance) => {\n if (hasLoadEvent(element)) {\n loadRegular(element, settings, instance);\n } else {\n loadBackground(element, settings, instance);\n }\n};\n\nconst loadNative = (element, settings, instance) => {\n element.setAttribute(\"loading\", \"lazy\");\n addOneShotEventListeners(element, settings, instance);\n setSourcesNative(element, settings);\n setStatus(element, statusNative);\n};\n\nconst removeImageAttributes = (element) => {\n element.removeAttribute(SRC);\n element.removeAttribute(SRCSET);\n element.removeAttribute(SIZES);\n};\n\nconst resetSourcesImg = (element) => {\n forEachPictureSource(element, (sourceTag) => {\n removeImageAttributes(sourceTag);\n });\n removeImageAttributes(element);\n};\n\nconst restoreImg = (imgEl) => {\n forEachPictureSource(imgEl, (sourceEl) => {\n restoreOriginalAttrs(sourceEl, attrsSrcSrcsetSizes);\n });\n restoreOriginalAttrs(imgEl, attrsSrcSrcsetSizes);\n};\n\nconst restoreVideo = (videoEl) => {\n forEachVideoSource(videoEl, (sourceEl) => {\n restoreOriginalAttrs(sourceEl, attrsSrc);\n });\n restoreOriginalAttrs(videoEl, attrsSrcPoster);\n videoEl.load();\n};\n\nconst restoreIframe = (iframeEl) => {\n restoreOriginalAttrs(iframeEl, attrsSrc);\n};\n\nconst restoreObject = (objectEl) => {\n restoreOriginalAttrs(objectEl, attrsData);\n};\n\nconst restoreFunctions = {\n IMG: restoreImg,\n IFRAME: restoreIframe,\n VIDEO: restoreVideo,\n OBJECT: restoreObject\n};\n\nconst restoreAttributes = (element) => {\n const restoreFunction = restoreFunctions[element.tagName];\n if (!restoreFunction) {\n restoreOriginalBgImage(element);\n return;\n }\n restoreFunction(element);\n};\n\nconst resetClasses = (element, settings) => {\n if (hasEmptyStatus(element) || hasStatusNative(element)) {\n return;\n }\n removeClass(element, settings.class_entered);\n removeClass(element, settings.class_exited);\n removeClass(element, settings.class_applied);\n removeClass(element, settings.class_loading);\n removeClass(element, settings.class_loaded);\n removeClass(element, settings.class_error);\n};\n\nconst restore = (element, settings) => {\n restoreAttributes(element);\n resetClasses(element, settings);\n resetStatus(element);\n deleteOriginalAttrs(element);\n};\n\nconst cancelLoading = (element, entry, settings, instance) => {\n if (!settings.cancel_on_exit) return;\n if (!hasStatusLoading(element)) return;\n if (element.tagName !== \"IMG\") return; //Works only on images\n removeEventListeners(element);\n resetSourcesImg(element);\n restoreImg(element);\n removeClass(element, settings.class_loading);\n updateLoadingCount(instance, -1);\n resetStatus(element);\n safeCallback(settings.callback_cancel, element, entry, instance);\n};\n\nconst onEnter = (element, entry, settings, instance) => {\n const dontLoad = hadStartedLoading(element); /* Save status\n before setting it, to prevent loading it again. Fixes #526. */\n setStatus(element, statusEntered);\n addClass(element, settings.class_entered);\n removeClass(element, settings.class_exited);\n unobserveEntered(element, settings, instance);\n safeCallback(settings.callback_enter, element, entry, instance);\n if (dontLoad) return;\n load(element, settings, instance);\n};\n\nconst onExit = (element, entry, settings, instance) => {\n if (hasEmptyStatus(element)) return; //Ignore the first pass, at landing\n addClass(element, settings.class_exited);\n cancelLoading(element, entry, settings, instance);\n safeCallback(settings.callback_exit, element, entry, instance);\n};\n\nconst tagsWithNativeLazy = [\"IMG\", \"IFRAME\", \"VIDEO\"];\n\nconst shouldUseNative = (settings) =>\n settings.use_native && \"loading\" in HTMLImageElement.prototype;\n\nconst loadAllNative = (elements, settings, instance) => {\n elements.forEach((element) => {\n if (tagsWithNativeLazy.indexOf(element.tagName) === -1) {\n return;\n }\n loadNative(element, settings, instance);\n });\n setToLoadCount(instance, 0);\n};\n\nconst isIntersecting = (entry) => entry.isIntersecting || entry.intersectionRatio > 0;\n\nconst getObserverSettings = (settings) => ({\n root: settings.container === document ? null : settings.container,\n rootMargin: settings.thresholds || settings.threshold + \"px\"\n});\n\nconst intersectionHandler = (entries, settings, instance) => {\n entries.forEach((entry) =>\n isIntersecting(entry)\n ? onEnter(entry.target, entry, settings, instance)\n : onExit(entry.target, entry, settings, instance)\n );\n};\n\nconst observeElements = (observer, elements) => {\n elements.forEach((element) => {\n observer.observe(element);\n });\n};\n\nconst updateObserver = (observer, elementsToObserve) => {\n resetObserver(observer);\n observeElements(observer, elementsToObserve);\n};\n\nconst setObserver = (settings, instance) => {\n if (!supportsIntersectionObserver || shouldUseNative(settings)) {\n return;\n }\n instance._observer = new IntersectionObserver((entries) => {\n intersectionHandler(entries, settings, instance);\n }, getObserverSettings(settings));\n};\n\nconst toArray = (nodeSet) => Array.prototype.slice.call(nodeSet);\n\nconst queryElements = (settings) =>\n settings.container.querySelectorAll(settings.elements_selector);\n\nconst excludeManagedElements = (elements) => toArray(elements).filter(hasEmptyStatus);\n\nconst hasError = (element) => hasStatusError(element);\nconst filterErrorElements = (elements) => toArray(elements).filter(hasError);\n\nconst getElementsToLoad = (elements, settings) =>\n excludeManagedElements(elements || queryElements(settings));\n\nconst retryLazyLoad = (settings, instance) => {\n const errorElements = filterErrorElements(queryElements(settings));\n errorElements.forEach((element) => {\n removeClass(element, settings.class_error);\n resetStatus(element);\n });\n instance.update();\n};\n\nconst setOnlineCheck = (settings, instance) => {\n if (!runningOnBrowser) {\n return;\n }\n instance._onlineHandler = () => {\n retryLazyLoad(settings, instance);\n };\n window.addEventListener(\"online\", instance._onlineHandler);\n};\n\nconst resetOnlineCheck = (instance) => {\n if (!runningOnBrowser) {\n return;\n }\n window.removeEventListener(\"online\", instance._onlineHandler);\n};\n\nconst LazyLoad = function(customSettings, elements) {\n const settings = getExtendedSettings(customSettings);\n this._settings = settings;\n this.loadingCount = 0;\n setObserver(settings, this);\n setOnlineCheck(settings, this);\n this.update(elements);\n};\n\nLazyLoad.prototype = {\n update: function(givenNodeset) {\n const settings = this._settings;\n const elementsToLoad = getElementsToLoad(givenNodeset, settings);\n setToLoadCount(this, elementsToLoad.length);\n\n if (isBot || !supportsIntersectionObserver) {\n this.loadAll(elementsToLoad);\n return;\n }\n if (shouldUseNative(settings)) {\n loadAllNative(elementsToLoad, settings, this);\n return;\n }\n\n updateObserver(this._observer, elementsToLoad);\n },\n\n destroy: function() {\n // Observer\n if (this._observer) {\n this._observer.disconnect();\n }\n // Clean handlers\n resetOnlineCheck(this);\n // Clean custom attributes on elements\n queryElements(this._settings).forEach((element) => {\n deleteOriginalAttrs(element);\n });\n // Delete all internal props\n delete this._observer;\n delete this._settings;\n delete this._onlineHandler;\n delete this.loadingCount;\n delete this.toLoadCount;\n },\n\n loadAll: function(elements) {\n const settings = this._settings;\n const elementsToLoad = getElementsToLoad(elements, settings);\n elementsToLoad.forEach((element) => {\n unobserve(element, this);\n load(element, settings, this);\n });\n },\n\n restoreAll: function() {\n const settings = this._settings;\n queryElements(settings).forEach((element) => {\n restore(element, settings);\n });\n }\n};\n\nLazyLoad.load = (element, customSettings) => {\n const settings = getExtendedSettings(customSettings);\n load(element, settings);\n};\n\nLazyLoad.resetStatus = (element) => {\n resetStatus(element);\n};\n\n// Automatic instances creation if required (useful for async script loading)\nif (runningOnBrowser) {\n autoInitialize(LazyLoad, window.lazyLoadOptions);\n}\n\nexport { LazyLoad as default };\n","import type { ILazyLoadInstance } from \"vanilla-lazyload\";\nimport type { PreviewPage } from \"./typings\";\n\nimport LazyLoad from \"vanilla-lazyload\";\nimport { append, h, hc, noop, wrap_class } from \"../utils\";\n\nexport function create_sidebar() {\n type NewPageIndexCallback = (newPageIndex: number) => void;\n let new_page_index_callback: NewPageIndexCallback = noop;\n const on_new_page_index = (callback: NewPageIndexCallback) => {\n new_page_index_callback = callback;\n };\n\n let destroyed = false;\n let readonly = false;\n let active = false;\n let pages: PreviewPage[] = [];\n let page_index = 0;\n\n const class_readonly = wrap_class(\"readonly\");\n const class_preview_active = wrap_class(\"preview-active\");\n\n const $content = hc(\"div\", \"content\");\n\n const $previewMask = hc(\"div\", \"preview-mask\");\n $previewMask.onclick = function on_click_preview_mask(ev) {\n if (readonly) return;\n if (ev.target !== $previewMask) return;\n set_active(false);\n };\n append($content, $previewMask);\n\n const $preview = hc(\"div\", \"preview\");\n $preview.classList.add(wrap_class(\"tele-fancy-scrollbar\"));\n $preview.onclick = function on_click_preview(ev) {\n if (readonly) return;\n const page_index = (ev.target as HTMLElement).dataset?.pageIndex;\n if (page_index) {\n ev.preventDefault();\n ev.stopPropagation();\n ev.stopImmediatePropagation();\n new_page_index_callback(Number(page_index));\n set_active(false);\n }\n };\n append($content, $preview);\n\n let lazyload: ILazyLoadInstance | undefined;\n\n function set_readonly(readonly_: boolean) {\n if (readonly !== readonly_) {\n readonly = readonly_;\n $content.classList.toggle(class_readonly, readonly);\n }\n }\n\n function set_active(active_: boolean) {\n if (active !== active_) {\n active = active_;\n $content.classList.toggle(class_preview_active, active);\n if (active && !lazyload) {\n lazyload = new LazyLoad({\n container: $preview,\n elements_selector: `.${wrap_class(\"preview-page>img\")}`,\n });\n }\n }\n }\n\n function set_pages(pages_: PreviewPage[]) {\n if (pages !== pages_) {\n pages = pages_;\n\n const page_class = wrap_class(\"preview-page\");\n const page_name_class = wrap_class(\"preview-page-name\");\n\n pages.forEach((page, i) => {\n const pageIndex = String(i);\n\n const $page = h(\"a\");\n $page.className = page_class + \" \" + wrap_class(`preview-page-${i}`);\n $page.href = \"#\";\n $page.dataset.pageIndex = pageIndex;\n\n const $name = h(\"span\");\n $name.className = page_name_class;\n $name.textContent = String(i + 1);\n $name.dataset.pageIndex = pageIndex;\n\n const $img = h(\"img\");\n $img.width = page.width;\n $img.height = page.height;\n $img.alt = `page-${i}`;\n $img.dataset.src = page.thumbnail;\n $img.dataset.pageIndex = pageIndex;\n\n append($page, $img);\n append($page, $name);\n append($preview, $page);\n });\n\n if (!destroyed) {\n lazyload?.update();\n }\n }\n }\n\n function set_page_index(page_index_: number, force = false) {\n if (force || page_index !== page_index_) {\n page_index = page_index_;\n const $page = $preview.querySelector<HTMLElement>(\n `.${wrap_class(`preview-page-${page_index}`)}`\n );\n if ($page) {\n $preview.scrollTo({ top: $page.offsetTop - 16 });\n }\n }\n }\n\n function destroy() {\n destroyed = true;\n lazyload?.destroy();\n }\n\n function get_active() {\n return active;\n }\n\n return {\n $content,\n $preview,\n set_readonly,\n set_active,\n get_active,\n set_pages,\n on_new_page_index,\n set_page_index,\n destroy,\n };\n}\n","import type { ISlideConfig } from \"@netless/slide\";\nimport type { SlideAttributes } from \"./typings\";\n\nimport { Slide } from \"@netless/slide\";\nimport { SideEffectManager } from \"side-effect-manager\";\nimport { Remitter } from \"remitter\";\n\nimport { DefaultUrl } from \"../constants\";\nimport { append, block, hc } from \"../utils\";\nimport { fetch_slide_info, make_prefix, on_visibility_change } from \"./utils\";\n\nimport styles from \"../style.scss?inline\";\nimport { create_footer } from \"./footer\";\nimport { create_sidebar } from \"./sidebar\";\n\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\n\nexport type SlideViewerOptions = MakeOptional<\n Omit<ISlideConfig & SlideAttributes, \"anchor\">,\n \"mode\" | \"interactive\"\n>;\n\nexport interface SlideViewerInfoResponse {\n width: number;\n height: number;\n slideCount: number;\n}\n\nexport interface SlideViewerEventData {\n freeze: void;\n unfreeze: void;\n renderError: { error: Error; index: number };\n prepareError: Error;\n renderStart: void;\n renderEnd: void;\n}\n\nexport class SlideViewer {\n static styles = styles;\n static fetchSlideInfo = fetch_slide_info;\n\n readonly sideEffect = new SideEffectManager();\n readonly events = new Remitter<SlideViewerEventData>();\n\n readonly $slide = hc(\"div\", \"slide\");\n readonly $overlay = hc(\"div\", \"overlay\");\n readonly sidebar = create_sidebar();\n readonly footer = create_footer();\n readonly $content: HTMLElement;\n readonly $footer: HTMLElement;\n\n readonly slide: Slide;\n\n _slideTitle = \"\";\n _getWhiteSnapshot:\n | ((index: number, canvas: HTMLCanvasElement, ctx: CanvasRenderingContext2D) => void)\n | null = null;\n\n private readonly _readyPromise: Promise<void>;\n private readonly _infoPromise: Promise<SlideViewerInfoResponse>;\n private _ready = false;\n private _slideCount = 0;\n private _destroyed = false;\n private _isFrozen = false;\n private _cachedIsFrozen = false;\n\n constructor(options: SlideViewerOptions) {\n // user interface\n this.$content = this.sidebar.$content;\n this.$footer = this.footer.$footer;\n append(this.$content, this.$slide);\n append(this.$content, this.$overlay);\n\n // bind user actions\n this.sidebar.on_new_page_index(this.onNewPageIndex);\n this.footer.on_new_page_index(this.onNewPageIndex);\n this.footer.on_toggle_preview(this.onTogglePreview);\n this.footer.on_play(this.onPlay);\n this.footer.on_save_to_pdf(this.toPdf);\n\n // remove dom on cleanup\n this.sideEffect.push(this.sidebar.destroy);\n this.sideEffect.push(() => this.slide.destroy());\n this.sideEffect.push(() => {\n this.$content.parentElement && this.$content.remove();\n this.$footer.parentElement && this.$footer.remove();\n this.$slide.parentElement && this.$slide.remove();\n });\n\n // auto freeze on lost focus\n this.sideEffect.push(\n on_visibility_change(visible => {\n if (this._destroyed) return;\n if (!visible) {\n this._cachedIsFrozen = this._isFrozen;\n this.freeze();\n } else {\n if (!this._cachedIsFrozen) this.unfreeze();\n }\n })\n );\n\n // start loading slide\n // prepare(info) -> slide.renderEnd(ready)\n const [infoPromise, resolveInfo] = block<SlideViewerInfoResponse>();\n this._infoPromise = infoPromise;\n\n const fetching = SlideViewer.fetchSlideInfo(options).then(({ preview, slide }) => {\n if (this._destroyed) return;\n\n this._slideCount = slide.slideCount;\n\n if (preview) {\n const { taskId, url } = options;\n const { slideCount } = slide;\n const { width, height } = preview;\n\n const prefix = make_prefix(taskId, url);\n const pages = Array.from({ length: slideCount }, (_, i) => ({\n width,\n height,\n thumbnail: `${prefix}/preview/${i + 1}.png`,\n }));\n\n this.sidebar.set_pages(pages);\n this.footer.set_sidebar(true);\n }\n\n this.footer.set_page_count(slide.slideCount);\n resolveInfo(slide);\n });\n\n fetching.catch(error => {\n console.log(\"[Slide] fetch slide info error\");\n console.error(error);\n this.events.emit(\"prepareError\", error);\n });\n\n const [readyPromise, resolveReady] = block();\n this._readyPromise = readyPromise;\n\n this.slide = new Slide({\n anchor: this.$slide,\n mode: \"local\",\n interactive: true,\n enableGlobalClick: true,\n useLocalCache: true,\n ...options,\n });\n this.slide.setResource(options.taskId, options.url || DefaultUrl);\n\n this.slide.on(\"renderStart\", () => {\n if (this._destroyed) return;\n this.events.emit(\"renderStart\");\n });\n\n this.slide.on(\"slideChange\", page => {\n if (this._destroyed) return;\n this.setPage(page);\n this.$overlay.style.opacity = \"\";\n\n // renderStart -> renderEnd -> slideChange\n // So we just treat `slideChange` as `renderEnd`\n this.events.emit(\"renderEnd\");\n });\n\n // TODO: export `once()` in the slide package.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this.slide as any).once(\"renderEnd\", () => {\n // ready = first render end\n if (!this._ready) {\n setTimeout(() => {\n this._ready = true;\n resolveReady();\n }, 1000);\n }\n });\n\n // show overlay on render error\n this.slide.on(\"renderError\", ev => {\n if (this._destroyed) return;\n if (ev.error) {\n console.error(ev.error);\n this.$overlay.textContent = `Error on slide.index=${ev.index}: ${ev.error.message}`;\n this.$overlay.style.opacity = \"1\";\n this.events.emit(\"renderError\", ev);\n }\n });\n\n this.ready(() => {\n if (this._isFrozen) {\n this.freeze();\n }\n });\n }\n\n prepare(callback: (response: SlideViewerInfoResponse) => void) {\n return this._infoPromise.then(callback);\n }\n\n ready(callback: () => void) {\n return this._readyPromise.then(callback);\n }\n\n destroy() {\n this._destroyed = true;\n this.sideEffect.flushAll();\n }\n\n onPlay = () => {\n this.slide.nextStep();\n };\n\n onNewPageIndex = (index: number) => {\n if (this._ready && index >= 0 && index < this._slideCount) {\n this.slide.renderSlide(index + 1);\n } else {\n this.setPage(this.slide.slideState.currentSlideIndex);\n }\n };\n\n onTogglePreview = () => {\n this.sidebar.set_active(!this.sidebar.get_active());\n };\n\n setReadonly(readonly: boolean) {\n this.slide.setInteractive(!readonly);\n this.sidebar.set_readonly(readonly);\n this.footer.set_readonly(readonly);\n }\n\n setPage(page: number) {\n this.sidebar.set_page_index(page - 1, true);\n this.footer.set_page_index(page - 1, true);\n }\n\n freeze() {\n if (this._destroyed) return;\n this._isFrozen = true;\n if (!this._ready) return;\n this.slide.frozen();\n this.events.emit(\"freeze\");\n }\n\n unfreeze() {\n if (this._destroyed) return;\n this._isFrozen = false;\n if (!this._ready) return;\n this.slide.release();\n this.events.emit(\"unfreeze\");\n }\n\n toPdf = async (progressCallback: (progress: number) => void) => {\n const MAX = 1920;\n const resizeCanvas = document.createElement(\"canvas\");\n const resizeCtx = resizeCanvas.getContext(\"2d\");\n const { slideCount, width, height } = this.slide;\n let pdfWidth = Math.floor(width);\n let pdfHeight = Math.floor(height);\n if (pdfWidth > MAX) {\n pdfWidth = MAX;\n pdfHeight = Math.floor((height * pdfWidth) / width);\n }\n if (pdfHeight > MAX) {\n pdfHeight = MAX;\n pdfWidth = Math.floor((width * pdfHeight) / height);\n }\n resizeCanvas.width = pdfWidth;\n resizeCanvas.height = pdfHeight;\n\n const whiteSnapshotCanvas = document.createElement(\"canvas\");\n whiteSnapshotCanvas.width = width;\n whiteSnapshotCanvas.height = height;\n const whiteCtx = whiteSnapshotCanvas.getContext(\"2d\");\n if (!whiteCtx || !this._getWhiteSnapshot || !resizeCtx) {\n return null;\n }\n\n const orientation = pdfWidth > pdfHeight ? \"l\" : \"p\";\n const { jsPDF } = await import(\"jspdf\");\n\n const pdf = new jsPDF({\n format: [pdfWidth, pdfHeight],\n orientation,\n compress: true,\n });\n\n for (let i = 1; i <= slideCount; i++) {\n const slideSnapshot = await this.slide.snapshotWithTimingEnd(i);\n\n if (slideSnapshot) {\n const img = document.createElement(\"img\");\n img.src = slideSnapshot;\n await new Promise(resolve => (img.onload = resolve));\n resizeCtx.drawImage(img, 0, 0, pdfWidth, pdfHeight);\n }\n whiteCtx.clearRect(0, 0, width, height);\n this._getWhiteSnapshot(i, whiteSnapshotCanvas, whiteCtx);\n try {\n const whiteSnapshot = whiteSnapshotCanvas.toDataURL(\"image/png\");\n const whiteImg = document.createElement(\"img\");\n whiteImg.src = whiteSnapshot;\n await new Promise(resolve => (whiteImg.onload = resolve));\n resizeCtx.drawImage(whiteImg, 0, 0, pdfWidth, pdfHeight);\n } catch (e) {\n // ignore\n }\n\n const outputDataUrl = resizeCanvas.toDataURL(\"image/jpeg\", 0.6);\n if (i > 1) {\n pdf.addPage();\n }\n pdf.addImage(outputDataUrl, \"JPEG\", 0, 0, pdfWidth, pdfHeight, \"\", \"FAST\");\n resizeCtx.clearRect(0, 0, pdfWidth, pdfHeight);\n progressCallback(Math.ceil((i / slideCount) * 100));\n }\n const dataUrl = pdf.output(\"arraybuffer\");\n const blob = new Blob([dataUrl]);\n const downloadUrl = URL.createObjectURL(blob);\n const element = document.createElement(\"a\");\n element.setAttribute(\"href\", downloadUrl);\n element.setAttribute(\"download\", `${this._slideTitle || \"snapshot\"}.pdf`);\n element.style.display = \"none\";\n document.body.appendChild(element);\n element.click();\n document.body.removeChild(element);\n window.postMessage({ type: \"@app-slide/_download_pdf_\", buf: dataUrl });\n };\n}\n","import type { AppContext } from \"@netless/window-manager\";\n\nexport interface ILogger {\n info(this: void, msg: string): void;\n}\n\nfunction getRoomLogger(context: AppContext) {\n return (context.displayer as unknown as { logger: ILogger }).logger;\n}\n\nexport class Logger implements ILogger {\n static active = new Set<string>();\n static roomLogger: ILogger | null = null;\n\n constructor(readonly context: AppContext | null) {\n if (context) {\n Logger.active.add(context.appId);\n Logger.roomLogger = getRoomLogger(context);\n }\n }\n\n info = (msg: string) => {\n if (Logger.roomLogger && this.context) {\n Logger.roomLogger.info(msg + ` (${this.context.appId})`);\n } else if (this.context) {\n console.debug(msg + ` (${this.context.appId})`);\n } else {\n console.debug(msg);\n }\n };\n\n destroy() {\n this.context && Logger.active.delete(this.context.appId);\n if (Logger.active.size === 0) {\n Logger.roomLogger = null;\n }\n }\n}\n","import type { AppContext, Storage, WhiteBoardView } from \"@netless/window-manager\";\nimport type { SideEffectManager } from \"side-effect-manager\";\nimport type { SlideViewer } from \"./SlideViewer\";\nimport type { Attributes } from \"./typings\";\n\nimport { get, wrap_class } from \"./utils\";\n\nexport interface ConnectParams {\n context: AppContext;\n storage: Storage<Attributes>;\n viewer: SlideViewer;\n sideEffect: SideEffectManager;\n logger: { info: (msg: string) => void };\n}\n\nexport function connect({ context, storage, viewer, sideEffect, logger }: ConnectParams) {\n const log = logger.info.bind(logger);\n\n let whiteboard: WhiteBoardView | null = null;\n\n viewer.prepare(({ width, height, slideCount }) => {\n if (context.destroyed) return;\n width && context.box.setStageRatio(height / width);\n whiteboard = context.createWhiteBoardView({ size: slideCount });\n whiteboard.setBaseRect({ width, height });\n\n viewer._slideTitle = context.box.title;\n viewer._getWhiteSnapshot = (\n index: number,\n canvas: HTMLCanvasElement,\n ctx: CanvasRenderingContext2D\n ) => {\n if (!whiteboard) {\n return null;\n }\n const scenePath = whiteboard.pageState.pages[index - 1];\n const { width, height } = whiteboard.view.size;\n canvas.width = width;\n canvas.height = height;\n whiteboard.view.screenshotToCanvas(ctx, scenePath, width, height, whiteboard.view.camera);\n };\n\n kick_start();\n });\n\n const { slide } = viewer;\n\n function dump_state(state: unknown = storage.state.state) {\n return JSON.stringify(state);\n }\n\n function kick_start() {\n if (storage.state.state) {\n log(\"[Slide] restore \" + dump_state());\n slide.setSlideState(storage.state.state);\n } else if (context.isAddApp) {\n log(\"[Slide] kick start\");\n slide.renderSlide(1);\n } else {\n log(\"[Slide] wait for restore\");\n const timeoutID = sideEffect.add(() => {\n const timer = setInterval(() => {\n if (!storage.state.state) {\n log(\"[Slide] timeout\");\n slide.renderSlide(1);\n }\n }, 15 * 1000);\n return () => clearInterval(timer);\n });\n const disposerID = sideEffect.push(\n storage.on(\"stateChanged\", () => {\n if (storage.state.state) {\n log(\"[Slide] restore \" + dump_state());\n slide.setSlideState(storage.state.state);\n sideEffect.flush(disposerID);\n sideEffect.flush(timeoutID);\n }\n })\n );\n }\n }\n\n // setup sync event\n slide.on(\"stateChange\", () => {\n if (storage.isWritable) {\n // log(\"[Slide] save state \" + dump_state(slide.slideState));\n storage.setState({ state: slide.slideState });\n }\n });\n slide.on(\"syncDispatch\", payload => {\n if (context.isWritable) {\n log(\"[Slide] dispatch \" + dump_state(get(payload, \"uuid\")));\n context.dispatchMagixEvent(\"syncDispatch\", payload);\n }\n });\n sideEffect.push(\n context.addMagixEventListener(\n \"syncDispatch\",\n ({ payload }) => {\n log(\"[Slide] receive \" + dump_state(get(payload, \"uuid\")));\n slide.emit(\"syncReceive\", payload);\n },\n { fireSelfEventAfterCommit: true }\n )\n );\n\n // save state\n slide.on(\"slideChange\", page => {\n if (context.isWritable && whiteboard) {\n log(\"[Slide] page to \" + page);\n whiteboard.jumpPage(page - 1);\n }\n });\n\n // handle ui events\n function disable_whiteboard() {\n if (whiteboard && whiteboard.view.divElement) {\n whiteboard.view.divElement.classList.add(wrap_class(\"wb-view-hidden\"));\n }\n }\n\n function enable_whiteboard() {\n if (whiteboard && whiteboard.view.divElement) {\n whiteboard.view.divElement.classList.remove(wrap_class(\"wb-view-hidden\"));\n }\n }\n\n viewer.setReadonly(!context.isWritable);\n sideEffect.push([\n context.emitter.on(\"writableChange\", () => viewer.setReadonly(!context.isWritable)),\n viewer.events.on(\"renderStart\", disable_whiteboard),\n viewer.events.on(\"renderEnd\", enable_whiteboard),\n ]);\n\n const isEditable = (el: EventTarget | null) => {\n if (!el) return false;\n const tagName = (el as HTMLElement).tagName;\n return tagName === \"INPUT\" || tagName === \"TEXTAREA\" || tagName === \"SELECT\";\n };\n\n sideEffect.addEventListener(window, \"keydown\", ev => {\n if (!ev || (ev.target as HTMLElement).className === \"telebox-quarantine-outer\") return;\n if (context.box.focus && !context.box.readonly && !isEditable(ev.target)) {\n if (ev.key === \"ArrowUp\" || ev.key === \"ArrowLeft\") {\n viewer.slide.prevStep();\n }\n if (ev.key === \"ArrowRight\" || ev.key === \"ArrowDown\") {\n viewer.slide.nextStep();\n }\n }\n });\n}\n","import type { SlideViewerOptions } from \"./SlideViewer\";\n\nimport { SlideViewer } from \"./SlideViewer\";\nimport { hc } from \"./utils\";\n\nexport function previewSlide(options: SlideViewerOptions & { container: HTMLElement }) {\n const { container, ...slideOptions } = options;\n const wrapper = hc(\"div\", \"preview-wrapper\");\n const viewer = new SlideViewer(slideOptions);\n wrapper.appendChild(document.createElement(\"style\")).textContent = SlideViewer.styles;\n wrapper.appendChild(viewer.$content);\n wrapper.appendChild(viewer.$footer);\n container.appendChild(wrapper);\n viewer.prepare(() => viewer.slide.renderSlide(1));\n return viewer;\n}\n\nif (import.meta.env.DEV) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (window as any).previewSlide = previewSlide;\n}\n","import type { NetlessApp } from \"@netless/window-manager\";\nimport type { ISlideConfig } from \"@netless/slide\";\nimport type { SlideViewerOptions } from \"./SlideViewer\";\nimport type { AddHooks, AppOptions, Attributes, MagixEvents, SlideState } from \"./typings\";\n\nexport type { SlideState, AddHooks, AppOptions, Attributes, MagixEvents, SlideViewerOptions };\n\nimport { Slide } from \"@netless/slide\";\nimport { SideEffectManager } from \"side-effect-manager\";\n\nimport { DefaultUrl } from \"./constants\";\nimport { addHooks, refrigerator } from \"./Refrigerator\";\nimport { SlideViewer } from \"./SlideViewer\";\nimport { Logger } from \"./Logger\";\nimport { connect } from \"./connect\";\nimport { previewSlide } from \"./preview\";\nimport { make_bg_color, make_timestamp } from \"./utils\";\n\nexport { Slide, SlideViewer, refrigerator, addHooks, DefaultUrl, previewSlide };\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const usePlugin = /* @__PURE__ */ Slide.usePlugin.bind(Slide) as (plugin: any) => void;\n\nexport const version = __APP_VERSION__;\n\nconst SlideApp: NetlessApp<Attributes, MagixEvents, AppOptions, void> = {\n kind: \"Slide\",\n config: { enableShadowDOM: false },\n setup(context) {\n console.log(\"[Slide] setup @ \" + __APP_VERSION__ + \" (\" + context.appId + \")\");\n\n const logger = new Logger(context);\n logger.info(\"[Slide] setup @ \" + __APP_VERSION__);\n\n if (!context.attributes.taskId) {\n throw new Error(\"[Slide] no taskId\");\n }\n\n const storage = context.createStorage(\"slide\", context.attributes);\n\n const appOptions = context.getAppOptions() || {};\n const renderOptions = appOptions.renderOptions || {};\n\n const sideEffect = new SideEffectManager();\n\n // Create UI\n const viewer = new SlideViewer({\n interactive: true,\n mode: \"interactive\",\n enableGlobalClick: true,\n timestamp: make_timestamp(context),\n logger: appOptions.logger || logger,\n whiteTracker: (context.displayer as unknown as { tracker: ISlideConfig[\"whiteTracker\"] }).tracker,\n renderOptions: {\n minFPS: renderOptions.minFPS || 25,\n maxFPS: renderOptions.maxFPS || 30,\n autoFPS: renderOptions.autoFPS ?? true,\n autoResolution: renderOptions.autoResolution ?? true,\n resolution: renderOptions.resolution,\n maxResolutionLevel: renderOptions.maxResolutionLevel,\n transactionBgColor: renderOptions.transactionBgColor || make_bg_color(context.box.$content),\n },\n rtcAudio: appOptions.rtcAudio,\n useLocalCache: appOptions.useLocalCache,\n resourceTimeout: appOptions.resourceTimeout,\n loaderDelegate: appOptions.loaderDelegate,\n navigatorDelegate: appOptions.navigatorDelegate,\n fixedFrameSize: appOptions.fixedFrameSize,\n taskId: storage.state.taskId,\n url: storage.state.url,\n });\n\n // For debugging.\n Object.assign(viewer, { context, logger });\n\n sideEffect.push(refrigerator.set(context.appId, viewer, context.box));\n\n if (import.meta.env.DEV) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (window as any).slideViewer = viewer;\n }\n\n // Log more\n sideEffect.push(viewer.events.on(\"freeze\", () => logger.info(\"[Slide] freeze\")));\n sideEffect.push(viewer.events.on(\"unfreeze\", () => logger.info(\"[Slide] unfreeze\")));\n sideEffect.push(\n viewer.events.on(\"prepareError\", error =>\n logger.info(\"[Slide] fetch slide info failed: \" + error.message)\n )\n );\n sideEffect.push(\n viewer.events.on(\"renderError\", ({ error, index }) =>\n logger.info(\"[Slide] render failed \" + `[${index}]: ${error.message}`)\n )\n );\n\n // Mount UI\n context.box.mountStyles(SlideViewer.styles);\n context.box.mountStage(viewer.$slide);\n context.box.mountFooter(viewer.$footer);\n context.box.mountContent(viewer.$content);\n sideEffect.push(() => viewer.destroy());\n\n // Connect UI with Netless App\n connect({ context, storage, viewer, sideEffect, logger });\n\n context.emitter.on(\"destroy\", () => {\n logger.info(\"[Slide] destroy\");\n logger.destroy();\n sideEffect.flushAll();\n });\n\n return viewer;\n },\n};\n\nexport default SlideApp;\n"],"names":["SOUP","SOUP_LEN","ID_LEN","reusedIdCarrier","genUID","i","invoke","fn","e","SideEffectManager","disposer","disposerID","joinDisposers","executor","disposers","el","type","listener","options","handler","timeout","ticket","uid","class_name","DefaultUrl","Refrigerator","__publicField","appId","viewer","box","id","index","a","b","za","_a","zb","_b","refrigerator","addHooks","emitter","event","ANY_EVENT","tryCall","arg","noop","startRelay","remitter","tryStartAllRelay","listeners","stopRelay","tryStopAllRelay","abortable","abortable2","abortable$abortable","onDispose","ReadonlyRemitter","data","eventName","off","onceListener","eventData","result","count","start","relayListener","Remitter","colorName","isArrayish","obj","require$$0","concat","slice","swizzle","simpleSwizzleModule","args","results","len","colorNames","require$$1","hasOwnProperty","reverseNames","name","cs","colorStringModule","string","prefix","val","model","abbr","hex","rgba","per","keyword","rgb","match","hexAlpha","i2","clamp","hsl","alpha","h","s","l","hwb","w","hexDouble","r","g","hsla","hwba","num","min","max","str","tag","hc","set_class","append","parent","child","wrap_class","trim_slash","get","o","k","block","resolve","make_timestamp","context","room","player","make_bg_color","bg","color","ColorString","make_prefix","taskId","url","fetch_slide_info","imgSrc","jsonUrl","p1","image","p2","on_visibility_change","callback","sidebarSVG","namespace","NS","$svg","$path","arrowLeftSVG","playSVG","pauseSVG","arrowRightSVG","saveSVG","spinnerSVG","$animate","$progress","create_footer","new_page_index_callback","on_new_page_index","toggle_preview_callback","on_toggle_preview","play_callback","on_play","readonly","sidebar","page_index","page_count","$footer","$btnSidebar","$pageJumps","$btnPageBack","$btnPlay","returnPlayTimer","$btnPageNext","$pageNumber","$pageNumberInput","$totalPage","class_readonly","saveToPdf","on_save_to_pdf","progressCallback","p","spinnerIcon","saveIcon","progress","$saveBtn","set_readonly","readonly_","set_sidebar","sidebar_","set_page_index","page_index_","force","set_page_count","page_count_","runningOnBrowser","isBot","supportsIntersectionObserver","supportsClassList","isHiDpi","defaultSettings","getExtendedSettings","customSettings","createInstance","classObj","eventString","instance","autoInitialize","optionsItem","SRC","SRCSET","SIZES","POSTER","ORIGINALS","DATA","statusLoading","statusLoaded","statusApplied","statusEntered","statusError","statusNative","dataPrefix","statusDataName","getData","element","attribute","setData","value","attrName","getStatus","setStatus","status","resetStatus","hasEmptyStatus","hasStatusLoading","hasStatusError","hasStatusNative","statusesAfterLoading","hadStartedLoading","safeCallback","arg1","arg2","arg3","addClass","className","removeClass","addTempImage","deleteTempImage","getTempImage","unobserve","observer","resetObserver","unobserveEntered","settings","updateLoadingCount","delta","decreaseToLoadCount","setToLoadCount","isSomethingLoading","haveElementsToLoad","getSourceTags","parentTag","sourceTags","childTag","forEachPictureSource","forEachVideoSource","attrsSrc","attrsSrcPoster","attrsSrcSrcsetSizes","attrsData","hasOriginalAttrs","getOriginalAttrs","deleteOriginalAttrs","setOriginalsObject","attributes","originals","saveOriginalBackgroundStyle","setOrResetAttribute","restoreOriginalAttrs","restoreOriginalBgImage","manageApplied","manageLoading","setAttributeIfValue","setImageAttributes","setSourcesImg","imgEl","sourceTag","setSourcesIframe","iframe","setSourcesVideo","videoEl","sourceEl","setSourcesObject","object","setBackground","bg1xValue","bgHiDpiValue","bgDataValue","setMultiBackground","setImgsetBackground","bgImgSetDataValue","imgSetValues","bgImageValues","setSourcesFunctions","setSourcesNative","setSourcesFunction","setSources","elementsWithLoadEvent","hasLoadEvent","checkFinish","addEventListener","removeEventListener","hasEventListeners","addEventListeners","loadHandler","errorHandler","loadEventName","removeEventListeners","eventListeners","doneHandler","goingNative","addOneShotEventListeners","elementToListenTo","loadBackground","loadRegular","load","loadNative","removeImageAttributes","resetSourcesImg","restoreImg","restoreVideo","restoreIframe","iframeEl","restoreObject","objectEl","restoreFunctions","restoreAttributes","restoreFunction","resetClasses","restore","cancelLoading","entry","onEnter","dontLoad","onExit","tagsWithNativeLazy","shouldUseNative","loadAllNative","elements","isIntersecting","getObserverSettings","intersectionHandler","entries","observeElements","updateObserver","elementsToObserve","setObserver","toArray","nodeSet","queryElements","excludeManagedElements","hasError","filterErrorElements","getElementsToLoad","retryLazyLoad","setOnlineCheck","resetOnlineCheck","LazyLoad","givenNodeset","elementsToLoad","create_sidebar","destroyed","active","pages","class_preview_active","$content","$previewMask","ev","set_active","$preview","lazyload","active_","set_pages","pages_","page_class","page_name_class","page","pageIndex","$page","$name","$img","destroy","get_active","_SlideViewer","resizeCanvas","resizeCtx","slideCount","width","height","pdfWidth","pdfHeight","whiteSnapshotCanvas","whiteCtx","orientation","jsPDF","pdf","slideSnapshot","img","whiteSnapshot","whiteImg","outputDataUrl","dataUrl","blob","downloadUrl","visible","infoPromise","resolveInfo","preview","slide","_","error","readyPromise","resolveReady","Slide","SlideViewer","styles","getRoomLogger","_Logger","msg","Logger","connect","storage","sideEffect","logger","log","whiteboard","canvas","ctx","scenePath","kick_start","dump_state","state","timeoutID","timer","payload","disable_whiteboard","enable_whiteboard","isEditable","tagName","previewSlide","container","slideOptions","wrapper","usePlugin","version","SlideApp","appOptions","renderOptions"],"mappings":"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"}
|