{ "version": 3, "sources": ["../../../node_modules/turbo-shadow/src/index.js", "../../javascript/lib/daniel.js.rb", "../../javascript/lib/utils.js.rb", "../../../node_modules/@ruby2js/active-functions/src/index.js"], "sourcesContent": ["export const ShadowRootable = (superClass) => class extends superClass {\n #shadowRootConnected;\n\n attachedShadowRootCallback() {\n this.#shadowRootConnected?.()\n }\n\n get shadowRootAttached() {\n if (this.shadowRoot || !this.querySelector(\"template[shadowrootmode]\")) return Promise.resolve()\n\n const promise = new Promise(resolve => this.#shadowRootConnected = resolve)\n\n return promise\n }\n}\n\nexport function attachShadowRoots(root, callback = null) {\n const shadowNodes = []\n root.querySelectorAll(\"template[shadowrootmode]\").forEach(template => {\n let shadowRoot\n const node = template.parentNode\n const mode = template.getAttribute(\"shadowrootmode\")\n try {\n shadowRoot = node.attachShadow({ mode })\n shadowRoot.appendChild(template.content)\n template.remove()\n shadowNodes.push(node)\n } catch (err) {\n shadowRoot = node.shadowRoot\n }\n if (shadowRoot) {\n attachShadowRoots(shadowRoot).forEach(childNode => shadowNodes.push(childNode))\n }\n })\n\n if (callback) {\n shadowNodes.forEach(node => callback(node))\n } else {\n return shadowNodes\n }\n}\n\nexport function attachShadowRootsAndNotify(root) {\n attachShadowRoots(root, node => node.attachedShadowRootCallback?.())\n}\n\n\ndocument.documentElement.addEventListener(\"turbo:load\", (event) => {\n attachShadowRootsAndNotify(event.target)\n})\n\ndocument.documentElement.addEventListener(\"turbo:frame-load\", (event) => {\n attachShadowRootsAndNotify(event.target)\n})\n\ndocument.documentElement.addEventListener(\"turbo:before-stream-render\", async (event) => {\n const prevRender = event.detail.render\n event.detail.render = (async (newElement) => {\n await prevRender(newElement)\n event.target.targetElements.forEach(el => {\n attachShadowRootsAndNotify(el)\n })\n })\n})\n", "# Ruby has Faraday. Ruby2JS has Daniel.\n# Get it? Daniel. Faraday. \uD83D\uDE0E\n\nclass Daniel\n self.debug = false\n\n async def self.get(url)\n conn = self.new(url, method: :get, params: {})\n response = await conn.request()\n\n puts(\"* Daniel response:\", response) if self.debug\n\n response\n end\n\n async def self.post(url, params)\n conn = self.new(url, method: :post, params:)\n response = await conn.request()\n\n puts(\"* Daniel response:\", response) if self.debug\n\n response\n end\n\n async def self.put(url, params)\n conn = self.new(url, method: :put, params:)\n response = await conn.request()\n\n puts(\"* Daniel response:\", response) if self.debug\n\n response\n end\n\n def initialize(url, method:, params:)\n @url = url\n @method = method.upcase()\n @params = params\n end\n\n async def request()\n headers = {\n \"X-CSRF-Token\": self.csrf_token(),\n }\n headers[\"Content-Type\"] = \"application/json\" unless @params.instance_of?(FormData)\n\n if @method == :GET\n await fetch(@url,\n method: @method,\n headers:)\n else\n body = @params.instance_of?(FormData) ? @params : @params.inspect\n await fetch(@url,\n method: @method,\n headers:,\n body:)\n end\n end\n\n def csrf_token()\n document.head.query_selector(%(meta[name=\"csrf-token\"])).content\n end\nend\n\nexport default Daniel\n", "export def signed_in?\n document.get_element_by_id(\"user-view-profile\") ? true : false\nend\n\nexport async def initiate_sign_up(context, id)\n resp = await Daniel.post(\"/user_sessions/save_context\", context:, \"context_id\" => id)\n if resp.ok?\n Turbo.visit(\"/users/new?from_context=1\")\n else\n alert(\"I'm sorry, there was an issue contacting the server. Please try again soon.\")\n end\nend\n\nexport async def save_sign_in_context(context, id)\n resp = await Daniel.post(\"/user_sessions/save_context\", context:, \"context_id\" => id)\n if resp.ok?\n Turbo.visit(\"/signin\")\n else\n alert(\"I'm sorry, there was an issue contacting the server. Please try again soon.\")\n end\nend\n", "export const blank$ = value => {\n if (typeof value == \"undefined\") return true\n\n if (value == null) return true\n\n if (typeof value == \"string\" && value === \"\") return true\n\n // This one's tricky. Any valid number including 0 is not blank, *except* if it's\n // a NaN value, in which case that *is* blank\n if (typeof value == \"number\") return Object.is(value, NaN)\n\n if (value.toString() === \"[object Set]\") return value.size == 0\n\n if (value.constructor.toString().includes(\"class \")) return false\n\n if (value === false) return true\n if (value === true) return false\n\n if (Object.keys(value).length === 0) return true\n\n return false\n}\n\nexport const present$ = value => {\n return !blank$(value)\n}\n\nexport const presence$ = value => {\n return present$(value) ? value : null\n}\n\n// Copied from https://github.com/sindresorhus/escape-string-regexp/blob/main/index.js\nfunction escapeStringRegexp(string) {\n if (typeof string !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n // Escape characters with special meaning either inside or outside character sets.\n // Use a simple backslash escape when it\u2019s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns\u2019 stricter grammar.\n return string\n .replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n .replace(/-/g, '\\\\x2d');\n}\n\nexport const deletePrefix$ = (value, prefix) => {\n return value.replace(new RegExp(`^${escapeStringRegexp(prefix)}`), \"\")\n}\n\nexport const deleteSuffix$ = (value, suffix) => {\n return value.replace(new RegExp(`${escapeStringRegexp(suffix)}$`), \"\")\n}\n\nexport const chomp$ = (value, suffix = null) => {\n if (suffix) {\n return deleteSuffix$(value, suffix)\n } else {\n return value.replace(/\\r?\\n$/, \"\")\n }\n}\n"], "mappings": "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", "names": ["ShadowRootable", "__name", "superClass", "_shadowRootConnected", "_a", "__privateAdd", "__privateGet", "resolve", "__privateSet", "attachShadowRoots", "root", "callback", "shadowNodes", "template", "shadowRoot", "node", "mode", "childNode", "attachShadowRootsAndNotify", "event", "prevRender", "newElement", "el", "Daniel", "url", "response", "params", "method", "body", "headers", "FormData", "document", "__publicField", "debug", "signedIn", "document", "__name", "initiateSignUp", "context", "id", "daniel_js_default", "resp", "Turbo", "saveSignInContext", "blank$", "__name", "value", "present$", "presence$", "escapeStringRegexp", "string", "deleteSuffix$", "__name", "value", "suffix", "escapeStringRegexp"] }