{
  "version": 3,
  "sources": ["../../src/document/components/utils/isVersionedPreviewUrl.ts", "../../src/editorbar/index.ts"],
  "sourcesContent": ["import { getServiceMap } from \"@framerjs/shared/src/ServiceMap.ts\"\n\n// Matches subdomains like `glorious-building-449061-22b1563fb` \u2192 \"-<hexhash>\"\nconst VERSION_HOSTNAME_REGEX = /-[a-f0-9]{7,}$/i\n\nexport function isVersionedPreviewUrl(hostname: string): boolean {\n\tconst firstLabel = hostname.split(\".\")[0] || \"\"\n\treturn VERSION_HOSTNAME_REGEX.test(firstLabel) && hostname.endsWith(getServiceMap().previewDomain)\n}\n", "import \"app/styles/editorbar.css\"\nimport { isProductionSite } from \"document/components/utils/isProductionSite.ts\"\nimport { isVersionedPreviewUrl } from \"document/components/utils/isVersionedPreviewUrl.ts\"\nimport { EditorBarAccessStatus, getEditorBarAccess } from \"./api.ts\"\nimport type { EditorBarWindow } from \"./types.ts\"\n\ndeclare global {\n\tinterface Window {\n\t\tframerProjectFeatures?: Record<string, boolean>\n\t}\n}\n\nasync function loadDeferredScripts() {\n\tconst scripts = (window as unknown as EditorBarWindow).deferredJsFiles\n\tif (!scripts) return\n\n\tconst scriptPromises = scripts.map(src => {\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\tconst script = document.createElement(\"script\")\n\t\t\tscript.src = src\n\t\t\t// Injected scripts behave as async by default, so we need to override that\n\t\t\tscript.async = false\n\t\t\tscript.defer = true\n\t\t\tscript.onload = () => resolve()\n\t\t\tscript.onerror = () => reject()\n\t\t\tdocument.body.appendChild(script)\n\t\t})\n\t})\n\n\tawait Promise.all(scriptPromises)\n}\n\nasync function loadStylesheet() {\n\tconst stylesheet = document.createElement(\"link\")\n\tstylesheet.setAttribute(\"rel\", \"stylesheet\")\n\tstylesheet.setAttribute(\"href\", (window as unknown as EditorBarWindow).cssBundleURL)\n\n\tconst promise = new Promise<void>((resolve, reject) => {\n\t\tstylesheet.onload = () => resolve()\n\t\tstylesheet.onerror = () => reject()\n\t})\n\tdocument.head.appendChild(stylesheet)\n\tawait promise\n}\n\n/**\n * For these statuses and these only, on-page editing will show on a production domain.\n */\nconst prodSafeAccessStatuses = [\n\tEditorBarAccessStatus.Success,\n\t// Here the user does have access to the project, so it's safe to show it\n\tEditorBarAccessStatus.NoPermission,\n]\n\nasync function initializeEditorBar() {\n\tconst search = new URLSearchParams(window.location.search)\n\tconst framerSiteId = search.get(\"framerSiteId\")\n\tconst source = search.get(\"source\")\n\tif (!framerSiteId || !source) return null\n\n\tconst featuresJson = search.get(\"features\")\n\tlet features = {}\n\ttry {\n\t\tif (featuresJson) {\n\t\t\tfeatures = JSON.parse(featuresJson)\n\t\t}\n\t} catch {\n\t\t// Ignore errors\n\t}\n\n\tObject.defineProperty(window, \"editorBarFeatures\", {\n\t\tvalue: Object.freeze(features),\n\t\twritable: false,\n\t})\n\n\tconst access = await getEditorBarAccess(framerSiteId)\n\n\tconst forceShow = search.has(\"forceShow\")\n\n\tif (isVersionedPreviewUrl(source)) {\n\t\t// biome-ignore lint/suspicious/noConsole: useful for debugging\n\t\tconsole.log(\"[Framer On-Page Editing] Unavailable because site is a version URL\")\n\t\treturn\n\t}\n\n\tif (isProductionSite(source)) {\n\t\tif (prodSafeAccessStatuses.includes(access.status)) {\n\t\t\t// biome-ignore lint/suspicious/noConsole: useful for debugging\n\t\t\tconsole.log(\"[Framer On-Page Editing] Available because access status is\", access.status)\n\t\t} else {\n\t\t\tif (forceShow) {\n\t\t\t\t// biome-ignore lint/suspicious/noConsole: useful for debugging\n\t\t\t\tconsole.log(\"[Framer On-Page Editing] Available because site was opened with ?editSite once\")\n\t\t\t} else {\n\t\t\t\t// biome-ignore lint/suspicious/noConsole: useful for debugging\n\t\t\t\tconsole.log(\n\t\t\t\t\t\"[Framer On-Page Editing] Unavailable because not on a `framer.app` subdomain and access status is\",\n\t\t\t\t\taccess.status,\n\t\t\t\t)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\tif (access.status !== EditorBarAccessStatus.Error) {\n\t\t// Show the edit page button on the parent page\n\t\twindow.parent.postMessage({ apiVersion: 1, type: \"accessResult\", data: { status: \"success\" } }, \"*\")\n\t}\n\n\tif (access.status === EditorBarAccessStatus.Success && access.data.projectFeatures) {\n\t\twindow.framerProjectFeatures = access.data.projectFeatures\n\t}\n\n\tawait Promise.all([loadDeferredScripts(), loadStylesheet()])\n\n\tconst { renderEditorBar } = await import(\"./render.tsx\")\n\tawait renderEditorBar(access, framerSiteId)\n}\n\n// eslint-disable-next-line no-console\ninitializeEditorBar().catch(console.error)\n"],
  "mappings": ";;;;;;;;;;;;AAGA,IAAM,yBAAyB;AAExB,SAAS,sBAAsB,UAA2B;AAChE,QAAM,aAAa,SAAS,MAAM,GAAG,EAAE,CAAC,KAAK;AAC7C,SAAO,uBAAuB,KAAK,UAAU,KAAK,SAAS,SAAS,cAAc,EAAE,aAAa;AAClG;;;ACIA,eAAe,sBAAsB;AACpC,QAAM,UAAW,OAAsC;AACvD,MAAI,CAAC,QAAS;AAEd,QAAM,iBAAiB,QAAQ,IAAI,SAAO;AACzC,WAAO,IAAI,QAAc,CAAC,SAAS,WAAW;AAC7C,YAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,aAAO,MAAM;AAEb,aAAO,QAAQ;AACf,aAAO,QAAQ;AACf,aAAO,SAAS,MAAM,QAAQ;AAC9B,aAAO,UAAU,MAAM,OAAO;AAC9B,eAAS,KAAK,YAAY,MAAM;AAAA,IACjC,CAAC;AAAA,EACF,CAAC;AAED,QAAM,QAAQ,IAAI,cAAc;AACjC;AAEA,eAAe,iBAAiB;AAC/B,QAAM,aAAa,SAAS,cAAc,MAAM;AAChD,aAAW,aAAa,OAAO,YAAY;AAC3C,aAAW,aAAa,QAAS,OAAsC,YAAY;AAEnF,QAAM,UAAU,IAAI,QAAc,CAAC,SAAS,WAAW;AACtD,eAAW,SAAS,MAAM,QAAQ;AAClC,eAAW,UAAU,MAAM,OAAO;AAAA,EACnC,CAAC;AACD,WAAS,KAAK,YAAY,UAAU;AACpC,QAAM;AACP;AAKA,IAAM,yBAAyB;AAAA;AAAA;AAAA;AAI/B;AAEA,eAAe,sBAAsB;AACpC,QAAM,SAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM;AACzD,QAAM,eAAe,OAAO,IAAI,cAAc;AAC9C,QAAM,SAAS,OAAO,IAAI,QAAQ;AAClC,MAAI,CAAC,gBAAgB,CAAC,OAAQ,QAAO;AAErC,QAAM,eAAe,OAAO,IAAI,UAAU;AAC1C,MAAI,WAAW,CAAC;AAChB,MAAI;AACH,QAAI,cAAc;AACjB,iBAAW,KAAK,MAAM,YAAY;AAAA,IACnC;AAAA,EACD,QAAQ;AAAA,EAER;AAEA,SAAO,eAAe,QAAQ,qBAAqB;AAAA,IAClD,OAAO,OAAO,OAAO,QAAQ;AAAA,IAC7B,UAAU;AAAA,EACX,CAAC;AAED,QAAM,SAAS,MAAM,mBAAmB,YAAY;AAEpD,QAAM,YAAY,OAAO,IAAI,WAAW;AAExC,MAAI,sBAAsB,MAAM,GAAG;AAElC,YAAQ,IAAI,oEAAoE;AAChF;AAAA,EACD;AAEA,MAAI,iBAAiB,MAAM,GAAG;AAC7B,QAAI,uBAAuB,SAAS,OAAO,MAAM,GAAG;AAEnD,cAAQ,IAAI,+DAA+D,OAAO,MAAM;AAAA,IACzF,OAAO;AACN,UAAI,WAAW;AAEd,gBAAQ,IAAI,gFAAgF;AAAA,MAC7F,OAAO;AAEN,gBAAQ;AAAA,UACP;AAAA,UACA,OAAO;AAAA,QACR;AACA;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAEA,MAAI,OAAO,gCAAwC;AAElD,WAAO,OAAO,YAAY,EAAE,YAAY,GAAG,MAAM,gBAAgB,MAAM,EAAE,QAAQ,UAAU,EAAE,GAAG,GAAG;AAAA,EACpG;AAEA,MAAI,OAAO,sCAA4C,OAAO,KAAK,iBAAiB;AACnF,WAAO,wBAAwB,OAAO,KAAK;AAAA,EAC5C;AAEA,QAAM,QAAQ,IAAI,CAAC,oBAAoB,GAAG,eAAe,CAAC,CAAC;AAE3D,QAAM,EAAE,gBAAgB,IAAI,MAAM,OAAO,4CAAc;AACvD,QAAM,gBAAgB,QAAQ,YAAY;AAC3C;AAGA,oBAAoB,EAAE,MAAM,QAAQ,KAAK;",
  "names": []
}
