@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.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.mjs","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.mjs","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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"}