{
"version": 3,
"sources": ["../../javascript/public/custom/ar.js"],
"sourcesContent": ["// constants to check for various platforms / AR subsytems support\n// @see https://github.com/google/model-viewer/blob/master/packages/model-viewer/src/constants.ts\nexport const compat = {\n IS_MOBILE: (() => {\n const userAgent = navigator.userAgent || navigator.vendor || opera;\n let check = false;\n if (\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(\n userAgent\n ) ||\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(\n userAgent.substr(0, 4)\n )\n ) {\n check = true;\n }\n return check;\n })(),\n\n IS_ANDROID: /android/i.test(navigator.userAgent),\n\n // Prior to iOS 13, detecting iOS Safari was relatively straight-forward.\n // As of iOS 13, Safari on iPad (in its default configuration) reports the same\n // user-agent string as Safari on desktop MacOS. Strictly speaking, we only care\n // about iOS for the purposes if selecting for cases where Quick Look is known\n // to be supported. However, for API correctness purposes, we must rely on\n // known, detectable signals to distinguish iOS Safari from MacOS Safari. At the\n // time of this writing, there are no non-iOS/iPadOS Apple devices with\n // multi-touch displays.\n // @see https://stackoverflow.com/questions/57765958/how-to-detect-ipad-and-ipad-os-version-in-ios-13-and-up\n // @see https://forums.developer.apple.com/thread/119186\n // @see https://github.com/google/model-viewer/issues/758\n IS_IOS:\n (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream) ||\n (navigator.platform === \"MacIntel\" && navigator.maxTouchPoints > 1),\n\n IS_AR_QUICKLOOK_CANDIDATE: (() => {\n const tempAnchor = document.createElement(\"a\");\n return Boolean(\n tempAnchor.relList &&\n tempAnchor.relList.supports &&\n tempAnchor.relList.supports(\"ar\")\n );\n })(),\n\n IS_SCENEVIEWER_CANDIDATE:\n /android/i.test(navigator.userAgent) &&\n !/firefox/i.test(navigator.userAgent) &&\n !/OculusBrowser/.test(navigator.userAgent),\n};\n\nexport const activateAR = (props, listener) => {\n const anchor = document.createElement(\"a\");\n const href = setupHref(props);\n anchor.setAttribute(\"href\", href);\n anchor.style.display = 'none';\n\n if (compat.IS_AR_QUICKLOOK_CANDIDATE) {\n // quick look needs a
child to go directly to AR view\n anchor.appendChild(document.createElement(\"img\"));\n anchor.rel = \"ar\";\n }\n\n if (listener && compat.IS_AR_QUICKLOOK_CANDIDATE) {\n // anchor needs to be added to the body before you can add an event listener\n document.body.append(anchor)\n\n anchor.addEventListener(\n \"message\",\n (event) => {\n if (event.data == \"_apple_ar_quicklook_button_tapped\") {\n listener.dispatchEvent(new CustomEvent(\"quick-look-button-tapped\"));\n }\n },\n false\n );\n }\n\n anchor.click();\n};\n\nconst setupHref = (props) => {\n let href = \"\";\n\n if (compat.IS_AR_QUICKLOOK_CANDIDATE) {\n const {\n iosSrc,\n applePayButtonType,\n checkoutTitle,\n checkoutSubtitle,\n price,\n callToAction,\n customBanner,\n customHeight,\n noScale,\n } = props;\n\n href = `${iosSrc}#`;\n\n if (applePayButtonType) {\n href += `&applePayButtonType=${encodeURIComponent(applePayButtonType)}`;\n }\n if (checkoutTitle) {\n href += `&checkoutTitle=${encodeURIComponent(checkoutTitle)}`;\n }\n if (checkoutSubtitle) {\n href += `&checkoutSubtitle=${encodeURIComponent(checkoutSubtitle)}`;\n }\n if (price) {\n href += `&price=${encodeURIComponent(price)}`;\n }\n if (callToAction) {\n href += `&callToAction=${encodeURIComponent(callToAction)}`;\n }\n if (customBanner) {\n href += `&custom=${encodeURIComponent(customBanner)}`;\n }\n if (customHeight) {\n href += `&customHeight=${encodeURIComponent(customHeight)}`;\n }\n if (noScale != null) {\n href += `&allowsContentScaling=0`;\n }\n } else if (compat.IS_SCENEVIEWER_CANDIDATE) {\n const { src, title, fallbackUrl, link, noScale } = props;\n\n href = `intent://arvr.google.com/scene-viewer/1.0?file=${src}&mode=ar_only`;\n if (title) {\n href += `&title=${encodeURIComponent(title)}`;\n }\n if (link) {\n href += `&link=${encodeURIComponent(link)}`;\n }\n if (noScale != null) {\n href += `&resizable=false`;\n }\n href +=\n `#Intent;scheme=https;` +\n `package=com.google.ar.core;` +\n `action=android.intent.action.VIEW;`;\n if (fallbackUrl) {\n href += `S.browser_fallback_url=${encodeURIComponent(fallbackUrl)};`;\n }\n href += `end;`;\n }\n return href;\n};\n\nexport const setupButton = (button) => {\n // skip button if it was already initialized beforehand\n if (button.getAttribute(\"ar\") != null) {\n return;\n }\n\n if (compat.IS_AR_QUICKLOOK_CANDIDATE) {\n // system supports AR via quick look (on ios this takes precedence on scene viewer)\n button.setAttribute(\"ar\", \"quick-look\");\n button.dispatchEvent(\n new CustomEvent(\"initialized\", { detail: \"quick-look\" })\n );\n button.addEventListener(\"click\", () => {\n const iosSrc = button.getAttribute(\"ios-src\");\n if (!iosSrc) {\n console.error(\"Invalid ios-src in : \" + button);\n return;\n }\n\n const applePayButtonType = button.getAttribute(\"applepay-button-type\");\n const checkoutTitle = button.getAttribute(\"checkout-title\");\n const checkoutSubtitle = button.getAttribute(\"checkout-subtitle\");\n const price = button.getAttribute(\"price\");\n const callToAction = button.getAttribute(\"call-to-action\");\n const customBanner = button.getAttribute(\"custom-banner\");\n const customHeight = button.getAttribute(\"custom-height\");\n const noScale = button.getAttribute(\"no-scale\");\n\n activateAR(\n {\n iosSrc,\n applePayButtonType,\n checkoutTitle,\n checkoutSubtitle,\n price,\n callToAction,\n customBanner,\n customHeight,\n noScale,\n },\n button\n );\n });\n } else if (compat.IS_SCENEVIEWER_CANDIDATE) {\n // system supports AR via scene viewer\n button.setAttribute(\"ar\", \"scene-viewer\");\n button.dispatchEvent(\n new CustomEvent(\"initialized\", { detail: \"scene-viewer\" })\n );\n button.addEventListener(\"click\", () => {\n const src = button.getAttribute(\"src\");\n if (!src) {\n console.error(\"Invalid src in : \" + button);\n return;\n }\n\n const title = button.getAttribute(\"title\");\n const fallbackUrl = button.getAttribute(\"fallback-url\");\n const link = button.getAttribute(\"link\");\n const noScale = button.getAttribute(\"no-scale\");\n\n activateAR({ src, title, fallbackUrl, link, noScale });\n });\n } else {\n // No AR supported on current system, hide the button or sets a fallback url\n button.setAttribute(\"ar\", \"unsupported\");\n button.dispatchEvent(\n new CustomEvent(\"initialized\", { detail: \"unsupported\" })\n );\n if (button.getAttribute(\"show-if-unsupported\") != null) {\n button.addEventListener(\"click\", () => {\n const fallbackUrl = button.getAttribute(\"fallback-url\");\n if (fallbackUrl) {\n activateAR({ fallbackUrl: encodeURIComponent(fallbackUrl) });\n }\n });\n } else {\n button.style.display = \"none\";\n }\n }\n};\n\n// go through all ar-button tags on the page and initialize them\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n // Your code here\n const buttons = document.querySelectorAll(\"ar-button\");\nfor (let i = 0; i < buttons.length; i++) {\n const button = buttons.item(i);\n setupButton(button);\n}\n});"],
"mappings": "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",
"names": []
}