@netless/app-slide 0.3.0-canary.2 → 0.3.0-canary.21

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