{"version":3,"mappings":"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","names":["adapters","logger","messages","now","secondsSince","time","ConnectionMonitor","connection","staleThreshold","reconnectionBackoffRate","backoff","jitter","INTERNAL","message_types","protocols","supportedProtocols","indexOf","Connection","consumer","data","socketProtocols","allowReconnect","error","states","state","eventName","handler","event","identifier","message","reason","reconnect","type","extend","object","properties","key","value","Subscription","params","mixin","action","SubscriptionGuarantor","subscriptions","subscription","s","Subscriptions","channelName","channel","callbackName","args","command","Consumer","url","createWebSocketURL","subprotocol","a","createConsumer","getConfig","name","element","GuideChannel","gname","icallback","rcallback","that","lastUpdate","init_callback","receive_callback","f","needUpdate","attr","maxZ","n","z","old","incoming","newobject","p","rect","container","titleBar","titleSpan","footerDiv","buttonSet","b","button","buttonSpan","overlay","closeThis","e","route","before_init","after_init","guides_initiated","Step","guide","label","option","stepIndex","completeIfLastStep","guides","Guide","local","localProperty","resetDialogOpen","diaglogClose","nameSpan","buttonsDiv","select","text","test","width","keepDialogOrBottomBarOnTop","i","step","index","callback","launch","tte","v","on","pid","promise","r","selector","disappear","xpath","check","__publicField","guideScripts","initGuides","g","loadedGuides","parseTTParam","q","o","tooltips","ttobj","currentTooltips","resolve","tooltip","cover","existingParams","content","ev","k","conditionMet","promiseMarker","tryToResolve","marker","m","assisting","resolved","callbackCondition","updateDisplay","pointer","offset","ownoffset","old_scroll","new_offset","new_ownoffset","new_scroll","height","ownWidth","ownHeight","newtop","newleft","docWidth","docHeight","canvas","ctx","border","outline","node"],"ignoreList":[0],"sources":["../../../node_modules/@rails/actioncable/app/assets/javascripts/actioncable.esm.js","../../../app/javascript/channels/consumer.js","../../../app/javascript/channels/guide_channel.js","../../../app/javascript/guides/guide.js"],"sourcesContent":["var adapters = {\n logger: typeof console !== \"undefined\" ? console : undefined,\n WebSocket: typeof WebSocket !== \"undefined\" ? WebSocket : undefined\n};\n\nvar logger = {\n log(...messages) {\n if (this.enabled) {\n messages.push(Date.now());\n adapters.logger.log(\"[ActionCable]\", ...messages);\n }\n }\n};\n\nconst now = () => (new Date).getTime();\n\nconst secondsSince = time => (now() - time) / 1e3;\n\nclass ConnectionMonitor {\n constructor(connection) {\n this.visibilityDidChange = this.visibilityDidChange.bind(this);\n this.connection = connection;\n this.reconnectAttempts = 0;\n }\n start() {\n if (!this.isRunning()) {\n this.startedAt = now();\n delete this.stoppedAt;\n this.startPolling();\n addEventListener(\"visibilitychange\", this.visibilityDidChange);\n logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`);\n }\n }\n stop() {\n if (this.isRunning()) {\n this.stoppedAt = now();\n this.stopPolling();\n removeEventListener(\"visibilitychange\", this.visibilityDidChange);\n logger.log(\"ConnectionMonitor stopped\");\n }\n }\n isRunning() {\n return this.startedAt && !this.stoppedAt;\n }\n recordMessage() {\n this.pingedAt = now();\n }\n recordConnect() {\n this.reconnectAttempts = 0;\n delete this.disconnectedAt;\n logger.log(\"ConnectionMonitor recorded connect\");\n }\n recordDisconnect() {\n this.disconnectedAt = now();\n logger.log(\"ConnectionMonitor recorded disconnect\");\n }\n startPolling() {\n this.stopPolling();\n this.poll();\n }\n stopPolling() {\n clearTimeout(this.pollTimeout);\n }\n poll() {\n this.pollTimeout = setTimeout((() => {\n this.reconnectIfStale();\n this.poll();\n }), this.getPollInterval());\n }\n getPollInterval() {\n const {staleThreshold: staleThreshold, reconnectionBackoffRate: reconnectionBackoffRate} = this.constructor;\n const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10));\n const jitterMax = this.reconnectAttempts === 0 ? 1 : reconnectionBackoffRate;\n const jitter = jitterMax * Math.random();\n return staleThreshold * 1e3 * backoff * (1 + jitter);\n }\n reconnectIfStale() {\n if (this.connectionIsStale()) {\n logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`);\n this.reconnectAttempts++;\n if (this.disconnectedRecently()) {\n logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`);\n } else {\n logger.log(\"ConnectionMonitor reopening\");\n this.connection.reopen();\n }\n }\n }\n get refreshedAt() {\n return this.pingedAt ? this.pingedAt : this.startedAt;\n }\n connectionIsStale() {\n return secondsSince(this.refreshedAt) > this.constructor.staleThreshold;\n }\n disconnectedRecently() {\n return this.disconnectedAt && secondsSince(this.disconnectedAt) < this.constructor.staleThreshold;\n }\n visibilityDidChange() {\n if (document.visibilityState === \"visible\") {\n setTimeout((() => {\n if (this.connectionIsStale() || !this.connection.isOpen()) {\n logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`);\n this.connection.reopen();\n }\n }), 200);\n }\n }\n}\n\nConnectionMonitor.staleThreshold = 6;\n\nConnectionMonitor.reconnectionBackoffRate = .15;\n\nvar INTERNAL = {\n message_types: {\n welcome: \"welcome\",\n disconnect: \"disconnect\",\n ping: \"ping\",\n confirmation: \"confirm_subscription\",\n rejection: \"reject_subscription\"\n },\n disconnect_reasons: {\n unauthorized: \"unauthorized\",\n invalid_request: \"invalid_request\",\n server_restart: \"server_restart\",\n remote: \"remote\"\n },\n default_mount_path: \"/cable\",\n protocols: [ \"actioncable-v1-json\", \"actioncable-unsupported\" ]\n};\n\nconst {message_types: message_types, protocols: protocols} = INTERNAL;\n\nconst supportedProtocols = protocols.slice(0, protocols.length - 1);\n\nconst indexOf = [].indexOf;\n\nclass Connection {\n constructor(consumer) {\n this.open = this.open.bind(this);\n this.consumer = consumer;\n this.subscriptions = this.consumer.subscriptions;\n this.monitor = new ConnectionMonitor(this);\n this.disconnected = true;\n }\n send(data) {\n if (this.isOpen()) {\n this.webSocket.send(JSON.stringify(data));\n return true;\n } else {\n return false;\n }\n }\n open() {\n if (this.isActive()) {\n logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`);\n return false;\n } else {\n const socketProtocols = [ ...protocols, ...this.consumer.subprotocols || [] ];\n logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${socketProtocols}`);\n if (this.webSocket) {\n this.uninstallEventHandlers();\n }\n this.webSocket = new adapters.WebSocket(this.consumer.url, socketProtocols);\n this.installEventHandlers();\n this.monitor.start();\n return true;\n }\n }\n close({allowReconnect: allowReconnect} = {\n allowReconnect: true\n }) {\n if (!allowReconnect) {\n this.monitor.stop();\n }\n if (this.isOpen()) {\n return this.webSocket.close();\n }\n }\n reopen() {\n logger.log(`Reopening WebSocket, current state is ${this.getState()}`);\n if (this.isActive()) {\n try {\n return this.close();\n } catch (error) {\n logger.log(\"Failed to reopen WebSocket\", error);\n } finally {\n logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`);\n setTimeout(this.open, this.constructor.reopenDelay);\n }\n } else {\n return this.open();\n }\n }\n getProtocol() {\n if (this.webSocket) {\n return this.webSocket.protocol;\n }\n }\n isOpen() {\n return this.isState(\"open\");\n }\n isActive() {\n return this.isState(\"open\", \"connecting\");\n }\n triedToReconnect() {\n return this.monitor.reconnectAttempts > 0;\n }\n isProtocolSupported() {\n return indexOf.call(supportedProtocols, this.getProtocol()) >= 0;\n }\n isState(...states) {\n return indexOf.call(states, this.getState()) >= 0;\n }\n getState() {\n if (this.webSocket) {\n for (let state in adapters.WebSocket) {\n if (adapters.WebSocket[state] === this.webSocket.readyState) {\n return state.toLowerCase();\n }\n }\n }\n return null;\n }\n installEventHandlers() {\n for (let eventName in this.events) {\n const handler = this.events[eventName].bind(this);\n this.webSocket[`on${eventName}`] = handler;\n }\n }\n uninstallEventHandlers() {\n for (let eventName in this.events) {\n this.webSocket[`on${eventName}`] = function() {};\n }\n }\n}\n\nConnection.reopenDelay = 500;\n\nConnection.prototype.events = {\n message(event) {\n if (!this.isProtocolSupported()) {\n return;\n }\n const {identifier: identifier, message: message, reason: reason, reconnect: reconnect, type: type} = JSON.parse(event.data);\n this.monitor.recordMessage();\n switch (type) {\n case message_types.welcome:\n if (this.triedToReconnect()) {\n this.reconnectAttempted = true;\n }\n this.monitor.recordConnect();\n return this.subscriptions.reload();\n\n case message_types.disconnect:\n logger.log(`Disconnecting. Reason: ${reason}`);\n return this.close({\n allowReconnect: reconnect\n });\n\n case message_types.ping:\n return null;\n\n case message_types.confirmation:\n this.subscriptions.confirmSubscription(identifier);\n if (this.reconnectAttempted) {\n this.reconnectAttempted = false;\n return this.subscriptions.notify(identifier, \"connected\", {\n reconnected: true\n });\n } else {\n return this.subscriptions.notify(identifier, \"connected\", {\n reconnected: false\n });\n }\n\n case message_types.rejection:\n return this.subscriptions.reject(identifier);\n\n default:\n return this.subscriptions.notify(identifier, \"received\", message);\n }\n },\n open() {\n logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`);\n this.disconnected = false;\n if (!this.isProtocolSupported()) {\n logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\");\n return this.close({\n allowReconnect: false\n });\n }\n },\n close(event) {\n logger.log(\"WebSocket onclose event\");\n if (this.disconnected) {\n return;\n }\n this.disconnected = true;\n this.monitor.recordDisconnect();\n return this.subscriptions.notifyAll(\"disconnected\", {\n willAttemptReconnect: this.monitor.isRunning()\n });\n },\n error() {\n logger.log(\"WebSocket onerror event\");\n }\n};\n\nconst extend = function(object, properties) {\n if (properties != null) {\n for (let key in properties) {\n const value = properties[key];\n object[key] = value;\n }\n }\n return object;\n};\n\nclass Subscription {\n constructor(consumer, params = {}, mixin) {\n this.consumer = consumer;\n this.identifier = JSON.stringify(params);\n extend(this, mixin);\n }\n perform(action, data = {}) {\n data.action = action;\n return this.send(data);\n }\n send(data) {\n return this.consumer.send({\n command: \"message\",\n identifier: this.identifier,\n data: JSON.stringify(data)\n });\n }\n unsubscribe() {\n return this.consumer.subscriptions.remove(this);\n }\n}\n\nclass SubscriptionGuarantor {\n constructor(subscriptions) {\n this.subscriptions = subscriptions;\n this.pendingSubscriptions = [];\n }\n guarantee(subscription) {\n if (this.pendingSubscriptions.indexOf(subscription) == -1) {\n logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`);\n this.pendingSubscriptions.push(subscription);\n } else {\n logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`);\n }\n this.startGuaranteeing();\n }\n forget(subscription) {\n logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`);\n this.pendingSubscriptions = this.pendingSubscriptions.filter((s => s !== subscription));\n }\n startGuaranteeing() {\n this.stopGuaranteeing();\n this.retrySubscribing();\n }\n stopGuaranteeing() {\n clearTimeout(this.retryTimeout);\n }\n retrySubscribing() {\n this.retryTimeout = setTimeout((() => {\n if (this.subscriptions && typeof this.subscriptions.subscribe === \"function\") {\n this.pendingSubscriptions.map((subscription => {\n logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`);\n this.subscriptions.subscribe(subscription);\n }));\n }\n }), 500);\n }\n}\n\nclass Subscriptions {\n constructor(consumer) {\n this.consumer = consumer;\n this.guarantor = new SubscriptionGuarantor(this);\n this.subscriptions = [];\n }\n create(channelName, mixin) {\n const channel = channelName;\n const params = typeof channel === \"object\" ? channel : {\n channel: channel\n };\n const subscription = new Subscription(this.consumer, params, mixin);\n return this.add(subscription);\n }\n add(subscription) {\n this.subscriptions.push(subscription);\n this.consumer.ensureActiveConnection();\n this.notify(subscription, \"initialized\");\n this.subscribe(subscription);\n return subscription;\n }\n remove(subscription) {\n this.forget(subscription);\n if (!this.findAll(subscription.identifier).length) {\n this.sendCommand(subscription, \"unsubscribe\");\n }\n return subscription;\n }\n reject(identifier) {\n return this.findAll(identifier).map((subscription => {\n this.forget(subscription);\n this.notify(subscription, \"rejected\");\n return subscription;\n }));\n }\n forget(subscription) {\n this.guarantor.forget(subscription);\n this.subscriptions = this.subscriptions.filter((s => s !== subscription));\n return subscription;\n }\n findAll(identifier) {\n return this.subscriptions.filter((s => s.identifier === identifier));\n }\n reload() {\n return this.subscriptions.map((subscription => this.subscribe(subscription)));\n }\n notifyAll(callbackName, ...args) {\n return this.subscriptions.map((subscription => this.notify(subscription, callbackName, ...args)));\n }\n notify(subscription, callbackName, ...args) {\n let subscriptions;\n if (typeof subscription === \"string\") {\n subscriptions = this.findAll(subscription);\n } else {\n subscriptions = [ subscription ];\n }\n return subscriptions.map((subscription => typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined));\n }\n subscribe(subscription) {\n if (this.sendCommand(subscription, \"subscribe\")) {\n this.guarantor.guarantee(subscription);\n }\n }\n confirmSubscription(identifier) {\n logger.log(`Subscription confirmed ${identifier}`);\n this.findAll(identifier).map((subscription => this.guarantor.forget(subscription)));\n }\n sendCommand(subscription, command) {\n const {identifier: identifier} = subscription;\n return this.consumer.send({\n command: command,\n identifier: identifier\n });\n }\n}\n\nclass Consumer {\n constructor(url) {\n this._url = url;\n this.subscriptions = new Subscriptions(this);\n this.connection = new Connection(this);\n this.subprotocols = [];\n }\n get url() {\n return createWebSocketURL(this._url);\n }\n send(data) {\n return this.connection.send(data);\n }\n connect() {\n return this.connection.open();\n }\n disconnect() {\n return this.connection.close({\n allowReconnect: false\n });\n }\n ensureActiveConnection() {\n if (!this.connection.isActive()) {\n return this.connection.open();\n }\n }\n addSubProtocol(subprotocol) {\n this.subprotocols = [ ...this.subprotocols, subprotocol ];\n }\n}\n\nfunction createWebSocketURL(url) {\n if (typeof url === \"function\") {\n url = url();\n }\n if (url && !/^wss?:/i.test(url)) {\n const a = document.createElement(\"a\");\n a.href = url;\n a.href = a.href;\n a.protocol = a.protocol.replace(\"http\", \"ws\");\n return a.href;\n } else {\n return url;\n }\n}\n\nfunction createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n return new Consumer(url);\n}\n\nfunction getConfig(name) {\n const element = document.head.querySelector(`meta[name='action-cable-${name}']`);\n if (element) {\n return element.getAttribute(\"content\");\n }\n}\n\nexport { Connection, ConnectionMonitor, Consumer, INTERNAL, Subscription, SubscriptionGuarantor, Subscriptions, adapters, createConsumer, createWebSocketURL, getConfig, logger };\n","// consumer.js - JavaScript file for readying a consumer\n\nimport { createConsumer } from \"@rails/actioncable\";\n\nexport default createConsumer();\n","// javascript file for chat channel\nimport consumer from \"./consumer\";\n\nvar GuideChannel = {\n // This will return a handler with the update and on_data methods\n create: (gname, icallback, rcallback) => {\n let that, lastUpdate = {}, init_callback = [icallback], receive_callback = [rcallback];\n console.log(\"Will create channel\", gname);\n consumer.subscriptions.create({channel: \"GuideChannel\", gname: gname}, {\n connected(data) {\n console.log(\"Guide Channel connection active\");\n that = this;\n init_callback.map( f=>(f instanceof Function && f.call(this)) );\n },\n disconnected() {\n console.log(\"Guide Channel connection terminated\");\n },\n received(data) {\n console.log(\"Received data\", data);\n receive_callback.map( f=>(f instanceof Function && f.call(this, data)) );\n }\n });\n const handler = {\n update: data=>{\n if (that){\n let needUpdate = false;\n // Only send update if data differs from last time\n for (let attr in data)\n if (!(attr in lastUpdate) || lastUpdate[attr] != data[attr]) needUpdate = true;\n if (needUpdate) that.perform(\"update\", data);\n lastUpdate = data;\n }\n return handler;\n },\n get: ()=>[handler,that&&that.perform(\"get\")],\n on_init: f=>[handler,init_callback.push(f)][0],\n on_data: f=>[handler,receive_callback.push(f)][0]\n };\n return handler;\n }\n};\n\nexport { GuideChannel };\n","import \"./guides.css\";\nimport { GuideChannel } from \"../channels/guide_channel\";\n\n// helper function\nconst maxZ = ()=>Math.max(...[...document.querySelectorAll(\"body *\")].map(n=>{\n const s = window.getComputedStyle(n), z = parseInt(s['z-index']);\n if (s.position!='static'&&z<999999999) return z||1;\n else return 1;\n}));\nconst extend = function(old, incoming){\n const newobject = {};\n if (old) \n Object.keys(old).forEach( p => newobject[p] = old[p] );\n if (incoming)\n Object.keys(incoming).forEach( p => !newobject.hasOwnProperty(p) && (newobject[p] = incoming[p]) );\n return newobject;\n}\n\n\nwindow.Node.prototype.inDOM = function(){ return document.documentElement.contains(this); }\nwindow.Node.prototype.isVisible = function(){\n if (!this.inDOM()) return false;\n const rect = this.getBoundingClientRect();\n if (rect.width==0 && rect.height==0) return false;\n if (rect.bottom<0||rect.top>window.innerHeight||rect.right<0||rect.left>window.innerWidth)\n return false;\n return true;\n}\nwindow.Node.prototype.hide = function(){\n this._oldDisplay = window.getComputedStyle(this).display;\n this.style.display = \"none\";\n}\nwindow.Node.prototype.show = function(){\n if (this._oldDisplay) this.style.display = this._oldDisplay;\n else this.style.display = \"block\";\n}\nwindow.Node.prototype.dialog = function(params){\n if (params==\"close\"){\n if (this._dialogElement) this._dialogElement.close();\n return;\n }\n const container = document.createElement(\"DIV\");\n container.classList.add(\"ui-dialog\",\"ui-widget\",\"ui-widget-content\",\"ui-corner-all\",\n \"ui-front\",\"ui-dialog-buttons\",\"ui-draggable\",\"ui-resizable\");\n const titleBar = document.createElement(\"DIV\");\n titleBar.classList.add(\"ui-dialog-titlebar\",\"ui-widget-header\",\"ui-corner-all\",\"ui-helper-clearfix\");\n const titleSpan = document.createElement(\"SPAN\");\n titleSpan.classList.add(\"ui-dialog-title\");\n titleSpan.innerHTML = params.title;\n // const closeButton = document.createElement(\"BUTTON\");\n // closeButton.classList.add(\"ui-button\",\"ui-widget\",\"ui-state-default\",\n // \"ui-corner-all\",\"ui-button-icon-only\",\"ui-dialog-titlebar-close\");\n titleBar.append(titleSpan);\n // titleBar.append(closeButton);\n container.append(titleBar);\n this.classList.add(\"ui-dialog-content\",\"ui-widget-content\");\n container.append(this);\n const footerDiv = document.createElement(\"DIV\");\n footerDiv.classList.add(\"ui-dialog-buttonpane\",\"ui-widget-content\",\"ui-helper-clearfix\");\n const buttonSet = document.createElement(\"DIV\");\n buttonSet.classList.add(\"ui-dialog-buttonset\");\n for (let b in params.buttons){\n const button = document.createElement(\"BUTTON\");\n button.classList.add(\"ui-button\",\"ui-widget\",\"ui-state-default\",\"ui-corner-all\",\"ui-button-text-only\");\n const buttonSpan = document.createElement(\"SPAN\");\n buttonSpan.classList.add(\"ui-button-text\");\n buttonSpan.innerText = b;\n button.append(buttonSpan);\n if (params.buttons[b] instanceof Function)\n button.addEventListener('click', ()=>params.buttons[b].apply(this));\n buttonSet.append(button);\n }\n footerDiv.append(buttonSet);\n container.append(footerDiv);\n container.style.width = (params.width?params.width+\"px\":\"auto\");\n container.style.height = (params.height?params.height+\"px\":\"auto\");\n container.style.position = 'absolute';\n container.style.display = 'block';\n const overlay = document.createElement(\"DIV\");\n overlay.classList.add(\"ui-widget-overlay\",\"ui-front\");\n const closeThis = ()=>{\n if (params.beforeClose instanceof Function) params.beforeClose.apply(this);\n container.remove();\n overlay.remove();\n }\n if (params.closeOnEscape) document.addEventListener('keydown', e=>{\n if (e.key==\"Escape\") closeThis();\n });\n if (params.resizable){\n // create buttons...\n }\n container.close = closeThis;\n this._dialogElement = container;\n document.body.append(overlay);\n document.body.append(container);\n return this;\n};\n\n\nlet route = {};\nif (window.Guide && window.Guide.route) route = window.Guide.route;\n\nconst before_init = [], after_init = [];\n\nlet guides_initiated = false;\n\n// A step is basically a promise associated to a guide\nclass Step {\n constructor(guide, f, name){\n this._guide = guide;\n this._action = f;\n this._name = name;\n const n = this._guide._steps.length;\n const label = (typeof name===\"string\"?`${n+1}: ${this._name}`:`Step #${n+1}`);\n const option = document.createElement(\"OPTION\");\n option.value = n;\n option.innerText = label;\n this._guide._stepsNavigator.appendChild(option);\n }\n run(){\n if (!this._guide._launched||this._guide._complete===true||this._guide._dismissed===true||this._guide._active===false) return;\n this._guide._counterpid = (this._guide._counterpid||0) + 1;\n this._pid = this._guide._counterpid;\n // Update guide's step index first\n const stepIndex = this._guide._steps.indexOf(this);\n this._guide._currentStep = stepIndex;\n // Append the guide's dismiss button while a step is running\n document.querySelector(\"body\").appendChild( this._guide._bottomBar );\n this._guide._stepsNavigator.querySelectorAll('option').forEach(n=>{\n if (n.value==stepIndex) n.selected = true;\n else n.selected=false;\n });\n this._guide._stepsNavigator.dispatchEvent(new Event('change'));\n \n // This will run after the step's function has run\n const completeIfLastStep = () => {\n // If _currentStep has changed, a new step was called\n if (this._guide._currentStep != stepIndex) return;\n // If not, the guide is complete\n else this._guide.complete();\n };\n // Run action\n if (this._action instanceof Function){\n const action = this._action.call(this._guide);\n // action is a promise if _action is async or explicitly returns a Promise\n if (action instanceof Promise)\n action.then( completeIfLastStep ).catch( ()=>this._guide._bottomBar.hide() );\n else // if not a promise, immediately check if complete\n completeIfLastStep();\n }\n else // If steps are properly created, this 'else' should never happen\n completeIfLastStep();\n }\n}\n\n// Keep track of guides to avoid re-creating them (esp. with Guide.reset)\nconst guides = {};\n\n// A guide encapsulates steps and has a few properties\nclass Guide {\n // Guides are (re-)created on each page load, with localStorage+server for persistency\n constructor(name){\n if (guides.hasOwnProperty(name)) return guides[name];\n // Properties prefixed with _ (unlike methods)\n this._name = name;\n this._steps = [];\n this._docReady = false; // Whether DOM has been loaded\n this._init = false; // Whether the server responded\n this._gotData = false; // Whether the server sent data\n this._launched = false; // Whether the guide started\n\n // Callbacks for channel -- see init_channel below\n this._before_init = [];\n this._after_init = [];\n this._before_data = [];\n this._after_data = [];\n \n // To declare a property using the proxy above\n const local = {};\n const localProperty = p => Object.defineProperty(this,p, {\n get(){ return local[p]; },\n set(value){ \n local[p] = value;\n this.update_channel(); // Send update to server\n return true;\n }\n });\n localProperty(\"_currentStep\"); // Index of current step\n localProperty(\"_firstStep\"); // Index of first step\n localProperty(\"_complete\"); // Whether the last step was reached*\n localProperty(\"_active\"); // If false, guide won't start*\n localProperty(\"_dismissed\"); // Just a flag, no effect in guide.js\n localProperty(\"_misc\"); // A string (possibly a JSONed hash) to store misc values as needed\n // * {_complete: true, _dismissed: true, _active: false} means permanent dismissal\n\n\n this._resetButton = document.createElement(\"BUTTON\");\n this._resetButton.classList.add(\"resetButton\");\n this._resetButton.innerText = 'Reset';\n this._resetDialogBox = document.createElement(\"DIV\");\n this._resetDialogBox.classList.add(\"resetDialogBox\");\n let resetDialogOpen = false;\n this._resetButton.addEventListener('click', () => {\n if (resetDialogOpen) return;\n resetDialogOpen = true;\n let diaglogClose = false; //Created this variable so that default X/cross of the dialog box don't close it, and make user use the cancel button instead\n // $(this._resetDialogBox).dialog({\n this._resetDialogBox.dialog({ \n title: \"Are You Sure?\",\n // appendTo: \".tooltip.cover\",\n resizable: true,\n width: 350,\n closeOnEscape: false,\n modal: true,\n buttons: {\n Reset: () => {\n diaglogClose = true;\n this.reset(/*launch=*/true);\n // $(this._resetDialogBox).dialog( \"close\" );\n this._resetDialogBox.dialog( \"close\" );\n },\n Cancel: () => {\n diaglogClose = true;\n // $(this._resetDialogBox).dialog( \"close\" );\n this._resetDialogBox.dialog( \"close\" );\n }\n },\n beforeClose: function () {\n resetDialogOpen = false;\n return diaglogClose;\n }\n });\n this._resetDialogBox.innerHTML = `This will go back to the first step of ${name}.`;\n });\n\n this._dismissButton = document.createElement(\"BUTTON\");\n this._dismissButton.classList.add(\"dismissButton\");\n this._dismissButton.innerText = \"Dismiss\";\n this._dismissDialogBox = document.createElement(\"DIV\");\n this._dismissDialogBox.classList.add(\"dialogBox\");\n this._dismissButton.addEventListener('click', () => {\n let diaglogClose = false; //Created this variable so that default X/cross of the dialog box don't close it, and make user use the cancel button instead\n // $(this._dismissDialogBox).dialog({\n this._dismissDialogBox.dialog({\n title: \"Are You Sure?\",\n // appendTo: \".tooltip.cover\",\n resizable: true,\n width: 350,\n closeOnEscape: false,\n modal: true,\n buttons: {\n Dismiss: () => {\n diaglogClose = true;\n this.dismiss() // To Dismiss the guide\n // $(this._dismissDialogBox).dialog( \"close\" );\n this._dismissDialogBox.dialog( \"close\" );\n },\n Cancel: () => {\n diaglogClose = true;\n // $(this._dismissDialogBox).dialog( \"close\" );\n this._dismissDialogBox.dialog( \"close\" );\n }\n },\n beforeClose: function () {\n return diaglogClose;\n }\n });\n this._dismissDialogBox.innerHTML = `This will terminate ${name}.`;\n });\n\n this._stepsNavigator = document.createElement(\"SELECT\");\n const nameSpan = document.createElement(\"SPAN\");\n nameSpan.classList.add(\"guide\",\"name\");\n nameSpan.innerText = `${name} Guide`;\n const buttonsDiv = document.createElement(\"DIV\");\n buttonsDiv.classList.add(\"buttons\");\n buttonsDiv.appendChild(this._resetButton);\n buttonsDiv.appendChild(this._dismissButton);\n this._bottomBar = document.createElement(\"DIV\");\n this._bottomBar.classList.add(\"guide\",\"bottomBar\");\n this._bottomBar.appendChild(nameSpan);\n this._bottomBar.appendChild(this._stepsNavigator);\n this._bottomBar.appendChild(buttonsDiv);\n \n this._stepsNavigator.addEventListener(\"change\", ()=>{\n if (this._complete===true||this._dismissed===true||this._active===false||this._halted===true) return;\n const n = this._stepsNavigator.value;\n if (n>=0 && n{\n const z = maxZ();\n if (this._dismissDialogBox.isVisible()){\n const container = this._dismissDialogBox.parentElement, overlay = container.previousSibling;\n if (window.getComputedStyle(container)[\"z-index\"]!=z) container.style[\"z-index\"] = z+1;\n if (overlay && window.getComputedStyle(overlay)[\"z-index\"]!=z) overlay.style[\"z-index\"] = z;\n }\n else if (this._resetDialogBox.isVisible()){\n const container = this._resetDialogBox.parentElement, overlay = container.previousSibling;\n if (window.getComputedStyle(container)[\"z-index\"]!=z) container.style[\"z-index\"] = z+1;\n if (overlay && window.getComputedStyle(overlay)[\"z-index\"]!=z) overlay.style[\"z-index\"] = z;\n }\n else if (this._bottomBar.isVisible() && window.getComputedStyle(this._bottomBar)[\"z-index\"]!=z)\n this._bottomBar.style[\"z-index\"] = z+1;\n window.requestAnimationFrame( keepDialogOrBottomBarOnTop );\n }\n keepDialogOrBottomBarOnTop();\n \n guides[name] = this;\n\n if (guides_initiated)\n this.init();\n }\n // Close all of the guide's tooltips\n closeTooltips(){\n if (this._tooltips instanceof Array)\n for (let i = 0; i < this._tooltips.length; i++)\n if (this._tooltips[i] instanceof Node) this._tooltips[i].parentElement.remove();\n // if (this._tooltips[i] instanceof jQuery) this._tooltips[i].parent().remove();\n }\n // Complete the guide\n complete(){\n console.log(\"Completing \"+this._name);\n this.closeTooltips();\n this._currentStep = -1;\n this._complete = true;\n this._bottomBar.hide();\n // if (this._bottomBar instanceof jQuery) this._bottomBar.hide();\n }\n // Dismisse the guide\n dismiss(){\n this._bottomBar.hide();\n this._dismissed = true;\n this.closeTooltips();\n }\n // Initiate the guide after all the guide scripts have been processed\n init(){\n if (this._halted) return;\n this.channel = GuideChannel.create( this._name , \n () => { // on_init\n this._before_init.map( f=>f instanceof Function && f.call(this) );\n this._init = true;\n this.channel.get();\n this._after_init.map( f=>f instanceof Function && f.call(this) );\n }, \n data => { // on_data\n data = JSON.parse(data);\n this._before_data.map( f=>f instanceof Function && f.call(this, data) );\n // Priority to the server's settings (in case localStorage was wiped)\n if (data.currentstep!==null&&data.currentstep>=0&&data.currentstepf instanceof Function && f.call(this, data) );\n });\n }\n // Prevent the guide from initiating\n halt() {\n this._halted = true;\n }\n before_init(f) { \n this._before_init.push(f);\n return this;\n }\n after_init(f) { \n this._after_init.push(f);\n return this;\n }\n before_data(f) { \n this._before_data.push(f);\n return this;\n }\n after_data(f) { \n this._after_data.push(f);\n return this;\n }\n // Send localStorage's data to the server\n update_channel() {\n if (!this.channel || !this._gotData) return;\n this.channel.update({\n firststep: this._firstStep,\n nsteps: this._steps.length,\n currentstep: this._currentStep,\n active: this._active, // Hardcoded for now\n complete: this._complete,\n dismissed: this._dismissed,\n misc: this._misc\n });\n }\n // Add a step to the guide\n step(name, f) {\n if (f===undefined && name instanceof Function)\n f = name;\n const s = new Step(this, f, name);\n this._steps.push(s);\n return ()=>s.run();\n }\n // Sets which step runs first\n startWith(step){\n if (step instanceof Step){\n let index = this._steps.indexOf(step);\n // Add step if not part of guide yet\n if (index<0) {\n index = this._steps.length;\n this._steps.push(step);\n }\n this._firstStep = index;\n }\n }\n // Try to launch the guide\n launch(){\n console.log(\"Trying to launch\", this._name);\n if (this._launched || !this._steps.length || this._complete || this._dismissed || !this._init || !this._gotData || this._active===false) \n return;\n console.log(\"Launching\", this._name);\n // Run current step if defined\n // $(document).ready( () => {\n const callback = ()=>{\n if (this._launched) return;\n this._launched = true;\n if (!isNaN(this._currentStep) && this._currentStep>=0 && this._currentSteppromise.then( e=>this._counterpid==pid&&r(e) ));\n }\n // This returns a promise that gets resolved when an element matching selector is added on the page\n async wait(selector,disappear,xpath=false){\n const check = r=>{\n if (this._complete===true || this._dismissed===true || this._active===false) return;\n let element;\n if (xpath) \n element = document.evaluate(selector,document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;\n else \n element = document.querySelector(selector);\n if (element && element.isVisible()){\n element._tooltip = extend({guide: this}, element._tooltip);\n element._selector = [selector,xpath];\n element.tte = (text, ...args) => tte.call(element, text, ...args);\n if (disappear) window.requestAnimationFrame(()=>check(r));\n else r(element);\n }\n else {\n if (disappear) r(element);\n else window.requestAnimationFrame(()=>check(r));\n }\n }\n return this.promise(r=>check(r));\n }\n}\n\nexport { Guide };\n\n\n// Require all the (other) js files in this directory\nconst guideScripts = import.meta.glob(\"./*.js\");\nconst initGuides = ()=>{\n // Callback before init\n before_init.map( f=>f instanceof Function && f.call() );\n // Initiate the guides' channels\n for (let g = 0; g < guides.length; g++) guides[g].init();\n guides_initiated = true;\n after_init.map( f=>f instanceof Function && f.call() );\n}\nlet loadedGuides = 0;\nfor (const key in guideScripts) {\n if (key === \"./guide.js\") continue;\n guideScripts[key]().then(()=>{\n loadedGuides++;\n if (loadedGuides>=Object.keys(guideScripts).length) initGuides();\n });\n}\n\n// Comment this out when done debugging\nwindow.Guide.reset = name => guides[name]&&guides[name].reset().update_channel();\n\n// The code below adds a custom tte \"tooltip\" jQuery method\n//\nconst parseTTParam = function(p,q,o) {\n if (typeof(p)==\"string\"){\n if (p.match(/^click$/i)) this.click = \">>\";\n else if (p.match(/^cover/i)) this.cover = true;\n else if (p.match(/^pointer/i)) this.pointer = true;\n else if (p.match(/^(outline|border)/i)) this.outline = true;\n else if (p.match(/^hover/i)) this.hover = true;\n else if (p.match(/^top|above$/i)) this.y = 'above';\n else if (p.match(/^center|middle$/i)) {\n if (typeof(q)==\"string\" && q.match(/^top|above|bottom|below$/i) || \n typeof(o)==\"string\" && o.match(/^top|above|bottom|below$/i))\n this.x = 'center';\n else if (typeof(q)==\"string\" && q.match(/^left|right$/i) || \n typeof(o)==\"string\" && o.match(/^left|right$/i))\n this.y = 'center';\n else if (typeof(q)==\"string\" && q.match(/^center|middle$/i))\n this.y = 'center';\n else if (typeof(o)==\"string\" && o.match(/^center|middle$/i))\n this.x = 'center';\n else {\n this.x = 'center';\n this.y = 'center';\n }\n }\n else if (p.match(/^bottom|below$/i)) this.y = 'below';\n else if (p.match(/^left$/i)) this.x = 'left';\n else if (p.match(/^right$/i)) this.x = 'right';\n else if (this.click !== false && !p.match(/\\s/)) this.key = p;\n else this.click = p;\n }\n else if (!isNaN(p) && p > 0)\n this.timeout = p;\n else if (p instanceof Object) {\n for (let n in p)\n this[n] = p[n];\n }\n return this;\n}\n//\nconst tooltips = [];\nif (window.jQuery)\n jQuery.prototype.tte = function(text, ...args){ \n let r = null;\n this.each( (i,n) => r = e.tte(text,...args) );\n return $(r);\n }\nconst tte = function(text, ...args){\n const ttobj = this._tooltip;\n ttobj._target = this;\n if (ttobj.guide && ttobj.guide instanceof Guide && (\n ttobj.guide._dismissed===true ||\n ttobj.guide._active===false ||\n ttobj.guide._complete===true\n )) return this;\n\n let params = {};\n for (let i = 0; i < args.length; i++)\n parseTTParam.call(params, args[i], i==args.length-1||args[i+1], i==0||args[i-1]);\n\n if (typeof(text)==\"string\") params.content = text;\n else parseTTParam.call(params, text);\n\n let currentTooltips = [];\n\n const resolve = [()=>null];\n const tooltip = document.createElement(\"DIV\");\n tooltip.classList.add(\"tooltip\",\"container\");\n const cover = document.createElement(\"DIV\");\n cover.classList.add(\"tooltip\",\"cover\");\n cover.appendChild(tooltip);\n const existingParams = ttobj.params;\n if (!isNaN(existingParams) && existingParams>-1 && existingParams < tooltips.length)\n ttobj.params = extend(params, tooltips[existingParams]);\n else {\n ttobj.params = extend(params, {\n content: \"\", \n click: \"»\", \n key: false, \n timeout: false,\n hover: false,\n x: 'center', y: 'below', \n cover: false, \n outline: false,\n promise: null\n });\n ttobj.data = {tooltip: tooltips.length};\n tooltips.push(ttobj.params);\n }\n \n if (params.promise===undefined) ttobj.params.promise = undefined;\n if (params.condition===undefined) ttobj.params.condition = ()=>true;\n else if (typeof params.condition != \"function\") throw Error(\"tte.condition should be a function\");\n if (params.loseCondition===undefined) ttobj.params.loseCondition = undefined;\n\n tooltip.innerHTML = '';\n const content = document.createElement(\"DIV\");\n content.classList.add(\"content\");\n content.innerHTML = ttobj.params.content;\n tooltip.appendChild(content);\n if (ttobj.params.click) {\n const button = document.createElement(\"DIV\");\n button.classList.add(\"submit\");\n resolve.push(r=>button.addEventListener('click',r));\n if (typeof(ttobj.params.click)==\"string\") button.innerHTML = ttobj.params.click;\n else button.innerHTML = \"»\";\n tooltip.appendChild(button);\n }\n if (ttobj.params.key)\n resolve.push(r=>document.addEventListener('keydown', ev=>{\n if (\n ttobj.params.key === true\n ||\n (typeof(ttobj.params.key)==\"string\" && ttobj.params.key.toLowerCase() == ev.key.toLowerCase())\n ||\n (ttobj.params.key instanceof Array && ttobj.params.key.filter(k=>String(k).toLowerCase() == ev.key.toLowerCase()).length)\n )\n r();\n }));\n if (!isNaN(ttobj.params.timeout) && ttobj.params.timeout > 0)\n resolve.push(r=>setTimeout(r,ttobj.params.timeout));\n if (ttobj.params.hover)\n resolve.push(r=>ttobj._target.addEventListener('mouseenter', r));\n if (ttobj.params.promise)\n resolve.push(ttobj.params.promise);\n\n // Resolve promise only if still running the same step('s instance)\n let conditionMet = ttobj.params.condition.call(ttobj,ttobj);\n const pid = ttobj.guide._counterpid;\n let promiseMarker = {};\n ttobj.promiseMarker = promiseMarker;\n let tryToResolve;\n // ttobj.promise = new Promise(r=>{\n ttobj._target.promise = new Promise(r=>{\n tryToResolve = marker=>{\n if (ttobj.guide._counterpid==pid&&conditionMet&&ttobj.promiseMarker==marker)\n r();\n }\n });\n // Evaluate promiseMarker right away\n (m=>Promise.any(resolve.map(p=>new Promise(p))).then(()=>tryToResolve(m)))(promiseMarker);\n \n // $(document.body).append(cover);\n document.body.appendChild(cover);\n\n let assisting = false, resolved = false;\n if (ttobj.params.loseCondition instanceof Function){\n const callbackCondition = async ()=>{\n if (resolved || ttobj.guide._counterpid!=pid || assisting) return;\n if (!tooltip.inDOM()) return;\n conditionMet = ttobj.params.condition.call(ttobj,ttobj);\n if (!conditionMet){\n assisting = true;\n // Don't solve this promise while assisting\n promiseMarker = {};\n ttobj.promiseMarker = promiseMarker;\n cover.hide();\n await ttobj.params.loseCondition.call(ttobj,ttobj);\n if (!ttobj._target || !ttobj._target.inDOM()){\n if (this._selector && this._selector[1])\n ttobj._target = document.evaluate(this._selector[0],document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue\n else if (this._selector)\n ttobj._target = document.querySelector(this._selector[0]);\n }\n cover.show();\n updateDisplay();\n assisting = false;\n (m=>Promise.any(resolve.map(p=>new Promise(p))).then(()=>{\n resolved=true;\n cover.remove();\n tryToResolve(promiseMarker);\n }))(promiseMarker); // Evaluate promiseMarker right away\n window.requestAnimationFrame(callbackCondition);\n }\n else\n window.requestAnimationFrame(callbackCondition);\n }\n callbackCondition();\n }\n \n const pointer = document.createElement(\"DIV\");\n pointer.classList.add(\"pointer\");\n cover.append(pointer);\n\n let offset, ownoffset;\n const old_scroll = [0,0];\n const updateDisplay = ()=>{\n if (!ttobj._target.inDOM()){\n if (this._selector && this._selector[1])\n ttobj._target = document.evaluate(this._selector[0],document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue\n else if (this._selector)\n ttobj._target = document.querySelector(this._selector[0]);\n }\n // Stop updating once an element disappears\n if (!ttobj._target || !ttobj._target.isVisible() || !tooltip.isVisible())\n return;\n let new_offset = ttobj._target.getBoundingClientRect(), \n new_ownoffset = tooltip.getBoundingClientRect();\n const new_scroll = [window.scrollX,window.scrollY];\n window.requestAnimationFrame(updateDisplay);\n // Don't need to update if no param has changed\n if (JSON.stringify(offset)==JSON.stringify(new_offset) &&\n JSON.stringify(ownoffset)==JSON.stringify(new_ownoffset) &&\n new_scroll[0]==old_scroll[0] && new_scroll[1]==old_scroll[1])\n return;\n old_scroll[0] = new_scroll[0];\n old_scroll[1] = new_scroll[1];\n offset = new_offset;\n ownoffset = new_ownoffset;\n let width = offset.width, height = offset.height;\n let ownWidth = ownoffset.width, ownHeight = ownoffset.height;\n let xTimes, yTimes, xMargin = 0, yMargin = 0;\n let newtop = 0, newleft = 0;\n if (ttobj.params.x.match(/right/i)){\n tooltip.classList.add('right');\n xTimes = 1;\n xMargin = parseInt(window.getComputedStyle(tooltip)[\"margin-left\"]);\n newleft = new_offset.right;\n if (ttobj.params.pointer) {\n pointer.style.left = new_offset.right+\"px\";\n pointer.style.top = Number(new_offset.top+new_offset.width/2)+\"px\";\n pointer.classList.add(\"right\");\n }\n }\n else if (ttobj.params.x.match(/center|middle/i)){\n tooltip.classList.add('center');\n xTimes = 0.5;\n newleft = new_offset.left + (new_offset.width/2) - ownWidth/2;\n }\n else {\n tooltip.classList.add('left');\n xTimes = 0;\n xMargin = -1 * parseInt(window.getComputedStyle(tooltip)[\"margin-right\"]);\n newleft = new_offset.left - ownWidth;\n if (ttobj.params.pointer) {\n pointer.style.left = new_offset.left+\"px\";\n pointer.style.top = Number(new_offset.top+new_offset.width/2)+\"px\";\n pointer.classList.add(\"left\");\n }\n }\n if (ttobj.params.y.match(/above|top/i)){\n tooltip.classList.add('above');\n yTimes = 1;\n yMargin = -1 * parseInt(window.getComputedStyle(tooltip)[\"margin-bottom\"]);\n newtop = new_offset.top - ownHeight;\n if (ttobj.params.pointer) {\n pointer.style.top = new_offset.top+\"px\";\n pointer.style.left = Number(new_offset.left+new_offset.width/2)+\"px\";\n pointer.classList.add(\"above\");\n }\n }\n else if (ttobj.params.y.match(/center|middle/i)){\n tooltip.classList.add('vertical-center');\n yTimes = 0.5;\n newtop = new_offset.top + (new_offset.height/2) - ownHeight/2;\n }\n else {\n tooltip.classList.add('below');\n yTimes = 0;\n yMargin = parseInt(window.getComputedStyle(tooltip)[\"margin-bottom\"]);\n newtop = new_offset.bottom;\n if (ttobj.params.pointer) {\n pointer.style.top = new_offset.bottom+\"px\";\n pointer.style.left = Number(new_offset.left+new_offset.width/2)+\"px\";\n pointer.classList.add(\"below\");\n }\n }\n if (newtop<0) newtop = 20;\n if (newtop+ownHeight>window.innerHeight) newtop = window.innerHeight-ownHeight-20;\n if (newleft<0) newleft = 20;\n if (newleft+ownWidth>window.innerWidth) newleft = window.innerWidth-ownWidth-20;\n tooltip.style.top = newtop+\"px\";\n tooltip.style.left = newleft+\"px\";\n tooltip.style['z-index'] = maxZ()+2;\n cover.style['z-index'] = maxZ();\n\n cover.childNodes.forEach( n => n.nodeName==\"CANVAS\" && n.remove() );\n if (ttobj.params.cover){\n const docWidth = window.innerWidth, docHeight = window.innerHeight;\n const canvas = document.createElement(\"CANVAS\");\n canvas.width = docWidth;\n canvas.height = docHeight;\n const ctx = canvas.getContext(\"2d\");\n ctx.beginPath();\n ctx.fillRect(0, 0, offset.left-10, docHeight);\n ctx.fillRect(0, 0, docWidth, offset.top-10);\n ctx.fillRect(offset.left+width+10, 0, docWidth, docHeight);\n ctx.fillRect(0, offset.top+height+10, docWidth, docHeight);\n canvas.style.position = \"absolute\";\n canvas.style['pointer-events'] = 'none';\n canvas.style.opacity = 0.5;\n cover.prepend(canvas);\n }\n if (ttobj.params.outline){\n let border = \"solid 2px cyan\";\n if (typeof(ttobj.params.outline)==\"string\") border = ttobj.params.outline;\n cover.childNodes.forEach( n => n.classList.contains(\"outline\") && n.remove() );\n const outline = document.createElement(\"DIV\");\n outline.style.position = 'absolute';\n outline.classList.add(\"outline\");\n cover.append(outline);\n outline.style.top = offset.top-1;\n outline.style.left = offset.left-1;\n outline.style.width = width+2;\n outline.style.height = height+2;\n outline.style.border = border;\n outline.style['z-index'] = maxZ()+1;\n }\n }\n updateDisplay();\n\n if (ttobj.guide && ttobj.guide instanceof Guide)\n ttobj.guide._dismissButton.style[\"z-index\"] = maxZ()+3;\n\n ttobj._target.promise.then( ()=>cover.remove() );\n \n currentTooltips.push(tooltip);\n\n ttobj._target.tooltips = currentTooltips;\n if (ttobj.guide && ttobj.guide instanceof Guide){\n if (ttobj.guide._tooltips===undefined) ttobj.guide._tooltips = [];\n ttobj.guide._tooltips = [...ttobj.guide._tooltips, ...currentTooltips];\n }\n return ttobj._target;\n};\n\nexport const event = new EventTarget();\nevent.dispatch = function(node,type){\n event.dispatchEvent(new CustomEvent(type, {detail:node}));\n return {\n // update(){\n\n // },\n destroy() {\n event.dispatchEvent(new CustomEvent('destroy_'+type, {detail: node}));\n }\n }\n}\n"],"file":"assets/guide-DP80zPGb.js"}