{"version":3,"file":"active_admin-c0283615.js","sources":["../../../app/frontend/src/js/polyfills/submit_event_submitter.js","../../../app/frontend/src/js/helpers/dom_helpers.js","../../../app/frontend/src/js/helpers/timing_helpers.js","../../../app/frontend/src/js/rails-min-ujs.js"],"sourcesContent":["/*\n * Polyfill `SubmitEvent.submitter` in browsers with missing or lackluster support.\n * ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅\n * References:\n * - https://developer.mozilla.org/en-US/docs/Web/API/SubmitEvent/submitter\n * - https://caniuse.com/mdn-api_submitevent_submitter\n * - https://bugs.webkit.org/show_bug.cgi?id=229660\n */\n\n(window.requestIdleCallback || setTimeout)(() => {\n if (isSupported()) return;\n\n addEventListener(\"click\", updateSubmitter, { capture: true });\n\n Object.defineProperty((window.SubmitEvent || Event).prototype, \"submitter\", {\n get() {\n return getSubmitter(this);\n },\n });\n});\n\nconst submittersByForm = new WeakMap();\n\nfunction updateSubmitter(event) {\n const input = event.target.closest?.(\"input,button\");\n if (input?.form) {\n submittersByForm.delete(input.form);\n if (input.type == \"submit\" && !event.defaultPrevented) {\n submittersByForm.set(input.form, input);\n }\n }\n}\n\nfunction getSubmitter(event) {\n if (event.type == \"submit\" && event.target instanceof HTMLFormElement) {\n return submittersByForm.get(event.target);\n }\n}\n\nfunction isSupported() {\n const cacheKey = \"support:SubmitEvent.submitter\";\n const cachedResult = sessionStorage.getItem(cacheKey);\n if (cachedResult) return cachedResult == \"true\";\n\n let result = false;\n\n const form = Object.assign(document.createElement(\"form\"), {\n innerHTML: ``,\n hidden: true,\n onsubmit(event) {\n event.preventDefault();\n event.stopPropagation();\n result = Boolean(event.submitter);\n },\n });\n\n document.body.append(form);\n for (const submitter of form.elements) {\n submitter.onclick = (event) => event.stopPropagation();\n submitter.click();\n if (!result) break;\n }\n form.remove();\n\n sessionStorage.setItem(cacheKey, result);\n return result;\n}\n","export function getMetaContent(name) {\n return document.querySelector(`meta[name=\"${name}\"]`)?.content\n}\n\nexport function csrfParam() {\n return getMetaContent(\"csrf-param\") || \"\"\n}\n\nexport function csrfToken() {\n return getMetaContent(\"csrf-token\") || \"\"\n}\n\nexport const escapeHTML = (() => {\n const element = document.createElement(\"div\")\n return (string = \"\") => {\n element.textContent = string\n return element.innerHTML\n }\n})()\n\nexport const stripHTML = (() => {\n const element = document.createElement(\"div\")\n return (html = \"\") => {\n element.innerHTML = html\n return element.textContent\n }\n})()\n\nexport function domReady(callback = noop) {\n return new Promise((resolve) => {\n const ready = () => {\n callback()\n resolve()\n }\n if (document.readyState == \"loading\") {\n addEventListener(\"DOMContentLoaded\", ready, { once: true })\n } else {\n ready()\n }\n })\n}\n\nexport function nextIntersect(element, options = {}) {\n return new Promise((resolve) => {\n new IntersectionObserver(([entry], observer) => {\n if (!entry.isIntersecting) return\n observer.unobserve(element)\n observer.disconnect()\n resolve()\n }, options).observe(element)\n })\n}\n\nexport function createElement(tagName, properties = {}) {\n return Object.assign(document.createElement(tagName), properties)\n}\n\nexport function toggleMultipleClasses(element, options, ...classes) {\n return classes.map((className) => element.classList.toggle(className, options))\n}\n\nexport function dispatchInputEvent(element) {\n return element.dispatchEvent(new Event(\"input\", { bubbles: true }))\n}\n\nfunction noop() {}\n","export function nextFrame() {\n return new Promise((resolve) => requestAnimationFrame(resolve))\n}\n\nexport function nextIdle() {\n return new Promise((resolve) => (window.requestIdleCallback || setTimeout)(resolve))\n}\n\nexport function delay(ms = 0) {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nexport function debounce(fn, ms = 0) {\n let timeout\n return (...args) => {\n clearTimeout(timeout)\n timeout = setTimeout(() => fn(...args), ms)\n }\n}\n\nexport function debounceAnimationFrame(fn) {\n let frame\n return (...args) => {\n cancelAnimationFrame(frame)\n frame = requestAnimationFrame(() => fn(...args))\n }\n}\n","/*\n * Mini Rails UJS: A modern approximation of @rails/ujs including only the parts we use.\n * ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅\n * Supports:\n * ◦ data-confirm=\"…\" on links and buttons\n * ◦ data-disable-with=\"…\" on links and buttons\n * ◦ data-method=\"…\" on links\n * ◦ data-remote=\"true\" on forms\n */\nimport \"./polyfills/submit_event_submitter\";\nimport {\n createElement,\n csrfParam,\n csrfToken,\n domReady,\n nextFrame,\n} from \"./helpers\";\n\n// Configuration\n\nconst config = {\n initializers: [refreshCsrfTokens],\n eventHandlers: {\n click: {\n \"[data-confirm]:is(a,button,[type=submit])\": handleConfirm,\n \"[data-disable-with]:is(a,button,[type=submit]):not(:disabled)\":\n handleDisableWith,\n \"[data-method]:is(a)\": handleMethod,\n },\n submit: {\n \"[data-remote]:is(form)\": handleRemote,\n },\n },\n};\n\n// Install initializers\n\nfor (const initializer of config.initializers) {\n domReady(initializer);\n}\n\n// Install event handlers\n\nfor (const [eventName, handlers] of Object.entries(config.eventHandlers)) {\n const handlerEntries = Object.entries(handlers);\n\n addEventListener(eventName, (event) => {\n if (event.defaultPrevented) return;\n if (typeof event.target.closest != \"function\") return;\n\n for (const [selector, handler] of handlerEntries) {\n const element = event.target.closest(selector);\n if (element) handler({ element, event });\n if (event.defaultPrevented) return;\n }\n });\n}\n\n// Initializers\n\nfunction refreshCsrfTokens() {\n const name = csrfParam();\n const value = csrfToken();\n const inputs = document.querySelectorAll(`input[name=\"${name}\"]`);\n for (const input of inputs) input.value = value;\n}\n\n// Event handlers\n\nfunction handleConfirm({ element, event }) {\n const message = element.getAttribute(\"data-confirm\");\n if (!confirm(message)) event.preventDefault();\n}\n\nasync function handleDisableWith({ element }) {\n if (element.form && !element.form.checkValidity()) return;\n const html = element.getAttribute(\"data-disable-with\");\n await nextFrame();\n element.innerHTML = html;\n element.disabled = true;\n}\n\nasync function handleMethod({ element, event }) {\n event.preventDefault();\n\n const form = createElement(\"form\", {\n action: element.href,\n method: \"post\",\n hidden: true,\n });\n form.append(\n createElement(\"input\", {\n type: \"hidden\",\n name: csrfParam(),\n value: csrfToken(),\n }),\n createElement(\"input\", {\n type: \"hidden\",\n name: \"_method\",\n value: element.getAttribute(\"data-method\"),\n })\n );\n document.body.append(form);\n\n submitForm(form);\n await nextFrame();\n form.remove();\n}\n\nasync function handleRemote({ element, event }) {\n event.preventDefault();\n const { submitter } = event;\n\n const action = submitter?.getAttribute(\"formaction\") || element.action;\n const method = submitter?.getAttribute(\"formmethod\") || element.method;\n\n const body = new FormData(element);\n if (submitter?.name) body.append(submitter.name, submitter.value);\n\n const headers = {\n \"X-Requested-With\": \"XMLHttpRequest\",\n \"X-CSRF-Token\": csrfToken(),\n };\n\n element.dispatchEvent(\n new CustomEvent(\"remote:submit-start\", { bubbles: true })\n );\n const response = await fetch(action, { method, body, headers });\n element.dispatchEvent(\n new CustomEvent(\"remote:submit-end\", {\n bubbles: true,\n detail: { response },\n })\n );\n}\n\n// Helpers\n\nconst submitForm =\n \"requestSubmit\" in HTMLFormElement.prototype\n ? (form) => form.requestSubmit()\n : (form) => form.appendChild(createElement(\"button\")).click();\n"],"names":["isSupported","updateSubmitter","getSubmitter","submittersByForm","event","_a","_b","input","cacheKey","cachedResult","result","form","submitter","getMetaContent","name","csrfParam","csrfToken","element","string","html","domReady","callback","noop","resolve","ready","createElement","tagName","properties","nextFrame","config","refreshCsrfTokens","handleConfirm","handleDisableWith","handleMethod","handleRemote","initializer","eventName","handlers","handlerEntries","selector","handler","value","inputs","message","submitForm","action","method","body","headers","response"],"mappings":"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"}