{ "version": 3, "sources": ["../javascript/rails/rails-ujs.js", "../../../node_modules/@rails/actioncable/src/adapters.js", "../../../node_modules/@rails/actioncable/src/logger.js", "../../../node_modules/@rails/actioncable/src/connection_monitor.js", "../../../node_modules/@rails/actioncable/src/internal.js", "../../../node_modules/@rails/actioncable/src/connection.js", "../../../node_modules/@rails/actioncable/src/subscription.js", "../../../node_modules/@rails/actioncable/src/subscription_guarantor.js", "../../../node_modules/@rails/actioncable/src/subscriptions.js", "../../../node_modules/@rails/actioncable/src/consumer.js", "../../../node_modules/@rails/actioncable/src/index.js", "../javascript/rails/activestorage.js", "../javascript/lib/util.js", "../../../node_modules/clipboard/dist/clipboard.js", "../javascript/lib/enums.js", "../javascript/lib/parser.js", "../javascript/lib/text.js", "../javascript/lib/formatter.js", "../javascript/lib/dom.js", "../../../node_modules/blueimp-load-image/js/load-image.js", "../javascript/lib/resizer.js", "../javascript/lib/binder.js", "../javascript/elements/invitations.js", "../../../node_modules/cropperjs/dist/cropper.js", "../../../node_modules/smoothscroll-polyfill/dist/smoothscroll.js", "../../../node_modules/eventlistener-polyfill/index.js", "../../../node_modules/lozad/dist/lozad.min.js", "../javascript/fudgeball.js", "../../../node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js", "../../../node_modules/@hotwired/stimulus/dist/stimulus.js", "../javascript/controllers/application.js", "../javascript/lib/direct_upload.js", "../javascript/lib/direct_upload_multiple.js", "../javascript/controllers/fudgeball/ajax_controller.js", "../javascript/controllers/fudgeball/animation_controller.js", "../javascript/controllers/fudgeball/application_controller.js", "../javascript/controllers/fudgeball/async_render_controller.js", "../javascript/controllers/fudgeball/breadcrumbs_controller.js", "../javascript/controllers/fudgeball/checklist_controller.js", "../javascript/controllers/fudgeball/clipboard_controller.js", "../javascript/controllers/fudgeball/click_tracker_controller.js", "../javascript/controllers/fudgeball/contact_picker_controller.js", "../javascript/controllers/fudgeball/countdown_controller.js", "../../../node_modules/sortablejs/modular/sortable.esm.js", "../javascript/controllers/fudgeball/drag_controller.js", "../javascript/controllers/fudgeball/expandable_controller.js", "../javascript/controllers/fudgeball/filter_select_controller.js", "../javascript/controllers/fudgeball/form_controller.js", "../javascript/lib/validator.js", "../javascript/controllers/fudgeball/image_zoom_controller.js", "../javascript/controllers/fudgeball/intersector_controller.js", "../javascript/controllers/fudgeball/legacy/invitations_controller.js", "../javascript/controllers/fudgeball/pagarme_controller.js", "../javascript/controllers/fudgeball/tuna_controller.js", "../javascript/controllers/fudgeball/paypal_controller.js", "../javascript/controllers/fudgeball/photo_editor_controller.js", "../javascript/controllers/fudgeball/resizer_controller.js", "../javascript/controllers/fudgeball/scroller_controller.js", "../javascript/controllers/fudgeball/setout/editor_controller.js", "../javascript/controllers/fudgeball/setout/validator_controller.js", "../javascript/controllers/fudgeball/setout/lib/draggable.js", "../javascript/controllers/fudgeball/setout/fragment_controller.js", "../javascript/controllers/fudgeball/share_controller.js", "../javascript/controllers/fudgeball/slider_controller.js", "../javascript/controllers/fudgeball/slideshow_controller.js", "../javascript/controllers/fudgeball/suggestions_controller.js", "../javascript/controllers/fudgeball/time_controller.js", "../javascript/controllers/fudgeball/time_until_controller.js", "../javascript/controllers/fudgeball/util_controller.js", "../javascript/controllers/fudgeball/withdrawal_controller.js", "../javascript/controllers/fudgeball/gallery_controller.js", "../javascript/controllers/fudgeball/image_transition_controller.js", "../javascript/controllers/fudgeball/whatsapp_controller.js", "../javascript/controllers/fudgeball/video_controller.js", "../javascript/controllers/fudgeball/checkbox_controller.js", "../javascript/controllers/fudgeball/index.js", "../javascript/lib/polyfills.js", "../javascript/lib/minimal_analytics.js", "../javascript/lib/image_lazy_loading.js"], "sourcesContent": ["/* eslint-disable */\n/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/main/actionview/app/javascript\nReleased under the MIT license\n */\n(function(global, factory) {\n typeof exports === \"object\" && typeof module !== \"undefined\" ? module.exports = factory() : typeof define === \"function\" && define.amd ? define(factory) : (global = typeof globalThis !== \"undefined\" ? globalThis : global || self, \n global.Rails = factory());\n})(this, (function() {\n \"use strict\";\n const linkClickSelector = \"a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]\";\n const buttonClickSelector = {\n selector: \"button[data-remote]:not([form]), button[data-confirm]:not([form])\",\n exclude: \"form button\"\n };\n const inputChangeSelector = \"select[data-remote], input[data-remote], textarea[data-remote]\";\n const formSubmitSelector = \"form:not([data-turbo=true])\";\n const formInputClickSelector = \"form:not([data-turbo=true]) input[type=submit], form:not([data-turbo=true]) input[type=image], form:not([data-turbo=true]) button[type=submit], form:not([data-turbo=true]) button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])\";\n const formDisableSelector = \"input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled\";\n const formEnableSelector = \"input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled\";\n const fileInputSelector = \"input[name][type=file]:not([disabled])\";\n const linkDisableSelector = \"a[data-disable-with], a[data-disable]\";\n const buttonDisableSelector = \"button[data-remote][data-disable-with], button[data-remote][data-disable]\";\n let nonce = null;\n const loadCSPNonce = () => {\n const metaTag = document.querySelector(\"meta[name=csp-nonce]\");\n return nonce = metaTag && metaTag.content;\n };\n const cspNonce = () => nonce || loadCSPNonce();\n const m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n const matches = function(element, selector) {\n if (selector.exclude) {\n return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n } else {\n return m.call(element, selector);\n }\n };\n const EXPANDO = \"_ujsData\";\n const getData = (element, key) => element[EXPANDO] ? element[EXPANDO][key] : undefined;\n const setData = function(element, key, value) {\n if (!element[EXPANDO]) {\n element[EXPANDO] = {};\n }\n return element[EXPANDO][key] = value;\n };\n const $ = selector => Array.prototype.slice.call(document.querySelectorAll(selector));\n const isContentEditable = function(element) {\n var isEditable = false;\n do {\n if (element.isContentEditable) {\n isEditable = true;\n break;\n }\n element = element.parentElement;\n } while (element);\n return isEditable;\n };\n const csrfToken = () => {\n const meta = document.querySelector(\"meta[name=csrf-token]\");\n return meta && meta.content;\n };\n const csrfParam = () => {\n const meta = document.querySelector(\"meta[name=csrf-param]\");\n return meta && meta.content;\n };\n const CSRFProtection = xhr => {\n const token = csrfToken();\n if (token) {\n return xhr.setRequestHeader(\"X-CSRF-Token\", token);\n }\n };\n const refreshCSRFTokens = () => {\n const token = csrfToken();\n const param = csrfParam();\n if (token && param) {\n return $('form input[name=\"' + param + '\"]').forEach((input => input.value = token));\n }\n };\n const AcceptHeaders = {\n \"*\": \"*/*\",\n text: \"text/plain\",\n html: \"text/html\",\n xml: \"application/xml, text/xml\",\n json: \"application/json, text/javascript\",\n script: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n };\n const ajax = options => {\n options = prepareOptions(options);\n var xhr = createXHR(options, (function() {\n const response = processResponse(xhr.response != null ? xhr.response : xhr.responseText, xhr.getResponseHeader(\"Content-Type\"));\n if (Math.floor(xhr.status / 100) === 2) {\n if (typeof options.success === \"function\") {\n options.success(response, xhr.statusText, xhr);\n }\n } else {\n if (typeof options.error === \"function\") {\n options.error(response, xhr.statusText, xhr);\n }\n }\n return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : undefined;\n }));\n if (options.beforeSend && !options.beforeSend(xhr, options)) {\n return false;\n }\n if (xhr.readyState === XMLHttpRequest.OPENED) {\n return xhr.send(options.data);\n }\n };\n var prepareOptions = function(options) {\n options.url = options.url || location.href;\n options.type = options.type.toUpperCase();\n if (options.type === \"GET\" && options.data) {\n if (options.url.indexOf(\"?\") < 0) {\n options.url += \"?\" + options.data;\n } else {\n options.url += \"&\" + options.data;\n }\n }\n if (!(options.dataType in AcceptHeaders)) {\n options.dataType = \"*\";\n }\n options.accept = AcceptHeaders[options.dataType];\n if (options.dataType !== \"*\") {\n options.accept += \", */*; q=0.01\";\n }\n return options;\n };\n var createXHR = function(options, done) {\n const xhr = new XMLHttpRequest;\n xhr.open(options.type, options.url, true);\n xhr.setRequestHeader(\"Accept\", options.accept);\n if (typeof options.data === \"string\") {\n xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded; charset=UTF-8\");\n }\n if (!options.crossDomain) {\n xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n CSRFProtection(xhr);\n }\n xhr.withCredentials = !!options.withCredentials;\n xhr.onreadystatechange = function() {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n return done(xhr);\n }\n };\n return xhr;\n };\n var processResponse = function(response, type) {\n if (typeof response === \"string\" && typeof type === \"string\") {\n if (type.match(/\\bjson\\b/)) {\n try {\n response = JSON.parse(response);\n } catch (error) {}\n } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n const script = document.createElement(\"script\");\n script.setAttribute(\"nonce\", cspNonce());\n script.text = response;\n document.head.appendChild(script).parentNode.removeChild(script);\n } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n const parser = new DOMParser;\n type = type.replace(/;.+/, \"\");\n try {\n response = parser.parseFromString(response, type);\n } catch (error1) {}\n }\n }\n return response;\n };\n const href = element => element.href;\n const isCrossDomain = function(url) {\n const originAnchor = document.createElement(\"a\");\n originAnchor.href = location.href;\n const urlAnchor = document.createElement(\"a\");\n try {\n urlAnchor.href = url;\n return !((!urlAnchor.protocol || urlAnchor.protocol === \":\") && !urlAnchor.host || originAnchor.protocol + \"//\" + originAnchor.host === urlAnchor.protocol + \"//\" + urlAnchor.host);\n } catch (e) {\n return true;\n }\n };\n let preventDefault;\n let {CustomEvent: CustomEvent} = window;\n if (typeof CustomEvent !== \"function\") {\n CustomEvent = function(event, params) {\n const evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n CustomEvent.prototype = window.Event.prototype;\n ({preventDefault: preventDefault} = CustomEvent.prototype);\n CustomEvent.prototype.preventDefault = function() {\n const result = preventDefault.call(this);\n if (this.cancelable && !this.defaultPrevented) {\n Object.defineProperty(this, \"defaultPrevented\", {\n get() {\n return true;\n }\n });\n }\n return result;\n };\n }\n const fire = (obj, name, data) => {\n const event = new CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail: data\n });\n obj.dispatchEvent(event);\n return !event.defaultPrevented;\n };\n const stopEverything = e => {\n fire(e.target, \"ujs:everythingStopped\");\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n };\n const delegate = (element, selector, eventType, handler) => element.addEventListener(eventType, (function(e) {\n let {target: target} = e;\n while (!!(target instanceof Element) && !matches(target, selector)) {\n target = target.parentNode;\n }\n if (target instanceof Element && handler.call(target, e) === false) {\n e.preventDefault();\n e.stopPropagation();\n }\n }));\n const toArray = e => Array.prototype.slice.call(e);\n const serializeElement = (element, additionalParam) => {\n let inputs = [ element ];\n if (matches(element, \"form\")) {\n inputs = toArray(element.elements);\n }\n const params = [];\n inputs.forEach((function(input) {\n if (!input.name || input.disabled) {\n return;\n }\n if (matches(input, \"fieldset[disabled] *\")) {\n return;\n }\n if (matches(input, \"select\")) {\n toArray(input.options).forEach((function(option) {\n if (option.selected) {\n params.push({\n name: input.name,\n value: option.value\n });\n }\n }));\n } else if (input.checked || [ \"radio\", \"checkbox\", \"submit\" ].indexOf(input.type) === -1) {\n params.push({\n name: input.name,\n value: input.value\n });\n }\n }));\n if (additionalParam) {\n params.push(additionalParam);\n }\n return params.map((function(param) {\n if (param.name) {\n return `${encodeURIComponent(param.name)}=${encodeURIComponent(param.value)}`;\n } else {\n return param;\n }\n })).join(\"&\");\n };\n const formElements = (form, selector) => {\n if (matches(form, \"form\")) {\n return toArray(form.elements).filter((el => matches(el, selector)));\n } else {\n return toArray(form.querySelectorAll(selector));\n }\n };\n const handleConfirmWithRails = rails => function(e) {\n if (!allowAction(this, rails)) {\n stopEverything(e);\n }\n };\n const confirm = (message, element) => window.confirm(message);\n var allowAction = function(element, rails) {\n let callback;\n const message = element.getAttribute(\"data-confirm\");\n if (!message) {\n return true;\n }\n let answer = false;\n if (fire(element, \"confirm\")) {\n try {\n answer = rails.confirm(message, element);\n } catch (error) {}\n callback = fire(element, \"confirm:complete\", [ answer ]);\n }\n return answer && callback;\n };\n const handleDisabledElement = function(e) {\n const element = this;\n if (element.disabled) {\n stopEverything(e);\n }\n };\n const enableElement = e => {\n let element;\n if (e instanceof Event) {\n if (isXhrRedirect(e)) {\n return;\n }\n element = e.target;\n } else {\n element = e;\n }\n if (isContentEditable(element)) {\n return;\n }\n if (matches(element, linkDisableSelector)) {\n return enableLinkElement(element);\n } else if (matches(element, buttonDisableSelector) || matches(element, formEnableSelector)) {\n return enableFormElement(element);\n } else if (matches(element, formSubmitSelector)) {\n return enableFormElements(element);\n }\n };\n const disableElement = e => {\n const element = e instanceof Event ? e.target : e;\n if (isContentEditable(element)) {\n return;\n }\n if (matches(element, linkDisableSelector)) {\n return disableLinkElement(element);\n } else if (matches(element, buttonDisableSelector) || matches(element, formDisableSelector)) {\n return disableFormElement(element);\n } else if (matches(element, formSubmitSelector)) {\n return disableFormElements(element);\n }\n };\n var disableLinkElement = function(element) {\n if (getData(element, \"ujs:disabled\")) {\n return;\n }\n const replacement = element.getAttribute(\"data-disable-with\");\n if (replacement != null) {\n setData(element, \"ujs:enable-with\", element.innerHTML);\n element.innerHTML = replacement;\n }\n element.addEventListener(\"click\", stopEverything);\n return setData(element, \"ujs:disabled\", true);\n };\n var enableLinkElement = function(element) {\n const originalText = getData(element, \"ujs:enable-with\");\n if (originalText != null) {\n element.innerHTML = originalText;\n setData(element, \"ujs:enable-with\", null);\n }\n element.removeEventListener(\"click\", stopEverything);\n return setData(element, \"ujs:disabled\", null);\n };\n var disableFormElements = form => formElements(form, formDisableSelector).forEach(disableFormElement);\n var disableFormElement = function(element) {\n if (getData(element, \"ujs:disabled\")) {\n return;\n }\n const replacement = element.getAttribute(\"data-disable-with\");\n if (replacement != null) {\n if (matches(element, \"button\")) {\n setData(element, \"ujs:enable-with\", element.innerHTML);\n element.innerHTML = replacement;\n } else {\n setData(element, \"ujs:enable-with\", element.value);\n element.value = replacement;\n }\n }\n element.disabled = true;\n return setData(element, \"ujs:disabled\", true);\n };\n var enableFormElements = form => formElements(form, formEnableSelector).forEach((element => enableFormElement(element)));\n var enableFormElement = function(element) {\n const originalText = getData(element, \"ujs:enable-with\");\n if (originalText != null) {\n if (matches(element, \"button\")) {\n element.innerHTML = originalText;\n } else {\n element.value = originalText;\n }\n setData(element, \"ujs:enable-with\", null);\n }\n element.disabled = false;\n return setData(element, \"ujs:disabled\", null);\n };\n var isXhrRedirect = function(event) {\n const xhr = event.detail ? event.detail[0] : undefined;\n return xhr && xhr.getResponseHeader(\"X-Xhr-Redirect\");\n };\n const handleMethodWithRails = rails => function(e) {\n const link = this;\n const method = link.getAttribute(\"data-method\");\n if (!method) {\n return;\n }\n if (isContentEditable(this)) {\n return;\n }\n const href = rails.href(link);\n const csrfToken$1 = csrfToken();\n const csrfParam$1 = csrfParam();\n const form = document.createElement(\"form\");\n let formContent = `<input name='_method' value='${method}' type='hidden' />`;\n if (csrfParam$1 && csrfToken$1 && !isCrossDomain(href)) {\n formContent += `<input name='${csrfParam$1}' value='${csrfToken$1}' type='hidden' />`;\n }\n formContent += '<input type=\"submit\" />';\n form.method = \"post\";\n form.action = href;\n form.target = link.target;\n form.innerHTML = formContent;\n form.style.display = \"none\";\n document.body.appendChild(form);\n form.querySelector('[type=\"submit\"]').click();\n stopEverything(e);\n };\n const isRemote = function(element) {\n const value = element.getAttribute(\"data-remote\");\n return value != null && value !== \"false\";\n };\n const handleRemoteWithRails = rails => function(e) {\n let data, method, url;\n const element = this;\n if (!isRemote(element)) {\n return true;\n }\n if (!fire(element, \"ajax:before\")) {\n fire(element, \"ajax:stopped\");\n return false;\n }\n if (isContentEditable(element)) {\n fire(element, \"ajax:stopped\");\n return false;\n }\n const withCredentials = element.getAttribute(\"data-with-credentials\");\n const dataType = element.getAttribute(\"data-type\") || \"script\";\n if (matches(element, formSubmitSelector)) {\n const button = getData(element, \"ujs:submit-button\");\n method = getData(element, \"ujs:submit-button-formmethod\") || element.getAttribute(\"method\") || \"get\";\n url = getData(element, \"ujs:submit-button-formaction\") || element.getAttribute(\"action\") || location.href;\n if (method.toUpperCase() === \"GET\") {\n url = url.replace(/\\?.*$/, \"\");\n }\n if (element.enctype === \"multipart/form-data\") {\n data = new FormData(element);\n if (button != null) {\n data.append(button.name, button.value);\n }\n } else {\n data = serializeElement(element, button);\n }\n setData(element, \"ujs:submit-button\", null);\n setData(element, \"ujs:submit-button-formmethod\", null);\n setData(element, \"ujs:submit-button-formaction\", null);\n } else if (matches(element, buttonClickSelector) || matches(element, inputChangeSelector)) {\n method = element.getAttribute(\"data-method\");\n url = element.getAttribute(\"data-url\");\n data = serializeElement(element, element.getAttribute(\"data-params\"));\n } else {\n method = element.getAttribute(\"data-method\");\n url = rails.href(element);\n data = element.getAttribute(\"data-params\");\n }\n ajax({\n type: method || \"GET\",\n url: url,\n data: data,\n dataType: dataType,\n beforeSend(xhr, options) {\n if (fire(element, \"ajax:beforeSend\", [ xhr, options ])) {\n return fire(element, \"ajax:send\", [ xhr ]);\n } else {\n fire(element, \"ajax:stopped\");\n return false;\n }\n },\n success(...args) {\n return fire(element, \"ajax:success\", args);\n },\n error(...args) {\n return fire(element, \"ajax:error\", args);\n },\n complete(...args) {\n return fire(element, \"ajax:complete\", args);\n },\n crossDomain: isCrossDomain(url),\n withCredentials: withCredentials != null && withCredentials !== \"false\"\n });\n stopEverything(e);\n };\n const formSubmitButtonClick = function(e) {\n const button = this;\n const {form: form} = button;\n if (!form) {\n return;\n }\n if (button.name) {\n setData(form, \"ujs:submit-button\", {\n name: button.name,\n value: button.value\n });\n }\n setData(form, \"ujs:formnovalidate-button\", button.formNoValidate);\n setData(form, \"ujs:submit-button-formaction\", button.getAttribute(\"formaction\"));\n return setData(form, \"ujs:submit-button-formmethod\", button.getAttribute(\"formmethod\"));\n };\n const preventInsignificantClick = function(e) {\n const link = this;\n const method = (link.getAttribute(\"data-method\") || \"GET\").toUpperCase();\n const data = link.getAttribute(\"data-params\");\n const metaClick = e.metaKey || e.ctrlKey;\n const insignificantMetaClick = metaClick && method === \"GET\" && !data;\n const nonPrimaryMouseClick = e.button != null && e.button !== 0;\n if (nonPrimaryMouseClick || insignificantMetaClick) {\n e.stopImmediatePropagation();\n }\n };\n const Rails = {\n $: $,\n ajax: ajax,\n buttonClickSelector: buttonClickSelector,\n buttonDisableSelector: buttonDisableSelector,\n confirm: confirm,\n cspNonce: cspNonce,\n csrfToken: csrfToken,\n csrfParam: csrfParam,\n CSRFProtection: CSRFProtection,\n delegate: delegate,\n disableElement: disableElement,\n enableElement: enableElement,\n fileInputSelector: fileInputSelector,\n fire: fire,\n formElements: formElements,\n formEnableSelector: formEnableSelector,\n formDisableSelector: formDisableSelector,\n formInputClickSelector: formInputClickSelector,\n formSubmitButtonClick: formSubmitButtonClick,\n formSubmitSelector: formSubmitSelector,\n getData: getData,\n handleDisabledElement: handleDisabledElement,\n href: href,\n inputChangeSelector: inputChangeSelector,\n isCrossDomain: isCrossDomain,\n linkClickSelector: linkClickSelector,\n linkDisableSelector: linkDisableSelector,\n loadCSPNonce: loadCSPNonce,\n matches: matches,\n preventInsignificantClick: preventInsignificantClick,\n refreshCSRFTokens: refreshCSRFTokens,\n serializeElement: serializeElement,\n setData: setData,\n stopEverything: stopEverything\n };\n const handleConfirm = handleConfirmWithRails(Rails);\n Rails.handleConfirm = handleConfirm;\n const handleMethod = handleMethodWithRails(Rails);\n Rails.handleMethod = handleMethod;\n const handleRemote = handleRemoteWithRails(Rails);\n Rails.handleRemote = handleRemote;\n const start = function() {\n if (window._rails_loaded) {\n throw new Error(\"rails-ujs has already been loaded!\");\n }\n window.addEventListener(\"pageshow\", (function() {\n $(formEnableSelector).forEach((function(el) {\n if (getData(el, \"ujs:disabled\")) {\n enableElement(el);\n }\n }));\n $(linkDisableSelector).forEach((function(el) {\n if (getData(el, \"ujs:disabled\")) {\n enableElement(el);\n }\n }));\n }));\n delegate(document, linkDisableSelector, \"ajax:complete\", enableElement);\n delegate(document, linkDisableSelector, \"ajax:stopped\", enableElement);\n delegate(document, buttonDisableSelector, \"ajax:complete\", enableElement);\n delegate(document, buttonDisableSelector, \"ajax:stopped\", enableElement);\n delegate(document, linkClickSelector, \"click\", preventInsignificantClick);\n delegate(document, linkClickSelector, \"click\", handleDisabledElement);\n delegate(document, linkClickSelector, \"click\", handleConfirm);\n delegate(document, linkClickSelector, \"click\", disableElement);\n delegate(document, linkClickSelector, \"click\", handleRemote);\n delegate(document, linkClickSelector, \"click\", handleMethod);\n delegate(document, buttonClickSelector, \"click\", preventInsignificantClick);\n delegate(document, buttonClickSelector, \"click\", handleDisabledElement);\n delegate(document, buttonClickSelector, \"click\", handleConfirm);\n delegate(document, buttonClickSelector, \"click\", disableElement);\n delegate(document, buttonClickSelector, \"click\", handleRemote);\n delegate(document, inputChangeSelector, \"change\", handleDisabledElement);\n delegate(document, inputChangeSelector, \"change\", handleConfirm);\n delegate(document, inputChangeSelector, \"change\", handleRemote);\n delegate(document, formSubmitSelector, \"submit\", handleDisabledElement);\n delegate(document, formSubmitSelector, \"submit\", handleConfirm);\n delegate(document, formSubmitSelector, \"submit\", handleRemote);\n delegate(document, formSubmitSelector, \"submit\", (e => setTimeout((() => disableElement(e)), 13)));\n delegate(document, formSubmitSelector, \"ajax:send\", disableElement);\n delegate(document, formSubmitSelector, \"ajax:complete\", enableElement);\n delegate(document, formInputClickSelector, \"click\", preventInsignificantClick);\n delegate(document, formInputClickSelector, \"click\", handleDisabledElement);\n delegate(document, formInputClickSelector, \"click\", handleConfirm);\n delegate(document, formInputClickSelector, \"click\", formSubmitButtonClick);\n document.addEventListener(\"DOMContentLoaded\", refreshCSRFTokens);\n document.addEventListener(\"DOMContentLoaded\", loadCSPNonce);\n return window._rails_loaded = true;\n };\n Rails.start = start;\n if (typeof jQuery !== \"undefined\" && jQuery && jQuery.ajax) {\n if (jQuery.rails) {\n throw new Error(\"If you load both jquery_ujs and rails-ujs, use rails-ujs only.\");\n }\n jQuery.rails = Rails;\n jQuery.ajaxPrefilter((function(options, originalOptions, xhr) {\n if (!options.crossDomain) {\n return CSRFProtection(xhr);\n }\n }));\n }\n if (typeof exports !== \"object\" && typeof module === \"undefined\") {\n window.Rails = Rails;\n if (fire(document, \"rails:attachBindings\")) {\n start();\n }\n }\n return Rails;\n}));\n/* eslint-enable */\n", "export default {\n logger: typeof console !== \"undefined\" ? console : undefined,\n WebSocket: typeof WebSocket !== \"undefined\" ? WebSocket : undefined,\n}\n", "import adapters from \"./adapters\"\n\n// The logger is disabled by default. You can enable it with:\n//\n// ActionCable.logger.enabled = true\n//\n// Example:\n//\n// import * as ActionCable from '@rails/actioncable'\n//\n// ActionCable.logger.enabled = true\n// ActionCable.logger.log('Connection Established.')\n//\n\nexport default {\n log(...messages) {\n if (this.enabled) {\n messages.push(Date.now())\n adapters.logger.log(\"[ActionCable]\", ...messages)\n }\n },\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring the cable connection is in good health by validating the heartbeat pings sent from the server, and attempting\n// revival reconnections if things go astray. Internal class, not intended for direct user manipulation.\n\nconst now = () => new Date().getTime()\n\nconst secondsSince = time => (now() - time) / 1000\n\nclass ConnectionMonitor {\n constructor(connection) {\n this.visibilityDidChange = this.visibilityDidChange.bind(this)\n this.connection = connection\n this.reconnectAttempts = 0\n }\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\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\n isRunning() {\n return this.startedAt && !this.stoppedAt\n }\n\n recordMessage() {\n this.pingedAt = now()\n }\n\n recordConnect() {\n this.reconnectAttempts = 0\n delete this.disconnectedAt\n logger.log(\"ConnectionMonitor recorded connect\")\n }\n\n recordDisconnect() {\n this.disconnectedAt = now()\n logger.log(\"ConnectionMonitor recorded disconnect\")\n }\n\n // Private\n\n startPolling() {\n this.stopPolling()\n this.poll()\n }\n\n stopPolling() {\n clearTimeout(this.pollTimeout)\n }\n\n poll() {\n this.pollTimeout = setTimeout(() => {\n this.reconnectIfStale()\n this.poll()\n }\n , this.getPollInterval())\n }\n\n getPollInterval() {\n const { staleThreshold, reconnectionBackoffRate } = this.constructor\n const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10))\n const jitterMax = this.reconnectAttempts === 0 ? 1.0 : reconnectionBackoffRate\n const jitter = jitterMax * Math.random()\n return staleThreshold * 1000 * backoff * (1 + jitter)\n }\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\n get refreshedAt() {\n return this.pingedAt ? this.pingedAt : this.startedAt\n }\n\n connectionIsStale() {\n return secondsSince(this.refreshedAt) > this.constructor.staleThreshold\n }\n\n disconnectedRecently() {\n return this.disconnectedAt && (secondsSince(this.disconnectedAt) < this.constructor.staleThreshold)\n }\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 }\n , 200)\n }\n }\n\n}\n\nConnectionMonitor.staleThreshold = 6 // Server::Connections::BEAT_INTERVAL * 2 (missed two pings)\nConnectionMonitor.reconnectionBackoffRate = 0.15\n\nexport default ConnectionMonitor\n", "export default {\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\": [\n \"actioncable-v1-json\",\n \"actioncable-unsupported\"\n ]\n}\n", "import adapters from \"./adapters\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport INTERNAL from \"./internal\"\nimport logger from \"./logger\"\n\n// Encapsulate the cable connection held by the consumer. This is an internal class not intended for direct user manipulation.\n\nconst {message_types, protocols} = INTERNAL\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\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\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) { this.uninstallEventHandlers() }\n this.webSocket = new adapters.WebSocket(this.consumer.url, socketProtocols)\n this.installEventHandlers()\n this.monitor.start()\n return true\n }\n }\n\n close({allowReconnect} = {allowReconnect: true}) {\n if (!allowReconnect) { this.monitor.stop() }\n // Avoid closing websockets in a \"connecting\" state due to Safari 15.1+ bug. See: https://github.com/rails/rails/issues/43835#issuecomment-1002288478\n if (this.isOpen()) {\n return this.webSocket.close()\n }\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 }\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\n getProtocol() {\n if (this.webSocket) {\n return this.webSocket.protocol\n }\n }\n\n isOpen() {\n return this.isState(\"open\")\n }\n\n isActive() {\n return this.isState(\"open\", \"connecting\")\n }\n\n triedToReconnect() {\n return this.monitor.reconnectAttempts > 0\n }\n\n // Private\n\n isProtocolSupported() {\n return indexOf.call(supportedProtocols, this.getProtocol()) >= 0\n }\n\n isState(...states) {\n return indexOf.call(states, this.getState()) >= 0\n }\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\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\n uninstallEventHandlers() {\n for (let eventName in this.events) {\n this.webSocket[`on${eventName}`] = function() {}\n }\n }\n\n}\n\nConnection.reopenDelay = 500\n\nConnection.prototype.events = {\n message(event) {\n if (!this.isProtocolSupported()) { return }\n const {identifier, message, reason, reconnect, 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 case message_types.disconnect:\n logger.log(`Disconnecting. Reason: ${reason}`)\n return this.close({allowReconnect: reconnect})\n case message_types.ping:\n return null\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\", {reconnected: true})\n } else {\n return this.subscriptions.notify(identifier, \"connected\", {reconnected: false})\n }\n case message_types.rejection:\n return this.subscriptions.reject(identifier)\n default:\n return this.subscriptions.notify(identifier, \"received\", message)\n }\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({allowReconnect: false})\n }\n },\n\n close(event) {\n logger.log(\"WebSocket onclose event\")\n if (this.disconnected) { return }\n this.disconnected = true\n this.monitor.recordDisconnect()\n return this.subscriptions.notifyAll(\"disconnected\", {willAttemptReconnect: this.monitor.isRunning()})\n },\n\n error() {\n logger.log(\"WebSocket onerror event\")\n }\n}\n\nexport default Connection\n", "// A new subscription is created through the ActionCable.Subscriptions instance available on the consumer.\n// It provides a number of callbacks and a method for calling remote procedure calls on the corresponding\n// Channel instance on the server side.\n//\n// An example demonstrates the basic functionality:\n//\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\", {\n// connected() {\n// // Called once the subscription has been successfully completed\n// },\n//\n// disconnected({ willAttemptReconnect: boolean }) {\n// // Called when the client has disconnected with the server.\n// // The object will have an `willAttemptReconnect` property which\n// // says whether the client has the intention of attempting\n// // to reconnect.\n// },\n//\n// appear() {\n// this.perform('appear', {appearing_on: this.appearingOn()})\n// },\n//\n// away() {\n// this.perform('away')\n// },\n//\n// appearingOn() {\n// $('main').data('appearing-on')\n// }\n// })\n//\n// The methods #appear and #away forward their intent to the remote AppearanceChannel instance on the server\n// by calling the `perform` method with the first parameter being the action (which maps to AppearanceChannel#appear/away).\n// The second parameter is a hash that'll get JSON encoded and made available on the server in the data parameter.\n//\n// This is how the server component would look:\n//\n// class AppearanceChannel < ApplicationActionCable::Channel\n// def subscribed\n// current_user.appear\n// end\n//\n// def unsubscribed\n// current_user.disappear\n// end\n//\n// def appear(data)\n// current_user.appear on: data['appearing_on']\n// end\n//\n// def away\n// current_user.away\n// end\n// end\n//\n// The \"AppearanceChannel\" name is automatically mapped between the client-side subscription creation and the server-side Ruby class name.\n// The AppearanceChannel#appear/away public methods are exposed automatically to client-side invocation through the perform method.\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\nexport default class Subscription {\n constructor(consumer, params = {}, mixin) {\n this.consumer = consumer\n this.identifier = JSON.stringify(params)\n extend(this, mixin)\n }\n\n // Perform a channel action with the optional data passed as an attribute\n perform(action, data = {}) {\n data.action = action\n return this.send(data)\n }\n\n send(data) {\n return this.consumer.send({command: \"message\", identifier: this.identifier, data: JSON.stringify(data)})\n }\n\n unsubscribe() {\n return this.consumer.subscriptions.remove(this)\n }\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring channel subscribe command is confirmed, retrying until confirmation is received.\n// Internal class, not intended for direct user manipulation.\n\nclass SubscriptionGuarantor {\n constructor(subscriptions) {\n this.subscriptions = subscriptions\n this.pendingSubscriptions = []\n }\n\n guarantee(subscription) {\n if(this.pendingSubscriptions.indexOf(subscription) == -1){ \n logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`)\n this.pendingSubscriptions.push(subscription) \n }\n else {\n logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`)\n }\n this.startGuaranteeing()\n }\n\n forget(subscription) {\n logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`)\n this.pendingSubscriptions = (this.pendingSubscriptions.filter((s) => s !== subscription))\n }\n\n startGuaranteeing() {\n this.stopGuaranteeing()\n this.retrySubscribing()\n }\n \n stopGuaranteeing() {\n clearTimeout(this.retryTimeout)\n }\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 }\n , 500)\n }\n}\n\nexport default SubscriptionGuarantor", "import Subscription from \"./subscription\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport logger from \"./logger\"\n\n// Collection class for creating (and internally managing) channel subscriptions.\n// The only method intended to be triggered by the user is ActionCable.Subscriptions#create,\n// and it should be called through the consumer like so:\n//\n// App = {}\n// App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n\nexport default class Subscriptions {\n constructor(consumer) {\n this.consumer = consumer\n this.guarantor = new SubscriptionGuarantor(this)\n this.subscriptions = []\n }\n\n create(channelName, mixin) {\n const channel = channelName\n const params = typeof channel === \"object\" ? channel : {channel}\n const subscription = new Subscription(this.consumer, params, mixin)\n return this.add(subscription)\n }\n\n // Private\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\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\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\n forget(subscription) {\n this.guarantor.forget(subscription)\n this.subscriptions = (this.subscriptions.filter((s) => s !== subscription))\n return subscription\n }\n\n findAll(identifier) {\n return this.subscriptions.filter((s) => s.identifier === identifier)\n }\n\n reload() {\n return this.subscriptions.map((subscription) =>\n this.subscribe(subscription))\n }\n\n notifyAll(callbackName, ...args) {\n return this.subscriptions.map((subscription) =>\n this.notify(subscription, callbackName, ...args))\n }\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\n return subscriptions.map((subscription) =>\n (typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined))\n }\n\n subscribe(subscription) {\n if (this.sendCommand(subscription, \"subscribe\")) {\n this.guarantor.guarantee(subscription)\n }\n }\n\n confirmSubscription(identifier) {\n logger.log(`Subscription confirmed ${identifier}`)\n this.findAll(identifier).map((subscription) =>\n this.guarantor.forget(subscription))\n }\n\n sendCommand(subscription, command) {\n const {identifier} = subscription\n return this.consumer.send({command, identifier})\n }\n}\n", "import Connection from \"./connection\"\nimport Subscriptions from \"./subscriptions\"\n\n// The ActionCable.Consumer establishes the connection to a server-side Ruby Connection object. Once established,\n// the ActionCable.ConnectionMonitor will ensure that its properly maintained through heartbeats and checking for stale updates.\n// The Consumer instance is also the gateway to establishing subscriptions to desired channels through the #createSubscription\n// method.\n//\n// The following example shows how this can be set up:\n//\n// App = {}\n// App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n//\n// When a consumer is created, it automatically connects with the server.\n//\n// To disconnect from the server, call\n//\n// App.cable.disconnect()\n//\n// and to restart the connection:\n//\n// App.cable.connect()\n//\n// Any channel subscriptions which existed prior to disconnecting will\n// automatically resubscribe.\n\nexport default class 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\n get url() {\n return createWebSocketURL(this._url)\n }\n\n send(data) {\n return this.connection.send(data)\n }\n\n connect() {\n return this.connection.open()\n }\n\n disconnect() {\n return this.connection.close({allowReconnect: false})\n }\n\n ensureActiveConnection() {\n if (!this.connection.isActive()) {\n return this.connection.open()\n }\n }\n\n addSubProtocol(subprotocol) {\n this.subprotocols = [...this.subprotocols, subprotocol]\n }\n}\n\nexport function createWebSocketURL(url) {\n if (typeof url === \"function\") {\n url = url()\n }\n\n if (url && !/^wss?:/i.test(url)) {\n const a = document.createElement(\"a\")\n a.href = url\n // Fix populating Location properties in IE. Otherwise, protocol will be blank.\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", "import Connection from \"./connection\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport Consumer, { createWebSocketURL } from \"./consumer\"\nimport INTERNAL from \"./internal\"\nimport Subscription from \"./subscription\"\nimport Subscriptions from \"./subscriptions\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport adapters from \"./adapters\"\nimport logger from \"./logger\"\n\nexport {\n Connection,\n ConnectionMonitor,\n Consumer,\n INTERNAL,\n Subscription,\n Subscriptions,\n SubscriptionGuarantor,\n adapters,\n createWebSocketURL,\n logger,\n}\n\nexport function createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n return new Consumer(url)\n}\n\nexport function getConfig(name) {\n const element = document.head.querySelector(`meta[name='action-cable-${name}']`)\n if (element) {\n return element.getAttribute(\"content\")\n }\n}\n", "/* eslint-disable */\n(function(global, factory) {\n typeof exports === \"object\" && typeof module !== \"undefined\" ? factory(exports) : typeof define === \"function\" && define.amd ? define([ \"exports\" ], factory) : (global = typeof globalThis !== \"undefined\" ? globalThis : global || self,\n factory(global.ActiveStorage = {}));\n})(this, (function(exports) {\n \"use strict\";\n var sparkMd5 = {\n exports: {}\n };\n (function(module, exports) {\n (function(factory) {\n {\n module.exports = factory();\n }\n })((function(undefined$1) {\n var hex_chr = [ \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\" ];\n function md5cycle(x, k) {\n var a = x[0], b = x[1], c = x[2], d = x[3];\n a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[10] - 42063 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b ^ c ^ d) + k[5] - 378558 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n x[0] = a + x[0] | 0;\n x[1] = b + x[1] | 0;\n x[2] = c + x[2] | 0;\n x[3] = d + x[3] | 0;\n }\n function md5blk(s) {\n var md5blks = [], i;\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n }\n return md5blks;\n }\n function md5blk_array(a) {\n var md5blks = [], i;\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n }\n return md5blks;\n }\n function md51(s) {\n var n = s.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n s = s.substring(i - 64);\n length = s.length;\n tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n }\n tail[i >> 2] |= 128 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n function md51_array(a) {\n var n = a.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n }\n a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n length = a.length;\n tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= a[i] << (i % 4 << 3);\n }\n tail[i >> 2] |= 128 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n function rhex(n) {\n var s = \"\", j;\n for (j = 0; j < 4; j += 1) {\n s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];\n }\n return s;\n }\n function hex(x) {\n var i;\n for (i = 0; i < x.length; i += 1) {\n x[i] = rhex(x[i]);\n }\n return x.join(\"\");\n }\n if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\") ;\n if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n (function() {\n function clamp(val, length) {\n val = val | 0 || 0;\n if (val < 0) {\n return Math.max(val + length, 0);\n }\n return Math.min(val, length);\n }\n ArrayBuffer.prototype.slice = function(from, to) {\n var length = this.byteLength, begin = clamp(from, length), end = length, num, target, targetArray, sourceArray;\n if (to !== undefined$1) {\n end = clamp(to, length);\n }\n if (begin > end) {\n return new ArrayBuffer(0);\n }\n num = end - begin;\n target = new ArrayBuffer(num);\n targetArray = new Uint8Array(target);\n sourceArray = new Uint8Array(this, begin, num);\n targetArray.set(sourceArray);\n return target;\n };\n })();\n }\n function toUtf8(str) {\n if (/[\\u0080-\\uFFFF]/.test(str)) {\n str = unescape(encodeURIComponent(str));\n }\n return str;\n }\n function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n var length = str.length, buff = new ArrayBuffer(length), arr = new Uint8Array(buff), i;\n for (i = 0; i < length; i += 1) {\n arr[i] = str.charCodeAt(i);\n }\n return returnUInt8Array ? arr : buff;\n }\n function arrayBuffer2Utf8Str(buff) {\n return String.fromCharCode.apply(null, new Uint8Array(buff));\n }\n function concatenateArrayBuffers(first, second, returnUInt8Array) {\n var result = new Uint8Array(first.byteLength + second.byteLength);\n result.set(new Uint8Array(first));\n result.set(new Uint8Array(second), first.byteLength);\n return returnUInt8Array ? result : result.buffer;\n }\n function hexToBinaryString(hex) {\n var bytes = [], length = hex.length, x;\n for (x = 0; x < length - 1; x += 2) {\n bytes.push(parseInt(hex.substr(x, 2), 16));\n }\n return String.fromCharCode.apply(String, bytes);\n }\n function SparkMD5() {\n this.reset();\n }\n SparkMD5.prototype.append = function(str) {\n this.appendBinary(toUtf8(str));\n return this;\n };\n SparkMD5.prototype.appendBinary = function(contents) {\n this._buff += contents;\n this._length += contents.length;\n var length = this._buff.length, i;\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n }\n this._buff = this._buff.substring(i - 64);\n return this;\n };\n SparkMD5.prototype.end = function(raw) {\n var buff = this._buff, length = buff.length, i, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], ret;\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n }\n this._finish(tail, length);\n ret = hex(this._hash);\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n this.reset();\n return ret;\n };\n SparkMD5.prototype.reset = function() {\n this._buff = \"\";\n this._length = 0;\n this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n return this;\n };\n SparkMD5.prototype.getState = function() {\n return {\n buff: this._buff,\n length: this._length,\n hash: this._hash.slice()\n };\n };\n SparkMD5.prototype.setState = function(state) {\n this._buff = state.buff;\n this._length = state.length;\n this._hash = state.hash;\n return this;\n };\n SparkMD5.prototype.destroy = function() {\n delete this._hash;\n delete this._buff;\n delete this._length;\n };\n SparkMD5.prototype._finish = function(tail, length) {\n var i = length, tmp, lo, hi;\n tail[i >> 2] |= 128 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(this._hash, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n tmp = this._length * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(this._hash, tail);\n };\n SparkMD5.hash = function(str, raw) {\n return SparkMD5.hashBinary(toUtf8(str), raw);\n };\n SparkMD5.hashBinary = function(content, raw) {\n var hash = md51(content), ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n SparkMD5.ArrayBuffer = function() {\n this.reset();\n };\n SparkMD5.ArrayBuffer.prototype.append = function(arr) {\n var buff = concatenateArrayBuffers(this._buff.buffer, arr, true), length = buff.length, i;\n this._length += arr.byteLength;\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n }\n this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n return this;\n };\n SparkMD5.ArrayBuffer.prototype.end = function(raw) {\n var buff = this._buff, length = buff.length, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], i, ret;\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff[i] << (i % 4 << 3);\n }\n this._finish(tail, length);\n ret = hex(this._hash);\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n this.reset();\n return ret;\n };\n SparkMD5.ArrayBuffer.prototype.reset = function() {\n this._buff = new Uint8Array(0);\n this._length = 0;\n this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n return this;\n };\n SparkMD5.ArrayBuffer.prototype.getState = function() {\n var state = SparkMD5.prototype.getState.call(this);\n state.buff = arrayBuffer2Utf8Str(state.buff);\n return state;\n };\n SparkMD5.ArrayBuffer.prototype.setState = function(state) {\n state.buff = utf8Str2ArrayBuffer(state.buff, true);\n return SparkMD5.prototype.setState.call(this, state);\n };\n SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n SparkMD5.ArrayBuffer.hash = function(arr, raw) {\n var hash = md51_array(new Uint8Array(arr)), ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n return SparkMD5;\n }));\n })(sparkMd5);\n var SparkMD5 = sparkMd5.exports;\n const fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\n class FileChecksum {\n static create(file, callback) {\n const instance = new FileChecksum(file);\n instance.create(callback);\n }\n constructor(file) {\n this.file = file;\n this.chunkSize = 2097152;\n this.chunkCount = Math.ceil(this.file.size / this.chunkSize);\n this.chunkIndex = 0;\n }\n create(callback) {\n this.callback = callback;\n this.md5Buffer = new SparkMD5.ArrayBuffer;\n this.fileReader = new FileReader;\n this.fileReader.addEventListener(\"load\", (event => this.fileReaderDidLoad(event)));\n this.fileReader.addEventListener(\"error\", (event => this.fileReaderDidError(event)));\n this.readNextChunk();\n }\n fileReaderDidLoad(event) {\n this.md5Buffer.append(event.target.result);\n if (!this.readNextChunk()) {\n const binaryDigest = this.md5Buffer.end(true);\n const base64digest = btoa(binaryDigest);\n this.callback(null, base64digest);\n }\n }\n fileReaderDidError(event) {\n this.callback(`Error reading ${this.file.name}`);\n }\n readNextChunk() {\n if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {\n const start = this.chunkIndex * this.chunkSize;\n const end = Math.min(start + this.chunkSize, this.file.size);\n const bytes = fileSlice.call(this.file, start, end);\n this.fileReader.readAsArrayBuffer(bytes);\n this.chunkIndex++;\n return true;\n } else {\n return false;\n }\n }\n }\n function getMetaValue(name) {\n const element = findElement(document.head, `meta[name=\"${name}\"]`);\n if (element) {\n return element.getAttribute(\"content\");\n }\n }\n function findElements(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n const elements = root.querySelectorAll(selector);\n return toArray(elements);\n }\n function findElement(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n return root.querySelector(selector);\n }\n function dispatchEvent(element, type, eventInit = {}) {\n const {disabled: disabled} = element;\n const {bubbles: bubbles, cancelable: cancelable, detail: detail} = eventInit;\n const event = document.createEvent(\"Event\");\n event.initEvent(type, bubbles || true, cancelable || true);\n event.detail = detail || {};\n try {\n element.disabled = false;\n element.dispatchEvent(event);\n } finally {\n element.disabled = disabled;\n }\n return event;\n }\n function toArray(value) {\n if (Array.isArray(value)) {\n return value;\n } else if (Array.from) {\n return Array.from(value);\n } else {\n return [].slice.call(value);\n }\n }\n class BlobRecord {\n constructor(file, checksum, url, customHeaders = {}) {\n this.file = file;\n this.attributes = {\n filename: file.name,\n content_type: file.type || \"application/octet-stream\",\n byte_size: file.size,\n checksum: checksum\n };\n this.xhr = new XMLHttpRequest;\n this.xhr.open(\"POST\", url, true);\n this.xhr.responseType = \"json\";\n this.xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n this.xhr.setRequestHeader(\"Accept\", \"application/json\");\n this.xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n Object.keys(customHeaders).forEach((headerKey => {\n this.xhr.setRequestHeader(headerKey, customHeaders[headerKey]);\n }));\n const csrfToken = getMetaValue(\"csrf-token\");\n if (csrfToken != undefined) {\n this.xhr.setRequestHeader(\"X-CSRF-Token\", csrfToken);\n }\n this.xhr.addEventListener(\"load\", (event => this.requestDidLoad(event)));\n this.xhr.addEventListener(\"error\", (event => this.requestDidError(event)));\n }\n get status() {\n return this.xhr.status;\n }\n get response() {\n const {responseType: responseType, response: response} = this.xhr;\n if (responseType == \"json\") {\n return response;\n } else {\n return JSON.parse(response);\n }\n }\n create(callback) {\n this.callback = callback;\n this.xhr.send(JSON.stringify({\n blob: this.attributes\n }));\n }\n requestDidLoad(event) {\n if (this.status >= 200 && this.status < 300) {\n const {response: response} = this;\n const {direct_upload: direct_upload} = response;\n delete response.direct_upload;\n this.attributes = response;\n this.directUploadData = direct_upload;\n this.callback(null, this.toJSON());\n } else {\n this.requestDidError(event);\n }\n }\n requestDidError(event) {\n this.callback(`Error creating Blob for \"${this.file.name}\". Status: ${this.status}`);\n }\n toJSON() {\n const result = {};\n for (const key in this.attributes) {\n result[key] = this.attributes[key];\n }\n return result;\n }\n }\n class BlobUpload {\n constructor(blob) {\n this.blob = blob;\n this.file = blob.file;\n const {url: url, headers: headers} = blob.directUploadData;\n this.xhr = new XMLHttpRequest;\n this.xhr.open(\"PUT\", url, true);\n this.xhr.responseType = \"text\";\n for (const key in headers) {\n this.xhr.setRequestHeader(key, headers[key]);\n }\n this.xhr.addEventListener(\"load\", (event => this.requestDidLoad(event)));\n this.xhr.addEventListener(\"error\", (event => this.requestDidError(event)));\n }\n create(callback) {\n this.callback = callback;\n this.xhr.send(this.file.slice());\n }\n requestDidLoad(event) {\n const {status: status, response: response} = this.xhr;\n if (status >= 200 && status < 300) {\n this.callback(null, response);\n } else {\n this.requestDidError(event);\n }\n }\n requestDidError(event) {\n this.callback(`Error storing \"${this.file.name}\". Status: ${this.xhr.status}`);\n }\n }\n let id = 0;\n class DirectUpload {\n constructor(file, url, delegate, customHeaders = {}) {\n this.id = ++id;\n this.file = file;\n this.url = url;\n this.delegate = delegate;\n this.customHeaders = customHeaders;\n }\n create(callback) {\n FileChecksum.create(this.file, ((error, checksum) => {\n if (error) {\n callback(error);\n return;\n }\n const blob = new BlobRecord(this.file, checksum, this.url, this.customHeaders);\n notify(this.delegate, \"directUploadWillCreateBlobWithXHR\", blob.xhr);\n blob.create((error => {\n if (error) {\n callback(error);\n } else {\n const upload = new BlobUpload(blob);\n notify(this.delegate, \"directUploadWillStoreFileWithXHR\", upload.xhr);\n upload.create((error => {\n if (error) {\n callback(error);\n } else {\n callback(null, blob.toJSON());\n }\n }));\n }\n }));\n }));\n }\n }\n function notify(object, methodName, ...messages) {\n if (object && typeof object[methodName] == \"function\") {\n return object[methodName](...messages);\n }\n }\n class DirectUploadController {\n constructor(input, file) {\n this.input = input;\n this.file = file;\n this.directUpload = new DirectUpload(this.file, this.url, this);\n this.dispatch(\"initialize\");\n }\n start(callback) {\n const hiddenInput = document.createElement(\"input\");\n hiddenInput.type = \"hidden\";\n hiddenInput.name = this.input.name;\n this.input.insertAdjacentElement(\"beforebegin\", hiddenInput);\n this.dispatch(\"start\");\n this.directUpload.create(((error, attributes) => {\n if (error) {\n hiddenInput.parentNode.removeChild(hiddenInput);\n this.dispatchError(error);\n } else {\n hiddenInput.value = attributes.signed_id;\n }\n this.dispatch(\"end\");\n callback(error);\n }));\n }\n uploadRequestDidProgress(event) {\n const progress = event.loaded / event.total * 100;\n if (progress) {\n this.dispatch(\"progress\", {\n progress: progress\n });\n }\n }\n get url() {\n return this.input.getAttribute(\"data-direct-upload-url\");\n }\n dispatch(name, detail = {}) {\n detail.file = this.file;\n detail.id = this.directUpload.id;\n return dispatchEvent(this.input, `direct-upload:${name}`, {\n detail: detail\n });\n }\n dispatchError(error) {\n const event = this.dispatch(\"error\", {\n error: error\n });\n if (!event.defaultPrevented) {\n alert(error);\n }\n }\n directUploadWillCreateBlobWithXHR(xhr) {\n this.dispatch(\"before-blob-request\", {\n xhr: xhr\n });\n }\n directUploadWillStoreFileWithXHR(xhr) {\n this.dispatch(\"before-storage-request\", {\n xhr: xhr\n });\n xhr.upload.addEventListener(\"progress\", (event => this.uploadRequestDidProgress(event)));\n }\n }\n const inputSelector = \"input[type=file][data-direct-upload-url]:not([disabled])\";\n class DirectUploadsController {\n constructor(form) {\n this.form = form;\n this.inputs = findElements(form, inputSelector).filter((input => input.files.length));\n }\n start(callback) {\n const controllers = this.createDirectUploadControllers();\n const startNextController = () => {\n const controller = controllers.shift();\n if (controller) {\n controller.start((error => {\n if (error) {\n callback(error);\n this.dispatch(\"end\");\n } else {\n startNextController();\n }\n }));\n } else {\n callback();\n this.dispatch(\"end\");\n }\n };\n this.dispatch(\"start\");\n startNextController();\n }\n createDirectUploadControllers() {\n const controllers = [];\n this.inputs.forEach((input => {\n toArray(input.files).forEach((file => {\n const controller = new DirectUploadController(input, file);\n controllers.push(controller);\n }));\n }));\n return controllers;\n }\n dispatch(name, detail = {}) {\n return dispatchEvent(this.form, `direct-uploads:${name}`, {\n detail: detail\n });\n }\n }\n const processingAttribute = \"data-direct-uploads-processing\";\n const submitButtonsByForm = new WeakMap;\n let started = false;\n function start() {\n if (!started) {\n started = true;\n document.addEventListener(\"click\", didClick, true);\n document.addEventListener(\"submit\", didSubmitForm, true);\n document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n }\n }\n function didClick(event) {\n const button = event.target.closest(\"button, input\");\n if (button && button.type === \"submit\" && button.form) {\n submitButtonsByForm.set(button.form, button);\n }\n }\n function didSubmitForm(event) {\n handleFormSubmissionEvent(event);\n }\n function didSubmitRemoteElement(event) {\n if (event.target.tagName == \"FORM\") {\n handleFormSubmissionEvent(event);\n }\n }\n function handleFormSubmissionEvent(event) {\n const form = event.target;\n if (form.hasAttribute(processingAttribute)) {\n event.preventDefault();\n return;\n }\n const controller = new DirectUploadsController(form);\n const {inputs: inputs} = controller;\n if (inputs.length) {\n event.preventDefault();\n form.setAttribute(processingAttribute, \"\");\n inputs.forEach(disable);\n controller.start((error => {\n form.removeAttribute(processingAttribute);\n if (error) {\n inputs.forEach(enable);\n } else {\n submitForm(form);\n }\n }));\n }\n }\n function submitForm(form) {\n let button = submitButtonsByForm.get(form) || findElement(form, \"input[type=submit], button[type=submit]\");\n if (button) {\n const {disabled: disabled} = button;\n button.disabled = false;\n button.focus();\n button.click();\n button.disabled = disabled;\n } else {\n button = document.createElement(\"input\");\n button.type = \"submit\";\n button.style.display = \"none\";\n form.appendChild(button);\n button.click();\n form.removeChild(button);\n }\n submitButtonsByForm.delete(form);\n }\n function disable(input) {\n input.disabled = true;\n }\n function enable(input) {\n input.disabled = false;\n }\n function autostart() {\n if (window.ActiveStorage) {\n start();\n }\n }\n setTimeout(autostart, 1);\n exports.DirectUpload = DirectUpload;\n exports.DirectUploadController = DirectUploadController;\n exports.DirectUploadsController = DirectUploadsController;\n exports.dispatchEvent = dispatchEvent;\n exports.start = start;\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n}));\n/* eslint-enable */\n", "const Util = {\n waitForGlobal (key, callback) {\n if (window[key]) {\n callback()\n } else {\n setTimeout(function () {\n Util.waitForGlobal(key, callback)\n }, 100)\n }\n },\n\n /*\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing.\n */\n debounce (func, wait, immediate) {\n let timeout\n\n return function () {\n const context = this\n const args = arguments\n const later = function () {\n timeout = null\n if (!immediate) func.apply(context, args)\n }\n const callNow = immediate && !timeout\n clearTimeout(timeout)\n timeout = setTimeout(later, wait)\n if (callNow) func.apply(context, args)\n }\n },\n\n delegate (element, selector, eventType, handler) {\n return element.addEventListener(eventType, function (e) {\n let target\n target = e.target\n while (!(!(target instanceof Element) || target.matches(selector))) {\n target = target.parentNode\n }\n if (target instanceof Element && handler.call(target, e) === false) {\n e.preventDefault()\n return e.stopPropagation()\n }\n })\n },\n\n throttle (func, limit) {\n let inThrottle\n\n return function () {\n const args = arguments\n const context = this\n if (!inThrottle) {\n func.apply(context, args)\n inThrottle = true\n // eslint-disable-next-line no-return-assign\n setTimeout(() => inThrottle = false, limit)\n }\n }\n },\n\n /*\n * Checks the current position of the screen\n */\n scrollY () {\n return window.pageYOffset || window.scrollY\n },\n\n overflowedX (container) {\n const lastChild = container.lastElementChild\n return container.clientWidth < lastChild.offsetLeft + lastChild.clientWidth\n },\n\n /*\n * Gets an element position relative to the 0,0 point\n */\n getPosition (element) {\n let xPosition = 0\n let yPosition = 0\n\n while (element) {\n xPosition += (element.offsetLeft + element.clientLeft)\n yPosition += (element.offsetTop + element.clientTop)\n element = element.offsetParent\n }\n\n return { x: xPosition, y: yPosition }\n },\n\n scrollToElement (element, offset = 0) {\n const to = Util.getPosition(element)\n\n window.scroll({\n top: to.y + offset,\n left: 0,\n behavior: 'smooth'\n })\n },\n\n scrollElement (element, position, isAbsolute = true) {\n if (!isAbsolute) {\n position.top += element.scrollTop\n position.left += element.scrollLeft\n }\n\n element.scroll({ top: position.top, left: position.left, behavior: 'smooth' })\n },\n\n moveToEndOfContentEditable (element) {\n const range = document.createRange()\n range.selectNodeContents(element)\n range.collapse(false)\n const selection = window.getSelection()\n selection.removeAllRanges()\n selection.addRange(range)\n },\n\n /*\n * Fetches various festalab specific information\n */\n facebookAppId () {\n return document.querySelector('meta[name=\\'festalab-facebook-app-id\\']').getAttribute('content')\n },\n\n platform () {\n return document.querySelector('meta[name=\\'festalab-platform\\']').getAttribute('content')\n },\n\n locale () {\n return document.querySelector('meta[name=\\'festalab-locale\\']').getAttribute('content')\n },\n\n currency () {\n return document.querySelector('meta[name=\\'festalab-currency\\']').getAttribute('content')\n },\n\n device () {\n return this.platform().split('')[1]\n },\n\n isMobile () {\n return /mobile/.test(Util.platform())\n },\n\n isDesktop () {\n return /desktop/.test(Util.platform())\n },\n\n deviceIsSupported () {\n return /supported/.test(Util.platform())\n },\n\n deviceIsUnSupported () {\n return /unsupported/.test(Util.platform())\n },\n\n deviceCanShare () {\n return Util.deviceIsSupported() && Util.isMobile() && navigator.share\n },\n\n deviceCanShareFiles () {\n const mockFile = [new File([], 'test.png', {})]\n return Util.deviceCanShare() && navigator.canShare({ files: mockFile })\n },\n\n media (mobile, desktop) {\n return Util.isMobile() ? mobile : desktop\n }\n}\n\nexport default Util\n", "/*!\n * clipboard.js v2.0.11\n * https://clipboardjs.com/\n *\n * Licensed MIT \u00A9 Zeno Rocha\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ClipboardJS\"] = factory();\n\telse\n\t\troot[\"ClipboardJS\"] = factory();\n})(this, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 686:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"default\": function() { return /* binding */ clipboard; }\n});\n\n// EXTERNAL MODULE: ./node_modules/tiny-emitter/index.js\nvar tiny_emitter = __webpack_require__(279);\nvar tiny_emitter_default = /*#__PURE__*/__webpack_require__.n(tiny_emitter);\n// EXTERNAL MODULE: ./node_modules/good-listener/src/listen.js\nvar listen = __webpack_require__(370);\nvar listen_default = /*#__PURE__*/__webpack_require__.n(listen);\n// EXTERNAL MODULE: ./node_modules/select/src/select.js\nvar src_select = __webpack_require__(817);\nvar select_default = /*#__PURE__*/__webpack_require__.n(src_select);\n;// CONCATENATED MODULE: ./src/common/command.js\n/**\n * Executes a given operation type.\n * @param {String} type\n * @return {Boolean}\n */\nfunction command(type) {\n try {\n return document.execCommand(type);\n } catch (err) {\n return false;\n }\n}\n;// CONCATENATED MODULE: ./src/actions/cut.js\n\n\n/**\n * Cut action wrapper.\n * @param {String|HTMLElement} target\n * @return {String}\n */\n\nvar ClipboardActionCut = function ClipboardActionCut(target) {\n var selectedText = select_default()(target);\n command('cut');\n return selectedText;\n};\n\n/* harmony default export */ var actions_cut = (ClipboardActionCut);\n;// CONCATENATED MODULE: ./src/common/create-fake-element.js\n/**\n * Creates a fake textarea element with a value.\n * @param {String} value\n * @return {HTMLElement}\n */\nfunction createFakeElement(value) {\n var isRTL = document.documentElement.getAttribute('dir') === 'rtl';\n var fakeElement = document.createElement('textarea'); // Prevent zooming on iOS\n\n fakeElement.style.fontSize = '12pt'; // Reset box model\n\n fakeElement.style.border = '0';\n fakeElement.style.padding = '0';\n fakeElement.style.margin = '0'; // Move element out of screen horizontally\n\n fakeElement.style.position = 'absolute';\n fakeElement.style[isRTL ? 'right' : 'left'] = '-9999px'; // Move element to the same position vertically\n\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n fakeElement.style.top = \"\".concat(yPosition, \"px\");\n fakeElement.setAttribute('readonly', '');\n fakeElement.value = value;\n return fakeElement;\n}\n;// CONCATENATED MODULE: ./src/actions/copy.js\n\n\n\n/**\n * Create fake copy action wrapper using a fake element.\n * @param {String} target\n * @param {Object} options\n * @return {String}\n */\n\nvar fakeCopyAction = function fakeCopyAction(value, options) {\n var fakeElement = createFakeElement(value);\n options.container.appendChild(fakeElement);\n var selectedText = select_default()(fakeElement);\n command('copy');\n fakeElement.remove();\n return selectedText;\n};\n/**\n * Copy action wrapper.\n * @param {String|HTMLElement} target\n * @param {Object} options\n * @return {String}\n */\n\n\nvar ClipboardActionCopy = function ClipboardActionCopy(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n container: document.body\n };\n var selectedText = '';\n\n if (typeof target === 'string') {\n selectedText = fakeCopyAction(target, options);\n } else if (target instanceof HTMLInputElement && !['text', 'search', 'url', 'tel', 'password'].includes(target === null || target === void 0 ? void 0 : target.type)) {\n // If input type doesn't support `setSelectionRange`. Simulate it. https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n selectedText = fakeCopyAction(target.value, options);\n } else {\n selectedText = select_default()(target);\n command('copy');\n }\n\n return selectedText;\n};\n\n/* harmony default export */ var actions_copy = (ClipboardActionCopy);\n;// CONCATENATED MODULE: ./src/actions/default.js\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n\n/**\n * Inner function which performs selection from either `text` or `target`\n * properties and then executes copy or cut operations.\n * @param {Object} options\n */\n\nvar ClipboardActionDefault = function ClipboardActionDefault() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // Defines base properties passed from constructor.\n var _options$action = options.action,\n action = _options$action === void 0 ? 'copy' : _options$action,\n container = options.container,\n target = options.target,\n text = options.text; // Sets the `action` to be performed which can be either 'copy' or 'cut'.\n\n if (action !== 'copy' && action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n } // Sets the `target` property using an element that will be have its content copied.\n\n\n if (target !== undefined) {\n if (target && _typeof(target) === 'object' && target.nodeType === 1) {\n if (action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n } // Define selection strategy based on `text` property.\n\n\n if (text) {\n return actions_copy(text, {\n container: container\n });\n } // Defines which selection strategy based on `target` property.\n\n\n if (target) {\n return action === 'cut' ? actions_cut(target) : actions_copy(target, {\n container: container\n });\n }\n};\n\n/* harmony default export */ var actions_default = (ClipboardActionDefault);\n;// CONCATENATED MODULE: ./src/clipboard.js\nfunction clipboard_typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { clipboard_typeof = function _typeof(obj) { return typeof obj; }; } else { clipboard_typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return clipboard_typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (clipboard_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n\n\n\n\n\n/**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n\nfunction getAttributeValue(suffix, element) {\n var attribute = \"data-clipboard-\".concat(suffix);\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n}\n/**\n * Base class which takes one or more elements, adds event listeners to them,\n * and instantiates a new `ClipboardAction` on each click.\n */\n\n\nvar Clipboard = /*#__PURE__*/function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n var _super = _createSuper(Clipboard);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n var _this;\n\n _classCallCheck(this, Clipboard);\n\n _this = _super.call(this);\n\n _this.resolveOptions(options);\n\n _this.listenClick(trigger);\n\n return _this;\n }\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n _createClass(Clipboard, [{\n key: \"resolveOptions\",\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = clipboard_typeof(options.container) === 'object' ? options.container : document.body;\n }\n /**\n * Adds a click event listener to the passed trigger.\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n */\n\n }, {\n key: \"listenClick\",\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = listen_default()(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n /**\n * Defines a new `ClipboardAction` on each click event.\n * @param {Event} e\n */\n\n }, {\n key: \"onClick\",\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n var action = this.action(trigger) || 'copy';\n var text = actions_default({\n action: action,\n container: this.container,\n target: this.target(trigger),\n text: this.text(trigger)\n }); // Fires an event based on the copy operation result.\n\n this.emit(text ? 'success' : 'error', {\n action: action,\n text: text,\n trigger: trigger,\n clearSelection: function clearSelection() {\n if (trigger) {\n trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n });\n }\n /**\n * Default `action` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: \"defaultAction\",\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n /**\n * Default `target` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: \"defaultTarget\",\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n /**\n * Allow fire programmatically a copy action\n * @param {String|HTMLElement} target\n * @param {Object} options\n * @returns Text copied.\n */\n\n }, {\n key: \"defaultText\",\n\n /**\n * Default `text` lookup function.\n * @param {Element} trigger\n */\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n /**\n * Destroy lifecycle.\n */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.listener.destroy();\n }\n }], [{\n key: \"copy\",\n value: function copy(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n container: document.body\n };\n return actions_copy(target, options);\n }\n /**\n * Allow fire programmatically a cut action\n * @param {String|HTMLElement} target\n * @returns Text cutted.\n */\n\n }, {\n key: \"cut\",\n value: function cut(target) {\n return actions_cut(target);\n }\n /**\n * Returns the support of the given action, or all actions if no action is\n * given.\n * @param {String} [action]\n */\n\n }, {\n key: \"isSupported\",\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n return support;\n }\n }]);\n\n return Clipboard;\n}((tiny_emitter_default()));\n\n/* harmony default export */ var clipboard = (Clipboard);\n\n/***/ }),\n\n/***/ 828:\n/***/ (function(module) {\n\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n\n\n/***/ }),\n\n/***/ 438:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar closest = __webpack_require__(828);\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n // Handle the regular Element usage\n if (typeof elements.addEventListener === 'function') {\n return _delegate.apply(null, arguments);\n }\n\n // Handle Element-less usage, it defaults to global delegation\n if (typeof type === 'function') {\n // Use `document` as the first parameter, then apply arguments\n // This is a short way to .unshift `arguments` without running into deoptimizations\n return _delegate.bind(null, document).apply(null, arguments);\n }\n\n // Handle Selector-based usage\n if (typeof elements === 'string') {\n elements = document.querySelectorAll(elements);\n }\n\n // Handle Array-like based usage\n return Array.prototype.map.call(elements, function (element) {\n return _delegate(element, selector, type, callback, useCapture);\n });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n\n\n/***/ }),\n\n/***/ 879:\n/***/ (function(__unused_webpack_module, exports) {\n\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n\n\n/***/ }),\n\n/***/ 370:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar is = __webpack_require__(879);\nvar delegate = __webpack_require__(438);\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n\n/***/ }),\n\n/***/ 817:\n/***/ (function(module) {\n\nfunction select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n\n\n/***/ }),\n\n/***/ 279:\n/***/ (function(module) {\n\nfunction E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\nmodule.exports.TinyEmitter = E;\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(__webpack_module_cache__[moduleId]) {\n/******/ \t\t\treturn __webpack_module_cache__[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t// module exports must be returned from runtime so entry inlining is disabled\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(686);\n/******/ })()\n.default;\n});", "const Enums = {\n months: {\n '00': '',\n '01': 'Janeiro',\n '02': 'Fevereiro',\n '03': 'Mar\u00E7o',\n '04': 'Abril',\n '05': 'Maio',\n '06': 'Junho',\n '07': 'Julho',\n '08': 'Agosto',\n '09': 'Setembro',\n '10': 'Outubro',\n '11': 'Novembro',\n '12': 'Dezembro'\n },\n\n weekdays: [\n 'Domingo',\n 'Segunda-feira',\n 'Ter\u00E7a-feira',\n 'Quarta-feira',\n 'Quinta-feira',\n 'Sexta-feira',\n 'S\u00E1bado'\n ],\n\n hours: {\n '00': 'Zero',\n '01': 'Uma',\n '02': 'Duas',\n '03': 'Tr\u00EAs',\n '04': 'Quatro',\n '05': 'Cinco',\n '06': 'Seis',\n '07': 'Sete',\n '08': 'Oito',\n '09': 'Nove',\n '10': 'Dez',\n '11': 'Onze',\n '12': 'Doze',\n '13': 'Treze',\n '14': 'Quatorze',\n '15': 'Quinze',\n '16': 'Dezesseis ',\n '17': 'Dezessete',\n '18': 'Dezoito',\n '19': 'Dezenove',\n '20': 'Vinte',\n '21': 'Vinte e Uma',\n '22': 'Vinte e Duas',\n '23': 'Vinte e Tr\u00EAs',\n '24': 'Vinte e Quatro'\n }\n\n}\n\nexport default Enums\n", "export default {\n date (val) {\n if (!/\\d{2}\\/\\d{2}\\/\\d{4}/.test(val)) return null\n\n const [day, month, year] = val.split('/').map((i) => parseInt(i))\n const date = new Date(year, month - 1, day)\n\n if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) return null\n\n const userTimezoneOffset = date.getTimezoneOffset() * 60000\n return new Date(date.getTime() - userTimezoneOffset)\n },\n\n credit_card_month_year (val) {\n if (!/\\d{2}\\/\\d{2}/.test(val)) return null\n\n const [month, year] = val.split('/').map((i) => parseInt(i))\n const date = new Date(year + 2000, month, 0)\n\n if (!(date instanceof Date && !isNaN(date) && date.getMonth() + 1 === month && date.getTime() >= Date.now())) return null\n\n return date\n }\n}\n", "/* eslint-disable */\n\nimport Formatter from './formatter'\n\nconst approximations = {\n '\u00C0': 'A', '\u00C1': 'A', '\u00C2': 'A', '\u00C3': 'A', '\u00C4': 'A', '\u00C5': 'A', '\u00C6': 'AE',\n '\u00C7': 'C', '\u00C8': 'E', '\u00C9': 'E', '\u00CA': 'E', '\u00CB': 'E', '\u00CC': 'I', '\u00CD': 'I',\n '\u00CE': 'I', '\u00CF': 'I', '\u00D0': 'D', '\u00D1': 'N', '\u00D2': 'O', '\u00D3': 'O', '\u00D4': 'O',\n '\u00D5': 'O', '\u00D6': 'O', '\u00D7': 'x', '\u00D8': 'O', '\u00D9': 'U', '\u00DA': 'U', '\u00DB': 'U',\n '\u00DC': 'U', '\u00DD': 'Y', '\u00DE': 'Th', '\u00DF': 'ss', '\u00E0': 'a', '\u00E1': 'a', '\u00E2': 'a',\n '\u00E3': 'a', '\u00E4': 'a', '\u00E5': 'a', '\u00E6': 'ae', '\u00E7': 'c', '\u00E8': 'e', '\u00E9': 'e',\n '\u00EA': 'e', '\u00EB': 'e', '\u00EC': 'i', '\u00ED': 'i', '\u00EE': 'i', '\u00EF': 'i', '\u00F0': 'd',\n '\u00F1': 'n', '\u00F2': 'o', '\u00F3': 'o', '\u00F4': 'o', '\u00F5': 'o', '\u00F6': 'o', '\u00F8': 'o',\n '\u00F9': 'u', '\u00FA': 'u', '\u00FB': 'u', '\u00FC': 'u', '\u00FD': 'y', '\u00FE': 'th', '\u00FF': 'y',\n '\u0100': 'A', '\u0101': 'a', '\u0102': 'A', '\u0103': 'a', '\u0104': 'A', '\u0105': 'a', '\u0106': 'C',\n '\u0107': 'c', '\u0108': 'C', '\u0109': 'c', '\u010A': 'C', '\u010B': 'c', '\u010C': 'C', '\u010D': 'c',\n '\u010E': 'D', '\u010F': 'd', '\u0110': 'D', '\u0111': 'd', '\u0112': 'E', '\u0113': 'e', '\u0114': 'E',\n '\u0115': 'e', '\u0116': 'E', '\u0117': 'e', '\u0118': 'E', '\u0119': 'e', '\u011A': 'E', '\u011B': 'e',\n '\u011C': 'G', '\u011D': 'g', '\u011E': 'G', '\u011F': 'g', '\u0120': 'G', '\u0121': 'g', '\u0122': 'G',\n '\u0123': 'g', '\u0124': 'H', '\u0125': 'h', '\u0126': 'H', '\u0127': 'h', '\u0128': 'I', '\u0129': 'i',\n '\u012A': 'I', '\u012B': 'i', '\u012C': 'I', '\u012D': 'i', '\u012E': 'I', '\u012F': 'i', '\u0130': 'I',\n '\u0131': 'i', '\u0132': 'IJ', '\u0133': 'ij', '\u0134': 'J', '\u0135': 'j', '\u0136': 'K', '\u0137': 'k',\n '\u0138': 'k', '\u0139': 'L', '\u013A': 'l', '\u013B': 'L', '\u013C': 'l', '\u013D': 'L', '\u013E': 'l',\n '\u013F': 'L', '\u0140': 'l', '\u0141': 'L', '\u0142': 'l', '\u0143': 'N', '\u0144': 'n', '\u0145': 'N',\n '\u0146': 'n', '\u0147': 'N', '\u0148': 'n', '\u0149': '\\'n', '\u014A': 'NG', '\u014B': 'ng',\n '\u014C': 'O', '\u014D': 'o', '\u014E': 'O', '\u014F': 'o', '\u0150': 'O', '\u0151': 'o', '\u0152': 'OE',\n '\u0153': 'oe', '\u0154': 'R', '\u0155': 'r', '\u0156': 'R', '\u0157': 'r', '\u0158': 'R', '\u0159': 'r',\n '\u015A': 'S', '\u015B': 's', '\u015C': 'S', '\u015D': 's', '\u015E': 'S', '\u015F': 's', '\u0160': 'S',\n '\u0161': 's', '\u0162': 'T', '\u0163': 't', '\u0164': 'T', '\u0165': 't', '\u0166': 'T', '\u0167': 't',\n '\u0168': 'U', '\u0169': 'u', '\u016A': 'U', '\u016B': 'u', '\u016C': 'U', '\u016D': 'u', '\u016E': 'U',\n '\u016F': 'u', '\u0170': 'U', '\u0171': 'u', '\u0172': 'U', '\u0173': 'u', '\u0174': 'W', '\u0175': 'w',\n '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', '\u0179': 'Z', '\u017A': 'z', '\u017B': 'Z', '\u017C': 'z',\n '\u017D': 'Z', '\u017E': 'z'\n}\n\nconst Text = {\n transliterate (val) {\n return val.split('').map(function (digit) {\n return approximations[digit] || digit\n }).join('')\n },\n\n parameterize (val) {\n return Text.transliterate(val).toLowerCase().replace(/\\s/g, '-').replace(/[^a-z0-9\\-]/g, '')\n },\n\n urlize (val) {\n return Text.transliterate(val).replace(/\\s/g, '-').replace(/[^a-zA-Z0-9\\-_:/.?=#\\[\\]@!$&]/g, '')\n },\n\n isEmpty (val) {\n return !val || !val.trim()\n },\n\n isPresent (val) {\n return !Text.isEmpty(val)\n },\n\n translate (value, format, suffix) {\n if (Text.isEmpty(format) && Text.isEmpty(suffix)) return value\n\n if (Text.isPresent(format)){\n return Formatter.apply(format, value)\n } else if (Number(value) === 1) {\n return `${value} ${suffix}`\n } else {\n return `${value} ${suffix}s`\n }\n },\n\n unformat (value, formatter) {\n if (formatter === 'decimal'){\n return value.replace(/\\./g, '').replace(',', '.')\n } else {\n return value\n }\n }\n}\n\nexport default Text\n", "import Enums from './enums'\nimport Parser from './parser'\nimport Text from './text'\n\nconst Formatter = {\n /*\n * Applies the formatter for the specified string to the value\n * @params {string} format - The formatter to be applied\n * @params {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n apply (format, value) {\n return Formatter[format](value)\n },\n\n /*\n * Returns the age forcing a text part\n * @param {string} value - The age used to determine to plural form\n * @return {string} value - The text\n */\n age (val) {\n if (val.replace(/\\d|e|\\s/g, '').length === 0) {\n return val.trim() + ' ' + Formatter.short_age(val)\n } else {\n return val\n }\n },\n\n /*\n * Returns the diminutive age forcing a text part\n * @param {string} value - The age used to determine to plural form\n * @return {string} value - The text\n */\n age_diminutive (val) {\n if (val.replace(/\\d|e|\\s/g, '').length === 0) {\n return val.trim() + ' ' + Formatter.short_age_diminutive(val)\n } else {\n return val\n }\n },\n\n /*\n * Returns the numerical part of the age, adding \"e\" if there are multiple numbers\n * @param {string} value - The age used to determine the numbers\n * @return {string} value - The numbers\n */\n age_number (val) {\n const ages = val.match(/\\d+/g)\n return ages ? ages.join(' e ') : ''\n },\n\n /*\n * Returns the textual part of the age, ensuring a value\n * @param {string} value - The age used to determine to plural form\n * @return {string} value - The text\n */\n age_text (val) {\n const tmp = val.replace(/ /g, '')\n const ages = val.match(/\\d+/g)\n\n if (!ages) {\n return ''\n } else if (Formatter.numbers(val).length === tmp.length || (!!ages && ages.length > 1)) {\n return Formatter.short_age(val)\n } else {\n return Formatter.text(val)\n }\n },\n\n /*\n * Returns the age of the person with the prefix Festinha de. Eg.: Festinha de 10 anos\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n age_with_party_prefix (val) {\n val = Formatter.age(val)\n\n return val ? 'Festinha de ' + val : ''\n },\n\n /*\n * Returns the age of the person with the prefix Vem comemorar de. Eg.: Vem comemorar os 10 anos\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n age_with_invite_prefix (val) {\n const connective = Formatter.numbers(val) > 1 ? 'os' : 'o'\n val = Formatter.age(val)\n\n return val ? 'Vem comemorar ' + connective + ' ' + val : ''\n },\n\n /*\n * Removes from the value anything that is not a number or letter.\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n alphanumeric (val) {\n return val.replace(/[^a-z0-9]/ig, '')\n },\n\n /*\n * Removes from the value anything that is not a number or letter.\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n alphanumeric_and_spaces (val) {\n return val.replace(/[^a-z0-9 ]/ig, '')\n },\n\n /*\n * Returns the title according to the event classification\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n classification (val) {\n const hash = {\n birthday: 'Anivers\u00E1rio',\n birthday_adult: 'Anivers\u00E1rio',\n baptism: 'Batizado',\n baby_shower: 'Ch\u00E1 de beb\u00EA',\n diaper_shower: 'Ch\u00E1 de fraldas',\n first_communion: 'Primeira Comunh\u00E3o',\n sweet_15: 'Festa',\n other: 'Festa'\n }\n\n return hash[val] || ''\n },\n\n /*\n * Returns the value formatted as a number, according to the user preferred language\n * @param {number} value - the value to be formatted\n */\n currency (val) {\n const locale = 'pt-BR' // Util.locale();\n const currency = 'BRL' // Util.currency();\n\n if (val) {\n return Number(val).toLocaleString(locale, { style: 'currency', currency: currency })\n } else {\n return Number(0).toLocaleString(locale, { style: 'currency', currency: currency })\n }\n },\n\n /*\n * Returns the formatted cpf cnpj\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n cpf_cnpj (val) {\n const tmp = Formatter.numbers(val)\n switch (tmp.length) {\n case 11:\n return Formatter.cpf(val)\n case 14:\n return Formatter.cnpj(val)\n default:\n return tmp\n }\n },\n\n /*\n * Returns the formatted cpf\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n cpf (val) {\n val = Formatter.numbers(val)\n\n if (val.length >= 9) val = val.substr(0, 9) + '-' + val.substr(9)\n\n if (val.length >= 6) val = val.substr(0, 6) + '.' + val.substr(6)\n\n if (val.length >= 3) val = val.substr(0, 3) + '.' + val.substr(3)\n\n return val\n },\n\n /*\n * Returns the formatted cnpj\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n cnpj (val) {\n val = Formatter.numbers(val)\n\n if (val.length >= 12) val = val.substr(0, 12) + '-' + val.substr(12)\n\n if (val.length >= 8) val = val.substr(0, 8) + '/' + val.substr(8)\n\n if (val.length >= 5) val = val.substr(0, 5) + '.' + val.substr(5)\n\n if (val.length >= 2) val = val.substr(0, 2) + '.' + val.substr(2)\n\n return val\n },\n\n /*\n * Returns the formatted credit_card\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n credit_card (val) {\n val = Formatter.numbers(val)\n\n if (val.length >= 12) val = val.substr(0, 12) + ' ' + val.substr(12)\n\n if (val.length >= 8) val = val.substr(0, 8) + ' ' + val.substr(8)\n\n if (val.length >= 4) val = val.substr(0, 4) + ' ' + val.substr(4)\n\n return val\n },\n\n /*\n * Returns a text field formatted as a credit card name\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n credit_card_name (val) {\n return Text.transliterate(val).toUpperCase().replace(/[^A-Z\\s]/ig, '')\n },\n\n /*\n * Returns a text field formatted as a credit card expiration date. Eg.: 01/2018\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n credit_card_month_year (val) {\n val = val.replace(/\\D/g, '')\n if (val.length >= 3) val = val.substr(0, 2) + '/' + val.substr(2, val.length)\n\n return val\n },\n\n /*\n * Returns a brazilian date. Eg.: 25/01/2018\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n date (val) {\n val = val.replace(/\\D/g, '')\n\n if (val.length >= 4) val = val.substr(0, 4) + '/' + val.substr(4)\n\n if (val.length >= 2) val = val.substr(0, 2) + '/' + val.substr(2)\n\n return val\n },\n\n /*\n * Returns a brazilian date with a dot separator. Eg.: 25\u202201\u20222018\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n date_dot (val) {\n val = Formatter.date(val)\n\n val = val.replace(/\\//g, '\u2022')\n\n return val\n },\n\n /*\n * Returns a brazilian date with a dot separator. Eg.: 25.01.2018\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n date_period (val) {\n val = Formatter.date(val)\n\n val = val.replace(/\\//g, '.')\n\n return val\n },\n\n /*\n * Returns the day in the specified date. Eg.: 24/01/2018 returns 24\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n day (val) {\n val = val.replace(/\\D/g, '')\n\n if (val.length < 2) return ''\n\n return val.substr(0, 2)\n },\n\n /*\n * Returns the brazilian decimal form. Eg.: 1.000,00\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n decimal (val) {\n val = val.replace(/\\D/g, '').replace(/^0+/, '')\n val = val.padStart(3, '0')\n\n if (val.length > 11) val = val.substr(0, val.length - 11) + '.' + val.substr(val.length - 11)\n\n if (val.length > 8) val = val.substr(0, val.length - 8) + '.' + val.substr(val.length - 8)\n\n if (val.length > 5) val = val.substr(0, val.length - 5) + '.' + val.substr(val.length - 5)\n\n if (val.length > 2) val = val.substr(0, val.length - 2) + ',' + val.substr(val.length - 2)\n\n return val\n },\n\n /*\n * Returns the formatted email phone\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n email_phone (val) {\n const hasOnlyNumbers = /^\\d+$/.test(val)\n\n if (hasOnlyNumbers) {\n return Formatter.phone(val)\n }\n\n return val\n },\n\n /*\n * Returns the connective according to the child gender\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n gender_connective (val) {\n switch (val) {\n case 'female':\n return 'da'\n case 'male':\n return 'do'\n default:\n return 'do(a)'\n }\n },\n\n /* Removes all numbers */\n letters (val) {\n return val.replace(/[0-9]/g, '')\n },\n\n /*\n * Changes full hours into text. Eg.: 15:00 to 15 horas, 15:30 to 15:30\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n hour (val) {\n if (val.substr(3, 2) !== '00') return val\n\n return parseInt(val.substr(0, 2)) + ' horas'\n },\n\n /*\n * Changes full hours into hours with h separator. Eg.: 15:00 to 15h00\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n hour_h (val) {\n return val.replace(':', 'h')\n },\n\n /*\n * Changes full hours into hours with H separator. Eg.: 15:00 to 15H, 15:30 to 15H30\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n short_hour_h (val) {\n if (val.substr(2) === '00') {\n return val.substr(0, 2) + 'h'\n }\n return val.replace(':', 'h')\n },\n\n /*\n * Changes full hours into text and adds a preposition. Eg.: 15:00 to '\u00E0s 15 horas', 15:30 to '\u00E0s 15:30'\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n hour_connective (val) {\n return '\u00E0s ' + Formatter.hour(val)\n },\n\n /*\n * Returns full hours with a preposition. Eg.: \u00E0s 15:00\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n simple_hour_connective (val) {\n return '\u00E0s ' + val\n },\n\n /*\n * Returns the string Niver\n * @param {string} value\n * @return {string} value - The formatted value\n */\n short_birthday_prefix (val) {\n return 'Niver'\n },\n\n /*\n* Changes full hours adding prefixed text to it. Eg.: '15:00' to '\u00C0 partir das 15 horas', '01:00' to '\u00C0 partir da 01:00'\n* @param {string} value - The value to be formatted\n* @return {string} value - The formatted value\n*/\n hour_with_prefix (val) {\n const prefix = val.substr(0, 2) === '01' ? 'A partir da' : 'A partir das'\n return prefix + ' ' + val\n },\n\n /*\n * Changes full hours into text and adds a prefix \"\u00C0s\" and suffix \"Horas\". Eg.: 15:00 to '\u00E0s Quinze horas', 15:30 to '\u00E0s Quinze e Trinta'\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n hour_text (val) {\n const [hour, minutes] = val.split(':')\n const hourText = parseInt(hour) === 1 ? '\u00E0 uma hora' : `\u00E0s ${Enums.hours[hour]} horas`\n const minutesText = parseInt(minutes) === 30 ? 'e trinta minutos' : ''\n return [hourText, minutesText].join(' ')\n },\n\n /*\n * Returns the full month in the specified date. Eg.: 24/01/2018 returns Janeiro\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n month (val) {\n val = val.replace(/\\D/g, '')\n\n if (val.length < 4) return ''\n\n return Enums.months[val.substr(2, 2)] || ''\n },\n\n /*\n * Returns only the numbers of month in the specified date. Eg.: 24/01/2018 returns 01\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n month_number (val) {\n val = val.replace(/\\D/g, '')\n\n if (val.length < 4) return ''\n\n return val.substr(2, 2)\n },\n\n /*\n * Returns only the first letter of the person name inserted. Eg.: Lucas returns L\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n first_letter (val) {\n val = val.replace(/ /g, '')\n\n return val.substr(0, 1)\n },\n\n /*\n * Returns the name of the person with the prefix &. Eg.: & Lucas\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n name_with_prefix (val) {\n return val ? '& ' + val : ''\n },\n\n /*\n * Returns connector pluralized if val has /&/. Eg.: \"Maria Fernanda & Isabella fazem 2 aninhos\"\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n name_age_connector_pluralizable (val) {\n return val.match(/\\s?[&\\-,|]\\s/)?.length > 0 ? val.replace(/\\sfaz\\s/, ' fazem ') : val\n },\n\n /*\n * Returns the title \"Sugest\u00E3o de presente: \" with the gift suggestion message, if it is present\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n gift_suggestion_with_title (val) {\n return val ? 'Sugest\u00E3o de presente: ' + val : ''\n },\n\n /*\n * Removes from the value anything that is not a number or a dash.\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n negative_number (val) {\n return val.replace(/[^-0-9]*/g, '')\n },\n\n /*\n * Removes from the value anything that is not a number.\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n number (val) {\n return val.replace(/\\D/g, '')\n },\n\n /*\n * Alias for 'number'\n */\n numbers (val) {\n return Formatter.number(val)\n },\n\n /*\n * Removes from the value anything that is not a number and adds a upperscript o.\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n ordinal_number (val) {\n return Formatter.numbers(val) + 'º'\n },\n\n /*\n * Returns a brazillian phone number (new or old) with the area code. Eg.: (31) 1234-5678 or (31) 12345-6789\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n phone (val) {\n val = val.replace(/\\D/g, '')\n\n if (val.length < 11) return legacyPhone(val)\n\n return newPhone(val)\n\n function legacyPhone (val) {\n if (val.length >= 6) val = val.substr(0, 6) + '-' + val.substr(6)\n\n if (val.length >= 2) val = val.substr(0, 2) + ') ' + val.substr(2)\n\n if (val.length > 0) val = '(' + val\n\n return val\n }\n\n function newPhone (val) {\n return '(' + val.substr(0, 2) + ') ' + val.substr(2, 5) + '-' + val.substr(7)\n }\n },\n\n international_phone (val) {\n return `+${val.replace(/\\D/g, '')}`\n },\n\n modern_brazilian_format (val) {\n if (val.match(/^\\(\\d{2}\\)\\s[789]\\d{3}\\-\\d{4}$/)) {\n val = val.substr(0, 5) + '9' + val.substr(5)\n }\n\n return val\n },\n\n auto_phone (val) {\n const isInternational = /^\\s*(\\+|55)/.test(val)\n const startsWithZero = val.startsWith('0')\n\n val = val.replace(/\\D/g, '')\n\n if (isInternational) { val = val.substr(2) }\n\n if (startsWithZero) {\n val = parseInt(val).toString()\n if (val.length >= 13) { val = val.substr(-11) }\n if (val.length === 12) { val = val.substr(-10) }\n }\n\n if (val.length >= 12) { val = val.substr(0, 11) }\n\n if (val.length <= 11) {\n return Formatter.phone(val)\n } else {\n return Formatter.international_phone(val)\n }\n },\n\n modern_auto_phone (val) {\n val = Formatter.auto_phone(val)\n\n if (Text.isEmpty(val)) {\n return val\n } else if (val.startsWith('+') && val.length === 13 && ['7', '8', '9'].includes(val[5])) {\n return val.slice(0, 5) + '9' + val.slice(5)\n } else if (val.length === 14 && ['7', '8', '9'].includes(val[5])) {\n return val.slice(0, 5) + '9' + val.slice(5)\n } else {\n return val\n }\n },\n\n /*\n * Returns \"anos\" or \"ano\" depending on the child age.\n * @param {string} value - The age used to determine to plural form\n * @return {string} value - The text\n */\n short_age (val) {\n const age = Formatter.numbers(val)\n if (!age) return ''\n return Number(age) > 1 ? 'anos' : 'ano'\n },\n\n /*\n * Returns \"aninhos\" or \"aninho\" depending on the child age.\n * @param {string} value - The age used to determine to plural form\n * @return {string} value - The text\n */\n short_age_diminutive (val) {\n const age = Formatter.numbers(val)\n if (!age) return ''\n return Number(age) > 1 ? 'aninhos' : 'aninho'\n },\n\n /*\n * Returns the short month in the specified date. Eg.: 24/01/2018 returns Jan\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n short_month (val) {\n val = val.replace(/\\D/g, '')\n\n if (val.length < 4) return ''\n\n return (Enums.months[val.substr(2, 2)] || '').substr(0, 3)\n },\n\n /*\n * Returns the short version of weekday in the specified date. Eg.: 24/01/2018 returns Quarta\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n short_weekday (val) {\n const date = Parser.date(val)\n if (!date) return ''\n\n return Enums.weekdays[date.getUTCDay()].replace('-feira', '')\n },\n\n /*\n * Returns the very short version of weekday in the specified date. Eg.: 24/01/2018 returns Qua\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n very_short_weekday (val) {\n const date = Parser.date(val)\n if (!date) return ''\n\n return Enums.weekdays[date.getUTCDay()].substr(0, 3)\n },\n\n /*\n * Transforms a text into a slug used in a url\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n slug (val) {\n return Text.parameterize(val)\n },\n\n /*\n * Removes all numbers from the value, keeping only the text, special characters and whitespace\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n text (val) {\n return val.replace(/\\d/g, '').replace(/\\s\\s+/g, ' ').trim()\n },\n\n /*\n * Transforms a text into a valid url\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n url (val) {\n return Text.urlize(val)\n },\n\n /*\n * Returns the weekday in the specified date. Eg.: 24/01/2018 returns Quarta-Feira\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n weekday (val) {\n const date = Parser.date(val)\n if (!date) return ''\n\n return Enums.weekdays[date.getUTCDay()]\n },\n\n /*\n * Returns the year in the specified date. Eg.: 24/01/2018 returns 2018\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n year (val) {\n val = val.replace(/\\D/g, '')\n\n if (val.length < 8) return ''\n\n return val.substr(4, 4)\n },\n\n /*\n * Only allo users to uppercase the first letter of each word\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n titlecase (val) {\n const result = []\n\n val.split(' ').forEach((word) => {\n result.push(word.charAt(0) + word.slice(1).toLowerCase())\n })\n\n return result.join(' ')\n },\n\n /*\n * Returns the last 2 digits from year in the specified date. Eg.: 24/01/2018 returns 18\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n short_year (val) {\n val = val.replace(/\\D/g, '')\n\n if (val.length < 8) return ''\n\n return val.substr(6, 2)\n },\n\n /*\n * Returns the formatted sku\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n sku (val) {\n val = Formatter.alphanumeric(val).toUpperCase()\n\n if (val.length >= 17) val = val.substr(0, 17) + '-' + val.substr(17)\n\n if (val.length >= 8) val = val.substr(0, 8) + '-' + val.substr(8)\n\n if (val.length >= 3) val = val.substr(0, 3) + '-' + val.substr(3)\n\n return val\n },\n\n /*\n * Returns a brazilian zipcode. Eg.: 04521-004\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n zipcode (val) {\n val = val.replace(/\\D/g, '')\n\n if (val.length >= 5) val = val.substr(0, 5) + '-' + val.substr(5)\n\n return val\n },\n\n /*\n * Returns the formatter rsvp date with prefix and bold. Eg.: <b>RSVP at\u00E9 01/02:</b>\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n rsvp_with_prefix (val) {\n return '<b>RSVP at\u00E9 ' + val.substr(0, 5) + ':</b>'\n },\n\n /*\n * Add the ceremony prefix. Eg.: <b>Cerim\u00F4nia:</b> Igreja</b>\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n ceremony_prefix (val) {\n return '<b>Cerim\u00F4nia:</b> ' + val\n },\n\n /*\n * Add the ceremony prefix. Eg.: <b>Cerim\u00F4nia:</b> Igreja</b>\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n reception_prefix (val) {\n return '<b>Recep\u00E7\u00E3o:</b> ' + val\n },\n\n /*\n * Add the celebrate prefix. Eg.: Comemora 10 anos\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n celebrate_prefix (val) {\n return 'Comemora ' + val\n },\n\n /*\n * Add the event welcoming prefix. Eg.: Te espero para o Ch\u00E1 de Beb\u00EA da Ingrid\n * @param {string} value - The value to be formatted\n * @return {string} value - The formatted value\n */\n event_title_welcoming (val) {\n return 'Te espero para o ' + val\n }\n}\n\nexport default Formatter\n", "import Text from './text'\n\nconst Dom = {\n\n noscroll (status, element = document.body) {\n element.classList.toggle('noscroll', status)\n },\n\n show (element, animated) {\n if (animated) {\n element.style[animated.attribute] = animated.value\n } else if (element.classList.contains('hidden')) {\n element.classList.remove('hidden')\n } else {\n element.style.display = element.dataset.domDisplay || 'block'\n }\n },\n\n hide (element, animated) {\n if (animated) {\n element.style[animated.attribute] = animated.value\n } else if (element.style.display !== 'none') {\n element.dataset.domDisplay = element.style.display\n element.style.display = 'none'\n }\n },\n\n activate (element, force) {\n if (force === undefined) {\n element.classList.toggle('active')\n } else if (force) {\n element.classList.add('active')\n } else {\n element.classList.remove('active')\n }\n },\n\n set (element, value, options = {}) {\n const attribute = options.attribute || 'value'\n const event = options.event || 'changed'\n const format = element.dataset.valueFormat\n const suffix = element.dataset.valueSuffix\n\n const tag = element.tagName\n switch (tag) {\n case 'DIV':\n break\n case 'P':\n case 'LABEL':\n case 'SPAN':\n element.textContent = Text.translate(value, format, suffix)\n break\n case 'INPUT':\n element.value = value\n break\n default:\n console.log(`I don't know how to set values in ${tag}.`)\n }\n\n element.setAttribute(`data-${attribute}`, value.toString().replace(/,/, '.'))\n Dom.fire(element, event)\n },\n\n get (element, options = {}) {\n const attribute = options.attribute || 'value'\n const tag = element.tagName\n const formatter = element.dataset.formatter\n const value = element.value\n\n switch (tag) {\n case 'DIV':\n case 'P':\n case 'LABEL':\n case 'SPAN':\n return element.getAttribute(`data-${attribute}`)\n case 'INPUT':\n case 'TEXTAREA':\n return Text.unformat(value, formatter)\n default:\n console.log(`I don't know how to get values from ${tag}.`)\n }\n },\n\n fire (obj, name, data, options = {}) {\n const { bubbles, cancelable } = options\n\n const event = new CustomEvent(name, {\n bubbles: bubbles || false, // Under no circunstance change this. It will cause infinite loops.\n cancelable: cancelable || true,\n detail: data\n })\n obj.dispatchEvent(event)\n return !event.defaultPrevented\n }\n}\n\nwindow.Dom = Dom // Bobross: Figure out a better way to expose this\n\nexport default Dom\n", "/*\n * JavaScript Load Image\n * https://github.com/blueimp/JavaScript-Load-Image\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n/* global define, module, Promise */\n\n;(function ($) {\n 'use strict'\n\n var urlAPI = $.URL || $.webkitURL\n\n /**\n * Creates an object URL for a given File object.\n *\n * @param {Blob} blob Blob object\n * @returns {string|boolean} Returns object URL if API exists, else false.\n */\n function createObjectURL(blob) {\n return urlAPI ? urlAPI.createObjectURL(blob) : false\n }\n\n /**\n * Revokes a given object URL.\n *\n * @param {string} url Blob object URL\n * @returns {undefined|boolean} Returns undefined if API exists, else false.\n */\n function revokeObjectURL(url) {\n return urlAPI ? urlAPI.revokeObjectURL(url) : false\n }\n\n /**\n * Helper function to revoke an object URL\n *\n * @param {string} url Blob Object URL\n * @param {object} [options] Options object\n */\n function revokeHelper(url, options) {\n if (url && url.slice(0, 5) === 'blob:' && !(options && options.noRevoke)) {\n revokeObjectURL(url)\n }\n }\n\n /**\n * Loads a given File object via FileReader interface.\n *\n * @param {Blob} file Blob object\n * @param {Function} onload Load event callback\n * @param {Function} [onerror] Error/Abort event callback\n * @param {string} [method=readAsDataURL] FileReader method\n * @returns {FileReader|boolean} Returns FileReader if API exists, else false.\n */\n function readFile(file, onload, onerror, method) {\n if (!$.FileReader) return false\n var reader = new FileReader()\n reader.onload = function () {\n onload.call(reader, this.result)\n }\n if (onerror) {\n reader.onabort = reader.onerror = function () {\n onerror.call(reader, this.error)\n }\n }\n var readerMethod = reader[method || 'readAsDataURL']\n if (readerMethod) {\n readerMethod.call(reader, file)\n return reader\n }\n }\n\n /**\n * Cross-frame instanceof check.\n *\n * @param {string} type Instance type\n * @param {object} obj Object instance\n * @returns {boolean} Returns true if the object is of the given instance.\n */\n function isInstanceOf(type, obj) {\n // Cross-frame instanceof check\n return Object.prototype.toString.call(obj) === '[object ' + type + ']'\n }\n\n /**\n * @typedef { HTMLImageElement|HTMLCanvasElement } Result\n */\n\n /**\n * Loads an image for a given File object.\n *\n * @param {Blob|string} file Blob object or image URL\n * @param {Function|object} [callback] Image load event callback or options\n * @param {object} [options] Options object\n * @returns {HTMLImageElement|FileReader|Promise<Result>} Object\n */\n function loadImage(file, callback, options) {\n /**\n * Promise executor\n *\n * @param {Function} resolve Resolution function\n * @param {Function} reject Rejection function\n * @returns {HTMLImageElement|FileReader} Object\n */\n function executor(resolve, reject) {\n var img = document.createElement('img')\n var url\n /**\n * Callback for the fetchBlob call.\n *\n * @param {HTMLImageElement|HTMLCanvasElement} img Error object\n * @param {object} data Data object\n * @returns {undefined} Undefined\n */\n function resolveWrapper(img, data) {\n if (resolve === reject) {\n // Not using Promises\n if (resolve) resolve(img, data)\n return\n } else if (img instanceof Error) {\n reject(img)\n return\n }\n data = data || {} // eslint-disable-line no-param-reassign\n data.image = img\n resolve(data)\n }\n /**\n * Callback for the fetchBlob call.\n *\n * @param {Blob} blob Blob object\n * @param {Error} err Error object\n */\n function fetchBlobCallback(blob, err) {\n if (err && $.console) console.log(err) // eslint-disable-line no-console\n if (blob && isInstanceOf('Blob', blob)) {\n file = blob // eslint-disable-line no-param-reassign\n url = createObjectURL(file)\n } else {\n url = file\n if (options && options.crossOrigin) {\n img.crossOrigin = options.crossOrigin\n }\n }\n img.src = url\n }\n img.onerror = function (event) {\n revokeHelper(url, options)\n if (reject) reject.call(img, event)\n }\n img.onload = function () {\n revokeHelper(url, options)\n var data = {\n originalWidth: img.naturalWidth || img.width,\n originalHeight: img.naturalHeight || img.height\n }\n try {\n loadImage.transform(img, options, resolveWrapper, file, data)\n } catch (error) {\n if (reject) reject(error)\n }\n }\n if (typeof file === 'string') {\n if (loadImage.requiresMetaData(options)) {\n loadImage.fetchBlob(file, fetchBlobCallback, options)\n } else {\n fetchBlobCallback()\n }\n return img\n } else if (isInstanceOf('Blob', file) || isInstanceOf('File', file)) {\n url = createObjectURL(file)\n if (url) {\n img.src = url\n return img\n }\n return readFile(\n file,\n function (url) {\n img.src = url\n },\n reject\n )\n }\n }\n if ($.Promise && typeof callback !== 'function') {\n options = callback // eslint-disable-line no-param-reassign\n return new Promise(executor)\n }\n return executor(callback, callback)\n }\n\n // Determines if metadata should be loaded automatically.\n // Requires the load image meta extension to load metadata.\n loadImage.requiresMetaData = function (options) {\n return options && options.meta\n }\n\n // If the callback given to this function returns a blob, it is used as image\n // source instead of the original url and overrides the file argument used in\n // the onload and onerror event callbacks:\n loadImage.fetchBlob = function (url, callback) {\n callback()\n }\n\n loadImage.transform = function (img, options, callback, file, data) {\n callback(img, data)\n }\n\n loadImage.global = $\n loadImage.readFile = readFile\n loadImage.isInstanceOf = isInstanceOf\n loadImage.createObjectURL = createObjectURL\n loadImage.revokeObjectURL = revokeObjectURL\n\n if (typeof define === 'function' && define.amd) {\n define(function () {\n return loadImage\n })\n } else if (typeof module === 'object' && module.exports) {\n module.exports = loadImage\n } else {\n $.loadImage = loadImage\n }\n})((typeof window !== 'undefined' && window) || this)\n", "const data = {\n container: null,\n element: null,\n groupMode: false\n}\n\nconst Resizer = {\n allFonts (delay) {\n delay = delay || 0\n\n // Force a delay to ensure resizing is done after reflow\n setTimeout(function () {\n document.querySelectorAll('[data-allow-font-resize]').forEach(function (element) {\n if (element.querySelector(':not(br)')) {\n Resizer.font(element.lastElementChild)\n } else {\n Resizer.font(element)\n }\n })\n }, delay)\n },\n\n /*\n * Given an element containing text, resizes the font of the element (and its siblings) so that it fits within the\n * container. The container element must have either a height value set, or a min-height AND max-height set for this\n * to work properly.\n */\n font (el) {\n data.container = el.parentNode\n data.element = el\n\n if (Resizer.allowFontResize()) {\n Resizer.child()\n } else if (Resizer.allowFontGroupResize()) {\n Resizer.children()\n }\n },\n\n child () {\n data.groupMode = false\n\n Resizer.prepareForResize()\n Resizer.increaseFontSizeToMax()\n Resizer.reduceFontSizeToFit()\n Resizer.applyResizingToGroup()\n },\n\n children () {\n data.groupMode = true\n data.element = data.container.lastElementChild\n\n Resizer.prepareForResize()\n Resizer.increaseFontSizeToMax()\n Resizer.reduceFontSizeToFit()\n },\n\n applyResizingToGroup () {\n const group = data.element.dataset.resizerGroup\n if (!group) return\n\n const elements = Array.prototype.slice.call(document.querySelectorAll(`[data-resizer-group=\"${group}\"]`))\n let fontSize = Resizer.getCurrentFontSize()\n\n const fontSizes = elements.map(element => {\n data.element = element\n if (Resizer.getCurrentFontSize() < fontSize) Resizer.increaseFontSizeToMax()\n return Resizer.getCurrentFontSize()\n }).filter(fontSize => !isNaN(fontSize))\n\n fontSize = Math.min(...fontSizes)\n elements.forEach(element => {\n data.element = element\n Resizer.setCurrentFontSize(fontSize)\n })\n },\n\n reduceFontSizeToFit () {\n while (Resizer.isCurrentFontTooBig() && Resizer.getCurrentFontSize() > 1) {\n Resizer.setCurrentFontSize(Resizer.getCurrentFontSize() - 1)\n }\n },\n\n increaseFontSizeToMax () {\n while (!Resizer.isCurrentFontTooBig() && Resizer.getCurrentFontSize() < Resizer.getOriginalFontSize()) {\n Resizer.setCurrentFontSize(Resizer.getCurrentFontSize() + 1)\n }\n },\n\n isCurrentFontTooBig () {\n const offsetBottom = data.element.offsetTop < 0 || !data.groupMode ? data.element.offsetHeight : data.element.offsetTop + data.element.offsetHeight\n return (offsetBottom >= data.container.offsetHeight && data.container.offsetHeight >= Resizer.getMaxHeight() - 1) || Resizer.wordIsTooLong()\n },\n\n wordIsTooLong () {\n return data.element.offsetWidth > data.container.offsetWidth + 1\n },\n\n prepareForResize () {\n if (isNaN(Resizer.getOriginalFontSize())) {\n Resizer.setOriginalFontSize(Resizer.getFontSize())\n }\n\n if (isNaN(Resizer.getOriginalLineHeight())) {\n Resizer.setOriginalLineHeight(Resizer.getLineHeight())\n }\n\n if (isNaN(Resizer.getCurrentFontSize())) {\n Resizer.setCurrentFontSize(Resizer.getFontSize())\n }\n\n if (isNaN(Resizer.getMaxHeight())) {\n Resizer.setMaxHeight(Resizer.getAllowedHeight())\n }\n },\n\n setOriginalFontSize (val) {\n data.element.dataset.originalFontSize = val\n },\n\n getOriginalFontSize () {\n return parseInt(data.element.dataset.originalFontSize, 10)\n },\n\n setOriginalLineHeight (val) {\n data.element.dataset.originalLineHeight = val\n },\n\n getOriginalLineHeight () {\n return parseInt(data.element.dataset.originalLineHeight, 10)\n },\n\n setCurrentFontSize (val) {\n const lineHeight = this.getOriginalLineHeight() * val / this.getOriginalFontSize()\n const attributes = { 'font-size': `${val}px !important`, 'line-height': `${lineHeight}px !important` }\n\n if (data.groupMode) {\n data.container.querySelectorAll('div').forEach(function (element) {\n Resizer.mergeStyle(element, attributes)\n })\n } else {\n Resizer.mergeStyle(data.element, attributes)\n }\n\n data.element.dataset.currentFontSize = val\n },\n\n getCurrentFontSize () {\n return parseInt(data.element.dataset.currentFontSize, 10)\n },\n\n getMaxHeight () {\n return parseInt(data.container.dataset.maxHeight, 10)\n },\n\n setMaxHeight (val) {\n data.container.dataset.maxHeight = val\n },\n\n allowFontResize () {\n return data.element.dataset.allowFontResize !== undefined\n },\n\n allowFontGroupResize () {\n return data.container.dataset.allowFontResize !== undefined\n },\n\n getFontSize () {\n const size = window.getComputedStyle(data.element).fontSize\n return parseInt(size.replace(/[^\\d.]/, ''), 10)\n },\n\n getLineHeight () {\n const lineHeight = window.getComputedStyle(data.element).lineHeight\n return parseInt(lineHeight.replace(/[^\\d.]/, ''), 10)\n },\n\n getAllowedHeight () {\n const style = window.getComputedStyle(data.container)\n\n const maxHeight = parseInt(style.maxHeight.replace(/[^\\d.]/, ''), 10)\n if (!isNaN(maxHeight)) return maxHeight\n\n return parseInt(style.height.replace(/[^\\d.]/, ''), 10)\n },\n\n // This mess is needed because !important does not work unless we set the style as text\n mergeStyle (element, attributes) {\n Object.keys(attributes).forEach(key => {\n element.style[key] = ''\n element.style.cssText += `${key}: ${attributes[key]}`\n })\n }\n}\n\nexport default Resizer\n", "import Resizer from './resizer'\nimport Text from './text'\nimport Util from './util'\nimport Dom from './dom'\n\nconst Binder = {\n\n /*\n * Displays the target if the source has content\n * @param {HTMLElement} source - The element to check for a value\n * @param {HTMLElement} target - The element to display or hide\n */\n conditional (source, target) {\n Util.delegate(document, source, 'input', function (e) {\n const targetElement = document.getElementById(target)\n if (!targetElement) return\n\n Binder.chooseTargetElement(targetElement).classList.toggle('hidden', !e.target.value.trim())\n })\n\n Binder.clickBind(target, source)\n },\n\n /*\n* Displays the target or the targetConditional whether the source has content\n* @param {HTMLElement} source - The element to check for a value\n* @param {HTMLElement} targetConditional - A conditional element to display or hide, opposilly to the target\n* @param {HTMLElement} target - The element to display or hide\n*/\n conditional_target (source, targetConditional, target) {\n Util.delegate(document, source, 'input', function (e) {\n const targetElement = document.getElementById(target)\n const conditionalElement = document.getElementById(targetConditional)\n const sourceElement = document.querySelector(source)\n\n if (!targetElement) return\n\n if (!conditionalElement) {\n return\n } else {\n if (!sourceElement.value && conditionalElement.firstElementChild.className === 'hidden') {\n Binder.chooseTargetElement(conditionalElement).classList.toggle('hidden', false)\n } else {\n Binder.chooseTargetElement(conditionalElement).classList.toggle('hidden', true)\n }\n }\n\n Binder.chooseTargetElement(targetElement).classList.toggle('hidden', !e.target.value.trim())\n })\n\n Binder.clickBind(target, source)\n },\n\n /*\n * Copies the value of multiple sources to the target, passing each one through their callback\n * @param {array} sources - An array of objects containing the 'name' and 'callback' properties.\n * @param {HTMLElement} target - The element to copy to\n * @param {string} separators - The string or array to use to join the sources together\n * @param {function} callback - A final callback to put the value through\n */\n custom (sources, target, separators, callback) {\n sources.forEach(function (source) {\n const event = source.event || 'input'\n\n Util.delegate(document, source.selector, event, function () {\n const targetElement = document.getElementById(target)\n if (!targetElement) return\n\n let result = joinSources(sources, separators)\n if (callback) result = callback(result)\n Binder.setText(targetElement, result)\n })\n })\n\n Binder.clickBind(target, sources[0].selector)\n\n function joinSources (sources, separators) {\n const arr = []\n\n sources.forEach(function (source) {\n const element = document.querySelector(source.selector)\n const value = Binder.getValue(element)\n const formatted = source.callback ? source.callback(value) : value\n if (formatted.length > 0) arr.push(formatted.toString())\n })\n\n return join(arr, separators)\n }\n\n function join (arr, separators) {\n if (arr.length === 0) return ''\n\n if (typeof separators === 'string') return arr.join(separators)\n\n if (separators.length < arr.length - 1) return ''\n\n const tmp = separators.slice()\n tmp.reverse()\n\n const result = []\n arr.forEach(function (item) {\n const separator = tmp.pop()\n item = item.trim()\n\n if (item.length > 0) {\n result.push(item)\n result.push(separator)\n }\n })\n\n return result.join('')\n }\n },\n\n /*\n * Copies the source value to the target text after passing it through the callback\n * @param {HTMLElement} source - The element to copy from\n * @param {HTMLElement} target - The element to copy to\n * @param {function} callback - The function that will format the value of the source element\n */\n formatted (source, target, callback) {\n Util.delegate(document, source, 'input', function (e) {\n const targetElement = document.getElementById(target)\n if (!targetElement) return\n\n Binder.setText(targetElement, callback(Binder.getValue(e.target)))\n })\n\n Binder.clickBind(target, source)\n },\n\n /*\n * Switches span visibility according to gender\n * @param {HTMLElement} source - The element containing the gender choice\n * @param {HTMLElement} target - The element contaning the gender information to be chosen.\n */\n gendered (source, target) {\n Util.delegate(document, source, 'input', function (e) {\n const targetElement = document.getElementById(target)\n if (!targetElement) return\n\n const males = targetElement.querySelectorAll('[data-gender=\"male\"]')\n const females = targetElement.querySelectorAll('[data-gender=\"female\"]')\n const val = Binder.getValue(e.target)\n\n if (val === 'male') {\n males.forEach(function (ev) {\n ev.classList.remove('hidden')\n })\n females.forEach(function (ev) {\n ev.classList.add('hidden')\n })\n } else {\n males.forEach(function (ev) {\n ev.classList.add('hidden')\n })\n females.forEach(function (ev) {\n ev.classList.remove('hidden')\n })\n }\n })\n\n Binder.clickBind(target, source)\n },\n\n /*\n * Gets the binding value from the specified element\n */\n getRadioValue (element) {\n const checked = document.querySelector('[name=\"' + element.name + '\"]:checked')\n return (checked || {}).value || ''\n },\n\n /*\n * Gets the binding value from the specified element\n */\n getValue (element) {\n const value = element.value || (element.dataset || {}).placeholder || element.placeholder || ''\n return value.toString().trim()\n },\n\n /*\n * Copies the value of multiple sources to the target's text\n * @param {HTMLElement} sources - The element to copy from\n * @param {HTMLElement} target - The element to copy to\n * @param {string} separator - The string to use to join the sources together\n */\n join (sources, target, separator) {\n sources.forEach(function (source) {\n Util.delegate(document, source, 'input', function () {\n const targetElement = document.getElementById(target)\n if (!targetElement) return\n\n separator = Binder.chooseSeparator(targetElement, separator)\n Binder.setText(targetElement, joinSources(sources, separator))\n })\n })\n\n function joinSources (sources, separator) {\n const arr = []\n\n sources.forEach(function (source) {\n const element = document.querySelector(source)\n const value = Binder.getValue(element)\n if (value.length > 0) arr.push(value.toString().trim())\n })\n\n return arr.join(separator)\n }\n\n Binder.clickBind(target, sources[0])\n },\n\n /*\n * Switches visibility according to option chosen\n * @param {HTMLElement} source - The element containing the classification choice\n * @param {HTMLElement} target - The element contaning the classification information to be chosen.\n */\n optionPicker (source, target) {\n Util.delegate(document, source, 'input', function (e) {\n const targetElement = document.getElementById(target)\n if (!targetElement) return\n\n const option = Binder.getValue(e.target)\n targetElement.querySelectorAll('[data-option]').forEach(function (element) {\n if (element.dataset.option === option) {\n element.classList.remove('hidden')\n } else {\n element.classList.add('hidden')\n }\n })\n\n Resizer.allFonts()\n })\n\n Binder.clickBind(target, source)\n },\n\n /*\n * Displays the target if the source has content\n * @param {HTMLElement} source - The element to check for a value\n * @param {HTMLElement} conditionalSource - The element to check for a value\n * @param {HTMLElement} target - The element to display or hide\n */\n placeholder (source, conditionalSource, target) {\n Util.delegate(document, source, 'input', () => {\n setPlaceholder(source, conditionalSource, target)\n })\n\n Util.delegate(document, conditionalSource, 'input', () => {\n setPlaceholder(source, conditionalSource, target)\n })\n\n function setPlaceholder (source, conditional, target) {\n const targetElement = document.getElementById(target)\n if (!targetElement) return\n\n if (document.querySelector(source).value !== '') return\n\n if (document.querySelector(conditionalSource).value !== '') {\n Binder.setText(targetElement, '')\n } else {\n Binder.setText(targetElement, '', true)\n }\n }\n },\n\n /*\n * Switches elements between their singlar and plural form according to the number of birthday boys/girls\n * @param {HTMLElement} source - The element containing the age\n */\n pluralizable (source) {\n Util.delegate(document, source, 'input', function (e) {\n const val = Binder.getValue(e.target).match(/\\d+/g)\n const form = val && val.length > 1 ? 'plural' : 'singular'\n\n document.querySelectorAll('[data-pluralizable]').forEach(function (ev) {\n if (form === ev.dataset.pluralizable) {\n ev.classList.remove('hidden')\n } else {\n ev.classList.add('hidden')\n }\n })\n })\n },\n\n /*\n * Copies the source value to the target's text\n * @param {HTMLElement} source - The element to copy from\n * @param {HTMLElement} target - The element to copy to\n */\n raw (source, target) {\n Util.delegate(document, source, 'input', function (e) {\n const targetElement = document.getElementById(target)\n if (!targetElement) return\n\n Binder.setText(targetElement, Binder.getValue(e.target))\n })\n\n Binder.clickBind(target, source)\n },\n\n /*\n * Sets the value of an element\n */\n setText (element, value, force = false) {\n const target = Binder.chooseTargetElement(element)\n const result = Binder.formatValue(target, value, force)\n\n if (target.tagName === 'IMG') {\n const src = value.length > 0 ? Text.urlize(result) : 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=='\n target.src = src\n } else if (target.tagName === 'INPUT') {\n target.value = result\n Dom.fire(target, 'input', null, { bubbles: true })\n } else {\n target.innerHTML = result.replace(/-/g, '‑')\n Resizer.font(target)\n }\n },\n\n /*\n * If the target element is clicked, the source element is focused\n */\n clickBind (source, target) {\n Util.delegate(document, '#' + source, 'click', function (e) {\n if (e.target.tagName === 'INPUT') return\n\n const to = Util.getPosition(document.querySelector(target))\n window.scroll({\n top: to.y - 15,\n left: 0,\n behavior: 'smooth'\n })\n })\n },\n\n chooseTargetElement (element) {\n const children = element.querySelectorAll('span, img')\n return children.length > 0 ? children[0] : element\n },\n\n chooseSeparator (element, separator) {\n const target = Binder.chooseTargetElement(element)\n return target.dataset.binderSeparator || separator\n },\n\n formatValue (element, value, force) {\n if (force) return value\n if (value.length === 0) return element.dataset.binderPlaceholder || ''\n\n const prefix = element.dataset.binderPrefix || ''\n const suffix = element.dataset.binderSuffix || ''\n const formatted = prefix + value + suffix\n\n const pad = element.dataset.binderPadding || ''\n return pad.length === 0 ? formatted : formatted.padStart(pad.length, pad.charAt(0))\n }\n}\n\nexport default Binder\n", "import Binder from '../lib/binder'\nimport Formatter from '../lib/formatter'\n\nconst Invitations = {\n start () {\n Binder.raw('#invitation_person_name', 'child-name')\n Binder.raw('#invitation_person_name', 'person-name')\n Binder.raw('#invitation_location', 'event-location')\n Binder.raw('#invitation_neighborhood', 'address-neighborhood')\n Binder.raw('#invitation_city', 'address-city')\n Binder.raw('#invitation_secondary_person_name', 'secondary-person-name')\n Binder.raw('#invitation_secondary_location', 'secondary-event-location')\n Binder.raw('#invitation_secondary_neighborhood', 'secondary-address-neighborhood')\n Binder.raw('#invitation_secondary_city', 'secondary-address-city')\n\n Binder.raw('#invitation_starts_at', 'event-starts_at')\n Binder.raw('#invitation_public_url', 'event-public-url')\n Binder.raw('#invitation_rsvp_closes_on', 'event-rsvp-date')\n Binder.raw('#invitation_gift_suggestion', 'event-gift-suggestion')\n\n Binder.join(['#invitation_starts_at_hour', '#invitation_starts_at_minutes'], 'invitation_starts_at', ':')\n Binder.join(['#invitation_person_name', '#invitation_secondary_person_name'], 'couple-names', ' & ')\n Binder.join(['#invitation_person_name', '#invitation_secondary_person_name'], 'couple-names-with-e', ' e ')\n Binder.join(['#invitation_street', '#invitation_number', '#invitation_complement'], 'address-building', ', ')\n Binder.join(['#invitation_street', '#invitation_number', '#invitation_complement', '#invitation_neighborhood'], 'address-building-neighborhood', ', ')\n Binder.join(['#invitation_city', '#invitation_state'], 'address-city-state', ' - ')\n Binder.join(['#invitation_neighborhood', '#invitation_city'], 'address-neighborhood-city', ' - ')\n Binder.join(['#invitation_neighborhood', '#invitation_city', '#invitation_state'], 'address-neighborhood-city-state', ' - ')\n Binder.join(['#invitation_secondary_street', '#invitation_secondary_number', '#invitation_secondary_complement'], 'secondary-address-building', ', ')\n Binder.join(['#invitation_secondary_street', '#invitation_secondary_number', '#invitation_secondary_complement', '#invitation_secondary_neighborhood'], 'secondary-address-building-neighborhood', ', ')\n Binder.join(['#invitation_secondary_city', '#invitation_secondary_state'], 'secondary-address-city-state', ' - ')\n Binder.join(['#invitation_secondary_neighborhood', '#invitation_secondary_city'], 'secondary-address-neighborhood-city', ' - ')\n Binder.join(['#invitation_secondary_neighborhood', '#invitation_secondary_city', '#invitation_secondary_state'], 'secondary-address-neighborhood-city-state', ' - ')\n Binder.join(['#invitation_scheduled_on', '#invitation_city'], 'event-date-city', ' | ')\n\n Binder.formatted('#invitation_classification', 'event-title-without-article', Formatter.classification)\n Binder.formatted('#invitation_person_gender', 'event-title-customized', Formatter.gender_connective)\n Binder.formatted('#invitation_person_gender', 'event-gender-connective', Formatter.gender_connective)\n Binder.formatted('#invitation_scheduled_on', 'event-day', Formatter.day)\n Binder.formatted('#invitation_scheduled_on', 'event-month', Formatter.month)\n Binder.formatted('#invitation_scheduled_on', 'event-year', Formatter.year)\n Binder.formatted('#invitation_scheduled_on', 'event-short-year', Formatter.short_year)\n Binder.formatted('#invitation_scheduled_on', 'event-month-number', Formatter.month_number)\n Binder.formatted('#invitation_scheduled_on', 'event-short-month', Formatter.short_month)\n Binder.formatted('#invitation_scheduled_on', 'event-weekday', Formatter.weekday)\n Binder.formatted('#invitation_scheduled_on', 'event-short-weekday', Formatter.short_weekday)\n Binder.formatted('#invitation_scheduled_on', 'event-date', Formatter.date)\n Binder.formatted('#invitation_scheduled_on', 'event-date-dot', Formatter.date_dot)\n Binder.formatted('#invitation_scheduled_on', 'event-date-period', Formatter.date_period)\n Binder.formatted('#invitation_person_age', 'child-age', Formatter.age)\n Binder.formatted('#invitation_person_age', 'child-age-diminutive', Formatter.age_diminutive)\n Binder.formatted('#invitation_person_age', 'child-age-number', Formatter.age_number)\n Binder.formatted('#invitation_person_age', 'child-age-number-secondary', Formatter.age_number)\n Binder.formatted('#invitation_person_age', 'child-age-ordinal-number', Formatter.ordinal_number)\n Binder.formatted('#invitation_person_age', 'child-age-text', Formatter.age_text)\n Binder.formatted('#invitation_person_age', 'child-short-age', Formatter.short_age)\n Binder.formatted('#invitation_person_age', 'person-age-celebrate', Formatter.celebrate_prefix)\n Binder.formatted('#invitation_starts_at', 'event-hour-connective', Formatter.hour_connective)\n Binder.formatted('#invitation_starts_at', 'event-hour-with-connective', Formatter.simple_hour_connective)\n Binder.formatted('#invitation_starts_at', 'event-hour-long', Formatter.hour)\n Binder.formatted('#invitation_starts_at', 'event-hour-text', Formatter.hour_text)\n Binder.formatted('#invitation_starts_at', 'event-hour_with_prefix', Formatter.hour_with_prefix)\n Binder.formatted('#invitation_starts_at', 'event-hour-h', Formatter.hour_h)\n Binder.formatted('#invitation_starts_at', 'event-short-hour-h', Formatter.short_hour_h)\n Binder.formatted('#invitation_person_name', 'child-name-initial', Formatter.first_letter)\n Binder.formatted('#invitation_person_name', 'person-name-initial', Formatter.first_letter)\n Binder.formatted('#invitation_secondary_person_name', 'secondary-person-name-initial', Formatter.first_letter)\n Binder.formatted('#invitation_gift_suggestion', 'gift-suggestion-with-title', Formatter.gift_suggestion_with_title)\n Binder.formatted('#invitation_secondary_person_name', 'secondary-person-name-with-prefix', Formatter.name_with_prefix)\n Binder.gendered('#invitation_person_gender', 'event-gendered-title')\n Binder.pluralizable('#invitation_person_age')\n Binder.optionPicker('#invitation_classification', 'event-classification')\n Binder.conditional('#invitation_gift_suggestion', 'event-gift-suggestion-message')\n Binder.conditional_target('#invitation_gift_suggestion', 'event-gift-suggestion-default-message', 'event-gift-suggestion-message')\n\n Binder.custom([\n { selector: '#invitation_starts_at_hour' },\n { selector: '#invitation_starts_at_minutes' }\n ], 'invitation_starts_at', ':')\n\n Binder.custom([\n { selector: '#invitation_person_name' },\n { selector: '#invitation_secondary_person_name' }\n ], 'invitation_public_url', ' e ', Formatter.slug)\n\n Binder.custom([\n { selector: '#invitation_classification', callback: Formatter.classification },\n { selector: '#invitation_person_gender', callback: Formatter.gender_connective }\n ], 'event-title', ' ')\n\n Binder.custom([\n { selector: '#invitation_classification', callback: Formatter.classification },\n { selector: '#invitation_person_gender', callback: Formatter.gender_connective },\n { selector: '#invitation_person_name' }\n ], 'event-title-with-connector', ' ')\n\n Binder.custom([\n { selector: '#invitation_classification', callback: Formatter.classification },\n { selector: '#invitation_person_gender', callback: Formatter.gender_connective },\n { selector: '#invitation_person_name' }\n ], 'event-title-welcoming', ' ', Formatter.event_title_welcoming)\n\n Binder.custom([\n { selector: '#invitation_person_name' },\n { selector: '#invitation_person_age', callback: Formatter.numbers }\n ], 'child-name-with-age', ' faz ', Formatter.name_age_connector_pluralizable)\n\n Binder.custom([\n { selector: '#invitation_person_gender', callback: Formatter.gender_connective },\n { selector: '#invitation_person_name' }\n ], 'person-name-with-gender-connective', ' ')\n\n Binder.custom([\n { selector: '#invitation_person_name' },\n { selector: '#invitation_person_age', callback: Formatter.age }\n ], 'person-name-and-age', ' faz ', Formatter.name_age_connector_pluralizable)\n\n Binder.custom([\n { selector: '#invitation_person_age', callback: Formatter.age },\n { selector: '#invitation_person_gender', callback: Formatter.gender_connective },\n { selector: '#invitation_person_name' }\n ], 'person-name-and-age-with-gender', [' ', ' '])\n\n Binder.custom([\n { selector: '#invitation_person_name', callback: Formatter.short_birthday_prefix },\n { selector: '#invitation_person_gender', callback: Formatter.gender_connective },\n { selector: '#invitation_person_name' },\n { selector: '#invitation_person_age', callback: Formatter.age }\n ], 'person-name-and-age-with-short-birthday-prefix', [' ', ' ', ', '])\n\n Binder.custom([\n { selector: '#invitation_person_age', callback: Formatter.age_with_party_prefix },\n { selector: '#invitation_person_gender', callback: Formatter.gender_connective },\n { selector: '#invitation_person_name' }\n ], 'person-age-and-name-with-party-prefix', [' ', ' '])\n\n Binder.custom([\n { selector: '#invitation_person_age', callback: Formatter.age_with_invite_prefix },\n { selector: '#invitation_person_name' }\n ], 'person-age-and-name-with-invite-prefix', ' de ')\n\n Binder.custom([\n { selector: '#invitation_person_age', callback: Formatter.age },\n { selector: '#invitation_person_name' }\n ], 'person-age-and-name', ' de ')\n\n Binder.custom([\n { selector: '#invitation_scheduled_on', callback: Formatter.weekday },\n { selector: '#invitation_starts_at' }\n ], 'event-weekday-hour', ' | ')\n\n Binder.custom([\n { selector: '#invitation_scheduled_on', callback: Formatter.weekday },\n { selector: '#invitation_starts_at' }\n ], 'event-weekday-hour-with-connective', ' \u00E0s ')\n\n Binder.custom([\n { selector: '#invitation_scheduled_on', callback: Formatter.weekday },\n { selector: '#invitation_starts_at', callback: Formatter.hour_text }\n ], 'event-weekday-hour-readable', ', ')\n\n Binder.custom([\n { selector: '#invitation_scheduled_on', callback: Formatter.short_weekday },\n { selector: '#invitation_starts_at' }\n ], 'event-short-weekday-hour-double-colon', ' :: ')\n\n Binder.custom([\n { selector: '#invitation_scheduled_on', callback: Formatter.short_weekday },\n { selector: '#invitation_starts_at' }\n ], 'event-short-weekday-hour', ' | ')\n\n Binder.custom([\n { selector: '#invitation_scheduled_on', callback: Formatter.short_weekday },\n { selector: '#invitation_starts_at', callback: Formatter.hour_h }\n ], 'event-short-weekday-hour-without-connective', ' ')\n\n Binder.custom([\n { selector: '#invitation_scheduled_on', callback: Formatter.short_weekday },\n { selector: '#invitation_starts_at' }\n ], 'event-short-weekday-hour-with-connective', ' \u00E0s ')\n\n Binder.custom([\n { selector: '#invitation_scheduled_on', callback: Formatter.short_weekday },\n { selector: '#invitation_starts_at', callback: Formatter.hour_h }\n ], 'event-short-weekday-hour-with-colon-and-connective', ', \u00E0s ')\n\n Binder.custom([\n { selector: '#invitation_scheduled_on', callback: Formatter.very_short_weekday },\n { selector: '#invitation_starts_at' }\n ], 'event-very-short-weekday-hour', ' | ')\n\n Binder.custom([\n { selector: '#invitation_scheduled_on', callback: Formatter.weekday },\n { selector: '#invitation_starts_at', callback: Formatter.hour }\n ], 'event-weekday-hour-long', ' | ')\n\n Binder.custom([\n { selector: '#invitation_scheduled_on', callback: Formatter.day },\n { selector: '#invitation_scheduled_on', callback: Formatter.month }\n ], 'event-day-month', ' de ')\n\n Binder.custom([\n { selector: '#invitation_rsvp_closes_on', callback: Formatter.day },\n { selector: '#invitation_rsvp_closes_on', callback: Formatter.month }\n ], 'event-rsvp', ' de ')\n\n Binder.custom([\n { selector: '#invitation_rsvp_closes_on', callback: Formatter.day },\n { selector: '#invitation_rsvp_closes_on', callback: Formatter.month },\n { selector: '#invitation_rsvp_closes_on', callback: Formatter.year }\n ], 'event-rsvp-full', ' de ')\n\n Binder.custom([\n { selector: '#invitation_scheduled_on', callback: Formatter.day },\n { selector: '#invitation_scheduled_on', callback: Formatter.month },\n { selector: '#invitation_scheduled_on', callback: Formatter.year }\n ], 'event-day-month-year-with-connective', ' de ')\n\n Binder.custom([\n { selector: '#invitation_scheduled_on', callback: Formatter.day },\n { selector: '#invitation_scheduled_on', callback: Formatter.month }\n ], 'event-day-month-no-connector', ' ')\n\n Binder.custom([\n { selector: '#invitation_scheduled_on', callback: Formatter.day },\n { selector: '#invitation_scheduled_on', callback: Formatter.short_month }\n ], 'event-day-short-month', ' ')\n\n Binder.custom([\n { selector: '#invitation_scheduled_on', callback: Formatter.weekday },\n { selector: '#invitation_scheduled_on', callback: Formatter.day },\n { selector: '#invitation_scheduled_on', callback: Formatter.month }\n ], 'event-weekday-day-month', [', ', ' de '])\n\n Binder.custom([\n { selector: '#invitation_scheduled_on', callback: Formatter.short_weekday },\n { selector: '#invitation_scheduled_on', callback: Formatter.day },\n { selector: '#invitation_scheduled_on', callback: Formatter.month }\n ], 'event-short-weekday-day-month', [', ', ' de '])\n\n Binder.custom([\n { selector: '#invitation_scheduled_on', callback: Formatter.short_weekday },\n { selector: '#invitation_scheduled_on', callback: Formatter.day },\n { selector: '#invitation_scheduled_on', callback: Formatter.month },\n { selector: '#invitation_starts_at' }\n ], 'event-short-weekday-day-month-hour', [', ', ' de ', ' \u00E0s '])\n\n Binder.custom([\n { selector: '#invitation_scheduled_on', callback: Formatter.short_weekday },\n { selector: '#invitation_scheduled_on', callback: Formatter.day },\n { selector: '#invitation_scheduled_on', callback: Formatter.month },\n { selector: '#invitation_scheduled_on', callback: Formatter.year },\n { selector: '#invitation_starts_at' }\n ], 'event-short-weekday-day-month-year-hour', [', ', ' de ', ' de ', ' \u00E0s '])\n\n Binder.custom([\n { selector: '#invitation_scheduled_on', callback: Formatter.day },\n { selector: '#invitation_scheduled_on', callback: Formatter.month },\n { selector: '#invitation_scheduled_on', callback: Formatter.short_weekday },\n { selector: '#invitation_starts_at' }\n ], 'event-day-month-short-weekday-hour-with-connective', [' de ', ' - ', ' \u00E0s '])\n\n Binder.custom([\n { selector: '#invitation_scheduled_on', callback: Formatter.short_weekday },\n { selector: '#invitation_scheduled_on', callback: Formatter.day },\n { selector: '#invitation_scheduled_on', callback: Formatter.short_month },\n { selector: '#invitation_starts_at' }\n ], 'event-short-weekday-day-short-month-hour', [', ', ' de ', ' \u00E0s '])\n\n Binder.custom([\n { selector: '#invitation_scheduled_on', callback: Formatter.day },\n { selector: '#invitation_scheduled_on', callback: Formatter.short_month },\n { selector: '#invitation_scheduled_on', callback: Formatter.short_weekday },\n { selector: '#invitation_starts_at' }\n ], 'event-day-short-month-weekday-hour-pipe', [' ', ' | ', ' | '])\n\n Binder.custom([\n { selector: '#invitation_scheduled_on', callback: Formatter.day },\n { selector: '#invitation_scheduled_on', callback: Formatter.short_month },\n { selector: '#invitation_scheduled_on', callback: Formatter.short_weekday },\n { selector: '#invitation_starts_at' }\n ], 'event-day-short-month-weekday-hour-break-line', [' ', '<br>', '<br>'])\n\n Binder.custom([\n { selector: '#invitation_scheduled_on', callback: Formatter.day },\n { selector: '#invitation_scheduled_on', callback: Formatter.short_month }\n ], 'event-day-short-month', ' ')\n\n Binder.custom([\n { selector: '#invitation_street' },\n { selector: '#invitation_number' },\n { selector: '#invitation_complement' },\n { selector: '#invitation_neighborhood' },\n { selector: '#invitation_city' },\n { selector: '#invitation_state' }\n ], 'address-complete', [', ', ', ', ', ', '. ', ' - '])\n\n Binder.custom([\n { selector: '#invitation_street' },\n { selector: '#invitation_number' },\n { selector: '#invitation_complement' },\n { selector: '#invitation_neighborhood' }\n ], 'address-building-dash-neighborhood', [', ', ' - ', ', '])\n\n Binder.custom([\n { selector: '#invitation_city' },\n { selector: '#invitation_state' },\n { selector: '#invitation_zipcode' }\n\n ], 'address-city-state-with-zipcode', [' - ', ', '])\n\n Binder.custom([\n { selector: '#invitation_street' },\n { selector: '#invitation_number' },\n { selector: '#invitation_complement' },\n { selector: '#invitation_neighborhood' },\n { selector: '#invitation_city' }\n ], 'address-without-state', [', ', ', ', ', ', '. '])\n\n Binder.custom([\n { selector: '#invitation_street' },\n { selector: '#invitation_number' },\n { selector: '#invitation_city' }\n ], 'address-street-and-city-break-line', [', ', '<br>'])\n\n Binder.custom([\n { selector: '#invitation_secondary_street' },\n { selector: '#invitation_secondary_number' },\n { selector: '#invitation_secondary_complement' },\n { selector: '#invitation_secondary_neighborhood' },\n { selector: '#invitation_secondary_city' },\n { selector: '#invitation_state' }\n ], 'secondary-address-complete', [', ', ', ', ', ', '. ', ' - '])\n\n Binder.custom([\n { selector: '#invitation_location', callback: Formatter.ceremony_prefix },\n { selector: '#invitation_street' },\n { selector: '#invitation_number' },\n { selector: '#invitation_complement' },\n { selector: '#invitation_neighborhood' },\n { selector: '#invitation_city' },\n { selector: '#invitation_state' }\n ], 'event-ceremony-address', ['. ', ', ', ', ', ', ', '. ', ' - '])\n\n Binder.custom([\n { selector: '#invitation_location' },\n { selector: '#invitation_street' },\n { selector: '#invitation_number' },\n { selector: '#invitation_complement' },\n { selector: '#invitation_neighborhood' },\n { selector: '#invitation_city' },\n { selector: '#invitation_state' }\n ], 'event-ceremony-address-without-title', ['. ', ', ', ', ', ', ', '. ', ' - '])\n\n Binder.custom([\n { selector: '#invitation_secondary_location', callback: Formatter.reception_prefix },\n { selector: '#invitation_secondary_street' },\n { selector: '#invitation_secondary_number' },\n { selector: '#invitation_secondary_complement' },\n { selector: '#invitation_secondary_neighborhood' },\n { selector: '#invitation_secondary_city' },\n { selector: '#invitation_state' }\n ], 'event-reception-address', ['. ', ', ', ', ', ', ', '. ', ' - '])\n\n Binder.custom([\n { selector: '#invitation_secondary_street' },\n { selector: '#invitation_secondary_number' },\n { selector: '#invitation_secondary_complement' },\n { selector: '#invitation_secondary_neighborhood' }\n ], 'secondary-address-building-dash-neighborhood', [', ', ' - ', ', '])\n\n Binder.custom([\n { selector: '#invitation_secondary_city' },\n { selector: '#invitation_secondary_state' },\n { selector: '#invitation_secondary_zipcode' }\n\n ], 'secondary-address-city-state-with-zipcode', [' - ', ', '])\n\n Binder.custom([\n { selector: '#invitation_person_name', callback: Formatter.first_letter },\n { selector: '#invitation_secondary_person_name', callback: Formatter.first_letter }\n ], 'couple-name-initials-with-ampersand', ' & ')\n\n Binder.custom([\n { selector: '#invitation_person_name', callback: Formatter.first_letter },\n { selector: '#invitation_secondary_person_name', callback: Formatter.first_letter }\n ], 'couple-name-initials', '')\n\n Binder.custom([\n { selector: '#invitation_rsvp_closes_on', callback: Formatter.rsvp_with_prefix },\n { selector: '#invitation_public_url' }\n ], 'event-rsvp-date-and-url', ' ')\n\n Binder.custom([\n { selector: '#invitation_scheduled_on', callback: Formatter.date_dot_default },\n { selector: 'invitation_city' }\n ], 'event-date-period-city', ' | ')\n\n Binder.placeholder('#invitation_rsvp_closes_on', '#invitation_public_url', 'event-rsvp')\n Binder.placeholder('#invitation_rsvp_closes_on', '#invitation_public_url', 'event-rsvp-date')\n Binder.placeholder('#invitation_rsvp_closes_on', '#invitation_public_url', 'event-rsvp-full')\n Binder.placeholder('#invitation_rsvp_closes_on', '#invitation_public_url', 'event-rsvp-date-and-url')\n }\n}\n\nexport default Invitations\n", "/*!\n * Cropper.js v1.6.2\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2024-04-21T07:43:05.335Z\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Cropper = factory());\n})(this, (function () { 'use strict';\n\n function ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n }\n function _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n }\n function _toPrimitive(t, r) {\n if (\"object\" != typeof t || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != typeof i) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n }\n function _toPropertyKey(t) {\n var i = _toPrimitive(t, \"string\");\n return \"symbol\" == typeof i ? i : i + \"\";\n }\n function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n }\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\n }\n }\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n }\n function _defineProperty(obj, key, value) {\n key = _toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n }\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n }\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n }\n function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n }\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n }\n function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n var WINDOW = IS_BROWSER ? window : {};\n var IS_TOUCH_DEVICE = IS_BROWSER && WINDOW.document.documentElement ? 'ontouchstart' in WINDOW.document.documentElement : false;\n var HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;\n var NAMESPACE = 'cropper';\n\n // Actions\n var ACTION_ALL = 'all';\n var ACTION_CROP = 'crop';\n var ACTION_MOVE = 'move';\n var ACTION_ZOOM = 'zoom';\n var ACTION_EAST = 'e';\n var ACTION_WEST = 'w';\n var ACTION_SOUTH = 's';\n var ACTION_NORTH = 'n';\n var ACTION_NORTH_EAST = 'ne';\n var ACTION_NORTH_WEST = 'nw';\n var ACTION_SOUTH_EAST = 'se';\n var ACTION_SOUTH_WEST = 'sw';\n\n // Classes\n var CLASS_CROP = \"\".concat(NAMESPACE, \"-crop\");\n var CLASS_DISABLED = \"\".concat(NAMESPACE, \"-disabled\");\n var CLASS_HIDDEN = \"\".concat(NAMESPACE, \"-hidden\");\n var CLASS_HIDE = \"\".concat(NAMESPACE, \"-hide\");\n var CLASS_INVISIBLE = \"\".concat(NAMESPACE, \"-invisible\");\n var CLASS_MODAL = \"\".concat(NAMESPACE, \"-modal\");\n var CLASS_MOVE = \"\".concat(NAMESPACE, \"-move\");\n\n // Data keys\n var DATA_ACTION = \"\".concat(NAMESPACE, \"Action\");\n var DATA_PREVIEW = \"\".concat(NAMESPACE, \"Preview\");\n\n // Drag modes\n var DRAG_MODE_CROP = 'crop';\n var DRAG_MODE_MOVE = 'move';\n var DRAG_MODE_NONE = 'none';\n\n // Events\n var EVENT_CROP = 'crop';\n var EVENT_CROP_END = 'cropend';\n var EVENT_CROP_MOVE = 'cropmove';\n var EVENT_CROP_START = 'cropstart';\n var EVENT_DBLCLICK = 'dblclick';\n var EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\n var EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\n var EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\n var EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;\n var EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;\n var EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;\n var EVENT_READY = 'ready';\n var EVENT_RESIZE = 'resize';\n var EVENT_WHEEL = 'wheel';\n var EVENT_ZOOM = 'zoom';\n\n // Mime types\n var MIME_TYPE_JPEG = 'image/jpeg';\n\n // RegExps\n var REGEXP_ACTIONS = /^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/;\n var REGEXP_DATA_URL = /^data:/;\n var REGEXP_DATA_URL_JPEG = /^data:image\\/jpeg;base64,/;\n var REGEXP_TAG_NAME = /^img|canvas$/i;\n\n // Misc\n // Inspired by the default width and height of a canvas element.\n var MIN_CONTAINER_WIDTH = 200;\n var MIN_CONTAINER_HEIGHT = 100;\n\n var DEFAULTS = {\n // Define the view mode of the cropper\n viewMode: 0,\n // 0, 1, 2, 3\n\n // Define the dragging mode of the cropper\n dragMode: DRAG_MODE_CROP,\n // 'crop', 'move' or 'none'\n\n // Define the initial aspect ratio of the crop box\n initialAspectRatio: NaN,\n // Define the aspect ratio of the crop box\n aspectRatio: NaN,\n // An object with the previous cropping result data\n data: null,\n // A selector for adding extra containers to preview\n preview: '',\n // Re-render the cropper when resize the window\n responsive: true,\n // Restore the cropped area after resize the window\n restore: true,\n // Check if the current image is a cross-origin image\n checkCrossOrigin: true,\n // Check the current image's Exif Orientation information\n checkOrientation: true,\n // Show the black modal\n modal: true,\n // Show the dashed lines for guiding\n guides: true,\n // Show the center indicator for guiding\n center: true,\n // Show the white modal to highlight the crop box\n highlight: true,\n // Show the grid background\n background: true,\n // Enable to crop the image automatically when initialize\n autoCrop: true,\n // Define the percentage of automatic cropping area when initializes\n autoCropArea: 0.8,\n // Enable to move the image\n movable: true,\n // Enable to rotate the image\n rotatable: true,\n // Enable to scale the image\n scalable: true,\n // Enable to zoom the image\n zoomable: true,\n // Enable to zoom the image by dragging touch\n zoomOnTouch: true,\n // Enable to zoom the image by wheeling mouse\n zoomOnWheel: true,\n // Define zoom ratio when zoom the image by wheeling mouse\n wheelZoomRatio: 0.1,\n // Enable to move the crop box\n cropBoxMovable: true,\n // Enable to resize the crop box\n cropBoxResizable: true,\n // Toggle drag mode between \"crop\" and \"move\" when click twice on the cropper\n toggleDragModeOnDblclick: true,\n // Size limitation\n minCanvasWidth: 0,\n minCanvasHeight: 0,\n minCropBoxWidth: 0,\n minCropBoxHeight: 0,\n minContainerWidth: MIN_CONTAINER_WIDTH,\n minContainerHeight: MIN_CONTAINER_HEIGHT,\n // Shortcuts of events\n ready: null,\n cropstart: null,\n cropmove: null,\n cropend: null,\n crop: null,\n zoom: null\n };\n\n var TEMPLATE = '<div class=\"cropper-container\" touch-action=\"none\">' + '<div class=\"cropper-wrap-box\">' + '<div class=\"cropper-canvas\"></div>' + '</div>' + '<div class=\"cropper-drag-box\"></div>' + '<div class=\"cropper-crop-box\">' + '<span class=\"cropper-view-box\"></span>' + '<span class=\"cropper-dashed dashed-h\"></span>' + '<span class=\"cropper-dashed dashed-v\"></span>' + '<span class=\"cropper-center\"></span>' + '<span class=\"cropper-face\"></span>' + '<span class=\"cropper-line line-e\" data-cropper-action=\"e\"></span>' + '<span class=\"cropper-line line-n\" data-cropper-action=\"n\"></span>' + '<span class=\"cropper-line line-w\" data-cropper-action=\"w\"></span>' + '<span class=\"cropper-line line-s\" data-cropper-action=\"s\"></span>' + '<span class=\"cropper-point point-e\" data-cropper-action=\"e\"></span>' + '<span class=\"cropper-point point-n\" data-cropper-action=\"n\"></span>' + '<span class=\"cropper-point point-w\" data-cropper-action=\"w\"></span>' + '<span class=\"cropper-point point-s\" data-cropper-action=\"s\"></span>' + '<span class=\"cropper-point point-ne\" data-cropper-action=\"ne\"></span>' + '<span class=\"cropper-point point-nw\" data-cropper-action=\"nw\"></span>' + '<span class=\"cropper-point point-sw\" data-cropper-action=\"sw\"></span>' + '<span class=\"cropper-point point-se\" data-cropper-action=\"se\"></span>' + '</div>' + '</div>';\n\n /**\n * Check if the given value is not a number.\n */\n var isNaN = Number.isNaN || WINDOW.isNaN;\n\n /**\n * Check if the given value is a number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a number, else `false`.\n */\n function isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n }\n\n /**\n * Check if the given value is a positive number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a positive number, else `false`.\n */\n var isPositiveNumber = function isPositiveNumber(value) {\n return value > 0 && value < Infinity;\n };\n\n /**\n * Check if the given value is undefined.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is undefined, else `false`.\n */\n function isUndefined(value) {\n return typeof value === 'undefined';\n }\n\n /**\n * Check if the given value is an object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is an object, else `false`.\n */\n function isObject(value) {\n return _typeof(value) === 'object' && value !== null;\n }\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n\n /**\n * Check if the given value is a plain object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a plain object, else `false`.\n */\n function isPlainObject(value) {\n if (!isObject(value)) {\n return false;\n }\n try {\n var _constructor = value.constructor;\n var prototype = _constructor.prototype;\n return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf');\n } catch (error) {\n return false;\n }\n }\n\n /**\n * Check if the given value is a function.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a function, else `false`.\n */\n function isFunction(value) {\n return typeof value === 'function';\n }\n var slice = Array.prototype.slice;\n\n /**\n * Convert array-like or iterable object to an array.\n * @param {*} value - The value to convert.\n * @returns {Array} Returns a new array.\n */\n function toArray(value) {\n return Array.from ? Array.from(value) : slice.call(value);\n }\n\n /**\n * Iterate the given data.\n * @param {*} data - The data to iterate.\n * @param {Function} callback - The process function for each element.\n * @returns {*} The original data.\n */\n function forEach(data, callback) {\n if (data && isFunction(callback)) {\n if (Array.isArray(data) || isNumber(data.length) /* array-like */) {\n toArray(data).forEach(function (value, key) {\n callback.call(data, value, key, data);\n });\n } else if (isObject(data)) {\n Object.keys(data).forEach(function (key) {\n callback.call(data, data[key], key, data);\n });\n }\n }\n return data;\n }\n\n /**\n * Extend the given object.\n * @param {*} target - The target object to extend.\n * @param {*} args - The rest objects for merging to the target object.\n * @returns {Object} The extended object.\n */\n var assign = Object.assign || function assign(target) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n if (isObject(target) && args.length > 0) {\n args.forEach(function (arg) {\n if (isObject(arg)) {\n Object.keys(arg).forEach(function (key) {\n target[key] = arg[key];\n });\n }\n });\n }\n return target;\n };\n var REGEXP_DECIMALS = /\\.\\d*(?:0|9){12}\\d*$/;\n\n /**\n * Normalize decimal number.\n * Check out {@link https://0.30000000000000004.com/}\n * @param {number} value - The value to normalize.\n * @param {number} [times=100000000000] - The times for normalizing.\n * @returns {number} Returns the normalized number.\n */\n function normalizeDecimalNumber(value) {\n var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000;\n return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value;\n }\n var REGEXP_SUFFIX = /^width|height|left|top|marginLeft|marginTop$/;\n\n /**\n * Apply styles to the given element.\n * @param {Element} element - The target element.\n * @param {Object} styles - The styles for applying.\n */\n function setStyle(element, styles) {\n var style = element.style;\n forEach(styles, function (value, property) {\n if (REGEXP_SUFFIX.test(property) && isNumber(value)) {\n value = \"\".concat(value, \"px\");\n }\n style[property] = value;\n });\n }\n\n /**\n * Check if the given element has a special class.\n * @param {Element} element - The element to check.\n * @param {string} value - The class to search.\n * @returns {boolean} Returns `true` if the special class was found.\n */\n function hasClass(element, value) {\n return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1;\n }\n\n /**\n * Add classes to the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be added.\n */\n function addClass(element, value) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n addClass(elem, value);\n });\n return;\n }\n if (element.classList) {\n element.classList.add(value);\n return;\n }\n var className = element.className.trim();\n if (!className) {\n element.className = value;\n } else if (className.indexOf(value) < 0) {\n element.className = \"\".concat(className, \" \").concat(value);\n }\n }\n\n /**\n * Remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be removed.\n */\n function removeClass(element, value) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n removeClass(elem, value);\n });\n return;\n }\n if (element.classList) {\n element.classList.remove(value);\n return;\n }\n if (element.className.indexOf(value) >= 0) {\n element.className = element.className.replace(value, '');\n }\n }\n\n /**\n * Add or remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be toggled.\n * @param {boolean} added - Add only.\n */\n function toggleClass(element, value, added) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n toggleClass(elem, value, added);\n });\n return;\n }\n\n // IE10-11 doesn't support the second parameter of `classList.toggle`\n if (added) {\n addClass(element, value);\n } else {\n removeClass(element, value);\n }\n }\n var REGEXP_CAMEL_CASE = /([a-z\\d])([A-Z])/g;\n\n /**\n * Transform the given string from camelCase to kebab-case\n * @param {string} value - The value to transform.\n * @returns {string} The transformed value.\n */\n function toParamCase(value) {\n return value.replace(REGEXP_CAMEL_CASE, '$1-$2').toLowerCase();\n }\n\n /**\n * Get data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to get.\n * @returns {string} The data value.\n */\n function getData(element, name) {\n if (isObject(element[name])) {\n return element[name];\n }\n if (element.dataset) {\n return element.dataset[name];\n }\n return element.getAttribute(\"data-\".concat(toParamCase(name)));\n }\n\n /**\n * Set data to the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to set.\n * @param {string} data - The data value.\n */\n function setData(element, name, data) {\n if (isObject(data)) {\n element[name] = data;\n } else if (element.dataset) {\n element.dataset[name] = data;\n } else {\n element.setAttribute(\"data-\".concat(toParamCase(name)), data);\n }\n }\n\n /**\n * Remove data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to remove.\n */\n function removeData(element, name) {\n if (isObject(element[name])) {\n try {\n delete element[name];\n } catch (error) {\n element[name] = undefined;\n }\n } else if (element.dataset) {\n // #128 Safari not allows to delete dataset property\n try {\n delete element.dataset[name];\n } catch (error) {\n element.dataset[name] = undefined;\n }\n } else {\n element.removeAttribute(\"data-\".concat(toParamCase(name)));\n }\n }\n var REGEXP_SPACES = /\\s\\s*/;\n var onceSupported = function () {\n var supported = false;\n if (IS_BROWSER) {\n var once = false;\n var listener = function listener() {};\n var options = Object.defineProperty({}, 'once', {\n get: function get() {\n supported = true;\n return once;\n },\n /**\n * This setter can fix a `TypeError` in strict mode\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only}\n * @param {boolean} value - The value to set\n */\n set: function set(value) {\n once = value;\n }\n });\n WINDOW.addEventListener('test', listener, options);\n WINDOW.removeEventListener('test', listener, options);\n }\n return supported;\n }();\n\n /**\n * Remove event listener from the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\n function removeListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (!onceSupported) {\n var listeners = element.listeners;\n if (listeners && listeners[event] && listeners[event][listener]) {\n handler = listeners[event][listener];\n delete listeners[event][listener];\n if (Object.keys(listeners[event]).length === 0) {\n delete listeners[event];\n }\n if (Object.keys(listeners).length === 0) {\n delete element.listeners;\n }\n }\n }\n element.removeEventListener(event, handler, options);\n });\n }\n\n /**\n * Add event listener to the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\n function addListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var _handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (options.once && !onceSupported) {\n var _element$listeners = element.listeners,\n listeners = _element$listeners === void 0 ? {} : _element$listeners;\n _handler = function handler() {\n delete listeners[event][listener];\n element.removeEventListener(event, _handler, options);\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n listener.apply(element, args);\n };\n if (!listeners[event]) {\n listeners[event] = {};\n }\n if (listeners[event][listener]) {\n element.removeEventListener(event, listeners[event][listener], options);\n }\n listeners[event][listener] = _handler;\n element.listeners = listeners;\n }\n element.addEventListener(event, _handler, options);\n });\n }\n\n /**\n * Dispatch event on the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Object} data - The additional event data.\n * @returns {boolean} Indicate if the event is default prevented or not.\n */\n function dispatchEvent(element, type, data) {\n var event;\n\n // Event and CustomEvent on IE9-11 are global objects, not constructors\n if (isFunction(Event) && isFunction(CustomEvent)) {\n event = new CustomEvent(type, {\n detail: data,\n bubbles: true,\n cancelable: true\n });\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(type, true, true, data);\n }\n return element.dispatchEvent(event);\n }\n\n /**\n * Get the offset base on the document.\n * @param {Element} element - The target element.\n * @returns {Object} The offset data.\n */\n function getOffset(element) {\n var box = element.getBoundingClientRect();\n return {\n left: box.left + (window.pageXOffset - document.documentElement.clientLeft),\n top: box.top + (window.pageYOffset - document.documentElement.clientTop)\n };\n }\n var location = WINDOW.location;\n var REGEXP_ORIGINS = /^(\\w+:)\\/\\/([^:/?#]*):?(\\d*)/i;\n\n /**\n * Check if the given URL is a cross origin URL.\n * @param {string} url - The target URL.\n * @returns {boolean} Returns `true` if the given URL is a cross origin URL, else `false`.\n */\n function isCrossOriginURL(url) {\n var parts = url.match(REGEXP_ORIGINS);\n return parts !== null && (parts[1] !== location.protocol || parts[2] !== location.hostname || parts[3] !== location.port);\n }\n\n /**\n * Add timestamp to the given URL.\n * @param {string} url - The target URL.\n * @returns {string} The result URL.\n */\n function addTimestamp(url) {\n var timestamp = \"timestamp=\".concat(new Date().getTime());\n return url + (url.indexOf('?') === -1 ? '?' : '&') + timestamp;\n }\n\n /**\n * Get transforms base on the given object.\n * @param {Object} obj - The target object.\n * @returns {string} A string contains transform values.\n */\n function getTransforms(_ref) {\n var rotate = _ref.rotate,\n scaleX = _ref.scaleX,\n scaleY = _ref.scaleY,\n translateX = _ref.translateX,\n translateY = _ref.translateY;\n var values = [];\n if (isNumber(translateX) && translateX !== 0) {\n values.push(\"translateX(\".concat(translateX, \"px)\"));\n }\n if (isNumber(translateY) && translateY !== 0) {\n values.push(\"translateY(\".concat(translateY, \"px)\"));\n }\n\n // Rotate should come first before scale to match orientation transform\n if (isNumber(rotate) && rotate !== 0) {\n values.push(\"rotate(\".concat(rotate, \"deg)\"));\n }\n if (isNumber(scaleX) && scaleX !== 1) {\n values.push(\"scaleX(\".concat(scaleX, \")\"));\n }\n if (isNumber(scaleY) && scaleY !== 1) {\n values.push(\"scaleY(\".concat(scaleY, \")\"));\n }\n var transform = values.length ? values.join(' ') : 'none';\n return {\n WebkitTransform: transform,\n msTransform: transform,\n transform: transform\n };\n }\n\n /**\n * Get the max ratio of a group of pointers.\n * @param {string} pointers - The target pointers.\n * @returns {number} The result ratio.\n */\n function getMaxZoomRatio(pointers) {\n var pointers2 = _objectSpread2({}, pointers);\n var maxRatio = 0;\n forEach(pointers, function (pointer, pointerId) {\n delete pointers2[pointerId];\n forEach(pointers2, function (pointer2) {\n var x1 = Math.abs(pointer.startX - pointer2.startX);\n var y1 = Math.abs(pointer.startY - pointer2.startY);\n var x2 = Math.abs(pointer.endX - pointer2.endX);\n var y2 = Math.abs(pointer.endY - pointer2.endY);\n var z1 = Math.sqrt(x1 * x1 + y1 * y1);\n var z2 = Math.sqrt(x2 * x2 + y2 * y2);\n var ratio = (z2 - z1) / z1;\n if (Math.abs(ratio) > Math.abs(maxRatio)) {\n maxRatio = ratio;\n }\n });\n });\n return maxRatio;\n }\n\n /**\n * Get a pointer from an event object.\n * @param {Object} event - The target event object.\n * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not.\n * @returns {Object} The result pointer contains start and/or end point coordinates.\n */\n function getPointer(_ref2, endOnly) {\n var pageX = _ref2.pageX,\n pageY = _ref2.pageY;\n var end = {\n endX: pageX,\n endY: pageY\n };\n return endOnly ? end : _objectSpread2({\n startX: pageX,\n startY: pageY\n }, end);\n }\n\n /**\n * Get the center point coordinate of a group of pointers.\n * @param {Object} pointers - The target pointers.\n * @returns {Object} The center point coordinate.\n */\n function getPointersCenter(pointers) {\n var pageX = 0;\n var pageY = 0;\n var count = 0;\n forEach(pointers, function (_ref3) {\n var startX = _ref3.startX,\n startY = _ref3.startY;\n pageX += startX;\n pageY += startY;\n count += 1;\n });\n pageX /= count;\n pageY /= count;\n return {\n pageX: pageX,\n pageY: pageY\n };\n }\n\n /**\n * Get the max sizes in a rectangle under the given aspect ratio.\n * @param {Object} data - The original sizes.\n * @param {string} [type='contain'] - The adjust type.\n * @returns {Object} The result sizes.\n */\n function getAdjustedSizes(_ref4) {\n var aspectRatio = _ref4.aspectRatio,\n height = _ref4.height,\n width = _ref4.width;\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'contain';\n var isValidWidth = isPositiveNumber(width);\n var isValidHeight = isPositiveNumber(height);\n if (isValidWidth && isValidHeight) {\n var adjustedWidth = height * aspectRatio;\n if (type === 'contain' && adjustedWidth > width || type === 'cover' && adjustedWidth < width) {\n height = width / aspectRatio;\n } else {\n width = height * aspectRatio;\n }\n } else if (isValidWidth) {\n height = width / aspectRatio;\n } else if (isValidHeight) {\n width = height * aspectRatio;\n }\n return {\n width: width,\n height: height\n };\n }\n\n /**\n * Get the new sizes of a rectangle after rotated.\n * @param {Object} data - The original sizes.\n * @returns {Object} The result sizes.\n */\n function getRotatedSizes(_ref5) {\n var width = _ref5.width,\n height = _ref5.height,\n degree = _ref5.degree;\n degree = Math.abs(degree) % 180;\n if (degree === 90) {\n return {\n width: height,\n height: width\n };\n }\n var arc = degree % 90 * Math.PI / 180;\n var sinArc = Math.sin(arc);\n var cosArc = Math.cos(arc);\n var newWidth = width * cosArc + height * sinArc;\n var newHeight = width * sinArc + height * cosArc;\n return degree > 90 ? {\n width: newHeight,\n height: newWidth\n } : {\n width: newWidth,\n height: newHeight\n };\n }\n\n /**\n * Get a canvas which drew the given image.\n * @param {HTMLImageElement} image - The image for drawing.\n * @param {Object} imageData - The image data.\n * @param {Object} canvasData - The canvas data.\n * @param {Object} options - The options.\n * @returns {HTMLCanvasElement} The result canvas.\n */\n function getSourceCanvas(image, _ref6, _ref7, _ref8) {\n var imageAspectRatio = _ref6.aspectRatio,\n imageNaturalWidth = _ref6.naturalWidth,\n imageNaturalHeight = _ref6.naturalHeight,\n _ref6$rotate = _ref6.rotate,\n rotate = _ref6$rotate === void 0 ? 0 : _ref6$rotate,\n _ref6$scaleX = _ref6.scaleX,\n scaleX = _ref6$scaleX === void 0 ? 1 : _ref6$scaleX,\n _ref6$scaleY = _ref6.scaleY,\n scaleY = _ref6$scaleY === void 0 ? 1 : _ref6$scaleY;\n var aspectRatio = _ref7.aspectRatio,\n naturalWidth = _ref7.naturalWidth,\n naturalHeight = _ref7.naturalHeight;\n var _ref8$fillColor = _ref8.fillColor,\n fillColor = _ref8$fillColor === void 0 ? 'transparent' : _ref8$fillColor,\n _ref8$imageSmoothingE = _ref8.imageSmoothingEnabled,\n imageSmoothingEnabled = _ref8$imageSmoothingE === void 0 ? true : _ref8$imageSmoothingE,\n _ref8$imageSmoothingQ = _ref8.imageSmoothingQuality,\n imageSmoothingQuality = _ref8$imageSmoothingQ === void 0 ? 'low' : _ref8$imageSmoothingQ,\n _ref8$maxWidth = _ref8.maxWidth,\n maxWidth = _ref8$maxWidth === void 0 ? Infinity : _ref8$maxWidth,\n _ref8$maxHeight = _ref8.maxHeight,\n maxHeight = _ref8$maxHeight === void 0 ? Infinity : _ref8$maxHeight,\n _ref8$minWidth = _ref8.minWidth,\n minWidth = _ref8$minWidth === void 0 ? 0 : _ref8$minWidth,\n _ref8$minHeight = _ref8.minHeight,\n minHeight = _ref8$minHeight === void 0 ? 0 : _ref8$minHeight;\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var width = Math.min(maxSizes.width, Math.max(minSizes.width, naturalWidth));\n var height = Math.min(maxSizes.height, Math.max(minSizes.height, naturalHeight));\n\n // Note: should always use image's natural sizes for drawing as\n // imageData.naturalWidth === canvasData.naturalHeight when rotate % 180 === 90\n var destMaxSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var destMinSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var destWidth = Math.min(destMaxSizes.width, Math.max(destMinSizes.width, imageNaturalWidth));\n var destHeight = Math.min(destMaxSizes.height, Math.max(destMinSizes.height, imageNaturalHeight));\n var params = [-destWidth / 2, -destHeight / 2, destWidth, destHeight];\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = fillColor;\n context.fillRect(0, 0, width, height);\n context.save();\n context.translate(width / 2, height / 2);\n context.rotate(rotate * Math.PI / 180);\n context.scale(scaleX, scaleY);\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n context.imageSmoothingQuality = imageSmoothingQuality;\n context.drawImage.apply(context, [image].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n context.restore();\n return canvas;\n }\n var fromCharCode = String.fromCharCode;\n\n /**\n * Get string from char code in data view.\n * @param {DataView} dataView - The data view for read.\n * @param {number} start - The start index.\n * @param {number} length - The read length.\n * @returns {string} The read result.\n */\n function getStringFromCharCode(dataView, start, length) {\n var str = '';\n length += start;\n for (var i = start; i < length; i += 1) {\n str += fromCharCode(dataView.getUint8(i));\n }\n return str;\n }\n var REGEXP_DATA_URL_HEAD = /^data:.*,/;\n\n /**\n * Transform Data URL to array buffer.\n * @param {string} dataURL - The Data URL to transform.\n * @returns {ArrayBuffer} The result array buffer.\n */\n function dataURLToArrayBuffer(dataURL) {\n var base64 = dataURL.replace(REGEXP_DATA_URL_HEAD, '');\n var binary = atob(base64);\n var arrayBuffer = new ArrayBuffer(binary.length);\n var uint8 = new Uint8Array(arrayBuffer);\n forEach(uint8, function (value, i) {\n uint8[i] = binary.charCodeAt(i);\n });\n return arrayBuffer;\n }\n\n /**\n * Transform array buffer to Data URL.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.\n * @param {string} mimeType - The mime type of the Data URL.\n * @returns {string} The result Data URL.\n */\n function arrayBufferToDataURL(arrayBuffer, mimeType) {\n var chunks = [];\n\n // Chunk Typed Array for better performance (#435)\n var chunkSize = 8192;\n var uint8 = new Uint8Array(arrayBuffer);\n while (uint8.length > 0) {\n // XXX: Babel's `toConsumableArray` helper will throw error in IE or Safari 9\n // eslint-disable-next-line prefer-spread\n chunks.push(fromCharCode.apply(null, toArray(uint8.subarray(0, chunkSize))));\n uint8 = uint8.subarray(chunkSize);\n }\n return \"data:\".concat(mimeType, \";base64,\").concat(btoa(chunks.join('')));\n }\n\n /**\n * Get orientation value from given array buffer.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to read.\n * @returns {number} The read orientation value.\n */\n function resetAndGetOrientation(arrayBuffer) {\n var dataView = new DataView(arrayBuffer);\n var orientation;\n\n // Ignores range error when the image does not have correct Exif information\n try {\n var littleEndian;\n var app1Start;\n var ifdStart;\n\n // Only handle JPEG image (start by 0xFFD8)\n if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) {\n var length = dataView.byteLength;\n var offset = 2;\n while (offset + 1 < length) {\n if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) {\n app1Start = offset;\n break;\n }\n offset += 1;\n }\n }\n if (app1Start) {\n var exifIDCode = app1Start + 4;\n var tiffOffset = app1Start + 10;\n if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') {\n var endianness = dataView.getUint16(tiffOffset);\n littleEndian = endianness === 0x4949;\n if (littleEndian || endianness === 0x4D4D /* bigEndian */) {\n if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) {\n var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian);\n if (firstIFDOffset >= 0x00000008) {\n ifdStart = tiffOffset + firstIFDOffset;\n }\n }\n }\n }\n }\n if (ifdStart) {\n var _length = dataView.getUint16(ifdStart, littleEndian);\n var _offset;\n var i;\n for (i = 0; i < _length; i += 1) {\n _offset = ifdStart + i * 12 + 2;\n if (dataView.getUint16(_offset, littleEndian) === 0x0112 /* Orientation */) {\n // 8 is the offset of the current tag's value\n _offset += 8;\n\n // Get the original orientation value\n orientation = dataView.getUint16(_offset, littleEndian);\n\n // Override the orientation with its default value\n dataView.setUint16(_offset, 1, littleEndian);\n break;\n }\n }\n }\n } catch (error) {\n orientation = 1;\n }\n return orientation;\n }\n\n /**\n * Parse Exif Orientation value.\n * @param {number} orientation - The orientation to parse.\n * @returns {Object} The parsed result.\n */\n function parseOrientation(orientation) {\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n switch (orientation) {\n // Flip horizontal\n case 2:\n scaleX = -1;\n break;\n\n // Rotate left 180\u00B0\n case 3:\n rotate = -180;\n break;\n\n // Flip vertical\n case 4:\n scaleY = -1;\n break;\n\n // Flip vertical and rotate right 90\u00B0\n case 5:\n rotate = 90;\n scaleY = -1;\n break;\n\n // Rotate right 90\u00B0\n case 6:\n rotate = 90;\n break;\n\n // Flip horizontal and rotate right 90\u00B0\n case 7:\n rotate = 90;\n scaleX = -1;\n break;\n\n // Rotate left 90\u00B0\n case 8:\n rotate = -90;\n break;\n }\n return {\n rotate: rotate,\n scaleX: scaleX,\n scaleY: scaleY\n };\n }\n\n var render = {\n render: function render() {\n this.initContainer();\n this.initCanvas();\n this.initCropBox();\n this.renderCanvas();\n if (this.cropped) {\n this.renderCropBox();\n }\n },\n initContainer: function initContainer() {\n var element = this.element,\n options = this.options,\n container = this.container,\n cropper = this.cropper;\n var minWidth = Number(options.minContainerWidth);\n var minHeight = Number(options.minContainerHeight);\n addClass(cropper, CLASS_HIDDEN);\n removeClass(element, CLASS_HIDDEN);\n var containerData = {\n width: Math.max(container.offsetWidth, minWidth >= 0 ? minWidth : MIN_CONTAINER_WIDTH),\n height: Math.max(container.offsetHeight, minHeight >= 0 ? minHeight : MIN_CONTAINER_HEIGHT)\n };\n this.containerData = containerData;\n setStyle(cropper, {\n width: containerData.width,\n height: containerData.height\n });\n addClass(element, CLASS_HIDDEN);\n removeClass(cropper, CLASS_HIDDEN);\n },\n // Canvas (image wrapper)\n initCanvas: function initCanvas() {\n var containerData = this.containerData,\n imageData = this.imageData;\n var viewMode = this.options.viewMode;\n var rotated = Math.abs(imageData.rotate) % 180 === 90;\n var naturalWidth = rotated ? imageData.naturalHeight : imageData.naturalWidth;\n var naturalHeight = rotated ? imageData.naturalWidth : imageData.naturalHeight;\n var aspectRatio = naturalWidth / naturalHeight;\n var canvasWidth = containerData.width;\n var canvasHeight = containerData.height;\n if (containerData.height * aspectRatio > containerData.width) {\n if (viewMode === 3) {\n canvasWidth = containerData.height * aspectRatio;\n } else {\n canvasHeight = containerData.width / aspectRatio;\n }\n } else if (viewMode === 3) {\n canvasHeight = containerData.width / aspectRatio;\n } else {\n canvasWidth = containerData.height * aspectRatio;\n }\n var canvasData = {\n aspectRatio: aspectRatio,\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n width: canvasWidth,\n height: canvasHeight\n };\n this.canvasData = canvasData;\n this.limited = viewMode === 1 || viewMode === 2;\n this.limitCanvas(true, true);\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n canvasData.left = (containerData.width - canvasData.width) / 2;\n canvasData.top = (containerData.height - canvasData.height) / 2;\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n this.initialCanvasData = assign({}, canvasData);\n },\n limitCanvas: function limitCanvas(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var viewMode = options.viewMode;\n var aspectRatio = canvasData.aspectRatio;\n var cropped = this.cropped && cropBoxData;\n if (sizeLimited) {\n var minCanvasWidth = Number(options.minCanvasWidth) || 0;\n var minCanvasHeight = Number(options.minCanvasHeight) || 0;\n if (viewMode > 1) {\n minCanvasWidth = Math.max(minCanvasWidth, containerData.width);\n minCanvasHeight = Math.max(minCanvasHeight, containerData.height);\n if (viewMode === 3) {\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n } else if (viewMode > 0) {\n if (minCanvasWidth) {\n minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBoxData.width : 0);\n } else if (minCanvasHeight) {\n minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBoxData.height : 0);\n } else if (cropped) {\n minCanvasWidth = cropBoxData.width;\n minCanvasHeight = cropBoxData.height;\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n }\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minCanvasWidth,\n height: minCanvasHeight\n });\n minCanvasWidth = _getAdjustedSizes.width;\n minCanvasHeight = _getAdjustedSizes.height;\n canvasData.minWidth = minCanvasWidth;\n canvasData.minHeight = minCanvasHeight;\n canvasData.maxWidth = Infinity;\n canvasData.maxHeight = Infinity;\n }\n if (positionLimited) {\n if (viewMode > (cropped ? 0 : 1)) {\n var newCanvasLeft = containerData.width - canvasData.width;\n var newCanvasTop = containerData.height - canvasData.height;\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n if (cropped && this.limited) {\n canvasData.minLeft = Math.min(cropBoxData.left, cropBoxData.left + (cropBoxData.width - canvasData.width));\n canvasData.minTop = Math.min(cropBoxData.top, cropBoxData.top + (cropBoxData.height - canvasData.height));\n canvasData.maxLeft = cropBoxData.left;\n canvasData.maxTop = cropBoxData.top;\n if (viewMode === 2) {\n if (canvasData.width >= containerData.width) {\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n }\n if (canvasData.height >= containerData.height) {\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n }\n }\n }\n } else {\n canvasData.minLeft = -canvasData.width;\n canvasData.minTop = -canvasData.height;\n canvasData.maxLeft = containerData.width;\n canvasData.maxTop = containerData.height;\n }\n }\n },\n renderCanvas: function renderCanvas(changed, transformed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n if (transformed) {\n var _getRotatedSizes = getRotatedSizes({\n width: imageData.naturalWidth * Math.abs(imageData.scaleX || 1),\n height: imageData.naturalHeight * Math.abs(imageData.scaleY || 1),\n degree: imageData.rotate || 0\n }),\n naturalWidth = _getRotatedSizes.width,\n naturalHeight = _getRotatedSizes.height;\n var width = canvasData.width * (naturalWidth / canvasData.naturalWidth);\n var height = canvasData.height * (naturalHeight / canvasData.naturalHeight);\n canvasData.left -= (width - canvasData.width) / 2;\n canvasData.top -= (height - canvasData.height) / 2;\n canvasData.width = width;\n canvasData.height = height;\n canvasData.aspectRatio = naturalWidth / naturalHeight;\n canvasData.naturalWidth = naturalWidth;\n canvasData.naturalHeight = naturalHeight;\n this.limitCanvas(true, false);\n }\n if (canvasData.width > canvasData.maxWidth || canvasData.width < canvasData.minWidth) {\n canvasData.left = canvasData.oldLeft;\n }\n if (canvasData.height > canvasData.maxHeight || canvasData.height < canvasData.minHeight) {\n canvasData.top = canvasData.oldTop;\n }\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n this.limitCanvas(false, true);\n canvasData.left = Math.min(Math.max(canvasData.left, canvasData.minLeft), canvasData.maxLeft);\n canvasData.top = Math.min(Math.max(canvasData.top, canvasData.minTop), canvasData.maxTop);\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n setStyle(this.canvas, assign({\n width: canvasData.width,\n height: canvasData.height\n }, getTransforms({\n translateX: canvasData.left,\n translateY: canvasData.top\n })));\n this.renderImage(changed);\n if (this.cropped && this.limited) {\n this.limitCropBox(true, true);\n }\n },\n renderImage: function renderImage(changed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n var width = imageData.naturalWidth * (canvasData.width / canvasData.naturalWidth);\n var height = imageData.naturalHeight * (canvasData.height / canvasData.naturalHeight);\n assign(imageData, {\n width: width,\n height: height,\n left: (canvasData.width - width) / 2,\n top: (canvasData.height - height) / 2\n });\n setStyle(this.image, assign({\n width: imageData.width,\n height: imageData.height\n }, getTransforms(assign({\n translateX: imageData.left,\n translateY: imageData.top\n }, imageData))));\n if (changed) {\n this.output();\n }\n },\n initCropBox: function initCropBox() {\n var options = this.options,\n canvasData = this.canvasData;\n var aspectRatio = options.aspectRatio || options.initialAspectRatio;\n var autoCropArea = Number(options.autoCropArea) || 0.8;\n var cropBoxData = {\n width: canvasData.width,\n height: canvasData.height\n };\n if (aspectRatio) {\n if (canvasData.height * aspectRatio > canvasData.width) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n this.cropBoxData = cropBoxData;\n this.limitCropBox(true, true);\n\n // Initialize auto crop area\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n\n // The width/height of auto crop area must large than \"minWidth/Height\"\n cropBoxData.width = Math.max(cropBoxData.minWidth, cropBoxData.width * autoCropArea);\n cropBoxData.height = Math.max(cropBoxData.minHeight, cropBoxData.height * autoCropArea);\n cropBoxData.left = canvasData.left + (canvasData.width - cropBoxData.width) / 2;\n cropBoxData.top = canvasData.top + (canvasData.height - cropBoxData.height) / 2;\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n this.initialCropBoxData = assign({}, cropBoxData);\n },\n limitCropBox: function limitCropBox(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData,\n limited = this.limited;\n var aspectRatio = options.aspectRatio;\n if (sizeLimited) {\n var minCropBoxWidth = Number(options.minCropBoxWidth) || 0;\n var minCropBoxHeight = Number(options.minCropBoxHeight) || 0;\n var maxCropBoxWidth = limited ? Math.min(containerData.width, canvasData.width, canvasData.width + canvasData.left, containerData.width - canvasData.left) : containerData.width;\n var maxCropBoxHeight = limited ? Math.min(containerData.height, canvasData.height, canvasData.height + canvasData.top, containerData.height - canvasData.top) : containerData.height;\n\n // The min/maxCropBoxWidth/Height must be less than container's width/height\n minCropBoxWidth = Math.min(minCropBoxWidth, containerData.width);\n minCropBoxHeight = Math.min(minCropBoxHeight, containerData.height);\n if (aspectRatio) {\n if (minCropBoxWidth && minCropBoxHeight) {\n if (minCropBoxHeight * aspectRatio > minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n } else if (minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else if (minCropBoxHeight) {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n if (maxCropBoxHeight * aspectRatio > maxCropBoxWidth) {\n maxCropBoxHeight = maxCropBoxWidth / aspectRatio;\n } else {\n maxCropBoxWidth = maxCropBoxHeight * aspectRatio;\n }\n }\n\n // The minWidth/Height must be less than maxWidth/Height\n cropBoxData.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth);\n cropBoxData.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight);\n cropBoxData.maxWidth = maxCropBoxWidth;\n cropBoxData.maxHeight = maxCropBoxHeight;\n }\n if (positionLimited) {\n if (limited) {\n cropBoxData.minLeft = Math.max(0, canvasData.left);\n cropBoxData.minTop = Math.max(0, canvasData.top);\n cropBoxData.maxLeft = Math.min(containerData.width, canvasData.left + canvasData.width) - cropBoxData.width;\n cropBoxData.maxTop = Math.min(containerData.height, canvasData.top + canvasData.height) - cropBoxData.height;\n } else {\n cropBoxData.minLeft = 0;\n cropBoxData.minTop = 0;\n cropBoxData.maxLeft = containerData.width - cropBoxData.width;\n cropBoxData.maxTop = containerData.height - cropBoxData.height;\n }\n }\n },\n renderCropBox: function renderCropBox() {\n var options = this.options,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData;\n if (cropBoxData.width > cropBoxData.maxWidth || cropBoxData.width < cropBoxData.minWidth) {\n cropBoxData.left = cropBoxData.oldLeft;\n }\n if (cropBoxData.height > cropBoxData.maxHeight || cropBoxData.height < cropBoxData.minHeight) {\n cropBoxData.top = cropBoxData.oldTop;\n }\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n this.limitCropBox(false, true);\n cropBoxData.left = Math.min(Math.max(cropBoxData.left, cropBoxData.minLeft), cropBoxData.maxLeft);\n cropBoxData.top = Math.min(Math.max(cropBoxData.top, cropBoxData.minTop), cropBoxData.maxTop);\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n if (options.movable && options.cropBoxMovable) {\n // Turn to move the canvas when the crop box is equal to the container\n setData(this.face, DATA_ACTION, cropBoxData.width >= containerData.width && cropBoxData.height >= containerData.height ? ACTION_MOVE : ACTION_ALL);\n }\n setStyle(this.cropBox, assign({\n width: cropBoxData.width,\n height: cropBoxData.height\n }, getTransforms({\n translateX: cropBoxData.left,\n translateY: cropBoxData.top\n })));\n if (this.cropped && this.limited) {\n this.limitCanvas(true, true);\n }\n if (!this.disabled) {\n this.output();\n }\n },\n output: function output() {\n this.preview();\n dispatchEvent(this.element, EVENT_CROP, this.getData());\n }\n };\n\n var preview = {\n initPreview: function initPreview() {\n var element = this.element,\n crossOrigin = this.crossOrigin;\n var preview = this.options.preview;\n var url = crossOrigin ? this.crossOriginUrl : this.url;\n var alt = element.alt || 'The image to preview';\n var image = document.createElement('img');\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n image.src = url;\n image.alt = alt;\n this.viewBox.appendChild(image);\n this.viewBoxImage = image;\n if (!preview) {\n return;\n }\n var previews = preview;\n if (typeof preview === 'string') {\n previews = element.ownerDocument.querySelectorAll(preview);\n } else if (preview.querySelector) {\n previews = [preview];\n }\n this.previews = previews;\n forEach(previews, function (el) {\n var img = document.createElement('img');\n\n // Save the original size for recover\n setData(el, DATA_PREVIEW, {\n width: el.offsetWidth,\n height: el.offsetHeight,\n html: el.innerHTML\n });\n if (crossOrigin) {\n img.crossOrigin = crossOrigin;\n }\n img.src = url;\n img.alt = alt;\n\n /**\n * Override img element styles\n * Add `display:block` to avoid margin top issue\n * Add `height:auto` to override `height` attribute on IE8\n * (Occur only when margin-top <= -height)\n */\n img.style.cssText = 'display:block;' + 'width:100%;' + 'height:auto;' + 'min-width:0!important;' + 'min-height:0!important;' + 'max-width:none!important;' + 'max-height:none!important;' + 'image-orientation:0deg!important;\"';\n el.innerHTML = '';\n el.appendChild(img);\n });\n },\n resetPreview: function resetPreview() {\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n setStyle(element, {\n width: data.width,\n height: data.height\n });\n element.innerHTML = data.html;\n removeData(element, DATA_PREVIEW);\n });\n },\n preview: function preview() {\n var imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var cropBoxWidth = cropBoxData.width,\n cropBoxHeight = cropBoxData.height;\n var width = imageData.width,\n height = imageData.height;\n var left = cropBoxData.left - canvasData.left - imageData.left;\n var top = cropBoxData.top - canvasData.top - imageData.top;\n if (!this.cropped || this.disabled) {\n return;\n }\n setStyle(this.viewBoxImage, assign({\n width: width,\n height: height\n }, getTransforms(assign({\n translateX: -left,\n translateY: -top\n }, imageData))));\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n var originalWidth = data.width;\n var originalHeight = data.height;\n var newWidth = originalWidth;\n var newHeight = originalHeight;\n var ratio = 1;\n if (cropBoxWidth) {\n ratio = originalWidth / cropBoxWidth;\n newHeight = cropBoxHeight * ratio;\n }\n if (cropBoxHeight && newHeight > originalHeight) {\n ratio = originalHeight / cropBoxHeight;\n newWidth = cropBoxWidth * ratio;\n newHeight = originalHeight;\n }\n setStyle(element, {\n width: newWidth,\n height: newHeight\n });\n setStyle(element.getElementsByTagName('img')[0], assign({\n width: width * ratio,\n height: height * ratio\n }, getTransforms(assign({\n translateX: -left * ratio,\n translateY: -top * ratio\n }, imageData))));\n });\n }\n };\n\n var events = {\n bind: function bind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n if (isFunction(options.cropstart)) {\n addListener(element, EVENT_CROP_START, options.cropstart);\n }\n if (isFunction(options.cropmove)) {\n addListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n if (isFunction(options.cropend)) {\n addListener(element, EVENT_CROP_END, options.cropend);\n }\n if (isFunction(options.crop)) {\n addListener(element, EVENT_CROP, options.crop);\n }\n if (isFunction(options.zoom)) {\n addListener(element, EVENT_ZOOM, options.zoom);\n }\n addListener(cropper, EVENT_POINTER_DOWN, this.onCropStart = this.cropStart.bind(this));\n if (options.zoomable && options.zoomOnWheel) {\n addListener(cropper, EVENT_WHEEL, this.onWheel = this.wheel.bind(this), {\n passive: false,\n capture: true\n });\n }\n if (options.toggleDragModeOnDblclick) {\n addListener(cropper, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this));\n }\n addListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove = this.cropMove.bind(this));\n addListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd = this.cropEnd.bind(this));\n if (options.responsive) {\n addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this));\n }\n },\n unbind: function unbind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n if (isFunction(options.cropstart)) {\n removeListener(element, EVENT_CROP_START, options.cropstart);\n }\n if (isFunction(options.cropmove)) {\n removeListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n if (isFunction(options.cropend)) {\n removeListener(element, EVENT_CROP_END, options.cropend);\n }\n if (isFunction(options.crop)) {\n removeListener(element, EVENT_CROP, options.crop);\n }\n if (isFunction(options.zoom)) {\n removeListener(element, EVENT_ZOOM, options.zoom);\n }\n removeListener(cropper, EVENT_POINTER_DOWN, this.onCropStart);\n if (options.zoomable && options.zoomOnWheel) {\n removeListener(cropper, EVENT_WHEEL, this.onWheel, {\n passive: false,\n capture: true\n });\n }\n if (options.toggleDragModeOnDblclick) {\n removeListener(cropper, EVENT_DBLCLICK, this.onDblclick);\n }\n removeListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove);\n removeListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd);\n if (options.responsive) {\n removeListener(window, EVENT_RESIZE, this.onResize);\n }\n }\n };\n\n var handlers = {\n resize: function resize() {\n if (this.disabled) {\n return;\n }\n var options = this.options,\n container = this.container,\n containerData = this.containerData;\n var ratioX = container.offsetWidth / containerData.width;\n var ratioY = container.offsetHeight / containerData.height;\n var ratio = Math.abs(ratioX - 1) > Math.abs(ratioY - 1) ? ratioX : ratioY;\n\n // Resize when width changed or height changed\n if (ratio !== 1) {\n var canvasData;\n var cropBoxData;\n if (options.restore) {\n canvasData = this.getCanvasData();\n cropBoxData = this.getCropBoxData();\n }\n this.render();\n if (options.restore) {\n this.setCanvasData(forEach(canvasData, function (n, i) {\n canvasData[i] = n * ratio;\n }));\n this.setCropBoxData(forEach(cropBoxData, function (n, i) {\n cropBoxData[i] = n * ratio;\n }));\n }\n }\n },\n dblclick: function dblclick() {\n if (this.disabled || this.options.dragMode === DRAG_MODE_NONE) {\n return;\n }\n this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP);\n },\n wheel: function wheel(event) {\n var _this = this;\n var ratio = Number(this.options.wheelZoomRatio) || 0.1;\n var delta = 1;\n if (this.disabled) {\n return;\n }\n event.preventDefault();\n\n // Limit wheel speed to prevent zoom too fast (#21)\n if (this.wheeling) {\n return;\n }\n this.wheeling = true;\n setTimeout(function () {\n _this.wheeling = false;\n }, 50);\n if (event.deltaY) {\n delta = event.deltaY > 0 ? 1 : -1;\n } else if (event.wheelDelta) {\n delta = -event.wheelDelta / 120;\n } else if (event.detail) {\n delta = event.detail > 0 ? 1 : -1;\n }\n this.zoom(-delta * ratio, event);\n },\n cropStart: function cropStart(event) {\n var buttons = event.buttons,\n button = event.button;\n if (this.disabled\n\n // Handle mouse event and pointer event and ignore touch event\n || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && (\n // No primary button (Usually the left button)\n isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0\n\n // Open context menu\n || event.ctrlKey)) {\n return;\n }\n var options = this.options,\n pointers = this.pointers;\n var action;\n if (event.changedTouches) {\n // Handle touch event\n forEach(event.changedTouches, function (touch) {\n pointers[touch.identifier] = getPointer(touch);\n });\n } else {\n // Handle mouse event and pointer event\n pointers[event.pointerId || 0] = getPointer(event);\n }\n if (Object.keys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) {\n action = ACTION_ZOOM;\n } else {\n action = getData(event.target, DATA_ACTION);\n }\n if (!REGEXP_ACTIONS.test(action)) {\n return;\n }\n if (dispatchEvent(this.element, EVENT_CROP_START, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n }\n\n // This line is required for preventing page zooming in iOS browsers\n event.preventDefault();\n this.action = action;\n this.cropping = false;\n if (action === ACTION_CROP) {\n this.cropping = true;\n addClass(this.dragBox, CLASS_MODAL);\n }\n },\n cropMove: function cropMove(event) {\n var action = this.action;\n if (this.disabled || !action) {\n return;\n }\n var pointers = this.pointers;\n event.preventDefault();\n if (dispatchEvent(this.element, EVENT_CROP_MOVE, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n }\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n // The first parameter should not be undefined (#432)\n assign(pointers[touch.identifier] || {}, getPointer(touch, true));\n });\n } else {\n assign(pointers[event.pointerId || 0] || {}, getPointer(event, true));\n }\n this.change(event);\n },\n cropEnd: function cropEnd(event) {\n if (this.disabled) {\n return;\n }\n var action = this.action,\n pointers = this.pointers;\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n delete pointers[touch.identifier];\n });\n } else {\n delete pointers[event.pointerId || 0];\n }\n if (!action) {\n return;\n }\n event.preventDefault();\n if (!Object.keys(pointers).length) {\n this.action = '';\n }\n if (this.cropping) {\n this.cropping = false;\n toggleClass(this.dragBox, CLASS_MODAL, this.cropped && this.options.modal);\n }\n dispatchEvent(this.element, EVENT_CROP_END, {\n originalEvent: event,\n action: action\n });\n }\n };\n\n var change = {\n change: function change(event) {\n var options = this.options,\n canvasData = this.canvasData,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData,\n pointers = this.pointers;\n var action = this.action;\n var aspectRatio = options.aspectRatio;\n var left = cropBoxData.left,\n top = cropBoxData.top,\n width = cropBoxData.width,\n height = cropBoxData.height;\n var right = left + width;\n var bottom = top + height;\n var minLeft = 0;\n var minTop = 0;\n var maxWidth = containerData.width;\n var maxHeight = containerData.height;\n var renderable = true;\n var offset;\n\n // Locking aspect ratio in \"free mode\" by holding shift key\n if (!aspectRatio && event.shiftKey) {\n aspectRatio = width && height ? width / height : 1;\n }\n if (this.limited) {\n minLeft = cropBoxData.minLeft;\n minTop = cropBoxData.minTop;\n maxWidth = minLeft + Math.min(containerData.width, canvasData.width, canvasData.left + canvasData.width);\n maxHeight = minTop + Math.min(containerData.height, canvasData.height, canvasData.top + canvasData.height);\n }\n var pointer = pointers[Object.keys(pointers)[0]];\n var range = {\n x: pointer.endX - pointer.startX,\n y: pointer.endY - pointer.startY\n };\n var check = function check(side) {\n switch (side) {\n case ACTION_EAST:\n if (right + range.x > maxWidth) {\n range.x = maxWidth - right;\n }\n break;\n case ACTION_WEST:\n if (left + range.x < minLeft) {\n range.x = minLeft - left;\n }\n break;\n case ACTION_NORTH:\n if (top + range.y < minTop) {\n range.y = minTop - top;\n }\n break;\n case ACTION_SOUTH:\n if (bottom + range.y > maxHeight) {\n range.y = maxHeight - bottom;\n }\n break;\n }\n };\n switch (action) {\n // Move crop box\n case ACTION_ALL:\n left += range.x;\n top += range.y;\n break;\n\n // Resize crop box\n case ACTION_EAST:\n if (range.x >= 0 && (right >= maxWidth || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n check(ACTION_EAST);\n width += range.x;\n if (width < 0) {\n action = ACTION_WEST;\n width = -width;\n left -= width;\n }\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n break;\n case ACTION_NORTH:\n if (range.y <= 0 && (top <= minTop || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n if (height < 0) {\n action = ACTION_SOUTH;\n height = -height;\n top -= height;\n }\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n break;\n case ACTION_WEST:\n if (range.x <= 0 && (left <= minLeft || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n if (width < 0) {\n action = ACTION_EAST;\n width = -width;\n left -= width;\n }\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n break;\n case ACTION_SOUTH:\n if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n check(ACTION_SOUTH);\n height += range.y;\n if (height < 0) {\n action = ACTION_NORTH;\n height = -height;\n top -= height;\n }\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n break;\n case ACTION_NORTH_EAST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || right >= maxWidth)) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n } else {\n check(ACTION_NORTH);\n check(ACTION_EAST);\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_NORTH_WEST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || left <= minLeft)) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n left += cropBoxData.width - width;\n } else {\n check(ACTION_NORTH);\n check(ACTION_WEST);\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_SOUTH_WEST:\n if (aspectRatio) {\n if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_WEST);\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_SOUTH_EAST:\n if (aspectRatio) {\n if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n check(ACTION_EAST);\n width += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_EAST);\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n top -= height;\n }\n break;\n\n // Move canvas\n case ACTION_MOVE:\n this.move(range.x, range.y);\n renderable = false;\n break;\n\n // Zoom canvas\n case ACTION_ZOOM:\n this.zoom(getMaxZoomRatio(pointers), event);\n renderable = false;\n break;\n\n // Create crop box\n case ACTION_CROP:\n if (!range.x || !range.y) {\n renderable = false;\n break;\n }\n offset = getOffset(this.cropper);\n left = pointer.startX - offset.left;\n top = pointer.startY - offset.top;\n width = cropBoxData.minWidth;\n height = cropBoxData.minHeight;\n if (range.x > 0) {\n action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST;\n } else if (range.x < 0) {\n left -= width;\n action = range.y > 0 ? ACTION_SOUTH_WEST : ACTION_NORTH_WEST;\n }\n if (range.y < 0) {\n top -= height;\n }\n\n // Show the crop box if is hidden\n if (!this.cropped) {\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.cropped = true;\n if (this.limited) {\n this.limitCropBox(true, true);\n }\n }\n break;\n }\n if (renderable) {\n cropBoxData.width = width;\n cropBoxData.height = height;\n cropBoxData.left = left;\n cropBoxData.top = top;\n this.action = action;\n this.renderCropBox();\n }\n\n // Override\n forEach(pointers, function (p) {\n p.startX = p.endX;\n p.startY = p.endY;\n });\n }\n };\n\n var methods = {\n // Show the crop box manually\n crop: function crop() {\n if (this.ready && !this.cropped && !this.disabled) {\n this.cropped = true;\n this.limitCropBox(true, true);\n if (this.options.modal) {\n addClass(this.dragBox, CLASS_MODAL);\n }\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.setCropBoxData(this.initialCropBoxData);\n }\n return this;\n },\n // Reset the image and crop box to their initial states\n reset: function reset() {\n if (this.ready && !this.disabled) {\n this.imageData = assign({}, this.initialImageData);\n this.canvasData = assign({}, this.initialCanvasData);\n this.cropBoxData = assign({}, this.initialCropBoxData);\n this.renderCanvas();\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n return this;\n },\n // Clear the crop box\n clear: function clear() {\n if (this.cropped && !this.disabled) {\n assign(this.cropBoxData, {\n left: 0,\n top: 0,\n width: 0,\n height: 0\n });\n this.cropped = false;\n this.renderCropBox();\n this.limitCanvas(true, true);\n\n // Render canvas after crop box rendered\n this.renderCanvas();\n removeClass(this.dragBox, CLASS_MODAL);\n addClass(this.cropBox, CLASS_HIDDEN);\n }\n return this;\n },\n /**\n * Replace the image's src and rebuild the cropper\n * @param {string} url - The new URL.\n * @param {boolean} [hasSameSize] - Indicate if the new image has the same size as the old one.\n * @returns {Cropper} this\n */\n replace: function replace(url) {\n var hasSameSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (!this.disabled && url) {\n if (this.isImg) {\n this.element.src = url;\n }\n if (hasSameSize) {\n this.url = url;\n this.image.src = url;\n if (this.ready) {\n this.viewBoxImage.src = url;\n forEach(this.previews, function (element) {\n element.getElementsByTagName('img')[0].src = url;\n });\n }\n } else {\n if (this.isImg) {\n this.replaced = true;\n }\n this.options.data = null;\n this.uncreate();\n this.load(url);\n }\n }\n return this;\n },\n // Enable (unfreeze) the cropper\n enable: function enable() {\n if (this.ready && this.disabled) {\n this.disabled = false;\n removeClass(this.cropper, CLASS_DISABLED);\n }\n return this;\n },\n // Disable (freeze) the cropper\n disable: function disable() {\n if (this.ready && !this.disabled) {\n this.disabled = true;\n addClass(this.cropper, CLASS_DISABLED);\n }\n return this;\n },\n /**\n * Destroy the cropper and remove the instance from the image\n * @returns {Cropper} this\n */\n destroy: function destroy() {\n var element = this.element;\n if (!element[NAMESPACE]) {\n return this;\n }\n element[NAMESPACE] = undefined;\n if (this.isImg && this.replaced) {\n element.src = this.originalUrl;\n }\n this.uncreate();\n return this;\n },\n /**\n * Move the canvas with relative offsets\n * @param {number} offsetX - The relative offset distance on the x-axis.\n * @param {number} [offsetY=offsetX] - The relative offset distance on the y-axis.\n * @returns {Cropper} this\n */\n move: function move(offsetX) {\n var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : offsetX;\n var _this$canvasData = this.canvasData,\n left = _this$canvasData.left,\n top = _this$canvasData.top;\n return this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY));\n },\n /**\n * Move the canvas to an absolute point\n * @param {number} x - The x-axis coordinate.\n * @param {number} [y=x] - The y-axis coordinate.\n * @returns {Cropper} this\n */\n moveTo: function moveTo(x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n var canvasData = this.canvasData;\n var changed = false;\n x = Number(x);\n y = Number(y);\n if (this.ready && !this.disabled && this.options.movable) {\n if (isNumber(x)) {\n canvasData.left = x;\n changed = true;\n }\n if (isNumber(y)) {\n canvasData.top = y;\n changed = true;\n }\n if (changed) {\n this.renderCanvas(true);\n }\n }\n return this;\n },\n /**\n * Zoom the canvas with a relative ratio\n * @param {number} ratio - The target ratio.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoom: function zoom(ratio, _originalEvent) {\n var canvasData = this.canvasData;\n ratio = Number(ratio);\n if (ratio < 0) {\n ratio = 1 / (1 - ratio);\n } else {\n ratio = 1 + ratio;\n }\n return this.zoomTo(canvasData.width * ratio / canvasData.naturalWidth, null, _originalEvent);\n },\n /**\n * Zoom the canvas to an absolute ratio\n * @param {number} ratio - The target ratio.\n * @param {Object} pivot - The zoom pivot point coordinate.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoomTo: function zoomTo(ratio, pivot, _originalEvent) {\n var options = this.options,\n canvasData = this.canvasData;\n var width = canvasData.width,\n height = canvasData.height,\n naturalWidth = canvasData.naturalWidth,\n naturalHeight = canvasData.naturalHeight;\n ratio = Number(ratio);\n if (ratio >= 0 && this.ready && !this.disabled && options.zoomable) {\n var newWidth = naturalWidth * ratio;\n var newHeight = naturalHeight * ratio;\n if (dispatchEvent(this.element, EVENT_ZOOM, {\n ratio: ratio,\n oldRatio: width / naturalWidth,\n originalEvent: _originalEvent\n }) === false) {\n return this;\n }\n if (_originalEvent) {\n var pointers = this.pointers;\n var offset = getOffset(this.cropper);\n var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : {\n pageX: _originalEvent.pageX,\n pageY: _originalEvent.pageY\n };\n\n // Zoom from the triggering point of the event\n canvasData.left -= (newWidth - width) * ((center.pageX - offset.left - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((center.pageY - offset.top - canvasData.top) / height);\n } else if (isPlainObject(pivot) && isNumber(pivot.x) && isNumber(pivot.y)) {\n canvasData.left -= (newWidth - width) * ((pivot.x - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((pivot.y - canvasData.top) / height);\n } else {\n // Zoom from the center of the canvas\n canvasData.left -= (newWidth - width) / 2;\n canvasData.top -= (newHeight - height) / 2;\n }\n canvasData.width = newWidth;\n canvasData.height = newHeight;\n this.renderCanvas(true);\n }\n return this;\n },\n /**\n * Rotate the canvas with a relative degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotate: function rotate(degree) {\n return this.rotateTo((this.imageData.rotate || 0) + Number(degree));\n },\n /**\n * Rotate the canvas to an absolute degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotateTo: function rotateTo(degree) {\n degree = Number(degree);\n if (isNumber(degree) && this.ready && !this.disabled && this.options.rotatable) {\n this.imageData.rotate = degree % 360;\n this.renderCanvas(true, true);\n }\n return this;\n },\n /**\n * Scale the image on the x-axis.\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @returns {Cropper} this\n */\n scaleX: function scaleX(_scaleX) {\n var scaleY = this.imageData.scaleY;\n return this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1);\n },\n /**\n * Scale the image on the y-axis.\n * @param {number} scaleY - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scaleY: function scaleY(_scaleY) {\n var scaleX = this.imageData.scaleX;\n return this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY);\n },\n /**\n * Scale the image\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scale: function scale(scaleX) {\n var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\n var imageData = this.imageData;\n var transformed = false;\n scaleX = Number(scaleX);\n scaleY = Number(scaleY);\n if (this.ready && !this.disabled && this.options.scalable) {\n if (isNumber(scaleX)) {\n imageData.scaleX = scaleX;\n transformed = true;\n }\n if (isNumber(scaleY)) {\n imageData.scaleY = scaleY;\n transformed = true;\n }\n if (transformed) {\n this.renderCanvas(true, true);\n }\n }\n return this;\n },\n /**\n * Get the cropped area position and size data (base on the original image)\n * @param {boolean} [rounded=false] - Indicate if round the data values or not.\n * @returns {Object} The result cropped data.\n */\n getData: function getData() {\n var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var data;\n if (this.ready && this.cropped) {\n data = {\n x: cropBoxData.left - canvasData.left,\n y: cropBoxData.top - canvasData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n var ratio = imageData.width / imageData.naturalWidth;\n forEach(data, function (n, i) {\n data[i] = n / ratio;\n });\n if (rounded) {\n // In case rounding off leads to extra 1px in right or bottom border\n // we should round the top-left corner and the dimension (#343).\n var bottom = Math.round(data.y + data.height);\n var right = Math.round(data.x + data.width);\n data.x = Math.round(data.x);\n data.y = Math.round(data.y);\n data.width = right - data.x;\n data.height = bottom - data.y;\n }\n } else {\n data = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n if (options.rotatable) {\n data.rotate = imageData.rotate || 0;\n }\n if (options.scalable) {\n data.scaleX = imageData.scaleX || 1;\n data.scaleY = imageData.scaleY || 1;\n }\n return data;\n },\n /**\n * Set the cropped area position and size with new data\n * @param {Object} data - The new data.\n * @returns {Cropper} this\n */\n setData: function setData(data) {\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData;\n var cropBoxData = {};\n if (this.ready && !this.disabled && isPlainObject(data)) {\n var transformed = false;\n if (options.rotatable) {\n if (isNumber(data.rotate) && data.rotate !== imageData.rotate) {\n imageData.rotate = data.rotate;\n transformed = true;\n }\n }\n if (options.scalable) {\n if (isNumber(data.scaleX) && data.scaleX !== imageData.scaleX) {\n imageData.scaleX = data.scaleX;\n transformed = true;\n }\n if (isNumber(data.scaleY) && data.scaleY !== imageData.scaleY) {\n imageData.scaleY = data.scaleY;\n transformed = true;\n }\n }\n if (transformed) {\n this.renderCanvas(true, true);\n }\n var ratio = imageData.width / imageData.naturalWidth;\n if (isNumber(data.x)) {\n cropBoxData.left = data.x * ratio + canvasData.left;\n }\n if (isNumber(data.y)) {\n cropBoxData.top = data.y * ratio + canvasData.top;\n }\n if (isNumber(data.width)) {\n cropBoxData.width = data.width * ratio;\n }\n if (isNumber(data.height)) {\n cropBoxData.height = data.height * ratio;\n }\n this.setCropBoxData(cropBoxData);\n }\n return this;\n },\n /**\n * Get the container size data.\n * @returns {Object} The result container data.\n */\n getContainerData: function getContainerData() {\n return this.ready ? assign({}, this.containerData) : {};\n },\n /**\n * Get the image position and size data.\n * @returns {Object} The result image data.\n */\n getImageData: function getImageData() {\n return this.sized ? assign({}, this.imageData) : {};\n },\n /**\n * Get the canvas position and size data.\n * @returns {Object} The result canvas data.\n */\n getCanvasData: function getCanvasData() {\n var canvasData = this.canvasData;\n var data = {};\n if (this.ready) {\n forEach(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (n) {\n data[n] = canvasData[n];\n });\n }\n return data;\n },\n /**\n * Set the canvas position and size with new data.\n * @param {Object} data - The new canvas data.\n * @returns {Cropper} this\n */\n setCanvasData: function setCanvasData(data) {\n var canvasData = this.canvasData;\n var aspectRatio = canvasData.aspectRatio;\n if (this.ready && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n canvasData.left = data.left;\n }\n if (isNumber(data.top)) {\n canvasData.top = data.top;\n }\n if (isNumber(data.width)) {\n canvasData.width = data.width;\n canvasData.height = data.width / aspectRatio;\n } else if (isNumber(data.height)) {\n canvasData.height = data.height;\n canvasData.width = data.height * aspectRatio;\n }\n this.renderCanvas(true);\n }\n return this;\n },\n /**\n * Get the crop box position and size data.\n * @returns {Object} The result crop box data.\n */\n getCropBoxData: function getCropBoxData() {\n var cropBoxData = this.cropBoxData;\n var data;\n if (this.ready && this.cropped) {\n data = {\n left: cropBoxData.left,\n top: cropBoxData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n }\n return data || {};\n },\n /**\n * Set the crop box position and size with new data.\n * @param {Object} data - The new crop box data.\n * @returns {Cropper} this\n */\n setCropBoxData: function setCropBoxData(data) {\n var cropBoxData = this.cropBoxData;\n var aspectRatio = this.options.aspectRatio;\n var widthChanged;\n var heightChanged;\n if (this.ready && this.cropped && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n cropBoxData.left = data.left;\n }\n if (isNumber(data.top)) {\n cropBoxData.top = data.top;\n }\n if (isNumber(data.width) && data.width !== cropBoxData.width) {\n widthChanged = true;\n cropBoxData.width = data.width;\n }\n if (isNumber(data.height) && data.height !== cropBoxData.height) {\n heightChanged = true;\n cropBoxData.height = data.height;\n }\n if (aspectRatio) {\n if (widthChanged) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else if (heightChanged) {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n this.renderCropBox();\n }\n return this;\n },\n /**\n * Get a canvas drawn the cropped image.\n * @param {Object} [options={}] - The config options.\n * @returns {HTMLCanvasElement} - The result canvas.\n */\n getCroppedCanvas: function getCroppedCanvas() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (!this.ready || !window.HTMLCanvasElement) {\n return null;\n }\n var canvasData = this.canvasData;\n var source = getSourceCanvas(this.image, this.imageData, canvasData, options);\n\n // Returns the source canvas if it is not cropped.\n if (!this.cropped) {\n return source;\n }\n var _this$getData = this.getData(options.rounded),\n initialX = _this$getData.x,\n initialY = _this$getData.y,\n initialWidth = _this$getData.width,\n initialHeight = _this$getData.height;\n var ratio = source.width / Math.floor(canvasData.naturalWidth);\n if (ratio !== 1) {\n initialX *= ratio;\n initialY *= ratio;\n initialWidth *= ratio;\n initialHeight *= ratio;\n }\n var aspectRatio = initialWidth / initialHeight;\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.maxWidth || Infinity,\n height: options.maxHeight || Infinity\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.minWidth || 0,\n height: options.minHeight || 0\n }, 'cover');\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.width || (ratio !== 1 ? source.width : initialWidth),\n height: options.height || (ratio !== 1 ? source.height : initialHeight)\n }),\n width = _getAdjustedSizes.width,\n height = _getAdjustedSizes.height;\n width = Math.min(maxSizes.width, Math.max(minSizes.width, width));\n height = Math.min(maxSizes.height, Math.max(minSizes.height, height));\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = options.fillColor || 'transparent';\n context.fillRect(0, 0, width, height);\n var _options$imageSmoothi = options.imageSmoothingEnabled,\n imageSmoothingEnabled = _options$imageSmoothi === void 0 ? true : _options$imageSmoothi,\n imageSmoothingQuality = options.imageSmoothingQuality;\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n if (imageSmoothingQuality) {\n context.imageSmoothingQuality = imageSmoothingQuality;\n }\n\n // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage\n var sourceWidth = source.width;\n var sourceHeight = source.height;\n\n // Source canvas parameters\n var srcX = initialX;\n var srcY = initialY;\n var srcWidth;\n var srcHeight;\n\n // Destination canvas parameters\n var dstX;\n var dstY;\n var dstWidth;\n var dstHeight;\n if (srcX <= -initialWidth || srcX > sourceWidth) {\n srcX = 0;\n srcWidth = 0;\n dstX = 0;\n dstWidth = 0;\n } else if (srcX <= 0) {\n dstX = -srcX;\n srcX = 0;\n srcWidth = Math.min(sourceWidth, initialWidth + srcX);\n dstWidth = srcWidth;\n } else if (srcX <= sourceWidth) {\n dstX = 0;\n srcWidth = Math.min(initialWidth, sourceWidth - srcX);\n dstWidth = srcWidth;\n }\n if (srcWidth <= 0 || srcY <= -initialHeight || srcY > sourceHeight) {\n srcY = 0;\n srcHeight = 0;\n dstY = 0;\n dstHeight = 0;\n } else if (srcY <= 0) {\n dstY = -srcY;\n srcY = 0;\n srcHeight = Math.min(sourceHeight, initialHeight + srcY);\n dstHeight = srcHeight;\n } else if (srcY <= sourceHeight) {\n dstY = 0;\n srcHeight = Math.min(initialHeight, sourceHeight - srcY);\n dstHeight = srcHeight;\n }\n var params = [srcX, srcY, srcWidth, srcHeight];\n\n // Avoid \"IndexSizeError\"\n if (dstWidth > 0 && dstHeight > 0) {\n var scale = width / initialWidth;\n params.push(dstX * scale, dstY * scale, dstWidth * scale, dstHeight * scale);\n }\n\n // All the numerical parameters should be integer for `drawImage`\n // https://github.com/fengyuanchen/cropper/issues/476\n context.drawImage.apply(context, [source].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n return canvas;\n },\n /**\n * Change the aspect ratio of the crop box.\n * @param {number} aspectRatio - The new aspect ratio.\n * @returns {Cropper} this\n */\n setAspectRatio: function setAspectRatio(aspectRatio) {\n var options = this.options;\n if (!this.disabled && !isUndefined(aspectRatio)) {\n // 0 -> NaN\n options.aspectRatio = Math.max(0, aspectRatio) || NaN;\n if (this.ready) {\n this.initCropBox();\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n }\n return this;\n },\n /**\n * Change the drag mode.\n * @param {string} mode - The new drag mode.\n * @returns {Cropper} this\n */\n setDragMode: function setDragMode(mode) {\n var options = this.options,\n dragBox = this.dragBox,\n face = this.face;\n if (this.ready && !this.disabled) {\n var croppable = mode === DRAG_MODE_CROP;\n var movable = options.movable && mode === DRAG_MODE_MOVE;\n mode = croppable || movable ? mode : DRAG_MODE_NONE;\n options.dragMode = mode;\n setData(dragBox, DATA_ACTION, mode);\n toggleClass(dragBox, CLASS_CROP, croppable);\n toggleClass(dragBox, CLASS_MOVE, movable);\n if (!options.cropBoxMovable) {\n // Sync drag mode to crop box when it is not movable\n setData(face, DATA_ACTION, mode);\n toggleClass(face, CLASS_CROP, croppable);\n toggleClass(face, CLASS_MOVE, movable);\n }\n }\n return this;\n }\n };\n\n var AnotherCropper = WINDOW.Cropper;\n var Cropper = /*#__PURE__*/function () {\n /**\n * Create a new Cropper.\n * @param {Element} element - The target element for cropping.\n * @param {Object} [options={}] - The configuration options.\n */\n function Cropper(element) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _classCallCheck(this, Cropper);\n if (!element || !REGEXP_TAG_NAME.test(element.tagName)) {\n throw new Error('The first argument is required and must be an <img> or <canvas> element.');\n }\n this.element = element;\n this.options = assign({}, DEFAULTS, isPlainObject(options) && options);\n this.cropped = false;\n this.disabled = false;\n this.pointers = {};\n this.ready = false;\n this.reloading = false;\n this.replaced = false;\n this.sized = false;\n this.sizing = false;\n this.init();\n }\n return _createClass(Cropper, [{\n key: \"init\",\n value: function init() {\n var element = this.element;\n var tagName = element.tagName.toLowerCase();\n var url;\n if (element[NAMESPACE]) {\n return;\n }\n element[NAMESPACE] = this;\n if (tagName === 'img') {\n this.isImg = true;\n\n // e.g.: \"img/picture.jpg\"\n url = element.getAttribute('src') || '';\n this.originalUrl = url;\n\n // Stop when it's a blank image\n if (!url) {\n return;\n }\n\n // e.g.: \"https://example.com/img/picture.jpg\"\n url = element.src;\n } else if (tagName === 'canvas' && window.HTMLCanvasElement) {\n url = element.toDataURL();\n }\n this.load(url);\n }\n }, {\n key: \"load\",\n value: function load(url) {\n var _this = this;\n if (!url) {\n return;\n }\n this.url = url;\n this.imageData = {};\n var element = this.element,\n options = this.options;\n if (!options.rotatable && !options.scalable) {\n options.checkOrientation = false;\n }\n\n // Only IE10+ supports Typed Arrays\n if (!options.checkOrientation || !window.ArrayBuffer) {\n this.clone();\n return;\n }\n\n // Detect the mime type of the image directly if it is a Data URL\n if (REGEXP_DATA_URL.test(url)) {\n // Read ArrayBuffer from Data URL of JPEG images directly for better performance\n if (REGEXP_DATA_URL_JPEG.test(url)) {\n this.read(dataURLToArrayBuffer(url));\n } else {\n // Only a JPEG image may contains Exif Orientation information,\n // the rest types of Data URLs are not necessary to check orientation at all.\n this.clone();\n }\n return;\n }\n\n // 1. Detect the mime type of the image by a XMLHttpRequest.\n // 2. Load the image as ArrayBuffer for reading orientation if its a JPEG image.\n var xhr = new XMLHttpRequest();\n var clone = this.clone.bind(this);\n this.reloading = true;\n this.xhr = xhr;\n\n // 1. Cross origin requests are only supported for protocol schemes:\n // http, https, data, chrome, chrome-extension.\n // 2. Access to XMLHttpRequest from a Data URL will be blocked by CORS policy\n // in some browsers as IE11 and Safari.\n xhr.onabort = clone;\n xhr.onerror = clone;\n xhr.ontimeout = clone;\n xhr.onprogress = function () {\n // Abort the request directly if it not a JPEG image for better performance\n if (xhr.getResponseHeader('content-type') !== MIME_TYPE_JPEG) {\n xhr.abort();\n }\n };\n xhr.onload = function () {\n _this.read(xhr.response);\n };\n xhr.onloadend = function () {\n _this.reloading = false;\n _this.xhr = null;\n };\n\n // Bust cache when there is a \"crossOrigin\" property to avoid browser cache error\n if (options.checkCrossOrigin && isCrossOriginURL(url) && element.crossOrigin) {\n url = addTimestamp(url);\n }\n\n // The third parameter is required for avoiding side-effect (#682)\n xhr.open('GET', url, true);\n xhr.responseType = 'arraybuffer';\n xhr.withCredentials = element.crossOrigin === 'use-credentials';\n xhr.send();\n }\n }, {\n key: \"read\",\n value: function read(arrayBuffer) {\n var options = this.options,\n imageData = this.imageData;\n\n // Reset the orientation value to its default value 1\n // as some iOS browsers will render image with its orientation\n var orientation = resetAndGetOrientation(arrayBuffer);\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n if (orientation > 1) {\n // Generate a new URL which has the default orientation value\n this.url = arrayBufferToDataURL(arrayBuffer, MIME_TYPE_JPEG);\n var _parseOrientation = parseOrientation(orientation);\n rotate = _parseOrientation.rotate;\n scaleX = _parseOrientation.scaleX;\n scaleY = _parseOrientation.scaleY;\n }\n if (options.rotatable) {\n imageData.rotate = rotate;\n }\n if (options.scalable) {\n imageData.scaleX = scaleX;\n imageData.scaleY = scaleY;\n }\n this.clone();\n }\n }, {\n key: \"clone\",\n value: function clone() {\n var element = this.element,\n url = this.url;\n var crossOrigin = element.crossOrigin;\n var crossOriginUrl = url;\n if (this.options.checkCrossOrigin && isCrossOriginURL(url)) {\n if (!crossOrigin) {\n crossOrigin = 'anonymous';\n }\n\n // Bust cache when there is not a \"crossOrigin\" property (#519)\n crossOriginUrl = addTimestamp(url);\n }\n this.crossOrigin = crossOrigin;\n this.crossOriginUrl = crossOriginUrl;\n var image = document.createElement('img');\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n image.src = crossOriginUrl || url;\n image.alt = element.alt || 'The image to crop';\n this.image = image;\n image.onload = this.start.bind(this);\n image.onerror = this.stop.bind(this);\n addClass(image, CLASS_HIDE);\n element.parentNode.insertBefore(image, element.nextSibling);\n }\n }, {\n key: \"start\",\n value: function start() {\n var _this2 = this;\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n this.sizing = true;\n\n // Match all browsers that use WebKit as the layout engine in iOS devices,\n // such as Safari for iOS, Chrome for iOS, and in-app browsers.\n var isIOSWebKit = WINDOW.navigator && /(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(WINDOW.navigator.userAgent);\n var done = function done(naturalWidth, naturalHeight) {\n assign(_this2.imageData, {\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n aspectRatio: naturalWidth / naturalHeight\n });\n _this2.initialImageData = assign({}, _this2.imageData);\n _this2.sizing = false;\n _this2.sized = true;\n _this2.build();\n };\n\n // Most modern browsers (excepts iOS WebKit)\n if (image.naturalWidth && !isIOSWebKit) {\n done(image.naturalWidth, image.naturalHeight);\n return;\n }\n var sizingImage = document.createElement('img');\n var body = document.body || document.documentElement;\n this.sizingImage = sizingImage;\n sizingImage.onload = function () {\n done(sizingImage.width, sizingImage.height);\n if (!isIOSWebKit) {\n body.removeChild(sizingImage);\n }\n };\n sizingImage.src = image.src;\n\n // iOS WebKit will convert the image automatically\n // with its orientation once append it into DOM (#279)\n if (!isIOSWebKit) {\n sizingImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;';\n body.appendChild(sizingImage);\n }\n }\n }, {\n key: \"stop\",\n value: function stop() {\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n image.parentNode.removeChild(image);\n this.image = null;\n }\n }, {\n key: \"build\",\n value: function build() {\n if (!this.sized || this.ready) {\n return;\n }\n var element = this.element,\n options = this.options,\n image = this.image;\n\n // Create cropper elements\n var container = element.parentNode;\n var template = document.createElement('div');\n template.innerHTML = TEMPLATE;\n var cropper = template.querySelector(\".\".concat(NAMESPACE, \"-container\"));\n var canvas = cropper.querySelector(\".\".concat(NAMESPACE, \"-canvas\"));\n var dragBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-drag-box\"));\n var cropBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-crop-box\"));\n var face = cropBox.querySelector(\".\".concat(NAMESPACE, \"-face\"));\n this.container = container;\n this.cropper = cropper;\n this.canvas = canvas;\n this.dragBox = dragBox;\n this.cropBox = cropBox;\n this.viewBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-view-box\"));\n this.face = face;\n canvas.appendChild(image);\n\n // Hide the original image\n addClass(element, CLASS_HIDDEN);\n\n // Inserts the cropper after to the current image\n container.insertBefore(cropper, element.nextSibling);\n\n // Show the hidden image\n removeClass(image, CLASS_HIDE);\n this.initPreview();\n this.bind();\n options.initialAspectRatio = Math.max(0, options.initialAspectRatio) || NaN;\n options.aspectRatio = Math.max(0, options.aspectRatio) || NaN;\n options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0;\n addClass(cropBox, CLASS_HIDDEN);\n if (!options.guides) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-dashed\")), CLASS_HIDDEN);\n }\n if (!options.center) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-center\")), CLASS_HIDDEN);\n }\n if (options.background) {\n addClass(cropper, \"\".concat(NAMESPACE, \"-bg\"));\n }\n if (!options.highlight) {\n addClass(face, CLASS_INVISIBLE);\n }\n if (options.cropBoxMovable) {\n addClass(face, CLASS_MOVE);\n setData(face, DATA_ACTION, ACTION_ALL);\n }\n if (!options.cropBoxResizable) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-line\")), CLASS_HIDDEN);\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-point\")), CLASS_HIDDEN);\n }\n this.render();\n this.ready = true;\n this.setDragMode(options.dragMode);\n if (options.autoCrop) {\n this.crop();\n }\n this.setData(options.data);\n if (isFunction(options.ready)) {\n addListener(element, EVENT_READY, options.ready, {\n once: true\n });\n }\n dispatchEvent(element, EVENT_READY);\n }\n }, {\n key: \"unbuild\",\n value: function unbuild() {\n if (!this.ready) {\n return;\n }\n this.ready = false;\n this.unbind();\n this.resetPreview();\n var parentNode = this.cropper.parentNode;\n if (parentNode) {\n parentNode.removeChild(this.cropper);\n }\n removeClass(this.element, CLASS_HIDDEN);\n }\n }, {\n key: \"uncreate\",\n value: function uncreate() {\n if (this.ready) {\n this.unbuild();\n this.ready = false;\n this.cropped = false;\n } else if (this.sizing) {\n this.sizingImage.onload = null;\n this.sizing = false;\n this.sized = false;\n } else if (this.reloading) {\n this.xhr.onabort = null;\n this.xhr.abort();\n } else if (this.image) {\n this.stop();\n }\n }\n\n /**\n * Get the no conflict cropper class.\n * @returns {Cropper} The cropper class.\n */\n }], [{\n key: \"noConflict\",\n value: function noConflict() {\n window.Cropper = AnotherCropper;\n return Cropper;\n }\n\n /**\n * Change the default options.\n * @param {Object} options - The new default options.\n */\n }, {\n key: \"setDefaults\",\n value: function setDefaults(options) {\n assign(DEFAULTS, isPlainObject(options) && options);\n }\n }]);\n }();\n assign(Cropper.prototype, render, preview, events, handlers, change, methods);\n\n return Cropper;\n\n}));\n", "/* smoothscroll v0.4.4 - 2019 - Dustan Kasten, Jeremias Menichelli - MIT License */\n(function () {\n 'use strict';\n\n // polyfill\n function polyfill() {\n // aliases\n var w = window;\n var d = document;\n\n // return if scroll behavior is supported and polyfill is not forced\n if (\n 'scrollBehavior' in d.documentElement.style &&\n w.__forceSmoothScrollPolyfill__ !== true\n ) {\n return;\n }\n\n // globals\n var Element = w.HTMLElement || w.Element;\n var SCROLL_TIME = 468;\n\n // object gathering original scroll methods\n var original = {\n scroll: w.scroll || w.scrollTo,\n scrollBy: w.scrollBy,\n elementScroll: Element.prototype.scroll || scrollElement,\n scrollIntoView: Element.prototype.scrollIntoView\n };\n\n // define timing method\n var now =\n w.performance && w.performance.now\n ? w.performance.now.bind(w.performance)\n : Date.now;\n\n /**\n * indicates if a the current browser is made by Microsoft\n * @method isMicrosoftBrowser\n * @param {String} userAgent\n * @returns {Boolean}\n */\n function isMicrosoftBrowser(userAgent) {\n var userAgentPatterns = ['MSIE ', 'Trident/', 'Edge/'];\n\n return new RegExp(userAgentPatterns.join('|')).test(userAgent);\n }\n\n /*\n * IE has rounding bug rounding down clientHeight and clientWidth and\n * rounding up scrollHeight and scrollWidth causing false positives\n * on hasScrollableSpace\n */\n var ROUNDING_TOLERANCE = isMicrosoftBrowser(w.navigator.userAgent) ? 1 : 0;\n\n /**\n * changes scroll position inside an element\n * @method scrollElement\n * @param {Number} x\n * @param {Number} y\n * @returns {undefined}\n */\n function scrollElement(x, y) {\n this.scrollLeft = x;\n this.scrollTop = y;\n }\n\n /**\n * returns result of applying ease math function to a number\n * @method ease\n * @param {Number} k\n * @returns {Number}\n */\n function ease(k) {\n return 0.5 * (1 - Math.cos(Math.PI * k));\n }\n\n /**\n * indicates if a smooth behavior should be applied\n * @method shouldBailOut\n * @param {Number|Object} firstArg\n * @returns {Boolean}\n */\n function shouldBailOut(firstArg) {\n if (\n firstArg === null ||\n typeof firstArg !== 'object' ||\n firstArg.behavior === undefined ||\n firstArg.behavior === 'auto' ||\n firstArg.behavior === 'instant'\n ) {\n // first argument is not an object/null\n // or behavior is auto, instant or undefined\n return true;\n }\n\n if (typeof firstArg === 'object' && firstArg.behavior === 'smooth') {\n // first argument is an object and behavior is smooth\n return false;\n }\n\n // throw error when behavior is not supported\n throw new TypeError(\n 'behavior member of ScrollOptions ' +\n firstArg.behavior +\n ' is not a valid value for enumeration ScrollBehavior.'\n );\n }\n\n /**\n * indicates if an element has scrollable space in the provided axis\n * @method hasScrollableSpace\n * @param {Node} el\n * @param {String} axis\n * @returns {Boolean}\n */\n function hasScrollableSpace(el, axis) {\n if (axis === 'Y') {\n return el.clientHeight + ROUNDING_TOLERANCE < el.scrollHeight;\n }\n\n if (axis === 'X') {\n return el.clientWidth + ROUNDING_TOLERANCE < el.scrollWidth;\n }\n }\n\n /**\n * indicates if an element has a scrollable overflow property in the axis\n * @method canOverflow\n * @param {Node} el\n * @param {String} axis\n * @returns {Boolean}\n */\n function canOverflow(el, axis) {\n var overflowValue = w.getComputedStyle(el, null)['overflow' + axis];\n\n return overflowValue === 'auto' || overflowValue === 'scroll';\n }\n\n /**\n * indicates if an element can be scrolled in either axis\n * @method isScrollable\n * @param {Node} el\n * @param {String} axis\n * @returns {Boolean}\n */\n function isScrollable(el) {\n var isScrollableY = hasScrollableSpace(el, 'Y') && canOverflow(el, 'Y');\n var isScrollableX = hasScrollableSpace(el, 'X') && canOverflow(el, 'X');\n\n return isScrollableY || isScrollableX;\n }\n\n /**\n * finds scrollable parent of an element\n * @method findScrollableParent\n * @param {Node} el\n * @returns {Node} el\n */\n function findScrollableParent(el) {\n while (el !== d.body && isScrollable(el) === false) {\n el = el.parentNode || el.host;\n }\n\n return el;\n }\n\n /**\n * self invoked function that, given a context, steps through scrolling\n * @method step\n * @param {Object} context\n * @returns {undefined}\n */\n function step(context) {\n var time = now();\n var value;\n var currentX;\n var currentY;\n var elapsed = (time - context.startTime) / SCROLL_TIME;\n\n // avoid elapsed times higher than one\n elapsed = elapsed > 1 ? 1 : elapsed;\n\n // apply easing to elapsed time\n value = ease(elapsed);\n\n currentX = context.startX + (context.x - context.startX) * value;\n currentY = context.startY + (context.y - context.startY) * value;\n\n context.method.call(context.scrollable, currentX, currentY);\n\n // scroll more if we have not reached our destination\n if (currentX !== context.x || currentY !== context.y) {\n w.requestAnimationFrame(step.bind(w, context));\n }\n }\n\n /**\n * scrolls window or element with a smooth behavior\n * @method smoothScroll\n * @param {Object|Node} el\n * @param {Number} x\n * @param {Number} y\n * @returns {undefined}\n */\n function smoothScroll(el, x, y) {\n var scrollable;\n var startX;\n var startY;\n var method;\n var startTime = now();\n\n // define scroll context\n if (el === d.body) {\n scrollable = w;\n startX = w.scrollX || w.pageXOffset;\n startY = w.scrollY || w.pageYOffset;\n method = original.scroll;\n } else {\n scrollable = el;\n startX = el.scrollLeft;\n startY = el.scrollTop;\n method = scrollElement;\n }\n\n // scroll looping over a frame\n step({\n scrollable: scrollable,\n method: method,\n startTime: startTime,\n startX: startX,\n startY: startY,\n x: x,\n y: y\n });\n }\n\n // ORIGINAL METHODS OVERRIDES\n // w.scroll and w.scrollTo\n w.scroll = w.scrollTo = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.scroll.call(\n w,\n arguments[0].left !== undefined\n ? arguments[0].left\n : typeof arguments[0] !== 'object'\n ? arguments[0]\n : w.scrollX || w.pageXOffset,\n // use top prop, second argument if present or fallback to scrollY\n arguments[0].top !== undefined\n ? arguments[0].top\n : arguments[1] !== undefined\n ? arguments[1]\n : w.scrollY || w.pageYOffset\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n w,\n d.body,\n arguments[0].left !== undefined\n ? ~~arguments[0].left\n : w.scrollX || w.pageXOffset,\n arguments[0].top !== undefined\n ? ~~arguments[0].top\n : w.scrollY || w.pageYOffset\n );\n };\n\n // w.scrollBy\n w.scrollBy = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0])) {\n original.scrollBy.call(\n w,\n arguments[0].left !== undefined\n ? arguments[0].left\n : typeof arguments[0] !== 'object' ? arguments[0] : 0,\n arguments[0].top !== undefined\n ? arguments[0].top\n : arguments[1] !== undefined ? arguments[1] : 0\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n w,\n d.body,\n ~~arguments[0].left + (w.scrollX || w.pageXOffset),\n ~~arguments[0].top + (w.scrollY || w.pageYOffset)\n );\n };\n\n // Element.prototype.scroll and Element.prototype.scrollTo\n Element.prototype.scroll = Element.prototype.scrollTo = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n // if one number is passed, throw error to match Firefox implementation\n if (typeof arguments[0] === 'number' && arguments[1] === undefined) {\n throw new SyntaxError('Value could not be converted');\n }\n\n original.elementScroll.call(\n this,\n // use left prop, first number argument or fallback to scrollLeft\n arguments[0].left !== undefined\n ? ~~arguments[0].left\n : typeof arguments[0] !== 'object' ? ~~arguments[0] : this.scrollLeft,\n // use top prop, second argument or fallback to scrollTop\n arguments[0].top !== undefined\n ? ~~arguments[0].top\n : arguments[1] !== undefined ? ~~arguments[1] : this.scrollTop\n );\n\n return;\n }\n\n var left = arguments[0].left;\n var top = arguments[0].top;\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n this,\n this,\n typeof left === 'undefined' ? this.scrollLeft : ~~left,\n typeof top === 'undefined' ? this.scrollTop : ~~top\n );\n };\n\n // Element.prototype.scrollBy\n Element.prototype.scrollBy = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.elementScroll.call(\n this,\n arguments[0].left !== undefined\n ? ~~arguments[0].left + this.scrollLeft\n : ~~arguments[0] + this.scrollLeft,\n arguments[0].top !== undefined\n ? ~~arguments[0].top + this.scrollTop\n : ~~arguments[1] + this.scrollTop\n );\n\n return;\n }\n\n this.scroll({\n left: ~~arguments[0].left + this.scrollLeft,\n top: ~~arguments[0].top + this.scrollTop,\n behavior: arguments[0].behavior\n });\n };\n\n // Element.prototype.scrollIntoView\n Element.prototype.scrollIntoView = function() {\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.scrollIntoView.call(\n this,\n arguments[0] === undefined ? true : arguments[0]\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n var scrollableParent = findScrollableParent(this);\n var parentRects = scrollableParent.getBoundingClientRect();\n var clientRects = this.getBoundingClientRect();\n\n if (scrollableParent !== d.body) {\n // reveal element inside parent\n smoothScroll.call(\n this,\n scrollableParent,\n scrollableParent.scrollLeft + clientRects.left - parentRects.left,\n scrollableParent.scrollTop + clientRects.top - parentRects.top\n );\n\n // reveal parent in viewport unless is fixed\n if (w.getComputedStyle(scrollableParent).position !== 'fixed') {\n w.scrollBy({\n left: parentRects.left,\n top: parentRects.top,\n behavior: 'smooth'\n });\n }\n } else {\n // reveal element in viewport\n w.scrollBy({\n left: clientRects.left,\n top: clientRects.top,\n behavior: 'smooth'\n });\n }\n };\n }\n\n if (typeof exports === 'object' && typeof module !== 'undefined') {\n // commonjs\n module.exports = { polyfill: polyfill };\n } else {\n // global\n polyfill();\n }\n\n}());\n", "(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.polyfillEventTarget = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\nvar passiveSupported = false\nvar onceSupported = false\nfunction noop() {}\ntry {\n var options = Object.create({}, {\n passive: {get: function() { passiveSupported = true }},\n once: {get: function() { onceSupported = true }},\n })\n window.addEventListener('test', noop, options)\n window.removeEventListener('test', noop, options)\n} catch (e) { /* */ }\n\nvar enhance = module.exports = function enhance(proto) {\n var originalAddEventListener = proto.addEventListener\n var originalRemoveEventListener = proto.removeEventListener\n\n var listeners = new WeakMap()\n proto.addEventListener = function(name, originalCallback, optionsOrCapture) {\n if (\n optionsOrCapture === undefined ||\n optionsOrCapture === true ||\n optionsOrCapture === false ||\n (!originalCallback || typeof originalCallback !== 'function' && typeof originalCallback !== 'object')\n ) {\n return originalAddEventListener.call(this, name, originalCallback, optionsOrCapture)\n }\n\n var callback = typeof originalCallback !== 'function' && typeof originalCallback.handleEvent === 'function' ? originalCallback.handleEvent.bind(originalCallback) : originalCallback\n var options = typeof optionsOrCapture === 'boolean' ? {capture: optionsOrCapture} : optionsOrCapture || {}\n var passive = Boolean(options.passive)\n var once = Boolean(options.once)\n var capture = Boolean(options.capture)\n var oldCallback = callback\n\n if (!onceSupported && once) {\n callback = function(event) {\n this.removeEventListener(name, originalCallback, options)\n oldCallback.call(this, event)\n }\n }\n\n if (!passiveSupported && passive) {\n callback = function(event) {\n event.preventDefault = noop\n oldCallback.call(this, event)\n }\n }\n\n if (!listeners.has(this)) listeners.set(this, new WeakMap())\n var elementMap = listeners.get(this)\n if (!elementMap.has(originalCallback)) elementMap.set(originalCallback, [])\n var optionsOctal = (passive * 1) + (once * 2) + (capture * 4)\n elementMap.get(originalCallback)[optionsOctal] = callback\n\n originalAddEventListener.call(this, name, callback, capture)\n }\n\n proto.removeEventListener = function(name, originalCallback, optionsOrCapture) {\n var capture = Boolean(typeof optionsOrCapture === 'object' ? optionsOrCapture.capture : optionsOrCapture)\n\n var elementMap = listeners.get(this)\n if (!elementMap) return originalRemoveEventListener.call(this, name, originalCallback, optionsOrCapture)\n var callbacks = elementMap.get(originalCallback)\n if (!callbacks) return originalRemoveEventListener.call(this, name, originalCallback, optionsOrCapture)\n\n for (var optionsOctal in callbacks) {\n var callbackIsCapture = Boolean(optionsOctal & 4)\n if (callbackIsCapture !== capture) continue // when unbinding, capture is the only option that counts\n originalRemoveEventListener.call(this, name, callbacks[optionsOctal], callbackIsCapture)\n }\n\n }\n\n}\n\nif (!passiveSupported || !onceSupported) {\n\n if (typeof EventTarget !== 'undefined') {\n enhance(EventTarget.prototype)\n } else {\n enhance(Text.prototype)\n enhance(HTMLElement.prototype)\n enhance(HTMLDocument.prototype)\n enhance(Window.prototype)\n enhance(XMLHttpRequest.prototype)\n }\n\n}\n\n},{}]},{},[1])(1)\n});", "/*! lozad.js - v1.16.0 - 2020-09-06\n* https://github.com/ApoorvSaxena/lozad.js\n* Copyright (c) 2020 Apoorv Saxena; Licensed MIT */\n!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):t.lozad=e()}(this,function(){\"use strict\";\n/**\n * Detect IE browser\n * @const {boolean}\n * @private\n */var g=\"undefined\"!=typeof document&&document.documentMode,f={rootMargin:\"0px\",threshold:0,load:function(t){if(\"picture\"===t.nodeName.toLowerCase()){var e=t.querySelector(\"img\"),r=!1;null===e&&(e=document.createElement(\"img\"),r=!0),g&&t.getAttribute(\"data-iesrc\")&&(e.src=t.getAttribute(\"data-iesrc\")),t.getAttribute(\"data-alt\")&&(e.alt=t.getAttribute(\"data-alt\")),r&&t.append(e)}if(\"video\"===t.nodeName.toLowerCase()&&!t.getAttribute(\"data-src\")&&t.children){for(var a=t.children,o=void 0,i=0;i<=a.length-1;i++)(o=a[i].getAttribute(\"data-src\"))&&(a[i].src=o);t.load()}t.getAttribute(\"data-poster\")&&(t.poster=t.getAttribute(\"data-poster\")),t.getAttribute(\"data-src\")&&(t.src=t.getAttribute(\"data-src\")),t.getAttribute(\"data-srcset\")&&t.setAttribute(\"srcset\",t.getAttribute(\"data-srcset\"));var n=\",\";if(t.getAttribute(\"data-background-delimiter\")&&(n=t.getAttribute(\"data-background-delimiter\")),t.getAttribute(\"data-background-image\"))t.style.backgroundImage=\"url('\"+t.getAttribute(\"data-background-image\").split(n).join(\"'),url('\")+\"')\";else if(t.getAttribute(\"data-background-image-set\")){var d=t.getAttribute(\"data-background-image-set\").split(n),u=d[0].substr(0,d[0].indexOf(\" \"))||d[0];// Substring before ... 1x\nu=-1===u.indexOf(\"url(\")?\"url(\"+u+\")\":u,1===d.length?t.style.backgroundImage=u:t.setAttribute(\"style\",(t.getAttribute(\"style\")||\"\")+\"background-image: \"+u+\"; background-image: -webkit-image-set(\"+d+\"); background-image: image-set(\"+d+\")\")}t.getAttribute(\"data-toggle-class\")&&t.classList.toggle(t.getAttribute(\"data-toggle-class\"))},loaded:function(){}};function A(t){t.setAttribute(\"data-loaded\",!0)}var m=function(t){return\"true\"===t.getAttribute(\"data-loaded\")},v=function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:document;return t instanceof Element?[t]:t instanceof NodeList?t:e.querySelectorAll(t)};return function(){var r,a,o=0<arguments.length&&void 0!==arguments[0]?arguments[0]:\".lozad\",t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},e=Object.assign({},f,t),i=e.root,n=e.rootMargin,d=e.threshold,u=e.load,g=e.loaded,s=void 0;\"undefined\"!=typeof window&&window.IntersectionObserver&&(s=new IntersectionObserver((r=u,a=g,function(t,e){t.forEach(function(t){(0<t.intersectionRatio||t.isIntersecting)&&(e.unobserve(t.target),m(t.target)||(r(t.target),A(t.target),a(t.target)))})}),{root:i,rootMargin:n,threshold:d}));for(var c,l=v(o,i),b=0;b<l.length;b++)(c=l[b]).getAttribute(\"data-placeholder-background\")&&(c.style.background=c.getAttribute(\"data-placeholder-background\"));return{observe:function(){for(var t=v(o,i),e=0;e<t.length;e++)m(t[e])||(s?s.observe(t[e]):(u(t[e]),A(t[e]),g(t[e])))},triggerLoad:function(t){m(t)||(u(t),A(t),g(t))},observer:s}}});\n", "// Exception logging\n// import Sentry from './lib/sentry'\n\n// Rails\nimport Rails from './rails/rails-ujs'\nimport '@hotwired/turbo-rails'\n\n// App\nimport './controllers/fudgeball'\nimport Polyfills from './lib/polyfills'\nimport MinimalAnalytics from './lib/minimal_analytics'\nimport ImageLazyLoading from './lib/image_lazy_loading'\n\n// Start everything that needs to be started\n// Sentry.start()\nRails.start()\nPolyfills.start()\nMinimalAnalytics.start()\nImageLazyLoading.start()\n", "/*!\nTurbo 8.0.13\nCopyright \u00A9 2025 37signals LLC\n */\n/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2019 Javan Makhmali\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n(function (prototype) {\n if (typeof prototype.requestSubmit == \"function\") return\n\n prototype.requestSubmit = function (submitter) {\n if (submitter) {\n validateSubmitter(submitter, this);\n submitter.click();\n } else {\n submitter = document.createElement(\"input\");\n submitter.type = \"submit\";\n submitter.hidden = true;\n this.appendChild(submitter);\n submitter.click();\n this.removeChild(submitter);\n }\n };\n\n function validateSubmitter(submitter, form) {\n submitter instanceof HTMLElement || raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n submitter.type == \"submit\" || raise(TypeError, \"The specified element is not a submit button\");\n submitter.form == form ||\n raise(DOMException, \"The specified element is not owned by this form element\", \"NotFoundError\");\n }\n\n function raise(errorConstructor, message, name) {\n throw new errorConstructor(\"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\", name)\n }\n})(HTMLFormElement.prototype);\n\nconst submittersByForm = new WeakMap();\n\nfunction findSubmitterFromClickTarget(target) {\n const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n const candidate = element ? element.closest(\"input, button\") : null;\n return candidate?.type == \"submit\" ? candidate : null\n}\n\nfunction clickCaptured(event) {\n const submitter = findSubmitterFromClickTarget(event.target);\n\n if (submitter && submitter.form) {\n submittersByForm.set(submitter.form, submitter);\n }\n}\n\n(function () {\n if (\"submitter\" in Event.prototype) return\n\n let prototype = window.Event.prototype;\n // Certain versions of Safari 15 have a bug where they won't\n // populate the submitter. This hurts TurboDrive's enable/disable detection.\n // See https://bugs.webkit.org/show_bug.cgi?id=229660\n if (\"SubmitEvent\" in window) {\n const prototypeOfSubmitEvent = window.SubmitEvent.prototype;\n\n if (/Apple Computer/.test(navigator.vendor) && !(\"submitter\" in prototypeOfSubmitEvent)) {\n prototype = prototypeOfSubmitEvent;\n } else {\n return // polyfill not needed\n }\n }\n\n addEventListener(\"click\", clickCaptured, true);\n\n Object.defineProperty(prototype, \"submitter\", {\n get() {\n if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n return submittersByForm.get(this.target)\n }\n }\n });\n})();\n\nconst FrameLoadingStyle = {\n eager: \"eager\",\n lazy: \"lazy\"\n};\n\n/**\n * Contains a fragment of HTML which is updated based on navigation within\n * it (e.g. via links or form submissions).\n *\n * @customElement turbo-frame\n * @example\n * <turbo-frame id=\"messages\">\n * <a href=\"/messages/expanded\">\n * Show all expanded messages in this frame.\n * </a>\n *\n * <form action=\"/messages\">\n * Show response from this form within this frame.\n * </form>\n * </turbo-frame>\n */\nclass FrameElement extends HTMLElement {\n static delegateConstructor = undefined\n\n loaded = Promise.resolve()\n\n static get observedAttributes() {\n return [\"disabled\", \"loading\", \"src\"]\n }\n\n constructor() {\n super();\n this.delegate = new FrameElement.delegateConstructor(this);\n }\n\n connectedCallback() {\n this.delegate.connect();\n }\n\n disconnectedCallback() {\n this.delegate.disconnect();\n }\n\n reload() {\n return this.delegate.sourceURLReloaded()\n }\n\n attributeChangedCallback(name) {\n if (name == \"loading\") {\n this.delegate.loadingStyleChanged();\n } else if (name == \"src\") {\n this.delegate.sourceURLChanged();\n } else if (name == \"disabled\") {\n this.delegate.disabledChanged();\n }\n }\n\n /**\n * Gets the URL to lazily load source HTML from\n */\n get src() {\n return this.getAttribute(\"src\")\n }\n\n /**\n * Sets the URL to lazily load source HTML from\n */\n set src(value) {\n if (value) {\n this.setAttribute(\"src\", value);\n } else {\n this.removeAttribute(\"src\");\n }\n }\n\n /**\n * Gets the refresh mode for the frame.\n */\n get refresh() {\n return this.getAttribute(\"refresh\")\n }\n\n /**\n * Sets the refresh mode for the frame.\n */\n set refresh(value) {\n if (value) {\n this.setAttribute(\"refresh\", value);\n } else {\n this.removeAttribute(\"refresh\");\n }\n }\n\n get shouldReloadWithMorph() {\n return this.src && this.refresh === \"morph\"\n }\n\n /**\n * Determines if the element is loading\n */\n get loading() {\n return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\")\n }\n\n /**\n * Sets the value of if the element is loading\n */\n set loading(value) {\n if (value) {\n this.setAttribute(\"loading\", value);\n } else {\n this.removeAttribute(\"loading\");\n }\n }\n\n /**\n * Gets the disabled state of the frame.\n *\n * If disabled, no requests will be intercepted by the frame.\n */\n get disabled() {\n return this.hasAttribute(\"disabled\")\n }\n\n /**\n * Sets the disabled state of the frame.\n *\n * If disabled, no requests will be intercepted by the frame.\n */\n set disabled(value) {\n if (value) {\n this.setAttribute(\"disabled\", \"\");\n } else {\n this.removeAttribute(\"disabled\");\n }\n }\n\n /**\n * Gets the autoscroll state of the frame.\n *\n * If true, the frame will be scrolled into view automatically on update.\n */\n get autoscroll() {\n return this.hasAttribute(\"autoscroll\")\n }\n\n /**\n * Sets the autoscroll state of the frame.\n *\n * If true, the frame will be scrolled into view automatically on update.\n */\n set autoscroll(value) {\n if (value) {\n this.setAttribute(\"autoscroll\", \"\");\n } else {\n this.removeAttribute(\"autoscroll\");\n }\n }\n\n /**\n * Determines if the element has finished loading\n */\n get complete() {\n return !this.delegate.isLoading\n }\n\n /**\n * Gets the active state of the frame.\n *\n * If inactive, source changes will not be observed.\n */\n get isActive() {\n return this.ownerDocument === document && !this.isPreview\n }\n\n /**\n * Sets the active state of the frame.\n *\n * If inactive, source changes will not be observed.\n */\n get isPreview() {\n return this.ownerDocument?.documentElement?.hasAttribute(\"data-turbo-preview\")\n }\n}\n\nfunction frameLoadingStyleFromString(style) {\n switch (style.toLowerCase()) {\n case \"lazy\":\n return FrameLoadingStyle.lazy\n default:\n return FrameLoadingStyle.eager\n }\n}\n\nconst drive = {\n enabled: true,\n progressBarDelay: 500,\n unvisitableExtensions: new Set(\n [\n \".7z\", \".aac\", \".apk\", \".avi\", \".bmp\", \".bz2\", \".css\", \".csv\", \".deb\", \".dmg\", \".doc\",\n \".docx\", \".exe\", \".gif\", \".gz\", \".heic\", \".heif\", \".ico\", \".iso\", \".jpeg\", \".jpg\",\n \".js\", \".json\", \".m4a\", \".mkv\", \".mov\", \".mp3\", \".mp4\", \".mpeg\", \".mpg\", \".msi\",\n \".ogg\", \".ogv\", \".pdf\", \".pkg\", \".png\", \".ppt\", \".pptx\", \".rar\", \".rtf\",\n \".svg\", \".tar\", \".tif\", \".tiff\", \".txt\", \".wav\", \".webm\", \".webp\", \".wma\", \".wmv\",\n \".xls\", \".xlsx\", \".xml\", \".zip\"\n ]\n )\n};\n\nfunction activateScriptElement(element) {\n if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n return element\n } else {\n const createdScriptElement = document.createElement(\"script\");\n const cspNonce = getCspNonce();\n if (cspNonce) {\n createdScriptElement.nonce = cspNonce;\n }\n createdScriptElement.textContent = element.textContent;\n createdScriptElement.async = false;\n copyElementAttributes(createdScriptElement, element);\n return createdScriptElement\n }\n}\n\nfunction copyElementAttributes(destinationElement, sourceElement) {\n for (const { name, value } of sourceElement.attributes) {\n destinationElement.setAttribute(name, value);\n }\n}\n\nfunction createDocumentFragment(html) {\n const template = document.createElement(\"template\");\n template.innerHTML = html;\n return template.content\n}\n\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n const event = new CustomEvent(eventName, {\n cancelable,\n bubbles: true,\n composed: true,\n detail\n });\n\n if (target && target.isConnected) {\n target.dispatchEvent(event);\n } else {\n document.documentElement.dispatchEvent(event);\n }\n\n return event\n}\n\nfunction cancelEvent(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n\nfunction nextRepaint() {\n if (document.visibilityState === \"hidden\") {\n return nextEventLoopTick()\n } else {\n return nextAnimationFrame()\n }\n}\n\nfunction nextAnimationFrame() {\n return new Promise((resolve) => requestAnimationFrame(() => resolve()))\n}\n\nfunction nextEventLoopTick() {\n return new Promise((resolve) => setTimeout(() => resolve(), 0))\n}\n\nfunction nextMicrotask() {\n return Promise.resolve()\n}\n\nfunction parseHTMLDocument(html = \"\") {\n return new DOMParser().parseFromString(html, \"text/html\")\n}\n\nfunction unindent(strings, ...values) {\n const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n const match = lines[0].match(/^\\s+/);\n const indent = match ? match[0].length : 0;\n return lines.map((line) => line.slice(indent)).join(\"\\n\")\n}\n\nfunction interpolate(strings, values) {\n return strings.reduce((result, string, i) => {\n const value = values[i] == undefined ? \"\" : values[i];\n return result + string + value\n }, \"\")\n}\n\nfunction uuid() {\n return Array.from({ length: 36 })\n .map((_, i) => {\n if (i == 8 || i == 13 || i == 18 || i == 23) {\n return \"-\"\n } else if (i == 14) {\n return \"4\"\n } else if (i == 19) {\n return (Math.floor(Math.random() * 4) + 8).toString(16)\n } else {\n return Math.floor(Math.random() * 15).toString(16)\n }\n })\n .join(\"\")\n}\n\nfunction getAttribute(attributeName, ...elements) {\n for (const value of elements.map((element) => element?.getAttribute(attributeName))) {\n if (typeof value == \"string\") return value\n }\n\n return null\n}\n\nfunction hasAttribute(attributeName, ...elements) {\n return elements.some((element) => element && element.hasAttribute(attributeName))\n}\n\nfunction markAsBusy(...elements) {\n for (const element of elements) {\n if (element.localName == \"turbo-frame\") {\n element.setAttribute(\"busy\", \"\");\n }\n element.setAttribute(\"aria-busy\", \"true\");\n }\n}\n\nfunction clearBusyState(...elements) {\n for (const element of elements) {\n if (element.localName == \"turbo-frame\") {\n element.removeAttribute(\"busy\");\n }\n\n element.removeAttribute(\"aria-busy\");\n }\n}\n\nfunction waitForLoad(element, timeoutInMilliseconds = 2000) {\n return new Promise((resolve) => {\n const onComplete = () => {\n element.removeEventListener(\"error\", onComplete);\n element.removeEventListener(\"load\", onComplete);\n resolve();\n };\n\n element.addEventListener(\"load\", onComplete, { once: true });\n element.addEventListener(\"error\", onComplete, { once: true });\n setTimeout(resolve, timeoutInMilliseconds);\n })\n}\n\nfunction getHistoryMethodForAction(action) {\n switch (action) {\n case \"replace\":\n return history.replaceState\n case \"advance\":\n case \"restore\":\n return history.pushState\n }\n}\n\nfunction isAction(action) {\n return action == \"advance\" || action == \"replace\" || action == \"restore\"\n}\n\nfunction getVisitAction(...elements) {\n const action = getAttribute(\"data-turbo-action\", ...elements);\n\n return isAction(action) ? action : null\n}\n\nfunction getMetaElement(name) {\n return document.querySelector(`meta[name=\"${name}\"]`)\n}\n\nfunction getMetaContent(name) {\n const element = getMetaElement(name);\n return element && element.content\n}\n\nfunction getCspNonce() {\n const element = getMetaElement(\"csp-nonce\");\n\n if (element) {\n const { nonce, content } = element;\n return nonce == \"\" ? content : nonce\n }\n}\n\nfunction setMetaContent(name, content) {\n let element = getMetaElement(name);\n\n if (!element) {\n element = document.createElement(\"meta\");\n element.setAttribute(\"name\", name);\n\n document.head.appendChild(element);\n }\n\n element.setAttribute(\"content\", content);\n\n return element\n}\n\nfunction findClosestRecursively(element, selector) {\n if (element instanceof Element) {\n return (\n element.closest(selector) || findClosestRecursively(element.assignedSlot || element.getRootNode()?.host, selector)\n )\n }\n}\n\nfunction elementIsFocusable(element) {\n const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n\n return !!element && element.closest(inertDisabledOrHidden) == null && typeof element.focus == \"function\"\n}\n\nfunction queryAutofocusableElement(elementOrDocumentFragment) {\n return Array.from(elementOrDocumentFragment.querySelectorAll(\"[autofocus]\")).find(elementIsFocusable)\n}\n\nasync function around(callback, reader) {\n const before = reader();\n\n callback();\n\n await nextAnimationFrame();\n\n const after = reader();\n\n return [before, after]\n}\n\nfunction doesNotTargetIFrame(name) {\n if (name === \"_blank\") {\n return false\n } else if (name) {\n for (const element of document.getElementsByName(name)) {\n if (element instanceof HTMLIFrameElement) return false\n }\n\n return true\n } else {\n return true\n }\n}\n\nfunction findLinkFromClickTarget(target) {\n return findClosestRecursively(target, \"a[href]:not([target^=_]):not([download])\")\n}\n\nfunction getLocationForLink(link) {\n return expandURL(link.getAttribute(\"href\") || \"\")\n}\n\nfunction debounce(fn, delay) {\n let timeoutId = null;\n\n return (...args) => {\n const callback = () => fn.apply(this, args);\n clearTimeout(timeoutId);\n timeoutId = setTimeout(callback, delay);\n }\n}\n\nconst submitter = {\n \"aria-disabled\": {\n beforeSubmit: submitter => {\n submitter.setAttribute(\"aria-disabled\", \"true\");\n submitter.addEventListener(\"click\", cancelEvent);\n },\n\n afterSubmit: submitter => {\n submitter.removeAttribute(\"aria-disabled\");\n submitter.removeEventListener(\"click\", cancelEvent);\n }\n },\n\n \"disabled\": {\n beforeSubmit: submitter => submitter.disabled = true,\n afterSubmit: submitter => submitter.disabled = false\n }\n};\n\nclass Config {\n #submitter = null\n\n constructor(config) {\n Object.assign(this, config);\n }\n\n get submitter() {\n return this.#submitter\n }\n\n set submitter(value) {\n this.#submitter = submitter[value] || value;\n }\n}\n\nconst forms = new Config({\n mode: \"on\",\n submitter: \"disabled\"\n});\n\nconst config = {\n drive,\n forms\n};\n\nfunction expandURL(locatable) {\n return new URL(locatable.toString(), document.baseURI)\n}\n\nfunction getAnchor(url) {\n let anchorMatch;\n if (url.hash) {\n return url.hash.slice(1)\n // eslint-disable-next-line no-cond-assign\n } else if ((anchorMatch = url.href.match(/#(.*)$/))) {\n return anchorMatch[1]\n }\n}\n\nfunction getAction$1(form, submitter) {\n const action = submitter?.getAttribute(\"formaction\") || form.getAttribute(\"action\") || form.action;\n\n return expandURL(action)\n}\n\nfunction getExtension(url) {\n return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\"\n}\n\nfunction isPrefixedBy(baseURL, url) {\n const prefix = getPrefix(url);\n return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix)\n}\n\nfunction locationIsVisitable(location, rootLocation) {\n return isPrefixedBy(location, rootLocation) && !config.drive.unvisitableExtensions.has(getExtension(location))\n}\n\nfunction getRequestURL(url) {\n const anchor = getAnchor(url);\n return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href\n}\n\nfunction toCacheKey(url) {\n return getRequestURL(url)\n}\n\nfunction urlsAreEqual(left, right) {\n return expandURL(left).href == expandURL(right).href\n}\n\nfunction getPathComponents(url) {\n return url.pathname.split(\"/\").slice(1)\n}\n\nfunction getLastPathComponent(url) {\n return getPathComponents(url).slice(-1)[0]\n}\n\nfunction getPrefix(url) {\n return addTrailingSlash(url.origin + url.pathname)\n}\n\nfunction addTrailingSlash(value) {\n return value.endsWith(\"/\") ? value : value + \"/\"\n}\n\nclass FetchResponse {\n constructor(response) {\n this.response = response;\n }\n\n get succeeded() {\n return this.response.ok\n }\n\n get failed() {\n return !this.succeeded\n }\n\n get clientError() {\n return this.statusCode >= 400 && this.statusCode <= 499\n }\n\n get serverError() {\n return this.statusCode >= 500 && this.statusCode <= 599\n }\n\n get redirected() {\n return this.response.redirected\n }\n\n get location() {\n return expandURL(this.response.url)\n }\n\n get isHTML() {\n return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/)\n }\n\n get statusCode() {\n return this.response.status\n }\n\n get contentType() {\n return this.header(\"Content-Type\")\n }\n\n get responseText() {\n return this.response.clone().text()\n }\n\n get responseHTML() {\n if (this.isHTML) {\n return this.response.clone().text()\n } else {\n return Promise.resolve(undefined)\n }\n }\n\n header(name) {\n return this.response.headers.get(name)\n }\n}\n\nclass LimitedSet extends Set {\n constructor(maxSize) {\n super();\n this.maxSize = maxSize;\n }\n\n add(value) {\n if (this.size >= this.maxSize) {\n const iterator = this.values();\n const oldestValue = iterator.next().value;\n this.delete(oldestValue);\n }\n super.add(value);\n }\n}\n\nconst recentRequests = new LimitedSet(20);\n\nconst nativeFetch = window.fetch;\n\nfunction fetchWithTurboHeaders(url, options = {}) {\n const modifiedHeaders = new Headers(options.headers || {});\n const requestUID = uuid();\n recentRequests.add(requestUID);\n modifiedHeaders.append(\"X-Turbo-Request-Id\", requestUID);\n\n return nativeFetch(url, {\n ...options,\n headers: modifiedHeaders\n })\n}\n\nfunction fetchMethodFromString(method) {\n switch (method.toLowerCase()) {\n case \"get\":\n return FetchMethod.get\n case \"post\":\n return FetchMethod.post\n case \"put\":\n return FetchMethod.put\n case \"patch\":\n return FetchMethod.patch\n case \"delete\":\n return FetchMethod.delete\n }\n}\n\nconst FetchMethod = {\n get: \"get\",\n post: \"post\",\n put: \"put\",\n patch: \"patch\",\n delete: \"delete\"\n};\n\nfunction fetchEnctypeFromString(encoding) {\n switch (encoding.toLowerCase()) {\n case FetchEnctype.multipart:\n return FetchEnctype.multipart\n case FetchEnctype.plain:\n return FetchEnctype.plain\n default:\n return FetchEnctype.urlEncoded\n }\n}\n\nconst FetchEnctype = {\n urlEncoded: \"application/x-www-form-urlencoded\",\n multipart: \"multipart/form-data\",\n plain: \"text/plain\"\n};\n\nclass FetchRequest {\n abortController = new AbortController()\n #resolveRequestPromise = (_value) => {}\n\n constructor(delegate, method, location, requestBody = new URLSearchParams(), target = null, enctype = FetchEnctype.urlEncoded) {\n const [url, body] = buildResourceAndBody(expandURL(location), method, requestBody, enctype);\n\n this.delegate = delegate;\n this.url = url;\n this.target = target;\n this.fetchOptions = {\n credentials: \"same-origin\",\n redirect: \"follow\",\n method: method.toUpperCase(),\n headers: { ...this.defaultHeaders },\n body: body,\n signal: this.abortSignal,\n referrer: this.delegate.referrer?.href\n };\n this.enctype = enctype;\n }\n\n get method() {\n return this.fetchOptions.method\n }\n\n set method(value) {\n const fetchBody = this.isSafe ? this.url.searchParams : this.fetchOptions.body || new FormData();\n const fetchMethod = fetchMethodFromString(value) || FetchMethod.get;\n\n this.url.search = \"\";\n\n const [url, body] = buildResourceAndBody(this.url, fetchMethod, fetchBody, this.enctype);\n\n this.url = url;\n this.fetchOptions.body = body;\n this.fetchOptions.method = fetchMethod.toUpperCase();\n }\n\n get headers() {\n return this.fetchOptions.headers\n }\n\n set headers(value) {\n this.fetchOptions.headers = value;\n }\n\n get body() {\n if (this.isSafe) {\n return this.url.searchParams\n } else {\n return this.fetchOptions.body\n }\n }\n\n set body(value) {\n this.fetchOptions.body = value;\n }\n\n get location() {\n return this.url\n }\n\n get params() {\n return this.url.searchParams\n }\n\n get entries() {\n return this.body ? Array.from(this.body.entries()) : []\n }\n\n cancel() {\n this.abortController.abort();\n }\n\n async perform() {\n const { fetchOptions } = this;\n this.delegate.prepareRequest(this);\n const event = await this.#allowRequestToBeIntercepted(fetchOptions);\n try {\n this.delegate.requestStarted(this);\n\n if (event.detail.fetchRequest) {\n this.response = event.detail.fetchRequest.response;\n } else {\n this.response = fetchWithTurboHeaders(this.url.href, fetchOptions);\n }\n\n const response = await this.response;\n return await this.receive(response)\n } catch (error) {\n if (error.name !== \"AbortError\") {\n if (this.#willDelegateErrorHandling(error)) {\n this.delegate.requestErrored(this, error);\n }\n throw error\n }\n } finally {\n this.delegate.requestFinished(this);\n }\n }\n\n async receive(response) {\n const fetchResponse = new FetchResponse(response);\n const event = dispatch(\"turbo:before-fetch-response\", {\n cancelable: true,\n detail: { fetchResponse },\n target: this.target\n });\n if (event.defaultPrevented) {\n this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n } else if (fetchResponse.succeeded) {\n this.delegate.requestSucceededWithResponse(this, fetchResponse);\n } else {\n this.delegate.requestFailedWithResponse(this, fetchResponse);\n }\n return fetchResponse\n }\n\n get defaultHeaders() {\n return {\n Accept: \"text/html, application/xhtml+xml\"\n }\n }\n\n get isSafe() {\n return isSafe(this.method)\n }\n\n get abortSignal() {\n return this.abortController.signal\n }\n\n acceptResponseType(mimeType) {\n this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\n }\n\n async #allowRequestToBeIntercepted(fetchOptions) {\n const requestInterception = new Promise((resolve) => (this.#resolveRequestPromise = resolve));\n const event = dispatch(\"turbo:before-fetch-request\", {\n cancelable: true,\n detail: {\n fetchOptions,\n url: this.url,\n resume: this.#resolveRequestPromise\n },\n target: this.target\n });\n this.url = event.detail.url;\n if (event.defaultPrevented) await requestInterception;\n\n return event\n }\n\n #willDelegateErrorHandling(error) {\n const event = dispatch(\"turbo:fetch-request-error\", {\n target: this.target,\n cancelable: true,\n detail: { request: this, error: error }\n });\n\n return !event.defaultPrevented\n }\n}\n\nfunction isSafe(fetchMethod) {\n return fetchMethodFromString(fetchMethod) == FetchMethod.get\n}\n\nfunction buildResourceAndBody(resource, method, requestBody, enctype) {\n const searchParams =\n Array.from(requestBody).length > 0 ? new URLSearchParams(entriesExcludingFiles(requestBody)) : resource.searchParams;\n\n if (isSafe(method)) {\n return [mergeIntoURLSearchParams(resource, searchParams), null]\n } else if (enctype == FetchEnctype.urlEncoded) {\n return [resource, searchParams]\n } else {\n return [resource, requestBody]\n }\n}\n\nfunction entriesExcludingFiles(requestBody) {\n const entries = [];\n\n for (const [name, value] of requestBody) {\n if (value instanceof File) continue\n else entries.push([name, value]);\n }\n\n return entries\n}\n\nfunction mergeIntoURLSearchParams(url, requestBody) {\n const searchParams = new URLSearchParams(entriesExcludingFiles(requestBody));\n\n url.search = searchParams.toString();\n\n return url\n}\n\nclass AppearanceObserver {\n started = false\n\n constructor(delegate, element) {\n this.delegate = delegate;\n this.element = element;\n this.intersectionObserver = new IntersectionObserver(this.intersect);\n }\n\n start() {\n if (!this.started) {\n this.started = true;\n this.intersectionObserver.observe(this.element);\n }\n }\n\n stop() {\n if (this.started) {\n this.started = false;\n this.intersectionObserver.unobserve(this.element);\n }\n }\n\n intersect = (entries) => {\n const lastEntry = entries.slice(-1)[0];\n if (lastEntry?.isIntersecting) {\n this.delegate.elementAppearedInViewport(this.element);\n }\n }\n}\n\nclass StreamMessage {\n static contentType = \"text/vnd.turbo-stream.html\"\n\n static wrap(message) {\n if (typeof message == \"string\") {\n return new this(createDocumentFragment(message))\n } else {\n return message\n }\n }\n\n constructor(fragment) {\n this.fragment = importStreamElements(fragment);\n }\n}\n\nfunction importStreamElements(fragment) {\n for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n const streamElement = document.importNode(element, true);\n\n for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n }\n\n element.replaceWith(streamElement);\n }\n\n return fragment\n}\n\nconst PREFETCH_DELAY = 100;\n\nclass PrefetchCache {\n #prefetchTimeout = null\n #prefetched = null\n\n get(url) {\n if (this.#prefetched && this.#prefetched.url === url && this.#prefetched.expire > Date.now()) {\n return this.#prefetched.request\n }\n }\n\n setLater(url, request, ttl) {\n this.clear();\n\n this.#prefetchTimeout = setTimeout(() => {\n request.perform();\n this.set(url, request, ttl);\n this.#prefetchTimeout = null;\n }, PREFETCH_DELAY);\n }\n\n set(url, request, ttl) {\n this.#prefetched = { url, request, expire: new Date(new Date().getTime() + ttl) };\n }\n\n clear() {\n if (this.#prefetchTimeout) clearTimeout(this.#prefetchTimeout);\n this.#prefetched = null;\n }\n}\n\nconst cacheTtl = 10 * 1000;\nconst prefetchCache = new PrefetchCache();\n\nconst FormSubmissionState = {\n initialized: \"initialized\",\n requesting: \"requesting\",\n waiting: \"waiting\",\n receiving: \"receiving\",\n stopping: \"stopping\",\n stopped: \"stopped\"\n};\n\nclass FormSubmission {\n state = FormSubmissionState.initialized\n\n static confirmMethod(message) {\n return Promise.resolve(confirm(message))\n }\n\n constructor(delegate, formElement, submitter, mustRedirect = false) {\n const method = getMethod(formElement, submitter);\n const action = getAction(getFormAction(formElement, submitter), method);\n const body = buildFormData(formElement, submitter);\n const enctype = getEnctype(formElement, submitter);\n\n this.delegate = delegate;\n this.formElement = formElement;\n this.submitter = submitter;\n this.fetchRequest = new FetchRequest(this, method, action, body, formElement, enctype);\n this.mustRedirect = mustRedirect;\n }\n\n get method() {\n return this.fetchRequest.method\n }\n\n set method(value) {\n this.fetchRequest.method = value;\n }\n\n get action() {\n return this.fetchRequest.url.toString()\n }\n\n set action(value) {\n this.fetchRequest.url = expandURL(value);\n }\n\n get body() {\n return this.fetchRequest.body\n }\n\n get enctype() {\n return this.fetchRequest.enctype\n }\n\n get isSafe() {\n return this.fetchRequest.isSafe\n }\n\n get location() {\n return this.fetchRequest.url\n }\n\n // The submission process\n\n async start() {\n const { initialized, requesting } = FormSubmissionState;\n const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n\n if (typeof confirmationMessage === \"string\") {\n const confirmMethod = typeof config.forms.confirm === \"function\" ?\n config.forms.confirm :\n FormSubmission.confirmMethod;\n\n const answer = await confirmMethod(confirmationMessage, this.formElement, this.submitter);\n if (!answer) {\n return\n }\n }\n\n if (this.state == initialized) {\n this.state = requesting;\n return this.fetchRequest.perform()\n }\n }\n\n stop() {\n const { stopping, stopped } = FormSubmissionState;\n if (this.state != stopping && this.state != stopped) {\n this.state = stopping;\n this.fetchRequest.cancel();\n return true\n }\n }\n\n // Fetch request delegate\n\n prepareRequest(request) {\n if (!request.isSafe) {\n const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n if (token) {\n request.headers[\"X-CSRF-Token\"] = token;\n }\n }\n\n if (this.requestAcceptsTurboStreamResponse(request)) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n\n requestStarted(_request) {\n this.state = FormSubmissionState.waiting;\n if (this.submitter) config.forms.submitter.beforeSubmit(this.submitter);\n this.setSubmitsWith();\n markAsBusy(this.formElement);\n dispatch(\"turbo:submit-start\", {\n target: this.formElement,\n detail: { formSubmission: this }\n });\n this.delegate.formSubmissionStarted(this);\n }\n\n requestPreventedHandlingResponse(request, response) {\n prefetchCache.clear();\n\n this.result = { success: response.succeeded, fetchResponse: response };\n }\n\n requestSucceededWithResponse(request, response) {\n if (response.clientError || response.serverError) {\n this.delegate.formSubmissionFailedWithResponse(this, response);\n return\n }\n\n prefetchCache.clear();\n\n if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n const error = new Error(\"Form responses must redirect to another location\");\n this.delegate.formSubmissionErrored(this, error);\n } else {\n this.state = FormSubmissionState.receiving;\n this.result = { success: true, fetchResponse: response };\n this.delegate.formSubmissionSucceededWithResponse(this, response);\n }\n }\n\n requestFailedWithResponse(request, response) {\n this.result = { success: false, fetchResponse: response };\n this.delegate.formSubmissionFailedWithResponse(this, response);\n }\n\n requestErrored(request, error) {\n this.result = { success: false, error };\n this.delegate.formSubmissionErrored(this, error);\n }\n\n requestFinished(_request) {\n this.state = FormSubmissionState.stopped;\n if (this.submitter) config.forms.submitter.afterSubmit(this.submitter);\n this.resetSubmitterText();\n clearBusyState(this.formElement);\n dispatch(\"turbo:submit-end\", {\n target: this.formElement,\n detail: { formSubmission: this, ...this.result }\n });\n this.delegate.formSubmissionFinished(this);\n }\n\n // Private\n\n setSubmitsWith() {\n if (!this.submitter || !this.submitsWith) return\n\n if (this.submitter.matches(\"button\")) {\n this.originalSubmitText = this.submitter.innerHTML;\n this.submitter.innerHTML = this.submitsWith;\n } else if (this.submitter.matches(\"input\")) {\n const input = this.submitter;\n this.originalSubmitText = input.value;\n input.value = this.submitsWith;\n }\n }\n\n resetSubmitterText() {\n if (!this.submitter || !this.originalSubmitText) return\n\n if (this.submitter.matches(\"button\")) {\n this.submitter.innerHTML = this.originalSubmitText;\n } else if (this.submitter.matches(\"input\")) {\n const input = this.submitter;\n input.value = this.originalSubmitText;\n }\n }\n\n requestMustRedirect(request) {\n return !request.isSafe && this.mustRedirect\n }\n\n requestAcceptsTurboStreamResponse(request) {\n return !request.isSafe || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement)\n }\n\n get submitsWith() {\n return this.submitter?.getAttribute(\"data-turbo-submits-with\")\n }\n}\n\nfunction buildFormData(formElement, submitter) {\n const formData = new FormData(formElement);\n const name = submitter?.getAttribute(\"name\");\n const value = submitter?.getAttribute(\"value\");\n\n if (name) {\n formData.append(name, value || \"\");\n }\n\n return formData\n}\n\nfunction getCookieValue(cookieName) {\n if (cookieName != null) {\n const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n const cookie = cookies.find((cookie) => cookie.startsWith(cookieName));\n if (cookie) {\n const value = cookie.split(\"=\").slice(1).join(\"=\");\n return value ? decodeURIComponent(value) : undefined\n }\n }\n}\n\nfunction responseSucceededWithoutRedirect(response) {\n return response.statusCode == 200 && !response.redirected\n}\n\nfunction getFormAction(formElement, submitter) {\n const formElementAction = typeof formElement.action === \"string\" ? formElement.action : null;\n\n if (submitter?.hasAttribute(\"formaction\")) {\n return submitter.getAttribute(\"formaction\") || \"\"\n } else {\n return formElement.getAttribute(\"action\") || formElementAction || \"\"\n }\n}\n\nfunction getAction(formAction, fetchMethod) {\n const action = expandURL(formAction);\n\n if (isSafe(fetchMethod)) {\n action.search = \"\";\n }\n\n return action\n}\n\nfunction getMethod(formElement, submitter) {\n const method = submitter?.getAttribute(\"formmethod\") || formElement.getAttribute(\"method\") || \"\";\n return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get\n}\n\nfunction getEnctype(formElement, submitter) {\n return fetchEnctypeFromString(submitter?.getAttribute(\"formenctype\") || formElement.enctype)\n}\n\nclass Snapshot {\n constructor(element) {\n this.element = element;\n }\n\n get activeElement() {\n return this.element.ownerDocument.activeElement\n }\n\n get children() {\n return [...this.element.children]\n }\n\n hasAnchor(anchor) {\n return this.getElementForAnchor(anchor) != null\n }\n\n getElementForAnchor(anchor) {\n return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null\n }\n\n get isConnected() {\n return this.element.isConnected\n }\n\n get firstAutofocusableElement() {\n return queryAutofocusableElement(this.element)\n }\n\n get permanentElements() {\n return queryPermanentElementsAll(this.element)\n }\n\n getPermanentElementById(id) {\n return getPermanentElementById(this.element, id)\n }\n\n getPermanentElementMapForSnapshot(snapshot) {\n const permanentElementMap = {};\n\n for (const currentPermanentElement of this.permanentElements) {\n const { id } = currentPermanentElement;\n const newPermanentElement = snapshot.getPermanentElementById(id);\n if (newPermanentElement) {\n permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n }\n }\n\n return permanentElementMap\n }\n}\n\nfunction getPermanentElementById(node, id) {\n return node.querySelector(`#${id}[data-turbo-permanent]`)\n}\n\nfunction queryPermanentElementsAll(node) {\n return node.querySelectorAll(\"[id][data-turbo-permanent]\")\n}\n\nclass FormSubmitObserver {\n started = false\n\n constructor(delegate, eventTarget) {\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n\n start() {\n if (!this.started) {\n this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n this.started = false;\n }\n }\n\n submitCaptured = () => {\n this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n this.eventTarget.addEventListener(\"submit\", this.submitBubbled, false);\n }\n\n submitBubbled = (event) => {\n if (!event.defaultPrevented) {\n const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n const submitter = event.submitter || undefined;\n\n if (\n form &&\n submissionDoesNotDismissDialog(form, submitter) &&\n submissionDoesNotTargetIFrame(form, submitter) &&\n this.delegate.willSubmitForm(form, submitter)\n ) {\n event.preventDefault();\n event.stopImmediatePropagation();\n this.delegate.formSubmitted(form, submitter);\n }\n }\n }\n}\n\nfunction submissionDoesNotDismissDialog(form, submitter) {\n const method = submitter?.getAttribute(\"formmethod\") || form.getAttribute(\"method\");\n\n return method != \"dialog\"\n}\n\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n const target = submitter?.getAttribute(\"formtarget\") || form.getAttribute(\"target\");\n\n return doesNotTargetIFrame(target)\n}\n\nclass View {\n #resolveRenderPromise = (_value) => {}\n #resolveInterceptionPromise = (_value) => {}\n\n constructor(delegate, element) {\n this.delegate = delegate;\n this.element = element;\n }\n\n // Scrolling\n\n scrollToAnchor(anchor) {\n const element = this.snapshot.getElementForAnchor(anchor);\n if (element) {\n this.scrollToElement(element);\n this.focusElement(element);\n } else {\n this.scrollToPosition({ x: 0, y: 0 });\n }\n }\n\n scrollToAnchorFromLocation(location) {\n this.scrollToAnchor(getAnchor(location));\n }\n\n scrollToElement(element) {\n element.scrollIntoView();\n }\n\n focusElement(element) {\n if (element instanceof HTMLElement) {\n if (element.hasAttribute(\"tabindex\")) {\n element.focus();\n } else {\n element.setAttribute(\"tabindex\", \"-1\");\n element.focus();\n element.removeAttribute(\"tabindex\");\n }\n }\n }\n\n scrollToPosition({ x, y }) {\n this.scrollRoot.scrollTo(x, y);\n }\n\n scrollToTop() {\n this.scrollToPosition({ x: 0, y: 0 });\n }\n\n get scrollRoot() {\n return window\n }\n\n // Rendering\n\n async render(renderer) {\n const { isPreview, shouldRender, willRender, newSnapshot: snapshot } = renderer;\n\n // A workaround to ignore tracked element mismatch reloads when performing\n // a promoted Visit from a frame navigation\n const shouldInvalidate = willRender;\n\n if (shouldRender) {\n try {\n this.renderPromise = new Promise((resolve) => (this.#resolveRenderPromise = resolve));\n this.renderer = renderer;\n await this.prepareToRenderSnapshot(renderer);\n\n const renderInterception = new Promise((resolve) => (this.#resolveInterceptionPromise = resolve));\n const options = { resume: this.#resolveInterceptionPromise, render: this.renderer.renderElement, renderMethod: this.renderer.renderMethod };\n const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n if (!immediateRender) await renderInterception;\n\n await this.renderSnapshot(renderer);\n this.delegate.viewRenderedSnapshot(snapshot, isPreview, this.renderer.renderMethod);\n this.delegate.preloadOnLoadLinksForView(this.element);\n this.finishRenderingSnapshot(renderer);\n } finally {\n delete this.renderer;\n this.#resolveRenderPromise(undefined);\n delete this.renderPromise;\n }\n } else if (shouldInvalidate) {\n this.invalidate(renderer.reloadReason);\n }\n }\n\n invalidate(reason) {\n this.delegate.viewInvalidated(reason);\n }\n\n async prepareToRenderSnapshot(renderer) {\n this.markAsPreview(renderer.isPreview);\n await renderer.prepareToRender();\n }\n\n markAsPreview(isPreview) {\n if (isPreview) {\n this.element.setAttribute(\"data-turbo-preview\", \"\");\n } else {\n this.element.removeAttribute(\"data-turbo-preview\");\n }\n }\n\n markVisitDirection(direction) {\n this.element.setAttribute(\"data-turbo-visit-direction\", direction);\n }\n\n unmarkVisitDirection() {\n this.element.removeAttribute(\"data-turbo-visit-direction\");\n }\n\n async renderSnapshot(renderer) {\n await renderer.render();\n }\n\n finishRenderingSnapshot(renderer) {\n renderer.finishRendering();\n }\n}\n\nclass FrameView extends View {\n missing() {\n this.element.innerHTML = `<strong class=\"turbo-frame-error\">Content missing</strong>`;\n }\n\n get snapshot() {\n return new Snapshot(this.element)\n }\n}\n\nclass LinkInterceptor {\n constructor(delegate, element) {\n this.delegate = delegate;\n this.element = element;\n }\n\n start() {\n this.element.addEventListener(\"click\", this.clickBubbled);\n document.addEventListener(\"turbo:click\", this.linkClicked);\n document.addEventListener(\"turbo:before-visit\", this.willVisit);\n }\n\n stop() {\n this.element.removeEventListener(\"click\", this.clickBubbled);\n document.removeEventListener(\"turbo:click\", this.linkClicked);\n document.removeEventListener(\"turbo:before-visit\", this.willVisit);\n }\n\n clickBubbled = (event) => {\n if (this.clickEventIsSignificant(event)) {\n this.clickEvent = event;\n } else {\n delete this.clickEvent;\n }\n }\n\n linkClicked = (event) => {\n if (this.clickEvent && this.clickEventIsSignificant(event)) {\n if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url, event.detail.originalEvent)) {\n this.clickEvent.preventDefault();\n event.preventDefault();\n this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);\n }\n }\n delete this.clickEvent;\n }\n\n willVisit = (_event) => {\n delete this.clickEvent;\n }\n\n clickEventIsSignificant(event) {\n const target = event.composed ? event.target?.parentElement : event.target;\n const element = findLinkFromClickTarget(target) || target;\n\n return element instanceof Element && element.closest(\"turbo-frame, html\") == this.element\n }\n}\n\nclass LinkClickObserver {\n started = false\n\n constructor(delegate, eventTarget) {\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n\n start() {\n if (!this.started) {\n this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n this.started = false;\n }\n }\n\n clickCaptured = () => {\n this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n }\n\n clickBubbled = (event) => {\n if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n const target = (event.composedPath && event.composedPath()[0]) || event.target;\n const link = findLinkFromClickTarget(target);\n if (link && doesNotTargetIFrame(link.target)) {\n const location = getLocationForLink(link);\n if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n event.preventDefault();\n this.delegate.followedLinkToLocation(link, location);\n }\n }\n }\n }\n\n clickEventIsSignificant(event) {\n return !(\n (event.target && event.target.isContentEditable) ||\n event.defaultPrevented ||\n event.which > 1 ||\n event.altKey ||\n event.ctrlKey ||\n event.metaKey ||\n event.shiftKey\n )\n }\n}\n\nclass FormLinkClickObserver {\n constructor(delegate, element) {\n this.delegate = delegate;\n this.linkInterceptor = new LinkClickObserver(this, element);\n }\n\n start() {\n this.linkInterceptor.start();\n }\n\n stop() {\n this.linkInterceptor.stop();\n }\n\n // Link hover observer delegate\n\n canPrefetchRequestToLocation(link, location) {\n return false\n }\n\n prefetchAndCacheRequestToLocation(link, location) {\n return\n }\n\n // Link click observer delegate\n\n willFollowLinkToLocation(link, location, originalEvent) {\n return (\n this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) &&\n (link.hasAttribute(\"data-turbo-method\") || link.hasAttribute(\"data-turbo-stream\"))\n )\n }\n\n followedLinkToLocation(link, location) {\n const form = document.createElement(\"form\");\n\n const type = \"hidden\";\n for (const [name, value] of location.searchParams) {\n form.append(Object.assign(document.createElement(\"input\"), { type, name, value }));\n }\n\n const action = Object.assign(location, { search: \"\" });\n form.setAttribute(\"data-turbo\", \"true\");\n form.setAttribute(\"action\", action.href);\n form.setAttribute(\"hidden\", \"\");\n\n const method = link.getAttribute(\"data-turbo-method\");\n if (method) form.setAttribute(\"method\", method);\n\n const turboFrame = link.getAttribute(\"data-turbo-frame\");\n if (turboFrame) form.setAttribute(\"data-turbo-frame\", turboFrame);\n\n const turboAction = getVisitAction(link);\n if (turboAction) form.setAttribute(\"data-turbo-action\", turboAction);\n\n const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n if (turboConfirm) form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n\n const turboStream = link.hasAttribute(\"data-turbo-stream\");\n if (turboStream) form.setAttribute(\"data-turbo-stream\", \"\");\n\n this.delegate.submittedFormLinkToLocation(link, location, form);\n\n document.body.appendChild(form);\n form.addEventListener(\"turbo:submit-end\", () => form.remove(), { once: true });\n requestAnimationFrame(() => form.requestSubmit());\n }\n}\n\nclass Bardo {\n static async preservingPermanentElements(delegate, permanentElementMap, callback) {\n const bardo = new this(delegate, permanentElementMap);\n bardo.enter();\n await callback();\n bardo.leave();\n }\n\n constructor(delegate, permanentElementMap) {\n this.delegate = delegate;\n this.permanentElementMap = permanentElementMap;\n }\n\n enter() {\n for (const id in this.permanentElementMap) {\n const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id];\n this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);\n this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n }\n }\n\n leave() {\n for (const id in this.permanentElementMap) {\n const [currentPermanentElement] = this.permanentElementMap[id];\n this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n this.delegate.leavingBardo(currentPermanentElement);\n }\n }\n\n replaceNewPermanentElementWithPlaceholder(permanentElement) {\n const placeholder = createPlaceholderForPermanentElement(permanentElement);\n permanentElement.replaceWith(placeholder);\n }\n\n replaceCurrentPermanentElementWithClone(permanentElement) {\n const clone = permanentElement.cloneNode(true);\n permanentElement.replaceWith(clone);\n }\n\n replacePlaceholderWithPermanentElement(permanentElement) {\n const placeholder = this.getPlaceholderById(permanentElement.id);\n placeholder?.replaceWith(permanentElement);\n }\n\n getPlaceholderById(id) {\n return this.placeholders.find((element) => element.content == id)\n }\n\n get placeholders() {\n return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")]\n }\n}\n\nfunction createPlaceholderForPermanentElement(permanentElement) {\n const element = document.createElement(\"meta\");\n element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n element.setAttribute(\"content\", permanentElement.id);\n return element\n}\n\nclass Renderer {\n #activeElement = null\n\n static renderElement(currentElement, newElement) {\n // Abstract method\n }\n\n constructor(currentSnapshot, newSnapshot, isPreview, willRender = true) {\n this.currentSnapshot = currentSnapshot;\n this.newSnapshot = newSnapshot;\n this.isPreview = isPreview;\n this.willRender = willRender;\n this.renderElement = this.constructor.renderElement;\n this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));\n }\n\n get shouldRender() {\n return true\n }\n\n get shouldAutofocus() {\n return true\n }\n\n get reloadReason() {\n return\n }\n\n prepareToRender() {\n return\n }\n\n render() {\n // Abstract method\n }\n\n finishRendering() {\n if (this.resolvingFunctions) {\n this.resolvingFunctions.resolve();\n delete this.resolvingFunctions;\n }\n }\n\n async preservingPermanentElements(callback) {\n await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n }\n\n focusFirstAutofocusableElement() {\n if (this.shouldAutofocus) {\n const element = this.connectedSnapshot.firstAutofocusableElement;\n if (element) {\n element.focus();\n }\n }\n }\n\n // Bardo delegate\n\n enteringBardo(currentPermanentElement) {\n if (this.#activeElement) return\n\n if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n this.#activeElement = this.currentSnapshot.activeElement;\n }\n }\n\n leavingBardo(currentPermanentElement) {\n if (currentPermanentElement.contains(this.#activeElement) && this.#activeElement instanceof HTMLElement) {\n this.#activeElement.focus();\n\n this.#activeElement = null;\n }\n }\n\n get connectedSnapshot() {\n return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot\n }\n\n get currentElement() {\n return this.currentSnapshot.element\n }\n\n get newElement() {\n return this.newSnapshot.element\n }\n\n get permanentElementMap() {\n return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot)\n }\n\n get renderMethod() {\n return \"replace\"\n }\n}\n\nclass FrameRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n const destinationRange = document.createRange();\n destinationRange.selectNodeContents(currentElement);\n destinationRange.deleteContents();\n\n const frameElement = newElement;\n const sourceRange = frameElement.ownerDocument?.createRange();\n if (sourceRange) {\n sourceRange.selectNodeContents(frameElement);\n currentElement.appendChild(sourceRange.extractContents());\n }\n }\n\n constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n this.delegate = delegate;\n }\n\n get shouldRender() {\n return true\n }\n\n async render() {\n await nextRepaint();\n this.preservingPermanentElements(() => {\n this.loadFrameElement();\n });\n this.scrollFrameIntoView();\n await nextRepaint();\n this.focusFirstAutofocusableElement();\n await nextRepaint();\n this.activateScriptElements();\n }\n\n loadFrameElement() {\n this.delegate.willRenderFrame(this.currentElement, this.newElement);\n this.renderElement(this.currentElement, this.newElement);\n }\n\n scrollFrameIntoView() {\n if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n const element = this.currentElement.firstElementChild;\n const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n const behavior = readScrollBehavior(this.currentElement.getAttribute(\"data-autoscroll-behavior\"), \"auto\");\n\n if (element) {\n element.scrollIntoView({ block, behavior });\n return true\n }\n }\n return false\n }\n\n activateScriptElements() {\n for (const inertScriptElement of this.newScriptElements) {\n const activatedScriptElement = activateScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n }\n\n get newScriptElements() {\n return this.currentElement.querySelectorAll(\"script\")\n }\n}\n\nfunction readScrollLogicalPosition(value, defaultValue) {\n if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n return value\n } else {\n return defaultValue\n }\n}\n\nfunction readScrollBehavior(value, defaultValue) {\n if (value == \"auto\" || value == \"smooth\") {\n return value\n } else {\n return defaultValue\n }\n}\n\n/**\n * @typedef {object} ConfigHead\n *\n * @property {'merge' | 'append' | 'morph' | 'none'} [style]\n * @property {boolean} [block]\n * @property {boolean} [ignore]\n * @property {function(Element): boolean} [shouldPreserve]\n * @property {function(Element): boolean} [shouldReAppend]\n * @property {function(Element): boolean} [shouldRemove]\n * @property {function(Element, {added: Node[], kept: Element[], removed: Element[]}): void} [afterHeadMorphed]\n */\n\n/**\n * @typedef {object} ConfigCallbacks\n *\n * @property {function(Node): boolean} [beforeNodeAdded]\n * @property {function(Node): void} [afterNodeAdded]\n * @property {function(Element, Node): boolean} [beforeNodeMorphed]\n * @property {function(Element, Node): void} [afterNodeMorphed]\n * @property {function(Element): boolean} [beforeNodeRemoved]\n * @property {function(Element): void} [afterNodeRemoved]\n * @property {function(string, Element, \"update\" | \"remove\"): boolean} [beforeAttributeUpdated]\n */\n\n/**\n * @typedef {object} Config\n *\n * @property {'outerHTML' | 'innerHTML'} [morphStyle]\n * @property {boolean} [ignoreActive]\n * @property {boolean} [ignoreActiveValue]\n * @property {boolean} [restoreFocus]\n * @property {ConfigCallbacks} [callbacks]\n * @property {ConfigHead} [head]\n */\n\n/**\n * @typedef {function} NoOp\n *\n * @returns {void}\n */\n\n/**\n * @typedef {object} ConfigHeadInternal\n *\n * @property {'merge' | 'append' | 'morph' | 'none'} style\n * @property {boolean} [block]\n * @property {boolean} [ignore]\n * @property {(function(Element): boolean) | NoOp} shouldPreserve\n * @property {(function(Element): boolean) | NoOp} shouldReAppend\n * @property {(function(Element): boolean) | NoOp} shouldRemove\n * @property {(function(Element, {added: Node[], kept: Element[], removed: Element[]}): void) | NoOp} afterHeadMorphed\n */\n\n/**\n * @typedef {object} ConfigCallbacksInternal\n *\n * @property {(function(Node): boolean) | NoOp} beforeNodeAdded\n * @property {(function(Node): void) | NoOp} afterNodeAdded\n * @property {(function(Node, Node): boolean) | NoOp} beforeNodeMorphed\n * @property {(function(Node, Node): void) | NoOp} afterNodeMorphed\n * @property {(function(Node): boolean) | NoOp} beforeNodeRemoved\n * @property {(function(Node): void) | NoOp} afterNodeRemoved\n * @property {(function(string, Element, \"update\" | \"remove\"): boolean) | NoOp} beforeAttributeUpdated\n */\n\n/**\n * @typedef {object} ConfigInternal\n *\n * @property {'outerHTML' | 'innerHTML'} morphStyle\n * @property {boolean} [ignoreActive]\n * @property {boolean} [ignoreActiveValue]\n * @property {boolean} [restoreFocus]\n * @property {ConfigCallbacksInternal} callbacks\n * @property {ConfigHeadInternal} head\n */\n\n/**\n * @typedef {Object} IdSets\n * @property {Set<string>} persistentIds\n * @property {Map<Node, Set<string>>} idMap\n */\n\n/**\n * @typedef {Function} Morph\n *\n * @param {Element | Document} oldNode\n * @param {Element | Node | HTMLCollection | Node[] | string | null} newContent\n * @param {Config} [config]\n * @returns {undefined | Node[]}\n */\n\n// base IIFE to define idiomorph\n/**\n *\n * @type {{defaults: ConfigInternal, morph: Morph}}\n */\nvar Idiomorph = (function () {\n\n /**\n * @typedef {object} MorphContext\n *\n * @property {Element} target\n * @property {Element} newContent\n * @property {ConfigInternal} config\n * @property {ConfigInternal['morphStyle']} morphStyle\n * @property {ConfigInternal['ignoreActive']} ignoreActive\n * @property {ConfigInternal['ignoreActiveValue']} ignoreActiveValue\n * @property {ConfigInternal['restoreFocus']} restoreFocus\n * @property {Map<Node, Set<string>>} idMap\n * @property {Set<string>} persistentIds\n * @property {ConfigInternal['callbacks']} callbacks\n * @property {ConfigInternal['head']} head\n * @property {HTMLDivElement} pantry\n */\n\n //=============================================================================\n // AND NOW IT BEGINS...\n //=============================================================================\n\n const noOp = () => {};\n /**\n * Default configuration values, updatable by users now\n * @type {ConfigInternal}\n */\n const defaults = {\n morphStyle: \"outerHTML\",\n callbacks: {\n beforeNodeAdded: noOp,\n afterNodeAdded: noOp,\n beforeNodeMorphed: noOp,\n afterNodeMorphed: noOp,\n beforeNodeRemoved: noOp,\n afterNodeRemoved: noOp,\n beforeAttributeUpdated: noOp,\n },\n head: {\n style: \"merge\",\n shouldPreserve: (elt) => elt.getAttribute(\"im-preserve\") === \"true\",\n shouldReAppend: (elt) => elt.getAttribute(\"im-re-append\") === \"true\",\n shouldRemove: noOp,\n afterHeadMorphed: noOp,\n },\n restoreFocus: true,\n };\n\n /**\n * Core idiomorph function for morphing one DOM tree to another\n *\n * @param {Element | Document} oldNode\n * @param {Element | Node | HTMLCollection | Node[] | string | null} newContent\n * @param {Config} [config]\n * @returns {Promise<Node[]> | Node[]}\n */\n function morph(oldNode, newContent, config = {}) {\n oldNode = normalizeElement(oldNode);\n const newNode = normalizeParent(newContent);\n const ctx = createMorphContext(oldNode, newNode, config);\n\n const morphedNodes = saveAndRestoreFocus(ctx, () => {\n return withHeadBlocking(\n ctx,\n oldNode,\n newNode,\n /** @param {MorphContext} ctx */ (ctx) => {\n if (ctx.morphStyle === \"innerHTML\") {\n morphChildren(ctx, oldNode, newNode);\n return Array.from(oldNode.childNodes);\n } else {\n return morphOuterHTML(ctx, oldNode, newNode);\n }\n },\n );\n });\n\n ctx.pantry.remove();\n return morphedNodes;\n }\n\n /**\n * Morph just the outerHTML of the oldNode to the newContent\n * We have to be careful because the oldNode could have siblings which need to be untouched\n * @param {MorphContext} ctx\n * @param {Element} oldNode\n * @param {Element} newNode\n * @returns {Node[]}\n */\n function morphOuterHTML(ctx, oldNode, newNode) {\n const oldParent = normalizeParent(oldNode);\n\n // basis for calulating which nodes were morphed\n // since there may be unmorphed sibling nodes\n let childNodes = Array.from(oldParent.childNodes);\n const index = childNodes.indexOf(oldNode);\n // how many elements are to the right of the oldNode\n const rightMargin = childNodes.length - (index + 1);\n\n morphChildren(\n ctx,\n oldParent,\n newNode,\n // these two optional params are the secret sauce\n oldNode, // start point for iteration\n oldNode.nextSibling, // end point for iteration\n );\n\n // return just the morphed nodes\n childNodes = Array.from(oldParent.childNodes);\n return childNodes.slice(index, childNodes.length - rightMargin);\n }\n\n /**\n * @param {MorphContext} ctx\n * @param {Function} fn\n * @returns {Promise<Node[]> | Node[]}\n */\n function saveAndRestoreFocus(ctx, fn) {\n if (!ctx.config.restoreFocus) return fn();\n let activeElement =\n /** @type {HTMLInputElement|HTMLTextAreaElement|null} */ (\n document.activeElement\n );\n\n // don't bother if the active element is not an input or textarea\n if (\n !(\n activeElement instanceof HTMLInputElement ||\n activeElement instanceof HTMLTextAreaElement\n )\n ) {\n return fn();\n }\n\n const { id: activeElementId, selectionStart, selectionEnd } = activeElement;\n\n const results = fn();\n\n if (activeElementId && activeElementId !== document.activeElement?.id) {\n activeElement = ctx.target.querySelector(`#${activeElementId}`);\n activeElement?.focus();\n }\n if (activeElement && !activeElement.selectionEnd && selectionEnd) {\n activeElement.setSelectionRange(selectionStart, selectionEnd);\n }\n\n return results;\n }\n\n const morphChildren = (function () {\n /**\n * This is the core algorithm for matching up children. The idea is to use id sets to try to match up\n * nodes as faithfully as possible. We greedily match, which allows us to keep the algorithm fast, but\n * by using id sets, we are able to better match up with content deeper in the DOM.\n *\n * Basic algorithm:\n * - for each node in the new content:\n * - search self and siblings for an id set match, falling back to a soft match\n * - if match found\n * - remove any nodes up to the match:\n * - pantry persistent nodes\n * - delete the rest\n * - morph the match\n * - elsif no match found, and node is persistent\n * - find its match by querying the old root (future) and pantry (past)\n * - move it and its children here\n * - morph it\n * - else\n * - create a new node from scratch as a last result\n *\n * @param {MorphContext} ctx the merge context\n * @param {Element} oldParent the old content that we are merging the new content into\n * @param {Element} newParent the parent element of the new content\n * @param {Node|null} [insertionPoint] the point in the DOM we start morphing at (defaults to first child)\n * @param {Node|null} [endPoint] the point in the DOM we stop morphing at (defaults to after last child)\n */\n function morphChildren(\n ctx,\n oldParent,\n newParent,\n insertionPoint = null,\n endPoint = null,\n ) {\n // normalize\n if (\n oldParent instanceof HTMLTemplateElement &&\n newParent instanceof HTMLTemplateElement\n ) {\n // @ts-ignore we can pretend the DocumentFragment is an Element\n oldParent = oldParent.content;\n // @ts-ignore ditto\n newParent = newParent.content;\n }\n insertionPoint ||= oldParent.firstChild;\n\n // run through all the new content\n for (const newChild of newParent.childNodes) {\n // once we reach the end of the old parent content skip to the end and insert the rest\n if (insertionPoint && insertionPoint != endPoint) {\n const bestMatch = findBestMatch(\n ctx,\n newChild,\n insertionPoint,\n endPoint,\n );\n if (bestMatch) {\n // if the node to morph is not at the insertion point then remove/move up to it\n if (bestMatch !== insertionPoint) {\n removeNodesBetween(ctx, insertionPoint, bestMatch);\n }\n morphNode(bestMatch, newChild, ctx);\n insertionPoint = bestMatch.nextSibling;\n continue;\n }\n }\n\n // if the matching node is elsewhere in the original content\n if (newChild instanceof Element && ctx.persistentIds.has(newChild.id)) {\n // move it and all its children here and morph\n const movedChild = moveBeforeById(\n oldParent,\n newChild.id,\n insertionPoint,\n ctx,\n );\n morphNode(movedChild, newChild, ctx);\n insertionPoint = movedChild.nextSibling;\n continue;\n }\n\n // last resort: insert the new node from scratch\n const insertedNode = createNode(\n oldParent,\n newChild,\n insertionPoint,\n ctx,\n );\n // could be null if beforeNodeAdded prevented insertion\n if (insertedNode) {\n insertionPoint = insertedNode.nextSibling;\n }\n }\n\n // remove any remaining old nodes that didn't match up with new content\n while (insertionPoint && insertionPoint != endPoint) {\n const tempNode = insertionPoint;\n insertionPoint = insertionPoint.nextSibling;\n removeNode(ctx, tempNode);\n }\n }\n\n /**\n * This performs the action of inserting a new node while handling situations where the node contains\n * elements with persistent ids and possible state info we can still preserve by moving in and then morphing\n *\n * @param {Element} oldParent\n * @param {Node} newChild\n * @param {Node|null} insertionPoint\n * @param {MorphContext} ctx\n * @returns {Node|null}\n */\n function createNode(oldParent, newChild, insertionPoint, ctx) {\n if (ctx.callbacks.beforeNodeAdded(newChild) === false) return null;\n if (ctx.idMap.has(newChild)) {\n // node has children with ids with possible state so create a dummy elt of same type and apply full morph algorithm\n const newEmptyChild = document.createElement(\n /** @type {Element} */ (newChild).tagName,\n );\n oldParent.insertBefore(newEmptyChild, insertionPoint);\n morphNode(newEmptyChild, newChild, ctx);\n ctx.callbacks.afterNodeAdded(newEmptyChild);\n return newEmptyChild;\n } else {\n // optimisation: no id state to preserve so we can just insert a clone of the newChild and its descendants\n const newClonedChild = document.importNode(newChild, true); // importNode to not mutate newParent\n oldParent.insertBefore(newClonedChild, insertionPoint);\n ctx.callbacks.afterNodeAdded(newClonedChild);\n return newClonedChild;\n }\n }\n\n //=============================================================================\n // Matching Functions\n //=============================================================================\n const findBestMatch = (function () {\n /**\n * Scans forward from the startPoint to the endPoint looking for a match\n * for the node. It looks for an id set match first, then a soft match.\n * We abort softmatching if we find two future soft matches, to reduce churn.\n * @param {Node} node\n * @param {MorphContext} ctx\n * @param {Node | null} startPoint\n * @param {Node | null} endPoint\n * @returns {Node | null}\n */\n function findBestMatch(ctx, node, startPoint, endPoint) {\n let softMatch = null;\n let nextSibling = node.nextSibling;\n let siblingSoftMatchCount = 0;\n\n let cursor = startPoint;\n while (cursor && cursor != endPoint) {\n // soft matching is a prerequisite for id set matching\n if (isSoftMatch(cursor, node)) {\n if (isIdSetMatch(ctx, cursor, node)) {\n return cursor; // found an id set match, we're done!\n }\n\n // we haven't yet saved a soft match fallback\n if (softMatch === null) {\n // the current soft match will hard match something else in the future, leave it\n if (!ctx.idMap.has(cursor)) {\n // save this as the fallback if we get through the loop without finding a hard match\n softMatch = cursor;\n }\n }\n }\n if (\n softMatch === null &&\n nextSibling &&\n isSoftMatch(cursor, nextSibling)\n ) {\n // The next new node has a soft match with this node, so\n // increment the count of future soft matches\n siblingSoftMatchCount++;\n nextSibling = nextSibling.nextSibling;\n\n // If there are two future soft matches, block soft matching for this node to allow\n // future siblings to soft match. This is to reduce churn in the DOM when an element\n // is prepended.\n if (siblingSoftMatchCount >= 2) {\n softMatch = undefined;\n }\n }\n\n // if the current node contains active element, stop looking for better future matches,\n // because if one is found, this node will be moved to the pantry, reparenting it and thus losing focus\n if (cursor.contains(document.activeElement)) break;\n\n cursor = cursor.nextSibling;\n }\n\n return softMatch || null;\n }\n\n /**\n *\n * @param {MorphContext} ctx\n * @param {Node} oldNode\n * @param {Node} newNode\n * @returns {boolean}\n */\n function isIdSetMatch(ctx, oldNode, newNode) {\n let oldSet = ctx.idMap.get(oldNode);\n let newSet = ctx.idMap.get(newNode);\n\n if (!newSet || !oldSet) return false;\n\n for (const id of oldSet) {\n // a potential match is an id in the new and old nodes that\n // has not already been merged into the DOM\n // But the newNode content we call this on has not been\n // merged yet and we don't allow duplicate IDs so it is simple\n if (newSet.has(id)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n *\n * @param {Node} oldNode\n * @param {Node} newNode\n * @returns {boolean}\n */\n function isSoftMatch(oldNode, newNode) {\n // ok to cast: if one is not element, `id` and `tagName` will be undefined and we'll just compare that.\n const oldElt = /** @type {Element} */ (oldNode);\n const newElt = /** @type {Element} */ (newNode);\n\n return (\n oldElt.nodeType === newElt.nodeType &&\n oldElt.tagName === newElt.tagName &&\n // If oldElt has an `id` with possible state and it doesn't match newElt.id then avoid morphing.\n // We'll still match an anonymous node with an IDed newElt, though, because if it got this far,\n // its not persistent, and new nodes can't have any hidden state.\n (!oldElt.id || oldElt.id === newElt.id)\n );\n }\n\n return findBestMatch;\n })();\n\n //=============================================================================\n // DOM Manipulation Functions\n //=============================================================================\n\n /**\n * Gets rid of an unwanted DOM node; strategy depends on nature of its reuse:\n * - Persistent nodes will be moved to the pantry for later reuse\n * - Other nodes will have their hooks called, and then are removed\n * @param {MorphContext} ctx\n * @param {Node} node\n */\n function removeNode(ctx, node) {\n // are we going to id set match this later?\n if (ctx.idMap.has(node)) {\n // skip callbacks and move to pantry\n moveBefore(ctx.pantry, node, null);\n } else {\n // remove for realsies\n if (ctx.callbacks.beforeNodeRemoved(node) === false) return;\n node.parentNode?.removeChild(node);\n ctx.callbacks.afterNodeRemoved(node);\n }\n }\n\n /**\n * Remove nodes between the start and end nodes\n * @param {MorphContext} ctx\n * @param {Node} startInclusive\n * @param {Node} endExclusive\n * @returns {Node|null}\n */\n function removeNodesBetween(ctx, startInclusive, endExclusive) {\n /** @type {Node | null} */\n let cursor = startInclusive;\n // remove nodes until the endExclusive node\n while (cursor && cursor !== endExclusive) {\n let tempNode = /** @type {Node} */ (cursor);\n cursor = cursor.nextSibling;\n removeNode(ctx, tempNode);\n }\n return cursor;\n }\n\n /**\n * Search for an element by id within the document and pantry, and move it using moveBefore.\n *\n * @param {Element} parentNode - The parent node to which the element will be moved.\n * @param {string} id - The ID of the element to be moved.\n * @param {Node | null} after - The reference node to insert the element before.\n * If `null`, the element is appended as the last child.\n * @param {MorphContext} ctx\n * @returns {Element} The found element\n */\n function moveBeforeById(parentNode, id, after, ctx) {\n const target =\n /** @type {Element} - will always be found */\n (\n ctx.target.querySelector(`#${id}`) ||\n ctx.pantry.querySelector(`#${id}`)\n );\n removeElementFromAncestorsIdMaps(target, ctx);\n moveBefore(parentNode, target, after);\n return target;\n }\n\n /**\n * Removes an element from its ancestors' id maps. This is needed when an element is moved from the\n * \"future\" via `moveBeforeId`. Otherwise, its erstwhile ancestors could be mistakenly moved to the\n * pantry rather than being deleted, preventing their removal hooks from being called.\n *\n * @param {Element} element - element to remove from its ancestors' id maps\n * @param {MorphContext} ctx\n */\n function removeElementFromAncestorsIdMaps(element, ctx) {\n const id = element.id;\n /** @ts-ignore - safe to loop in this way **/\n while ((element = element.parentNode)) {\n let idSet = ctx.idMap.get(element);\n if (idSet) {\n idSet.delete(id);\n if (!idSet.size) {\n ctx.idMap.delete(element);\n }\n }\n }\n }\n\n /**\n * Moves an element before another element within the same parent.\n * Uses the proposed `moveBefore` API if available (and working), otherwise falls back to `insertBefore`.\n * This is essentialy a forward-compat wrapper.\n *\n * @param {Element} parentNode - The parent node containing the after element.\n * @param {Node} element - The element to be moved.\n * @param {Node | null} after - The reference node to insert `element` before.\n * If `null`, `element` is appended as the last child.\n */\n function moveBefore(parentNode, element, after) {\n // @ts-ignore - use proposed moveBefore feature\n if (parentNode.moveBefore) {\n try {\n // @ts-ignore - use proposed moveBefore feature\n parentNode.moveBefore(element, after);\n } catch (e) {\n // fall back to insertBefore as some browsers may fail on moveBefore when trying to move Dom disconnected nodes to pantry\n parentNode.insertBefore(element, after);\n }\n } else {\n parentNode.insertBefore(element, after);\n }\n }\n\n return morphChildren;\n })();\n\n //=============================================================================\n // Single Node Morphing Code\n //=============================================================================\n const morphNode = (function () {\n /**\n * @param {Node} oldNode root node to merge content into\n * @param {Node} newContent new content to merge\n * @param {MorphContext} ctx the merge context\n * @returns {Node | null} the element that ended up in the DOM\n */\n function morphNode(oldNode, newContent, ctx) {\n if (ctx.ignoreActive && oldNode === document.activeElement) {\n // don't morph focused element\n return null;\n }\n\n if (ctx.callbacks.beforeNodeMorphed(oldNode, newContent) === false) {\n return oldNode;\n }\n\n if (oldNode instanceof HTMLHeadElement && ctx.head.ignore) ; else if (\n oldNode instanceof HTMLHeadElement &&\n ctx.head.style !== \"morph\"\n ) {\n // ok to cast: if newContent wasn't also a <head>, it would've got caught in the `!isSoftMatch` branch above\n handleHeadElement(\n oldNode,\n /** @type {HTMLHeadElement} */ (newContent),\n ctx,\n );\n } else {\n morphAttributes(oldNode, newContent, ctx);\n if (!ignoreValueOfActiveElement(oldNode, ctx)) {\n // @ts-ignore newContent can be a node here because .firstChild will be null\n morphChildren(ctx, oldNode, newContent);\n }\n }\n ctx.callbacks.afterNodeMorphed(oldNode, newContent);\n return oldNode;\n }\n\n /**\n * syncs the oldNode to the newNode, copying over all attributes and\n * inner element state from the newNode to the oldNode\n *\n * @param {Node} oldNode the node to copy attributes & state to\n * @param {Node} newNode the node to copy attributes & state from\n * @param {MorphContext} ctx the merge context\n */\n function morphAttributes(oldNode, newNode, ctx) {\n let type = newNode.nodeType;\n\n // if is an element type, sync the attributes from the\n // new node into the new node\n if (type === 1 /* element type */) {\n const oldElt = /** @type {Element} */ (oldNode);\n const newElt = /** @type {Element} */ (newNode);\n\n const oldAttributes = oldElt.attributes;\n const newAttributes = newElt.attributes;\n for (const newAttribute of newAttributes) {\n if (ignoreAttribute(newAttribute.name, oldElt, \"update\", ctx)) {\n continue;\n }\n if (oldElt.getAttribute(newAttribute.name) !== newAttribute.value) {\n oldElt.setAttribute(newAttribute.name, newAttribute.value);\n }\n }\n // iterate backwards to avoid skipping over items when a delete occurs\n for (let i = oldAttributes.length - 1; 0 <= i; i--) {\n const oldAttribute = oldAttributes[i];\n\n // toAttributes is a live NamedNodeMap, so iteration+mutation is unsafe\n // e.g. custom element attribute callbacks can remove other attributes\n if (!oldAttribute) continue;\n\n if (!newElt.hasAttribute(oldAttribute.name)) {\n if (ignoreAttribute(oldAttribute.name, oldElt, \"remove\", ctx)) {\n continue;\n }\n oldElt.removeAttribute(oldAttribute.name);\n }\n }\n\n if (!ignoreValueOfActiveElement(oldElt, ctx)) {\n syncInputValue(oldElt, newElt, ctx);\n }\n }\n\n // sync text nodes\n if (type === 8 /* comment */ || type === 3 /* text */) {\n if (oldNode.nodeValue !== newNode.nodeValue) {\n oldNode.nodeValue = newNode.nodeValue;\n }\n }\n }\n\n /**\n * NB: many bothans died to bring us information:\n *\n * https://github.com/patrick-steele-idem/morphdom/blob/master/src/specialElHandlers.js\n * https://github.com/choojs/nanomorph/blob/master/lib/morph.jsL113\n *\n * @param {Element} oldElement the element to sync the input value to\n * @param {Element} newElement the element to sync the input value from\n * @param {MorphContext} ctx the merge context\n */\n function syncInputValue(oldElement, newElement, ctx) {\n if (\n oldElement instanceof HTMLInputElement &&\n newElement instanceof HTMLInputElement &&\n newElement.type !== \"file\"\n ) {\n let newValue = newElement.value;\n let oldValue = oldElement.value;\n\n // sync boolean attributes\n syncBooleanAttribute(oldElement, newElement, \"checked\", ctx);\n syncBooleanAttribute(oldElement, newElement, \"disabled\", ctx);\n\n if (!newElement.hasAttribute(\"value\")) {\n if (!ignoreAttribute(\"value\", oldElement, \"remove\", ctx)) {\n oldElement.value = \"\";\n oldElement.removeAttribute(\"value\");\n }\n } else if (oldValue !== newValue) {\n if (!ignoreAttribute(\"value\", oldElement, \"update\", ctx)) {\n oldElement.setAttribute(\"value\", newValue);\n oldElement.value = newValue;\n }\n }\n // TODO: QUESTION(1cg): this used to only check `newElement` unlike the other branches -- why?\n // did I break something?\n } else if (\n oldElement instanceof HTMLOptionElement &&\n newElement instanceof HTMLOptionElement\n ) {\n syncBooleanAttribute(oldElement, newElement, \"selected\", ctx);\n } else if (\n oldElement instanceof HTMLTextAreaElement &&\n newElement instanceof HTMLTextAreaElement\n ) {\n let newValue = newElement.value;\n let oldValue = oldElement.value;\n if (ignoreAttribute(\"value\", oldElement, \"update\", ctx)) {\n return;\n }\n if (newValue !== oldValue) {\n oldElement.value = newValue;\n }\n if (\n oldElement.firstChild &&\n oldElement.firstChild.nodeValue !== newValue\n ) {\n oldElement.firstChild.nodeValue = newValue;\n }\n }\n }\n\n /**\n * @param {Element} oldElement element to write the value to\n * @param {Element} newElement element to read the value from\n * @param {string} attributeName the attribute name\n * @param {MorphContext} ctx the merge context\n */\n function syncBooleanAttribute(oldElement, newElement, attributeName, ctx) {\n // @ts-ignore this function is only used on boolean attrs that are reflected as dom properties\n const newLiveValue = newElement[attributeName],\n // @ts-ignore ditto\n oldLiveValue = oldElement[attributeName];\n if (newLiveValue !== oldLiveValue) {\n const ignoreUpdate = ignoreAttribute(\n attributeName,\n oldElement,\n \"update\",\n ctx,\n );\n if (!ignoreUpdate) {\n // update attribute's associated DOM property\n // @ts-ignore this function is only used on boolean attrs that are reflected as dom properties\n oldElement[attributeName] = newElement[attributeName];\n }\n if (newLiveValue) {\n if (!ignoreUpdate) {\n // https://developer.mozilla.org/en-US/docs/Glossary/Boolean/HTML\n // this is the correct way to set a boolean attribute to \"true\"\n oldElement.setAttribute(attributeName, \"\");\n }\n } else {\n if (!ignoreAttribute(attributeName, oldElement, \"remove\", ctx)) {\n oldElement.removeAttribute(attributeName);\n }\n }\n }\n }\n\n /**\n * @param {string} attr the attribute to be mutated\n * @param {Element} element the element that is going to be updated\n * @param {\"update\" | \"remove\"} updateType\n * @param {MorphContext} ctx the merge context\n * @returns {boolean} true if the attribute should be ignored, false otherwise\n */\n function ignoreAttribute(attr, element, updateType, ctx) {\n if (\n attr === \"value\" &&\n ctx.ignoreActiveValue &&\n element === document.activeElement\n ) {\n return true;\n }\n return (\n ctx.callbacks.beforeAttributeUpdated(attr, element, updateType) ===\n false\n );\n }\n\n /**\n * @param {Node} possibleActiveElement\n * @param {MorphContext} ctx\n * @returns {boolean}\n */\n function ignoreValueOfActiveElement(possibleActiveElement, ctx) {\n return (\n !!ctx.ignoreActiveValue &&\n possibleActiveElement === document.activeElement &&\n possibleActiveElement !== document.body\n );\n }\n\n return morphNode;\n })();\n\n //=============================================================================\n // Head Management Functions\n //=============================================================================\n /**\n * @param {MorphContext} ctx\n * @param {Element} oldNode\n * @param {Element} newNode\n * @param {function} callback\n * @returns {Node[] | Promise<Node[]>}\n */\n function withHeadBlocking(ctx, oldNode, newNode, callback) {\n if (ctx.head.block) {\n const oldHead = oldNode.querySelector(\"head\");\n const newHead = newNode.querySelector(\"head\");\n if (oldHead && newHead) {\n const promises = handleHeadElement(oldHead, newHead, ctx);\n // when head promises resolve, proceed ignoring the head tag\n return Promise.all(promises).then(() => {\n const newCtx = Object.assign(ctx, {\n head: {\n block: false,\n ignore: true,\n },\n });\n return callback(newCtx);\n });\n }\n }\n // just proceed if we not head blocking\n return callback(ctx);\n }\n\n /**\n * The HEAD tag can be handled specially, either w/ a 'merge' or 'append' style\n *\n * @param {Element} oldHead\n * @param {Element} newHead\n * @param {MorphContext} ctx\n * @returns {Promise<void>[]}\n */\n function handleHeadElement(oldHead, newHead, ctx) {\n let added = [];\n let removed = [];\n let preserved = [];\n let nodesToAppend = [];\n\n // put all new head elements into a Map, by their outerHTML\n let srcToNewHeadNodes = new Map();\n for (const newHeadChild of newHead.children) {\n srcToNewHeadNodes.set(newHeadChild.outerHTML, newHeadChild);\n }\n\n // for each elt in the current head\n for (const currentHeadElt of oldHead.children) {\n // If the current head element is in the map\n let inNewContent = srcToNewHeadNodes.has(currentHeadElt.outerHTML);\n let isReAppended = ctx.head.shouldReAppend(currentHeadElt);\n let isPreserved = ctx.head.shouldPreserve(currentHeadElt);\n if (inNewContent || isPreserved) {\n if (isReAppended) {\n // remove the current version and let the new version replace it and re-execute\n removed.push(currentHeadElt);\n } else {\n // this element already exists and should not be re-appended, so remove it from\n // the new content map, preserving it in the DOM\n srcToNewHeadNodes.delete(currentHeadElt.outerHTML);\n preserved.push(currentHeadElt);\n }\n } else {\n if (ctx.head.style === \"append\") {\n // we are appending and this existing element is not new content\n // so if and only if it is marked for re-append do we do anything\n if (isReAppended) {\n removed.push(currentHeadElt);\n nodesToAppend.push(currentHeadElt);\n }\n } else {\n // if this is a merge, we remove this content since it is not in the new head\n if (ctx.head.shouldRemove(currentHeadElt) !== false) {\n removed.push(currentHeadElt);\n }\n }\n }\n }\n\n // Push the remaining new head elements in the Map into the\n // nodes to append to the head tag\n nodesToAppend.push(...srcToNewHeadNodes.values());\n\n let promises = [];\n for (const newNode of nodesToAppend) {\n // TODO: This could theoretically be null, based on type\n let newElt = /** @type {ChildNode} */ (\n document.createRange().createContextualFragment(newNode.outerHTML)\n .firstChild\n );\n if (ctx.callbacks.beforeNodeAdded(newElt) !== false) {\n if (\n (\"href\" in newElt && newElt.href) ||\n (\"src\" in newElt && newElt.src)\n ) {\n /** @type {(result?: any) => void} */ let resolve;\n let promise = new Promise(function (_resolve) {\n resolve = _resolve;\n });\n newElt.addEventListener(\"load\", function () {\n resolve();\n });\n promises.push(promise);\n }\n oldHead.appendChild(newElt);\n ctx.callbacks.afterNodeAdded(newElt);\n added.push(newElt);\n }\n }\n\n // remove all removed elements, after we have appended the new elements to avoid\n // additional network requests for things like style sheets\n for (const removedElement of removed) {\n if (ctx.callbacks.beforeNodeRemoved(removedElement) !== false) {\n oldHead.removeChild(removedElement);\n ctx.callbacks.afterNodeRemoved(removedElement);\n }\n }\n\n ctx.head.afterHeadMorphed(oldHead, {\n added: added,\n kept: preserved,\n removed: removed,\n });\n return promises;\n }\n\n //=============================================================================\n // Create Morph Context Functions\n //=============================================================================\n const createMorphContext = (function () {\n /**\n *\n * @param {Element} oldNode\n * @param {Element} newContent\n * @param {Config} config\n * @returns {MorphContext}\n */\n function createMorphContext(oldNode, newContent, config) {\n const { persistentIds, idMap } = createIdMaps(oldNode, newContent);\n\n const mergedConfig = mergeDefaults(config);\n const morphStyle = mergedConfig.morphStyle || \"outerHTML\";\n if (![\"innerHTML\", \"outerHTML\"].includes(morphStyle)) {\n throw `Do not understand how to morph style ${morphStyle}`;\n }\n\n return {\n target: oldNode,\n newContent: newContent,\n config: mergedConfig,\n morphStyle: morphStyle,\n ignoreActive: mergedConfig.ignoreActive,\n ignoreActiveValue: mergedConfig.ignoreActiveValue,\n restoreFocus: mergedConfig.restoreFocus,\n idMap: idMap,\n persistentIds: persistentIds,\n pantry: createPantry(),\n callbacks: mergedConfig.callbacks,\n head: mergedConfig.head,\n };\n }\n\n /**\n * Deep merges the config object and the Idiomorph.defaults object to\n * produce a final configuration object\n * @param {Config} config\n * @returns {ConfigInternal}\n */\n function mergeDefaults(config) {\n let finalConfig = Object.assign({}, defaults);\n\n // copy top level stuff into final config\n Object.assign(finalConfig, config);\n\n // copy callbacks into final config (do this to deep merge the callbacks)\n finalConfig.callbacks = Object.assign(\n {},\n defaults.callbacks,\n config.callbacks,\n );\n\n // copy head config into final config (do this to deep merge the head)\n finalConfig.head = Object.assign({}, defaults.head, config.head);\n\n return finalConfig;\n }\n\n /**\n * @returns {HTMLDivElement}\n */\n function createPantry() {\n const pantry = document.createElement(\"div\");\n pantry.hidden = true;\n document.body.insertAdjacentElement(\"afterend\", pantry);\n return pantry;\n }\n\n /**\n * Returns all elements with an ID contained within the root element and its descendants\n *\n * @param {Element} root\n * @returns {Element[]}\n */\n function findIdElements(root) {\n let elements = Array.from(root.querySelectorAll(\"[id]\"));\n if (root.id) {\n elements.push(root);\n }\n return elements;\n }\n\n /**\n * A bottom-up algorithm that populates a map of Element -> IdSet.\n * The idSet for a given element is the set of all IDs contained within its subtree.\n * As an optimzation, we filter these IDs through the given list of persistent IDs,\n * because we don't need to bother considering IDed elements that won't be in the new content.\n *\n * @param {Map<Node, Set<string>>} idMap\n * @param {Set<string>} persistentIds\n * @param {Element} root\n * @param {Element[]} elements\n */\n function populateIdMapWithTree(idMap, persistentIds, root, elements) {\n for (const elt of elements) {\n if (persistentIds.has(elt.id)) {\n /** @type {Element|null} */\n let current = elt;\n // walk up the parent hierarchy of that element, adding the id\n // of element to the parent's id set\n while (current) {\n let idSet = idMap.get(current);\n // if the id set doesn't exist, create it and insert it in the map\n if (idSet == null) {\n idSet = new Set();\n idMap.set(current, idSet);\n }\n idSet.add(elt.id);\n\n if (current === root) break;\n current = current.parentElement;\n }\n }\n }\n }\n\n /**\n * This function computes a map of nodes to all ids contained within that node (inclusive of the\n * node). This map can be used to ask if two nodes have intersecting sets of ids, which allows\n * for a looser definition of \"matching\" than tradition id matching, and allows child nodes\n * to contribute to a parent nodes matching.\n *\n * @param {Element} oldContent the old content that will be morphed\n * @param {Element} newContent the new content to morph to\n * @returns {IdSets}\n */\n function createIdMaps(oldContent, newContent) {\n const oldIdElements = findIdElements(oldContent);\n const newIdElements = findIdElements(newContent);\n\n const persistentIds = createPersistentIds(oldIdElements, newIdElements);\n\n /** @type {Map<Node, Set<string>>} */\n let idMap = new Map();\n populateIdMapWithTree(idMap, persistentIds, oldContent, oldIdElements);\n\n /** @ts-ignore - if newContent is a duck-typed parent, pass its single child node as the root to halt upwards iteration */\n const newRoot = newContent.__idiomorphRoot || newContent;\n populateIdMapWithTree(idMap, persistentIds, newRoot, newIdElements);\n\n return { persistentIds, idMap };\n }\n\n /**\n * This function computes the set of ids that persist between the two contents excluding duplicates\n *\n * @param {Element[]} oldIdElements\n * @param {Element[]} newIdElements\n * @returns {Set<string>}\n */\n function createPersistentIds(oldIdElements, newIdElements) {\n let duplicateIds = new Set();\n\n /** @type {Map<string, string>} */\n let oldIdTagNameMap = new Map();\n for (const { id, tagName } of oldIdElements) {\n if (oldIdTagNameMap.has(id)) {\n duplicateIds.add(id);\n } else {\n oldIdTagNameMap.set(id, tagName);\n }\n }\n\n let persistentIds = new Set();\n for (const { id, tagName } of newIdElements) {\n if (persistentIds.has(id)) {\n duplicateIds.add(id);\n } else if (oldIdTagNameMap.get(id) === tagName) {\n persistentIds.add(id);\n }\n // skip if tag types mismatch because its not possible to morph one tag into another\n }\n\n for (const id of duplicateIds) {\n persistentIds.delete(id);\n }\n return persistentIds;\n }\n\n return createMorphContext;\n })();\n\n //=============================================================================\n // HTML Normalization Functions\n //=============================================================================\n const { normalizeElement, normalizeParent } = (function () {\n /** @type {WeakSet<Node>} */\n const generatedByIdiomorph = new WeakSet();\n\n /**\n *\n * @param {Element | Document} content\n * @returns {Element}\n */\n function normalizeElement(content) {\n if (content instanceof Document) {\n return content.documentElement;\n } else {\n return content;\n }\n }\n\n /**\n *\n * @param {null | string | Node | HTMLCollection | Node[] | Document & {generatedByIdiomorph:boolean}} newContent\n * @returns {Element}\n */\n function normalizeParent(newContent) {\n if (newContent == null) {\n return document.createElement(\"div\"); // dummy parent element\n } else if (typeof newContent === \"string\") {\n return normalizeParent(parseContent(newContent));\n } else if (\n generatedByIdiomorph.has(/** @type {Element} */ (newContent))\n ) {\n // the template tag created by idiomorph parsing can serve as a dummy parent\n return /** @type {Element} */ (newContent);\n } else if (newContent instanceof Node) {\n if (newContent.parentNode) {\n // we can't use the parent directly because newContent may have siblings\n // that we don't want in the morph, and reparenting might be expensive (TODO is it?),\n // so we create a duck-typed parent node instead.\n return createDuckTypedParent(newContent);\n } else {\n // a single node is added as a child to a dummy parent\n const dummyParent = document.createElement(\"div\");\n dummyParent.append(newContent);\n return dummyParent;\n }\n } else {\n // all nodes in the array or HTMLElement collection are consolidated under\n // a single dummy parent element\n const dummyParent = document.createElement(\"div\");\n for (const elt of [...newContent]) {\n dummyParent.append(elt);\n }\n return dummyParent;\n }\n }\n\n /**\n * Creates a fake duck-typed parent element to wrap a single node, without actually reparenting it.\n * \"If it walks like a duck, and quacks like a duck, then it must be a duck!\" -- James Whitcomb Riley (1849\u20131916)\n *\n * @param {Node} newContent\n * @returns {Element}\n */\n function createDuckTypedParent(newContent) {\n return /** @type {Element} */ (\n /** @type {unknown} */ ({\n childNodes: [newContent],\n /** @ts-ignore - cover your eyes for a minute, tsc */\n querySelectorAll: (s) => {\n /** @ts-ignore */\n const elements = newContent.querySelectorAll(s);\n /** @ts-ignore */\n return newContent.matches(s) ? [newContent, ...elements] : elements;\n },\n /** @ts-ignore */\n insertBefore: (n, r) => newContent.parentNode.insertBefore(n, r),\n /** @ts-ignore */\n moveBefore: (n, r) => newContent.parentNode.moveBefore(n, r),\n // for later use with populateIdMapWithTree to halt upwards iteration\n get __idiomorphRoot() {\n return newContent;\n },\n })\n );\n }\n\n /**\n *\n * @param {string} newContent\n * @returns {Node | null | DocumentFragment}\n */\n function parseContent(newContent) {\n let parser = new DOMParser();\n\n // remove svgs to avoid false-positive matches on head, etc.\n let contentWithSvgsRemoved = newContent.replace(\n /<svg(\\s[^>]*>|>)([\\s\\S]*?)<\\/svg>/gim,\n \"\",\n );\n\n // if the newContent contains a html, head or body tag, we can simply parse it w/o wrapping\n if (\n contentWithSvgsRemoved.match(/<\\/html>/) ||\n contentWithSvgsRemoved.match(/<\\/head>/) ||\n contentWithSvgsRemoved.match(/<\\/body>/)\n ) {\n let content = parser.parseFromString(newContent, \"text/html\");\n // if it is a full HTML document, return the document itself as the parent container\n if (contentWithSvgsRemoved.match(/<\\/html>/)) {\n generatedByIdiomorph.add(content);\n return content;\n } else {\n // otherwise return the html element as the parent container\n let htmlElement = content.firstChild;\n if (htmlElement) {\n generatedByIdiomorph.add(htmlElement);\n }\n return htmlElement;\n }\n } else {\n // if it is partial HTML, wrap it in a template tag to provide a parent element and also to help\n // deal with touchy tags like tr, tbody, etc.\n let responseDoc = parser.parseFromString(\n \"<body><template>\" + newContent + \"</template></body>\",\n \"text/html\",\n );\n let content = /** @type {HTMLTemplateElement} */ (\n responseDoc.body.querySelector(\"template\")\n ).content;\n generatedByIdiomorph.add(content);\n return content;\n }\n }\n\n return { normalizeElement, normalizeParent };\n })();\n\n //=============================================================================\n // This is what ends up becoming the Idiomorph global object\n //=============================================================================\n return {\n morph,\n defaults,\n };\n})();\n\nfunction morphElements(currentElement, newElement, { callbacks, ...options } = {}) {\n Idiomorph.morph(currentElement, newElement, {\n ...options,\n callbacks: new DefaultIdiomorphCallbacks(callbacks)\n });\n}\n\nfunction morphChildren(currentElement, newElement) {\n morphElements(currentElement, newElement.childNodes, {\n morphStyle: \"innerHTML\"\n });\n}\n\nclass DefaultIdiomorphCallbacks {\n #beforeNodeMorphed\n\n constructor({ beforeNodeMorphed } = {}) {\n this.#beforeNodeMorphed = beforeNodeMorphed || (() => true);\n }\n\n beforeNodeAdded = (node) => {\n return !(node.id && node.hasAttribute(\"data-turbo-permanent\") && document.getElementById(node.id))\n }\n\n beforeNodeMorphed = (currentElement, newElement) => {\n if (currentElement instanceof Element) {\n if (!currentElement.hasAttribute(\"data-turbo-permanent\") && this.#beforeNodeMorphed(currentElement, newElement)) {\n const event = dispatch(\"turbo:before-morph-element\", {\n cancelable: true,\n target: currentElement,\n detail: { currentElement, newElement }\n });\n\n return !event.defaultPrevented\n } else {\n return false\n }\n }\n }\n\n beforeAttributeUpdated = (attributeName, target, mutationType) => {\n const event = dispatch(\"turbo:before-morph-attribute\", {\n cancelable: true,\n target,\n detail: { attributeName, mutationType }\n });\n\n return !event.defaultPrevented\n }\n\n beforeNodeRemoved = (node) => {\n return this.beforeNodeMorphed(node)\n }\n\n afterNodeMorphed = (currentElement, newElement) => {\n if (currentElement instanceof Element) {\n dispatch(\"turbo:morph-element\", {\n target: currentElement,\n detail: { currentElement, newElement }\n });\n }\n }\n}\n\nclass MorphingFrameRenderer extends FrameRenderer {\n static renderElement(currentElement, newElement) {\n dispatch(\"turbo:before-frame-morph\", {\n target: currentElement,\n detail: { currentElement, newElement }\n });\n\n morphChildren(currentElement, newElement);\n }\n\n async preservingPermanentElements(callback) {\n return await callback()\n }\n}\n\nclass ProgressBar {\n static animationDuration = 300 /*ms*/\n\n static get defaultCSS() {\n return unindent`\n .turbo-progress-bar {\n position: fixed;\n display: block;\n top: 0;\n left: 0;\n height: 3px;\n background: #0076ff;\n z-index: 2147483647;\n transition:\n width ${ProgressBar.animationDuration}ms ease-out,\n opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n transform: translate3d(0, 0, 0);\n }\n `\n }\n\n hiding = false\n value = 0\n visible = false\n\n constructor() {\n this.stylesheetElement = this.createStylesheetElement();\n this.progressElement = this.createProgressElement();\n this.installStylesheetElement();\n this.setValue(0);\n }\n\n show() {\n if (!this.visible) {\n this.visible = true;\n this.installProgressElement();\n this.startTrickling();\n }\n }\n\n hide() {\n if (this.visible && !this.hiding) {\n this.hiding = true;\n this.fadeProgressElement(() => {\n this.uninstallProgressElement();\n this.stopTrickling();\n this.visible = false;\n this.hiding = false;\n });\n }\n }\n\n setValue(value) {\n this.value = value;\n this.refresh();\n }\n\n // Private\n\n installStylesheetElement() {\n document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n }\n\n installProgressElement() {\n this.progressElement.style.width = \"0\";\n this.progressElement.style.opacity = \"1\";\n document.documentElement.insertBefore(this.progressElement, document.body);\n this.refresh();\n }\n\n fadeProgressElement(callback) {\n this.progressElement.style.opacity = \"0\";\n setTimeout(callback, ProgressBar.animationDuration * 1.5);\n }\n\n uninstallProgressElement() {\n if (this.progressElement.parentNode) {\n document.documentElement.removeChild(this.progressElement);\n }\n }\n\n startTrickling() {\n if (!this.trickleInterval) {\n this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n }\n }\n\n stopTrickling() {\n window.clearInterval(this.trickleInterval);\n delete this.trickleInterval;\n }\n\n trickle = () => {\n this.setValue(this.value + Math.random() / 100);\n }\n\n refresh() {\n requestAnimationFrame(() => {\n this.progressElement.style.width = `${10 + this.value * 90}%`;\n });\n }\n\n createStylesheetElement() {\n const element = document.createElement(\"style\");\n element.type = \"text/css\";\n element.textContent = ProgressBar.defaultCSS;\n const cspNonce = getCspNonce();\n if (cspNonce) {\n element.nonce = cspNonce;\n }\n return element\n }\n\n createProgressElement() {\n const element = document.createElement(\"div\");\n element.className = \"turbo-progress-bar\";\n return element\n }\n}\n\nclass HeadSnapshot extends Snapshot {\n detailsByOuterHTML = this.children\n .filter((element) => !elementIsNoscript(element))\n .map((element) => elementWithoutNonce(element))\n .reduce((result, element) => {\n const { outerHTML } = element;\n const details =\n outerHTML in result\n ? result[outerHTML]\n : {\n type: elementType(element),\n tracked: elementIsTracked(element),\n elements: []\n };\n return {\n ...result,\n [outerHTML]: {\n ...details,\n elements: [...details.elements, element]\n }\n }\n }, {})\n\n get trackedElementSignature() {\n return Object.keys(this.detailsByOuterHTML)\n .filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked)\n .join(\"\")\n }\n\n getScriptElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot)\n }\n\n getStylesheetElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot)\n }\n\n getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n return Object.keys(this.detailsByOuterHTML)\n .filter((outerHTML) => !(outerHTML in snapshot.detailsByOuterHTML))\n .map((outerHTML) => this.detailsByOuterHTML[outerHTML])\n .filter(({ type }) => type == matchedType)\n .map(({ elements: [element] }) => element)\n }\n\n get provisionalElements() {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n if (type == null && !tracked) {\n return [...result, ...elements]\n } else if (elements.length > 1) {\n return [...result, ...elements.slice(1)]\n } else {\n return result\n }\n }, [])\n }\n\n getMetaValue(name) {\n const element = this.findMetaElementByName(name);\n return element ? element.getAttribute(\"content\") : null\n }\n\n findMetaElementByName(name) {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const {\n elements: [element]\n } = this.detailsByOuterHTML[outerHTML];\n return elementIsMetaElementWithName(element, name) ? element : result\n }, undefined | undefined)\n }\n}\n\nfunction elementType(element) {\n if (elementIsScript(element)) {\n return \"script\"\n } else if (elementIsStylesheet(element)) {\n return \"stylesheet\"\n }\n}\n\nfunction elementIsTracked(element) {\n return element.getAttribute(\"data-turbo-track\") == \"reload\"\n}\n\nfunction elementIsScript(element) {\n const tagName = element.localName;\n return tagName == \"script\"\n}\n\nfunction elementIsNoscript(element) {\n const tagName = element.localName;\n return tagName == \"noscript\"\n}\n\nfunction elementIsStylesheet(element) {\n const tagName = element.localName;\n return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\")\n}\n\nfunction elementIsMetaElementWithName(element, name) {\n const tagName = element.localName;\n return tagName == \"meta\" && element.getAttribute(\"name\") == name\n}\n\nfunction elementWithoutNonce(element) {\n if (element.hasAttribute(\"nonce\")) {\n element.setAttribute(\"nonce\", \"\");\n }\n\n return element\n}\n\nclass PageSnapshot extends Snapshot {\n static fromHTMLString(html = \"\") {\n return this.fromDocument(parseHTMLDocument(html))\n }\n\n static fromElement(element) {\n return this.fromDocument(element.ownerDocument)\n }\n\n static fromDocument({ documentElement, body, head }) {\n return new this(documentElement, body, new HeadSnapshot(head))\n }\n\n constructor(documentElement, body, headSnapshot) {\n super(body);\n this.documentElement = documentElement;\n this.headSnapshot = headSnapshot;\n }\n\n clone() {\n const clonedElement = this.element.cloneNode(true);\n\n const selectElements = this.element.querySelectorAll(\"select\");\n const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n\n for (const [index, source] of selectElements.entries()) {\n const clone = clonedSelectElements[index];\n for (const option of clone.selectedOptions) option.selected = false;\n for (const option of source.selectedOptions) clone.options[option.index].selected = true;\n }\n\n for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n clonedPasswordInput.value = \"\";\n }\n\n return new PageSnapshot(this.documentElement, clonedElement, this.headSnapshot)\n }\n\n get lang() {\n return this.documentElement.getAttribute(\"lang\")\n }\n\n get headElement() {\n return this.headSnapshot.element\n }\n\n get rootLocation() {\n const root = this.getSetting(\"root\") ?? \"/\";\n return expandURL(root)\n }\n\n get cacheControlValue() {\n return this.getSetting(\"cache-control\")\n }\n\n get isPreviewable() {\n return this.cacheControlValue != \"no-preview\"\n }\n\n get isCacheable() {\n return this.cacheControlValue != \"no-cache\"\n }\n\n get isVisitable() {\n return this.getSetting(\"visit-control\") != \"reload\"\n }\n\n get prefersViewTransitions() {\n return this.headSnapshot.getMetaValue(\"view-transition\") === \"same-origin\"\n }\n\n get shouldMorphPage() {\n return this.getSetting(\"refresh-method\") === \"morph\"\n }\n\n get shouldPreserveScrollPosition() {\n return this.getSetting(\"refresh-scroll\") === \"preserve\"\n }\n\n // Private\n\n getSetting(name) {\n return this.headSnapshot.getMetaValue(`turbo-${name}`)\n }\n}\n\nclass ViewTransitioner {\n #viewTransitionStarted = false\n #lastOperation = Promise.resolve()\n\n renderChange(useViewTransition, render) {\n if (useViewTransition && this.viewTransitionsAvailable && !this.#viewTransitionStarted) {\n this.#viewTransitionStarted = true;\n this.#lastOperation = this.#lastOperation.then(async () => {\n await document.startViewTransition(render).finished;\n });\n } else {\n this.#lastOperation = this.#lastOperation.then(render);\n }\n\n return this.#lastOperation\n }\n\n get viewTransitionsAvailable() {\n return document.startViewTransition\n }\n}\n\nconst defaultOptions = {\n action: \"advance\",\n historyChanged: false,\n visitCachedSnapshot: () => {},\n willRender: true,\n updateHistory: true,\n shouldCacheSnapshot: true,\n acceptsStreamResponse: false\n};\n\nconst TimingMetric = {\n visitStart: \"visitStart\",\n requestStart: \"requestStart\",\n requestEnd: \"requestEnd\",\n visitEnd: \"visitEnd\"\n};\n\nconst VisitState = {\n initialized: \"initialized\",\n started: \"started\",\n canceled: \"canceled\",\n failed: \"failed\",\n completed: \"completed\"\n};\n\nconst SystemStatusCode = {\n networkFailure: 0,\n timeoutFailure: -1,\n contentTypeMismatch: -2\n};\n\nconst Direction = {\n advance: \"forward\",\n restore: \"back\",\n replace: \"none\"\n};\n\nclass Visit {\n identifier = uuid() // Required by turbo-ios\n timingMetrics = {}\n\n followedRedirect = false\n historyChanged = false\n scrolled = false\n shouldCacheSnapshot = true\n acceptsStreamResponse = false\n snapshotCached = false\n state = VisitState.initialized\n viewTransitioner = new ViewTransitioner()\n\n constructor(delegate, location, restorationIdentifier, options = {}) {\n this.delegate = delegate;\n this.location = location;\n this.restorationIdentifier = restorationIdentifier || uuid();\n\n const {\n action,\n historyChanged,\n referrer,\n snapshot,\n snapshotHTML,\n response,\n visitCachedSnapshot,\n willRender,\n updateHistory,\n shouldCacheSnapshot,\n acceptsStreamResponse,\n direction\n } = {\n ...defaultOptions,\n ...options\n };\n this.action = action;\n this.historyChanged = historyChanged;\n this.referrer = referrer;\n this.snapshot = snapshot;\n this.snapshotHTML = snapshotHTML;\n this.response = response;\n this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);\n this.isPageRefresh = this.view.isPageRefresh(this);\n this.visitCachedSnapshot = visitCachedSnapshot;\n this.willRender = willRender;\n this.updateHistory = updateHistory;\n this.scrolled = !willRender;\n this.shouldCacheSnapshot = shouldCacheSnapshot;\n this.acceptsStreamResponse = acceptsStreamResponse;\n this.direction = direction || Direction[action];\n }\n\n get adapter() {\n return this.delegate.adapter\n }\n\n get view() {\n return this.delegate.view\n }\n\n get history() {\n return this.delegate.history\n }\n\n get restorationData() {\n return this.history.getRestorationDataForIdentifier(this.restorationIdentifier)\n }\n\n get silent() {\n return this.isSamePage\n }\n\n start() {\n if (this.state == VisitState.initialized) {\n this.recordTimingMetric(TimingMetric.visitStart);\n this.state = VisitState.started;\n this.adapter.visitStarted(this);\n this.delegate.visitStarted(this);\n }\n }\n\n cancel() {\n if (this.state == VisitState.started) {\n if (this.request) {\n this.request.cancel();\n }\n this.cancelRender();\n this.state = VisitState.canceled;\n }\n }\n\n complete() {\n if (this.state == VisitState.started) {\n this.recordTimingMetric(TimingMetric.visitEnd);\n this.adapter.visitCompleted(this);\n this.state = VisitState.completed;\n this.followRedirect();\n\n if (!this.followedRedirect) {\n this.delegate.visitCompleted(this);\n }\n }\n }\n\n fail() {\n if (this.state == VisitState.started) {\n this.state = VisitState.failed;\n this.adapter.visitFailed(this);\n this.delegate.visitCompleted(this);\n }\n }\n\n changeHistory() {\n if (!this.historyChanged && this.updateHistory) {\n const actionForHistory = this.location.href === this.referrer?.href ? \"replace\" : this.action;\n const method = getHistoryMethodForAction(actionForHistory);\n this.history.update(method, this.location, this.restorationIdentifier);\n this.historyChanged = true;\n }\n }\n\n issueRequest() {\n if (this.hasPreloadedResponse()) {\n this.simulateRequest();\n } else if (this.shouldIssueRequest() && !this.request) {\n this.request = new FetchRequest(this, FetchMethod.get, this.location);\n this.request.perform();\n }\n }\n\n simulateRequest() {\n if (this.response) {\n this.startRequest();\n this.recordResponse();\n this.finishRequest();\n }\n }\n\n startRequest() {\n this.recordTimingMetric(TimingMetric.requestStart);\n this.adapter.visitRequestStarted(this);\n }\n\n recordResponse(response = this.response) {\n this.response = response;\n if (response) {\n const { statusCode } = response;\n if (isSuccessful(statusCode)) {\n this.adapter.visitRequestCompleted(this);\n } else {\n this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n }\n }\n }\n\n finishRequest() {\n this.recordTimingMetric(TimingMetric.requestEnd);\n this.adapter.visitRequestFinished(this);\n }\n\n loadResponse() {\n if (this.response) {\n const { statusCode, responseHTML } = this.response;\n this.render(async () => {\n if (this.shouldCacheSnapshot) this.cacheSnapshot();\n if (this.view.renderPromise) await this.view.renderPromise;\n\n if (isSuccessful(statusCode) && responseHTML != null) {\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n await this.renderPageSnapshot(snapshot, false);\n\n this.adapter.visitRendered(this);\n this.complete();\n } else {\n await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\n this.adapter.visitRendered(this);\n this.fail();\n }\n });\n }\n }\n\n getCachedSnapshot() {\n const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n\n if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n if (this.action == \"restore\" || snapshot.isPreviewable) {\n return snapshot\n }\n }\n }\n\n getPreloadedSnapshot() {\n if (this.snapshotHTML) {\n return PageSnapshot.fromHTMLString(this.snapshotHTML)\n }\n }\n\n hasCachedSnapshot() {\n return this.getCachedSnapshot() != null\n }\n\n loadCachedSnapshot() {\n const snapshot = this.getCachedSnapshot();\n if (snapshot) {\n const isPreview = this.shouldIssueRequest();\n this.render(async () => {\n this.cacheSnapshot();\n if (this.isSamePage || this.isPageRefresh) {\n this.adapter.visitRendered(this);\n } else {\n if (this.view.renderPromise) await this.view.renderPromise;\n\n await this.renderPageSnapshot(snapshot, isPreview);\n\n this.adapter.visitRendered(this);\n if (!isPreview) {\n this.complete();\n }\n }\n });\n }\n }\n\n followRedirect() {\n if (this.redirectedToLocation && !this.followedRedirect && this.response?.redirected) {\n this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n action: \"replace\",\n response: this.response,\n shouldCacheSnapshot: false,\n willRender: false\n });\n this.followedRedirect = true;\n }\n }\n\n goToSamePageAnchor() {\n if (this.isSamePage) {\n this.render(async () => {\n this.cacheSnapshot();\n this.performScroll();\n this.changeHistory();\n this.adapter.visitRendered(this);\n });\n }\n }\n\n // Fetch request delegate\n\n prepareRequest(request) {\n if (this.acceptsStreamResponse) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n\n requestStarted() {\n this.startRequest();\n }\n\n requestPreventedHandlingResponse(_request, _response) {}\n\n async requestSucceededWithResponse(request, response) {\n const responseHTML = await response.responseHTML;\n const { redirected, statusCode } = response;\n if (responseHTML == undefined) {\n this.recordResponse({\n statusCode: SystemStatusCode.contentTypeMismatch,\n redirected\n });\n } else {\n this.redirectedToLocation = response.redirected ? response.location : undefined;\n this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n }\n }\n\n async requestFailedWithResponse(request, response) {\n const responseHTML = await response.responseHTML;\n const { redirected, statusCode } = response;\n if (responseHTML == undefined) {\n this.recordResponse({\n statusCode: SystemStatusCode.contentTypeMismatch,\n redirected\n });\n } else {\n this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n }\n }\n\n requestErrored(_request, _error) {\n this.recordResponse({\n statusCode: SystemStatusCode.networkFailure,\n redirected: false\n });\n }\n\n requestFinished() {\n this.finishRequest();\n }\n\n // Scrolling\n\n performScroll() {\n if (!this.scrolled && !this.view.forceReloaded && !this.view.shouldPreserveScrollPosition(this)) {\n if (this.action == \"restore\") {\n this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n } else {\n this.scrollToAnchor() || this.view.scrollToTop();\n }\n if (this.isSamePage) {\n this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n }\n\n this.scrolled = true;\n }\n }\n\n scrollToRestoredPosition() {\n const { scrollPosition } = this.restorationData;\n if (scrollPosition) {\n this.view.scrollToPosition(scrollPosition);\n return true\n }\n }\n\n scrollToAnchor() {\n const anchor = getAnchor(this.location);\n if (anchor != null) {\n this.view.scrollToAnchor(anchor);\n return true\n }\n }\n\n // Instrumentation\n\n recordTimingMetric(metric) {\n this.timingMetrics[metric] = new Date().getTime();\n }\n\n getTimingMetrics() {\n return { ...this.timingMetrics }\n }\n\n // Private\n\n hasPreloadedResponse() {\n return typeof this.response == \"object\"\n }\n\n shouldIssueRequest() {\n if (this.isSamePage) {\n return false\n } else if (this.action == \"restore\") {\n return !this.hasCachedSnapshot()\n } else {\n return this.willRender\n }\n }\n\n cacheSnapshot() {\n if (!this.snapshotCached) {\n this.view.cacheSnapshot(this.snapshot).then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot));\n this.snapshotCached = true;\n }\n }\n\n async render(callback) {\n this.cancelRender();\n await new Promise((resolve) => {\n this.frame =\n document.visibilityState === \"hidden\" ? setTimeout(() => resolve(), 0) : requestAnimationFrame(() => resolve());\n });\n await callback();\n delete this.frame;\n }\n\n async renderPageSnapshot(snapshot, isPreview) {\n await this.viewTransitioner.renderChange(this.view.shouldTransitionTo(snapshot), async () => {\n await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n this.performScroll();\n });\n }\n\n cancelRender() {\n if (this.frame) {\n cancelAnimationFrame(this.frame);\n delete this.frame;\n }\n }\n}\n\nfunction isSuccessful(statusCode) {\n return statusCode >= 200 && statusCode < 300\n}\n\nclass BrowserAdapter {\n progressBar = new ProgressBar()\n\n constructor(session) {\n this.session = session;\n }\n\n visitProposedToLocation(location, options) {\n if (locationIsVisitable(location, this.navigator.rootLocation)) {\n this.navigator.startVisit(location, options?.restorationIdentifier || uuid(), options);\n } else {\n window.location.href = location.toString();\n }\n }\n\n visitStarted(visit) {\n this.location = visit.location;\n visit.loadCachedSnapshot();\n visit.issueRequest();\n visit.goToSamePageAnchor();\n }\n\n visitRequestStarted(visit) {\n this.progressBar.setValue(0);\n if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n this.showVisitProgressBarAfterDelay();\n } else {\n this.showProgressBar();\n }\n }\n\n visitRequestCompleted(visit) {\n visit.loadResponse();\n }\n\n visitRequestFailedWithStatusCode(visit, statusCode) {\n switch (statusCode) {\n case SystemStatusCode.networkFailure:\n case SystemStatusCode.timeoutFailure:\n case SystemStatusCode.contentTypeMismatch:\n return this.reload({\n reason: \"request_failed\",\n context: {\n statusCode\n }\n })\n default:\n return visit.loadResponse()\n }\n }\n\n visitRequestFinished(_visit) {}\n\n visitCompleted(_visit) {\n this.progressBar.setValue(1);\n this.hideVisitProgressBar();\n }\n\n pageInvalidated(reason) {\n this.reload(reason);\n }\n\n visitFailed(_visit) {\n this.progressBar.setValue(1);\n this.hideVisitProgressBar();\n }\n\n visitRendered(_visit) {}\n\n // Link prefetching\n\n linkPrefetchingIsEnabledForLocation(location) {\n return true\n }\n\n // Form Submission Delegate\n\n formSubmissionStarted(_formSubmission) {\n this.progressBar.setValue(0);\n this.showFormProgressBarAfterDelay();\n }\n\n formSubmissionFinished(_formSubmission) {\n this.progressBar.setValue(1);\n this.hideFormProgressBar();\n }\n\n // Private\n\n showVisitProgressBarAfterDelay() {\n this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n\n hideVisitProgressBar() {\n this.progressBar.hide();\n if (this.visitProgressBarTimeout != null) {\n window.clearTimeout(this.visitProgressBarTimeout);\n delete this.visitProgressBarTimeout;\n }\n }\n\n showFormProgressBarAfterDelay() {\n if (this.formProgressBarTimeout == null) {\n this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n }\n\n hideFormProgressBar() {\n this.progressBar.hide();\n if (this.formProgressBarTimeout != null) {\n window.clearTimeout(this.formProgressBarTimeout);\n delete this.formProgressBarTimeout;\n }\n }\n\n showProgressBar = () => {\n this.progressBar.show();\n }\n\n reload(reason) {\n dispatch(\"turbo:reload\", { detail: reason });\n\n window.location.href = this.location?.toString() || window.location.href;\n }\n\n get navigator() {\n return this.session.navigator\n }\n}\n\nclass CacheObserver {\n selector = \"[data-turbo-temporary]\"\n deprecatedSelector = \"[data-turbo-cache=false]\"\n\n started = false\n\n start() {\n if (!this.started) {\n this.started = true;\n addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n }\n }\n\n stop() {\n if (this.started) {\n this.started = false;\n removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n }\n }\n\n removeTemporaryElements = (_event) => {\n for (const element of this.temporaryElements) {\n element.remove();\n }\n }\n\n get temporaryElements() {\n return [...document.querySelectorAll(this.selector), ...this.temporaryElementsWithDeprecation]\n }\n\n get temporaryElementsWithDeprecation() {\n const elements = document.querySelectorAll(this.deprecatedSelector);\n\n if (elements.length) {\n console.warn(\n `The ${this.deprecatedSelector} selector is deprecated and will be removed in a future version. Use ${this.selector} instead.`\n );\n }\n\n return [...elements]\n }\n}\n\nclass FrameRedirector {\n constructor(session, element) {\n this.session = session;\n this.element = element;\n this.linkInterceptor = new LinkInterceptor(this, element);\n this.formSubmitObserver = new FormSubmitObserver(this, element);\n }\n\n start() {\n this.linkInterceptor.start();\n this.formSubmitObserver.start();\n }\n\n stop() {\n this.linkInterceptor.stop();\n this.formSubmitObserver.stop();\n }\n\n // Link interceptor delegate\n\n shouldInterceptLinkClick(element, _location, _event) {\n return this.#shouldRedirect(element)\n }\n\n linkClickIntercepted(element, url, event) {\n const frame = this.#findFrameElement(element);\n if (frame) {\n frame.delegate.linkClickIntercepted(element, url, event);\n }\n }\n\n // Form submit observer delegate\n\n willSubmitForm(element, submitter) {\n return (\n element.closest(\"turbo-frame\") == null &&\n this.#shouldSubmit(element, submitter) &&\n this.#shouldRedirect(element, submitter)\n )\n }\n\n formSubmitted(element, submitter) {\n const frame = this.#findFrameElement(element, submitter);\n if (frame) {\n frame.delegate.formSubmitted(element, submitter);\n }\n }\n\n #shouldSubmit(form, submitter) {\n const action = getAction$1(form, submitter);\n const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n const rootLocation = expandURL(meta?.content ?? \"/\");\n\n return this.#shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation)\n }\n\n #shouldRedirect(element, submitter) {\n const isNavigatable =\n element instanceof HTMLFormElement\n ? this.session.submissionIsNavigatable(element, submitter)\n : this.session.elementIsNavigatable(element);\n\n if (isNavigatable) {\n const frame = this.#findFrameElement(element, submitter);\n return frame ? frame != element.closest(\"turbo-frame\") : false\n } else {\n return false\n }\n }\n\n #findFrameElement(element, submitter) {\n const id = submitter?.getAttribute(\"data-turbo-frame\") || element.getAttribute(\"data-turbo-frame\");\n if (id && id != \"_top\") {\n const frame = this.element.querySelector(`#${id}:not([disabled])`);\n if (frame instanceof FrameElement) {\n return frame\n }\n }\n }\n}\n\nclass History {\n location\n restorationIdentifier = uuid()\n restorationData = {}\n started = false\n pageLoaded = false\n currentIndex = 0\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n addEventListener(\"popstate\", this.onPopState, false);\n addEventListener(\"load\", this.onPageLoad, false);\n this.currentIndex = history.state?.turbo?.restorationIndex || 0;\n this.started = true;\n this.replace(new URL(window.location.href));\n }\n }\n\n stop() {\n if (this.started) {\n removeEventListener(\"popstate\", this.onPopState, false);\n removeEventListener(\"load\", this.onPageLoad, false);\n this.started = false;\n }\n }\n\n push(location, restorationIdentifier) {\n this.update(history.pushState, location, restorationIdentifier);\n }\n\n replace(location, restorationIdentifier) {\n this.update(history.replaceState, location, restorationIdentifier);\n }\n\n update(method, location, restorationIdentifier = uuid()) {\n if (method === history.pushState) ++this.currentIndex;\n\n const state = { turbo: { restorationIdentifier, restorationIndex: this.currentIndex } };\n method.call(history, state, \"\", location.href);\n this.location = location;\n this.restorationIdentifier = restorationIdentifier;\n }\n\n // Restoration data\n\n getRestorationDataForIdentifier(restorationIdentifier) {\n return this.restorationData[restorationIdentifier] || {}\n }\n\n updateRestorationData(additionalData) {\n const { restorationIdentifier } = this;\n const restorationData = this.restorationData[restorationIdentifier];\n this.restorationData[restorationIdentifier] = {\n ...restorationData,\n ...additionalData\n };\n }\n\n // Scroll restoration\n\n assumeControlOfScrollRestoration() {\n if (!this.previousScrollRestoration) {\n this.previousScrollRestoration = history.scrollRestoration ?? \"auto\";\n history.scrollRestoration = \"manual\";\n }\n }\n\n relinquishControlOfScrollRestoration() {\n if (this.previousScrollRestoration) {\n history.scrollRestoration = this.previousScrollRestoration;\n delete this.previousScrollRestoration;\n }\n }\n\n // Event handlers\n\n onPopState = (event) => {\n if (this.shouldHandlePopState()) {\n const { turbo } = event.state || {};\n if (turbo) {\n this.location = new URL(window.location.href);\n const { restorationIdentifier, restorationIndex } = turbo;\n this.restorationIdentifier = restorationIdentifier;\n const direction = restorationIndex > this.currentIndex ? \"forward\" : \"back\";\n this.delegate.historyPoppedToLocationWithRestorationIdentifierAndDirection(this.location, restorationIdentifier, direction);\n this.currentIndex = restorationIndex;\n }\n }\n }\n\n onPageLoad = async (_event) => {\n await nextMicrotask();\n this.pageLoaded = true;\n }\n\n // Private\n\n shouldHandlePopState() {\n // Safari dispatches a popstate event after window's load event, ignore it\n return this.pageIsLoaded()\n }\n\n pageIsLoaded() {\n return this.pageLoaded || document.readyState == \"complete\"\n }\n}\n\nclass LinkPrefetchObserver {\n started = false\n #prefetchedLink = null\n\n constructor(delegate, eventTarget) {\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n\n start() {\n if (this.started) return\n\n if (this.eventTarget.readyState === \"loading\") {\n this.eventTarget.addEventListener(\"DOMContentLoaded\", this.#enable, { once: true });\n } else {\n this.#enable();\n }\n }\n\n stop() {\n if (!this.started) return\n\n this.eventTarget.removeEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n capture: true,\n passive: true\n });\n this.eventTarget.removeEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n capture: true,\n passive: true\n });\n\n this.eventTarget.removeEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n this.started = false;\n }\n\n #enable = () => {\n this.eventTarget.addEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n capture: true,\n passive: true\n });\n this.eventTarget.addEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n capture: true,\n passive: true\n });\n\n this.eventTarget.addEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n this.started = true;\n }\n\n #tryToPrefetchRequest = (event) => {\n if (getMetaContent(\"turbo-prefetch\") === \"false\") return\n\n const target = event.target;\n const isLink = target.matches && target.matches(\"a[href]:not([target^=_]):not([download])\");\n\n if (isLink && this.#isPrefetchable(target)) {\n const link = target;\n const location = getLocationForLink(link);\n\n if (this.delegate.canPrefetchRequestToLocation(link, location)) {\n this.#prefetchedLink = link;\n\n const fetchRequest = new FetchRequest(\n this,\n FetchMethod.get,\n location,\n new URLSearchParams(),\n target\n );\n\n prefetchCache.setLater(location.toString(), fetchRequest, this.#cacheTtl);\n }\n }\n }\n\n #cancelRequestIfObsolete = (event) => {\n if (event.target === this.#prefetchedLink) this.#cancelPrefetchRequest();\n }\n\n #cancelPrefetchRequest = () => {\n prefetchCache.clear();\n this.#prefetchedLink = null;\n }\n\n #tryToUsePrefetchedRequest = (event) => {\n if (event.target.tagName !== \"FORM\" && event.detail.fetchOptions.method === \"GET\") {\n const cached = prefetchCache.get(event.detail.url.toString());\n\n if (cached) {\n // User clicked link, use cache response\n event.detail.fetchRequest = cached;\n }\n\n prefetchCache.clear();\n }\n }\n\n prepareRequest(request) {\n const link = request.target;\n\n request.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n\n const turboFrame = link.closest(\"turbo-frame\");\n const turboFrameTarget = link.getAttribute(\"data-turbo-frame\") || turboFrame?.getAttribute(\"target\") || turboFrame?.id;\n\n if (turboFrameTarget && turboFrameTarget !== \"_top\") {\n request.headers[\"Turbo-Frame\"] = turboFrameTarget;\n }\n }\n\n // Fetch request interface\n\n requestSucceededWithResponse() {}\n\n requestStarted(fetchRequest) {}\n\n requestErrored(fetchRequest) {}\n\n requestFinished(fetchRequest) {}\n\n requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n get #cacheTtl() {\n return Number(getMetaContent(\"turbo-prefetch-cache-time\")) || cacheTtl\n }\n\n #isPrefetchable(link) {\n const href = link.getAttribute(\"href\");\n\n if (!href) return false\n\n if (unfetchableLink(link)) return false\n if (linkToTheSamePage(link)) return false\n if (linkOptsOut(link)) return false\n if (nonSafeLink(link)) return false\n if (eventPrevented(link)) return false\n\n return true\n }\n}\n\nconst unfetchableLink = (link) => {\n return link.origin !== document.location.origin || ![\"http:\", \"https:\"].includes(link.protocol) || link.hasAttribute(\"target\")\n};\n\nconst linkToTheSamePage = (link) => {\n return (link.pathname + link.search === document.location.pathname + document.location.search) || link.href.startsWith(\"#\")\n};\n\nconst linkOptsOut = (link) => {\n if (link.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n if (link.getAttribute(\"data-turbo\") === \"false\") return true\n\n const turboPrefetchParent = findClosestRecursively(link, \"[data-turbo-prefetch]\");\n if (turboPrefetchParent && turboPrefetchParent.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n\n return false\n};\n\nconst nonSafeLink = (link) => {\n const turboMethod = link.getAttribute(\"data-turbo-method\");\n if (turboMethod && turboMethod.toLowerCase() !== \"get\") return true\n\n if (isUJS(link)) return true\n if (link.hasAttribute(\"data-turbo-confirm\")) return true\n if (link.hasAttribute(\"data-turbo-stream\")) return true\n\n return false\n};\n\nconst isUJS = (link) => {\n return link.hasAttribute(\"data-remote\") || link.hasAttribute(\"data-behavior\") || link.hasAttribute(\"data-confirm\") || link.hasAttribute(\"data-method\")\n};\n\nconst eventPrevented = (link) => {\n const event = dispatch(\"turbo:before-prefetch\", { target: link, cancelable: true });\n return event.defaultPrevented\n};\n\nclass Navigator {\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n proposeVisit(location, options = {}) {\n if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n this.delegate.visitProposedToLocation(location, options);\n }\n }\n\n startVisit(locatable, restorationIdentifier, options = {}) {\n this.stop();\n this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, {\n referrer: this.location,\n ...options\n });\n this.currentVisit.start();\n }\n\n submitForm(form, submitter) {\n this.stop();\n this.formSubmission = new FormSubmission(this, form, submitter, true);\n\n this.formSubmission.start();\n }\n\n stop() {\n if (this.formSubmission) {\n this.formSubmission.stop();\n delete this.formSubmission;\n }\n\n if (this.currentVisit) {\n this.currentVisit.cancel();\n delete this.currentVisit;\n }\n }\n\n get adapter() {\n return this.delegate.adapter\n }\n\n get view() {\n return this.delegate.view\n }\n\n get rootLocation() {\n return this.view.snapshot.rootLocation\n }\n\n get history() {\n return this.delegate.history\n }\n\n // Form submission delegate\n\n formSubmissionStarted(formSubmission) {\n // Not all adapters implement formSubmissionStarted\n if (typeof this.adapter.formSubmissionStarted === \"function\") {\n this.adapter.formSubmissionStarted(formSubmission);\n }\n }\n\n async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n if (formSubmission == this.formSubmission) {\n const responseHTML = await fetchResponse.responseHTML;\n if (responseHTML) {\n const shouldCacheSnapshot = formSubmission.isSafe;\n if (!shouldCacheSnapshot) {\n this.view.clearSnapshotCache();\n }\n\n const { statusCode, redirected } = fetchResponse;\n const action = this.#getActionForFormSubmission(formSubmission, fetchResponse);\n const visitOptions = {\n action,\n shouldCacheSnapshot,\n response: { statusCode, responseHTML, redirected }\n };\n this.proposeVisit(fetchResponse.location, visitOptions);\n }\n }\n }\n\n async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n const responseHTML = await fetchResponse.responseHTML;\n\n if (responseHTML) {\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n if (fetchResponse.serverError) {\n await this.view.renderError(snapshot, this.currentVisit);\n } else {\n await this.view.renderPage(snapshot, false, true, this.currentVisit);\n }\n if(!snapshot.shouldPreserveScrollPosition) {\n this.view.scrollToTop();\n }\n this.view.clearSnapshotCache();\n }\n }\n\n formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n\n formSubmissionFinished(formSubmission) {\n // Not all adapters implement formSubmissionFinished\n if (typeof this.adapter.formSubmissionFinished === \"function\") {\n this.adapter.formSubmissionFinished(formSubmission);\n }\n }\n\n // Link prefetching\n\n linkPrefetchingIsEnabledForLocation(location) {\n // Not all adapters implement linkPrefetchingIsEnabledForLocation\n if (typeof this.adapter.linkPrefetchingIsEnabledForLocation === \"function\") {\n return this.adapter.linkPrefetchingIsEnabledForLocation(location)\n }\n\n return true\n }\n\n // Visit delegate\n\n visitStarted(visit) {\n this.delegate.visitStarted(visit);\n }\n\n visitCompleted(visit) {\n this.delegate.visitCompleted(visit);\n delete this.currentVisit;\n }\n\n locationWithActionIsSamePage(location, action) {\n const anchor = getAnchor(location);\n const currentAnchor = getAnchor(this.view.lastRenderedLocation);\n const isRestorationToTop = action === \"restore\" && typeof anchor === \"undefined\";\n\n return (\n action !== \"replace\" &&\n getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) &&\n (isRestorationToTop || (anchor != null && anchor !== currentAnchor))\n )\n }\n\n visitScrolledToSamePageLocation(oldURL, newURL) {\n this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n }\n\n // Visits\n\n get location() {\n return this.history.location\n }\n\n get restorationIdentifier() {\n return this.history.restorationIdentifier\n }\n\n #getActionForFormSubmission(formSubmission, fetchResponse) {\n const { submitter, formElement } = formSubmission;\n return getVisitAction(submitter, formElement) || this.#getDefaultAction(fetchResponse)\n }\n\n #getDefaultAction(fetchResponse) {\n const sameLocationRedirect = fetchResponse.redirected && fetchResponse.location.href === this.location?.href;\n return sameLocationRedirect ? \"replace\" : \"advance\"\n }\n}\n\nconst PageStage = {\n initial: 0,\n loading: 1,\n interactive: 2,\n complete: 3\n};\n\nclass PageObserver {\n stage = PageStage.initial\n started = false\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n if (this.stage == PageStage.initial) {\n this.stage = PageStage.loading;\n }\n document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n addEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n removeEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = false;\n }\n }\n\n interpretReadyState = () => {\n const { readyState } = this;\n if (readyState == \"interactive\") {\n this.pageIsInteractive();\n } else if (readyState == \"complete\") {\n this.pageIsComplete();\n }\n }\n\n pageIsInteractive() {\n if (this.stage == PageStage.loading) {\n this.stage = PageStage.interactive;\n this.delegate.pageBecameInteractive();\n }\n }\n\n pageIsComplete() {\n this.pageIsInteractive();\n if (this.stage == PageStage.interactive) {\n this.stage = PageStage.complete;\n this.delegate.pageLoaded();\n }\n }\n\n pageWillUnload = () => {\n this.delegate.pageWillUnload();\n }\n\n get readyState() {\n return document.readyState\n }\n}\n\nclass ScrollObserver {\n started = false\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n addEventListener(\"scroll\", this.onScroll, false);\n this.onScroll();\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n removeEventListener(\"scroll\", this.onScroll, false);\n this.started = false;\n }\n }\n\n onScroll = () => {\n this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n }\n\n // Private\n\n updatePosition(position) {\n this.delegate.scrollPositionChanged(position);\n }\n}\n\nclass StreamMessageRenderer {\n render({ fragment }) {\n Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => {\n withAutofocusFromFragment(fragment, () => {\n withPreservedFocus(() => {\n document.documentElement.appendChild(fragment);\n });\n });\n });\n }\n\n // Bardo delegate\n\n enteringBardo(currentPermanentElement, newPermanentElement) {\n newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n }\n\n leavingBardo() {}\n}\n\nfunction getPermanentElementMapForFragment(fragment) {\n const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n const permanentElementMap = {};\n for (const permanentElementInDocument of permanentElementsInDocument) {\n const { id } = permanentElementInDocument;\n\n for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n\n if (elementInStream) {\n permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n }\n }\n }\n\n return permanentElementMap\n}\n\nasync function withAutofocusFromFragment(fragment, callback) {\n const generatedID = `turbo-stream-autofocus-${uuid()}`;\n const turboStreams = fragment.querySelectorAll(\"turbo-stream\");\n const elementWithAutofocus = firstAutofocusableElementInStreams(turboStreams);\n let willAutofocusId = null;\n\n if (elementWithAutofocus) {\n if (elementWithAutofocus.id) {\n willAutofocusId = elementWithAutofocus.id;\n } else {\n willAutofocusId = generatedID;\n }\n\n elementWithAutofocus.id = willAutofocusId;\n }\n\n callback();\n await nextRepaint();\n\n const hasNoActiveElement = document.activeElement == null || document.activeElement == document.body;\n\n if (hasNoActiveElement && willAutofocusId) {\n const elementToAutofocus = document.getElementById(willAutofocusId);\n\n if (elementIsFocusable(elementToAutofocus)) {\n elementToAutofocus.focus();\n }\n if (elementToAutofocus && elementToAutofocus.id == generatedID) {\n elementToAutofocus.removeAttribute(\"id\");\n }\n }\n}\n\nasync function withPreservedFocus(callback) {\n const [activeElementBeforeRender, activeElementAfterRender] = await around(callback, () => document.activeElement);\n\n const restoreFocusTo = activeElementBeforeRender && activeElementBeforeRender.id;\n\n if (restoreFocusTo) {\n const elementToFocus = document.getElementById(restoreFocusTo);\n\n if (elementIsFocusable(elementToFocus) && elementToFocus != activeElementAfterRender) {\n elementToFocus.focus();\n }\n }\n}\n\nfunction firstAutofocusableElementInStreams(nodeListOfStreamElements) {\n for (const streamElement of nodeListOfStreamElements) {\n const elementWithAutofocus = queryAutofocusableElement(streamElement.templateElement.content);\n\n if (elementWithAutofocus) return elementWithAutofocus\n }\n\n return null\n}\n\nclass StreamObserver {\n sources = new Set()\n #started = false\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.#started) {\n this.#started = true;\n addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n\n stop() {\n if (this.#started) {\n this.#started = false;\n removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n\n connectStreamSource(source) {\n if (!this.streamSourceIsConnected(source)) {\n this.sources.add(source);\n source.addEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n\n disconnectStreamSource(source) {\n if (this.streamSourceIsConnected(source)) {\n this.sources.delete(source);\n source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n\n streamSourceIsConnected(source) {\n return this.sources.has(source)\n }\n\n inspectFetchResponse = (event) => {\n const response = fetchResponseFromEvent(event);\n if (response && fetchResponseIsStream(response)) {\n event.preventDefault();\n this.receiveMessageResponse(response);\n }\n }\n\n receiveMessageEvent = (event) => {\n if (this.#started && typeof event.data == \"string\") {\n this.receiveMessageHTML(event.data);\n }\n }\n\n async receiveMessageResponse(response) {\n const html = await response.responseHTML;\n if (html) {\n this.receiveMessageHTML(html);\n }\n }\n\n receiveMessageHTML(html) {\n this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n }\n}\n\nfunction fetchResponseFromEvent(event) {\n const fetchResponse = event.detail?.fetchResponse;\n if (fetchResponse instanceof FetchResponse) {\n return fetchResponse\n }\n}\n\nfunction fetchResponseIsStream(response) {\n const contentType = response.contentType ?? \"\";\n return contentType.startsWith(StreamMessage.contentType)\n}\n\nclass ErrorRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n const { documentElement, body } = document;\n\n documentElement.replaceChild(newElement, body);\n }\n\n async render() {\n this.replaceHeadAndBody();\n this.activateScriptElements();\n }\n\n replaceHeadAndBody() {\n const { documentElement, head } = document;\n documentElement.replaceChild(this.newHead, head);\n this.renderElement(this.currentElement, this.newElement);\n }\n\n activateScriptElements() {\n for (const replaceableElement of this.scriptElements) {\n const parentNode = replaceableElement.parentNode;\n if (parentNode) {\n const element = activateScriptElement(replaceableElement);\n parentNode.replaceChild(element, replaceableElement);\n }\n }\n }\n\n get newHead() {\n return this.newSnapshot.headSnapshot.element\n }\n\n get scriptElements() {\n return document.documentElement.querySelectorAll(\"script\")\n }\n}\n\nclass PageRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n if (document.body && newElement instanceof HTMLBodyElement) {\n document.body.replaceWith(newElement);\n } else {\n document.documentElement.appendChild(newElement);\n }\n }\n\n get shouldRender() {\n return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical\n }\n\n get reloadReason() {\n if (!this.newSnapshot.isVisitable) {\n return {\n reason: \"turbo_visit_control_is_reload\"\n }\n }\n\n if (!this.trackedElementsAreIdentical) {\n return {\n reason: \"tracked_element_mismatch\"\n }\n }\n }\n\n async prepareToRender() {\n this.#setLanguage();\n await this.mergeHead();\n }\n\n async render() {\n if (this.willRender) {\n await this.replaceBody();\n }\n }\n\n finishRendering() {\n super.finishRendering();\n if (!this.isPreview) {\n this.focusFirstAutofocusableElement();\n }\n }\n\n get currentHeadSnapshot() {\n return this.currentSnapshot.headSnapshot\n }\n\n get newHeadSnapshot() {\n return this.newSnapshot.headSnapshot\n }\n\n get newElement() {\n return this.newSnapshot.element\n }\n\n #setLanguage() {\n const { documentElement } = this.currentSnapshot;\n const { lang } = this.newSnapshot;\n\n if (lang) {\n documentElement.setAttribute(\"lang\", lang);\n } else {\n documentElement.removeAttribute(\"lang\");\n }\n }\n\n async mergeHead() {\n const mergedHeadElements = this.mergeProvisionalElements();\n const newStylesheetElements = this.copyNewHeadStylesheetElements();\n this.copyNewHeadScriptElements();\n\n await mergedHeadElements;\n await newStylesheetElements;\n\n if (this.willRender) {\n this.removeUnusedDynamicStylesheetElements();\n }\n }\n\n async replaceBody() {\n await this.preservingPermanentElements(async () => {\n this.activateNewBody();\n await this.assignNewBody();\n });\n }\n\n get trackedElementsAreIdentical() {\n return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature\n }\n\n async copyNewHeadStylesheetElements() {\n const loadingElements = [];\n\n for (const element of this.newHeadStylesheetElements) {\n loadingElements.push(waitForLoad(element));\n\n document.head.appendChild(element);\n }\n\n await Promise.all(loadingElements);\n }\n\n copyNewHeadScriptElements() {\n for (const element of this.newHeadScriptElements) {\n document.head.appendChild(activateScriptElement(element));\n }\n }\n\n removeUnusedDynamicStylesheetElements() {\n for (const element of this.unusedDynamicStylesheetElements) {\n document.head.removeChild(element);\n }\n }\n\n async mergeProvisionalElements() {\n const newHeadElements = [...this.newHeadProvisionalElements];\n\n for (const element of this.currentHeadProvisionalElements) {\n if (!this.isCurrentElementInElementList(element, newHeadElements)) {\n document.head.removeChild(element);\n }\n }\n\n for (const element of newHeadElements) {\n document.head.appendChild(element);\n }\n }\n\n isCurrentElementInElementList(element, elementList) {\n for (const [index, newElement] of elementList.entries()) {\n // if title element...\n if (element.tagName == \"TITLE\") {\n if (newElement.tagName != \"TITLE\") {\n continue\n }\n if (element.innerHTML == newElement.innerHTML) {\n elementList.splice(index, 1);\n return true\n }\n }\n\n // if any other element...\n if (newElement.isEqualNode(element)) {\n elementList.splice(index, 1);\n return true\n }\n }\n\n return false\n }\n\n removeCurrentHeadProvisionalElements() {\n for (const element of this.currentHeadProvisionalElements) {\n document.head.removeChild(element);\n }\n }\n\n copyNewHeadProvisionalElements() {\n for (const element of this.newHeadProvisionalElements) {\n document.head.appendChild(element);\n }\n }\n\n activateNewBody() {\n document.adoptNode(this.newElement);\n this.activateNewBodyScriptElements();\n }\n\n activateNewBodyScriptElements() {\n for (const inertScriptElement of this.newBodyScriptElements) {\n const activatedScriptElement = activateScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n }\n\n async assignNewBody() {\n await this.renderElement(this.currentElement, this.newElement);\n }\n\n get unusedDynamicStylesheetElements() {\n return this.oldHeadStylesheetElements.filter((element) => {\n return element.getAttribute(\"data-turbo-track\") === \"dynamic\"\n })\n }\n\n get oldHeadStylesheetElements() {\n return this.currentHeadSnapshot.getStylesheetElementsNotInSnapshot(this.newHeadSnapshot)\n }\n\n get newHeadStylesheetElements() {\n return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot)\n }\n\n get newHeadScriptElements() {\n return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot)\n }\n\n get currentHeadProvisionalElements() {\n return this.currentHeadSnapshot.provisionalElements\n }\n\n get newHeadProvisionalElements() {\n return this.newHeadSnapshot.provisionalElements\n }\n\n get newBodyScriptElements() {\n return this.newElement.querySelectorAll(\"script\")\n }\n}\n\nclass MorphingPageRenderer extends PageRenderer {\n static renderElement(currentElement, newElement) {\n morphElements(currentElement, newElement, {\n callbacks: {\n beforeNodeMorphed: element => !canRefreshFrame(element)\n }\n });\n\n for (const frame of currentElement.querySelectorAll(\"turbo-frame\")) {\n if (canRefreshFrame(frame)) frame.reload();\n }\n\n dispatch(\"turbo:morph\", { detail: { currentElement, newElement } });\n }\n\n async preservingPermanentElements(callback) {\n return await callback()\n }\n\n get renderMethod() {\n return \"morph\"\n }\n\n get shouldAutofocus() {\n return false\n }\n}\n\nfunction canRefreshFrame(frame) {\n return frame instanceof FrameElement &&\n frame.src &&\n frame.refresh === \"morph\" &&\n !frame.closest(\"[data-turbo-permanent]\")\n}\n\nclass SnapshotCache {\n keys = []\n snapshots = {}\n\n constructor(size) {\n this.size = size;\n }\n\n has(location) {\n return toCacheKey(location) in this.snapshots\n }\n\n get(location) {\n if (this.has(location)) {\n const snapshot = this.read(location);\n this.touch(location);\n return snapshot\n }\n }\n\n put(location, snapshot) {\n this.write(location, snapshot);\n this.touch(location);\n return snapshot\n }\n\n clear() {\n this.snapshots = {};\n }\n\n // Private\n\n read(location) {\n return this.snapshots[toCacheKey(location)]\n }\n\n write(location, snapshot) {\n this.snapshots[toCacheKey(location)] = snapshot;\n }\n\n touch(location) {\n const key = toCacheKey(location);\n const index = this.keys.indexOf(key);\n if (index > -1) this.keys.splice(index, 1);\n this.keys.unshift(key);\n this.trim();\n }\n\n trim() {\n for (const key of this.keys.splice(this.size)) {\n delete this.snapshots[key];\n }\n }\n}\n\nclass PageView extends View {\n snapshotCache = new SnapshotCache(10)\n lastRenderedLocation = new URL(location.href)\n forceReloaded = false\n\n shouldTransitionTo(newSnapshot) {\n return this.snapshot.prefersViewTransitions && newSnapshot.prefersViewTransitions\n }\n\n renderPage(snapshot, isPreview = false, willRender = true, visit) {\n const shouldMorphPage = this.isPageRefresh(visit) && this.snapshot.shouldMorphPage;\n const rendererClass = shouldMorphPage ? MorphingPageRenderer : PageRenderer;\n\n const renderer = new rendererClass(this.snapshot, snapshot, isPreview, willRender);\n\n if (!renderer.shouldRender) {\n this.forceReloaded = true;\n } else {\n visit?.changeHistory();\n }\n\n return this.render(renderer)\n }\n\n renderError(snapshot, visit) {\n visit?.changeHistory();\n const renderer = new ErrorRenderer(this.snapshot, snapshot, false);\n return this.render(renderer)\n }\n\n clearSnapshotCache() {\n this.snapshotCache.clear();\n }\n\n async cacheSnapshot(snapshot = this.snapshot) {\n if (snapshot.isCacheable) {\n this.delegate.viewWillCacheSnapshot();\n const { lastRenderedLocation: location } = this;\n await nextEventLoopTick();\n const cachedSnapshot = snapshot.clone();\n this.snapshotCache.put(location, cachedSnapshot);\n return cachedSnapshot\n }\n }\n\n getCachedSnapshotForLocation(location) {\n return this.snapshotCache.get(location)\n }\n\n isPageRefresh(visit) {\n return !visit || (this.lastRenderedLocation.pathname === visit.location.pathname && visit.action === \"replace\")\n }\n\n shouldPreserveScrollPosition(visit) {\n return this.isPageRefresh(visit) && this.snapshot.shouldPreserveScrollPosition\n }\n\n get snapshot() {\n return PageSnapshot.fromElement(this.element)\n }\n}\n\nclass Preloader {\n selector = \"a[data-turbo-preload]\"\n\n constructor(delegate, snapshotCache) {\n this.delegate = delegate;\n this.snapshotCache = snapshotCache;\n }\n\n start() {\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", this.#preloadAll);\n } else {\n this.preloadOnLoadLinksForView(document.body);\n }\n }\n\n stop() {\n document.removeEventListener(\"DOMContentLoaded\", this.#preloadAll);\n }\n\n preloadOnLoadLinksForView(element) {\n for (const link of element.querySelectorAll(this.selector)) {\n if (this.delegate.shouldPreloadLink(link)) {\n this.preloadURL(link);\n }\n }\n }\n\n async preloadURL(link) {\n const location = new URL(link.href);\n\n if (this.snapshotCache.has(location)) {\n return\n }\n\n const fetchRequest = new FetchRequest(this, FetchMethod.get, location, new URLSearchParams(), link);\n await fetchRequest.perform();\n }\n\n // Fetch request delegate\n\n prepareRequest(fetchRequest) {\n fetchRequest.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n }\n\n async requestSucceededWithResponse(fetchRequest, fetchResponse) {\n try {\n const responseHTML = await fetchResponse.responseHTML;\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n\n this.snapshotCache.put(fetchRequest.url, snapshot);\n } catch (_) {\n // If we cannot preload that is ok!\n }\n }\n\n requestStarted(fetchRequest) {}\n\n requestErrored(fetchRequest) {}\n\n requestFinished(fetchRequest) {}\n\n requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n #preloadAll = () => {\n this.preloadOnLoadLinksForView(document.body);\n }\n}\n\nclass Cache {\n constructor(session) {\n this.session = session;\n }\n\n clear() {\n this.session.clearCache();\n }\n\n resetCacheControl() {\n this.#setCacheControl(\"\");\n }\n\n exemptPageFromCache() {\n this.#setCacheControl(\"no-cache\");\n }\n\n exemptPageFromPreview() {\n this.#setCacheControl(\"no-preview\");\n }\n\n #setCacheControl(value) {\n setMetaContent(\"turbo-cache-control\", value);\n }\n}\n\nclass Session {\n navigator = new Navigator(this)\n history = new History(this)\n view = new PageView(this, document.documentElement)\n adapter = new BrowserAdapter(this)\n\n pageObserver = new PageObserver(this)\n cacheObserver = new CacheObserver()\n linkPrefetchObserver = new LinkPrefetchObserver(this, document)\n linkClickObserver = new LinkClickObserver(this, window)\n formSubmitObserver = new FormSubmitObserver(this, document)\n scrollObserver = new ScrollObserver(this)\n streamObserver = new StreamObserver(this)\n formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement)\n frameRedirector = new FrameRedirector(this, document.documentElement)\n streamMessageRenderer = new StreamMessageRenderer()\n cache = new Cache(this)\n\n enabled = true\n started = false\n #pageRefreshDebouncePeriod = 150\n\n constructor(recentRequests) {\n this.recentRequests = recentRequests;\n this.preloader = new Preloader(this, this.view.snapshotCache);\n this.debouncedRefresh = this.refresh;\n this.pageRefreshDebouncePeriod = this.pageRefreshDebouncePeriod;\n }\n\n start() {\n if (!this.started) {\n this.pageObserver.start();\n this.cacheObserver.start();\n this.linkPrefetchObserver.start();\n this.formLinkClickObserver.start();\n this.linkClickObserver.start();\n this.formSubmitObserver.start();\n this.scrollObserver.start();\n this.streamObserver.start();\n this.frameRedirector.start();\n this.history.start();\n this.preloader.start();\n this.started = true;\n this.enabled = true;\n }\n }\n\n disable() {\n this.enabled = false;\n }\n\n stop() {\n if (this.started) {\n this.pageObserver.stop();\n this.cacheObserver.stop();\n this.linkPrefetchObserver.stop();\n this.formLinkClickObserver.stop();\n this.linkClickObserver.stop();\n this.formSubmitObserver.stop();\n this.scrollObserver.stop();\n this.streamObserver.stop();\n this.frameRedirector.stop();\n this.history.stop();\n this.preloader.stop();\n this.started = false;\n }\n }\n\n registerAdapter(adapter) {\n this.adapter = adapter;\n }\n\n visit(location, options = {}) {\n const frameElement = options.frame ? document.getElementById(options.frame) : null;\n\n if (frameElement instanceof FrameElement) {\n const action = options.action || getVisitAction(frameElement);\n\n frameElement.delegate.proposeVisitIfNavigatedWithAction(frameElement, action);\n frameElement.src = location.toString();\n } else {\n this.navigator.proposeVisit(expandURL(location), options);\n }\n }\n\n refresh(url, requestId) {\n const isRecentRequest = requestId && this.recentRequests.has(requestId);\n const isCurrentUrl = url === document.baseURI;\n if (!isRecentRequest && !this.navigator.currentVisit && isCurrentUrl) {\n this.visit(url, { action: \"replace\", shouldCacheSnapshot: false });\n }\n }\n\n connectStreamSource(source) {\n this.streamObserver.connectStreamSource(source);\n }\n\n disconnectStreamSource(source) {\n this.streamObserver.disconnectStreamSource(source);\n }\n\n renderStreamMessage(message) {\n this.streamMessageRenderer.render(StreamMessage.wrap(message));\n }\n\n clearCache() {\n this.view.clearSnapshotCache();\n }\n\n setProgressBarDelay(delay) {\n console.warn(\n \"Please replace `session.setProgressBarDelay(delay)` with `session.progressBarDelay = delay`. The function is deprecated and will be removed in a future version of Turbo.`\"\n );\n\n this.progressBarDelay = delay;\n }\n\n set progressBarDelay(delay) {\n config.drive.progressBarDelay = delay;\n }\n\n get progressBarDelay() {\n return config.drive.progressBarDelay\n }\n\n set drive(value) {\n config.drive.enabled = value;\n }\n\n get drive() {\n return config.drive.enabled\n }\n\n set formMode(value) {\n config.forms.mode = value;\n }\n\n get formMode() {\n return config.forms.mode\n }\n\n get location() {\n return this.history.location\n }\n\n get restorationIdentifier() {\n return this.history.restorationIdentifier\n }\n\n get pageRefreshDebouncePeriod() {\n return this.#pageRefreshDebouncePeriod\n }\n\n set pageRefreshDebouncePeriod(value) {\n this.refresh = debounce(this.debouncedRefresh.bind(this), value);\n this.#pageRefreshDebouncePeriod = value;\n }\n\n // Preloader delegate\n\n shouldPreloadLink(element) {\n const isUnsafe = element.hasAttribute(\"data-turbo-method\");\n const isStream = element.hasAttribute(\"data-turbo-stream\");\n const frameTarget = element.getAttribute(\"data-turbo-frame\");\n const frame = frameTarget == \"_top\" ?\n null :\n document.getElementById(frameTarget) || findClosestRecursively(element, \"turbo-frame:not([disabled])\");\n\n if (isUnsafe || isStream || frame instanceof FrameElement) {\n return false\n } else {\n const location = new URL(element.href);\n\n return this.elementIsNavigatable(element) && locationIsVisitable(location, this.snapshot.rootLocation)\n }\n }\n\n // History delegate\n\n historyPoppedToLocationWithRestorationIdentifierAndDirection(location, restorationIdentifier, direction) {\n if (this.enabled) {\n this.navigator.startVisit(location, restorationIdentifier, {\n action: \"restore\",\n historyChanged: true,\n direction\n });\n } else {\n this.adapter.pageInvalidated({\n reason: \"turbo_disabled\"\n });\n }\n }\n\n // Scroll observer delegate\n\n scrollPositionChanged(position) {\n this.history.updateRestorationData({ scrollPosition: position });\n }\n\n // Form click observer delegate\n\n willSubmitFormLinkToLocation(link, location) {\n return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation)\n }\n\n submittedFormLinkToLocation() {}\n\n // Link hover observer delegate\n\n canPrefetchRequestToLocation(link, location) {\n return (\n this.elementIsNavigatable(link) &&\n locationIsVisitable(location, this.snapshot.rootLocation) &&\n this.navigator.linkPrefetchingIsEnabledForLocation(location)\n )\n }\n\n // Link click observer delegate\n\n willFollowLinkToLocation(link, location, event) {\n return (\n this.elementIsNavigatable(link) &&\n locationIsVisitable(location, this.snapshot.rootLocation) &&\n this.applicationAllowsFollowingLinkToLocation(link, location, event)\n )\n }\n\n followedLinkToLocation(link, location) {\n const action = this.getActionForLink(link);\n const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n\n this.visit(location.href, { action, acceptsStreamResponse });\n }\n\n // Navigator delegate\n\n allowsVisitingLocationWithAction(location, action) {\n return this.locationWithActionIsSamePage(location, action) || this.applicationAllowsVisitingLocation(location)\n }\n\n visitProposedToLocation(location, options) {\n extendURLWithDeprecatedProperties(location);\n this.adapter.visitProposedToLocation(location, options);\n }\n\n // Visit delegate\n\n visitStarted(visit) {\n if (!visit.acceptsStreamResponse) {\n markAsBusy(document.documentElement);\n this.view.markVisitDirection(visit.direction);\n }\n extendURLWithDeprecatedProperties(visit.location);\n if (!visit.silent) {\n this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n }\n }\n\n visitCompleted(visit) {\n this.view.unmarkVisitDirection();\n clearBusyState(document.documentElement);\n this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n }\n\n locationWithActionIsSamePage(location, action) {\n return this.navigator.locationWithActionIsSamePage(location, action)\n }\n\n visitScrolledToSamePageLocation(oldURL, newURL) {\n this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n }\n\n // Form submit observer delegate\n\n willSubmitForm(form, submitter) {\n const action = getAction$1(form, submitter);\n\n return (\n this.submissionIsNavigatable(form, submitter) &&\n locationIsVisitable(expandURL(action), this.snapshot.rootLocation)\n )\n }\n\n formSubmitted(form, submitter) {\n this.navigator.submitForm(form, submitter);\n }\n\n // Page observer delegate\n\n pageBecameInteractive() {\n this.view.lastRenderedLocation = this.location;\n this.notifyApplicationAfterPageLoad();\n }\n\n pageLoaded() {\n this.history.assumeControlOfScrollRestoration();\n }\n\n pageWillUnload() {\n this.history.relinquishControlOfScrollRestoration();\n }\n\n // Stream observer delegate\n\n receivedMessageFromStream(message) {\n this.renderStreamMessage(message);\n }\n\n // Page view delegate\n\n viewWillCacheSnapshot() {\n if (!this.navigator.currentVisit?.silent) {\n this.notifyApplicationBeforeCachingSnapshot();\n }\n }\n\n allowsImmediateRender({ element }, options) {\n const event = this.notifyApplicationBeforeRender(element, options);\n const {\n defaultPrevented,\n detail: { render }\n } = event;\n\n if (this.view.renderer && render) {\n this.view.renderer.renderElement = render;\n }\n\n return !defaultPrevented\n }\n\n viewRenderedSnapshot(_snapshot, _isPreview, renderMethod) {\n this.view.lastRenderedLocation = this.history.location;\n this.notifyApplicationAfterRender(renderMethod);\n }\n\n preloadOnLoadLinksForView(element) {\n this.preloader.preloadOnLoadLinksForView(element);\n }\n\n viewInvalidated(reason) {\n this.adapter.pageInvalidated(reason);\n }\n\n // Frame element\n\n frameLoaded(frame) {\n this.notifyApplicationAfterFrameLoad(frame);\n }\n\n frameRendered(fetchResponse, frame) {\n this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n }\n\n // Application events\n\n applicationAllowsFollowingLinkToLocation(link, location, ev) {\n const event = this.notifyApplicationAfterClickingLinkToLocation(link, location, ev);\n return !event.defaultPrevented\n }\n\n applicationAllowsVisitingLocation(location) {\n const event = this.notifyApplicationBeforeVisitingLocation(location);\n return !event.defaultPrevented\n }\n\n notifyApplicationAfterClickingLinkToLocation(link, location, event) {\n return dispatch(\"turbo:click\", {\n target: link,\n detail: { url: location.href, originalEvent: event },\n cancelable: true\n })\n }\n\n notifyApplicationBeforeVisitingLocation(location) {\n return dispatch(\"turbo:before-visit\", {\n detail: { url: location.href },\n cancelable: true\n })\n }\n\n notifyApplicationAfterVisitingLocation(location, action) {\n return dispatch(\"turbo:visit\", { detail: { url: location.href, action } })\n }\n\n notifyApplicationBeforeCachingSnapshot() {\n return dispatch(\"turbo:before-cache\")\n }\n\n notifyApplicationBeforeRender(newBody, options) {\n return dispatch(\"turbo:before-render\", {\n detail: { newBody, ...options },\n cancelable: true\n })\n }\n\n notifyApplicationAfterRender(renderMethod) {\n return dispatch(\"turbo:render\", { detail: { renderMethod } })\n }\n\n notifyApplicationAfterPageLoad(timing = {}) {\n return dispatch(\"turbo:load\", {\n detail: { url: this.location.href, timing }\n })\n }\n\n notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n dispatchEvent(\n new HashChangeEvent(\"hashchange\", {\n oldURL: oldURL.toString(),\n newURL: newURL.toString()\n })\n );\n }\n\n notifyApplicationAfterFrameLoad(frame) {\n return dispatch(\"turbo:frame-load\", { target: frame })\n }\n\n notifyApplicationAfterFrameRender(fetchResponse, frame) {\n return dispatch(\"turbo:frame-render\", {\n detail: { fetchResponse },\n target: frame,\n cancelable: true\n })\n }\n\n // Helpers\n\n submissionIsNavigatable(form, submitter) {\n if (config.forms.mode == \"off\") {\n return false\n } else {\n const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n\n if (config.forms.mode == \"optin\") {\n return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null\n } else {\n return submitterIsNavigatable && this.elementIsNavigatable(form)\n }\n }\n }\n\n elementIsNavigatable(element) {\n const container = findClosestRecursively(element, \"[data-turbo]\");\n const withinFrame = findClosestRecursively(element, \"turbo-frame\");\n\n // Check if Drive is enabled on the session or we're within a Frame.\n if (config.drive.enabled || withinFrame) {\n // Element is navigatable by default, unless `data-turbo=\"false\"`.\n if (container) {\n return container.getAttribute(\"data-turbo\") != \"false\"\n } else {\n return true\n }\n } else {\n // Element isn't navigatable by default, unless `data-turbo=\"true\"`.\n if (container) {\n return container.getAttribute(\"data-turbo\") == \"true\"\n } else {\n return false\n }\n }\n }\n\n // Private\n\n getActionForLink(link) {\n return getVisitAction(link) || \"advance\"\n }\n\n get snapshot() {\n return this.view.snapshot\n }\n}\n\n// Older versions of the Turbo Native adapters referenced the\n// `Location#absoluteURL` property in their implementations of\n// the `Adapter#visitProposedToLocation()` and `#visitStarted()`\n// methods. The Location class has since been removed in favor\n// of the DOM URL API, and accordingly all Adapter methods now\n// receive URL objects.\n//\n// We alias #absoluteURL to #toString() here to avoid crashing\n// older adapters which do not expect URL objects. We should\n// consider removing this support at some point in the future.\n\nfunction extendURLWithDeprecatedProperties(url) {\n Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\n\nconst deprecatedLocationPropertyDescriptors = {\n absoluteURL: {\n get() {\n return this.toString()\n }\n }\n};\n\nconst session = new Session(recentRequests);\nconst { cache, navigator: navigator$1 } = session;\n\n/**\n * Starts the main session.\n * This initialises any necessary observers such as those to monitor\n * link interactions.\n */\nfunction start() {\n session.start();\n}\n\n/**\n * Registers an adapter for the main session.\n *\n * @param adapter Adapter to register\n */\nfunction registerAdapter(adapter) {\n session.registerAdapter(adapter);\n}\n\n/**\n * Performs an application visit to the given location.\n *\n * @param location Location to visit (a URL or path)\n * @param options Options to apply\n * @param options.action Type of history navigation to apply (\"restore\",\n * \"replace\" or \"advance\")\n * @param options.historyChanged Specifies whether the browser history has\n * already been changed for this visit or not\n * @param options.referrer Specifies the referrer of this visit such that\n * navigations to the same page will not result in a new history entry.\n * @param options.snapshotHTML Cached snapshot to render\n * @param options.response Response of the specified location\n */\nfunction visit(location, options) {\n session.visit(location, options);\n}\n\n/**\n * Connects a stream source to the main session.\n *\n * @param source Stream source to connect\n */\nfunction connectStreamSource(source) {\n session.connectStreamSource(source);\n}\n\n/**\n * Disconnects a stream source from the main session.\n *\n * @param source Stream source to disconnect\n */\nfunction disconnectStreamSource(source) {\n session.disconnectStreamSource(source);\n}\n\n/**\n * Renders a stream message to the main session by appending it to the\n * current document.\n *\n * @param message Message to render\n */\nfunction renderStreamMessage(message) {\n session.renderStreamMessage(message);\n}\n\n/**\n * Removes all entries from the Turbo Drive page cache.\n * Call this when state has changed on the server that may affect cached pages.\n *\n * @deprecated since version 7.2.0 in favor of `Turbo.cache.clear()`\n */\nfunction clearCache() {\n console.warn(\n \"Please replace `Turbo.clearCache()` with `Turbo.cache.clear()`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n );\n session.clearCache();\n}\n\n/**\n * Sets the delay after which the progress bar will appear during navigation.\n *\n * The progress bar appears after 500ms by default.\n *\n * Note that this method has no effect when used with the iOS or Android\n * adapters.\n *\n * @param delay Time to delay in milliseconds\n */\nfunction setProgressBarDelay(delay) {\n console.warn(\n \"Please replace `Turbo.setProgressBarDelay(delay)` with `Turbo.config.drive.progressBarDelay = delay`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n );\n config.drive.progressBarDelay = delay;\n}\n\nfunction setConfirmMethod(confirmMethod) {\n console.warn(\n \"Please replace `Turbo.setConfirmMethod(confirmMethod)` with `Turbo.config.forms.confirm = confirmMethod`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n );\n config.forms.confirm = confirmMethod;\n}\n\nfunction setFormMode(mode) {\n console.warn(\n \"Please replace `Turbo.setFormMode(mode)` with `Turbo.config.forms.mode = mode`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n );\n config.forms.mode = mode;\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n __proto__: null,\n navigator: navigator$1,\n session: session,\n cache: cache,\n PageRenderer: PageRenderer,\n PageSnapshot: PageSnapshot,\n FrameRenderer: FrameRenderer,\n fetch: fetchWithTurboHeaders,\n config: config,\n start: start,\n registerAdapter: registerAdapter,\n visit: visit,\n connectStreamSource: connectStreamSource,\n disconnectStreamSource: disconnectStreamSource,\n renderStreamMessage: renderStreamMessage,\n clearCache: clearCache,\n setProgressBarDelay: setProgressBarDelay,\n setConfirmMethod: setConfirmMethod,\n setFormMode: setFormMode\n});\n\nclass TurboFrameMissingError extends Error {}\n\nclass FrameController {\n fetchResponseLoaded = (_fetchResponse) => Promise.resolve()\n #currentFetchRequest = null\n #resolveVisitPromise = () => {}\n #connected = false\n #hasBeenLoaded = false\n #ignoredAttributes = new Set()\n #shouldMorphFrame = false\n action = null\n\n constructor(element) {\n this.element = element;\n this.view = new FrameView(this, this.element);\n this.appearanceObserver = new AppearanceObserver(this, this.element);\n this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);\n this.linkInterceptor = new LinkInterceptor(this, this.element);\n this.restorationIdentifier = uuid();\n this.formSubmitObserver = new FormSubmitObserver(this, this.element);\n }\n\n // Frame delegate\n\n connect() {\n if (!this.#connected) {\n this.#connected = true;\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n } else {\n this.#loadSourceURL();\n }\n this.formLinkClickObserver.start();\n this.linkInterceptor.start();\n this.formSubmitObserver.start();\n }\n }\n\n disconnect() {\n if (this.#connected) {\n this.#connected = false;\n this.appearanceObserver.stop();\n this.formLinkClickObserver.stop();\n this.linkInterceptor.stop();\n this.formSubmitObserver.stop();\n }\n }\n\n disabledChanged() {\n if (this.loadingStyle == FrameLoadingStyle.eager) {\n this.#loadSourceURL();\n }\n }\n\n sourceURLChanged() {\n if (this.#isIgnoringChangesTo(\"src\")) return\n\n if (this.element.isConnected) {\n this.complete = false;\n }\n\n if (this.loadingStyle == FrameLoadingStyle.eager || this.#hasBeenLoaded) {\n this.#loadSourceURL();\n }\n }\n\n sourceURLReloaded() {\n const { refresh, src } = this.element;\n\n this.#shouldMorphFrame = src && refresh === \"morph\";\n\n this.element.removeAttribute(\"complete\");\n this.element.src = null;\n this.element.src = src;\n return this.element.loaded\n }\n\n loadingStyleChanged() {\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n } else {\n this.appearanceObserver.stop();\n this.#loadSourceURL();\n }\n }\n\n async #loadSourceURL() {\n if (this.enabled && this.isActive && !this.complete && this.sourceURL) {\n this.element.loaded = this.#visit(expandURL(this.sourceURL));\n this.appearanceObserver.stop();\n await this.element.loaded;\n this.#hasBeenLoaded = true;\n }\n }\n\n async loadResponse(fetchResponse) {\n if (fetchResponse.redirected || (fetchResponse.succeeded && fetchResponse.isHTML)) {\n this.sourceURL = fetchResponse.response.url;\n }\n\n try {\n const html = await fetchResponse.responseHTML;\n if (html) {\n const document = parseHTMLDocument(html);\n const pageSnapshot = PageSnapshot.fromDocument(document);\n\n if (pageSnapshot.isVisitable) {\n await this.#loadFrameResponse(fetchResponse, document);\n } else {\n await this.#handleUnvisitableFrameResponse(fetchResponse);\n }\n }\n } finally {\n this.#shouldMorphFrame = false;\n this.fetchResponseLoaded = () => Promise.resolve();\n }\n }\n\n // Appearance observer delegate\n\n elementAppearedInViewport(element) {\n this.proposeVisitIfNavigatedWithAction(element, getVisitAction(element));\n this.#loadSourceURL();\n }\n\n // Form link click observer delegate\n\n willSubmitFormLinkToLocation(link) {\n return this.#shouldInterceptNavigation(link)\n }\n\n submittedFormLinkToLocation(link, _location, form) {\n const frame = this.#findFrameElement(link);\n if (frame) form.setAttribute(\"data-turbo-frame\", frame.id);\n }\n\n // Link interceptor delegate\n\n shouldInterceptLinkClick(element, _location, _event) {\n return this.#shouldInterceptNavigation(element)\n }\n\n linkClickIntercepted(element, location) {\n this.#navigateFrame(element, location);\n }\n\n // Form submit observer delegate\n\n willSubmitForm(element, submitter) {\n return element.closest(\"turbo-frame\") == this.element && this.#shouldInterceptNavigation(element, submitter)\n }\n\n formSubmitted(element, submitter) {\n if (this.formSubmission) {\n this.formSubmission.stop();\n }\n\n this.formSubmission = new FormSubmission(this, element, submitter);\n const { fetchRequest } = this.formSubmission;\n this.prepareRequest(fetchRequest);\n this.formSubmission.start();\n }\n\n // Fetch request delegate\n\n prepareRequest(request) {\n request.headers[\"Turbo-Frame\"] = this.id;\n\n if (this.currentNavigationElement?.hasAttribute(\"data-turbo-stream\")) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n\n requestStarted(_request) {\n markAsBusy(this.element);\n }\n\n requestPreventedHandlingResponse(_request, _response) {\n this.#resolveVisitPromise();\n }\n\n async requestSucceededWithResponse(request, response) {\n await this.loadResponse(response);\n this.#resolveVisitPromise();\n }\n\n async requestFailedWithResponse(request, response) {\n await this.loadResponse(response);\n this.#resolveVisitPromise();\n }\n\n requestErrored(request, error) {\n console.error(error);\n this.#resolveVisitPromise();\n }\n\n requestFinished(_request) {\n clearBusyState(this.element);\n }\n\n // Form submission delegate\n\n formSubmissionStarted({ formElement }) {\n markAsBusy(formElement, this.#findFrameElement(formElement));\n }\n\n formSubmissionSucceededWithResponse(formSubmission, response) {\n const frame = this.#findFrameElement(formSubmission.formElement, formSubmission.submitter);\n\n frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(formSubmission.submitter, formSubmission.formElement, frame));\n frame.delegate.loadResponse(response);\n\n if (!formSubmission.isSafe) {\n session.clearCache();\n }\n }\n\n formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n this.element.delegate.loadResponse(fetchResponse);\n session.clearCache();\n }\n\n formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n\n formSubmissionFinished({ formElement }) {\n clearBusyState(formElement, this.#findFrameElement(formElement));\n }\n\n // View delegate\n\n allowsImmediateRender({ element: newFrame }, options) {\n const event = dispatch(\"turbo:before-frame-render\", {\n target: this.element,\n detail: { newFrame, ...options },\n cancelable: true\n });\n\n const {\n defaultPrevented,\n detail: { render }\n } = event;\n\n if (this.view.renderer && render) {\n this.view.renderer.renderElement = render;\n }\n\n return !defaultPrevented\n }\n\n viewRenderedSnapshot(_snapshot, _isPreview, _renderMethod) {}\n\n preloadOnLoadLinksForView(element) {\n session.preloadOnLoadLinksForView(element);\n }\n\n viewInvalidated() {}\n\n // Frame renderer delegate\n\n willRenderFrame(currentElement, _newElement) {\n this.previousFrameElement = currentElement.cloneNode(true);\n }\n\n visitCachedSnapshot = ({ element }) => {\n const frame = element.querySelector(\"#\" + this.element.id);\n\n if (frame && this.previousFrameElement) {\n frame.replaceChildren(...this.previousFrameElement.children);\n }\n\n delete this.previousFrameElement;\n }\n\n // Private\n\n async #loadFrameResponse(fetchResponse, document) {\n const newFrameElement = await this.extractForeignFrameElement(document.body);\n const rendererClass = this.#shouldMorphFrame ? MorphingFrameRenderer : FrameRenderer;\n\n if (newFrameElement) {\n const snapshot = new Snapshot(newFrameElement);\n const renderer = new rendererClass(this, this.view.snapshot, snapshot, false, false);\n if (this.view.renderPromise) await this.view.renderPromise;\n this.changeHistory();\n\n await this.view.render(renderer);\n this.complete = true;\n session.frameRendered(fetchResponse, this.element);\n session.frameLoaded(this.element);\n await this.fetchResponseLoaded(fetchResponse);\n } else if (this.#willHandleFrameMissingFromResponse(fetchResponse)) {\n this.#handleFrameMissingFromResponse(fetchResponse);\n }\n }\n\n async #visit(url) {\n const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);\n\n this.#currentFetchRequest?.cancel();\n this.#currentFetchRequest = request;\n\n return new Promise((resolve) => {\n this.#resolveVisitPromise = () => {\n this.#resolveVisitPromise = () => {};\n this.#currentFetchRequest = null;\n resolve();\n };\n request.perform();\n })\n }\n\n #navigateFrame(element, url, submitter) {\n const frame = this.#findFrameElement(element, submitter);\n\n frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(submitter, element, frame));\n\n this.#withCurrentNavigationElement(element, () => {\n frame.src = url;\n });\n }\n\n proposeVisitIfNavigatedWithAction(frame, action = null) {\n this.action = action;\n\n if (this.action) {\n const pageSnapshot = PageSnapshot.fromElement(frame).clone();\n const { visitCachedSnapshot } = frame.delegate;\n\n frame.delegate.fetchResponseLoaded = async (fetchResponse) => {\n if (frame.src) {\n const { statusCode, redirected } = fetchResponse;\n const responseHTML = await fetchResponse.responseHTML;\n const response = { statusCode, redirected, responseHTML };\n const options = {\n response,\n visitCachedSnapshot,\n willRender: false,\n updateHistory: false,\n restorationIdentifier: this.restorationIdentifier,\n snapshot: pageSnapshot\n };\n\n if (this.action) options.action = this.action;\n\n session.visit(frame.src, options);\n }\n };\n }\n }\n\n changeHistory() {\n if (this.action) {\n const method = getHistoryMethodForAction(this.action);\n session.history.update(method, expandURL(this.element.src || \"\"), this.restorationIdentifier);\n }\n }\n\n async #handleUnvisitableFrameResponse(fetchResponse) {\n console.warn(\n `The response (${fetchResponse.statusCode}) from <turbo-frame id=\"${this.element.id}\"> is performing a full page visit due to turbo-visit-control.`\n );\n\n await this.#visitResponse(fetchResponse.response);\n }\n\n #willHandleFrameMissingFromResponse(fetchResponse) {\n this.element.setAttribute(\"complete\", \"\");\n\n const response = fetchResponse.response;\n const visit = async (url, options) => {\n if (url instanceof Response) {\n this.#visitResponse(url);\n } else {\n session.visit(url, options);\n }\n };\n\n const event = dispatch(\"turbo:frame-missing\", {\n target: this.element,\n detail: { response, visit },\n cancelable: true\n });\n\n return !event.defaultPrevented\n }\n\n #handleFrameMissingFromResponse(fetchResponse) {\n this.view.missing();\n this.#throwFrameMissingError(fetchResponse);\n }\n\n #throwFrameMissingError(fetchResponse) {\n const message = `The response (${fetchResponse.statusCode}) did not contain the expected <turbo-frame id=\"${this.element.id}\"> and will be ignored. To perform a full page visit instead, set turbo-visit-control to reload.`;\n throw new TurboFrameMissingError(message)\n }\n\n async #visitResponse(response) {\n const wrapped = new FetchResponse(response);\n const responseHTML = await wrapped.responseHTML;\n const { location, redirected, statusCode } = wrapped;\n\n return session.visit(location, { response: { redirected, statusCode, responseHTML } })\n }\n\n #findFrameElement(element, submitter) {\n const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n return getFrameElementById(id) ?? this.element\n }\n\n async extractForeignFrameElement(container) {\n let element;\n const id = CSS.escape(this.id);\n\n try {\n element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n if (element) {\n return element\n }\n\n element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL);\n if (element) {\n await element.loaded;\n return await this.extractForeignFrameElement(element)\n }\n } catch (error) {\n console.error(error);\n return new FrameElement()\n }\n\n return null\n }\n\n #formActionIsVisitable(form, submitter) {\n const action = getAction$1(form, submitter);\n\n return locationIsVisitable(expandURL(action), this.rootLocation)\n }\n\n #shouldInterceptNavigation(element, submitter) {\n const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n\n if (element instanceof HTMLFormElement && !this.#formActionIsVisitable(element, submitter)) {\n return false\n }\n\n if (!this.enabled || id == \"_top\") {\n return false\n }\n\n if (id) {\n const frameElement = getFrameElementById(id);\n if (frameElement) {\n return !frameElement.disabled\n }\n }\n\n if (!session.elementIsNavigatable(element)) {\n return false\n }\n\n if (submitter && !session.elementIsNavigatable(submitter)) {\n return false\n }\n\n return true\n }\n\n // Computed properties\n\n get id() {\n return this.element.id\n }\n\n get enabled() {\n return !this.element.disabled\n }\n\n get sourceURL() {\n if (this.element.src) {\n return this.element.src\n }\n }\n\n set sourceURL(sourceURL) {\n this.#ignoringChangesToAttribute(\"src\", () => {\n this.element.src = sourceURL ?? null;\n });\n }\n\n get loadingStyle() {\n return this.element.loading\n }\n\n get isLoading() {\n return this.formSubmission !== undefined || this.#resolveVisitPromise() !== undefined\n }\n\n get complete() {\n return this.element.hasAttribute(\"complete\")\n }\n\n set complete(value) {\n if (value) {\n this.element.setAttribute(\"complete\", \"\");\n } else {\n this.element.removeAttribute(\"complete\");\n }\n }\n\n get isActive() {\n return this.element.isActive && this.#connected\n }\n\n get rootLocation() {\n const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n const root = meta?.content ?? \"/\";\n return expandURL(root)\n }\n\n #isIgnoringChangesTo(attributeName) {\n return this.#ignoredAttributes.has(attributeName)\n }\n\n #ignoringChangesToAttribute(attributeName, callback) {\n this.#ignoredAttributes.add(attributeName);\n callback();\n this.#ignoredAttributes.delete(attributeName);\n }\n\n #withCurrentNavigationElement(element, callback) {\n this.currentNavigationElement = element;\n callback();\n delete this.currentNavigationElement;\n }\n}\n\nfunction getFrameElementById(id) {\n if (id != null) {\n const element = document.getElementById(id);\n if (element instanceof FrameElement) {\n return element\n }\n }\n}\n\nfunction activateElement(element, currentURL) {\n if (element) {\n const src = element.getAttribute(\"src\");\n if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n throw new Error(`Matching <turbo-frame id=\"${element.id}\"> element has a source URL which references itself`)\n }\n if (element.ownerDocument !== document) {\n element = document.importNode(element, true);\n }\n\n if (element instanceof FrameElement) {\n element.connectedCallback();\n element.disconnectedCallback();\n return element\n }\n }\n}\n\nconst StreamActions = {\n after() {\n this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e.nextSibling));\n },\n\n append() {\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach((e) => e.append(this.templateContent));\n },\n\n before() {\n this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e));\n },\n\n prepend() {\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach((e) => e.prepend(this.templateContent));\n },\n\n remove() {\n this.targetElements.forEach((e) => e.remove());\n },\n\n replace() {\n const method = this.getAttribute(\"method\");\n\n this.targetElements.forEach((targetElement) => {\n if (method === \"morph\") {\n morphElements(targetElement, this.templateContent);\n } else {\n targetElement.replaceWith(this.templateContent);\n }\n });\n },\n\n update() {\n const method = this.getAttribute(\"method\");\n\n this.targetElements.forEach((targetElement) => {\n if (method === \"morph\") {\n morphChildren(targetElement, this.templateContent);\n } else {\n targetElement.innerHTML = \"\";\n targetElement.append(this.templateContent);\n }\n });\n },\n\n refresh() {\n session.refresh(this.baseURI, this.requestId);\n }\n};\n\n// <turbo-stream action=replace target=id><template>...\n\n/**\n * Renders updates to the page from a stream of messages.\n *\n * Using the `action` attribute, this can be configured one of eight ways:\n *\n * - `after` - inserts the result after the target\n * - `append` - appends the result to the target\n * - `before` - inserts the result before the target\n * - `prepend` - prepends the result to the target\n * - `refresh` - initiates a page refresh\n * - `remove` - removes the target\n * - `replace` - replaces the outer HTML of the target\n * - `update` - replaces the inner HTML of the target\n *\n * @customElement turbo-stream\n * @example\n * <turbo-stream action=\"append\" target=\"dom_id\">\n * <template>\n * Content to append to target designated with the dom_id.\n * </template>\n * </turbo-stream>\n */\nclass StreamElement extends HTMLElement {\n static async renderElement(newElement) {\n await newElement.performAction();\n }\n\n async connectedCallback() {\n try {\n await this.render();\n } catch (error) {\n console.error(error);\n } finally {\n this.disconnect();\n }\n }\n\n async render() {\n return (this.renderPromise ??= (async () => {\n const event = this.beforeRenderEvent;\n\n if (this.dispatchEvent(event)) {\n await nextRepaint();\n await event.detail.render(this);\n }\n })())\n }\n\n disconnect() {\n try {\n this.remove();\n // eslint-disable-next-line no-empty\n } catch {}\n }\n\n /**\n * Removes duplicate children (by ID)\n */\n removeDuplicateTargetChildren() {\n this.duplicateChildren.forEach((c) => c.remove());\n }\n\n /**\n * Gets the list of duplicate children (i.e. those with the same ID)\n */\n get duplicateChildren() {\n const existingChildren = this.targetElements.flatMap((e) => [...e.children]).filter((c) => !!c.getAttribute(\"id\"));\n const newChildrenIds = [...(this.templateContent?.children || [])].filter((c) => !!c.getAttribute(\"id\")).map((c) => c.getAttribute(\"id\"));\n\n return existingChildren.filter((c) => newChildrenIds.includes(c.getAttribute(\"id\")))\n }\n\n /**\n * Gets the action function to be performed.\n */\n get performAction() {\n if (this.action) {\n const actionFunction = StreamActions[this.action];\n if (actionFunction) {\n return actionFunction\n }\n this.#raise(\"unknown action\");\n }\n this.#raise(\"action attribute is missing\");\n }\n\n /**\n * Gets the target elements which the template will be rendered to.\n */\n get targetElements() {\n if (this.target) {\n return this.targetElementsById\n } else if (this.targets) {\n return this.targetElementsByQuery\n } else {\n this.#raise(\"target or targets attribute is missing\");\n }\n }\n\n /**\n * Gets the contents of the main `<template>`.\n */\n get templateContent() {\n return this.templateElement.content.cloneNode(true)\n }\n\n /**\n * Gets the main `<template>` used for rendering\n */\n get templateElement() {\n if (this.firstElementChild === null) {\n const template = this.ownerDocument.createElement(\"template\");\n this.appendChild(template);\n return template\n } else if (this.firstElementChild instanceof HTMLTemplateElement) {\n return this.firstElementChild\n }\n this.#raise(\"first child element must be a <template> element\");\n }\n\n /**\n * Gets the current action.\n */\n get action() {\n return this.getAttribute(\"action\")\n }\n\n /**\n * Gets the current target (an element ID) to which the result will\n * be rendered.\n */\n get target() {\n return this.getAttribute(\"target\")\n }\n\n /**\n * Gets the current \"targets\" selector (a CSS selector)\n */\n get targets() {\n return this.getAttribute(\"targets\")\n }\n\n /**\n * Reads the request-id attribute\n */\n get requestId() {\n return this.getAttribute(\"request-id\")\n }\n\n #raise(message) {\n throw new Error(`${this.description}: ${message}`)\n }\n\n get description() {\n return (this.outerHTML.match(/<[^>]+>/) ?? [])[0] ?? \"<turbo-stream>\"\n }\n\n get beforeRenderEvent() {\n return new CustomEvent(\"turbo:before-stream-render\", {\n bubbles: true,\n cancelable: true,\n detail: { newStream: this, render: StreamElement.renderElement }\n })\n }\n\n get targetElementsById() {\n const element = this.ownerDocument?.getElementById(this.target);\n\n if (element !== null) {\n return [element]\n } else {\n return []\n }\n }\n\n get targetElementsByQuery() {\n const elements = this.ownerDocument?.querySelectorAll(this.targets);\n\n if (elements.length !== 0) {\n return Array.prototype.slice.call(elements)\n } else {\n return []\n }\n }\n}\n\nclass StreamSourceElement extends HTMLElement {\n streamSource = null\n\n connectedCallback() {\n this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src);\n\n connectStreamSource(this.streamSource);\n }\n\n disconnectedCallback() {\n if (this.streamSource) {\n this.streamSource.close();\n\n disconnectStreamSource(this.streamSource);\n }\n }\n\n get src() {\n return this.getAttribute(\"src\") || \"\"\n }\n}\n\nFrameElement.delegateConstructor = FrameController;\n\nif (customElements.get(\"turbo-frame\") === undefined) {\n customElements.define(\"turbo-frame\", FrameElement);\n}\n\nif (customElements.get(\"turbo-stream\") === undefined) {\n customElements.define(\"turbo-stream\", StreamElement);\n}\n\nif (customElements.get(\"turbo-stream-source\") === undefined) {\n customElements.define(\"turbo-stream-source\", StreamSourceElement);\n}\n\n(() => {\n let element = document.currentScript;\n if (!element) return\n if (element.hasAttribute(\"data-turbo-suppress-warning\")) return\n\n element = element.parentElement;\n while (element) {\n if (element == document.body) {\n return console.warn(\n unindent`\n You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do!\n\n Load your application\u2019s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\n For more information, see: https://turbo.hotwired.dev/handbook/building#working-with-script-elements\n\n \u2014\u2014\n Suppress this warning by adding a \"data-turbo-suppress-warning\" attribute to: %s\n `,\n element.outerHTML\n )\n }\n\n element = element.parentElement;\n }\n})();\n\nwindow.Turbo = { ...Turbo, StreamActions };\nstart();\n\nexport { FetchEnctype, FetchMethod, FetchRequest, FetchResponse, FrameElement, FrameLoadingStyle, FrameRenderer, PageRenderer, PageSnapshot, StreamActions, StreamElement, StreamSourceElement, cache, clearCache, config, connectStreamSource, disconnectStreamSource, fetchWithTurboHeaders as fetch, fetchEnctypeFromString, fetchMethodFromString, isSafe, navigator$1 as navigator, registerAdapter, renderStreamMessage, session, setConfirmMethod, setFormMode, setProgressBarDelay, start, visit };\n", "let consumer\n\nexport async function getConsumer() {\n return consumer || setConsumer(createConsumer().then(setConsumer))\n}\n\nexport function setConsumer(newConsumer) {\n return consumer = newConsumer\n}\n\nexport async function createConsumer() {\n const { createConsumer } = await import(/* webpackChunkName: \"actioncable\" */ \"@rails/actioncable/src\")\n return createConsumer()\n}\n\nexport async function subscribeTo(channel, mixin) {\n const { subscriptions } = await getConsumer()\n return subscriptions.create(channel, mixin)\n}\n", "// Based on https://github.com/nathan7/snakeize\n//\n// This software is released under the MIT license:\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\nexport default function walk (obj) {\n if (!obj || typeof obj !== 'object') return obj;\n if (obj instanceof Date || obj instanceof RegExp) return obj;\n if (Array.isArray(obj)) return obj.map(walk);\n return Object.keys(obj).reduce(function (acc, key) {\n var camel = key[0].toLowerCase() + key.slice(1).replace(/([A-Z]+)/g, function (m, x) {\n return '_' + x.toLowerCase();\n });\n acc[camel] = walk(obj[key]);\n return acc;\n }, {});\n};", "import { connectStreamSource, disconnectStreamSource } from \"@hotwired/turbo\"\nimport { subscribeTo } from \"./cable\"\nimport snakeize from \"./snakeize\"\n\nclass TurboCableStreamSourceElement extends HTMLElement {\n static observedAttributes = [\"channel\", \"signed-stream-name\"]\n\n async connectedCallback() {\n connectStreamSource(this)\n this.subscription = await subscribeTo(this.channel, {\n received: this.dispatchMessageEvent.bind(this),\n connected: this.subscriptionConnected.bind(this),\n disconnected: this.subscriptionDisconnected.bind(this)\n })\n }\n\n disconnectedCallback() {\n disconnectStreamSource(this)\n if (this.subscription) this.subscription.unsubscribe()\n this.subscriptionDisconnected()\n }\n\n attributeChangedCallback() {\n if (this.subscription) {\n this.disconnectedCallback()\n this.connectedCallback()\n }\n }\n\n dispatchMessageEvent(data) {\n const event = new MessageEvent(\"message\", { data })\n return this.dispatchEvent(event)\n }\n\n subscriptionConnected() {\n this.setAttribute(\"connected\", \"\")\n }\n\n subscriptionDisconnected() {\n this.removeAttribute(\"connected\")\n }\n\n get channel() {\n const channel = this.getAttribute(\"channel\")\n const signed_stream_name = this.getAttribute(\"signed-stream-name\")\n return { channel, signed_stream_name, ...snakeize({ ...this.dataset }) }\n }\n}\n\n\nif (customElements.get(\"turbo-cable-stream-source\") === undefined) {\n customElements.define(\"turbo-cable-stream-source\", TurboCableStreamSourceElement)\n}\n", "export function encodeMethodIntoRequestBody(event) {\n if (event.target instanceof HTMLFormElement) {\n const { target: form, detail: { fetchOptions } } = event\n\n form.addEventListener(\"turbo:submit-start\", ({ detail: { formSubmission: { submitter } } }) => {\n const body = isBodyInit(fetchOptions.body) ? fetchOptions.body : new URLSearchParams()\n const method = determineFetchMethod(submitter, body, form)\n\n if (!/get/i.test(method)) {\n if (/post/i.test(method)) {\n body.delete(\"_method\")\n } else {\n body.set(\"_method\", method)\n }\n\n fetchOptions.method = \"post\"\n }\n }, { once: true })\n }\n}\n\nfunction determineFetchMethod(submitter, body, form) {\n const formMethod = determineFormMethod(submitter)\n const overrideMethod = body.get(\"_method\")\n const method = form.getAttribute(\"method\") || \"get\"\n\n if (typeof formMethod == \"string\") {\n return formMethod\n } else if (typeof overrideMethod == \"string\") {\n return overrideMethod\n } else {\n return method\n }\n}\n\nfunction determineFormMethod(submitter) {\n if (submitter instanceof HTMLButtonElement || submitter instanceof HTMLInputElement) {\n // Rails 7 ActionView::Helpers::FormBuilder#button method has an override\n // for formmethod if the button does not have name or value attributes\n // set, which is the default. This means that if you use <%= f.button\n // formmethod: :delete %>, it will generate a <button name=\"_method\"\n // value=\"delete\" formmethod=\"post\">. Therefore, if the submitter's name\n // is already _method, it's value attribute already contains the desired\n // method.\n if (submitter.name === '_method') {\n return submitter.value\n } else if (submitter.hasAttribute(\"formmethod\")) {\n return submitter.formMethod\n } else {\n return null\n }\n } else {\n return null\n }\n}\n\nfunction isBodyInit(body) {\n return body instanceof FormData || body instanceof URLSearchParams\n}\n", "import \"./cable_stream_source_element\"\n\nimport * as Turbo from \"@hotwired/turbo\"\nexport { Turbo }\n\nimport * as cable from \"./cable\"\nexport { cable }\n\nimport { encodeMethodIntoRequestBody } from \"./fetch_requests\"\n\nwindow.Turbo = Turbo\n\naddEventListener(\"turbo:before-fetch-request\", encodeMethodIntoRequestBody)\n", "/*\nStimulus 3.2.1\nCopyright \u00A9 2023 Basecamp, LLC\n */\nclass EventListener {\n constructor(eventTarget, eventName, eventOptions) {\n this.eventTarget = eventTarget;\n this.eventName = eventName;\n this.eventOptions = eventOptions;\n this.unorderedBindings = new Set();\n }\n connect() {\n this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n }\n disconnect() {\n this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n }\n bindingConnected(binding) {\n this.unorderedBindings.add(binding);\n }\n bindingDisconnected(binding) {\n this.unorderedBindings.delete(binding);\n }\n handleEvent(event) {\n const extendedEvent = extendEvent(event);\n for (const binding of this.bindings) {\n if (extendedEvent.immediatePropagationStopped) {\n break;\n }\n else {\n binding.handleEvent(extendedEvent);\n }\n }\n }\n hasBindings() {\n return this.unorderedBindings.size > 0;\n }\n get bindings() {\n return Array.from(this.unorderedBindings).sort((left, right) => {\n const leftIndex = left.index, rightIndex = right.index;\n return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n });\n }\n}\nfunction extendEvent(event) {\n if (\"immediatePropagationStopped\" in event) {\n return event;\n }\n else {\n const { stopImmediatePropagation } = event;\n return Object.assign(event, {\n immediatePropagationStopped: false,\n stopImmediatePropagation() {\n this.immediatePropagationStopped = true;\n stopImmediatePropagation.call(this);\n },\n });\n }\n}\n\nclass Dispatcher {\n constructor(application) {\n this.application = application;\n this.eventListenerMaps = new Map();\n this.started = false;\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.eventListeners.forEach((eventListener) => eventListener.connect());\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n }\n }\n get eventListeners() {\n return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n }\n bindingConnected(binding) {\n this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n }\n bindingDisconnected(binding, clearEventListeners = false) {\n this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n if (clearEventListeners)\n this.clearEventListenersForBinding(binding);\n }\n handleError(error, message, detail = {}) {\n this.application.handleError(error, `Error ${message}`, detail);\n }\n clearEventListenersForBinding(binding) {\n const eventListener = this.fetchEventListenerForBinding(binding);\n if (!eventListener.hasBindings()) {\n eventListener.disconnect();\n this.removeMappedEventListenerFor(binding);\n }\n }\n removeMappedEventListenerFor(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n eventListenerMap.delete(cacheKey);\n if (eventListenerMap.size == 0)\n this.eventListenerMaps.delete(eventTarget);\n }\n fetchEventListenerForBinding(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n return this.fetchEventListener(eventTarget, eventName, eventOptions);\n }\n fetchEventListener(eventTarget, eventName, eventOptions) {\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n let eventListener = eventListenerMap.get(cacheKey);\n if (!eventListener) {\n eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n eventListenerMap.set(cacheKey, eventListener);\n }\n return eventListener;\n }\n createEventListener(eventTarget, eventName, eventOptions) {\n const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n if (this.started) {\n eventListener.connect();\n }\n return eventListener;\n }\n fetchEventListenerMapForEventTarget(eventTarget) {\n let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n if (!eventListenerMap) {\n eventListenerMap = new Map();\n this.eventListenerMaps.set(eventTarget, eventListenerMap);\n }\n return eventListenerMap;\n }\n cacheKey(eventName, eventOptions) {\n const parts = [eventName];\n Object.keys(eventOptions)\n .sort()\n .forEach((key) => {\n parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n });\n return parts.join(\":\");\n }\n}\n\nconst defaultActionDescriptorFilters = {\n stop({ event, value }) {\n if (value)\n event.stopPropagation();\n return true;\n },\n prevent({ event, value }) {\n if (value)\n event.preventDefault();\n return true;\n },\n self({ event, value, element }) {\n if (value) {\n return element === event.target;\n }\n else {\n return true;\n }\n },\n};\nconst descriptorPattern = /^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n const source = descriptorString.trim();\n const matches = source.match(descriptorPattern) || [];\n let eventName = matches[2];\n let keyFilter = matches[3];\n if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n eventName += `.${keyFilter}`;\n keyFilter = \"\";\n }\n return {\n eventTarget: parseEventTarget(matches[4]),\n eventName,\n eventOptions: matches[7] ? parseEventOptions(matches[7]) : {},\n identifier: matches[5],\n methodName: matches[6],\n keyFilter: matches[1] || keyFilter,\n };\n}\nfunction parseEventTarget(eventTargetName) {\n if (eventTargetName == \"window\") {\n return window;\n }\n else if (eventTargetName == \"document\") {\n return document;\n }\n}\nfunction parseEventOptions(eventOptions) {\n return eventOptions\n .split(\":\")\n .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n if (eventTarget == window) {\n return \"window\";\n }\n else if (eventTarget == document) {\n return \"document\";\n }\n}\n\nfunction camelize(value) {\n return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n return value.match(/[^\\s]+/g) || [];\n}\n\nfunction isSomething(object) {\n return object !== null && object !== undefined;\n}\nfunction hasProperty(object, property) {\n return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nconst allModifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\nclass Action {\n constructor(element, index, descriptor, schema) {\n this.element = element;\n this.index = index;\n this.eventTarget = descriptor.eventTarget || element;\n this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n this.eventOptions = descriptor.eventOptions || {};\n this.identifier = descriptor.identifier || error(\"missing identifier\");\n this.methodName = descriptor.methodName || error(\"missing method name\");\n this.keyFilter = descriptor.keyFilter || \"\";\n this.schema = schema;\n }\n static forToken(token, schema) {\n return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n }\n toString() {\n const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n }\n shouldIgnoreKeyboardEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = this.keyFilter.split(\"+\");\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0];\n if (!standardFilter) {\n return false;\n }\n if (!hasProperty(this.keyMappings, standardFilter)) {\n error(`contains unknown key filter: ${this.keyFilter}`);\n }\n return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n }\n shouldIgnoreMouseEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = [this.keyFilter];\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n return false;\n }\n get params() {\n const params = {};\n const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n for (const { name, value } of Array.from(this.element.attributes)) {\n const match = name.match(pattern);\n const key = match && match[1];\n if (key) {\n params[camelize(key)] = typecast(value);\n }\n }\n return params;\n }\n get eventTargetName() {\n return stringifyEventTarget(this.eventTarget);\n }\n get keyMappings() {\n return this.schema.keyMappings;\n }\n keyFilterDissatisfied(event, filters) {\n const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier));\n return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift;\n }\n}\nconst defaultEventNames = {\n a: () => \"click\",\n button: () => \"click\",\n form: () => \"submit\",\n details: () => \"toggle\",\n input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n select: () => \"change\",\n textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n const tagName = element.tagName.toLowerCase();\n if (tagName in defaultEventNames) {\n return defaultEventNames[tagName](element);\n }\n}\nfunction error(message) {\n throw new Error(message);\n}\nfunction typecast(value) {\n try {\n return JSON.parse(value);\n }\n catch (o_O) {\n return value;\n }\n}\n\nclass Binding {\n constructor(context, action) {\n this.context = context;\n this.action = action;\n }\n get index() {\n return this.action.index;\n }\n get eventTarget() {\n return this.action.eventTarget;\n }\n get eventOptions() {\n return this.action.eventOptions;\n }\n get identifier() {\n return this.context.identifier;\n }\n handleEvent(event) {\n const actionEvent = this.prepareActionEvent(event);\n if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) {\n this.invokeWithEvent(actionEvent);\n }\n }\n get eventName() {\n return this.action.eventName;\n }\n get method() {\n const method = this.controller[this.methodName];\n if (typeof method == \"function\") {\n return method;\n }\n throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n }\n applyEventModifiers(event) {\n const { element } = this.action;\n const { actionDescriptorFilters } = this.context.application;\n const { controller } = this.context;\n let passes = true;\n for (const [name, value] of Object.entries(this.eventOptions)) {\n if (name in actionDescriptorFilters) {\n const filter = actionDescriptorFilters[name];\n passes = passes && filter({ name, value, event, element, controller });\n }\n else {\n continue;\n }\n }\n return passes;\n }\n prepareActionEvent(event) {\n return Object.assign(event, { params: this.action.params });\n }\n invokeWithEvent(event) {\n const { target, currentTarget } = event;\n try {\n this.method.call(this.controller, event);\n this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n }\n catch (error) {\n const { identifier, controller, element, index } = this;\n const detail = { identifier, controller, element, index, event };\n this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n }\n }\n willBeInvokedByEvent(event) {\n const eventTarget = event.target;\n if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) {\n return false;\n }\n if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) {\n return false;\n }\n if (this.element === eventTarget) {\n return true;\n }\n else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n return this.scope.containsElement(eventTarget);\n }\n else {\n return this.scope.containsElement(this.action.element);\n }\n }\n get controller() {\n return this.context.controller;\n }\n get methodName() {\n return this.action.methodName;\n }\n get element() {\n return this.scope.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nclass ElementObserver {\n constructor(element, delegate) {\n this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n this.element = element;\n this.started = false;\n this.delegate = delegate;\n this.elements = new Set();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.refresh();\n }\n }\n pause(callback) {\n if (this.started) {\n this.mutationObserver.disconnect();\n this.started = false;\n }\n callback();\n if (!this.started) {\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n const matches = new Set(this.matchElementsInTree());\n for (const element of Array.from(this.elements)) {\n if (!matches.has(element)) {\n this.removeElement(element);\n }\n }\n for (const element of Array.from(matches)) {\n this.addElement(element);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n if (mutation.type == \"attributes\") {\n this.processAttributeChange(mutation.target, mutation.attributeName);\n }\n else if (mutation.type == \"childList\") {\n this.processRemovedNodes(mutation.removedNodes);\n this.processAddedNodes(mutation.addedNodes);\n }\n }\n processAttributeChange(element, attributeName) {\n if (this.elements.has(element)) {\n if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n this.delegate.elementAttributeChanged(element, attributeName);\n }\n else {\n this.removeElement(element);\n }\n }\n else if (this.matchElement(element)) {\n this.addElement(element);\n }\n }\n processRemovedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element) {\n this.processTree(element, this.removeElement);\n }\n }\n }\n processAddedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element && this.elementIsActive(element)) {\n this.processTree(element, this.addElement);\n }\n }\n }\n matchElement(element) {\n return this.delegate.matchElement(element);\n }\n matchElementsInTree(tree = this.element) {\n return this.delegate.matchElementsInTree(tree);\n }\n processTree(tree, processor) {\n for (const element of this.matchElementsInTree(tree)) {\n processor.call(this, element);\n }\n }\n elementFromNode(node) {\n if (node.nodeType == Node.ELEMENT_NODE) {\n return node;\n }\n }\n elementIsActive(element) {\n if (element.isConnected != this.element.isConnected) {\n return false;\n }\n else {\n return this.element.contains(element);\n }\n }\n addElement(element) {\n if (!this.elements.has(element)) {\n if (this.elementIsActive(element)) {\n this.elements.add(element);\n if (this.delegate.elementMatched) {\n this.delegate.elementMatched(element);\n }\n }\n }\n }\n removeElement(element) {\n if (this.elements.has(element)) {\n this.elements.delete(element);\n if (this.delegate.elementUnmatched) {\n this.delegate.elementUnmatched(element);\n }\n }\n }\n}\n\nclass AttributeObserver {\n constructor(element, attributeName, delegate) {\n this.attributeName = attributeName;\n this.delegate = delegate;\n this.elementObserver = new ElementObserver(element, this);\n }\n get element() {\n return this.elementObserver.element;\n }\n get selector() {\n return `[${this.attributeName}]`;\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get started() {\n return this.elementObserver.started;\n }\n matchElement(element) {\n return element.hasAttribute(this.attributeName);\n }\n matchElementsInTree(tree) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(this.selector));\n return match.concat(matches);\n }\n elementMatched(element) {\n if (this.delegate.elementMatchedAttribute) {\n this.delegate.elementMatchedAttribute(element, this.attributeName);\n }\n }\n elementUnmatched(element) {\n if (this.delegate.elementUnmatchedAttribute) {\n this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n }\n }\n elementAttributeChanged(element, attributeName) {\n if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n this.delegate.elementAttributeValueChanged(element, attributeName);\n }\n }\n}\n\nfunction add(map, key, value) {\n fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n fetch(map, key).delete(value);\n prune(map, key);\n}\nfunction fetch(map, key) {\n let values = map.get(key);\n if (!values) {\n values = new Set();\n map.set(key, values);\n }\n return values;\n}\nfunction prune(map, key) {\n const values = map.get(key);\n if (values != null && values.size == 0) {\n map.delete(key);\n }\n}\n\nclass Multimap {\n constructor() {\n this.valuesByKey = new Map();\n }\n get keys() {\n return Array.from(this.valuesByKey.keys());\n }\n get values() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n }\n get size() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((size, set) => size + set.size, 0);\n }\n add(key, value) {\n add(this.valuesByKey, key, value);\n }\n delete(key, value) {\n del(this.valuesByKey, key, value);\n }\n has(key, value) {\n const values = this.valuesByKey.get(key);\n return values != null && values.has(value);\n }\n hasKey(key) {\n return this.valuesByKey.has(key);\n }\n hasValue(value) {\n const sets = Array.from(this.valuesByKey.values());\n return sets.some((set) => set.has(value));\n }\n getValuesForKey(key) {\n const values = this.valuesByKey.get(key);\n return values ? Array.from(values) : [];\n }\n getKeysForValue(value) {\n return Array.from(this.valuesByKey)\n .filter(([_key, values]) => values.has(value))\n .map(([key, _values]) => key);\n }\n}\n\nclass IndexedMultimap extends Multimap {\n constructor() {\n super();\n this.keysByValue = new Map();\n }\n get values() {\n return Array.from(this.keysByValue.keys());\n }\n add(key, value) {\n super.add(key, value);\n add(this.keysByValue, value, key);\n }\n delete(key, value) {\n super.delete(key, value);\n del(this.keysByValue, value, key);\n }\n hasValue(value) {\n return this.keysByValue.has(value);\n }\n getKeysForValue(value) {\n const set = this.keysByValue.get(value);\n return set ? Array.from(set) : [];\n }\n}\n\nclass SelectorObserver {\n constructor(element, selector, delegate, details) {\n this._selector = selector;\n this.details = details;\n this.elementObserver = new ElementObserver(element, this);\n this.delegate = delegate;\n this.matchesByElement = new Multimap();\n }\n get started() {\n return this.elementObserver.started;\n }\n get selector() {\n return this._selector;\n }\n set selector(selector) {\n this._selector = selector;\n this.refresh();\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get element() {\n return this.elementObserver.element;\n }\n matchElement(element) {\n const { selector } = this;\n if (selector) {\n const matches = element.matches(selector);\n if (this.delegate.selectorMatchElement) {\n return matches && this.delegate.selectorMatchElement(element, this.details);\n }\n return matches;\n }\n else {\n return false;\n }\n }\n matchElementsInTree(tree) {\n const { selector } = this;\n if (selector) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(selector)).filter((match) => this.matchElement(match));\n return match.concat(matches);\n }\n else {\n return [];\n }\n }\n elementMatched(element) {\n const { selector } = this;\n if (selector) {\n this.selectorMatched(element, selector);\n }\n }\n elementUnmatched(element) {\n const selectors = this.matchesByElement.getKeysForValue(element);\n for (const selector of selectors) {\n this.selectorUnmatched(element, selector);\n }\n }\n elementAttributeChanged(element, _attributeName) {\n const { selector } = this;\n if (selector) {\n const matches = this.matchElement(element);\n const matchedBefore = this.matchesByElement.has(selector, element);\n if (matches && !matchedBefore) {\n this.selectorMatched(element, selector);\n }\n else if (!matches && matchedBefore) {\n this.selectorUnmatched(element, selector);\n }\n }\n }\n selectorMatched(element, selector) {\n this.delegate.selectorMatched(element, selector, this.details);\n this.matchesByElement.add(selector, element);\n }\n selectorUnmatched(element, selector) {\n this.delegate.selectorUnmatched(element, selector, this.details);\n this.matchesByElement.delete(selector, element);\n }\n}\n\nclass StringMapObserver {\n constructor(element, delegate) {\n this.element = element;\n this.delegate = delegate;\n this.started = false;\n this.stringMap = new Map();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n this.refresh();\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n for (const attributeName of this.knownAttributeNames) {\n this.refreshAttribute(attributeName, null);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n const attributeName = mutation.attributeName;\n if (attributeName) {\n this.refreshAttribute(attributeName, mutation.oldValue);\n }\n }\n refreshAttribute(attributeName, oldValue) {\n const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n if (key != null) {\n if (!this.stringMap.has(attributeName)) {\n this.stringMapKeyAdded(key, attributeName);\n }\n const value = this.element.getAttribute(attributeName);\n if (this.stringMap.get(attributeName) != value) {\n this.stringMapValueChanged(value, key, oldValue);\n }\n if (value == null) {\n const oldValue = this.stringMap.get(attributeName);\n this.stringMap.delete(attributeName);\n if (oldValue)\n this.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n else {\n this.stringMap.set(attributeName, value);\n }\n }\n }\n stringMapKeyAdded(key, attributeName) {\n if (this.delegate.stringMapKeyAdded) {\n this.delegate.stringMapKeyAdded(key, attributeName);\n }\n }\n stringMapValueChanged(value, key, oldValue) {\n if (this.delegate.stringMapValueChanged) {\n this.delegate.stringMapValueChanged(value, key, oldValue);\n }\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n if (this.delegate.stringMapKeyRemoved) {\n this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n }\n get knownAttributeNames() {\n return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n }\n get currentAttributeNames() {\n return Array.from(this.element.attributes).map((attribute) => attribute.name);\n }\n get recordedAttributeNames() {\n return Array.from(this.stringMap.keys());\n }\n}\n\nclass TokenListObserver {\n constructor(element, attributeName, delegate) {\n this.attributeObserver = new AttributeObserver(element, attributeName, this);\n this.delegate = delegate;\n this.tokensByElement = new Multimap();\n }\n get started() {\n return this.attributeObserver.started;\n }\n start() {\n this.attributeObserver.start();\n }\n pause(callback) {\n this.attributeObserver.pause(callback);\n }\n stop() {\n this.attributeObserver.stop();\n }\n refresh() {\n this.attributeObserver.refresh();\n }\n get element() {\n return this.attributeObserver.element;\n }\n get attributeName() {\n return this.attributeObserver.attributeName;\n }\n elementMatchedAttribute(element) {\n this.tokensMatched(this.readTokensForElement(element));\n }\n elementAttributeValueChanged(element) {\n const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n this.tokensUnmatched(unmatchedTokens);\n this.tokensMatched(matchedTokens);\n }\n elementUnmatchedAttribute(element) {\n this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n }\n tokensMatched(tokens) {\n tokens.forEach((token) => this.tokenMatched(token));\n }\n tokensUnmatched(tokens) {\n tokens.forEach((token) => this.tokenUnmatched(token));\n }\n tokenMatched(token) {\n this.delegate.tokenMatched(token);\n this.tokensByElement.add(token.element, token);\n }\n tokenUnmatched(token) {\n this.delegate.tokenUnmatched(token);\n this.tokensByElement.delete(token.element, token);\n }\n refreshTokensForElement(element) {\n const previousTokens = this.tokensByElement.getValuesForKey(element);\n const currentTokens = this.readTokensForElement(element);\n const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n if (firstDifferingIndex == -1) {\n return [[], []];\n }\n else {\n return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n }\n }\n readTokensForElement(element) {\n const attributeName = this.attributeName;\n const tokenString = element.getAttribute(attributeName) || \"\";\n return parseTokenString(tokenString, element, attributeName);\n }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n return tokenString\n .trim()\n .split(/\\s+/)\n .filter((content) => content.length)\n .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n const length = Math.max(left.length, right.length);\n return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n constructor(element, attributeName, delegate) {\n this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n this.delegate = delegate;\n this.parseResultsByToken = new WeakMap();\n this.valuesByTokenByElement = new WeakMap();\n }\n get started() {\n return this.tokenListObserver.started;\n }\n start() {\n this.tokenListObserver.start();\n }\n stop() {\n this.tokenListObserver.stop();\n }\n refresh() {\n this.tokenListObserver.refresh();\n }\n get element() {\n return this.tokenListObserver.element;\n }\n get attributeName() {\n return this.tokenListObserver.attributeName;\n }\n tokenMatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).set(token, value);\n this.delegate.elementMatchedValue(element, value);\n }\n }\n tokenUnmatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).delete(token);\n this.delegate.elementUnmatchedValue(element, value);\n }\n }\n fetchParseResultForToken(token) {\n let parseResult = this.parseResultsByToken.get(token);\n if (!parseResult) {\n parseResult = this.parseToken(token);\n this.parseResultsByToken.set(token, parseResult);\n }\n return parseResult;\n }\n fetchValuesByTokenForElement(element) {\n let valuesByToken = this.valuesByTokenByElement.get(element);\n if (!valuesByToken) {\n valuesByToken = new Map();\n this.valuesByTokenByElement.set(element, valuesByToken);\n }\n return valuesByToken;\n }\n parseToken(token) {\n try {\n const value = this.delegate.parseValueForToken(token);\n return { value };\n }\n catch (error) {\n return { error };\n }\n }\n}\n\nclass BindingObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.bindingsByAction = new Map();\n }\n start() {\n if (!this.valueListObserver) {\n this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n this.valueListObserver.start();\n }\n }\n stop() {\n if (this.valueListObserver) {\n this.valueListObserver.stop();\n delete this.valueListObserver;\n this.disconnectAllActions();\n }\n }\n get element() {\n return this.context.element;\n }\n get identifier() {\n return this.context.identifier;\n }\n get actionAttribute() {\n return this.schema.actionAttribute;\n }\n get schema() {\n return this.context.schema;\n }\n get bindings() {\n return Array.from(this.bindingsByAction.values());\n }\n connectAction(action) {\n const binding = new Binding(this.context, action);\n this.bindingsByAction.set(action, binding);\n this.delegate.bindingConnected(binding);\n }\n disconnectAction(action) {\n const binding = this.bindingsByAction.get(action);\n if (binding) {\n this.bindingsByAction.delete(action);\n this.delegate.bindingDisconnected(binding);\n }\n }\n disconnectAllActions() {\n this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n this.bindingsByAction.clear();\n }\n parseValueForToken(token) {\n const action = Action.forToken(token, this.schema);\n if (action.identifier == this.identifier) {\n return action;\n }\n }\n elementMatchedValue(element, action) {\n this.connectAction(action);\n }\n elementUnmatchedValue(element, action) {\n this.disconnectAction(action);\n }\n}\n\nclass ValueObserver {\n constructor(context, receiver) {\n this.context = context;\n this.receiver = receiver;\n this.stringMapObserver = new StringMapObserver(this.element, this);\n this.valueDescriptorMap = this.controller.valueDescriptorMap;\n }\n start() {\n this.stringMapObserver.start();\n this.invokeChangedCallbacksForDefaultValues();\n }\n stop() {\n this.stringMapObserver.stop();\n }\n get element() {\n return this.context.element;\n }\n get controller() {\n return this.context.controller;\n }\n getStringMapKeyForAttribute(attributeName) {\n if (attributeName in this.valueDescriptorMap) {\n return this.valueDescriptorMap[attributeName].name;\n }\n }\n stringMapKeyAdded(key, attributeName) {\n const descriptor = this.valueDescriptorMap[attributeName];\n if (!this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n }\n }\n stringMapValueChanged(value, name, oldValue) {\n const descriptor = this.valueDescriptorNameMap[name];\n if (value === null)\n return;\n if (oldValue === null) {\n oldValue = descriptor.writer(descriptor.defaultValue);\n }\n this.invokeChangedCallback(name, value, oldValue);\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n const descriptor = this.valueDescriptorNameMap[key];\n if (this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n }\n else {\n this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n }\n }\n invokeChangedCallbacksForDefaultValues() {\n for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n if (defaultValue != undefined && !this.controller.data.has(key)) {\n this.invokeChangedCallback(name, writer(defaultValue), undefined);\n }\n }\n }\n invokeChangedCallback(name, rawValue, rawOldValue) {\n const changedMethodName = `${name}Changed`;\n const changedMethod = this.receiver[changedMethodName];\n if (typeof changedMethod == \"function\") {\n const descriptor = this.valueDescriptorNameMap[name];\n try {\n const value = descriptor.reader(rawValue);\n let oldValue = rawOldValue;\n if (rawOldValue) {\n oldValue = descriptor.reader(rawOldValue);\n }\n changedMethod.call(this.receiver, value, oldValue);\n }\n catch (error) {\n if (error instanceof TypeError) {\n error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n }\n throw error;\n }\n }\n }\n get valueDescriptors() {\n const { valueDescriptorMap } = this;\n return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n }\n get valueDescriptorNameMap() {\n const descriptors = {};\n Object.keys(this.valueDescriptorMap).forEach((key) => {\n const descriptor = this.valueDescriptorMap[key];\n descriptors[descriptor.name] = descriptor;\n });\n return descriptors;\n }\n hasValue(attributeName) {\n const descriptor = this.valueDescriptorNameMap[attributeName];\n const hasMethodName = `has${capitalize(descriptor.name)}`;\n return this.receiver[hasMethodName];\n }\n}\n\nclass TargetObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.targetsByName = new Multimap();\n }\n start() {\n if (!this.tokenListObserver) {\n this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n this.tokenListObserver.start();\n }\n }\n stop() {\n if (this.tokenListObserver) {\n this.disconnectAllTargets();\n this.tokenListObserver.stop();\n delete this.tokenListObserver;\n }\n }\n tokenMatched({ element, content: name }) {\n if (this.scope.containsElement(element)) {\n this.connectTarget(element, name);\n }\n }\n tokenUnmatched({ element, content: name }) {\n this.disconnectTarget(element, name);\n }\n connectTarget(element, name) {\n var _a;\n if (!this.targetsByName.has(name, element)) {\n this.targetsByName.add(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n }\n }\n disconnectTarget(element, name) {\n var _a;\n if (this.targetsByName.has(name, element)) {\n this.targetsByName.delete(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n }\n }\n disconnectAllTargets() {\n for (const name of this.targetsByName.keys) {\n for (const element of this.targetsByName.getValuesForKey(name)) {\n this.disconnectTarget(element, name);\n }\n }\n }\n get attributeName() {\n return `data-${this.context.identifier}-target`;\n }\n get element() {\n return this.context.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return Array.from(ancestors.reduce((values, constructor) => {\n getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n return values;\n }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return ancestors.reduce((pairs, constructor) => {\n pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n return pairs;\n }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n const ancestors = [];\n while (constructor) {\n ancestors.push(constructor);\n constructor = Object.getPrototypeOf(constructor);\n }\n return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n const definition = constructor[propertyName];\n return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n const definition = constructor[propertyName];\n return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n constructor(context, delegate) {\n this.started = false;\n this.context = context;\n this.delegate = delegate;\n this.outletsByName = new Multimap();\n this.outletElementsByName = new Multimap();\n this.selectorObserverMap = new Map();\n this.attributeObserverMap = new Map();\n }\n start() {\n if (!this.started) {\n this.outletDefinitions.forEach((outletName) => {\n this.setupSelectorObserverForOutlet(outletName);\n this.setupAttributeObserverForOutlet(outletName);\n });\n this.started = true;\n this.dependentContexts.forEach((context) => context.refresh());\n }\n }\n refresh() {\n this.selectorObserverMap.forEach((observer) => observer.refresh());\n this.attributeObserverMap.forEach((observer) => observer.refresh());\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.disconnectAllOutlets();\n this.stopSelectorObservers();\n this.stopAttributeObservers();\n }\n }\n stopSelectorObservers() {\n if (this.selectorObserverMap.size > 0) {\n this.selectorObserverMap.forEach((observer) => observer.stop());\n this.selectorObserverMap.clear();\n }\n }\n stopAttributeObservers() {\n if (this.attributeObserverMap.size > 0) {\n this.attributeObserverMap.forEach((observer) => observer.stop());\n this.attributeObserverMap.clear();\n }\n }\n selectorMatched(element, _selector, { outletName }) {\n const outlet = this.getOutlet(element, outletName);\n if (outlet) {\n this.connectOutlet(outlet, element, outletName);\n }\n }\n selectorUnmatched(element, _selector, { outletName }) {\n const outlet = this.getOutletFromMap(element, outletName);\n if (outlet) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n selectorMatchElement(element, { outletName }) {\n const selector = this.selector(outletName);\n const hasOutlet = this.hasOutlet(element, outletName);\n const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);\n if (selector) {\n return hasOutlet && hasOutletController && element.matches(selector);\n }\n else {\n return false;\n }\n }\n elementMatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementAttributeValueChanged(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementUnmatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n connectOutlet(outlet, element, outletName) {\n var _a;\n if (!this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.add(outletName, outlet);\n this.outletElementsByName.add(outletName, element);\n (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n }\n }\n disconnectOutlet(outlet, element, outletName) {\n var _a;\n if (this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.delete(outletName, outlet);\n this.outletElementsByName.delete(outletName, element);\n (_a = this.selectorObserverMap\n .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n }\n }\n disconnectAllOutlets() {\n for (const outletName of this.outletElementsByName.keys) {\n for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n }\n }\n updateSelectorObserverForOutlet(outletName) {\n const observer = this.selectorObserverMap.get(outletName);\n if (observer) {\n observer.selector = this.selector(outletName);\n }\n }\n setupSelectorObserverForOutlet(outletName) {\n const selector = this.selector(outletName);\n const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName });\n this.selectorObserverMap.set(outletName, selectorObserver);\n selectorObserver.start();\n }\n setupAttributeObserverForOutlet(outletName) {\n const attributeName = this.attributeNameForOutletName(outletName);\n const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this);\n this.attributeObserverMap.set(outletName, attributeObserver);\n attributeObserver.start();\n }\n selector(outletName) {\n return this.scope.outlets.getSelectorForOutletName(outletName);\n }\n attributeNameForOutletName(outletName) {\n return this.scope.schema.outletAttributeForScope(this.identifier, outletName);\n }\n getOutletNameFromOutletAttributeName(attributeName) {\n return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName);\n }\n get outletDependencies() {\n const dependencies = new Multimap();\n this.router.modules.forEach((module) => {\n const constructor = module.definition.controllerConstructor;\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n });\n return dependencies;\n }\n get outletDefinitions() {\n return this.outletDependencies.getKeysForValue(this.identifier);\n }\n get dependentControllerIdentifiers() {\n return this.outletDependencies.getValuesForKey(this.identifier);\n }\n get dependentContexts() {\n const identifiers = this.dependentControllerIdentifiers;\n return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n }\n hasOutlet(element, outletName) {\n return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n }\n getOutlet(element, outletName) {\n return this.application.getControllerForElementAndIdentifier(element, outletName);\n }\n getOutletFromMap(element, outletName) {\n return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n }\n get scope() {\n return this.context.scope;\n }\n get schema() {\n return this.context.schema;\n }\n get identifier() {\n return this.context.identifier;\n }\n get application() {\n return this.context.application;\n }\n get router() {\n return this.application.router;\n }\n}\n\nclass Context {\n constructor(module, scope) {\n this.logDebugActivity = (functionName, detail = {}) => {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.logDebugActivity(this.identifier, functionName, detail);\n };\n this.module = module;\n this.scope = scope;\n this.controller = new module.controllerConstructor(this);\n this.bindingObserver = new BindingObserver(this, this.dispatcher);\n this.valueObserver = new ValueObserver(this, this.controller);\n this.targetObserver = new TargetObserver(this, this);\n this.outletObserver = new OutletObserver(this, this);\n try {\n this.controller.initialize();\n this.logDebugActivity(\"initialize\");\n }\n catch (error) {\n this.handleError(error, \"initializing controller\");\n }\n }\n connect() {\n this.bindingObserver.start();\n this.valueObserver.start();\n this.targetObserver.start();\n this.outletObserver.start();\n try {\n this.controller.connect();\n this.logDebugActivity(\"connect\");\n }\n catch (error) {\n this.handleError(error, \"connecting controller\");\n }\n }\n refresh() {\n this.outletObserver.refresh();\n }\n disconnect() {\n try {\n this.controller.disconnect();\n this.logDebugActivity(\"disconnect\");\n }\n catch (error) {\n this.handleError(error, \"disconnecting controller\");\n }\n this.outletObserver.stop();\n this.targetObserver.stop();\n this.valueObserver.stop();\n this.bindingObserver.stop();\n }\n get application() {\n return this.module.application;\n }\n get identifier() {\n return this.module.identifier;\n }\n get schema() {\n return this.application.schema;\n }\n get dispatcher() {\n return this.application.dispatcher;\n }\n get element() {\n return this.scope.element;\n }\n get parentElement() {\n return this.element.parentElement;\n }\n handleError(error, message, detail = {}) {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.handleError(error, `Error ${message}`, detail);\n }\n targetConnected(element, name) {\n this.invokeControllerMethod(`${name}TargetConnected`, element);\n }\n targetDisconnected(element, name) {\n this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n }\n outletConnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n }\n outletDisconnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n }\n invokeControllerMethod(methodName, ...args) {\n const controller = this.controller;\n if (typeof controller[methodName] == \"function\") {\n controller[methodName](...args);\n }\n }\n}\n\nfunction bless(constructor) {\n return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n const shadowConstructor = extend(constructor);\n const shadowProperties = getShadowProperties(constructor.prototype, properties);\n Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n return blessings.reduce((blessedProperties, blessing) => {\n const properties = blessing(constructor);\n for (const key in properties) {\n const descriptor = blessedProperties[key] || {};\n blessedProperties[key] = Object.assign(descriptor, properties[key]);\n }\n return blessedProperties;\n }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n return getOwnKeys(properties).reduce((shadowProperties, key) => {\n const descriptor = getShadowedDescriptor(prototype, properties, key);\n if (descriptor) {\n Object.assign(shadowProperties, { [key]: descriptor });\n }\n return shadowProperties;\n }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n if (!shadowedByValue) {\n const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n if (shadowingDescriptor) {\n descriptor.get = shadowingDescriptor.get || descriptor.get;\n descriptor.set = shadowingDescriptor.set || descriptor.set;\n }\n return descriptor;\n }\n}\nconst getOwnKeys = (() => {\n if (typeof Object.getOwnPropertySymbols == \"function\") {\n return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n }\n else {\n return Object.getOwnPropertyNames;\n }\n})();\nconst extend = (() => {\n function extendWithReflect(constructor) {\n function extended() {\n return Reflect.construct(constructor, arguments, new.target);\n }\n extended.prototype = Object.create(constructor.prototype, {\n constructor: { value: extended },\n });\n Reflect.setPrototypeOf(extended, constructor);\n return extended;\n }\n function testReflectExtension() {\n const a = function () {\n this.a.call(this);\n };\n const b = extendWithReflect(a);\n b.prototype.a = function () { };\n return new b();\n }\n try {\n testReflectExtension();\n return extendWithReflect;\n }\n catch (error) {\n return (constructor) => class extended extends constructor {\n };\n }\n})();\n\nfunction blessDefinition(definition) {\n return {\n identifier: definition.identifier,\n controllerConstructor: bless(definition.controllerConstructor),\n };\n}\n\nclass Module {\n constructor(application, definition) {\n this.application = application;\n this.definition = blessDefinition(definition);\n this.contextsByScope = new WeakMap();\n this.connectedContexts = new Set();\n }\n get identifier() {\n return this.definition.identifier;\n }\n get controllerConstructor() {\n return this.definition.controllerConstructor;\n }\n get contexts() {\n return Array.from(this.connectedContexts);\n }\n connectContextForScope(scope) {\n const context = this.fetchContextForScope(scope);\n this.connectedContexts.add(context);\n context.connect();\n }\n disconnectContextForScope(scope) {\n const context = this.contextsByScope.get(scope);\n if (context) {\n this.connectedContexts.delete(context);\n context.disconnect();\n }\n }\n fetchContextForScope(scope) {\n let context = this.contextsByScope.get(scope);\n if (!context) {\n context = new Context(this, scope);\n this.contextsByScope.set(scope, context);\n }\n return context;\n }\n}\n\nclass ClassMap {\n constructor(scope) {\n this.scope = scope;\n }\n has(name) {\n return this.data.has(this.getDataKey(name));\n }\n get(name) {\n return this.getAll(name)[0];\n }\n getAll(name) {\n const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n return tokenize(tokenString);\n }\n getAttributeName(name) {\n return this.data.getAttributeNameForKey(this.getDataKey(name));\n }\n getDataKey(name) {\n return `${name}-class`;\n }\n get data() {\n return this.scope.data;\n }\n}\n\nclass DataMap {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.getAttribute(name);\n }\n set(key, value) {\n const name = this.getAttributeNameForKey(key);\n this.element.setAttribute(name, value);\n return this.get(key);\n }\n has(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.hasAttribute(name);\n }\n delete(key) {\n if (this.has(key)) {\n const name = this.getAttributeNameForKey(key);\n this.element.removeAttribute(name);\n return true;\n }\n else {\n return false;\n }\n }\n getAttributeNameForKey(key) {\n return `data-${this.identifier}-${dasherize(key)}`;\n }\n}\n\nclass Guide {\n constructor(logger) {\n this.warnedKeysByObject = new WeakMap();\n this.logger = logger;\n }\n warn(object, key, message) {\n let warnedKeys = this.warnedKeysByObject.get(object);\n if (!warnedKeys) {\n warnedKeys = new Set();\n this.warnedKeysByObject.set(object, warnedKeys);\n }\n if (!warnedKeys.has(key)) {\n warnedKeys.add(key);\n this.logger.warn(message, object);\n }\n }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(targetName) {\n return this.find(targetName) != null;\n }\n find(...targetNames) {\n return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n }\n findAll(...targetNames) {\n return targetNames.reduce((targets, targetName) => [\n ...targets,\n ...this.findAllTargets(targetName),\n ...this.findAllLegacyTargets(targetName),\n ], []);\n }\n findTarget(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findElement(selector);\n }\n findAllTargets(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findAllElements(selector);\n }\n getSelectorForTargetName(targetName) {\n const attributeName = this.schema.targetAttributeForScope(this.identifier);\n return attributeValueContainsToken(attributeName, targetName);\n }\n findLegacyTarget(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.deprecate(this.scope.findElement(selector), targetName);\n }\n findAllLegacyTargets(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n }\n getLegacySelectorForTargetName(targetName) {\n const targetDescriptor = `${this.identifier}.${targetName}`;\n return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n }\n deprecate(element, targetName) {\n if (element) {\n const { identifier } = this;\n const attributeName = this.schema.targetAttribute;\n const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n }\n return element;\n }\n get guide() {\n return this.scope.guide;\n }\n}\n\nclass OutletSet {\n constructor(scope, controllerElement) {\n this.scope = scope;\n this.controllerElement = controllerElement;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(outletName) {\n return this.find(outletName) != null;\n }\n find(...outletNames) {\n return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n }\n findAll(...outletNames) {\n return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n }\n getSelectorForOutletName(outletName) {\n const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n return this.controllerElement.getAttribute(attributeName);\n }\n findOutlet(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n if (selector)\n return this.findElement(selector, outletName);\n }\n findAllOutlets(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n return selector ? this.findAllElements(selector, outletName) : [];\n }\n findElement(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n }\n findAllElements(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName));\n }\n matchesElement(element, selector, outletName) {\n const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n }\n}\n\nclass Scope {\n constructor(schema, element, identifier, logger) {\n this.targets = new TargetSet(this);\n this.classes = new ClassMap(this);\n this.data = new DataMap(this);\n this.containsElement = (element) => {\n return element.closest(this.controllerSelector) === this.element;\n };\n this.schema = schema;\n this.element = element;\n this.identifier = identifier;\n this.guide = new Guide(logger);\n this.outlets = new OutletSet(this.documentScope, element);\n }\n findElement(selector) {\n return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n }\n findAllElements(selector) {\n return [\n ...(this.element.matches(selector) ? [this.element] : []),\n ...this.queryElements(selector).filter(this.containsElement),\n ];\n }\n queryElements(selector) {\n return Array.from(this.element.querySelectorAll(selector));\n }\n get controllerSelector() {\n return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n }\n get isDocumentScope() {\n return this.element === document.documentElement;\n }\n get documentScope() {\n return this.isDocumentScope\n ? this\n : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n }\n}\n\nclass ScopeObserver {\n constructor(element, schema, delegate) {\n this.element = element;\n this.schema = schema;\n this.delegate = delegate;\n this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n this.scopesByIdentifierByElement = new WeakMap();\n this.scopeReferenceCounts = new WeakMap();\n }\n start() {\n this.valueListObserver.start();\n }\n stop() {\n this.valueListObserver.stop();\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n parseValueForToken(token) {\n const { element, content: identifier } = token;\n return this.parseValueForElementAndIdentifier(element, identifier);\n }\n parseValueForElementAndIdentifier(element, identifier) {\n const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n let scope = scopesByIdentifier.get(identifier);\n if (!scope) {\n scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n scopesByIdentifier.set(identifier, scope);\n }\n return scope;\n }\n elementMatchedValue(element, value) {\n const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n this.scopeReferenceCounts.set(value, referenceCount);\n if (referenceCount == 1) {\n this.delegate.scopeConnected(value);\n }\n }\n elementUnmatchedValue(element, value) {\n const referenceCount = this.scopeReferenceCounts.get(value);\n if (referenceCount) {\n this.scopeReferenceCounts.set(value, referenceCount - 1);\n if (referenceCount == 1) {\n this.delegate.scopeDisconnected(value);\n }\n }\n }\n fetchScopesByIdentifierForElement(element) {\n let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n if (!scopesByIdentifier) {\n scopesByIdentifier = new Map();\n this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n }\n return scopesByIdentifier;\n }\n}\n\nclass Router {\n constructor(application) {\n this.application = application;\n this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n this.scopesByIdentifier = new Multimap();\n this.modulesByIdentifier = new Map();\n }\n get element() {\n return this.application.element;\n }\n get schema() {\n return this.application.schema;\n }\n get logger() {\n return this.application.logger;\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n get modules() {\n return Array.from(this.modulesByIdentifier.values());\n }\n get contexts() {\n return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n }\n start() {\n this.scopeObserver.start();\n }\n stop() {\n this.scopeObserver.stop();\n }\n loadDefinition(definition) {\n this.unloadIdentifier(definition.identifier);\n const module = new Module(this.application, definition);\n this.connectModule(module);\n const afterLoad = definition.controllerConstructor.afterLoad;\n if (afterLoad) {\n afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);\n }\n }\n unloadIdentifier(identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n this.disconnectModule(module);\n }\n }\n getContextForElementAndIdentifier(element, identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n return module.contexts.find((context) => context.element == element);\n }\n }\n proposeToConnectScopeForElementAndIdentifier(element, identifier) {\n const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);\n if (scope) {\n this.scopeObserver.elementMatchedValue(scope.element, scope);\n }\n else {\n console.error(`Couldn't find or create scope for identifier: \"${identifier}\" and element:`, element);\n }\n }\n handleError(error, message, detail) {\n this.application.handleError(error, message, detail);\n }\n createScopeForElementAndIdentifier(element, identifier) {\n return new Scope(this.schema, element, identifier, this.logger);\n }\n scopeConnected(scope) {\n this.scopesByIdentifier.add(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.connectContextForScope(scope);\n }\n }\n scopeDisconnected(scope) {\n this.scopesByIdentifier.delete(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.disconnectContextForScope(scope);\n }\n }\n connectModule(module) {\n this.modulesByIdentifier.set(module.identifier, module);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.connectContextForScope(scope));\n }\n disconnectModule(module) {\n this.modulesByIdentifier.delete(module.identifier);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.disconnectContextForScope(scope));\n }\n}\n\nconst defaultSchema = {\n controllerAttribute: \"data-controller\",\n actionAttribute: \"data-action\",\n targetAttribute: \"data-target\",\n targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\", page_up: \"PageUp\", page_down: \"PageDown\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n constructor(element = document.documentElement, schema = defaultSchema) {\n this.logger = console;\n this.debug = false;\n this.logDebugActivity = (identifier, functionName, detail = {}) => {\n if (this.debug) {\n this.logFormattedMessage(identifier, functionName, detail);\n }\n };\n this.element = element;\n this.schema = schema;\n this.dispatcher = new Dispatcher(this);\n this.router = new Router(this);\n this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n }\n static start(element, schema) {\n const application = new this(element, schema);\n application.start();\n return application;\n }\n async start() {\n await domReady();\n this.logDebugActivity(\"application\", \"starting\");\n this.dispatcher.start();\n this.router.start();\n this.logDebugActivity(\"application\", \"start\");\n }\n stop() {\n this.logDebugActivity(\"application\", \"stopping\");\n this.dispatcher.stop();\n this.router.stop();\n this.logDebugActivity(\"application\", \"stop\");\n }\n register(identifier, controllerConstructor) {\n this.load({ identifier, controllerConstructor });\n }\n registerActionOption(name, filter) {\n this.actionDescriptorFilters[name] = filter;\n }\n load(head, ...rest) {\n const definitions = Array.isArray(head) ? head : [head, ...rest];\n definitions.forEach((definition) => {\n if (definition.controllerConstructor.shouldLoad) {\n this.router.loadDefinition(definition);\n }\n });\n }\n unload(head, ...rest) {\n const identifiers = Array.isArray(head) ? head : [head, ...rest];\n identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n }\n get controllers() {\n return this.router.contexts.map((context) => context.controller);\n }\n getControllerForElementAndIdentifier(element, identifier) {\n const context = this.router.getContextForElementAndIdentifier(element, identifier);\n return context ? context.controller : null;\n }\n handleError(error, message, detail) {\n var _a;\n this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n }\n logFormattedMessage(identifier, functionName, detail = {}) {\n detail = Object.assign({ application: this }, detail);\n this.logger.groupCollapsed(`${identifier} #${functionName}`);\n this.logger.log(\"details:\", Object.assign({}, detail));\n this.logger.groupEnd();\n }\n}\nfunction domReady() {\n return new Promise((resolve) => {\n if (document.readyState == \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", () => resolve());\n }\n else {\n resolve();\n }\n });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n return classes.reduce((properties, classDefinition) => {\n return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n }, {});\n}\nfunction propertiesForClassDefinition(key) {\n return {\n [`${key}Class`]: {\n get() {\n const { classes } = this;\n if (classes.has(key)) {\n return classes.get(key);\n }\n else {\n const attribute = classes.getAttributeName(key);\n throw new Error(`Missing attribute \"${attribute}\"`);\n }\n },\n },\n [`${key}Classes`]: {\n get() {\n return this.classes.getAll(key);\n },\n },\n [`has${capitalize(key)}Class`]: {\n get() {\n return this.classes.has(key);\n },\n },\n };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n return outlets.reduce((properties, outletDefinition) => {\n return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n }, {});\n}\nfunction getOutletController(controller, element, identifier) {\n return controller.application.getControllerForElementAndIdentifier(element, identifier);\n}\nfunction getControllerAndEnsureConnectedScope(controller, element, outletName) {\n let outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);\n outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n}\nfunction propertiesForOutletDefinition(name) {\n const camelizedName = namespaceCamelize(name);\n return {\n [`${camelizedName}Outlet`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n throw new Error(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`);\n }\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n },\n },\n [`${camelizedName}Outlets`]: {\n get() {\n const outlets = this.outlets.findAll(name);\n if (outlets.length > 0) {\n return outlets\n .map((outletElement) => {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n console.warn(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`, outletElement);\n })\n .filter((controller) => controller);\n }\n return [];\n },\n },\n [`${camelizedName}OutletElement`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n return outletElement;\n }\n else {\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n }\n },\n },\n [`${camelizedName}OutletElements`]: {\n get() {\n return this.outlets.findAll(name);\n },\n },\n [`has${capitalize(camelizedName)}Outlet`]: {\n get() {\n return this.outlets.has(name);\n },\n },\n };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n return targets.reduce((properties, targetDefinition) => {\n return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n return {\n [`${name}Target`]: {\n get() {\n const target = this.targets.find(name);\n if (target) {\n return target;\n }\n else {\n throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n }\n },\n },\n [`${name}Targets`]: {\n get() {\n return this.targets.findAll(name);\n },\n },\n [`has${capitalize(name)}Target`]: {\n get() {\n return this.targets.has(name);\n },\n },\n };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n const propertyDescriptorMap = {\n valueDescriptorMap: {\n get() {\n return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n return Object.assign(result, { [attributeName]: valueDescriptor });\n }, {});\n },\n },\n };\n return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n const { key, name, reader: read, writer: write } = definition;\n return {\n [name]: {\n get() {\n const value = this.data.get(key);\n if (value !== null) {\n return read(value);\n }\n else {\n return definition.defaultValue;\n }\n },\n set(value) {\n if (value === undefined) {\n this.data.delete(key);\n }\n else {\n this.data.set(key, write(value));\n }\n },\n },\n [`has${capitalize(name)}`]: {\n get() {\n return this.data.has(key) || definition.hasCustomDefaultValue;\n },\n },\n };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n return valueDescriptorForTokenAndTypeDefinition({\n controller,\n token,\n typeDefinition,\n });\n}\nfunction parseValueTypeConstant(constant) {\n switch (constant) {\n case Array:\n return \"array\";\n case Boolean:\n return \"boolean\";\n case Number:\n return \"number\";\n case Object:\n return \"object\";\n case String:\n return \"string\";\n }\n}\nfunction parseValueTypeDefault(defaultValue) {\n switch (typeof defaultValue) {\n case \"boolean\":\n return \"boolean\";\n case \"number\":\n return \"number\";\n case \"string\":\n return \"string\";\n }\n if (Array.isArray(defaultValue))\n return \"array\";\n if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n const { controller, token, typeObject } = payload;\n const hasType = isSomething(typeObject.type);\n const hasDefault = isSomething(typeObject.default);\n const fullObject = hasType && hasDefault;\n const onlyType = hasType && !hasDefault;\n const onlyDefault = !hasType && hasDefault;\n const typeFromObject = parseValueTypeConstant(typeObject.type);\n const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default);\n if (onlyType)\n return typeFromObject;\n if (onlyDefault)\n return typeFromDefaultValue;\n if (typeFromObject !== typeFromDefaultValue) {\n const propertyPath = controller ? `${controller}.${token}` : token;\n throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${typeObject.default}\" is of type \"${typeFromDefaultValue}\".`);\n }\n if (fullObject)\n return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n const { controller, token, typeDefinition } = payload;\n const typeObject = { controller, token, typeObject: typeDefinition };\n const typeFromObject = parseValueTypeObject(typeObject);\n const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n const typeFromConstant = parseValueTypeConstant(typeDefinition);\n const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n if (type)\n return type;\n const propertyPath = controller ? `${controller}.${typeDefinition}` : token;\n throw new Error(`Unknown value type \"${propertyPath}\" for \"${token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n const constant = parseValueTypeConstant(typeDefinition);\n if (constant)\n return defaultValuesByType[constant];\n const hasDefault = hasProperty(typeDefinition, \"default\");\n const hasType = hasProperty(typeDefinition, \"type\");\n const typeObject = typeDefinition;\n if (hasDefault)\n return typeObject.default;\n if (hasType) {\n const { type } = typeObject;\n const constantFromType = parseValueTypeConstant(type);\n if (constantFromType)\n return defaultValuesByType[constantFromType];\n }\n return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n const { token, typeDefinition } = payload;\n const key = `${dasherize(token)}-value`;\n const type = parseValueTypeDefinition(payload);\n return {\n type,\n key,\n name: camelize(key),\n get defaultValue() {\n return defaultValueForDefinition(typeDefinition);\n },\n get hasCustomDefaultValue() {\n return parseValueTypeDefault(typeDefinition) !== undefined;\n },\n reader: readers[type],\n writer: writers[type] || writers.default,\n };\n}\nconst defaultValuesByType = {\n get array() {\n return [];\n },\n boolean: false,\n number: 0,\n get object() {\n return {};\n },\n string: \"\",\n};\nconst readers = {\n array(value) {\n const array = JSON.parse(value);\n if (!Array.isArray(array)) {\n throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n }\n return array;\n },\n boolean(value) {\n return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n },\n number(value) {\n return Number(value.replace(/_/g, \"\"));\n },\n object(value) {\n const object = JSON.parse(value);\n if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n }\n return object;\n },\n string(value) {\n return value;\n },\n};\nconst writers = {\n default: writeString,\n array: writeJSON,\n object: writeJSON,\n};\nfunction writeJSON(value) {\n return JSON.stringify(value);\n}\nfunction writeString(value) {\n return `${value}`;\n}\n\nclass Controller {\n constructor(context) {\n this.context = context;\n }\n static get shouldLoad() {\n return true;\n }\n static afterLoad(_identifier, _application) {\n return;\n }\n get application() {\n return this.context.application;\n }\n get scope() {\n return this.context.scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get targets() {\n return this.scope.targets;\n }\n get outlets() {\n return this.scope.outlets;\n }\n get classes() {\n return this.scope.classes;\n }\n get data() {\n return this.scope.data;\n }\n initialize() {\n }\n connect() {\n }\n disconnect() {\n }\n dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true, } = {}) {\n const type = prefix ? `${prefix}:${eventName}` : eventName;\n const event = new CustomEvent(type, { detail, bubbles, cancelable });\n target.dispatchEvent(event);\n return event;\n }\n}\nController.blessings = [\n ClassPropertiesBlessing,\n TargetPropertiesBlessing,\n ValuePropertiesBlessing,\n OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n", "// Configure Stimulus developer experience\nimport { Application } from '@hotwired/stimulus'\n\nconst application = Application.start()\napplication.debug = false\nwindow.Stimulus = application\n\nexport { application }\n", "import { DirectUpload } from '../rails/activestorage'\n\nexport default class {\n constructor (input) {\n this.input = input\n\n this.submit = input.form.querySelector('.btn-submit')\n this.progress = this.submit.querySelector('.btn-submit-progress')\n this.loader = this.submit.querySelector('.btn-submit-loader')\n }\n\n upload () {\n return new Promise((resolve, reject) => {\n const file = this.input.files[0]\n const url = this.input.dataset.directUploadUrl\n\n if (!file) {\n resolve('Nothing to upload')\n return\n }\n\n this.submit.classList.add('btn-submit-uploading')\n this.directUpload(this.submit, this.input, file, url, resolve, reject, this)\n }).catch(() => {\n // Do nothing. Yes nothing, I just want Sentry to shut up.\n }).then(() => {\n // For some bullshit reason direct uploads disable all fields in the browser and\n // this breaks ajax controller. Reenable the stuff.\n this.input.form.elements.forEach(element => {\n element.disabled = false\n })\n })\n }\n\n directUpload (submit, input, file, url, resolve, reject, caller) {\n new DirectUpload(file, url, caller).create((error, blob) => {\n if (error) {\n submit.classList.remove('btn-submit-uploading')\n reject(error)\n } else {\n const hiddenField = document.createElement('input')\n hiddenField.setAttribute('type', 'hidden')\n hiddenField.setAttribute('value', blob.signed_id)\n hiddenField.name = input.name\n input.form.appendChild(hiddenField)\n resolve('Upload done')\n }\n })\n }\n\n directUploadWillStoreFileWithXHR (request) {\n request.upload.addEventListener('progress',\n event => this.directUploadDidProgress(event))\n }\n\n directUploadDidProgress (event) {\n this.progress.style.width = `${event.loaded / event.total * 100}%`\n }\n}\n", "import { DirectUpload } from '../rails/activestorage'\n\nexport default class {\n constructor (input) {\n this.input = input\n\n this.submit = input.form.querySelector('.btn-submit')\n this.progress = this.submit.querySelector('.btn-submit-progress')\n this.loader = this.submit.querySelector('.btn-submit-loader')\n\n this.totalSize = 0\n this.loaded = {}\n }\n\n upload () {\n const promises = Array.from(this.input.files).map(file => {\n return new Promise((resolve, reject) => {\n const url = this.input.dataset.directUploadUrl\n this.submit.classList.add('btn-submit-uploading')\n this.totalSize += file.size\n\n this.directUpload(this.submit, this.input, file, url, resolve, reject, this)\n }).catch(() => {\n // Do nothing. Yes nothing, I just want Sentry to shut up.\n })\n })\n\n return Promise.allSettled(promises).catch(() => {\n // Do nothing. Yes nothing, I just want Sentry to shut up.\n })\n }\n\n directUpload (submit, input, file, url, resolve, reject, caller) {\n new DirectUpload(file, url, caller).create((error, blob) => {\n if (error) {\n submit.classList.remove('btn-submit-uploading')\n reject(error)\n } else {\n const hiddenField = document.createElement('input')\n hiddenField.setAttribute('type', 'hidden')\n hiddenField.setAttribute('value', blob.signed_id)\n hiddenField.name = input.name\n input.form.appendChild(hiddenField)\n resolve('Upload done')\n }\n })\n }\n\n directUploadWillStoreFileWithXHR (request) {\n request.upload.addEventListener('progress',\n event => this.directUploadDidProgress(event))\n }\n\n directUploadDidProgress (event) {\n this.loaded[event.total] = event.loaded // No ids, so let's do something fugly and use the file size as the id\n const totalLoaded = Object.values(this.loaded).reduce((sum, x) => sum + x)\n\n console.log(this.loaded)\n console.log(totalLoaded / this.totalSize)\n this.progress.style.width = `${totalLoaded / this.totalSize * 100}%`\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\nimport DirectUpload from '../../lib/direct_upload'\nimport DirectUploadMultiple from '../../lib/direct_upload_multiple'\n\n/*\n * This is FestaLab's ajax controller. It is applied to the body of the\n * HTML document and therefore its functions are available in all pages.\n * It's a replacement for both Rails UJS remote fields and rails form_with\n *\n * Major features are:\n *\n * 1 - Support for GET, POST, PATCH and DELETE methods\n * 2 - Support for triggering on any javascript event, even custom ones\n * 3 - Choosing the target using data-target attribute\n * 4 - Choosing how response will be inserted using data-swap attribute\n * 5 - Choosing which inputs will be send along using data-params attribute\n * 6 - Alternate activations: delay and pooling\n * 7 - Direct uploads to cloud storage\n *\n * TODO:\n * 1 - Lock element from further requests\n */\n\nexport default class extends Controller {\n // ============================================================================\n // LIFE CYCLE\n // ============================================================================\n /*\n * When connecting, prepare elements that rely on 'delay' and 'pooling' activations\n */\n connect () {\n this.customActivations = {}\n this.bindCustomActivations()\n }\n\n // ============================================================================\n // ACTIONS\n // ============================================================================\n\n /*\n * Issues a GET request to the server\n */\n get (event) {\n this.handleAjaxRequest(event, 'GET')\n }\n\n /*\n * Issues a POST request to the server\n */\n post (event) {\n this.handleAjaxRequest(event, 'POST')\n }\n\n /*\n * Issues a PATCH request to the server\n */\n patch (event) {\n this.handleAjaxRequest(event, 'PATCH')\n }\n\n /*\n * Issues a DELETE request to the server\n */\n delete (event) {\n this.handleAjaxRequest(event, 'DELETE')\n }\n\n /*\n * Downloads the requested url\n */\n download (event) {\n const link = document.createElement('a')\n const { url, filename } = event.currentTarget.dataset\n\n link.href = url\n link.download = filename\n document.body.append(link)\n link.click()\n link.remove()\n window.URL.revokeObjectURL(url)\n }\n\n // ============================================================================\n // INTERNAL: AJAX ENGINE\n // ============================================================================\n /*\n * Ajax calls can be triggered by manual events, debounced events, etc.\n * This method detects which type of trigger is happening and handles\n * it appropriately.\n *\n * For example, a manual event (click->ajax#get) will be dispatched\n * directly to issueAjaxRequest. A debounced event (data-activation=\"delay\")\n * will be dispatched to customActivations.\n *\n * For standard calls, it will also check for the presence of direct upload fields\n * and upload them before performing the ajax call\n *\n * Finally, this method prevents the browser from submitting forms so that they\n * can be posted via ajax.\n */\n async handleAjaxRequest (event, verb) {\n if (event.type === 'submit') event.preventDefault()\n const target = event.currentTarget\n\n const { activationId } = target.dataset\n if (activationId) {\n this.customActivations[activationId]()\n } else {\n await this.handleDirectUpload(target, verb)\n this.issueAjaxRequest(target, verb)\n }\n }\n\n /*\n * Handles redirection after an ajax request. If HTTP verb\n * used was a GET, advances the page, leaving it in the cache.\n * Otherwise, replace the current page\n */\n handleRedirect (element, redirect) {\n const url = redirect === 'self' ? window.location : redirect\n const action = element.dataset.navigation || 'advance'\n\n // Only redirect if element does not have a no-redirect instruction\n if (redirect !== 'false') {\n Turbo.cache.clear()\n Turbo.visit(url, { action: action })\n } else {\n this.enableElement(element)\n }\n }\n\n /*\n * If there are file inputs in the form, uploads them to the cloud storage.\n * After the upload is done, add a hidden field with the blob signed id so\n * that it is picked up during the form submission and sent to the controller\n *\n * For now it does not have support for multiple files\n */\n handleDirectUpload (target, verb) {\n if (verb === 'GET') return\n\n const form = target.closest('form')\n const input = form && form.querySelector('input[type=file]')\n if (!input) {\n // Do Nothing\n } else if (input.files.length > 1) {\n return new DirectUploadMultiple(input).upload()\n } else {\n return new DirectUpload(input).upload()\n }\n }\n\n /*\n * Performs the required ajax call. Detailed explanations will\n * be on each method called, but the steps are:\n *\n * 1 - Check if the triggering element is valid, and stop if not.\n * 2 - Prepare the headers so that the server can handle the request\n * 3 - If the verb is anything but GET, ready the payload of inputs\n * 4 - If the verb is GET, add any inputs in data-params to the url\n * 5 - Disable the triggering element to prevent further requests\n * 6 - Send the request\n * 7 - When the response is received:\n * 6.1 - If the response was \"no content\" or has a redirect header, redirect\n * 6.2 - If the response was \"ok\", enable the trigger and insert the HTML\n */\n issueAjaxRequest (element, verb) {\n verb = verb.toUpperCase()\n\n // Do not issue an ajax request for an element that is marked as invalid\n this.fire(element, 'ajax:before', false)\n if (element.dataset.valid === 'false') return\n\n // Prepare everything that will be needed for the request\n const headers = this.prepareHeaders(verb)\n const payload = this.preparePayload(element, verb)\n const path = this.preparePath(element, verb, payload)\n const responseType = this.prepareResponseType(element)\n\n // Create the request and ensure its treated as html\n const xhr = new XMLHttpRequest()\n xhr.open(verb, path, true)\n xhr.overrideMimeType('text/html')\n xhr.responseType = responseType\n\n // Add the headers to the request so that the server knows how to handle it\n Object.keys(headers).forEach(header => {\n xhr.setRequestHeader(header, headers[header])\n })\n\n // Setup the callback that will handle the response\n xhr.onload = () => {\n try {\n const status = xhr.status\n const response = (responseType === 'document' ? xhr.response : xhr.responseText)\n const redirect = element.dataset.redirect || xhr.getResponseHeader('X-Xhr-Redirect') // DO NOT CHANGE!\n\n if (status === 200 && redirect) {\n this.handleRedirect(element, redirect)\n } else if (status === 204) {\n this.enableElement(element)\n this.delayedFire(element, 'ajax:success')\n } else if (status >= 200 && status < 300) {\n this.enableElement(element)\n this.insert(element, response)\n this.delayedFire(element, 'ajax:success')\n } else if (status === 406) {\n this.enableElement(element)\n this.insert(element, response)\n this.delayedFire(element, 'ajax:invalid')\n } else {\n this.enableElement(element)\n this.delayedFire(element, 'ajax:error')\n }\n\n this.delayedFire(element, 'ajax:done')\n this.delayedFire(document.body, 'ajax:done')\n } catch (error) {\n // Do Nothing\n }\n }\n\n // Do not disable the target element before this, or the 'prepare' methods will break\n this.delayedFire(element, 'ajax:start')\n this.disableElement(element)\n\n // Send the ajax request. If the verb is not GET, send the payload\n // as the request body (GET request will have the payload url encoded in the path).\n xhr.send(verb === 'GET' ? null : this.encodePayload(payload))\n }\n\n // ============================================================================\n // INTERNAL: PAYLOAD HANDLING\n // ============================================================================\n\n /*\n * Locates all inputs/vars that should be part of this request and returns then\n * as a hash of name/value pairs to be used either in the URL (GET) or body.\n */\n preparePayload (element, verb) {\n const values = {}\n const processed = []\n\n // For a non-GET include the closest form. For GET requests include the params\n if (verb !== 'GET') {\n this.addElementToPayload(processed, values, element.closest('form'))\n } else {\n this.addParamsToPayload(processed, values, element)\n }\n\n // Include the trigger element itself (also handles GET Forms)\n this.addElementToPayload(processed, values, element)\n\n // Include vars in the element\n this.addVarsToPayload(values, element)\n\n // Filters values according to data-params\n return this.filterPayload(values, element)\n }\n\n /*\n * If the triggering element has the data-params attribute,\n * add all inputs contained within in the payload. They will\n * later be filtered so that only the inputs of the correct\n * params are included\n */\n addParamsToPayload (processed, values, element) {\n const config = this.extractConfig(element, 'params')\n if (config.params && config.params !== 'none') {\n config.element.querySelectorAll('input').forEach(element => {\n this.addElementToPayload(processed, values, element)\n })\n\n config.element.querySelectorAll('select').forEach(element => {\n this.addElementToPayload(processed, values, element)\n })\n }\n }\n\n /*\n * Add an element to the payload, as long as it has not\n * been added before and it is not an invalid element.\n *\n * If multiple elements have the same name, the value will\n * be turned into an array.\n *\n * If the element is a form, all its inputs all be added.\n */\n addElementToPayload (processed, values, element) {\n if (element == null || this.alreadyAddedToPayload(processed, element)) {\n return\n } else {\n processed.push(element)\n }\n\n // Check if the element is a valid input before processing it\n if (this.shouldAddToPayload(element)) {\n const name = element.name\n const value = element.value\n\n if (value != null) {\n // Store the value and handle arrays gracefully\n const current = values[name]\n if (current !== undefined) {\n if (Array.isArray(current)) {\n current.push(value)\n } else {\n values[name] = [current, value]\n }\n } else {\n values[name] = value\n }\n }\n }\n\n // If this element is a form, loop on its elements\n if (element.matches('form')) {\n const inputs = element.elements\n for (let i = 0; i < inputs.length; i++) {\n this.addElementToPayload(processed, values, inputs[i])\n }\n }\n\n // If this element is a standalone checkbox or radio, and it's uncheked, add its pair\n if (element.dataset.standalone === 'true' && element.checked === false) {\n const uncheckedPair = element.parentElement.querySelector('[type=\"hidden\"]')\n this.addElementToPayload(processed, values, uncheckedPair)\n }\n }\n\n /*\n * If the element has the data-vars attribute, add those\n * to the payload\n */\n addVarsToPayload (values, element) {\n const { vars } = this.extractConfig(element, 'vars')\n if (!vars) return\n\n vars.split(',').forEach(kvp => {\n const pair = kvp.trim().split('=')\n\n // Store the value and handle arrays gracefully\n if (pair[0].indexOf('[]') > 0) {\n if (Array.isArray(values[pair[0]])) {\n values[pair[0]].push(pair[1])\n } else {\n values[pair[0]] = [pair[1]]\n }\n } else {\n values[pair[0]] = pair[1]\n }\n })\n }\n\n /*\n * Make sure that invalid elements are not added to the payload, as per HTML spec.\n * 1 - Elements without a name or disabled\n * 3 - Submitter types (jquery/serialize.js)\n * 4 - Unchecked selectors\n * 5 - File inputs, which are handled through direct upload\n */\n shouldAddToPayload (element) {\n if (element.name === '' || element.name == null || element.disabled) {\n return false\n }\n\n if (element.type === 'button' || element.type === 'submit' || element.tagName === 'image' || element.tagName === 'reset' || element.tagName === 'file') {\n return false\n }\n\n if (element.type === 'checkbox' || element.type === 'radio') {\n return element.checked\n }\n\n if (element.type === 'file') {\n return false\n }\n\n return true\n }\n\n /*\n * Make sure that no elements are added twice to the payload\n */\n alreadyAddedToPayload (processed, element) {\n return !!processed.find(elt => element.isSameNode(elt))\n }\n\n /*\n * If the element has a data-params attribute,\n * make sure that only the attributes listed there\n * are present in the payload\n */\n filterPayload (values, element) {\n const { params } = this.extractConfig(element, 'params')\n if (!params) {\n return values\n } else if (params === 'none') {\n return {}\n } else if (params === 'all') {\n return values\n } else {\n const newValues = {}\n params.split(',').forEach((param) => {\n param = param.trim()\n newValues[param] = values[param]\n })\n return newValues\n }\n }\n\n /*\n * Turns a hash into an encoded string that can be\n * used in the url or body of the ajax request\n */\n encodePayload (values) {\n let url = ''\n\n for (const key in values) {\n if (Object.prototype.hasOwnProperty.call(values, key)) {\n const value = values[key]\n if (Array.isArray(value)) {\n value.forEach(v => { url = this.appendParamToUrl(url, key, v) })\n } else {\n url = this.appendParamToUrl(url, key, value)\n }\n }\n }\n\n return url\n }\n\n // ============================================================================\n // INTERNAL: PATH\n // ============================================================================\n\n /*\n * Extracts the path from the data-url of the triggering element, the action of\n * the triggering element (forms) or the current document location.\n *\n * If the verb is GET and there is a payload that must be sent, then it is url\n * encoded into the path, with the anchor at the end\n */\n preparePath (element, verb, payload) {\n let path = this.extractConfig(element, 'url').value || element.action || document.location.href\n\n // If this is a GET request and we DO have a payload, we must add it to the Path\n if (verb === 'GET') {\n const splitPath = path.split('#')\n const anchor = splitPath[1]\n path = splitPath[0]\n\n if (Object.keys(payload).length !== 0) {\n if (path.indexOf('?') < 0) {\n path += '?'\n } else {\n path += '&'\n }\n\n path += this.encodePayload(payload)\n if (anchor) {\n path += '#' + anchor\n }\n }\n\n return path\n } else {\n return path\n }\n }\n\n // ============================================================================\n // INTERNAL: HEADERS & RESPONSE\n // ============================================================================\n\n /*\n * Returns a hash of headers that are encessary for the server to properly handle\n * the request\n *\n * X-Requested-With: Will make the server understand this was an ajax request.\n * It will also force redirects to be returned as code 200 with\n * the X-Xhr-Redirect header set\n * Accept: Forces the server to return an HTML response\n * Content-Type: Indicates the format that the payload uses\n * X-CSRF-Token: Plays nice with server side forgery protection\n */\n prepareHeaders (verb) {\n const headers = {\n 'X-Requested-With': 'XMLHttpRequest',\n 'Accept': 'text/html'\n }\n\n if (verb !== 'GET') {\n headers['Content-Type'] = 'application/x-www-form-urlencoded'\n\n const token = document.querySelector('meta[name=\"csrf-token\"]')\n if (token) headers['X-CSRF-Token'] = token.attributes.content.value\n }\n\n return headers\n }\n\n /*\n * If the user wants to use the page as the target, the server should answer with a\n * full html document. In this case, the the responseType to 'document' so that\n * XmlHttpRequest will parse it correctly\n */\n prepareResponseType (element) {\n return this.extractConfig(element, 'target').value === 'page' ? 'document' : ''\n }\n\n // ============================================================================\n // INTERNAL: DOM MANIPULATION\n // ============================================================================\n\n /*\n * Inserts the content of the incoming response into the document according to\n * the various data attributes defined in the trigger.\n */\n insert (element, response) {\n // If response is empty, don't do anything\n if (response === '') return\n\n // Check that the triggering element is still in the page\n if (!document.body.contains(element)) return\n\n const html = this.parseResponse(element, response)\n const swap = this.chooseSwap(element)\n const target = this.chooseTarget(element)\n const { extract } = this.extractConfig(element, 'extract')\n\n if (extract) {\n this.insertExtract(target, extract, html)\n } else if (target === 'auto') {\n this.insertAuto(swap, html)\n } else if (target === 'multiple') {\n this.insertMultiple(swap, html)\n } else if (target === 'content') {\n this.insertContent(html)\n } else {\n this.insertSwap(target, swap, html)\n }\n }\n\n insertExtract (target, extract, html) {\n extract.split(',').forEach(name => {\n const selector = `[name='${name.trim()}']`\n const destination = target.querySelector(selector)\n const source = html.querySelector(selector)\n\n destination.value = source.value\n\n if (destination.tagName === 'SELECT') {\n this.fire(destination, 'change')\n } else {\n this.fire(destination, 'input')\n }\n })\n\n this.bindCustomActivations()\n this.delayedFire(target, 'ajax:load')\n }\n\n insertAuto (swap, html) {\n const tmp = document.createElement('html')\n tmp.innerHTML = html.trim()\n const body = tmp.querySelector('body')\n\n const target = document.querySelector(`#${body.firstElementChild.id}`)\n target[swap] = html\n }\n\n insertContent (html) {\n const tmp = document.createElement('html')\n tmp.innerHTML = html.trim()\n const body = tmp.querySelector('body')\n\n const target = document.querySelector(`#${body.firstElementChild.id}`)\n target.innerHTML = body.firstElementChild.innerHTML\n }\n\n insertMultiple (swap, html) {\n const element = document.createElement('html')\n element.innerHTML = html.trim()\n const sources = Array.from(element.querySelector('body').children)\n\n sources.filter(source => source.id).forEach(source => {\n const target = document.querySelector(`#${source.id}`)\n\n if (document.body.contains(target)) {\n target[swap] = source[swap]\n\n this.bindCustomActivations()\n this.delayedFire(target, 'ajax:load')\n }\n })\n }\n\n insertSwap (target, swap, html) {\n if (swap === 'innerHTML' || swap === 'outerHTML') {\n target[swap] = html\n } else {\n target.insertAdjacentHTML(swap, html)\n }\n\n this.bindCustomActivations()\n this.delayedFire(target, 'ajax:load')\n }\n\n /*\n * Disables an element by adding the `disabled` class and attribute to it\n */\n disableElement (element) {\n this.toggleElement(element, false)\n }\n\n /*\n * Enables an element by removing the `disabled` class and attribute from it\n */\n enableElement (element) {\n this.toggleElement(element, true)\n }\n\n /*\n * Enables/Disables an element by toggling the `disabled` class and attribute on it\n */\n toggleElement (element, force) {\n if (!element || element.dataset.disable === 'false') {\n return\n }\n\n // Android chrome as usual is buggy and doesn' blur when an input is disabled\n if (element.tagName === 'INPUT' && !force) {\n element.blur()\n\n /*\n * We sometimes use <button form=\"id\"> to submit forms from outside. This ensures said\n * button is also toggled along with the form\n */\n } else if (element.tagName === 'FORM') {\n const submit = document.querySelector(`[form='${element.id}']`)\n this.toggleElement(submit, force)\n }\n\n element.disabled = !force\n element.classList.toggle('disabled', !force)\n }\n\n /*\n * Given an element, extract from it or the closest ancestor the attribute we are looking\n * for. Example: attribute = 'swap', will first look in the element for data-swap, and if\n * not found, will search through all ancestors of the element for data-swap.\n */\n extractConfig (element, attribute) {\n const key = attribute.replace(/-([a-z])/g, g => g[1].toUpperCase())\n const selector = attribute.replace(/([a-zA-Z])(?=[A-Z])/g, '$1-').toLowerCase()\n\n const source = element.dataset[key] ? element : element.closest(`[data-${selector}]`)\n if (!source) return { element }\n\n const config = {}\n config.element = source\n config.value = source.dataset[key]\n config[key] = source.dataset[key]\n\n return config\n }\n\n /*\n * Analyses the response and figures out which part of it contains the HTML to\n * be inserted into the document\n */\n parseResponse (element, response) {\n // Response is an HTMLDocument (target=page), return the body\n if (response instanceof HTMLDocument) {\n return response.body.innerHTML\n }\n\n // A specific fragment of the response was requested, extract it and return\n const { select } = this.extractConfig(element, 'select')\n if (select) {\n const content = document.createElement('html')\n content.innerHTML = response.trim()\n return content.querySelector(select).outerHTML\n }\n\n // Specific inputs were requested, turn the response into an HTML element\n // so we can use it later\n const { extract } = this.extractConfig(element, 'extract')\n if (extract) {\n const content = document.createElement('html')\n content.innerHTML = response.trim()\n return content\n }\n\n // No further processing required, return as is\n return response\n }\n\n bindCustomActivations () {\n document.querySelectorAll('[data-action][data-activation*=\"delay\"]:not([data-activation-id])').forEach(this.delay.bind(this))\n document.querySelectorAll('[data-action][data-activation*=\"pool\"]:not([data-activation-id])').forEach(this.pool.bind(this))\n }\n\n // ============================================================================\n // INTERNAL: UTILITY\n // ============================================================================\n\n /*\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing.\n */\n debounce (func, wait, immediate) {\n let timeout\n\n return function () {\n const context = this\n const args = arguments\n const later = function () {\n timeout = null\n if (!immediate) func.apply(context, args)\n }\n const callNow = immediate && !timeout\n clearTimeout(timeout)\n timeout = setTimeout(later, wait)\n if (callNow) func.apply(context, args)\n }\n }\n\n /*\n * Dispatches an event on the object, but delays this to the next micro task\n * which gives other code in the task the chance to rebind anything they need\n */\n delayedFire (obj, name) {\n Promise.resolve().then(() => {\n this.fire(obj, name)\n })\n }\n\n /*\n * Dispatches an event on the object\n */\n fire (obj, name, bubbles = true) {\n // Check that the target element is still in the page\n if (!document.body.contains(obj)) return\n\n const event = new CustomEvent(name, {\n bubbles: bubbles,\n cancelable: true,\n detail: null\n })\n obj.dispatchEvent(event)\n return !event.defaultPrevented\n }\n\n /*\n * Generate a random string in a fast way\n */\n randomId () {\n return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15)\n }\n\n /*\n * Encodes the name and value of a param and appends to the url, ensuring\n * it is preceeded by an ampersand\n */\n appendParamToUrl (url, name, value) {\n if (url !== '') url += '&'\n\n url += encodeURIComponent(name) + '=' + encodeURIComponent(value)\n\n return url\n }\n\n // ============================================================================\n // CONFIGURATION: DATA-ACTIVATION\n // ============================================================================\n delay (element) {\n const delay = Number(element.dataset.activation.split(' ')[1])\n const action = element.dataset.action.match(/ajax#([a-z]*)/)[1]\n const id = this.randomId()\n\n element.setAttribute('data-activation-id', id)\n this.customActivations[id] = this.debounce(() => {\n this.issueAjaxRequest(element, action)\n }, delay)\n\n this.delayedFire(element, 'ajax:load')\n }\n\n pool (element) {\n const delay = Number(element.dataset.activation.split(' ')[1])\n const action = element.dataset.action.split('#')[1]\n const id = this.randomId()\n\n element.setAttribute('data-activation-id', id)\n this.customActivations[id] = setInterval(() => {\n if (document.body.contains(element)) {\n this.issueAjaxRequest(element, action)\n } else {\n clearInterval(this.customActivations[id])\n }\n }, delay)\n }\n\n // ============================================================================\n // CONFIGURATION: DATA-SWAP\n // ============================================================================\n /*\n * Determines the swap strategy that will be used to insert the response into\n * the document. An 'auto' target defaults to 'outerHTML', otherwise 'innerHTML'\n * or the value of the data-swap attribute will be used\n */\n chooseSwap (element) {\n const { target } = this.extractConfig(element, 'target')\n const { swap } = this.extractConfig(element, 'swap')\n\n if (target === 'page' || target === 'content') {\n return 'innerHTML'\n } else if (target === 'auto' || target === 'multiple') {\n return swap || 'outerHTML'\n } else {\n return swap || 'innerHTML'\n }\n }\n\n // ============================================================================\n // CONFIGURATION: DATA-TARGET\n // ============================================================================\n /*\n * Determines the target that will be used as a reference point to insert the\n * response into the document. A 'auto' target will automatically search for\n * an element of the same id of the response, otherwise the trigger of the\n * ajax call or the element specified in the data-target attribute will be\n * used.\n */\n chooseTarget (element) {\n const config = this.extractConfig(element, 'target')\n\n if (config.target === 'auto' || config.target === 'multiple' || config.target === 'content') {\n return config.value\n } else if (config.target.indexOf('closest') !== -1) {\n return config.element.closest(config.target.split(' ')[1])\n } else if (config.target === 'parent') {\n return config.element.parentElement\n } else if (config.target === 'this') {\n return config.element\n } else if (config.target === 'page') {\n return document.body\n } else {\n return document.querySelector(config.target)\n }\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static classes = ['add', 'remove']\n static values = { delay: Number }\n\n connect () {\n this.animateByAdding()\n this.animateByRemoving()\n }\n\n animateByAdding () {\n if (!this.hasAddClass) return\n\n setTimeout(() => {\n this.element.classList.add(this.addClass)\n }, this.delay)\n }\n\n animateByRemoving () {\n if (!this.hasRemoveClass) return\n\n setTimeout(() => {\n this.element.classList.remove(this.removeClass)\n }, this.delay)\n }\n\n get delay () {\n return this.hasDelayValue ? this.delayValue : 100\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n connect () {\n this.initWidgets()\n }\n\n initWidgets () {\n this.element.dataset.controller += ' ajax form util'\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n connect () {\n setTimeout(() => this.render(), this.delay)\n }\n\n render () {\n const xhr = new XMLHttpRequest()\n xhr.open('GET', `${this.url}${this.queryString()}`, true)\n xhr.overrideMimeType('X-Requested-With', 'XMLHttpRequest')\n xhr.setRequestHeader('Accept', 'text/html')\n xhr.onload = () => { this.element.outerHTML = xhr.responseText }\n xhr.send()\n }\n\n queryString () {\n const { width, height } = this.boundaries\n\n let params = ''\n if (!!width && width > 0 && this.forwardWidth) params += `&width=${width}`\n if (!!height && height > 0 && this.forwardHeight) params += `&height=${height}`\n\n return params\n }\n\n get boundaries () {\n return this.forwardWidth || this.forwardHeight ? this.element.getBoundingClientRect() : {}\n }\n\n get forwardBoundaries () {\n return this.data.get('forwardBoundaries') === 'true'\n }\n\n get forwardWidth () {\n return this.data.get('forwardWidth') === 'true' || this.forwardBoundaries\n }\n\n get forwardHeight () {\n return this.data.get('forwardHeight') === 'true' || this.forwardBoundaries\n }\n\n get url () {\n return this.data.get('url')\n }\n\n get delay () {\n return Number(this.data.get('delay') || 10)\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['crumbs', 'past', 'current']\n static values = {\n id: String,\n index: Number,\n title: String\n }\n\n /* ==== LIFE CYCLE ==== */\n connect () {\n if (this.valid()) {\n this.pushState()\n this.displayState()\n }\n }\n\n /* ==== INTERNAL API */\n pushState () {\n const history = this.history\n\n // This step is already in the history, just ignore it.\n if (history[this.indexValue] && history[this.indexValue].url === this.state.url) return\n\n // If there are 4 steps in the current history, and we are setting step 3,\n // we must remove the existing steps 3 and 4 before adding the new step 3\n\n history.length = this.indexValue\n history.push(this.state)\n\n this.history = history\n }\n\n displayState () {\n this.crumbsTarget.innerHTML = ''\n\n this.history.forEach((step, index) => {\n if (index <= this.indexValue) {\n this.addStep(step, index < this.indexValue)\n }\n })\n }\n\n addStep (attributes, isPastState) {\n const template = isPastState ? this.pastTarget : this.currentTarget\n const crumb = template.content.cloneNode(true)\n\n const wrapper = crumb.firstElementChild\n wrapper.title = attributes.title\n wrapper.href = isPastState ? attributes.url : null\n\n const content = wrapper.querySelector('span')\n content.title = attributes.title\n content.textContent = attributes.title\n\n this.crumbsTarget.appendChild(crumb)\n }\n\n valid () {\n return this.idValue !== '' && this.indexValue < this.history.length + 1\n }\n\n /* ==== GETTERS & SETTERS */\n get state () {\n const title = this.titleValue || document.getElementsByTagName('title')[0].innerHTML\n return { title: title, url: window.location.href }\n }\n\n get history () {\n return JSON.parse(sessionStorage.getItem(`breadcrumbs-${this.idValue}`)) || []\n }\n\n set history (history) {\n sessionStorage.setItem(`breadcrumbs-${this.idValue}`, JSON.stringify(history))\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\nimport Util from '../../lib/util'\n\nexport default class extends Controller {\n static targets = ['item']\n static classes = ['closeAnimation']\n\n checked (e) {\n const currentItem = e.currentTarget.closest('[data-checklist-target]')\n const index = this.itemTargets.findIndex(item => item === currentItem)\n const nextItem = index >= 0 ? this.itemTargets[index + 1] : null\n\n currentItem.open = false\n nextItem.open = true\n Util.scrollToElement(nextItem, -10)\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\nimport ClipboardJS from 'clipboard'\n\nexport default class extends Controller {\n static targets = ['button']\n static classes = ['copied']\n static values = { copied: String }\n\n connect () {\n this.clipboard = new ClipboardJS(this.element)\n this.clipboard.on('success', this.notify.bind(this))\n }\n\n disconnect () {\n this.clipboard.destroy()\n }\n\n notify (e) {\n const button = this.clipboardButton(e)\n const originalText = button.innerHTML\n\n button.innerHTML = this.copiedText\n if (this.hasCopiedClass) button.classList.add(this.copiedClass)\n\n setTimeout(() => {\n button.innerHTML = originalText\n if (this.hasCopiedClass) button.classList.remove(this.copiedClass)\n }, 3000)\n }\n\n clipboardButton (e) {\n if (this.hasButtonTarget) {\n return this.buttonTarget\n } else {\n return e.trigger || e.target\n }\n }\n\n get copiedText () {\n return this.hasCopiedValue ? this.copiedValue : 'Copiado!'\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static values = {\n elementSelector: String,\n requestUrl: String,\n useBubbling: { type: Boolean, default: false },\n ignoreClass: String,\n }\n\n connect() {\n this.requestMade = false\n\n const element = document.querySelector(this.elementSelectorValue)\n if (element) {\n element.addEventListener('click', this.requestOnce.bind(this), this.useBubblingValue)\n } else {\n console.error(`Element not found: ${this.elementSelectorValue}`)\n }\n }\n\n requestOnce(event) {\n if (this.ignoreClick(event.target)) {\n return\n }\n\n if (!this.requestMade) {\n this.requestMade = true\n\n try {\n const url = new URL(this.requestUrlValue)\n\n fetch(url)\n .then(response => {\n if (!response.ok) {\n throw new Error('Network response was not ok')\n }\n })\n .catch(error => {\n console.error('Request failed', error)\n })\n } catch (error) {\n console.error('Invalid URL', error)\n }\n }\n }\n\n ignoreClick(target) {\n if (this.ignoreClassValue) {\n const selector = `.${this.ignoreClassValue}`\n\n return target.closest(selector) !== null\n }\n return false\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\nimport Formatter from '../../lib/formatter'\nimport Dom from '../../lib/dom'\n\nexport default class extends Controller {\n static targets = ['contactName', 'modal', 'list', 'contactNumber', 'contactButton', 'contactDisplayName']\n connect () {\n const supported = ('contacts' in navigator && 'ContactsManager' in window)\n if (!supported) {\n this.contactButtonTarget.remove()\n }\n }\n\n async getContacts () {\n try {\n const contacts = await navigator.contacts.select(['tel', 'name'])\n if (!contacts.length || !contacts[0].tel.length || !contacts[0].name.length) {\n return\n }\n\n Dom.fire(this.element, 'contactsPicker', null, { bubbles: true, cancelable: true })\n\n if (this.hasContactDisplayNameTarget) {\n this.fillName(contacts[0].name)\n }\n\n if (contacts[0].tel.length === 1) {\n this.fillContact(contacts[0].tel[0])\n } else {\n this.openModal(contacts[0].tel, contacts[0].name)\n }\n } catch (ex) {\n console.log(ex.toString())\n }\n }\n\n openModal (phoneNumbers, name) {\n this.contactNameTarget.innerHTML = name\n this.modalTarget.open = true\n const list = this.listTarget\n const contact = list.firstElementChild\n list.innerHTML = ''\n let clone\n for (let i = 0; i < phoneNumbers.length; i++) {\n clone = contact.cloneNode(true)\n clone.firstElementChild.id = 'contact-cta-' + i\n clone.firstElementChild.value = phoneNumbers[i]\n clone.lastElementChild.setAttribute('for', 'contact-cta-' + i)\n clone.lastElementChild.innerHTML = phoneNumbers[i]\n list.appendChild(clone)\n }\n }\n\n closeModal () {\n const chosenNumber = document.querySelector(\"input[name='contacts']:checked\").value\n this.fillContact(chosenNumber)\n this.modalTarget.open = false\n }\n\n fillContact (number) {\n const receiverNumber = this.contactNumberTarget\n receiverNumber.value = Formatter.auto_phone(number)\n receiverNumber.classList.add('form-field-filled')\n Dom.fire(receiverNumber, 'input', null)\n }\n\n fillName (name) {\n const receiverName = this.contactDisplayNameTarget\n receiverName.value = name\n receiverName.classList.add('form-field-filled')\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['days', 'hours', 'minutes', 'message']\n\n initialize () {\n this.startTime = new Date().getTime()\n this.updateCountdown()\n }\n\n connect () {\n this.internal = setInterval(() => this.updateCountdown(), 60000)\n }\n\n disconnect () {\n clearInterval(this.interval)\n }\n\n updateCountdown () {\n let deltaTime = this.scheduledDate.getTime() - new Date().getTime()\n\n if (this.isExpired()) {\n const redirectUrl = this.data.get('redirect-url')\n if (redirectUrl) {\n window.location.replace(redirectUrl)\n }\n deltaTime = new Date().getTime() - this.scheduledDate.getTime()\n }\n\n const minutes = 60 * 1000\n const hours = 60 * minutes\n const days = 24 * hours\n\n if (this.hasDaysTarget) {\n this.days = Math.floor(deltaTime / days)\n }\n\n if (this.hasHoursTarget) {\n this.hours = Math.floor((deltaTime % days) / hours)\n }\n\n if (this.hasMinutesTarget) {\n this.minutes = Math.ceil((deltaTime % hours) / minutes)\n }\n }\n\n isExpired () {\n return this.scheduledDate < new Date().getTime()\n }\n\n get scheduledDate () {\n if (this.data.get('timeLeft')) {\n return new Date(this.startTime + 60000 * Number(this.data.get('timeLeft')))\n } else {\n const [year, month, day] = this.data.get('scheduled-on').split('-')\n const [hours, minutes] = this.data.get('starts-at').split(':')\n\n return new Date(year, (month - 1), day, hours, minutes)\n }\n }\n\n set days (value) {\n this.daysTarget.textContent = value\n }\n\n set hours (value) {\n if (value < 10) value = [0, value].join('')\n this.hoursTarget.textContent = value\n }\n\n set minutes (value) {\n if (value < 10) value = [0, value].join('')\n this.minutesTarget.textContent = value\n }\n}\n", "/**!\n * Sortable 1.15.6\n * @author\tRubaXa <trash@rubaxa.org>\n * @author\towenm <owen23355@gmail.com>\n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n return _typeof(obj);\n}\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.15.6\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\n}\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction matches( /**HTMLElement*/el, /**String*/selector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n return false;\n}\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\nfunction closest( /**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n return null;\n}\nvar R_SPACE = /\\s+/g;\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\nfunction css(el, prop, val) {\n var style = el && el.style;\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n } while (!selfOnly && (el = el.parentNode));\n }\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n return matrixFn && new matrixFn(appliedTransforms);\n}\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n return list;\n }\n return [];\n}\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n\n/**\r\n * Returns the \"bounding client rect\" of given element\r\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\r\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\r\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\r\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\r\n * @param {[HTMLElement]} container The parent the element will be placed in\r\n * @return {Object} The boundingClientRect of el, with specified adjustments\r\n */\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode;\n\n // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect();\n\n // Set relative to edges of padding box of container\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n } while (container = container.parentNode);\n }\n }\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n\n/**\r\n * Checks if a side of an element is scrolled past a side of its parents\r\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\r\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\r\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\r\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\r\n */\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n\n /* jshint boss:true */\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n return false;\n}\n\n/**\r\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\r\n * and non-draggable elements\r\n * @param {HTMLElement} el The parent element\r\n * @param {Number} childNum The index of the child\r\n * @param {Object} options Parent Sortable's options\r\n * @return {HTMLElement} The child at index childNum, or null if not found\r\n */\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n currentChild++;\n }\n i++;\n }\n return null;\n}\n\n/**\r\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\r\n * @param {HTMLElement} el Parent element\r\n * @param {selector} selector Any other elements that should be ignored\r\n * @return {HTMLElement} The last child, ignoring ghostEl\r\n */\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n return last || null;\n}\n\n/**\r\n * Returns the index of an element within its parent for a selected set of\r\n * elements\r\n * @param {HTMLElement} el\r\n * @param {selector} selector\r\n * @return {number}\r\n */\nfunction index(el, selector) {\n var index = 0;\n if (!el || !el.parentNode) {\n return -1;\n }\n\n /* jshint boss:true */\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n return index;\n}\n\n/**\r\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\r\n * The value is returned in real pixels.\r\n * @param {HTMLElement} el\r\n * @return {Array} Offsets in the format of [left, top]\r\n */\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n return [offsetLeft, offsetTop];\n}\n\n/**\r\n * Returns the index of the object within the given array\r\n * @param {Array} arr Array that may or may not hold the object\r\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\r\n * @return {Number} The index of the object in the array, or -1\r\n */\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n return -1;\n}\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n } while (elem = elem.parentNode);\n return getWindowScrollingElement();\n}\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n return dst;\n}\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\nvar _throttleTimeout;\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\nfunction getChildContainingRectFromElement(container, options, ghostEl) {\n var rect = {};\n Array.from(container.children).forEach(function (child) {\n var _rect$left, _rect$top, _rect$right, _rect$bottom;\n if (!closest(child, options.draggable, container, false) || child.animated || child === ghostEl) return;\n var childRect = getRect(child);\n rect.left = Math.min((_rect$left = rect.left) !== null && _rect$left !== void 0 ? _rect$left : Infinity, childRect.left);\n rect.top = Math.min((_rect$top = rect.top) !== null && _rect$top !== void 0 ? _rect$top : Infinity, childRect.top);\n rect.right = Math.max((_rect$right = rect.right) !== null && _rect$right !== void 0 ? _rect$right : -Infinity, childRect.right);\n rect.bottom = Math.max((_rect$bottom = rect.bottom) !== null && _rect$bottom !== void 0 ? _rect$bottom : -Infinity, childRect.bottom);\n });\n rect.width = rect.right - rect.left;\n rect.height = rect.bottom - rect.top;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect);\n\n // If animating: compensate for current animation\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n target.toRect = toRect;\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) &&\n // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n }\n\n // if fromRect != toRect: animate\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n if (!time) {\n time = _this.options.animation;\n }\n _this.animate(target, animatingRect, toRect, time);\n }\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\nfunction repaint(target) {\n return target.offsetWidth;\n}\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n this.eventCanceled = false;\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return;\n // Fire global events if it exists in this sortable\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n\n // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized;\n\n // Add default options from plugin\n _extends(defaults, initialized.defaults);\n });\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return;\n\n // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, _excluded);\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread2({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\n ghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n\n _silent = false,\n savedInputChecked = [];\n\n/** @const */\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\n supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return;\n // false when <= IE11\n if (IE11OrLess) {\n return false;\n }\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n }(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n },\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n },\n /**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param {Number} x X position\r\n * @param {Number} y Y position\r\n * @return {HTMLElement} Element of the first found nearest Sortable\r\n */\n _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n if (insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n },\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n var group = {};\n var originalGroup = options.group;\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n },\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n },\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n };\n\n// #1184 fix - Prevent click event on fallback if dragged but item not changed position\nif (documentExists && !ChromeForAndroid) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n if (nearest) {\n // Create imitation event\n var event = {};\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n nearest[expando]._onDragOver(event);\n }\n }\n};\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n\n/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n this.el = el; // root element\n this.options = options = _extends({}, options);\n\n // Export instance\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n // Disabled on Safari: #1571; Enabled on Safari IOS: #2244\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && (!Safari || IOS),\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults);\n\n // Set default options\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n _prepareGroup(options);\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n // Setup drag mode\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n }\n\n // Bind events\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n sortables.push(this.el);\n\n // Restore sorting\n options.store && options.store.get && this.sort(options.store.get(this) || []);\n\n // Add animation state manager\n _extends(this, AnimationStateManager());\n}\nSortable.prototype = /** @lends Sortable.prototype */{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart( /** Event|TouchEvent */evt) {\n if (!evt.cancelable) return;\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n _saveInputCheckedState(el);\n\n // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n if (dragEl) {\n return;\n }\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n }\n\n // cancel dnd if original target is content editable\n if (originalTarget.isContentEditable) {\n return;\n }\n\n // Safari ignores further event handling after mousedown\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n target = closest(target, options.draggable, el, false);\n if (target && target.animated) {\n return;\n }\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n }\n\n // Get the index of the dragged element within its parent\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable);\n\n // Check filter\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n if (filter) {\n preventOnFilter && evt.preventDefault();\n return; // cancel dnd\n }\n }\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n }\n\n // Prepare `dragstart`\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart( /** Event */evt, /** Touch */touch, /** HTMLElement */target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n _this._onDrop();\n return;\n }\n // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n _this._disableDelayedDragEvents();\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n }\n\n // Bind the events: dragstart/dragend\n _this._triggerDragStart(evt, touch);\n\n // Drag start event\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n });\n\n // Chosen item\n toggleClass(dragEl, options.chosenClass, true);\n };\n\n // Disable \"draggable\"\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n if (options.supportPointer) {\n on(ownerDocument, 'pointerup', _this._onDrop);\n // Native D&D triggers pointercancel\n !this.nativeDraggable && on(ownerDocument, 'pointercancel', _this._onDrop);\n } else {\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop);\n }\n\n // Make dragEl draggable (must be before delay for FireFox)\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n pluginEvent('delayStart', this, {\n evt: evt\n });\n\n // Delay is impossible for native DnD in Edge or IE\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n if (options.supportPointer) {\n on(ownerDocument, 'pointerup', _this._disableDelayedDrag);\n on(ownerDocument, 'pointercancel', _this._disableDelayedDrag);\n } else {\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n }\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( /** TouchEvent|PointerEvent **/e) {\n var touch = e.touches ? e.touches[0] : e;\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'pointerup', this._disableDelayedDrag);\n off(ownerDocument, 'pointercancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart( /** Event */evt, /** Touch */touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n try {\n if (document.selection) {\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n awaitingDragStarted = false;\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n var options = this.options;\n\n // Apply effect\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost();\n\n // Drag start event\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n _hideGhostForTarget();\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n target = parent; // store last element\n }\n /* jshint boss:true */ while (parent = getParentOrHost(parent));\n }\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove( /**TouchEvent*/evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1);\n\n // only set the status to dragging, when we are actually dragging\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n this._onDragStart(evt, true);\n }\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options;\n\n // Position absolutely\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl);\n\n // Set transform-origin\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart( /**Event*/evt, /**boolean*/fallback) {\n var _this = this;\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n pluginEvent('setupClone', this);\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.removeAttribute(\"id\");\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n this._hideClone();\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n }\n\n // #1143: IFrame support workaround\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n _this._hideClone();\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true);\n\n // Set proper drop events\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n on(document, 'drop', _this);\n\n // #1276 fix:\n css(dragEl, 'transform', 'translateZ(0)');\n }\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n window.getSelection().removeAllRanges();\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver( /**Event*/evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n if (_silent) return;\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread2({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n }\n\n // Capture animation state\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n _this.captureAnimationState();\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n }\n\n // Return invocation when dragEl is inserted (or completed)\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n }\n\n // Animation\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n }\n\n // Null lastTarget if it is not inside a previously swapped element\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n }\n\n // no bubbling and not fallback\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n\n // Do not detect for empty insert if already inserted\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n }\n\n // Call when dragEl has been inserted\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n ignoreNextClick = false;\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n if (revert) {\n parentEl = rootEl; // actualization\n capture();\n this._hideClone();\n dragOverEvent('revert');\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n return completed(true);\n }\n var elLastChild = lastChild(el, options.draggable);\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n }\n\n // if there is a last element, it is the target\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n if (target) {\n targetRect = getRect(target);\n }\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n if (elLastChild && elLastChild.nextSibling) {\n // the last draggable element is not the last node\n el.insertBefore(dragEl, elLastChild.nextSibling);\n } else {\n el.appendChild(dragEl);\n }\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n if (firstChild === dragEl) {\n return completed(false);\n }\n target = firstChild;\n targetRect = getRect(target);\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n }\n // If dragEl is already beside target: Do not insert\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n }\n\n // Undo chrome's scroll adjustment (has no effect on other browsers)\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n parentEl = dragEl.parentNode; // actualization\n\n // must be done before animation\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n changed();\n return completed(true);\n }\n }\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'pointercancel', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop( /**Event*/evt) {\n var el = this.el,\n options = this.options;\n\n // Get the index of the dragged element within its parent\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode;\n\n // Get again after plugin event\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n if (Sortable.eventCanceled) {\n this._nulling();\n return;\n }\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n _cancelNextTick(this.cloneId);\n _cancelNextTick(this._dragStartId);\n\n // Unbind events\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n this._offMoveEvents();\n this._offUpEvents();\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n css(dragEl, 'transform', '');\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n _disableDraggable(dragEl);\n dragEl.style['will-change'] = '';\n\n // Remove classes\n // ghostClass is added in dragStarted\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n toggleClass(dragEl, this.options.chosenClass, false);\n\n // Drag stop event\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n // Remove event\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // drag from one list and drop into another\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // Save sorting\n this.save();\n }\n }\n }\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent( /**Event*/evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n break;\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n _globalDragOver(evt);\n }\n break;\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n /**\r\n * Serializes the item into an array of string.\r\n * @returns {String[]}\r\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n for (; i < n; i++) {\n el = children[i];\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n return order;\n },\n /**\r\n * Sorts the elements according to the array.\r\n * @param {String[]} order order of the items\r\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n /**\r\n * Save the current sorting\r\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n /**\r\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n * @param {HTMLElement} el\r\n * @param {String} [selector] default: `options.draggable`\r\n * @returns {HTMLElement|null}\r\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n /**\r\n * Set/get option\r\n * @param {string} name\r\n * @param {*} [value]\r\n * @returns {*}\r\n */\n option: function option(name, value) {\n var options = this.options;\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n /**\r\n * Destroy\r\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n }\n // Remove draggable attributes\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n this._onDrop();\n this._disableDelayedDragEvents();\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n return;\n }\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return;\n\n // show clone at dragEl or original position\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\nfunction _globalDragOver( /**Event*/evt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n evt.cancelable && evt.preventDefault();\n}\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal;\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n return retVal;\n}\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\nfunction _unsilent() {\n _silent = false;\n}\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var firstElRect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX < childContainingRect.left - spacer || evt.clientY < firstElRect.top && evt.clientX < firstElRect.right : evt.clientY < childContainingRect.top - spacer || evt.clientY < firstElRect.bottom && evt.clientX < firstElRect.left;\n}\nfunction _ghostIsLast(evt, vertical, sortable) {\n var lastElRect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX > childContainingRect.right + spacer || evt.clientY > lastElRect.bottom && evt.clientX > lastElRect.left : evt.clientY > childContainingRect.bottom + spacer || evt.clientX > lastElRect.right && evt.clientY > lastElRect.top;\n}\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n invert = invert || invertSwap;\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n return 0;\n}\n\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\r\n * @return {Number} Direction dragEl must be swapped\r\n */\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n while (i--) {\n sum += str.charCodeAt(i);\n }\n return sum.toString(36);\n}\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n}\n\n// Fixed #973:\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n}\n\n// Export utils\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild,\n expando: expando\n};\n\n/**\r\n * Get the Sortable instance of an element\r\n * @param {HTMLElement} element The element\r\n * @return {Sortable|undefined} The instance of Sortable\r\n */\nSortable.get = function (element) {\n return element[expando];\n};\n\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\n */\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n};\n\n// Export\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n };\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt;\n\n // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback);\n\n // Listener for pointer element change\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval();\n // Detect for pointer elem change, emulating native DnD behaviour\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn;\n\n // New scroll root, set scrollEl\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n var layersOut = 0;\n var currentParent = scrollEl;\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n }\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\nfunction Revert() {}\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n this.sortable.animateAll();\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\nfunction Remove() {}\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\n multiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\n folding = false,\n // Folding any other time\n dragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n if (!sortable.options.avoidImplicitDeselect) {\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n }\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n avoidImplicitDeselect: false,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n dataTransfer.setData('Text', data);\n }\n };\n }\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n sortable._hideClone();\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n });\n\n // Sort multi-drag elements\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n\n sortable.captureAnimationState();\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n }\n\n // Remove all auxiliary multidrag items from el, if sorting enabled\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n initialFolding = false;\n // If leaving sort:false root, or already folding - Fold to new location\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute);\n\n // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n }\n\n // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n activeSortable._showClone(sortable);\n\n // Unfold animation for clones if showing from hidden\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children;\n\n // Multi-drag selection\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n\n // Modifier activated, select from last to dragEl\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n (function () {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n var filter = options.filter;\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n // Check if element is draggable\n if (!closest(children[i], options.draggable, parentEl, false)) continue;\n // Check if element is filtered\n var filtered = filter && (typeof filter === 'function' ? filter.call(sortable, evt, children[i], sortable) : filter.split(',').some(function (criteria) {\n return closest(children[i], criteria.trim(), parentEl, false);\n }));\n if (filtered) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvent: evt\n });\n }\n })();\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n }\n }\n\n // Multi-drag drop\n if (dragStarted && this.isMultiDrag) {\n folding = false;\n // Do not \"unfold\" after around dragEl if reverted\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect;\n\n // Prepare unfold animation\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n }\n\n // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n multiDragIndex++;\n });\n\n // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n if (update) {\n dispatchSortableEvent('update');\n dispatchSortableEvent('sort');\n }\n }\n }\n\n // Must be done after capturing individual rects (scroll bar)\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n multiDragSortable = toSortable;\n }\n\n // Remove clones if necessary\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return;\n\n // Only deselect if selection is in this sortable\n if (multiDragSortable !== this.sortable) return;\n\n // Only deselect if target is not item in this sortable\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return;\n\n // Only deselect if left click\n if (evt && evt.button !== 0) return;\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvent: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n multiDragSortable = sortable;\n }\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n });\n\n // multiDragElements will already be sorted if folding\n var newIndex;\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n return key;\n }\n }\n });\n}\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n", "import { Controller } from '@hotwired/stimulus'\nimport Sortable from 'sortablejs'\n\nexport default class extends Controller {\n static values = {\n draggable: String,\n disabled: { type: Boolean, default: false },\n auto: { type: Boolean, default: true }\n }\n\n connect () {\n this.sortable = Sortable.create(this.element, {\n animation: 150,\n handle: '.draggable-icon',\n draggable: this.draggableValue,\n disabled: this.disabledValue\n })\n\n if (this.autoValue) this.sortable.options.onEnd = this.end.bind(this.element)\n }\n\n end (form) {\n form.target.submit()\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\n/*\n * Provides additional functionality for <details> element.\n *\n * 1 - When a page is loaded, if the url contains an anchor, open the corresponding details\n * 2 - When a detail is opened, notify elements inside that they have become visible\n * 3 - Optionally, close other expandable details with a specified class when one is opened\n */\nexport default class extends Controller {\n static values = { closeable: String }\n\n /* ==== Life Cycle ==== */\n initialize () {\n this.observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.type === 'attributes') {\n this.toggleVisibility()\n }\n })\n })\n }\n\n connect () {\n this.observer.observe(this.element, { attributes: true })\n\n if (this.element.id && !this.element.open) {\n this.element.open = this.element.id === this.anchor\n }\n\n this.element.addEventListener('toggle', () => this.handleToggle())\n }\n\n /* ==== Support ==== */\n toggleVisibility () {\n this.element.children.forEach(element => {\n if (this.element.open) {\n this.fire(element, 'becameVisible')\n } else {\n this.fire(element, 'becameInvisible')\n }\n })\n }\n\n handleToggle () {\n if (this.closeableValue && this.element.open) {\n const allCloseable = document.querySelectorAll(`details.expandable.${this.closeableValue}`)\n allCloseable.forEach(closeable => {\n if (closeable !== this.element && closeable.open) {\n closeable.open = false\n }\n })\n }\n }\n\n fire (obj, name) {\n // Check that the target element is still in the page\n if (!document.body.contains(obj)) return\n\n const event = new CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail: null\n })\n obj.dispatchEvent(event)\n return !event.defaultPrevented\n }\n\n /* ==== Getters & Setters ==== */\n get anchor () {\n return document.location.toString().split('#')[1]\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['checkbox']\n\n connect () {\n this.observeCheckboxes()\n }\n\n observeCheckboxes = () => {\n this.checkboxTargets.forEach((target) => {\n target.addEventListener('click', event => {\n this.closeOthers(event.currentTarget)\n })\n })\n }\n\n closeOthers = (target) => {\n const otherCheckboxes = this.checkboxTargets.filter((element) => element !== target)\n\n otherCheckboxes.forEach(checkbox => {\n checkbox.checked = false\n })\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nimport Formatter from '../../lib/formatter'\nimport Text from '../../lib/text'\nimport Validator from '../../lib/validator'\n\nimport loadImage from 'blueimp-load-image/js/load-image'\n\nexport default class extends Controller {\n // ============================================================================\n // ACTIONS\n // ============================================================================\n /*\n * While the user is typing, applies formating to the field, ensures that maxlength\n * is respected and toggles the \"filled\" class that controls the positioning of the\n * label.\n *\n * If the field has a counter associated with it, updates the counter.\n * If the field was marked with a validation error, removes it\n * If the form had alerts, remove them\n */\n\n submit (e) {\n e.currentTarget.closest('form').submit()\n }\n\n eventSubmit (e) {\n const event = new CustomEvent('submit', {\n bubbles: true,\n cancelable: true,\n detail: null\n })\n e.currentTarget.closest('form').dispatchEvent(event)\n return !event.defaultPrevented\n }\n\n input (e) {\n const input = e.currentTarget\n\n this.removeFieldError(input)\n this.removeFormAlerts(input)\n this.toggleFilled(input)\n this.applyFormat(input)\n this.enforceMaxLength(input)\n this.updateCounter(input)\n\n input.dataset.previousValue = input.value\n }\n\n /*\n * Does the same as 'input', but for the change event, which is used in selects\n */\n change (e) {\n const input = e.currentTarget\n\n this.removeFieldError(input)\n this.removeFormAlerts(input)\n this.toggleFilled(input)\n this.applyFormat(input)\n this.enforceMaxLength(input)\n\n input.dataset.previousValue = input.value\n }\n\n /*\n * When an element loses focus, apply any formatting that is delayed\n * to the blur (like cpf/cnpj mask) and validate the field\n */\n blur (e) {\n const input = e.currentTarget\n\n this.applyBlurFormat(input)\n this.validateField(input)\n }\n\n /*\n * Used by the ajax controller to request every field, in the form\n * it is about to submit, to validate itself. Called 'preflight'\n * because they are the final checks done before the payload is\n * sent.\n */\n preflight (e) {\n const target = e.currentTarget\n if ((target.tagName === 'INPUT' || target.tagName === 'TEXTAREA') && target.type !== 'submit') {\n this.validateField(target)\n }\n }\n\n /*\n * Used on the submit buttons in forms, to validate all fields. If any\n * field fails validation, it cancels event propagation, preventing the\n * form from being submitted.\n */\n validate (e) {\n // Get form of clicked element\n const element = e.currentTarget\n let form\n\n if (element.tagName === 'FORM') {\n form = element\n } else if (typeof element.form !== \"undefined\") {\n form = element.form\n } else {\n form = element.closest('form')\n }\n\n const inputs = Array.from(form.querySelectorAll('input, textarea, select'))\n const valid = inputs.reduce((valid, input) => this.validateField(input) && valid, true)\n\n if (!valid) {\n this.focusFieldWithError(e)\n form.setAttribute('data-valid', false)\n\n e.stopImmediatePropagation()\n e.preventDefault()\n } else {\n form.removeAttribute('data-valid')\n }\n }\n\n /*\n * A special action used only by file inputs for a single file,\n * to allow them to display information for the user.\n *\n * For all types of file, it can display the filename.\n * For image files, it can use an img tag to display it.\n */\n file (e) {\n const input = e.currentTarget\n if (input.type !== 'file') return\n\n const { previewTarget, filenameTarget, contentTypeTarget } = input.dataset\n const file = e.target.files[0]\n\n this.validateFileSizeLimit(input, file)\n\n if (previewTarget) {\n if (!!file && (/image\\/(jpg|jpeg|png|webp|gif|avif|heif|heic)/.test(file.type))) {\n loadImage(file, (img) => {\n document.querySelector(previewTarget).src = img.src\n }, { noRevoke: true })\n }\n }\n\n if (filenameTarget) {\n document.querySelector(filenameTarget).innerHTML = file.name\n }\n\n if (contentTypeTarget) {\n document.querySelector(contentTypeTarget).value = file.type\n }\n\n const label = input.closest('label')\n if (label.dataset.selectedText) {\n label.querySelector('span').textContent = label.dataset.selectedText\n }\n }\n\n /*\n * A special action used only by file inputs for multiple files\n * to allow then to display information for the user.\n *\n * For all types of file, it can display the filename.\n * For image files, it can use an img tag to display it.\n */\n files (e) {\n document.querySelectorAll('[data-direct-upload-entry]').forEach(element => element.remove())\n\n const filenameTarget = e.currentTarget.dataset.filenameTarget\n Array.from(e.target.files).forEach((file, index) => {\n const container = document.querySelector(filenameTarget)\n this.validateFileSizeLimit(e.currentTarget, file)\n\n const fileContainer = container.cloneNode(true)\n fileContainer.classList.remove('hidden')\n fileContainer.setAttribute('data-direct-upload-entry', true)\n fileContainer.querySelector('p').textContent = file.name\n\n container.insertAdjacentElement('afterEnd', fileContainer)\n })\n }\n\n /*\n * A special action used only by password inputs, to allow the user\n * to toggle between hidden password (******) and visible password (1234)\n */\n password (e) {\n const icon = e.currentTarget\n icon.children.forEach(child => {\n child.classList.toggle('hidden')\n })\n\n const input = icon.parentElement.querySelector('input')\n if (input.type === 'password') {\n input.type = 'text'\n } else {\n input.type = 'password'\n }\n }\n\n /*\n * A special action used only by the 'clicker' element of the fudgeball\n * design system. It increases or decreases the value of the associated input\n * by the amount set in the data-delta attribute, while respecting both\n * the data-maximum and data-minimum attributes.\n *\n * When either the maximum or the minimum are reached, it checks the\n * data-class of the respective buttons and toggles that class\n */\n clicker (e) {\n const button = e.currentTarget\n const parent = button.parentElement\n const input = parent.querySelector('input')\n const display = parent.querySelector('h6')\n\n const removable = parent.querySelector('[data-name=\"remove\"]')\n const decrement = parent.querySelector('[data-name=\"decrement\"]')\n const increment = parent.querySelector('[data-name=\"increment\"]')\n\n let newValue = Number(input.value) + Number(button.dataset.delta)\n const minimum = Number(parent.dataset.minimum)\n const maximum = Number(parent.dataset.maximum)\n\n // Ensure newValue does not go beyong allowed bounds\n if (newValue <= minimum) {\n newValue = minimum\n decrement.classList.add('invisible')\n increment.classList.remove('invisible')\n } else if (newValue >= maximum) {\n newValue = maximum\n increment.classList.add('invisible')\n decrement.classList.remove('invisible')\n } else {\n decrement.classList.remove('invisible')\n increment.classList.remove('invisible')\n }\n\n input.value = newValue\n display.innerHTML = newValue\n\n // Behavior for removable switchers\n if (!removable) return\n\n const klass = removable.dataset.class\n const target = removable.dataset.target\n const toRemove = target ? document.querySelector(target) : parent\n\n if (newValue === 0) {\n toRemove.classList.add(klass)\n } else if (newValue === 1) {\n toRemove.classList.remove(klass)\n removable.classList.remove('hidden')\n decrement.classList.add('hidden')\n } else {\n toRemove.classList.remove(klass)\n removable.classList.add('hidden')\n decrement.classList.remove('hidden')\n }\n }\n\n // ============================================================================\n // ACTIONS\n // ============================================================================\n /*\n * Formats the current value of the input according to its data-formatter attribute\n */\n applyFormat (input) {\n const format = input.dataset.formatter\n if (!format || this.isUserDeleting(input)) return\n\n const result = Formatter.apply(format, input.value)\n const length = result.length\n\n input.value = result.substr(0, input.maxLength || length)\n\n if (input.type === 'text') {\n input.focus()\n input.setSelectionRange(length, length)\n }\n }\n\n /*\n * Formats the current value of the input according to its data-formatter attribute\n */\n applyBlurFormat (input) {\n const format = input.dataset.blurFormatter\n if (format) input.value = Formatter.apply(format, input.value)\n }\n\n /*\n * Enforces the maxlength on inputs and textareas. Both are needed because on android\n * chrome likes to ignore the maxlength of inputs.\n */\n enforceMaxLength (input) {\n const maxlength = input.dataset.maxlength\n const value = input.value\n\n if (!!maxlength && value.length >= maxlength) input.value = value.substr(0, maxlength)\n }\n\n /*\n * Helper used by the formatting function so it does not attempt to\n * apply formatting while the used is deleting characters from the input.\n */\n isUserDeleting (input) {\n const previous = input.dataset.previousValue || ''\n return previous.length > input.value.length\n }\n\n /*\n * Removes the errors classes of a field and its associated label, if any.\n */\n removeFieldError (input) {\n input.classList.remove('field_with_errors')\n input.removeAttribute('data-valid')\n\n const event = new Event('valid')\n input.dispatchEvent(event)\n\n if (input.nextElementSibling && input.nextElementSibling.tagName === 'LABEL') input.nextElementSibling.classList.remove('field_with_errors')\n }\n\n /*\n * Removes alert elements from the form, which are usually used to display specific\n * errors about fields.\n */\n removeFormAlerts (input) {\n if (input.form) {\n input.form.querySelectorAll('.alert:not(.alert-permanent)').forEach(alert => alert.remove())\n input.form.querySelectorAll('.alert-permanent').forEach(alert => alert.classList.add('hidden'))\n }\n }\n\n /*\n * Adds errors classes to a field and its associated label, if any.\n */\n showFieldErrors (input) {\n input.classList.add('field_with_errors')\n input.setAttribute('data-valid', false)\n\n const event = new Event('invalid')\n input.dispatchEvent(event)\n\n if (input.nextElementSibling && input.nextElementSibling.tagName === 'LABEL') input.nextElementSibling.classList.add('field_with_errors')\n }\n\n /*\n * If a field has a value selected, adds the form-field-filled class, which\n * makes the label move up. Otherwise removes it, which makes the label behave\n * as a sort of \"placeholder\"\n */\n toggleFilled (input) {\n input.classList.toggle('form-field-filled', !!input.value)\n }\n\n /*\n * Checks if an element has an associated counter, and updates it according\n * to the elements maxlength and current value length\n */\n updateCounter (input) {\n const counter = input.closest('.form-element').querySelector('.form-counter')\n const length = input.value.length\n const maxlength = input.maxLength\n\n if (counter) counter.textContent = `${length}/${maxlength}`\n }\n\n /*\n * Validates a field according to its data-validator or data-formatter attributes\n * Adds and removes error classes as needed\n */\n validateField (input) {\n if (input.disabled) return true\n\n const value = input.value\n const required = input.dataset.required\n const validator = input.dataset.validator || input.dataset.blurFormatter || input.dataset.formatter\n const minLength = input.minLength || 0\n let valid = true\n\n if (Text.isEmpty(value)) {\n valid = !required || required === 'false'\n } else if (minLength > value.length) {\n valid = false\n } else if (validator) {\n valid = Validator.assert(validator, value)\n }\n\n if (valid) {\n this.removeFieldError(input)\n } else {\n this.showFieldErrors(input)\n }\n\n return valid\n }\n\n /*\n * Enforces a limit of 200MB to all file uploads.\n */\n validateFileSizeLimit (input, file) {\n if (file.size > 209715200) {\n input.value = null\n\n const alert = document.querySelector('#file-alert')\n if (alert) {\n alert.querySelector('p').textContent = 'O arquivo tem que ter menos que 200MB'\n alert.classList.remove('hidden')\n }\n\n return false\n } else {\n const alert = document.querySelector('#file-alert')\n if (alert) alert.classList.add('hidden')\n\n return true\n }\n }\n\n /*\n * Checks if the form of an element is saving on input, if is not, focus on elements which has field_with_errors css class\n */\n focusFieldWithError (e) {\n const element = e.currentTarget\n let form\n\n if (element.tagName === 'FORM') {\n form = element\n } else if (typeof element.form !== \"undefined\") {\n form = element.form\n } else {\n form = element.closest('form')\n }\n const action = form.dataset.action\n const saveOnInput = (action.indexOf('input->ajax#') !== -1 && action.indexOf('paste->ajax#') !== -1)\n\n if (!saveOnInput) {\n document.querySelector('.field_with_errors').focus()\n }\n }\n\n /*\n * Returns true if the form of an element is set for saving on input, if is not, returns false\n */\n savingOnInput (e) {\n const element = e.currentTarget\n const form = element.tagName === 'FORM' ? element : element.form\n const action = form.dataset.action\n return (action.indexOf('input->ajax#') !== -1 && action.indexOf('paste->ajax#') !== -1)\n }\n\n addInput (e) {\n const div = document.createElement('div')\n div.className = 'removable mb-16'\n\n const formDiv = document.createElement('div')\n formDiv.className = 'form-element form-input form-input-text form-input-large'\n\n const input = document.createElement('input')\n input.type = 'text'\n input.name = e.target.dataset.inputName\n input.className = e.target.dataset.inputClass\n input.maxLength = 255\n input.size = 255\n input.setAttribute('data-target', 'form.input')\n input.setAttribute('data-action', 'input->form#input')\n input.setAttribute('placeholder', e.target.dataset.inputPlaceholder)\n\n const button = document.createElement('button')\n button.setAttribute('data-action', 'click->form#removeInput')\n\n formDiv.appendChild(input)\n\n div.appendChild(formDiv)\n div.appendChild(button)\n\n e.target.insertAdjacentElement('beforebegin', div)\n\n e.preventDefault()\n }\n\n removeInput (e) {\n e.target.parentNode.remove()\n }\n\n internationalPayment (e) {\n const input = e.currentTarget\n\n document.querySelectorAll('#payment_cpf_cnpj, #payment_phone').forEach(element => {\n if (input.checked) {\n this.removeFieldError(element)\n element.value = ''\n element.removeAttribute('data-required')\n element.setAttribute('disabled', true)\n } else {\n element.removeAttribute('disabled')\n element.setAttribute('data-required', true)\n }\n })\n }\n}\n", "import Parser from './parser'\nimport Formatter from './formatter'\nimport Text from './text'\n\nconst Validator = {\n assert (format, value) {\n return !format || format === 'text' || Validator[format](value)\n },\n\n alphanumeric (value) {\n return /^[a-z0-9]+$/i.test(value)\n },\n\n alphanumeric_and_spaces (value) {\n return /^[a-z0-9 ]+$/i.test(value)\n },\n\n bank_account (value) {\n return /^[0-9]{1,18}-[a-z0-9]{1,2}$/i.test(value)\n },\n\n birthdate (value) {\n const parsed = Parser.date(value)\n return !!Parser.date(value) && parsed > new Date(1930, 0, 1) && parsed < new Date()\n },\n\n adult_date (value) {\n const parsed = Parser.date(value)\n return !!Parser.date(value) && parsed > new Date(1900, 0, 1) && parsed < new Date() && new Date().getFullYear() - parsed.getFullYear() > 18\n },\n\n cpf_cnpj (value) {\n switch (Formatter.numbers(value).length) {\n case 11:\n return Validator.cpf(value)\n case 14:\n return Validator.cnpj(value)\n default:\n return false\n }\n },\n\n cpf (value) {\n const cpf = Formatter.numbers(value)\n const digits = cpf.substr(0, 9).split('')\n\n if (digits.every(num => num === digits[0])) {\n return false\n }\n\n digits.push(mod11(digits, 10))\n digits.push(mod11(digits, 11))\n\n return digits.join('') === cpf\n\n function mod11 (digits, weight) {\n const mod = digits.reduce((total, i) => total + Number(i) * weight--, 0) % 11\n return mod < 2 ? 0 : 11 - mod\n }\n },\n\n cnpj (value) {\n const cnpj = Formatter.numbers(value)\n const digits = cnpj.substr(0, 12).split('')\n\n digits.push(mod11(digits, [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]))\n digits.push(mod11(digits, [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]))\n\n return digits.join('') === cnpj\n\n function mod11 (digits, weights) {\n const mod = digits.reduce((total, i) => total + Number(i) * weights.shift(), 0) % 11\n return mod < 2 ? 0 : 11 - mod\n }\n },\n\n credit_card (value) {\n return /^\\d{4} \\d{4} \\d{4} \\d{4}$/i.test(value)\n },\n\n credit_card_name (value) {\n return /^[A-Z\\s]+$/i.test(value)\n },\n\n credit_card_month_year (value) {\n const parsed = Parser.credit_card_month_year(value)\n return !!Parser.credit_card_month_year(value) && parsed > new Date()\n },\n\n decimal (value) {\n return /^(\\d{1,3}\\.)*\\d{1,3},\\d{2}$/i.test(value)\n },\n\n date (value) {\n return !!Parser.date(value)\n },\n\n email (value) {\n const email = (value || '').trim()\n return /^([\\w+\\-]\\.?)*[a-z0-9\\_]+@[a-z\\d\\-]+(\\.[a-z]+)*\\.[a-z]+$/i.test(email)\n },\n\n email_phone (value) {\n if (value.includes('@')) {\n return Validator.email(value)\n } else {\n return Validator.phone(value)\n }\n },\n\n full_name (value) { // Let's ignore that some people have two names. Premmiar does it and this is for them.\n return /\\D{2,}\\s\\D{2,}/i.test(value)\n },\n\n negative_number (value) {\n return !isNaN(value)\n },\n\n letters (value) {\n return value.length === Formatter.letters(value).length\n },\n\n number (value) {\n return value.length === Formatter.numbers(value).length\n },\n\n numbers (value) {\n return Validator.number(value)\n },\n\n phone (value) {\n const tmp = Formatter.numbers(value)\n return tmp.length === 10 || tmp.length === 11\n },\n\n international_phone (value) {\n return /^(\\+|00)[1-9][0-9 \\-\\(\\)\\.]{7,}$/.test(value)\n },\n\n auto_phone (value) {\n return Formatter.numbers(value).length <= 11 ? Validator.phone(value) : Validator.international_phone(value)\n },\n\n modern_auto_phone (value) {\n return Validator.auto_phone(value)\n },\n\n modern_brazilian_format (val) {\n return this.auto_phone(val)\n },\n\n sku (value) {\n return /^[A-Z]{3}-[A-Z]{5}-[0-9]{9}-[A-Z]{2}$/.test(value)\n },\n\n slug (value) {\n return value === Text.parameterize(value)\n },\n\n url (value) {\n return /[a-z0-9\\-:/.]/.test(value)\n },\n\n zipcode (value) {\n return /^\\d{5}-\\d{3}$/i.test(value)\n }\n}\n\nexport default Validator\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['source', 'viewport', 'highlight']\n static values = { scale: Number }\n\n connect () {\n this.defineViewportBackgroundAttrs()\n this.highlightAttrsDefined = false;\n\n this.sourceTarget.addEventListener('mousemove', event => {\n this.sync(event)\n })\n }\n\n defineHighlightAttrs () {\n Object.assign(this.highlightTarget.style, {\n width: `${this.highlightSize.width}px`,\n height: `${this.highlightSize.height}px`,\n left: '0px',\n top: '0px'\n })\n }\n\n defineViewportBackgroundAttrs () {\n Object.assign(this.viewportTarget.style, {\n backgroundImage: `url(${this.imageUrl})`,\n backgroundPosition: '0 0',\n backgroundRepeat: 'no-repeat',\n backgroundSize: `${this.scaledWidth}px auto`\n })\n }\n\n sync (event) {\n const x = this.calculateLimits(event).x\n const y = this.calculateLimits(event).y\n\n this.syncHighlight({ x: x, y: y }, this.sourceBounds)\n this.syncViewport('x', this.sourceBounds, x)\n this.syncViewport('y', this.sourceBounds, y)\n }\n\n syncHighlight (position, bounds) {\n if (!this.highlightAttrsDefined) {\n this.defineHighlightAttrs()\n this.highlightAttrsDefined = true\n }\n\n const percentX = this.calculateSourcePosition('x', bounds, position.x)\n const percentY = this.calculateSourcePosition('y', bounds, position.y)\n\n const width = Number(this.highlightTarget.style.width.replace('px', ''))\n const height = Number(this.highlightTarget.style.height.replace('px', ''))\n\n const halfWidth = width / 2\n const halfHeight = height / 2\n\n const highlightX = percentX * this.sourceTarget.offsetWidth - halfWidth\n const highlightY = percentY * this.sourceTarget.offsetHeight - halfHeight\n\n const finalX = Math.min(Math.max(0, highlightX), this.sourceTarget.offsetWidth - width)\n const finalY = Math.min(Math.max(0, highlightY), this.sourceTarget.offsetHeight - height)\n\n Object.assign(this.highlightTarget.style, {\n transform: `translate(${finalX}px, ${finalY}px)`\n })\n }\n\n syncViewport (axis, bounds, clientPosition) {\n const percent = this.calculateSourcePosition(axis, bounds, clientPosition)\n const position = this.calculateViewportPosition(axis, percent)\n\n this.viewportTarget.style[`backgroundPosition${axis.toUpperCase()}`] = `${position}px`\n }\n\n calculateLimits (event) {\n const halfHighlightWidth = this.highlightSize.width / 2\n const halfHighlightHeight = this.highlightSize.height / 2\n\n const leftLimit = Math.round(this.sourceBounds.left + halfHighlightWidth)\n const topLimit = Math.round(this.sourceBounds.top + halfHighlightHeight)\n\n const rightLimit = Math.round(this.sourceBounds.right - halfHighlightWidth)\n const bottomLimit = Math.round(this.sourceBounds.bottom - halfHighlightHeight)\n\n const limitedClientX = Math.round(Math.min(Math.max(event.clientX, leftLimit), rightLimit))\n const limitedClientY = Math.round(Math.min(Math.max(event.clientY, topLimit), bottomLimit))\n\n return {\n x: limitedClientX,\n y: limitedClientY,\n }\n }\n\n calculateSourcePosition (axis, bounds, clientPosition) {\n const position = clientPosition - bounds[axis]\n const attrName = axis === 'x' ? 'width' : 'height'\n const percent = position / bounds[attrName]\n\n return percent\n }\n\n calculateViewportPosition (axis, percent) {\n const attrName = axis === 'x' ? 'Width' : 'Height'\n const viewportPosition = this[`scaled${attrName}`] * percent // ScaledWidth and ScaledHeight are the dimensions of the image in the viewport\n const halfViewportSize = this.viewportTarget.parentElement[`offset${attrName}`] / 2\n const centeredPosition = Math.round(viewportPosition - halfViewportSize) * -1\n\n return centeredPosition\n }\n\n get assetAspectRatio () {\n // eslint-disable-next-line no-undef\n const img = new Image()\n img.src = this.imageUrl\n const { naturalWidth, naturalHeight } = img\n return naturalWidth / naturalHeight\n }\n\n get highlightSize () {\n return {\n width: this.viewportTarget.offsetWidth / this.scaleValue,\n height: this.viewportTarget.offsetHeight / this.scaleValue\n }\n }\n\n get imageUrl () {\n return this.sourceTarget.dataset.src ?? this.sourceTarget.src\n }\n\n get scaledWidth () {\n return this.sourceSize.width * this.scaleValue\n }\n\n get scaledHeight () {\n return this.scaledWidth / this.assetAspectRatio\n }\n\n get sourceBounds () {\n return this.sourceTarget.getBoundingClientRect()\n }\n\n get sourceSize () {\n return {\n width: this.sourceTarget.getAttribute('width') || this.sourceTarget.offsetWidth,\n height: this.sourceTarget.getAttribute('height') || this.sourceTarget.offsetHeight,\n }\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static classes = ['intersect']\n\n connect () {\n this.observer = new IntersectionObserver(this.intersected.bind(this), {\n threshold: 1\n })\n this.observer.observe(this.element)\n }\n\n disconnect () {\n this.observer.disconnect()\n }\n\n intersected (entries) {\n requestAnimationFrame(() => {\n entries.forEach((entry) => {\n this.element.firstElementChild.classList.toggle(this.intersectClass, !entry.isIntersecting)\n })\n })\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n connect () {\n this.bootstrap().then(Invitation => {\n Invitation.start()\n })\n }\n\n // Only load Invitations when necessary\n async bootstrap () {\n const { default: Invitation } = await import(/* webpackChunkName: \"fudgeball_invitations\" */ '../../../elements/invitations')\n return Invitation\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\nimport Text from '../../lib/text'\nimport Dom from '../../lib/dom'\n\nexport default class extends Controller {\n static targets = ['name', 'number', 'expiration', 'cvv', 'hash']\n\n connect () {\n this.blockSensitiveParameters()\n }\n\n generate (e) {\n this.toggleElement(e.currentTarget, false)\n if (!this.validate()) {\n this.toggleElement(e.currentTarget, true)\n return\n }\n\n Dom.fire(e.currentTarget, 'generating', null, { bubbles: true })\n const form = e.currentTarget.closest('form')\n\n pagarme.client.connect({ encryption_key: this.data.get('cryptoKey') })\n .then(client => client.security.encrypt(this.card))\n .then(cardHash => {\n this.hash = cardHash\n this.blockSensitiveParameters()\n Dom.fire(form, 'submit', null, { bubbles: true })\n })\n }\n\n validate () {\n const { card } = pagarme.validate({ card: this.card })\n this.brand = card.brand\n\n let valid = true\n valid = valid & this.validateField('card_holder_name', card, this.nameTarget)\n valid = valid & this.validateField('card_number', card, this.numberTarget, 19)\n valid = valid & this.validateField('card_expiration_date', card, this.expirationTarget, 4)\n valid = valid & this.validateField('card_cvv', card, this.cvvTarget, 3)\n return valid\n }\n\n validateField (key, card, input, length) {\n if (card[key] && Text.isPresent(this.card[key])) return true\n if (card[key] && !!length && this.card[key].length === length) return true\n\n input.classList.add('field_with_errors')\n input.nextElementSibling.classList.add('field_with_errors')\n return false\n }\n\n blockSensitiveParameters () {\n this.nameTarget.removeAttribute('name')\n this.numberTarget.removeAttribute('name')\n this.expirationTarget.removeAttribute('name')\n this.cvvTarget.removeAttribute('name')\n }\n\n toggleElement (element, force) {\n element.disabled = !force\n element.classList.toggle('disabled', !force)\n }\n\n get card () {\n const name = this.nameTarget.value\n const number = this.numberTarget.value\n const month = this.expirationTarget.value.substring(0, 2)\n const year = Number(this.expirationTarget.value.substring(3, 5))\n const cvv = this.cvvTarget.value\n\n return {\n card_holder_name: name,\n card_number: number,\n card_expiration_date: `${month}/${year}`,\n card_cvv: cvv\n }\n }\n\n set hash (value) {\n this.hashTarget.value = value\n }\n\n set brand (value) {\n this.numberTarget.classList.add(value)\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\nimport Text from '../../lib/text'\nimport Dom from '../../lib/dom'\n\nexport default class extends Controller {\n static targets = ['name', 'number', 'expiration', 'cvv', 'hash', 'token', 'error', 'submit']\n static values = { 'payment': Number, 'user': String, 'session': Number }\n\n connect () {\n this.blockSensitiveParameters()\n }\n\n generate (e) {\n if (!this.validate()) return\n const form = e.currentTarget.closest('form')\n\n Dom.fire(this.submitTarget, 'generating', null, { bubbles: true })\n\n fetch(`/api/tuna/${this.paymentValue}/new_session?email=${this.email}`)\n .then(response => response.json())\n .then(response => {\n if (response.status === -1) {\n this.handleError(null, response.message)\n } else {\n const token = response.sessionId\n const tokenizer = Tuna(token).tokenizator()\n\n tokenizer.generate(this.card)\n .then(response => this.submit(form, token, response.token))\n .catch(error => this.handleError(error))\n }\n }).catch(error => this.handleError(error))\n }\n\n submit (form, token, hash) {\n this.tokenTarget.value = token\n this.hashTarget.value = hash\n this.blockSensitiveParameters()\n\n Dom.fire(form, 'submit', null, { bubbles: true })\n }\n\n handleError (error, message = null) {\n error = new Error(`Tuna card error at payment ${this.paymentValue}: ${error}`)\n console.log(error)\n\n message ||= 'O pagamento foi recusado. Certifique-se que voc\u00EA est\u00E1 usando um cart\u00E3o de cr\u00E9dito das bandeiras Visa, Mastercard ou Amex, e que os dados fornecidos est\u00E3o corretos.'\n this.errorTarget.querySelector('p').textContent = message\n\n this.errorTarget.classList.remove('hidden')\n Dom.fire(this.submitTarget, 'rejected', null, { bubbles: true })\n\n fetch(`/api/tuna/${this.paymentValue}/errored?error=${error}`, { method: 'DELETE' })\n }\n\n validate () {\n let valid = true\n valid = valid & this.validateField(this.nameTarget)\n valid = valid & this.validateField(this.numberTarget, 19)\n valid = valid & this.validateField(this.expirationTarget, 5)\n valid = valid & this.validateField(this.cvvTarget)\n return valid\n }\n\n validateField (input, length) {\n let valid = true\n valid = valid && Text.isPresent(input.value)\n valid = valid && (!length || input.value.length === length)\n\n if (!valid) {\n input.classList.add('field_with_errors')\n input.nextElementSibling.classList.add('field_with_errors')\n }\n\n return valid\n }\n\n blockSensitiveParameters () {\n this.nameTarget.removeAttribute('name')\n this.numberTarget.removeAttribute('name')\n this.expirationTarget.removeAttribute('name')\n this.cvvTarget.removeAttribute('name')\n }\n\n toggleElement (element, force) {\n element.disabled = !force\n element.classList.toggle('disabled', !force)\n }\n\n get card () {\n return {\n cardHolderName: this.nameTarget.value,\n cardNumber: this.numberTarget.value.replace(/ /g, ''),\n expirationMonth: Number(this.expirationTarget.value.substring(0, 2)),\n expirationYear: Number(this.expirationTarget.value.substring(3, 5)) + 2000,\n cvv: this.cvvTarget.value,\n singleUse: true\n }\n }\n\n get email () {\n const input = document.querySelector('[name=\"payment[email]\"]')\n return input ? input.value : ''\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\nimport Dom from '../../lib/dom'\n\nexport default class extends Controller {\n static values = { item: String, price: Number }\n static targets = ['form', 'orderId', 'payerId', 'status', 'email']\n\n connect () {\n this.initButton()\n }\n\n initButton () {\n const checkPresence = setInterval(() => {\n if (typeof paypal === 'object' && typeof paypal.Buttons === 'function') {\n clearInterval(checkPresence)\n paypal.Buttons({\n\n style: {\n color: 'white',\n size: 'responsive',\n shape: 'rect',\n label: 'paypal',\n layout: 'horizontal',\n fundingicons: 'false',\n tagline: 'false',\n height: 55\n },\n\n createOrder: this.createOrder.bind(this),\n onApprove: this.onApprove.bind(this)\n }).render('#paypal-button-container')\n }\n }, 100)\n }\n\n createOrder (data, actions) {\n return actions.order.create({\n purchase_units: [{\n description: this.itemValue,\n amount: {\n value: this.priceValue,\n currency_code: 'BRL'\n }\n }],\n application_context: {\n brand_name: 'FestaLab',\n locale: 'pt-BR',\n shipping_preference: 'NO_SHIPPING'\n }\n })\n }\n\n onApprove (data, actions) {\n document.getElementById('payment-loading-paypal').classList.toggle('hidden')\n document.getElementById('paypal-button').classList.toggle('hidden')\n\n actions.order.capture().then(details => {\n this.orderIdTarget.value = data.orderID\n this.payerIdTarget.value = data.payerID\n this.statusTarget.value = details.status\n this.emailTarget.value = details.payer.email_address\n\n Dom.fire(this.formTarget, 'submit', null, { bubbles: true })\n })\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nimport loadImage from 'blueimp-load-image/js/load-image'\nimport Cropper from 'cropperjs'\n\nexport default class extends Controller {\n static targets = [\n 'x', 'y', 'rotate', 'width', 'height',\n 'file', 'photo', 'uploadWrapper', 'error', 'chooseButton', 'restartButton',\n 'saveButton', 'controls'\n ]\n\n connect () {\n if (this.hasPhotoTarget) this.data.set('photo', this.photoTarget.src)\n this.toggleElements('initialize')\n }\n\n change (e) {\n this.toggleElement(this.uploadWrapperTarget, true)\n const file = e.target.files[0]\n if (!!file && (/image\\/(jpg|jpeg|png|webp|gif)/.test(file.type))) {\n this.toggleElements('loading')\n loadImage(file, (img) => {\n this.photoTarget.src = img.src\n this.initEditor()\n }, { noRevoke: true })\n } else {\n this.toggleElements('error')\n e.target.value = ''\n }\n }\n\n restart () {\n this.cropper?.destroy()\n this.cropper = null\n this.fileTarget.value = ''\n this.photoTarget.src = this.data.get('original-photo-url')\n this.toggleElements('restart')\n }\n\n edit () {\n this.toggleElements('loading')\n this.photoTarget.src = this.data.get('original-photo-url')\n this.initEditor()\n }\n\n initEditor () {\n this.cropper = new Cropper(this.photoTarget, {\n aspectRatio: this.aspectRatio(),\n viewMode: this.viewMode(),\n autoCropArea: 1,\n cropBoxResizable: false,\n cropBoxMovable: false,\n dragMode: 'move',\n crop: (e) => {\n if (!this.exifRotate) this.exifRotate = e.detail.rotate\n\n this.xTarget.value = e.detail.x\n this.yTarget.value = e.detail.y\n this.heightTarget.value = e.detail.height\n this.widthTarget.value = e.detail.width\n\n // iOS is a fucking moron and all photos are rotated by default. Compensate user rotation by it\n this.rotateTarget.value = e.detail.rotate - this.exifRotate\n },\n ready: () => {\n this.toggleElements('editing')\n }\n })\n }\n\n hasPhoto () {\n return this.data.get('hasPhoto') === 'true'\n }\n\n aspectRatio () {\n return this.data.get('aspectRatio') || (720 / 1024)\n }\n\n viewMode () {\n return this.data.get('viewMode') || 1\n }\n\n toggleElement (element, force, klass = 'hidden') {\n element.classList.toggle(klass, !force)\n }\n\n toggleElements (status) {\n switch (status) {\n case 'loading':\n this.toggleElement(this.chooseButtonTarget, false)\n this.uploadWrapperTarget.classList.add('inactive')\n if (this.hasControlsTarget) this.toggleElement(this.controlsTarget, false)\n break\n case 'editing':\n this.uploadWrapperTarget.classList.remove('inactive')\n this.toggleElement(this.restartButtonTarget, true)\n this.toggleElement(this.saveButtonTarget, true)\n break\n case 'error':\n this.toggleElement(this.chooseButtonTarget, false)\n this.toggleElement(this.uploadWrapperTarget, false)\n this.toggleElement(this.errorTarget, true)\n if (this.hasControlsTarget) this.toggleElement(this.controlsTarget, false)\n break\n default:\n this.toggleElement(this.chooseButtonTarget, !this.hasPhoto())\n this.toggleElement(this.uploadWrapperTarget, this.hasPhoto(), 'inactive')\n this.toggleElement(this.errorTarget, false)\n this.toggleElement(this.restartButtonTarget, false)\n this.toggleElement(this.saveButtonTarget, false)\n if (this.hasControlsTarget) this.toggleElement(this.controlsTarget, this.hasPhoto())\n }\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\nimport Resizer from '../../lib/resizer'\n\nexport default class extends Controller {\n connect () {\n document.fonts ? this.resizeWhenFontsAreReady() : this.resize()\n }\n\n resizeWhenFontsAreReady () {\n document.fonts.ready.then(() => {\n this.resize()\n })\n }\n\n resize () {\n Resizer.allFonts(10)\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nconst directionMap = {\n left: 'scrollLeft',\n top: 'scrollTop'\n}\n\nexport default class extends Controller {\n static targets = ['reference', 'scrollable', 'leftButton', 'rightButton']\n static values = { direction: String, autoScroll: Boolean }\n\n connect () {\n if (this.autoScrollValue) {\n this.scroll()\n } else if (this.hasLeftButtonTarget && this.hasRightButtonTarget) {\n this.updateButtonVisibility();\n this.scrollableTarget.addEventListener('scroll', this.updateButtonVisibility.bind(this));\n }\n }\n\n scroll () {\n const method = directionMap[this.directionValue]\n\n if (method) {\n this[method]()\n } else {\n console.error(`Invalid direction value: ${this.directionValue}`)\n }\n }\n\n scrollLeft (targetOffset = this.referenceTarget.offsetLeft) {\n this.scrollableTarget.scrollLeft = targetOffset;\n }\n\n scrollTop (targetOffset = this.referenceTarget.offsetTop) {\n if(this.hasScrollableTarget) {\n this.scrollableTarget.scrollTop = targetOffset;\n } else {\n window.scrollTo({top: targetOffset});\n }\n }\n\n scrollByParentWidth(event) {\n let scrollValue\n const isRight = event.currentTarget == this.rightButtonTarget\n\n if (isRight) {\n scrollValue = Math.min(this.scrollableTarget.scrollLeft + this.visibleWidth, this.maxScrollLeft)\n } else {\n scrollValue = Math.max(this.scrollableTarget.scrollLeft - this.visibleWidth, 0)\n }\n\n this.scrollLeft(scrollValue)\n this.updateButtonVisibility()\n }\n\n updateButtonVisibility() {\n if (this.scrollableTarget.scrollLeft <= 0) {\n this.leftButtonTarget.classList.add('hidden');\n } else {\n this.leftButtonTarget.classList.remove('hidden');\n }\n\n if (this.scrollableTarget.scrollLeft >= (this.maxScrollLeft - this.rightButtonTarget.clientWidth)) {\n this.rightButtonTarget.classList.add('hidden');\n } else {\n this.rightButtonTarget.classList.remove('hidden');\n }\n }\n\n get width () {\n return this.scrollableTarget.scrollWidth\n }\n\n get visibleWidth () {\n return this.scrollableTarget.clientWidth\n }\n\n get maxScrollLeft () {\n return this.width - this.visibleWidth\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\nimport Resizer from '../../../lib/resizer'\n\nexport default class extends Controller {\n static targets = ['fragment', 'saveButton', 'form']\n static values = { formScope: String, editableFragments: Array }\n\n connect () {\n this.fragmentTargets.forEach(fragment => {\n if (this.isEditable(fragment)) {\n this.addSetoutData(fragment)\n }\n })\n }\n\n save (event) {\n this.fragmentTargets.forEach(fragment => {\n const clone = fragment.cloneNode(true)\n this.removeSetoutData(clone)\n this.appendInput(`${this.formScope}[fragments][][content]`, clone.outerHTML)\n })\n\n this.saveButtonTarget.disabled = true\n\n this.includeCustomParam(event)\n this.formTarget.submit()\n }\n\n addSetoutData (fragment) {\n fragment.className = (fragment.getAttribute('data-splicer') === 'photo') ? 'setout__fragment' : 'setout__fragment px-24 py-16'\n\n fragment.setAttribute('data-controller', 'setout--fragment')\n fragment.setAttribute('data-setout--editor-target', 'fragment')\n fragment.removeAttribute('data-target')\n\n fragment.children[0].setAttribute('contenteditable', 'true')\n fragment.children[0].addEventListener('input', function () {\n Resizer.allFonts(0)\n }, false)\n }\n\n removeSetoutData (fragment) {\n fragment.style.background = ''\n fragment.classList.remove('setout__fragment')\n fragment.classList.remove('setout__fragment--active')\n\n fragment.removeAttribute('data-max-height')\n fragment.removeAttribute('data-controller')\n\n fragment.children[0].removeAttribute('data-original-font-size')\n fragment.children[0].removeAttribute('data-current-font-size')\n fragment.children[0].removeAttribute('contenteditable')\n\n if (fragment.getAttribute('data-splicer') !== 'photo') {\n fragment.removeAttribute('data-splicer')\n }\n }\n\n isEditable (fragment) {\n const text = fragment.dataset.text\n const editable = this.editableFragmentsValue\n\n if (editable && editable.length > 0) {\n return editable.includes(fragment.dataset.splicer) || Array.from(fragment.children).some(child => editable.includes(child.id))\n } else if (fragment.children[0].innerHTML === 'festalab.com.br') {\n return false\n } else if (fragment.innerHTML.match(/logo.*\\.(png|jpg)/i)) {\n return false\n } else if (text == null) {\n return true\n } else {\n return !(text.includes('logo_white.png') || text.includes('logo_black.png'))\n }\n }\n\n includeCustomParam (event) {\n const button = event.target.closest('button')\n const customParamData = button.getAttribute('data-setout--editor-custom-param')\n\n if (customParamData?.trim()) {\n const [name, value] = customParamData.split(',')\n this.appendInput(name?.trim(), value?.trim())\n }\n }\n\n appendInput (name, value) {\n if (name && value) {\n const input = document.createElement('input')\n input.type = 'hidden'\n input.name = name\n input.value = value\n this.formTarget.appendChild(input)\n }\n }\n\n get formScope () {\n return this.formScopeValue || 'invitation'\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\nimport Text from '../../../lib/text'\n\nexport default class extends Controller {\n static targets = ['alert']\n\n validate (event) {\n const sender = document.getElementById('sender')\n const message = document.getElementById('message')\n let errorFieldMessage\n\n if (sender.textContent.match(/assinatura/i) || Text.isEmpty(sender.textContent)) {\n errorFieldMessage = 'Edite o texto no campo destacado em vermelho no cart\u00E3o antes de continuar'\n this.errorMessage(sender, event, errorFieldMessage)\n } else if (sender.textContent.length >= 60) {\n errorFieldMessage = 'O campo de assinatura do cart\u00E3o n\u00E3o pode ter mais que 60 caracteres!'\n this.errorMessage(sender, event, errorFieldMessage)\n } else if (message.innerText.length >= 560) {\n errorFieldMessage = 'O campo de mensagem do cart\u00E3o n\u00E3o pode ter mais que 560 caracteres!'\n this.errorMessage(message, event, errorFieldMessage)\n } else {\n this.alertTarget.classList.add('hidden')\n }\n }\n\n errorMessage (element, event, message) {\n event.stopImmediatePropagation()\n this.alertTarget.lastChild.innerText = message\n element.parentElement.classList.add('brd-error')\n this.alertTarget.classList.remove('hidden')\n }\n}\n", "export default class Draggable {\n constructor (element, callback) {\n this.element = element\n this.callback = callback\n\n // Prepare the handlers so they use the current context and can still be removed later\n this.handlers = {\n down: this.down.bind(this),\n move: this.move.bind(this),\n up: this.up.bind(this)\n }\n\n element.addEventListener('mousedown', this.handlers.down)\n element.addEventListener('touchstart', this.handlers.down)\n }\n\n down (e) {\n if (this.isResizeEvent(e)) return\n\n // Cache the offset parent rectangle for better performance\n // Don't do this in the constructor since the parent might not be at its final size yet\n this.boundaries = this.element.offsetParent.getBoundingClientRect()\n\n // Remember the starting mouse position\n this.x = e.clientX || e.touches[0].clientX\n this.y = e.clientY || e.touches[0].clientY\n\n // Indicate you will start requesting animation frames\n this.needRAF = true\n\n document.addEventListener('mousemove', this.handlers.move)\n document.addEventListener('touchmove', this.handlers.move)\n document.addEventListener('mouseup', this.handlers.up)\n document.addEventListener('touchend', this.handlers.up)\n }\n\n move (e) {\n e.preventDefault()\n\n // This is an expensive operation, only allow it to run once per animation frame\n if (!this.needRAF) return\n\n this.needRAF = false\n requestAnimationFrame(() => {\n // Get the element's current position and size\n const rectangle = this.element.getBoundingClientRect()\n\n // Get the mouse/touch current position\n const x = e.clientX || e.touches[0].clientX\n const y = e.clientY || e.touches[0].clientY\n\n // Calculate how far the element can be moved\n const dx = this.enforceHorizontalBoundary(rectangle, x - this.x)\n const dy = this.enforceVerticalBoundary(rectangle, y - this.y)\n\n // Calculate mouse/touch position inside the offset element\n const pageX = this.calculateRelativePosition(x, this.boundaries.x, this.boundaries.width)\n const pageY = this.calculateRelativePosition(y, this.boundaries.y, this.boundaries.height)\n\n // Issue the callback\n this.callback({ dx, dy, pageX, pageY, rectangle, boundaries: this.boundaries, target: this.element })\n\n // Reassign the position of mouse/touch\n this.x = x\n this.y = y\n\n this.needRAF = true\n })\n }\n\n up () {\n // Indicate you will stop requesting animation frames\n this.needRAF = false\n\n // Remove the handlers of `mousemove` and `mouseup`\n document.removeEventListener('mousemove', this.handlers.move)\n document.removeEventListener('touchmove', this.handlers.move)\n document.removeEventListener('mouseup', this.handlers.up)\n document.removeEventListener('touchend', this.handlers.up)\n }\n\n enforceHorizontalBoundary (rectangle, dx) {\n if (dx < 0) {\n const space = rectangle.x - this.boundaries.x\n return Math.abs(dx) > space ? -space : dx\n } else {\n const space = (this.boundaries.x + this.boundaries.width) - (rectangle.x + rectangle.width)\n return dx > space ? space : dx\n }\n }\n\n enforceVerticalBoundary (rectangle, dy) {\n if (dy < 0) {\n const space = rectangle.y - this.boundaries.y\n return Math.abs(dy) > space ? -space : dy\n } else {\n const space = (this.boundaries.y + this.boundaries.height) - (rectangle.y + rectangle.height)\n return dy > space ? space : dy\n }\n }\n\n calculateRelativePosition (position, start, length) {\n if (position < start) {\n return 0\n } else if (position > start + length) {\n return length\n } else {\n return position - start\n }\n }\n\n isResizeEvent (e) { // TODO: This is temporary, we need a better solution\n if (e.target.classList.contains('setout__fragment')) {\n const rect = e.target.getBoundingClientRect()\n const x = e.clientX - rect.right\n const y = e.clientY - rect.bottom\n return x > -15 && y > -15\n }\n }\n}\n", "import Draggable from './lib/draggable'\nimport Util from '../../../lib/util'\nimport { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['text']\n static values = { draggable: Boolean }\n\n /* == Life Cycle == */\n initialize () {\n this.template = document.querySelector('#template')\n this.overlay = document.querySelector('.setout__overlay')\n\n this.initWrapper()\n this.initInteraction()\n this.initWorkArounds()\n\n this.updateLegacyFragment()\n }\n\n /* == Initialization == */\n initWrapper () {\n this.element.setAttribute('style', 'position:absolute;top:0;left:0;display:flex;')\n\n this.x = this.x || 0\n this.y = this.y || 0\n this.skewX = this.skewX || 0\n this.skewY = this.skewY || 0\n this.rotate = this.rotate || 0\n this.align = this.align || 'center'\n this.valign = this.valign || 'center'\n\n const color = this.element.getAttribute('data-color')\n this.element.style.setProperty('--fragment-border', `#${color}`)\n\n this.updateWrapperStyle()\n }\n\n initInteraction () {\n if (this.isDraggable) {\n this.draggable = new Draggable(this.element, this.drag.bind(this))\n }\n }\n\n initWorkArounds () {\n const editable = this.element.querySelector('[contenteditable]')\n if (!editable) return\n\n editable.addEventListener('keydown', (event) => {\n const keyCode = event.charCode || event.keyCode\n if (keyCode !== 13) return\n\n event.preventDefault()\n\n const selection = window.getSelection()\n const range = selection.getRangeAt(0)\n const br = document.createElement('br')\n\n range.deleteContents()\n range.insertNode(br)\n\n range.setStartAfter(br)\n range.setEndAfter(br)\n\n selection.removeAllRanges()\n selection.addRange(range)\n\n return false\n })\n }\n\n /* == Interaction == */\n drag (event) {\n this.x += event.dx / this.scaleWidth\n this.y += event.dy / this.scaleHeight\n\n this.updateWrapperStyle()\n }\n\n updateWrapperStyle () {\n const align = { left: 'flex-start', center: 'center', right: 'flex-end' }\n const valign = { top: 'flex-start', center: 'center', bottom: 'flex-end' }\n\n Object.assign(this.element.style, {\n width: `${this.width}px`,\n height: `${this.height}px`,\n transform: `translate(${this.x}px, ${this.y}px) rotate(${this.rotate}deg) skew(${this.skewX}deg, ${this.skewY}deg)`, // Transform is done right to left. Do not change order.\n justifyContent: align[this.align],\n alignItems: valign[this.valign],\n textAlign: this.align\n })\n }\n\n /* == Update legacy fragments that contain defective code */\n updateLegacyFragment () {\n const constrainContent = this.splicer === 'photo'\n\n Object.assign(this.textTarget.style, {\n width: constrainContent ? '100%' : null,\n maxHeight: constrainContent ? '100%' : null\n })\n }\n\n /* == Getters & Setters == */\n set x (value) {\n this.element.setAttribute('data-x', value.toFixed(0))\n }\n\n get x () {\n return Number(this.element.dataset.x)\n }\n\n set y (value) {\n this.element.setAttribute('data-y', value.toFixed(0))\n }\n\n get y () {\n return Number(this.element.dataset.y)\n }\n\n set skewX (value) {\n this.element.setAttribute('data-skew-x', value)\n }\n\n get skewX () {\n return Number(this.element.dataset.skewX)\n }\n\n set skewY (value) {\n this.element.setAttribute('data-skew-y', value)\n }\n\n get skewY () {\n return Number(this.element.dataset.skewY)\n }\n\n set rotate (value) {\n this.element.setAttribute('data-rotate', value)\n }\n\n get rotate () {\n return Number(this.element.dataset.rotate)\n }\n\n set width (value) {\n this.element.setAttribute('data-width', value.toFixed(0))\n }\n\n get width () {\n return Number(this.element.dataset.width)\n }\n\n set height (value) {\n this.element.setAttribute('data-height', value.toFixed(0))\n }\n\n get height () {\n return Number(this.element.dataset.height)\n }\n\n get scaleWidth () {\n return (this.template.offsetWidth / this.overlay.offsetWidth)\n }\n\n get scaleHeight () {\n return (this.template.offsetHeight / this.overlay.offsetHeight)\n }\n\n set align (value) {\n this.element.setAttribute('data-align', value)\n }\n\n get align () {\n return this.element.dataset.align\n }\n\n set valign (value) {\n this.element.setAttribute('data-valign', value)\n }\n\n get valign () {\n return this.element.dataset.valign\n }\n\n get isDraggable () {\n return !this.hasDraggableValue || this.draggableValue\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\nimport Util from '../../lib/util'\n\nexport default class extends Controller {\n static targets = ['url', 'message']\n static values = { fallbackUrl: String, title: String, imageUrl: String, rootUrl: String }\n\n /* == Life cycle == */\n initialize () {\n // this.prepareImageForSharing()\n }\n\n /* == Actions == */\n chooseSharingMode (e) {\n if (Util.deviceCanShare()) {\n this.prepareForNativeSharing()\n } else {\n this.prepareForAppSharing()\n }\n }\n\n /* == Logic == */\n prepareImageForSharing () {\n if (!this.imageUrl || !Util.deviceCanShareFiles()) return\n\n fetch(this.imageUrl).then(res => {\n if (!res.ok) {\n // TODO: Log this result in analytics;\n } else {\n return res.blob()\n }\n }).then(blob => {\n this.imageFile = new File([blob], 'dot.png', { type: 'image/png' })\n }).finally(() => {\n })\n }\n\n prepareForNativeSharing () {\n try {\n const shareData = {\n title: this.titleValue,\n text: this.message,\n files: this.imageFile ? [this.imageFile] : []\n }\n navigator.share(shareData).then((resolve, reject) => {\n // TODO: Log this result in analytics;\n }).catch(error => {\n if (error.name === 'AbortError') {\n // TODO: Log this error in analytics;\n } else {\n // throw error\n }\n this.prepareForAppSharing()\n })\n } catch (e) {\n this.prepareForAppSharing()\n }\n }\n\n prepareForAppSharing () {\n let params = ''\n if (this.fallbackUrlValue.includes('?')) {\n params = `&message=${this.message}`\n } else {\n params = `?message=${this.message}`\n }\n\n Turbo.visit(`${this.fallbackUrlValue}${params}`)\n }\n\n /* == Getter and Setters == */\n get formattedUrl () {\n if (this.rootUrlValue && this.urlTarget) {\n return `${this.rootUrlValue}${this.urlTarget.value}`\n } else {\n return null\n }\n }\n\n get message () {\n return this.messageTarget.value\n }\n\n get imageUrl () {\n /*\n * User is about to share his website, however its image is to big (height, not kbs) for that.\n * If user has paid for an invitation, use its image for sharing, otherwise rely on opengraph for the preview.\n *\n * This replace is a hack because CORS is broken when going through cloudflare\n */\n if (this.imageUrlValue.indexOf('s3.amazonaws.com') !== -1) {\n return this.imageUrlValue || ''\n } else {\n return (this.imageUrlValue || '').replace('https://', 'https://s3-sa-east-1.amazonaws.com/')\n }\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['progress', 'scroller', 'content', 'item', 'previous', 'next', 'dots', 'dot']\n\n // ==== Life Cycle ==== //\n initialize () {\n this.progressCallback = this.progress.bind(this)\n this.ticking = false\n if (this.indexable) this.paginate()\n }\n\n connect () {\n this.contentTarget.addEventListener('scroll', this.progressCallback)\n this.togglePrevious()\n this.toggleNext()\n }\n\n disconnect () {\n this.contentTarget.removeEventListener('scroll', this.progressCallback)\n }\n\n // ==== Actions ==== //\n previous () {\n this.contentTarget.scrollLeft -= this.itemTargets[0].offsetWidth\n\n if (!this.indexable) return\n this.toggleDot()\n }\n\n next () {\n this.contentTarget.scrollLeft += this.itemTargets[0].offsetWidth\n\n if (!this.indexable) return\n this.toggleDot()\n }\n\n // ==== Logic ==== //\n progress () {\n if (this.hasProgressTarget) {\n if (!this.ticking) {\n window.requestAnimationFrame(() => {\n const x = (this.progressTarget.offsetWidth - this.scrollerTarget.offsetWidth) * this.scrollPercentage\n this.scrollerTarget.style.transform = `translateX(${x}px)`\n this.ticking = false\n })\n this.ticking = true\n }\n }\n this.index = Math.max(0, Math.ceil(this.scrollPercentage * this.dotTargets.length) - 1)\n this.toggleDot()\n this.togglePrevious()\n this.toggleNext()\n }\n\n togglePrevious () {\n if (!this.hasPreviousTarget) return\n this.toggleNavigation(this.previousTarget, !this.scrollable && this.index > 0)\n }\n\n toggleNext () {\n if (!this.hasNextTarget) return\n this.toggleNavigation(this.nextTarget, !this.scrollable && this.index < this.itemTargets.length - 1)\n }\n\n toggleDot () {\n this.dotTargets.forEach((dot, index) => {\n dot.classList.toggle('slider__dot--active', index === this.index)\n })\n }\n\n toggleNavigation (element, force) {\n element.style.display = force ? 'block' : 'none'\n }\n\n paginate () {\n if (!this.hasDotsTarget || this.itemTargets.length < 2) return\n this.dotsTarget.innerHTML = ''\n\n this.itemTargets.forEach((item, index) => {\n const dot = document.createElement('span')\n\n dot.className = 'slider__dot'\n dot.setAttribute('data-slider-target', 'dot')\n dot.setAttribute('data-slider-dot-index', index)\n item.setAttribute('data-slider-item-index', index)\n\n this.dotsTarget.appendChild(dot)\n })\n\n this.toggleDot()\n }\n\n // ==== Getters and Setters ==== //\n\n get indexable () {\n return Boolean(this.data.get('indexable'))\n }\n\n get index () {\n return Number(this.data.get('index'))\n }\n\n set index (value) {\n return this.data.set('index', value)\n }\n\n get scrollable () {\n return this.data.get('scrollable') === 'true' && this.contentTarget.offsetWidth < this.contentTarget.scrollWidth\n }\n\n get scrollPercentage () {\n return this.contentTarget.scrollLeft / (this.contentTarget.scrollWidth - this.contentTarget.offsetWidth)\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['page', 'previous', 'next', 'display', 'thumbnail', 'dots', 'slider']\n static classes = ['thumbnailActive']\n\n initialize () {\n this.showCurrentSlide()\n this.setCurrentThumbnail()\n this.showCurrentIndex()\n this.toggleButtons()\n this.buildDots()\n this.observeSlides()\n }\n\n next () {\n if (this.index < this.pageTargets.length - 1) this.index++\n this.toggleThumbnails()\n this.updateIndexChip(this.index)\n }\n\n previous () {\n if (this.index > 0) this.index--\n this.toggleThumbnails()\n this.updateIndexChip(this.index)\n }\n\n go (e) {\n this.index = e.currentTarget.dataset.slide\n this.toggleThumbnails()\n this.updateIndexChip(this.index)\n }\n\n showCurrentSlide () {\n if (this.showAllItems) return\n\n this.pageTargets.forEach((el, i) => {\n el.classList.toggle('hidden', this.index !== i)\n })\n }\n\n setCurrentThumbnail () {\n this.thumbnailTargets.forEach((thumbnail, index) => {\n thumbnail.classList.toggle(this.thumbnailActiveClass, index === this.index)\n })\n }\n\n toggleThumbnails () {\n if (this.index === this.thumbnailTargets.length - 1 || this.platform === 'mobile') return\n\n if (this.index >= this.lastThumbnailIndex) {\n this.navigationStart = true\n this.thumbnailTargets[this.firstThumbnailIndex].classList.toggle('hidden')\n this.firstThumbnailIndex++\n\n this.lastThumbnailIndex++\n this.thumbnailTargets[this.lastThumbnailIndex].classList.toggle('hidden')\n } else if (this.navigationStart && this.firstThumbnailIndex > 0) {\n this.firstThumbnailIndex--\n this.thumbnailTargets[this.firstThumbnailIndex].classList.toggle('hidden')\n\n this.thumbnailTargets[this.lastThumbnailIndex].classList.toggle('hidden')\n this.lastThumbnailIndex--\n }\n }\n\n toggleButtons () {\n if (this.hasPreviousTarget && this.hasNextTarget) {\n this.previousTarget.classList.toggle('hidden', this.index === 0)\n this.nextTarget.classList.toggle('hidden', this.index === this.pageTargets.length - 1)\n }\n }\n\n showCurrentIndex () {\n if (this.hasDisplayTarget) {\n this.displayTarget.innerHTML = this.index + 1\n }\n }\n\n buildDots () {\n if (!this.hasDotsTarget) return\n\n this.clearDots()\n this.setDots()\n }\n\n clearDots () {\n while (this.dotsTarget.children.length > 1) {\n this.lastItem = this.dotsTarget.children.item(this.dotsTarget.children.length - 1)\n this.lastItem.parentElement.removeChild(this.lastItem.parentElement.lastChild)\n }\n }\n\n setDots () {\n const firstDot = this.dotsTarget.children[0]\n for (let i = 0; i < (this.pageTargets.length - 1); i++) {\n const newDot = firstDot.cloneNode(true)\n this.dotsTarget.appendChild(newDot)\n }\n this.setDotAsActive(0)\n }\n\n observeSlides () {\n this.pageTargets.forEach((page) => {\n let observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n this.setActiveSlide(entry.target)\n }\n })\n }, { threshold: .4 })\n observer.observe(page)\n })\n }\n\n setActiveSlide (page) {\n const slide = Number(page.dataset.slide)\n\n this.setDotAsActive(slide)\n this.updateIndexChip(slide)\n }\n\n setDotAsActive (index) {\n if (!this.hasDotsTarget) return\n\n const dots = this.dotsTarget.children\n\n dots.forEach(dot => dot.classList.add('bg-gray'))\n dots[index].classList.add('bg-primary')\n dots[index].classList.remove('bg-gray')\n }\n\n updateIndexChip (index) {\n let chip = document.querySelector('#chip-count > span')\n if (chip) {\n let active_index = index + 1\n chip.innerText = active_index + '/' + this.pageTargets.length\n }\n }\n\n get index () {\n return parseInt(this.data.get('index'))\n }\n\n set index (value) {\n this.data.set('index', value)\n this.showCurrentSlide()\n this.setCurrentThumbnail()\n this.showCurrentIndex()\n this.toggleButtons()\n }\n\n get firstThumbnailIndex () {\n return parseInt(this.data.get('first-thumbnail-index'))\n }\n\n set firstThumbnailIndex (value) {\n this.data.set('first-thumbnail-index', value)\n }\n\n get lastThumbnailIndex () {\n return parseInt(this.data.get('last-thumbnail-index'))\n }\n\n set lastThumbnailIndex (value) {\n this.data.set('last-thumbnail-index', value)\n }\n\n get navigationStart () {\n return Boolean(this.data.get('navigation-start'))\n }\n\n set navigationStart (value) {\n this.data.set('navigation-start', value)\n }\n\n get platform () {\n return this.data.get('platform')\n }\n\n get showAllItems () {\n return Boolean(this.data.get('show-all-items'))\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n center () {\n this.element.scrollLeft = (this.element.scrollWidth - this.element.offsetWidth) / 2\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['hourDisplay', 'minuteDisplay', 'input', 'hourControl', 'minutesControl']\n\n /* == Actions == */\n display (e) {\n this.hourDisplayTarget.textContent = this.hourControlTarget.value\n this.minuteDisplayTarget.textContent = this.minutesControlTarget.value\n }\n\n focus (e) {\n e.currentTarget.dataset.savedValue = e.currentTarget.value\n e.currentTarget.value = ''\n }\n\n blur (e) {\n const target = e.currentTarget\n if (target.value === '') target.value = target.dataset.savedValue\n }\n\n hourChanged (e) {\n const value = e.target.value\n\n if (Number(value) > 23) {\n e.target.value = null\n return\n }\n\n this.updateTime()\n if (value.length === 2) this.minutesControlTarget.focus()\n }\n\n minutesChanged (e) {\n const value = e.target.value\n\n if (Number(value) > 59) {\n e.target.value = null\n return\n }\n\n this.updateTime()\n if (value.length === 2) this.minutesControlTarget.blur()\n }\n\n /* == Logic == */\n updateTime () {\n this.inputTarget.value = `${this.hour}:${this.minutes}`\n }\n\n /* == Getters & Setters == */\n get hour () {\n return this.hourControlTarget.value.padStart(2, '0')\n }\n\n get minutes () {\n return this.minutesControlTarget.value.padStart(2, '0')\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\nimport Parser from '../../lib/parser'\nexport default class extends Controller {\n static values = {\n eventId: String,\n scheduledOn: String,\n toBeDefined: Boolean,\n placeholderScheduledOn: Boolean,\n scheduled: Boolean,\n unsure: Boolean,\n status: String,\n completedStatus: String\n }\n\n connect () {\n this.update()\n }\n\n update () {\n const now = new Date()\n\n const day = now.getDate().toString().padStart(2, '0')\n const month = (now.getMonth() + 1).toString().padStart(2, '0')\n const year = now.getFullYear()\n\n const brasiliaTime = Parser.date(`${day}/${month}/${year}`)\n brasiliaTime.setHours(brasiliaTime.getHours() + 3)\n const scheduledOn = new Date(this.scheduledOnValue)\n\n if (this.toBeDefinedValue || this.placeholderScheduledOnValue) {\n this.element.innerText = 'A definir'\n } else if (!this.scheduledValue && !this.unsureValue) {\n this.element.innerText = this.statusValue\n } else if (scheduledOn.getTime() === brasiliaTime.getTime()) {\n this.element.innerText = '\u00C9 Hoje!'\n } else if (scheduledOn > brasiliaTime) {\n const MILLISECONDS_PER_DAY = 60 * 60 * 24 * 1000\n const differenceInDays = Math.ceil((scheduledOn - brasiliaTime) / MILLISECONDS_PER_DAY)\n document.getElementById(`${this.eventIdValue}`).innerText = `Falt${differenceInDays === 1 ? 'a' : 'am'}`\n this.element.innerText = `${differenceInDays} dia${differenceInDays === 1 ? '' : 's'}`\n } else {\n this.element.innerText = this.completedStatusValue\n }\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\nimport Util from '../../lib/util'\n\nexport default class extends Controller {\n // ============================================================================\n // ACTIONS\n // ============================================================================\n\n /*\n * Takes the event of an element, and executes in another\n */\n transmit (event) {\n const target = event.currentTarget.dataset.target\n this.fire(document.querySelector(target), event.type)\n }\n\n /*\n * Removes an element from the DOM\n */\n remove (event) {\n const target = event.currentTarget.dataset.remove || 'this'\n this.chooseTarget(event.currentTarget, target).remove()\n }\n\n /*\n * Toggles the specified attribute of the target\n */\n toggleAttribute (event) {\n const target = event.currentTarget.dataset.target\n const attribute = event.currentTarget.dataset.attribute || 'disabled'\n\n const element = this.chooseTarget(event.currentTarget, target)\n element.toggleAttribute(attribute)\n }\n\n /*\n * Sets the attribute of an element\n */\n setAttribute (event) {\n const target = event.currentTarget.dataset.target\n const attribute = event.currentTarget.dataset.attribute || 'value'\n const element = this.chooseTarget(event.currentTarget, target)\n let value = event.currentTarget.dataset.value || event.currentTarget.value\n\n if (value === 'true') {\n value = true\n } else if (value === 'false') {\n value = false\n }\n\n element[attribute] = value\n if (attribute === 'value') this.fire(element, 'input')\n }\n\n /*\n * Toggles the specified class of the target\n */\n toggleClass (event) {\n const element = event.currentTarget\n const klass = element.dataset.class || 'hidden'\n const { target, required, timeout } = element.dataset\n\n target.split(',').forEach(target => {\n const tmp = this.chooseTarget(event.currentTarget, target)\n\n if (required === 'true') {\n tmp.classList.toggle(klass, element.value === '')\n } else if (required) {\n tmp.classList.toggle(klass, element.value !== required)\n } else {\n tmp.classList.toggle(klass)\n }\n\n // Toggle back after timeout (if timeout is defined)\n if (timeout) {\n const timeoutMs = parseInt(timeout, 10)\n\n setTimeout(() => {\n tmp.classList.toggle(klass)\n }, timeoutMs)\n }\n })\n }\n\n /*\n * Toggles a specified class of a target element based on the value of the trigger element\n */\n toggleClassByValue (event) {\n const element = event.currentTarget\n const target = element.dataset.target\n const selectedValue = element.value\n const targetValue = element.dataset.value\n const klass = element.dataset.class || 'hidden'\n\n target.split(',').forEach(target => {\n const tmp = this.chooseTarget(event.currentTarget, target)\n if (selectedValue === targetValue) {\n tmp.classList.remove(klass)\n } else {\n tmp.classList.add(klass)\n }\n })\n }\n\n /*\n * Removes the specified class of the target\n */\n removeClass (event) {\n const element = event.currentTarget\n const klass = element.dataset.class || 'hidden'\n const target = element.dataset.utilTarget || element.dataset.target\n\n target.split(',').forEach(target => {\n const tmp = this.chooseTarget(event.currentTarget, target)\n tmp.classList.remove(klass)\n })\n }\n\n removeClassForAll(event) {\n const element = event.currentTarget\n const klass = element.dataset.class || 'hidden'\n const targets = document.querySelectorAll(element.dataset.utilTarget || element.dataset.target)\n\n targets.forEach(target => {\n target.classList.remove(klass)\n })\n }\n\n /*\n * Adds the specified class of the target\n */\n addClass (event) {\n const element = event.currentTarget\n const klass = element.dataset.class || 'hidden'\n const target = element.dataset.utilTarget || element.dataset.target\n\n target.split(',').forEach(target => {\n const tmp = this.chooseTarget(event.currentTarget, target)\n tmp.classList.add(klass)\n })\n }\n\n addClassForAll(event) {\n const element = event.currentTarget\n const klass = element.dataset.class || 'hidden'\n const targets = document.querySelectorAll(element.dataset.utilTarget || element.dataset.target)\n\n targets.forEach(target => {\n target.classList.add(klass)\n })\n }\n\n /*\n * Performs a smooth scroll to an element\n */\n scrollToElement (event) {\n const element = event.currentTarget\n const target = element.dataset.target || element.dataset.target\n const tmp = this.chooseTarget(event.currentTarget, target)\n\n setTimeout(() => Util.scrollToElement(tmp), 0)\n }\n\n // ============================================================================\n // OTHER\n // ============================================================================\n /*\n * Dispatches an event on the object\n */\n fire (obj, name) {\n const event = new CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail: null\n })\n obj.dispatchEvent(event)\n return !event.defaultPrevented\n }\n\n // ============================================================================\n // INTERNAL USAGE\n // ============================================================================\n chooseTarget (element, target) {\n target = target.trim()\n\n if (!target) {\n return element\n } else if (target === 'parent') {\n return element.parentElement\n } else if (target === 'this') {\n return element\n } else if (target.indexOf('closest') !== -1) {\n return element.closest(target.split(' ')[1])\n } else {\n return document.querySelector(target)\n }\n }\n\n /* Scroll to website top */\n scrollTopWebsite () {\n document.querySelector('[data-website-top]').scrollTop = 0\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['submit', 'submitButton', 'warning']\n\n checkIfValueCanBeWithdrawn (e) {\n // reset everything\n const withdrawalAmount = parseFloat(e.target.value.replace('.', '').replace(',', '.'))\n const availableAmount = parseFloat(e.target.dataset.availableAmount)\n e.target.classList.remove('txt-error')\n\n // check if value is present\n if (e.target.value !== '') {\n this.submitTarget.classList.remove('hidden')\n } else {\n this.submitTarget.classList.add('hidden')\n }\n\n // check if value can be withdrawn\n if (withdrawalAmount > availableAmount) {\n e.target.classList.add('txt-error')\n this.warningTarget.classList.remove('hidden')\n this.submitButtonTarget.disabled = true\n } else {\n this.warningTarget.classList.add('hidden')\n this.submitButtonTarget.disabled = false\n }\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['photo']\n\n initialize () { }\n\n open (event) {\n this.index = parseInt(event.target.closest('details').dataset.index)\n this.showButtons(event, this.index)\n }\n\n next (event) {\n this.index = parseInt(event.target.closest('details').dataset.index)\n this.closePhoto(this.index)\n this.index++\n this.togglePhoto(this.index)\n }\n\n previous (event) {\n this.index = parseInt(event.target.closest('details').dataset.index)\n this.closePhoto(this.index)\n this.index--\n this.togglePhoto(this.index)\n }\n\n close (event) {\n event.target.closest('details').removeAttribute('open')\n }\n\n closePhoto (index) {\n const item = document.querySelector(`[data-index='${index}']`)\n item.removeAttribute('open')\n }\n\n togglePhoto (index) {\n const item = document.querySelector(`[data-index='${index}']`)\n item.setAttribute('open', '')\n }\n\n showButtons (event, index) {\n this.hasPrevious ? event.target.querySelector('.previous-button').classList.remove('hidden') : false\n this.hasNext ? event.target.querySelector('.next-button').classList.remove('hidden') : false\n }\n\n stopPropagation (event) {\n event.stopPropagation()\n }\n\n get index () {\n return parseInt(this.data.get('index'))\n }\n\n set index (value) {\n this.data.set('index', value)\n }\n\n get hasNext () {\n return this.index < this.photoTargets.length\n }\n\n get hasPrevious () {\n return this.index > 1\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['transitionImage']\n\n interval = Number(this.data.get('interval')) || 2000\n delay = Number(this.data.get('delay')) || 500\n currentImageIndex = 0\n images = this.transitionImageTargets\n counter = this.images.length\n\n connect () {\n this.start()\n }\n\n nextImage () {\n this.fadeOutPrevious()\n this.currentImageIndex++\n\n if (this.currentImageIndex >= this.counter) {\n this.currentImageIndex = 0\n }\n\n setTimeout(() => this.fadeInNext(), this.delay)\n }\n\n start () {\n setInterval(() => {\n this.nextImage()\n }, this.interval)\n }\n\n fadeInNext () {\n this.images[this.currentImageIndex].classList.remove('invisible') // fade-in next\n }\n\n fadeOutPrevious () {\n this.images[this.currentImageIndex].classList.add('invisible') // fade-out previous\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['message', 'phone']\n static values = { url: String }\n\n open () {\n if (this.hasPhoneTarget) {\n window.open(`https://wa.me/${this.phoneTarget.value}?text=${encodeURIComponent(this.messageTarget.value)}`, '_blank')\n } else {\n window.open(`https://api.whatsapp.com/send?text=${encodeURIComponent(this.messageTarget.value)}`, '_blank')\n }\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n getVideo (event) {\n return document.getElementById(event.params.id)\n }\n\n play (event) {\n const video = this.getVideo(event)\n video.play()\n }\n\n stop (event) {\n const video = this.getVideo(event)\n video.pause()\n video.currentTime = 0\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['master', 'checkbox', 'actionOptions']\n static classes = ['action']\n static values = { maxSelections: Number }\n\n connect () {\n this.setObserver()\n }\n\n setObserver () {\n this.checkboxTargets.forEach((target) => this.setEventListeners(target))\n }\n\n setEventListeners (target) {\n target.addEventListener('change', event => {\n this.updateActionTargets()\n })\n\n if (this.hasMaxSelections()) {\n target.addEventListener('change', event => {\n this.ensureMaxSelections(event)\n })\n }\n }\n\n toggleAll () {\n this.checkboxTargets.forEach((checkbox) => {\n checkbox.checked = this.masterTarget.checked\n })\n this.setAction()\n }\n\n toggleMaster () {\n if (this.checkboxTargets.length > 0 && this.checkboxTargets.length === this.selectedCheckboxes.length) {\n this.masterTarget.checked = true\n } else {\n this.masterTarget.checked = false\n }\n this.setAction()\n }\n\n hasMaxSelections () {\n return Boolean(this.maxSelectionsValue)\n }\n\n ensureMaxSelections (event) {\n if (this.exceededMaxSelections()) {\n event.target.checked = false\n }\n }\n\n exceededMaxSelections () {\n return this.selectedCheckboxes.length > this.maxSelectionsValue\n }\n\n updateActionTargets () {\n const shouldAddClass = this.actionClass === 'disabled'\n\n if (this.hasSelectedCheckboxes) {\n this.toggleActionTargetsClassTo(!shouldAddClass)\n } else {\n this.toggleActionTargetsClassTo(shouldAddClass)\n }\n }\n\n toggleActionTargetsClassTo (value) {\n this.actionOptionsTargets.forEach((target) => target.classList.toggle(this.actionClass, value))\n }\n\n // ============================================================================\n // INTERNAL USAGE\n // ============================================================================\n setAction () {\n const shouldAddClass = this.actionClass === 'disabled'\n\n if (this.hasSelectedCheckboxes) {\n this.actionOptionsTargets.forEach((target) => { target.classList.toggle(this.actionClass, !shouldAddClass) })\n } else {\n this.actionOptionsTargets.forEach((target) => { target.classList.toggle(this.actionClass, shouldAddClass) })\n }\n }\n\n get selectedCheckboxes () {\n return this.checkboxTargets.filter((checkbox) => checkbox.checked)\n }\n\n get hasSelectedCheckboxes () {\n return this.selectedCheckboxes.length > 0\n }\n}\n", "// This file is auto-generated by ./bin/rails stimulus:manifest:update\n// Run that command whenever you add a new controller\n/* eslint-disable */\n\nimport { application } from \"../application\"\n\nimport AjaxController from './ajax_controller.js'\napplication.register('ajax', AjaxController)\n\nimport AnimationController from './animation_controller.js'\napplication.register('animation', AnimationController)\n\nimport ApplicationController from './application_controller.js'\napplication.register('application', ApplicationController)\n\nimport AsyncRenderController from './async_render_controller.js'\napplication.register('async-render', AsyncRenderController)\n\nimport BreadcrumbsController from './breadcrumbs_controller.js'\napplication.register('breadcrumbs', BreadcrumbsController)\n\nimport ChecklistController from './checklist_controller.js'\napplication.register('checklist', ChecklistController)\n\nimport ClipboardController from './clipboard_controller.js'\napplication.register('clipboard', ClipboardController)\n\nimport ClickTrackerController from './click_tracker_controller.js'\napplication.register('click-tracker', ClickTrackerController)\n\nimport ContactPickerController from './contact_picker_controller.js'\napplication.register('contact-picker', ContactPickerController)\n\nimport CountdownController from './countdown_controller.js'\napplication.register('countdown', CountdownController)\n\nimport DragController from './drag_controller.js'\napplication.register('drag', DragController)\n\nimport ExpandableController from './expandable_controller.js'\napplication.register('expandable', ExpandableController)\n\nimport FilterSelectController from './filter_select_controller.js'\napplication.register('filter-select', FilterSelectController)\n\nimport FormController from './form_controller.js'\napplication.register('form', FormController)\n\nimport ImageZoomController from './image_zoom_controller.js'\napplication.register('image-zoom', ImageZoomController)\n\nimport IntersectorController from './intersector_controller.js'\napplication.register('intersector', IntersectorController)\n\nimport LegacyInvitationsController from './legacy/invitations_controller.js'\napplication.register('legacy--invitations', LegacyInvitationsController)\n\nimport PagarmeController from './pagarme_controller.js'\napplication.register('pagarme', PagarmeController)\n\nimport TunaController from './tuna_controller.js'\napplication.register('tuna', TunaController)\n\nimport PaypalController from './paypal_controller.js'\napplication.register('paypal', PaypalController)\n\nimport PhotoEditorController from './photo_editor_controller.js'\napplication.register('photo-editor', PhotoEditorController)\n\nimport ResizerController from './resizer_controller.js'\napplication.register('resizer', ResizerController)\n\nimport ScrollerController from './scroller_controller.js'\napplication.register('scroller', ScrollerController)\n\nimport SetoutEditorController from './setout/editor_controller.js'\napplication.register('setout--editor', SetoutEditorController)\n\nimport SetoutValidatorController from './setout/validator_controller.js'\napplication.register('setout--validator', SetoutValidatorController)\n\nimport SetoutFragmentController from './setout/fragment_controller.js'\napplication.register('setout--fragment', SetoutFragmentController)\n\nimport ShareController from './share_controller.js'\napplication.register('share', ShareController)\n\nimport SliderController from './slider_controller.js'\napplication.register('slider', SliderController)\n\nimport SlideshowController from './slideshow_controller.js'\napplication.register('slideshow', SlideshowController)\n\nimport SuggestionsController from './suggestions_controller.js'\napplication.register('suggestions', SuggestionsController)\n\nimport TimeController from './time_controller.js'\napplication.register('time', TimeController)\n\nimport TimeUntilController from './time_until_controller.js'\napplication.register('time-until', TimeUntilController)\n\nimport UtilController from './util_controller.js'\napplication.register('util', UtilController)\n\nimport WithdrawalController from './withdrawal_controller.js'\napplication.register('withdrawal', WithdrawalController)\n\nimport GalleryController from './gallery_controller.js'\napplication.register('gallery', GalleryController)\n\nimport ImageTransitionController from './image_transition_controller'\napplication.register('image-transition', ImageTransitionController)\n\nimport WhatsappController from './whatsapp_controller'\napplication.register('whatsapp', WhatsappController)\n\nimport VideoController from './video_controller'\napplication.register('video', VideoController)\n\nimport CheckboxController from './checkbox_controller'\napplication.register('checkbox', CheckboxController)\n", "/* eslint-disable */\n\nrequire('eventlistener-polyfill')\nimport smoothscroll from 'smoothscroll-polyfill'\n\nexport default {\n start () {\n this.forEach()\n smoothscroll.polyfill()\n },\n\n forEach () {\n if (window.NodeList && !NodeList.prototype.forEach) {\n NodeList.prototype.forEach = function (callback, thisArg) {\n thisArg = thisArg || window\n for (var i = 0; i < this.length; i++) {\n callback.call(thisArg, this[i], i, this)\n }\n }\n }\n\n if (window.HTMLCollection && !HTMLCollection.prototype.forEach) {\n HTMLCollection.prototype.forEach = function (callback, thisArg) {\n thisArg = thisArg || window\n for (var i = 0; i < this.length; i++) {\n callback.call(thisArg, this[i], i, this)\n }\n }\n }\n },\n}\n", "/* eslint-disable */\n\nexport default {\n start () {\n // Temporarily disable minimal analytics\n if (!this.trackerId() || !this.storageAvailable('localStorage')) {\n return\n }\n\n this.trackerId().startsWith(\"UA\") ? this.legacyAnalytics() : this.newAnalytics()\n },\n\n legacyAnalytics () {\n (function (context, trackingId, options) {\n const history = context.history\n const doc = document\n const nav = navigator || {}\n const storage = localStorage\n const encode = encodeURIComponent\n const pushState = history.pushState\n const typeException = 'exception'\n const generateId = () => Math.random().toString(36)\n const getId = () => {\n if (!storage.cid) {\n storage.cid = generateId()\n }\n return storage.cid\n }\n const serialize = (obj) => {\n var str = []\n for (var p in obj) {\n if (obj.hasOwnProperty(p)) {\n if (obj[p] !== undefined) {\n str.push(encode(p) + '=' + encode(obj[p]))\n }\n }\n }\n return str.join('&')\n }\n const track = (\n type,\n eventCategory,\n eventAction,\n eventLabel,\n eventValue,\n exceptionDescription,\n exceptionFatal\n ) => {\n const url = 'https://www.google-analytics.com/collect'\n const data = serialize({\n v: '1',\n ds: 'web',\n aip: options.anonymizeIp ? 1 : undefined,\n tid: trackingId,\n cid: getId(),\n t: type || 'pageview',\n sd: options.colorDepth && screen.colorDepth ? `${screen.colorDepth}-bits` : undefined,\n dr: doc.referrer || undefined,\n dt: doc.title,\n dl: doc.location.origin + doc.location.pathname + doc.location.search,\n ul: options.language ? (nav.language || '').toLowerCase() : undefined,\n de: options.characterSet ? doc.characterSet : undefined,\n sr: options.screenSize ? `${(context.screen || {}).width}x${(context.screen || {}).height}` : undefined,\n vp: options.screenSize && context.visualViewport ? `${(context.visualViewport || {}).width}x${(context.visualViewport || {}).height}` : undefined,\n ec: eventCategory || undefined,\n ea: eventAction || undefined,\n el: eventLabel || undefined,\n ev: eventValue || undefined,\n exd: exceptionDescription || undefined,\n exf: typeof exceptionFatal !== 'undefined' && !!exceptionFatal === false ? 0 : undefined,\n })\n\n if (nav.sendBeacon) {\n nav.sendBeacon(url, data)\n } else {\n var xhr = new XMLHttpRequest()\n xhr.open('POST', url, true)\n xhr.send(data)\n }\n }\n const trackEvent = (category, action, label, value) => track('event', category, action, label, value)\n const trackException = (description, fatal) => track(typeException, null, null, null, null, description, fatal)\n history.pushState = function (state) {\n if (typeof history.onpushstate == 'function') {\n history.onpushstate({ state: state })\n }\n setTimeout(track, options.delay || 10)\n return pushState.apply(history, arguments)\n }\n track()\n context.ma = {\n trackEvent,\n trackException\n }\n })(window, this.trackerId(), {\n anonymizeIp: true,\n colorDepth: true,\n characterSet: true,\n screenSize: true,\n language: true\n })\n },\n\n newAnalytics () {\n function a (trackerId) {\n const r = trackerId\n var t = 'XXXXXX', n, b\n t == 'XXXXXX' ? (n = () => {}) : (n = () => t)\n const s = () => Math.floor(Math.random() * 1e9) + 1, o = () => Math.floor(Date.now() / 1e3), v = () => (sessionStorage._p || (sessionStorage._p = s()), sessionStorage._p), h = () => s() + '.' + o(), d = () => (localStorage.cid_v4 || (localStorage.cid_v4 = h()), localStorage.cid_v4), c = () => (sessionStorage.sid || (sessionStorage.sid = o()), sessionStorage.sid), l = () => {\n if (!sessionStorage._ss) return sessionStorage._ss = '1', sessionStorage._ss\n if (sessionStorage.getItem('_ss') == '1') return void 0\n }, e = '1', u = () => {\n if (sessionStorage.sct) {\n var t = +sessionStorage.getItem('sct') + +e\n sessionStorage.sct = t\n } else sessionStorage.sct = e\n return sessionStorage.sct\n }, a = encodeURIComponent, m = e => {\n var n = [], t\n for (t in e) e.hasOwnProperty(t) && e[t] !== void 0 && n.push(a(t) + '=' + a(e[t]))\n return n.join('&')\n }, f = !1, p = 'https://www.google-analytics.com/g/collect', g = m({ v: '2', tid: r, gtm: n(), _p: v(), sr: (screen.width + 'x' + screen.height).toString(), ul: (navigator.language || void 0).toLowerCase(), cid: d(), _s: '1', dl: document.location.origin + document.location.pathname + document.location.search, dt: document.title || void 0, dr: document.referrer || void 0, sid: c(), sct: u(), seg: '1', en: 'page_view', _ss: l(), _dbg: f ? 1 : void 0 }), i = p + '?' + g\n navigator.sendBeacon ? navigator.sendBeacon(i) : (b = new XMLHttpRequest, b.open('POST', i, !0))\n }\n\n a(this.trackerId())\n },\n\n storageAvailable (type) {\n try {\n var storage = window[type],\n x = '__storage_test__'\n storage.setItem(x, x)\n storage.removeItem(x)\n return true\n } catch (e) {\n return false\n }\n },\n\n trackerId () {\n const analytics = document.querySelector('meta[name=\\'analytics\\']')\n return analytics && analytics.getAttribute('content')\n }\n}\n", "import Lozad from 'lozad'\n\nconst ImageLazyLoading = {\n start () {\n document.addEventListener('turbo:load', () => {\n const observer = Lozad()\n observer.observe()\n })\n\n document.addEventListener('turbo:frame-render', () => {\n const observer = Lozad()\n observer.observe()\n })\n\n document.addEventListener('turbo:render', () => {\n const observer = Lozad()\n observer.observe()\n })\n\n document.addEventListener('ajax:done', () => {\n const observer = Lozad()\n observer.observe()\n })\n }\n}\n\nexport default ImageLazyLoading\n"], "mappings": "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", "names": ["require_rails_ujs", "__commonJSMin", "exports", "module", "global", "factory", "linkClickSelector", "buttonClickSelector", "inputChangeSelector", "formSubmitSelector", "formInputClickSelector", "formDisableSelector", "formEnableSelector", "fileInputSelector", "linkDisableSelector", "buttonDisableSelector", "nonce", "loadCSPNonce", "metaTag", "cspNonce", "m", "matches", "element", "selector", "EXPANDO", "getData", "key", "setData", "value", "$", "isContentEditable", "isEditable", "csrfToken", "meta", "csrfParam", "CSRFProtection", "xhr", "token", "refreshCSRFTokens", "param", "input", "AcceptHeaders", "ajax", "options", "prepareOptions", "createXHR", "response", "processResponse", "done", "type", "error", "script", "parser", "error1", "href", "isCrossDomain", "url", "originAnchor", "urlAnchor", "e", "preventDefault", "CustomEvent", "event", "params", "evt", "result", "fire", "obj", "name", "data", "stopEverything", "delegate", "eventType", "handler", "target", "toArray", "serializeElement", "additionalParam", "inputs", "option", "formElements", "form", "el", "handleConfirmWithRails", "rails", "allowAction", "confirm", "message", "callback", "answer", "handleDisabledElement", "enableElement", "isXhrRedirect", "enableLinkElement", "enableFormElement", "enableFormElements", "disableElement", "disableLinkElement", "disableFormElement", "disableFormElements", "replacement", "originalText", "handleMethodWithRails", "link", "method", "csrfToken$1", "csrfParam$1", "formContent", "isRemote", "handleRemoteWithRails", "withCredentials", "dataType", "button", "args", "formSubmitButtonClick", "preventInsignificantClick", "insignificantMetaClick", "Rails", "handleConfirm", "handleMethod", "handleRemote", "start", "originalOptions", "adapters_default", "init_adapters", "__esmMin", "logger_default", "init_logger", "__esmMin", "init_adapters", "messages", "adapters_default", "now", "secondsSince", "ConnectionMonitor", "connection_monitor_default", "init_connection_monitor", "__esmMin", "init_logger", "time", "connection", "logger_default", "staleThreshold", "reconnectionBackoffRate", "backoff", "jitter", "internal_default", "init_internal", "__esmMin", "message_types", "protocols", "supportedProtocols", "indexOf", "Connection", "connection_default", "init_connection", "__esmMin", "init_adapters", "init_connection_monitor", "init_internal", "init_logger", "internal_default", "consumer", "connection_monitor_default", "data", "logger_default", "socketProtocols", "adapters_default", "allowReconnect", "error", "states", "state", "eventName", "handler", "event", "identifier", "message", "reason", "reconnect", "type", "extend", "Subscription", "init_subscription", "__esmMin", "object", "properties", "key", "value", "consumer", "params", "mixin", "action", "data", "SubscriptionGuarantor", "subscription_guarantor_default", "init_subscription_guarantor", "__esmMin", "init_logger", "subscriptions", "subscription", "logger_default", "s", "Subscriptions", "init_subscriptions", "__esmMin", "init_subscription", "init_subscription_guarantor", "init_logger", "consumer", "subscription_guarantor_default", "channelName", "mixin", "channel", "params", "subscription", "Subscription", "identifier", "s", "callbackName", "args", "subscriptions", "logger_default", "command", "createWebSocketURL", "url", "a", "Consumer", "init_consumer", "__esmMin", "init_connection", "init_subscriptions", "Subscriptions", "connection_default", "data", "subprotocol", "src_exports", "__export", "connection_default", "connection_monitor_default", "Consumer", "internal_default", "Subscription", "subscription_guarantor_default", "Subscriptions", "adapters_default", "createConsumer", "createWebSocketURL", "getConfig", "logger_default", "url", "name", "element", "init_src", "__esmMin", "init_connection", "init_connection_monitor", "init_consumer", "init_internal", "init_subscription", "init_subscriptions", "init_subscription_guarantor", "init_adapters", "init_logger", "require_activestorage", "__commonJSMin", "exports", "module", "global", "factory", "sparkMd5", "undefined$1", "hex_chr", "md5cycle", "x", "k", "a", "b", "c", "d", "md5blk", "s", "md5blks", "i", "md5blk_array", "md51", "n", "state", "length", "tail", "tmp", "lo", "hi", "md51_array", "rhex", "j", "hex", "clamp", "val", "from", "to", "begin", "end", "num", "target", "targetArray", "sourceArray", "toUtf8", "str", "utf8Str2ArrayBuffer", "returnUInt8Array", "buff", "arr", "arrayBuffer2Utf8Str", "concatenateArrayBuffers", "first", "second", "result", "hexToBinaryString", "bytes", "SparkMD5", "contents", "raw", "ret", "content", "hash", "fileSlice", "FileChecksum", "file", "callback", "event", "binaryDigest", "base64digest", "start", "getMetaValue", "name", "element", "findElement", "findElements", "root", "selector", "elements", "toArray", "dispatchEvent", "type", "eventInit", "disabled", "bubbles", "cancelable", "detail", "value", "BlobRecord", "checksum", "url", "customHeaders", "headerKey", "csrfToken", "responseType", "response", "direct_upload", "key", "BlobUpload", "blob", "headers", "status", "id", "DirectUpload", "delegate", "error", "notify", "upload", "object", "methodName", "messages", "DirectUploadController", "input", "hiddenInput", "attributes", "progress", "xhr", "inputSelector", "DirectUploadsController", "form", "controllers", "startNextController", "controller", "processingAttribute", "submitButtonsByForm", "started", "didClick", "didSubmitForm", "didSubmitRemoteElement", "button", "handleFormSubmissionEvent", "inputs", "disable", "enable", "submitForm", "autostart", "Util", "util_default", "init_util", "__esmMin", "key", "callback", "func", "wait", "immediate", "timeout", "context", "args", "later", "callNow", "element", "selector", "eventType", "handler", "e", "target", "limit", "inThrottle", "container", "lastChild", "xPosition", "yPosition", "offset", "to", "position", "isAbsolute", "range", "selection", "mockFile", "mobile", "desktop", "require_clipboard", "__commonJSMin", "exports", "module", "root", "factory", "__webpack_modules__", "__unused_webpack_module", "__webpack_exports__", "__webpack_require__", "clipboard", "tiny_emitter", "tiny_emitter_default", "listen", "listen_default", "src_select", "select_default", "command", "type", "err", "ClipboardActionCut", "target", "selectedText", "actions_cut", "createFakeElement", "value", "isRTL", "fakeElement", "yPosition", "fakeCopyAction", "options", "ClipboardActionCopy", "actions_copy", "_typeof", "obj", "ClipboardActionDefault", "_options$action", "action", "container", "text", "actions_default", "clipboard_typeof", "_classCallCheck", "instance", "Constructor", "_defineProperties", "props", "i", "descriptor", "_createClass", "protoProps", "staticProps", "_inherits", "subClass", "superClass", "_setPrototypeOf", "o", "p", "_createSuper", "Derived", "hasNativeReflectConstruct", "_isNativeReflectConstruct", "Super", "_getPrototypeOf", "result", "NewTarget", "_possibleConstructorReturn", "self", "call", "_assertThisInitialized", "e", "getAttributeValue", "suffix", "element", "attribute", "Clipboard", "_Emitter", "_super", "trigger", "_this", "_this2", "selector", "actions", "support", "DOCUMENT_NODE_TYPE", "proto", "closest", "__unused_webpack_exports", "_delegate", "callback", "useCapture", "listenerFn", "listener", "delegate", "elements", "is", "listenNode", "listenNodeList", "listenSelector", "node", "nodeList", "select", "isReadOnly", "selection", "range", "E", "name", "ctx", "data", "evtArr", "len", "evts", "liveEvents", "__webpack_module_cache__", "moduleId", "getter", "definition", "key", "prop", "Enums", "enums_default", "init_enums", "__esmMin", "parser_default", "init_parser", "__esmMin", "val", "day", "month", "year", "i", "date", "userTimezoneOffset", "approximations", "Text", "text_default", "init_text", "__esmMin", "init_formatter", "val", "digit", "value", "format", "suffix", "formatter_default", "formatter", "Formatter", "formatter_default", "init_formatter", "__esmMin", "init_enums", "init_parser", "init_text", "format", "value", "val", "ages", "tmp", "connective", "locale", "currency", "text_default", "hour", "minutes", "hourText", "enums_default", "minutesText", "_a", "legacyPhone", "newPhone", "isInternational", "startsWithZero", "age", "date", "parser_default", "result", "word", "Dom", "dom_default", "init_dom", "__esmMin", "init_text", "status", "element", "animated", "force", "value", "options", "attribute", "event", "format", "suffix", "tag", "text_default", "formatter", "obj", "name", "data", "bubbles", "cancelable", "require_load_image", "__commonJSMin", "exports", "module", "$", "urlAPI", "createObjectURL", "blob", "revokeObjectURL", "url", "revokeHelper", "options", "readFile", "file", "onload", "onerror", "method", "reader", "readerMethod", "isInstanceOf", "type", "obj", "loadImage", "callback", "executor", "resolve", "reject", "img", "resolveWrapper", "data", "fetchBlobCallback", "err", "event", "error", "data", "Resizer", "resizer_default", "init_resizer", "__esmMin", "delay", "element", "el", "group", "elements", "fontSize", "fontSizes", "val", "lineHeight", "attributes", "size", "style", "maxHeight", "key", "Binder", "binder_default", "init_binder", "__esmMin", "init_resizer", "init_text", "init_util", "init_dom", "source", "target", "util_default", "e", "targetElement", "targetConditional", "conditionalElement", "sourceElement", "sources", "separators", "callback", "event", "result", "joinSources", "arr", "element", "value", "formatted", "join", "tmp", "item", "separator", "males", "females", "ev", "option", "resizer_default", "conditionalSource", "setPlaceholder", "conditional", "val", "form", "force", "src", "text_default", "dom_default", "to", "children", "prefix", "suffix", "pad", "invitations_exports", "__export", "invitations_default", "Invitations", "init_invitations", "__esmMin", "init_binder", "init_formatter", "binder_default", "formatter_default", "require_cropper", "__commonJSMin", "exports", "module", "global", "factory", "ownKeys", "e", "r", "t", "o", "_objectSpread2", "_defineProperty", "_toPrimitive", "i", "_toPropertyKey", "_typeof", "_classCallCheck", "instance", "Constructor", "_defineProperties", "target", "props", "descriptor", "_createClass", "protoProps", "staticProps", "obj", "key", "value", "_toConsumableArray", "arr", "_arrayWithoutHoles", "_iterableToArray", "_unsupportedIterableToArray", "_nonIterableSpread", "_arrayLikeToArray", "iter", "minLen", "n", "len", "arr2", "IS_BROWSER", "WINDOW", "IS_TOUCH_DEVICE", "HAS_POINTER_EVENT", "NAMESPACE", "ACTION_ALL", "ACTION_CROP", "ACTION_MOVE", "ACTION_ZOOM", "ACTION_EAST", "ACTION_WEST", "ACTION_SOUTH", "ACTION_NORTH", "ACTION_NORTH_EAST", "ACTION_NORTH_WEST", "ACTION_SOUTH_EAST", "ACTION_SOUTH_WEST", "CLASS_CROP", "CLASS_DISABLED", "CLASS_HIDDEN", "CLASS_HIDE", "CLASS_INVISIBLE", "CLASS_MODAL", "CLASS_MOVE", "DATA_ACTION", "DATA_PREVIEW", "DRAG_MODE_CROP", "DRAG_MODE_MOVE", "DRAG_MODE_NONE", "EVENT_CROP", "EVENT_CROP_END", "EVENT_CROP_MOVE", "EVENT_CROP_START", "EVENT_DBLCLICK", "EVENT_TOUCH_START", "EVENT_TOUCH_MOVE", "EVENT_TOUCH_END", "EVENT_POINTER_DOWN", "EVENT_POINTER_MOVE", "EVENT_POINTER_UP", "EVENT_READY", "EVENT_RESIZE", "EVENT_WHEEL", "EVENT_ZOOM", "MIME_TYPE_JPEG", "REGEXP_ACTIONS", "REGEXP_DATA_URL", "REGEXP_DATA_URL_JPEG", "REGEXP_TAG_NAME", "MIN_CONTAINER_WIDTH", "MIN_CONTAINER_HEIGHT", "DEFAULTS", "TEMPLATE", "isNaN", "isNumber", "isPositiveNumber", "isUndefined", "isObject", "hasOwnProperty", "isPlainObject", "_constructor", "prototype", "error", "isFunction", "slice", "toArray", "forEach", "data", "callback", "assign", "_len", "args", "_key", "arg", "REGEXP_DECIMALS", "normalizeDecimalNumber", "times", "REGEXP_SUFFIX", "setStyle", "element", "styles", "style", "property", "hasClass", "addClass", "elem", "className", "removeClass", "toggleClass", "added", "REGEXP_CAMEL_CASE", "toParamCase", "getData", "name", "setData", "removeData", "REGEXP_SPACES", "onceSupported", "supported", "once", "listener", "options", "removeListener", "type", "handler", "event", "listeners", "addListener", "_handler", "_element$listeners", "_len2", "_key2", "dispatchEvent", "getOffset", "box", "location", "REGEXP_ORIGINS", "isCrossOriginURL", "url", "parts", "addTimestamp", "timestamp", "getTransforms", "_ref", "rotate", "scaleX", "scaleY", "translateX", "translateY", "values", "transform", "getMaxZoomRatio", "pointers", "pointers2", "maxRatio", "pointer", "pointerId", "pointer2", "x1", "y1", "x2", "y2", "z1", "z2", "ratio", "getPointer", "_ref2", "endOnly", "pageX", "pageY", "end", "getPointersCenter", "count", "_ref3", "startX", "startY", "getAdjustedSizes", "_ref4", "aspectRatio", "height", "width", "isValidWidth", "isValidHeight", "adjustedWidth", "getRotatedSizes", "_ref5", "degree", "arc", "sinArc", "cosArc", "newWidth", "newHeight", "getSourceCanvas", "image", "_ref6", "_ref7", "_ref8", "imageAspectRatio", "imageNaturalWidth", "imageNaturalHeight", "_ref6$rotate", "_ref6$scaleX", "_ref6$scaleY", "naturalWidth", "naturalHeight", "_ref8$fillColor", "fillColor", "_ref8$imageSmoothingE", "imageSmoothingEnabled", "_ref8$imageSmoothingQ", "imageSmoothingQuality", "_ref8$maxWidth", "maxWidth", "_ref8$maxHeight", "maxHeight", "_ref8$minWidth", "minWidth", "_ref8$minHeight", "minHeight", "canvas", "context", "maxSizes", "minSizes", "destMaxSizes", "destMinSizes", "destWidth", "destHeight", "params", "param", "fromCharCode", "getStringFromCharCode", "dataView", "start", "length", "str", "REGEXP_DATA_URL_HEAD", "dataURLToArrayBuffer", "dataURL", "base64", "binary", "arrayBuffer", "uint8", "arrayBufferToDataURL", "mimeType", "chunks", "chunkSize", "resetAndGetOrientation", "orientation", "littleEndian", "app1Start", "ifdStart", "offset", "exifIDCode", "tiffOffset", "endianness", "firstIFDOffset", "_length", "_offset", "parseOrientation", "render", "container", "cropper", "containerData", "imageData", "viewMode", "rotated", "canvasWidth", "canvasHeight", "canvasData", "sizeLimited", "positionLimited", "cropBoxData", "cropped", "minCanvasWidth", "minCanvasHeight", "_getAdjustedSizes", "newCanvasLeft", "newCanvasTop", "changed", "transformed", "_getRotatedSizes", "autoCropArea", "limited", "minCropBoxWidth", "minCropBoxHeight", "maxCropBoxWidth", "maxCropBoxHeight", "preview", "crossOrigin", "alt", "previews", "el", "img", "cropBoxWidth", "cropBoxHeight", "left", "top", "originalWidth", "originalHeight", "events", "handlers", "ratioX", "ratioY", "_this", "delta", "buttons", "button", "action", "touch", "change", "right", "bottom", "minLeft", "minTop", "renderable", "range", "check", "side", "p", "methods", "hasSameSize", "offsetX", "offsetY", "_this$canvasData", "x", "y", "_originalEvent", "pivot", "center", "_scaleX", "_scaleY", "rounded", "widthChanged", "heightChanged", "source", "_this$getData", "initialX", "initialY", "initialWidth", "initialHeight", "_options$imageSmoothi", "sourceWidth", "sourceHeight", "srcX", "srcY", "srcWidth", "srcHeight", "dstX", "dstY", "dstWidth", "dstHeight", "scale", "mode", "dragBox", "face", "croppable", "movable", "AnotherCropper", "Cropper", "tagName", "xhr", "clone", "_parseOrientation", "crossOriginUrl", "_this2", "isIOSWebKit", "done", "sizingImage", "body", "template", "cropBox", "parentNode", "require_smoothscroll", "__commonJSMin", "exports", "module", "polyfill", "w", "d", "Element", "SCROLL_TIME", "original", "scrollElement", "now", "isMicrosoftBrowser", "userAgent", "userAgentPatterns", "ROUNDING_TOLERANCE", "x", "y", "ease", "k", "shouldBailOut", "firstArg", "hasScrollableSpace", "el", "axis", "canOverflow", "overflowValue", "isScrollable", "isScrollableY", "isScrollableX", "findScrollableParent", "step", "context", "time", "value", "currentX", "currentY", "elapsed", "smoothScroll", "scrollable", "startX", "startY", "method", "startTime", "left", "top", "scrollableParent", "parentRects", "clientRects", "require_eventlistener_polyfill", "__commonJSMin", "exports", "module", "f", "g", "define", "e", "t", "n", "r", "s", "o", "u", "a", "__require", "i", "l", "require", "passiveSupported", "onceSupported", "noop", "options", "enhance", "proto", "originalAddEventListener", "originalRemoveEventListener", "listeners", "name", "originalCallback", "optionsOrCapture", "callback", "passive", "once", "capture", "oldCallback", "event", "elementMap", "optionsOctal", "callbacks", "callbackIsCapture", "require_lozad_min", "__commonJSMin", "exports", "module", "g", "f", "t", "e", "r", "a", "o", "i", "n", "d", "u", "A", "m", "v", "s", "c", "l", "b", "import_rails_ujs", "turbo_es2017_esm_exports", "__export", "FetchEnctype", "FetchMethod", "FetchRequest", "FetchResponse", "FrameElement", "FrameLoadingStyle", "FrameRenderer", "PageRenderer", "PageSnapshot", "StreamActions", "StreamElement", "StreamSourceElement", "cache", "clearCache", "config", "connectStreamSource", "disconnectStreamSource", "fetchWithTurboHeaders", "fetchEnctypeFromString", "fetchMethodFromString", "isSafe", "navigator$1", "registerAdapter", "renderStreamMessage", "session", "setConfirmMethod", "setFormMode", "setProgressBarDelay", "start", "visit", "prototype", "submitter", "validateSubmitter", "form", "raise", "errorConstructor", "message", "name", "submittersByForm", "findSubmitterFromClickTarget", "target", "element", "candidate", "clickCaptured", "event", "prototypeOfSubmitEvent", "FrameLoadingStyle", "_FrameElement", "__publicField", "value", "frameLoadingStyleFromString", "_a", "_b", "FrameElement", "style", "drive", "activateScriptElement", "createdScriptElement", "cspNonce", "getCspNonce", "copyElementAttributes", "destinationElement", "sourceElement", "createDocumentFragment", "html", "template", "dispatch", "eventName", "cancelable", "detail", "cancelEvent", "nextRepaint", "nextEventLoopTick", "nextAnimationFrame", "resolve", "nextMicrotask", "parseHTMLDocument", "unindent", "strings", "values", "lines", "interpolate", "match", "indent", "line", "result", "string", "i", "uuid", "_", "getAttribute", "attributeName", "elements", "hasAttribute", "markAsBusy", "clearBusyState", "waitForLoad", "timeoutInMilliseconds", "onComplete", "getHistoryMethodForAction", "action", "isAction", "getVisitAction", "getMetaElement", "getMetaContent", "nonce", "content", "setMetaContent", "findClosestRecursively", "selector", "elementIsFocusable", "queryAutofocusableElement", "elementOrDocumentFragment", "around", "callback", "reader", "before", "after", "doesNotTargetIFrame", "findLinkFromClickTarget", "getLocationForLink", "link", "expandURL", "debounce", "fn", "delay", "timeoutId", "args", "_submitter", "Config", "config", "__privateAdd", "__privateGet", "__privateSet", "forms", "locatable", "getAnchor", "url", "anchorMatch", "getAction$1", "getExtension", "getLastPathComponent", "isPrefixedBy", "baseURL", "prefix", "getPrefix", "locationIsVisitable", "location", "rootLocation", "getRequestURL", "anchor", "toCacheKey", "urlsAreEqual", "left", "right", "getPathComponents", "addTrailingSlash", "FetchResponse", "response", "LimitedSet", "maxSize", "oldestValue", "recentRequests", "nativeFetch", "fetchWithTurboHeaders", "options", "modifiedHeaders", "requestUID", "__spreadProps", "__spreadValues", "fetchMethodFromString", "method", "FetchMethod", "fetchEnctypeFromString", "encoding", "FetchEnctype", "_resolveRequestPromise", "_FetchRequest_instances", "allowRequestToBeIntercepted_fn", "willDelegateErrorHandling_fn", "FetchRequest", "delegate", "requestBody", "enctype", "_value", "body", "buildResourceAndBody", "fetchBody", "fetchMethod", "fetchOptions", "__privateMethod", "error", "fetchResponse", "isSafe", "mimeType", "requestInterception", "resource", "searchParams", "entriesExcludingFiles", "mergeIntoURLSearchParams", "entries", "AppearanceObserver", "lastEntry", "StreamMessage", "fragment", "importStreamElements", "streamElement", "inertScriptElement", "PREFETCH_DELAY", "_prefetchTimeout", "_prefetched", "PrefetchCache", "request", "ttl", "cacheTtl", "prefetchCache", "FormSubmissionState", "FormSubmission", "_FormSubmission", "formElement", "mustRedirect", "getMethod", "getAction", "getFormAction", "buildFormData", "getEnctype", "initialized", "requesting", "confirmationMessage", "stopping", "stopped", "token", "getCookieValue", "_request", "responseSucceededWithoutRedirect", "input", "formData", "cookieName", "cookie", "formElementAction", "formAction", "Snapshot", "queryPermanentElementsAll", "id", "getPermanentElementById", "snapshot", "permanentElementMap", "currentPermanentElement", "newPermanentElement", "node", "FormSubmitObserver", "eventTarget", "submissionDoesNotDismissDialog", "submissionDoesNotTargetIFrame", "_resolveRenderPromise", "_resolveInterceptionPromise", "View", "x", "y", "renderer", "isPreview", "shouldRender", "willRender", "shouldInvalidate", "renderInterception", "reason", "direction", "FrameView", "LinkInterceptor", "_event", "LinkClickObserver", "FormLinkClickObserver", "originalEvent", "type", "turboFrame", "turboAction", "turboConfirm", "Bardo", "bardo", "permanentElement", "placeholder", "createPlaceholderForPermanentElement", "clone", "_activeElement", "Renderer", "currentSnapshot", "newSnapshot", "reject", "currentElement", "newElement", "FrameRenderer", "destinationRange", "frameElement", "sourceRange", "renderElement", "block", "readScrollLogicalPosition", "behavior", "readScrollBehavior", "activatedScriptElement", "defaultValue", "Idiomorph", "noOp", "defaults", "elt", "morph", "oldNode", "newContent", "normalizeElement", "newNode", "normalizeParent", "ctx", "createMorphContext", "morphedNodes", "saveAndRestoreFocus", "withHeadBlocking", "morphChildren", "morphOuterHTML", "oldParent", "childNodes", "index", "rightMargin", "activeElement", "activeElementId", "selectionStart", "selectionEnd", "results", "newParent", "insertionPoint", "endPoint", "newChild", "bestMatch", "findBestMatch", "removeNodesBetween", "morphNode", "movedChild", "moveBeforeById", "insertedNode", "createNode", "tempNode", "removeNode", "newEmptyChild", "newClonedChild", "startPoint", "softMatch", "nextSibling", "siblingSoftMatchCount", "cursor", "isSoftMatch", "isIdSetMatch", "oldSet", "newSet", "oldElt", "newElt", "moveBefore", "startInclusive", "endExclusive", "parentNode", "removeElementFromAncestorsIdMaps", "idSet", "e", "handleHeadElement", "morphAttributes", "ignoreValueOfActiveElement", "oldAttributes", "newAttributes", "newAttribute", "ignoreAttribute", "oldAttribute", "syncInputValue", "oldElement", "newValue", "oldValue", "syncBooleanAttribute", "newLiveValue", "oldLiveValue", "ignoreUpdate", "attr", "updateType", "possibleActiveElement", "oldHead", "newHead", "promises", "newCtx", "added", "removed", "preserved", "nodesToAppend", "srcToNewHeadNodes", "newHeadChild", "currentHeadElt", "inNewContent", "isReAppended", "isPreserved", "promise", "_resolve", "removedElement", "persistentIds", "idMap", "createIdMaps", "mergedConfig", "mergeDefaults", "morphStyle", "createPantry", "finalConfig", "pantry", "findIdElements", "root", "populateIdMapWithTree", "current", "oldContent", "oldIdElements", "newIdElements", "createPersistentIds", "newRoot", "duplicateIds", "oldIdTagNameMap", "tagName", "generatedByIdiomorph", "parseContent", "createDuckTypedParent", "dummyParent", "s", "n", "r", "parser", "contentWithSvgsRemoved", "htmlElement", "morphElements", "callbacks", "__objRest", "DefaultIdiomorphCallbacks", "_beforeNodeMorphed", "beforeNodeMorphed", "mutationType", "MorphingFrameRenderer", "_ProgressBar", "ProgressBar", "HeadSnapshot", "elementIsNoscript", "elementWithoutNonce", "outerHTML", "details", "elementType", "elementIsTracked", "matchedType", "tracked", "elementIsMetaElementWithName", "elementIsScript", "elementIsStylesheet", "PageSnapshot", "_PageSnapshot", "documentElement", "head", "headSnapshot", "clonedElement", "selectElements", "clonedSelectElements", "source", "option", "clonedPasswordInput", "_viewTransitionStarted", "_lastOperation", "ViewTransitioner", "useViewTransition", "render", "defaultOptions", "TimingMetric", "VisitState", "SystemStatusCode", "Direction", "Visit", "restorationIdentifier", "historyChanged", "referrer", "snapshotHTML", "visitCachedSnapshot", "updateHistory", "shouldCacheSnapshot", "acceptsStreamResponse", "actionForHistory", "statusCode", "isSuccessful", "responseHTML", "_response", "redirected", "_error", "scrollPosition", "metric", "BrowserAdapter", "session", "visit", "_visit", "_formSubmission", "CacheObserver", "_FrameRedirector_instances", "shouldSubmit_fn", "shouldRedirect_fn", "findFrameElement_fn", "FrameRedirector", "_location", "frame", "meta", "History", "turbo", "restorationIndex", "state", "additionalData", "restorationData", "_prefetchedLink", "_enable", "_tryToPrefetchRequest", "_cancelRequestIfObsolete", "_cancelPrefetchRequest", "_tryToUsePrefetchedRequest", "_LinkPrefetchObserver_instances", "cacheTtl_get", "isPrefetchable_fn", "LinkPrefetchObserver", "fetchRequest", "cached", "turboFrameTarget", "unfetchableLink", "linkToTheSamePage", "linkOptsOut", "nonSafeLink", "eventPrevented", "turboPrefetchParent", "turboMethod", "isUJS", "_Navigator_instances", "getActionForFormSubmission_fn", "getDefaultAction_fn", "Navigator", "formSubmission", "visitOptions", "currentAnchor", "isRestorationToTop", "oldURL", "newURL", "PageStage", "PageObserver", "readyState", "ScrollObserver", "position", "StreamMessageRenderer", "getPermanentElementMapForFragment", "withAutofocusFromFragment", "withPreservedFocus", "permanentElementsInDocument", "permanentElementInDocument", "elementInStream", "generatedID", "turboStreams", "elementWithAutofocus", "firstAutofocusableElementInStreams", "willAutofocusId", "elementToAutofocus", "activeElementBeforeRender", "activeElementAfterRender", "restoreFocusTo", "elementToFocus", "nodeListOfStreamElements", "_started", "StreamObserver", "fetchResponseFromEvent", "fetchResponseIsStream", "ErrorRenderer", "replaceableElement", "_PageRenderer_instances", "setLanguage_fn", "PageRenderer", "mergedHeadElements", "newStylesheetElements", "loadingElements", "newHeadElements", "elementList", "lang", "MorphingPageRenderer", "canRefreshFrame", "SnapshotCache", "size", "key", "PageView", "rendererClass", "cachedSnapshot", "_preloadAll", "Preloader", "snapshotCache", "_Cache_instances", "setCacheControl_fn", "Cache", "_pageRefreshDebouncePeriod", "Session", "adapter", "requestId", "isRecentRequest", "isCurrentUrl", "isUnsafe", "isStream", "frameTarget", "extendURLWithDeprecatedProperties", "defaultPrevented", "_snapshot", "_isPreview", "renderMethod", "ev", "newBody", "timing", "submitterIsNavigatable", "container", "withinFrame", "deprecatedLocationPropertyDescriptors", "cache", "navigator$1", "start", "registerAdapter", "connectStreamSource", "disconnectStreamSource", "renderStreamMessage", "clearCache", "setProgressBarDelay", "setConfirmMethod", "confirmMethod", "setFormMode", "mode", "Turbo", "TurboFrameMissingError", "_currentFetchRequest", "_resolveVisitPromise", "_connected", "_hasBeenLoaded", "_ignoredAttributes", "_shouldMorphFrame", "_FrameController_instances", "loadSourceURL_fn", "loadFrameResponse_fn", "visit_fn", "navigateFrame_fn", "handleUnvisitableFrameResponse_fn", "willHandleFrameMissingFromResponse_fn", "handleFrameMissingFromResponse_fn", "throwFrameMissingError_fn", "visitResponse_fn", "formActionIsVisitable_fn", "shouldInterceptNavigation_fn", "isIgnoringChangesTo_fn", "ignoringChangesToAttribute_fn", "withCurrentNavigationElement_fn", "FrameController", "_fetchResponse", "refresh", "src", "document", "newFrame", "_renderMethod", "_newElement", "pageSnapshot", "activateElement", "sourceURL", "newFrameElement", "wrapped", "getFrameElementById", "currentURL", "StreamActions", "targetElement", "_StreamElement_instances", "raise_fn", "_StreamElement", "c", "existingChildren", "newChildrenIds", "actionFunction", "StreamElement", "StreamSourceElement", "consumer", "getConsumer", "setConsumer", "createConsumer", "newConsumer", "subscribeTo", "channel", "mixin", "subscriptions", "walk", "obj", "acc", "key", "camel", "m", "x", "TurboCableStreamSourceElement", "connectStreamSource", "subscribeTo", "disconnectStreamSource", "data", "event", "channel", "signed_stream_name", "__spreadValues", "walk", "__publicField", "encodeMethodIntoRequestBody", "event", "form", "fetchOptions", "submitter", "body", "isBodyInit", "method", "determineFetchMethod", "formMethod", "determineFormMethod", "overrideMethod", "turbo_es2017_esm_exports", "encodeMethodIntoRequestBody", "EventListener", "eventTarget", "eventName", "eventOptions", "binding", "event", "extendedEvent", "extendEvent", "left", "right", "leftIndex", "rightIndex", "stopImmediatePropagation", "Dispatcher", "application", "eventListener", "listeners", "map", "clearEventListeners", "error", "message", "detail", "eventListenerMap", "cacheKey", "parts", "key", "defaultActionDescriptorFilters", "value", "element", "descriptorPattern", "parseActionDescriptorString", "descriptorString", "matches", "keyFilter", "parseEventTarget", "parseEventOptions", "eventTargetName", "options", "token", "stringifyEventTarget", "camelize", "_", "char", "namespaceCamelize", "capitalize", "dasherize", "tokenize", "isSomething", "object", "hasProperty", "property", "allModifiers", "Action", "index", "descriptor", "schema", "getDefaultEventNameForElement", "eventFilter", "filters", "standardFilter", "params", "pattern", "name", "match", "typecast", "meta", "ctrl", "alt", "shift", "modifier", "defaultEventNames", "e", "tagName", "o_O", "Binding", "context", "action", "actionEvent", "method", "actionDescriptorFilters", "controller", "passes", "filter", "target", "currentTarget", "identifier", "ElementObserver", "delegate", "mutations", "callback", "mutation", "attributeName", "nodes", "node", "tree", "processor", "AttributeObserver", "add", "fetch", "del", "prune", "values", "Multimap", "set", "size", "_key", "_values", "SelectorObserver", "element", "selector", "delegate", "details", "ElementObserver", "Multimap", "callback", "matches", "tree", "match", "selectors", "_attributeName", "matchedBefore", "StringMapObserver", "mutations", "attributeName", "mutation", "oldValue", "key", "value", "attribute", "TokenListObserver", "AttributeObserver", "unmatchedTokens", "matchedTokens", "tokens", "token", "previousTokens", "currentTokens", "firstDifferingIndex", "zip", "previousToken", "currentToken", "tokensAreEqual", "tokenString", "parseTokenString", "content", "index", "left", "right", "length", "_", "ValueListObserver", "parseResult", "valuesByToken", "error", "BindingObserver", "context", "action", "binding", "Binding", "Action", "ValueObserver", "receiver", "descriptor", "name", "defaultValue", "writer", "rawValue", "rawOldValue", "changedMethodName", "changedMethod", "valueDescriptorMap", "descriptors", "hasMethodName", "capitalize", "TargetObserver", "_a", "readInheritableStaticArrayValues", "constructor", "propertyName", "ancestors", "getAncestorsForConstructor", "values", "getOwnStaticArrayValues", "readInheritableStaticObjectPairs", "pairs", "getOwnStaticObjectPairs", "definition", "OutletObserver", "outletName", "observer", "_selector", "outlet", "hasOutlet", "hasOutletController", "_element", "selectorObserver", "attributeObserver", "dependencies", "module", "identifiers", "Context", "scope", "functionName", "detail", "identifier", "controller", "message", "namespaceCamelize", "methodName", "args", "bless", "shadow", "getBlessedProperties", "properties", "shadowConstructor", "extend", "shadowProperties", "getShadowProperties", "blessedProperties", "blessing", "prototype", "getOwnKeys", "getShadowedDescriptor", "shadowingDescriptor", "object", "extendWithReflect", "extended", "testReflectExtension", "b", "blessDefinition", "Module", "application", "ClassMap", "tokenize", "DataMap", "dasherize", "Guide", "logger", "warnedKeys", "attributeValueContainsToken", "TargetSet", "targetName", "targetNames", "target", "targets", "targetDescriptor", "revisedAttributeName", "OutletSet", "controllerElement", "outletNames", "outlets", "controllerAttribute", "Scope", "_Scope", "schema", "ScopeObserver", "scopesByIdentifier", "referenceCount", "Router", "contexts", "afterLoad", "defaultSchema", "objectFromEntries", "c", "n", "array", "memo", "k", "v", "Application", "Dispatcher", "defaultActionDescriptorFilters", "domReady", "controllerConstructor", "filter", "head", "rest", "resolve", "ClassPropertiesBlessing", "classDefinition", "propertiesForClassDefinition", "classes", "OutletPropertiesBlessing", "outletDefinition", "propertiesForOutletDefinition", "getOutletController", "getControllerAndEnsureConnectedScope", "outletController", "camelizedName", "outletElement", "TargetPropertiesBlessing", "targetDefinition", "propertiesForTargetDefinition", "ValuePropertiesBlessing", "valueDefinitionPairs", "propertyDescriptorMap", "result", "valueDefinitionPair", "valueDescriptor", "parseValueDefinitionPair", "propertiesForValueDefinitionPair", "read", "write", "typeDefinition", "valueDescriptorForTokenAndTypeDefinition", "parseValueTypeConstant", "constant", "parseValueTypeDefault", "parseValueTypeObject", "payload", "typeObject", "hasType", "isSomething", "hasDefault", "fullObject", "onlyType", "onlyDefault", "typeFromObject", "typeFromDefaultValue", "propertyPath", "parseValueTypeDefinition", "typeFromConstant", "type", "defaultValueForDefinition", "defaultValuesByType", "hasProperty", "constantFromType", "camelize", "readers", "writers", "writeString", "writeJSON", "Controller", "_identifier", "_application", "eventName", "prefix", "bubbles", "cancelable", "event", "application", "Application", "import_activestorage", "direct_upload_default", "input", "resolve", "reject", "file", "url", "element", "submit", "caller", "error", "blob", "hiddenField", "request", "event", "import_activestorage", "direct_upload_multiple_default", "input", "promises", "file", "resolve", "reject", "url", "submit", "caller", "error", "blob", "hiddenField", "request", "event", "totalLoaded", "sum", "x", "ajax_controller_default", "Controller", "event", "link", "url", "filename", "verb", "target", "activationId", "element", "redirect", "action", "form", "input", "direct_upload_multiple_default", "direct_upload_default", "headers", "payload", "path", "responseType", "xhr", "header", "status", "response", "error", "values", "processed", "config", "name", "value", "current", "inputs", "i", "uncheckedPair", "vars", "kvp", "pair", "elt", "params", "newValues", "param", "key", "v", "splitPath", "anchor", "token", "html", "swap", "extract", "selector", "destination", "source", "tmp", "body", "force", "submit", "attribute", "g", "select", "content", "func", "wait", "immediate", "timeout", "context", "args", "later", "callNow", "obj", "bubbles", "delay", "id", "animation_controller_default", "Controller", "__publicField", "application_controller_default", "Controller", "async_render_controller_default", "Controller", "xhr", "width", "height", "params", "breadcrumbs_controller_default", "Controller", "history", "step", "index", "attributes", "isPastState", "crumb", "wrapper", "content", "__publicField", "init_util", "checklist_controller_default", "Controller", "e", "currentItem", "index", "item", "nextItem", "util_default", "__publicField", "import_clipboard", "clipboard_controller_default", "Controller", "ClipboardJS", "e", "button", "originalText", "__publicField", "click_tracker_controller_default", "Controller", "element", "event", "url", "response", "error", "target", "selector", "__publicField", "init_formatter", "init_dom", "contact_picker_controller_default", "Controller", "contacts", "dom_default", "ex", "phoneNumbers", "name", "list", "contact", "clone", "i", "chosenNumber", "number", "receiverNumber", "formatter_default", "receiverName", "__publicField", "countdown_controller_default", "Controller", "deltaTime", "redirectUrl", "minutes", "hours", "days", "year", "month", "day", "value", "__publicField", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread2", "target", "i", "source", "key", "_defineProperty", "_typeof", "obj", "value", "_extends", "_objectWithoutPropertiesLoose", "excluded", "sourceKeys", "_objectWithoutProperties", "sourceSymbolKeys", "version", "userAgent", "pattern", "IE11OrLess", "Edge", "FireFox", "Safari", "IOS", "ChromeForAndroid", "captureMode", "on", "el", "event", "fn", "off", "matches", "selector", "_", "getParentOrHost", "closest", "ctx", "includeCTX", "R_SPACE", "toggleClass", "name", "state", "className", "css", "prop", "val", "style", "matrix", "selfOnly", "appliedTransforms", "transform", "matrixFn", "find", "tagName", "iterator", "list", "i", "n", "getWindowScrollingElement", "scrollingElement", "getRect", "relativeToContainingBlock", "relativeToNonStaticParent", "undoScale", "container", "elRect", "top", "left", "bottom", "right", "height", "width", "containerRect", "elMatrix", "scaleX", "scaleY", "isScrolledPast", "elSide", "parentSide", "parent", "getParentAutoScrollElement", "elSideVal", "parentSideVal", "visible", "getChild", "childNum", "options", "includeDragEl", "currentChild", "children", "Sortable", "lastChild", "last", "index", "getRelativeScrollOffset", "offsetLeft", "offsetTop", "winScroller", "indexOfObject", "arr", "obj", "key", "includeSelf", "elem", "gotSelf", "elemCSS", "extend", "dst", "src", "isRectEqual", "rect1", "rect2", "_throttleTimeout", "throttle", "callback", "ms", "args", "_this", "cancelThrottle", "scrollBy", "x", "y", "clone", "Polymer", "$", "getChildContainingRectFromElement", "container", "options", "ghostEl", "rect", "child", "_rect$left", "_rect$top", "_rect$right", "_rect$bottom", "closest", "childRect", "getRect", "expando", "AnimationStateManager", "animationStates", "animationCallbackId", "children", "css", "Sortable", "fromRect", "_objectSpread2", "childMatrix", "matrix", "state", "target", "indexOfObject", "callback", "_this", "animating", "animationTime", "time", "toRect", "prevFromRect", "prevToRect", "animatingRect", "targetMatrix", "isRectEqual", "calculateRealTime", "currentRect", "duration", "elMatrix", "scaleX", "scaleY", "translateX", "translateY", "repaint", "plugins", "defaults", "PluginManager", "plugin", "option", "p", "eventName", "sortable", "evt", "eventNameGlobal", "el", "pluginName", "initialized", "_extends", "modified", "name", "eventProperties", "value", "modifiedValue", "dispatchEvent", "_ref", "rootEl", "targetEl", "cloneEl", "toEl", "fromEl", "oldIndex", "newIndex", "oldDraggableIndex", "newDraggableIndex", "originalEvent", "putSortable", "extraEventProperties", "onName", "IE11OrLess", "Edge", "allEventProperties", "_excluded", "pluginEvent", "data", "_objectWithoutProperties", "dragEl", "parentEl", "nextEl", "lastDownEl", "cloneHidden", "moved", "_hideGhostForTarget", "_unhideGhostForTarget", "_dispatchEvent", "info", "activeGroup", "awaitingDragStarted", "ignoreNextClick", "sortables", "tapEvt", "touchEvt", "lastDx", "lastDy", "tapDistanceLeft", "tapDistanceTop", "lastTarget", "lastDirection", "pastFirstInvertThresh", "isCircumstantialInvert", "targetMoveDistance", "ghostRelativeParent", "ghostRelativeParentInitialScroll", "_silent", "savedInputChecked", "documentExists", "PositionGhostAbsolutely", "IOS", "CSSFloatProperty", "supportDraggable", "ChromeForAndroid", "supportCssPointerEvents", "_detectDirection", "elCSS", "elWidth", "child1", "getChild", "child2", "firstChildCSS", "secondChildCSS", "firstChildWidth", "secondChildWidth", "touchingSideChild2", "_dragElInRowColumn", "dragRect", "targetRect", "vertical", "dragElS1Opp", "dragElS2Opp", "dragElOppLength", "targetS1Opp", "targetS2Opp", "targetOppLength", "_detectNearestEmptySortable", "x", "y", "ret", "threshold", "lastChild", "insideHorizontally", "insideVertically", "_prepareGroup", "toFn", "pull", "to", "from", "sameGroup", "otherGroup", "group", "originalGroup", "_typeof", "nearestEmptyInsertDetectEvent", "nearest", "event", "i", "_checkOutsideTargetEl", "dataTransfer", "Safari", "fn", "on", "preventOnFilter", "type", "touch", "originalTarget", "filter", "_saveInputCheckedState", "index", "criteria", "ownerDocument", "dragStartFn", "FireFox", "toggleClass", "find", "_disableDraggable", "off", "_nextTick", "err", "fallback", "parent", "inserted", "getParentOrHost", "fallbackTolerance", "fallbackOffset", "ghostMatrix", "relativeScrollOffset", "getRelativeScrollOffset", "dx", "dy", "cssMatrix", "getWindowScrollingElement", "clone", "revert", "activeSortable", "isOwner", "canSort", "fromSortable", "completedFired", "dragOverEvent", "extra", "completed", "after", "_onMove", "changed", "capture", "insertion", "elLastChild", "_ghostIsLast", "_ghostIsFirst", "firstChild", "direction", "targetBeforeFirstSwap", "differentLevel", "differentRowCol", "side1", "scrolledPastTop", "isScrolledPast", "scrollBefore", "_getSwapDirection", "sibling", "dragIndex", "nextSibling", "moveVector", "_unsilent", "scrollBy", "_cancelNextTick", "_globalDragOver", "order", "n", "_generateId", "useAnimation", "items", "id", "store", "selector", "willInsertAfter", "onMoveFn", "retVal", "firstElRect", "childContainingRect", "spacer", "lastElRect", "swapThreshold", "invertedSwapThreshold", "invertSwap", "isLastTarget", "mouseOnAxis", "targetLength", "targetS1", "targetS2", "invert", "_getInsertDirection", "str", "sum", "root", "inputs", "idx", "extend", "throttle", "element", "_len", "_key", "version", "autoScrolls", "scrollEl", "scrollRootEl", "scrolling", "lastAutoScrollX", "lastAutoScrollY", "touchEvt$1", "pointerElemChangedInterval", "AutoScrollPlugin", "AutoScroll", "_ref2", "clearPointerElemChangedInterval", "clearAutoScrolls", "cancelThrottle", "elem", "autoScroll", "ogElemScroller", "getParentAutoScrollElement", "newElem", "isFallback", "sens", "speed", "winScroller", "scrollThisInstance", "scrollCustomFn", "layersOut", "currentParent", "top", "bottom", "left", "right", "width", "height", "canScrollX", "canScrollY", "scrollWidth", "scrollHeight", "scrollPosX", "scrollPosY", "vx", "vy", "scrollOffsetY", "scrollOffsetX", "drop", "dispatchSortableEvent", "hideGhostForTarget", "unhideGhostForTarget", "toSortable", "Revert", "_ref3", "Remove", "_ref4", "parentSortable", "Sortable", "AutoScrollPlugin", "Remove", "Revert", "sortable_esm_default", "drag_controller_default", "Controller", "sortable_esm_default", "form", "__publicField", "expandable_controller_default", "Controller", "mutations", "mutation", "element", "closeable", "obj", "name", "event", "__publicField", "filter_select_controller_default", "Controller", "__publicField", "target", "event", "element", "checkbox", "init_formatter", "init_text", "init_parser", "init_formatter", "init_text", "Validator", "format", "value", "parsed", "parser_default", "formatter_default", "cpf", "digits", "num", "mod11", "weight", "mod", "total", "i", "cnpj", "weights", "email", "tmp", "val", "text_default", "validator_default", "import_load_image", "form_controller_default", "Controller", "e", "event", "input", "target", "element", "form", "valid", "previewTarget", "filenameTarget", "contentTypeTarget", "file", "loadImage", "img", "label", "index", "container", "fileContainer", "icon", "child", "button", "parent", "display", "removable", "decrement", "increment", "newValue", "minimum", "maximum", "klass", "toRemove", "format", "result", "formatter_default", "length", "maxlength", "value", "alert", "counter", "required", "validator", "minLength", "text_default", "validator_default", "action", "div", "formDiv", "image_zoom_controller_default", "Controller", "event", "x", "y", "position", "bounds", "percentX", "percentY", "width", "height", "halfWidth", "halfHeight", "highlightX", "highlightY", "finalX", "finalY", "axis", "clientPosition", "percent", "halfHighlightWidth", "halfHighlightHeight", "leftLimit", "topLimit", "rightLimit", "bottomLimit", "limitedClientX", "limitedClientY", "attrName", "viewportPosition", "halfViewportSize", "img", "naturalWidth", "naturalHeight", "_a", "__publicField", "intersector_controller_default", "Controller", "entries", "entry", "__publicField", "invitations_controller_default", "Controller", "Invitation", "init_text", "init_dom", "pagarme_controller_default", "Controller", "e", "dom_default", "form", "client", "cardHash", "card", "valid", "key", "input", "length", "text_default", "element", "force", "name", "number", "month", "year", "cvv", "value", "__publicField", "init_text", "init_dom", "tuna_controller_default", "Controller", "e", "form", "dom_default", "response", "token", "error", "hash", "message", "valid", "input", "length", "text_default", "element", "force", "__publicField", "init_dom", "paypal_controller_default", "Controller", "checkPresence", "data", "actions", "details", "dom_default", "__publicField", "import_load_image", "import_cropperjs", "photo_editor_controller_default", "Controller", "e", "file", "loadImage", "img", "_a", "Cropper", "element", "force", "klass", "status", "__publicField", "init_resizer", "resizer_controller_default", "Controller", "resizer_default", "directionMap", "scroller_controller_default", "Controller", "method", "targetOffset", "event", "scrollValue", "__publicField", "init_resizer", "editor_controller_default", "Controller", "fragment", "event", "clone", "resizer_default", "text", "editable", "child", "customParamData", "name", "value", "input", "__publicField", "init_text", "validator_controller_default", "Controller", "event", "sender", "message", "errorFieldMessage", "text_default", "element", "__publicField", "Draggable", "element", "callback", "rectangle", "x", "y", "dx", "dy", "pageX", "pageY", "space", "position", "start", "length", "rect", "init_util", "fragment_controller_default", "Controller", "color", "Draggable", "editable", "event", "selection", "range", "br", "align", "valign", "constrainContent", "value", "__publicField", "init_util", "share_controller_default", "Controller", "e", "util_default", "res", "blob", "shareData", "resolve", "reject", "error", "params", "__publicField", "slider_controller_default", "Controller", "x", "dot", "index", "element", "force", "item", "value", "__publicField", "slideshow_controller_default", "Controller", "e", "el", "i", "thumbnail", "index", "firstDot", "newDot", "page", "entries", "entry", "slide", "dots", "dot", "chip", "active_index", "value", "__publicField", "suggestions_controller_default", "Controller", "time_controller_default", "Controller", "e", "target", "value", "__publicField", "init_parser", "time_until_controller_default", "Controller", "now", "day", "month", "year", "brasiliaTime", "parser_default", "scheduledOn", "differenceInDays", "__publicField", "init_util", "util_controller_default", "Controller", "event", "target", "attribute", "element", "value", "klass", "required", "timeout", "tmp", "timeoutMs", "selectedValue", "targetValue", "util_default", "obj", "name", "withdrawal_controller_default", "Controller", "e", "withdrawalAmount", "availableAmount", "__publicField", "gallery_controller_default", "Controller", "event", "index", "value", "__publicField", "image_transition_controller_default", "Controller", "__publicField", "whatsapp_controller_default", "Controller", "__publicField", "video_controller_default", "Controller", "event", "video", "checkbox_controller_default", "Controller", "target", "event", "checkbox", "shouldAddClass", "value", "__publicField", "application", "ajax_controller_default", "animation_controller_default", "application_controller_default", "async_render_controller_default", "breadcrumbs_controller_default", "checklist_controller_default", "clipboard_controller_default", "click_tracker_controller_default", "contact_picker_controller_default", "countdown_controller_default", "drag_controller_default", "expandable_controller_default", "filter_select_controller_default", "form_controller_default", "image_zoom_controller_default", "intersector_controller_default", "invitations_controller_default", "pagarme_controller_default", "tuna_controller_default", "paypal_controller_default", "photo_editor_controller_default", "resizer_controller_default", "scroller_controller_default", "editor_controller_default", "validator_controller_default", "fragment_controller_default", "share_controller_default", "slider_controller_default", "slideshow_controller_default", "suggestions_controller_default", "time_controller_default", "time_until_controller_default", "util_controller_default", "withdrawal_controller_default", "gallery_controller_default", "image_transition_controller_default", "whatsapp_controller_default", "video_controller_default", "checkbox_controller_default", "import_smoothscroll_polyfill", "polyfills_default", "smoothscroll", "callback", "thisArg", "i", "minimal_analytics_default", "context", "trackingId", "options", "history", "doc", "nav", "storage", "encode", "pushState", "typeException", "generateId", "getId", "serialize", "obj", "str", "track", "type", "eventCategory", "eventAction", "eventLabel", "eventValue", "exceptionDescription", "exceptionFatal", "url", "data", "xhr", "trackEvent", "category", "action", "label", "value", "trackException", "description", "fatal", "state", "a", "trackerId", "t", "b", "s", "o", "v", "h", "d", "c", "l", "e", "u", "m", "n", "f", "g", "i", "x", "analytics", "import_lozad", "ImageLazyLoading", "Lozad", "image_lazy_loading_default", "Rails", "polyfills_default", "minimal_analytics_default", "image_lazy_loading_default"] }