@netless/app-slide 0.3.0-canary.12 → 0.3.0-canary.13

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/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 { 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 _queue: string[] = [];\n\n set(appId: string, viewer: SlideViewer) {\n this._map.set(appId, viewer);\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._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 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","import { class_name } from \"../constants\";\nimport { arrowLeftSVG, arrowRightSVG, pauseSVG, playSVG, sidebarSVG } from \"../icons\";\nimport { h, noop, set_class, wrap_class } from \"../utils\";\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 = h(\"div\");\n set_class($footer, \"footer\");\n\n const $btnSidebar = h(\"button\");\n set_class($btnSidebar, \"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 = h(\"div\");\n set_class($pageJumps, \"page-jumps\");\n\n const $btnPageBack = h(\"button\");\n set_class($btnPageBack, \"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 = h(\"button\");\n set_class($btnPlay, \"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 = setTimeout(() => {\n $btnPlay.classList.remove(wrap_class(\"footer-btn-playing\"));\n }, 500);\n };\n $pageJumps.appendChild($btnPlay);\n\n const $btnPageNext = h(\"button\");\n set_class($btnPageNext, \"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 = h(\"div\");\n set_class($pageNumber, \"page-number\");\n\n const $pageNumberInput = h(\"input\");\n set_class($pageNumberInput, \"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 = h(\"span\");\n set_class($totalPage, \"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 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 };\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 { PreviewPage } from \"./typings\";\n\nimport LazyLoad from \"vanilla-lazyload\";\nimport { append, h, noop, set_class, 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 = h(\"div\");\n set_class($content, \"content\");\n\n const $previewMask = h(\"div\");\n set_class($previewMask, \"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 = h(\"div\");\n set_class($preview, \"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 const lazyload = new LazyLoad({\n container: $preview,\n elements_selector: `.${wrap_class(\"preview-page>img\")}`,\n });\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 }\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.src = page.thumbnail;\n $img.alt = `page-${i}`;\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}\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 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\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(\"slideChange\", page => {\n if (this._destroyed) return;\n this.setPage(page);\n });\n\n this.slide.on(\"renderEnd\", () => {\n // ready = first render end\n if (!this._ready) {\n setTimeout(() => {\n this._ready = true;\n resolveReady();\n }, 1000);\n } else {\n // otherwise, clear overlay\n this.$overlay.style.opacity = \"\";\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","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, WhiteBoardView } from \"@netless/window-manager\";\nimport type { SideEffectManager } from \"side-effect-manager\";\nimport type { SlideViewer } from \"./SlideViewer\";\n\nimport { get } from \"./utils\";\n\nexport interface ConnectParams {\n context: AppContext;\n viewer: SlideViewer;\n sideEffect: SideEffectManager;\n logger: { info: (msg: string) => void };\n}\n\nexport function connect({ context, 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 kick_start();\n });\n\n const { slide } = viewer;\n\n function dump_state(state: unknown = context.storage.state.state) {\n return JSON.stringify(state);\n }\n\n function kick_start() {\n if (context.storage.state.state) {\n log(\"[Slide] restore \" + dump_state());\n slide.setSlideState(context.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 (!context.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 context.storage.on(\"stateChanged\", () => {\n if (context.storage.state.state) {\n log(\"[Slide] restore \" + dump_state());\n slide.setSlideState(context.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 (context.isWritable) {\n // log(\"[Slide] save state \" + dump_state(slide.slideState));\n context.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 viewer.setReadonly(!context.isWritable);\n sideEffect.push(\n context.emitter.on(\"writableChange\", w => {\n viewer.setReadonly(!w);\n })\n );\n\n sideEffect.addEventListener(window, \"keydown\", ev => {\n if (context.box.focus) {\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\";\n\nexport function previewSlide(options: SlideViewerOptions & { container: HTMLElement }) {\n const { container, ...slideOptions } = options;\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"netless-app-slide-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 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.storage.state.taskId) {\n throw new Error(\"[Slide] no taskId\");\n }\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: context.storage.state.taskId,\n url: context.storage.state.url,\n });\n\n // For debugging.\n Object.assign(viewer, { context, logger });\n\n sideEffect.push(refrigerator.set(context.appId, viewer));\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, 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","id","index","refrigerator","addHooks","emitter","event","Remitter","eventName","eventData","listeners","listener2","onceListener","_a","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","a","hwb","w","b","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","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","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","visible","infoPromise","resolveInfo","preview","slide","slideCount","width","height","_","error","readyPromise","resolveReady","Slide","SlideViewer","styles","getRoomLogger","_Logger","msg","Logger","connect","sideEffect","logger","log","whiteboard","kick_start","dump_state","state","timeoutID","timer","payload","previewSlide","container","slideOptions","wrapper","usePlugin","version","SlideApp","appOptions","renderOptions","_b"],"mappings":"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"}
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/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 { 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 _queue: string[] = [];\n\n set(appId: string, viewer: SlideViewer) {\n this._map.set(appId, viewer);\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._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 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","import { class_name } from \"../constants\";\nimport { arrowLeftSVG, arrowRightSVG, pauseSVG, playSVG, sidebarSVG } from \"../icons\";\nimport { h, noop, set_class, wrap_class } from \"../utils\";\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 = h(\"div\");\n set_class($footer, \"footer\");\n\n const $btnSidebar = h(\"button\");\n set_class($btnSidebar, \"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 = h(\"div\");\n set_class($pageJumps, \"page-jumps\");\n\n const $btnPageBack = h(\"button\");\n set_class($btnPageBack, \"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 = h(\"button\");\n set_class($btnPlay, \"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 = setTimeout(() => {\n $btnPlay.classList.remove(wrap_class(\"footer-btn-playing\"));\n }, 500);\n };\n $pageJumps.appendChild($btnPlay);\n\n const $btnPageNext = h(\"button\");\n set_class($btnPageNext, \"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 = h(\"div\");\n set_class($pageNumber, \"page-number\");\n\n const $pageNumberInput = h(\"input\");\n set_class($pageNumberInput, \"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 = h(\"span\");\n set_class($totalPage, \"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 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 };\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 { PreviewPage } from \"./typings\";\n\nimport LazyLoad from \"vanilla-lazyload\";\nimport { append, h, noop, set_class, 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 = h(\"div\");\n set_class($content, \"content\");\n\n const $previewMask = h(\"div\");\n set_class($previewMask, \"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 = h(\"div\");\n set_class($preview, \"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 const lazyload = new LazyLoad({\n container: $preview,\n elements_selector: `.${wrap_class(\"preview-page>img\")}`,\n });\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 }\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.src = page.thumbnail;\n $img.alt = `page-${i}`;\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}\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 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\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(\"slideChange\", page => {\n if (this._destroyed) return;\n this.setPage(page);\n });\n\n this.slide.on(\"renderEnd\", () => {\n // ready = first render end\n if (!this._ready) {\n setTimeout(() => {\n this._ready = true;\n resolveReady();\n }, 1000);\n } else {\n // otherwise, clear overlay\n this.$overlay.style.opacity = \"\";\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","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 } 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 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 (context.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 viewer.setReadonly(!context.isWritable);\n sideEffect.push(\n context.emitter.on(\"writableChange\", w => {\n viewer.setReadonly(!w);\n })\n );\n\n sideEffect.addEventListener(window, \"keydown\", ev => {\n if (context.box.focus) {\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\";\n\nexport function previewSlide(options: SlideViewerOptions & { container: HTMLElement }) {\n const { container, ...slideOptions } = options;\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"netless-app-slide-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 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));\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","id","index","refrigerator","addHooks","emitter","event","Remitter","eventName","eventData","listeners","listener2","onceListener","_a","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","a","hwb","w","b","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","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","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","visible","infoPromise","resolveInfo","preview","slide","slideCount","width","height","_","error","readyPromise","resolveReady","Slide","SlideViewer","styles","getRoomLogger","_Logger","msg","Logger","connect","storage","sideEffect","logger","log","whiteboard","kick_start","dump_state","state","timeoutID","timer","payload","previewSlide","container","slideOptions","wrapper","usePlugin","version","SlideApp","appOptions","renderOptions","_b"],"mappings":"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"}