@virtualdisplay.io/client 4.0.0-alpha.20 → 4.0.0-alpha.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/dist/index.d.ts +135 -3
- package/dist/virtualdisplay.client.cjs.js +64 -17
- package/dist/virtualdisplay.client.es.js +2096 -1882
- package/dist/virtualdisplay.client.umd.js +95 -48
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(N,et){typeof exports=="object"&&typeof module<"u"?et(exports):typeof define=="function"&&define.amd?define(["exports"],et):(N=typeof globalThis<"u"?globalThis:N||self,et(N.VirtualdisplayClient={}))})(this,(function(N){"use strict";function et(n,t){for(var e=0;e<t.length;e++){const i=t[e];if(typeof i!="string"&&!Array.isArray(i)){for(const o in i)if(o!=="default"&&!(o in n)){const r=Object.getOwnPropertyDescriptor(i,o);r&&Object.defineProperty(n,o,r.get?r:{enumerable:!0,get:()=>i[o]})}}}return Object.freeze(Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}))}const M={HANDSHAKE:"handshake",SESSION:"session",MUTATION:"mutation",STATE:"state",LOADING_INDICATOR:"loading_indicator",CAMERA:"camera",SNAPSHOT:"snapshot",MAPPING:"mapping",AR_ACTIVATE:"ar_activate",FULLSCREEN:"fullscreen",CONFIG:"config",ANNOTATION_TOGGLE:"annotation_toggle",FOCUS:"focus",PRICING:"pricing"},Zt={FOCUS:"focus",UNFOCUS:"unfocus"},pn={FOCUSED:"focused"},bn={HIDDEN:"hidden"},vn=new Set(Object.values(M));function yn(n){if(typeof n!="object"||n===null)return!1;const t=n;return typeof t.target=="string"?!1:typeof t.type=="string"&&vn.has(t.type)}function wn(n){const t=$(n);return t!==null&&t.type===M.HANDSHAKE}function Cn(n){const t=$(n);return t!==null&&t.type===M.SESSION&&typeof t.sessionId=="string"}function En(n){const t=$(n);return t!==null&&t.type===M.MUTATION&&Array.isArray(t.results)}function _n(n){const t=$(n);return t!==null&&t.type===M.SNAPSHOT&&("data"in t||"error"in t)}function Sn(n){const t=$(n);return t!==null&&t.type===M.CAMERA&&Array.isArray(t.transforms)}function An(n){const t=$(n);return t!==null&&t.type===M.MAPPING&&Array.isArray(t.attributes)}function kn(n){const t=$(n);return t!==null&&t.type===M.LOADING_INDICATOR&&typeof t.progress=="number"}function Tn(n){const t=$(n);return t!==null&&t.type===M.CONFIG&&typeof t.viewerSettings=="object"}function Rn(n){const t=$(n);return t!==null&&t.type===M.FOCUS&&typeof t.state=="string"}function In(n){const t=$(n);return t!==null&&t.type===M.PRICING&&typeof t.pricing=="object"&&t.pricing!==null}function $(n){return typeof n!="object"||n===null?null:n}class Wt{constructor(t){this.processor=t}processor;pending=[];isReady=!1;enqueue(t){if(this.isReady){this.processor(t);return}this.pending.push(t)}markReady(){if(this.isReady||(this.isReady=!0,this.pending.length===0))return;const t=[...this.pending];this.pending.length=0;for(const e of t)this.processor(e)}get ready(){return this.isReady}get pendingCount(){return this.pending.length}hasPending(t){return this.pending.some(e=>e.type===t)}clear(){this.pending.length=0}}class Nn{constructor(t,e){this.getTarget=t,this.sourceId=`vd-${Math.random().toString(36).slice(2,8)}`,this.targetOrigin=e?.targetOrigin??"*",this.isValid=e?.isValid??yn,this.publisher=new Wt(i=>this.post(i)),this.consumer=new Wt(i=>this.routeToHandler(i)),this.shouldBuffer=e?.shouldBuffer??null,e?.bufferIncoming!==!0&&this.consumer.markReady()}getTarget;handlers=new Map;publisher;consumer;shouldBuffer;listener=null;sourceId;targetOrigin;isValid;on(t,e){this.handlers.set(t,e)}off(t){this.handlers.delete(t)}setTargetOrigin(t){this.targetOrigin=t}send(t){this.publisher.enqueue(t)}markReady(){this.publisher.markReady()}markConsumerReady(){this.consumer.markReady()}consumerHasPending(t){return this.consumer.hasPending(t)}start(){this.listener===null&&(this.listener=t=>{const{data:e}=t;if(!this.isValid(e)||e._source===this.sourceId)return;const i=this.getTarget();if(i!==null&&t.source!==null&&t.source!==i)return;const o=e;if(this.shouldBuffer!==null&&!this.shouldBuffer(o)){this.routeToHandler(o);return}this.consumer.enqueue(o)},window.addEventListener("message",this.listener))}destroy(){this.listener!==null&&(window.removeEventListener("message",this.listener),this.listener=null),this.publisher.clear(),this.consumer.clear(),this.handlers.clear()}get ready(){return this.publisher.ready}get pendingCount(){return this.publisher.pendingCount}post(t){const e=this.getTarget();e!==null&&e.postMessage({...t,_source:this.sourceId},this.targetOrigin)}routeToHandler(t){const e=this.handlers.get(t.type);if(e===void 0)return;const i=e(t);i instanceof Promise&&i.catch(o=>{const r=o instanceof Error?o.message:String(o);console.error(`Virtualdisplay: error handling ${t.type}: ${r}`)})}}class z{element;constructor({variant:t="default",size:e="default",label:i,icon:o,onClick:r,disabled:s=!1}={}){this.element=document.createElement("button"),this.element.className=`ui-btn ui-btn--${t} ui-btn--size-${e}`,i!==void 0&&(this.element.setAttribute("aria-label",i),this.element.title=i),o!==void 0?this.element.appendChild(o):i!==void 0&&(this.element.textContent=i),r&&this.element.addEventListener("click",r),this.element.disabled=s}setIcon(t){const e=this.element.querySelector("svg");e!==null?e.replaceWith(t):this.element.appendChild(t)}}const Mn={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};const Qt=([n,t,e])=>{const i=document.createElementNS("http://www.w3.org/2000/svg",n);return Object.keys(t).forEach(o=>{i.setAttribute(o,String(t[o]))}),e?.length&&e.forEach(o=>{const r=Qt(o);i.appendChild(r)}),i},Xt=(n,t={})=>{const i={...Mn,...t};return Qt(["svg",i,n])};const Bn=[["path",{d:"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z"}],["path",{d:"m3.3 7 8.7 5 8.7-5"}],["path",{d:"M12 22V12"}]];const Pn=[["path",{d:"M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z"}],["circle",{cx:"12",cy:"13",r:"3"}]];const te=[["path",{d:"m6 9 6 6 6-6"}]];const Ln=[["path",{d:"m15 18-6-6 6-6"}]];const On=[["path",{d:"m9 18 6-6-6-6"}]];const xn=[["path",{d:"m18 15-6-6-6 6"}]];const zn=[["path",{d:"M15 3h6v6"}],["path",{d:"m21 3-7 7"}],["path",{d:"m3 21 7-7"}],["path",{d:"M9 21H3v-6"}]];const Dn=[["path",{d:"m14 10 7-7"}],["path",{d:"M20 10h-6V4"}],["path",{d:"m3 21 7-7"}],["path",{d:"M4 14h6v6"}]];const Fn=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"}],["path",{d:"M3 3v5h5"}]];const Un=[["path",{d:"M10 5H3"}],["path",{d:"M12 19H3"}],["path",{d:"M14 3v4"}],["path",{d:"M16 17v4"}],["path",{d:"M21 12h-9"}],["path",{d:"M21 19h-5"}],["path",{d:"M21 5h-7"}],["path",{d:"M8 10v4"}],["path",{d:"M8 12H3"}]];const $n=[["path",{d:"M18 6 6 18"}],["path",{d:"m6 6 12 12"}]];const Vn=[["circle",{cx:"11",cy:"11",r:"8"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65"}],["line",{x1:"11",x2:"11",y1:"8",y2:"14"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11"}]];const qn=[["circle",{cx:"11",cy:"11",r:"8"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11"}]],L={semantic:{error:"#dc2626"},neutral:{500:"#737373",600:"#525252",900:"#171717"},white:"#ffffff",black:"#000000"},w={0:"0",.5:"0.125rem",1:"0.25rem",1.5:"0.375rem",2:"0.5rem",3:"0.75rem",4:"1rem",5:"1.25rem",6:"1.5rem",8:"2rem",9:"2.25rem",24:"6rem"};class jn{element;constructor(){this.element=document.createElement("div"),Object.assign(this.element.style,{background:L.white,borderRadius:w[3],padding:w[6],boxShadow:`0 ${w[2]} ${w[8]} oklch(0% 0 0 / 20%)`,maxWidth:"20rem",width:"100%"})}}class Hn{constructor(t={}){this.options=t,this.card=new jn,this.backdrop=this.createBackdrop(),this.backdrop.appendChild(this.card.element)}options;card;backdrop;keyHandler=null;open(){document.body.appendChild(this.backdrop),this.keyHandler=t=>{t.key==="Escape"&&this.close()},document.addEventListener("keydown",this.keyHandler)}close(){this.backdrop.remove(),this.keyHandler!==null&&(document.removeEventListener("keydown",this.keyHandler),this.keyHandler=null),this.options.onClose?.()}createBackdrop(){const t=document.createElement("div");return Object.assign(t.style,{position:"fixed",inset:w[0],background:"oklch(0% 0 0 / 50%)",zIndex:"9999",display:"flex",alignItems:"center",justifyContent:"center"}),t.addEventListener("click",e=>{e.target===t&&this.close()}),t}}class Gn{element;selectCallback=null;constructor(t,e,i){this.element=document.createElement("div"),this.element.className="ui-toggle-group";for(let o=0;o<t.length;o++){const r=t[o],s=document.createElement("button");s.className="ui-toggle-group-item",s.dataset.value=r,s.textContent=i?.[o]??r,s.dataset.state=r===e?"on":"off",s.setAttribute("aria-pressed",r===e?"true":"false"),s.addEventListener("click",()=>{this.selectCallback?.(r)}),this.element.appendChild(s)}}setSelected(t){for(const e of this.element.querySelectorAll(".ui-toggle-group-item")){const i=e.dataset.value===t;e.dataset.state=i?"on":"off",e.setAttribute("aria-pressed",i?"true":"false")}}onSelect(t){this.selectCallback=t}}class Kn{element;select;constructor(t,e,i,o,r){this.select=document.createElement("select"),this.select.className="ui-native-select",this.select.dataset.name=t,this.select.setAttribute("aria-label",i);const s=document.createElement("option");s.value="",s.disabled=!0,s.textContent=i,this.select.appendChild(s);let a=!1;for(let c=0;c<e.length;c++){const u=e[c],h=document.createElement("option");h.value=u,h.textContent=r?.[c]??u,u===o&&(h.selected=!0,a=!0),this.select.appendChild(h)}a||(s.selected=!0);const l=Xt(te,{width:16,height:16,"stroke-width":2});l.classList.add("ui-native-select-icon"),this.element=document.createElement("div"),this.element.className="ui-native-select-wrap",this.element.appendChild(this.select),this.element.appendChild(l)}setSelected(t){this.select.value=t}onSelect(t){this.select.addEventListener("change",()=>{t(this.select.value)})}}const Yn={},Jn="en",ee=["en","nl","de"],ct=["baseLocale"],ne=[];let ie,oe;function Zn(n){if(ne.length===0)return;const t=typeof n=="string"?n:n.href;if(ie===t)return oe;const e=new URL(t,"http://dummy.com");let i;for(const o of ne)if(new Yn(o.match,e.href).exec(e.href)){i=o;break}return ie=t,oe=i,i}function re(n){const t=Zn(n);return t&&t.exclude!==!0&&Array.isArray(t.strategy)?t.strategy:ct}const ut=typeof window>"u";globalThis.__paraglide=globalThis.__paraglide??{},globalThis.__paraglide.ssr=globalThis.__paraglide.ssr??{};let se=!1,B=()=>{let n=ct;!ut&&typeof window<"u"&&window.location?.href&&(n=re(window.location.href));const t=Wn(n);if(t)return se||(se=!0,ae(t,{reload:!1})),t;throw new Error("No locale found. Read the docs https://paraglidejs.com/errors#no-locale-found")};function Wn(n,t){let e;for(const i of n){if(i==="baseLocale")e=Jn;else if(ce(i)&&ot.has(i)){const r=ot.get(i);if(r){const s=r.getLocale();if(s instanceof Promise)continue;if(s!==void 0)return Xn(s)}}const o=le(e);if(o)return o}}const Qn=n=>{window.location.reload()};let ae=(n,t)=>{const e={reload:!0,...t};let i;try{i=B()}catch{}const o=[];let r=ct;!ut&&typeof window<"u"&&window.location?.href&&(r=re(window.location.href));for(const a of r)if(a!=="baseLocale"&&ce(a)&&ot.has(a)){const l=ot.get(a);if(l){let c=l.setLocale(n);c instanceof Promise&&(c=c.catch(u=>{throw new Error(`Custom strategy "${a}" setLocale failed.`,{cause:u})}),o.push(c))}}const s=()=>{!ut&&e.reload&&window.location&&n!==i&&Qn()};if(o.length)return Promise.all(o).then(()=>{s()});s()};function le(n){if(typeof n!="string")return;const t=n.toLowerCase();for(const e of ee)if(e.toLowerCase()===t)return e}function Xn(n){const t=le(n);if(t)return t;throw new Error(`Invalid locale: ${n}. Expected one of: ${ee.join(", ")}`)}const ot=new Map;function ce(n){return typeof n=="string"&&/^custom-[A-Za-z0-9_-]+$/.test(n)}const ti=()=>"Activate AR",ei=()=>"AR activeren",ni=()=>"AR aktivieren",ii=((n={},t={})=>{const e=t.locale??B();return e==="en"?ti():e==="nl"?ei():ni()}),oi=()=>"Scan to view in AR",ri=()=>"Scan om in AR te bekijken",si=()=>"Scannen für AR-Ansicht",ai=((n={},t={})=>{const e=t.locale??B();return e==="en"?oi():e==="nl"?ri():si()}),li=()=>"Use your smartphone camera to scan this QR code",ci=()=>"Gebruik de camera van je smartphone om deze QR-code te scannen",ui=()=>"Verwende die Kamera deines Smartphones, um diesen QR-Code zu scannen",di=((n={},t={})=>{const e=t.locale??B();return e==="en"?li():e==="nl"?ci():ui()}),hi=()=>"Your phone will open the 3D model in AR mode.",fi=()=>"Je telefoon opent het 3D-model in AR-modus.",gi=()=>"Dein Telefon öffnet das 3D-Modell im AR-Modus.",mi=((n={},t={})=>{const e=t.locale??B();return e==="en"?hi():e==="nl"?fi():gi()}),pi=()=>"Close",bi=()=>"Sluiten",vi=()=>"Schließen",yi=((n={},t={})=>{const e=t.locale??B();return e==="en"?pi():e==="nl"?bi():vi()}),wi=()=>"Fullscreen",Ci=()=>"Volledig scherm",Ei=()=>"Vollbild",_i=((n={},t={})=>{const e=t.locale??B();return e==="en"?wi():e==="nl"?Ci():Ei()}),Si=()=>"Downloading",Ai=()=>"Downloaden",ki=()=>"Herunterladen",ue=((n={},t={})=>{const e=t.locale??B();return e==="en"?Si():e==="nl"?Ai():ki()}),Ti=()=>"Rendering",Ri=()=>"Renderen",Ii=()=>"Rendern",Ni=((n={},t={})=>{const e=t.locale??B();return e==="en"?Ti():e==="nl"?Ri():Ii()}),Mi=()=>"Screenshot",Bi=()=>"Screenshot",Pi=()=>"Screenshot",Li=((n={},t={})=>{const e=t.locale??B();return e==="en"?Mi():e==="nl"?Bi():Pi()}),Oi=()=>"Configure",xi=()=>"Configureren",zi=()=>"Konfigurieren",Di=((n={},t={})=>{const e=t.locale??B();return e==="en"?Oi():e==="nl"?xi():zi()}),Fi=()=>"Close",Ui=()=>"Sluiten",$i=()=>"Schließen",Vi=((n={},t={})=>{const e=t.locale??B();return e==="en"?Fi():e==="nl"?Ui():$i()}),qi=()=>"Reset camera",ji=()=>"Camera resetten",Hi=()=>"Kamera zurücksetzen",Gi=((n={},t={})=>{const e=t.locale??B();return e==="en"?qi():e==="nl"?ji():Hi()}),Ki=()=>"Zoom in",Yi=()=>"Inzoomen",Ji=()=>"Hineinzoomen",Zi=((n={},t={})=>{const e=t.locale??B();return e==="en"?Ki():e==="nl"?Yi():Ji()}),Wi=()=>"Zoom out",Qi=()=>"Uitzoomen",Xi=()=>"Herauszoomen",to=((n={},t={})=>{const e=t.locale??B();return e==="en"?Wi():e==="nl"?Qi():Xi()}),eo=()=>"Rotate left",no=()=>"Naar links draaien",io=()=>"Nach links drehen",oo=((n={},t={})=>{const e=t.locale??B();return e==="en"?eo():e==="nl"?no():io()}),ro=()=>"Rotate right",so=()=>"Naar rechts draaien",ao=()=>"Nach rechts drehen",lo=((n={},t={})=>{const e=t.locale??B();return e==="en"?ro():e==="nl"?so():ao()}),co=()=>"Tilt up",uo=()=>"Omhoog kantelen",ho=()=>"Nach oben kippen",fo=((n={},t={})=>{const e=t.locale??B();return e==="en"?co():e==="nl"?uo():ho()}),go=()=>"Tilt down",mo=()=>"Omlaag kantelen",po=()=>"Nach unten kippen",bo=((n={},t={})=>{const e=t.locale??B();return e==="en"?go():e==="nl"?mo():po()}),vo=()=>"Working…",yo=()=>"Bezig…",wo=()=>"Läuft…",Co=((n={},t={})=>{const e=t.locale??B();return e==="en"?vo():e==="nl"?yo():wo()}),Eo=()=>"Done",_o=()=>"Gelukt",So=()=>"Fertig",Ao=((n={},t={})=>{const e=t.locale??B();return e==="en"?Eo():e==="nl"?_o():So()}),ko=()=>"Failed",To=()=>"Mislukt",Ro=()=>"Fehlgeschlagen",Io=((n={},t={})=>{const e=t.locale??B();return e==="en"?ko():e==="nl"?To():Ro()}),U={fontFamily:{sans:["Mona Sans","ui-sans-serif","system-ui","sans-serif","Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"]},fontSize:{xs:"0.75rem",sm:"0.875rem",base:"1rem",lg:"1.125rem"},fontWeight:{medium:"500",semibold:"600"}},No=U.fontFamily.sans.join(", ");class Mo{qrLib=null;dialog=null;async show(t){this.hide(),this.qrLib??=await Promise.resolve().then(()=>Qr);const e=await this.qrLib.toDataURL(t,{width:256,margin:4,errorCorrectionLevel:"M",color:{dark:L.black,light:L.white}});this.dialog=new Hn({onClose:()=>{this.dialog=null}}),Object.assign(this.dialog.card.element.style,{display:"flex",flexDirection:"column",alignItems:"center",gap:w[3],fontFamily:No}),this.dialog.card.element.appendChild(this.createText(ai(),{fontSize:U.fontSize.base,fontWeight:U.fontWeight.semibold,color:L.neutral[900]})),this.dialog.card.element.appendChild(this.createText(di(),{fontSize:U.fontSize.sm,color:L.neutral[600]})),this.dialog.card.element.appendChild(this.createQrImage(e)),this.dialog.card.element.appendChild(this.createText(mi(),{fontSize:U.fontSize.xs,color:L.neutral[500]}));const i=new z({variant:"outline",label:yi(),onClick:()=>{this.hide()}});this.dialog.card.element.appendChild(i.element),this.dialog.open()}hide(){this.dialog?.close(),this.dialog=null}createText(t,e){const i=document.createElement("p");return i.textContent=t,Object.assign(i.style,{margin:"0",textAlign:"center",...e}),i}createQrImage(t){const e=document.createElement("img");return e.src=t,e.alt="QR code",Object.assign(e.style,{width:w[24],height:w[24],borderRadius:w[1]}),e}}const Z=U.fontFamily.sans.join(", "),Bo=`
|
|
1
|
+
(function(M,et){typeof exports=="object"&&typeof module<"u"?et(exports):typeof define=="function"&&define.amd?define(["exports"],et):(M=typeof globalThis<"u"?globalThis:M||self,et(M.VirtualdisplayClient={}))})(this,(function(M){"use strict";function et(n,t){for(var e=0;e<t.length;e++){const i=t[e];if(typeof i!="string"&&!Array.isArray(i)){for(const o in i)if(o!=="default"&&!(o in n)){const r=Object.getOwnPropertyDescriptor(i,o);r&&Object.defineProperty(n,o,r.get?r:{enumerable:!0,get:()=>i[o]})}}}return Object.freeze(Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}))}const N={HANDSHAKE:"handshake",SESSION:"session",MUTATION:"mutation",STATE:"state",LOADING_INDICATOR:"loading_indicator",CAMERA:"camera",SNAPSHOT:"snapshot",MAPPING:"mapping",AR_ACTIVATE:"ar_activate",FULLSCREEN:"fullscreen",CONFIG:"config",ANNOTATION_TOGGLE:"annotation_toggle",FOCUS:"focus",PRICING:"pricing",QR_SHOWN:"qr_shown",SYNC:"sync"},Jt={FOCUS:"focus",UNFOCUS:"unfocus"},bn={FOCUSED:"focused"},vn={HIDDEN:"hidden"},yn=new Set(Object.values(N));function wn(n){if(typeof n!="object"||n===null)return!1;const t=n;return typeof t.target=="string"?!1:typeof t.type=="string"&&yn.has(t.type)}function Cn(n){const t=$(n);return t!==null&&t.type===N.HANDSHAKE}function Sn(n){const t=$(n);return t!==null&&t.type===N.SESSION&&typeof t.sessionId=="string"}function En(n){const t=$(n);return t!==null&&t.type===N.MUTATION&&Array.isArray(t.results)}function _n(n){const t=$(n);return t!==null&&t.type===N.SNAPSHOT&&("data"in t||"error"in t)}function An(n){const t=$(n);return t!==null&&t.type===N.CAMERA&&Array.isArray(t.transforms)}function kn(n){const t=$(n);return t!==null&&t.type===N.MAPPING&&Array.isArray(t.attributes)}function Tn(n){const t=$(n);return t!==null&&t.type===N.LOADING_INDICATOR&&typeof t.progress=="number"}function Rn(n){const t=$(n);return t!==null&&t.type===N.SYNC&&typeof t.connected=="boolean"}function In(n){const t=$(n);return t!==null&&t.type===N.CONFIG&&typeof t.viewerSettings=="object"}function Nn(n){const t=$(n);return t!==null&&t.type===N.FOCUS&&typeof t.state=="string"}function Mn(n){const t=$(n);return t!==null&&t.type===N.PRICING&&typeof t.pricing=="object"&&t.pricing!==null}function $(n){return typeof n!="object"||n===null?null:n}class Zt{constructor(t){this.processor=t}processor;pending=[];isReady=!1;enqueue(t){if(this.isReady){this.processor(t);return}this.pending.push(t)}markReady(){if(this.isReady||(this.isReady=!0,this.pending.length===0))return;const t=[...this.pending];this.pending.length=0;for(const e of t)this.processor(e)}get ready(){return this.isReady}get pendingCount(){return this.pending.length}hasPending(t){return this.pending.some(e=>e.type===t)}clear(){this.pending.length=0}}class Bn{constructor(t,e){this.getTarget=t,this.sourceId=`vd-${Math.random().toString(36).slice(2,8)}`,this.targetOrigin=e?.targetOrigin??"*",this.isValid=e?.isValid??wn,this.publisher=new Zt(i=>this.post(i)),this.consumer=new Zt(i=>this.routeToHandler(i)),this.shouldBuffer=e?.shouldBuffer??null,e?.bufferIncoming!==!0&&this.consumer.markReady()}getTarget;handlers=new Map;publisher;consumer;shouldBuffer;listener=null;sourceId;targetOrigin;isValid;on(t,e){this.handlers.set(t,e)}off(t){this.handlers.delete(t)}setTargetOrigin(t){this.targetOrigin=t}send(t){this.publisher.enqueue(t)}receive(t){if(this.isValid(t)){if(this.shouldBuffer!==null&&!this.shouldBuffer(t)){this.routeToHandler(t);return}this.consumer.enqueue(t)}}markReady(){this.publisher.markReady()}markConsumerReady(){this.consumer.markReady()}consumerHasPending(t){return this.consumer.hasPending(t)}start(){this.listener===null&&(this.listener=t=>{const{data:e}=t;if(!this.isValid(e)||e._source===this.sourceId)return;const i=this.getTarget();if(i!==null&&t.source!==null&&t.source!==i)return;const o=e;if(this.shouldBuffer!==null&&!this.shouldBuffer(o)){this.routeToHandler(o);return}this.consumer.enqueue(o)},window.addEventListener("message",this.listener))}destroy(){this.listener!==null&&(window.removeEventListener("message",this.listener),this.listener=null),this.publisher.clear(),this.consumer.clear(),this.handlers.clear()}get ready(){return this.publisher.ready}get pendingCount(){return this.publisher.pendingCount}post(t){const e=this.getTarget();e!==null&&e.postMessage({...t,_source:this.sourceId},this.targetOrigin)}routeToHandler(t){const e=this.handlers.get(t.type);if(e===void 0)return;const i=e(t);i instanceof Promise&&i.catch(o=>{const r=o instanceof Error?o.message:String(o);console.error(`Virtualdisplay: error handling ${t.type}: ${r}`)})}}class Wt{constructor(t){this.send=t}send;setEnabled(t){this.send({type:N.ANNOTATION_TOGGLE,enabled:t})}}class Xt{constructor(t,e){this.value=t,this.attribute=e}value;attribute;isSelectedValue=!1;get isSelected(){return this.isSelectedValue}setSelected(t){this.isSelectedValue=t}}const q={NO_MAPPING:"NO_MAPPING",ATTRIBUTE_NOT_FOUND:"ATTRIBUTE_NOT_FOUND",VALUE_NOT_FOUND:"VALUE_NOT_FOUND",PARENT_NOT_FOUND:"PARENT_NOT_FOUND",INVALID_PARAMETER:"INVALID_PARAMETER",SNAPSHOT_FAILED:"SNAPSHOT_FAILED"};class x extends Error{code;constructor(t,e){super(t),this.name="VirtualdisplayError",this.code=e}static valueNotFound(t,e){return new x(`Value "${e}" not found for attribute "${t}"`,q.VALUE_NOT_FOUND)}static parentNotFound(t){return new x(`Parent element not found: ${t}`,q.PARENT_NOT_FOUND)}static invalidParameter(t){return new x(t,q.INVALID_PARAMETER)}}class te{name;defaultValue;values;onSelect;onChangeCallback;constructor(t){this.name=t.name,this.defaultValue=t.defaultValue,this.onSelect=t.onSelect,this.values=this.createValues(t.values)}select(t){if(!this.values.has(t))throw x.valueNotFound(this.name,t);this.onSelect(this.name,t)}getValues(){return Array.from(this.values.values())}getValue(t){return this.values.get(t)}get selected(){for(const t of this.values.values())if(t.isSelected)return t.value}onChange(t){this.onChangeCallback=t}handleResult(t){let e;for(const i of this.values.values()){const o=i.value===t;i.setSelected(o),o&&(e=i)}e!==void 0&&this.onChangeCallback!==void 0&&this.onChangeCallback(e)}createValues(t){const e=new Map;for(const i of t){const o=new Xt(i,this.name);i===this.defaultValue&&o.setSelected(!0),e.set(i,o)}return e}}class Pn{attributes=new Map;constructor(t,e,i){for(const o of t){const r=this.buildOptions(o,e);this.attributes.set(o.name,new te(r))}this.onMutationFailed=i}onMutationFailed;get(t){return this.attributes.get(t)}getSelection(){const t={};for(const[e,i]of this.attributes){const o=i.selected;o!==void 0&&(t[e]=o)}return t}handleResults(t){for(const e of t){if(!e.success){this.onMutationFailed?.(e.name,e.value);continue}this.get(e.name)?.handleResult(e.value)}}buildOptions(t,e){const i={name:t.name,values:t.values,onSelect:(o,r)=>{e([{name:o,value:r}],!1)}};return t.defaultValue!==void 0?{...i,defaultValue:t.defaultValue}:i}}function Ln(n){const t=new Date(n.timestamp).toLocaleTimeString("en-GB",{hour12:!1}),e=n.level.toUpperCase().padEnd(5),i=n.trace_id?.slice(0,8)??"--------",o=n.msg,r=["timestamp","level","msg","service","trace_id","span_id"],s=Object.entries(n).filter(([a])=>!r.includes(a)).map(([a,l])=>`${a}=${JSON.stringify(l)}`).join(" ");return`${t} ${e} [${i}] ${o}${s?" "+s:""}`}function On(n){return JSON.stringify(n)}function xn(n,t){const e=t?Ln(n):On(n);n.level==="error"?console.error(e):n.level==="warn"?console.warn(e):console.log(e)}function ee(n,t=0){const e={name:n.name,message:n.message};n.stack!==void 0&&(e.stack=n.stack);for(const i of Object.getOwnPropertyNames(n)){if(i==="name"||i==="message"||i==="stack"||i==="cause")continue;const o=n[i];o!==void 0&&(e[i]=o)}return n.cause!==void 0&&n.cause!==null&&(e.cause=n.cause instanceof Error&&t<5?ee(n.cause,t+1):String(n.cause)),e}function zn(n){const t={};for(const[e,i]of Object.entries(n))t[e]=i instanceof Error?ee(i):i;return t}function Fn(){return new Date}function Dn(n){return n.toISOString()}function ne(){return typeof navigator>"u"?"":navigator.userAgent}function Un(){return typeof navigator>"u"?!1:navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1}function $n(){return/iPhone|iPad|iPod/i.test(ne())||Un()}function qn(){return/Android/i.test(ne())}function Vn(){return $n()||qn()}class jn{constructor(t){this.config=t}config;log(t,e,i={}){const o=this.config.traceProvider?.()??{},r={timestamp:Dn(Fn()),level:t,msg:e,service:this.config.service,...o,...zn(i)};xn(r,this.config.isDev)}debug(t,e){this.config.isDev&&this.log("debug",t,e)}info(t,e){this.log("info",t,e)}warn(t,e){this.log("warn",t,e)}error(t,e){this.log("error",t,e)}}function ie(n,t){const e=t?.isDev!==void 0?t.isDev:typeof process<"u"?process.env.NODE_ENV!=="production":!0;return new jn({service:n,isDev:e,traceProvider:t?.traceProvider})}function ot(n){if(n!==void 0)return typeof n=="object"&&n!==null&&!Array.isArray(n)&&!(n instanceof Error)?n:n instanceof Error?{error:n.message}:{value:n}}function oe(n){return{debug:(t,e)=>n.debug(t,ot(e)),info:(t,e)=>n.info(t,ot(e)),warn:(t,e)=>n.warn(t,ot(e)),error:(t,e)=>n.error(t,ot(e))}}let re=!1;M.logger=oe(ie("client",{isDev:!1}));function se(){re=!0,M.logger=oe(ie("client",{isDev:!0}))}function Hn(){return re}class Gn{constructor(t,e){this.send=t,this.onMutationFailed=e}send;onMutationFailed;registry;pendingCallbacks=[];handleMappingReceived(t){M.logger.debug("Initializing from server mapping",{attributeCount:t.attributes.length}),this.registry=new Pn(t.attributes,(e,i)=>this.sendMutation(e,i),this.onMutationFailed),this.replayPendingCallbacks()}handleMutationResult(t){this.registry?.handleResults(t.results)}select(t,e){this.sendMutation([{name:t,value:e}],!1)}getValues(t){return this.registry?.get(t)?.getValues()??[]}getValue(t,e){return this.registry?.get(t)?.getValue(e)}onChange(t,e){if(this.registry===void 0){this.pendingCallbacks.push({name:t,callback:e});return}const i=this.registry.get(t);if(i===void 0){M.logger.warn(`onChange: attribute "${t}" not found — callback will not fire`);return}i.onChange(e)}getAttribute(t){return this.registry?.get(t)}getSelection(){return this.registry?.getSelection()??{}}get hasMapping(){return this.registry!==void 0}sendMutation(t,e){const i={type:N.MUTATION,mutations:t,isInitial:e};this.send(i)}replayPendingCallbacks(){for(const{name:t,callback:e}of this.pendingCallbacks){const i=this.registry?.get(t);i===void 0&&M.logger.warn(`onChange: attribute "${t}" not found — buffered callback will not fire`),i?.onChange(e)}this.pendingCallbacks.length=0}}let ae=class{constructor(t){this.send=t}send;commands=[];rotate(t){return this.validateFiniteNumber(t,"rotate"),this.commands.push({action:"rotate",value:t}),this}tilt(t){return this.validateFiniteNumber(t,"tilt"),this.commands.push({action:"tilt",value:t}),this}zoom(t){return this.validateFiniteNumber(t,"zoom"),this.commands.push({action:"zoom",value:t}),this}set(){if(this.commands.length===0)throw x.invalidParameter("No camera commands to execute. Call rotate(), tilt(), or zoom() before set().");const t={type:N.CAMERA,commands:this.commands};this.send(t),this.commands=[]}validateFiniteNumber(t,e){if(!Number.isFinite(t))throw x.invalidParameter(`${e}() requires a finite number, got ${String(t)}`)}reset(){const t={type:N.CAMERA,commands:[{action:"reset"}]};this.send(t)}};class Kn{state;limitsState;changeCallbacks=[];constructor(){this.state={rotation:0,tilt:0,zoom:100}}get rotation(){return this.state.rotation}get tilt(){return this.state.tilt}get zoom(){return this.state.zoom}onChange(t){this.changeCallbacks.push(t)}get limits(){return this.limitsState}applyLimits(t){this.limitsState=t;const e={rotation:this.rotation,tilt:this.tilt,zoom:this.zoom};for(const i of this.changeCallbacks)i(e)}handlePositionUpdate(t){this.update(t.transforms)}update(t){let e=!1;for(const i of t)switch(i.type){case"rotation":this.state.rotation=i.value,e=!0;break;case"tilt":this.state.tilt=i.value,e=!0;break;case"zoom":this.state.zoom=i.value,e=!0;break}if(e){const i={rotation:this.rotation,tilt:this.tilt,zoom:this.zoom};for(const o of this.changeCallbacks)o(i)}}}function Yn(n,t){const e=n.filter(r=>Qn(r,t));if(e.length===0)return;const i=Math.max(...e.map(le)),o=e.filter(r=>le(r)===i);return o.length===1?o[0]:void 0}function Qn(n,t){return Object.entries(n.attributes).every(([e,i])=>t[e]===i)}function le(n){return Object.keys(n.attributes).length}class ce{constructor(t,e){this.dispatchChange=t,this.dispatchSubmit=e}dispatchChange;dispatchSubmit;pricing;selection={};resolved;changeCallbacks=[];renderCallbacks=[];submitCallback;submitDefaultLabel;get current(){return this.resolved}get vatDisplay(){return this.pricing?.vatDisplay}get buttonLabel(){const t=this.pricing?.buttonLabel;if(t!=null&&t!=="")return t;if(this.submitDefaultLabel!==void 0&&this.submitDefaultLabel!=="")return this.submitDefaultLabel}get submittable(){return this.submitCallback===void 0?!1:this.pricing===void 0?!0:this.resolved?.availability==="available"}get submitEnabled(){return this.submittable&&this.buttonLabel!==void 0}onChange(t){this.changeCallbacks.push(t)}onSubmit(t,e){this.submitCallback=t,this.submitDefaultLabel=e?.defaultLabel,this.notifyRender()}onRender(t){return this.renderCallbacks.push(t),()=>{const e=this.renderCallbacks.indexOf(t);e!==-1&&this.renderCallbacks.splice(e,1)}}async submit(){if(!this.submittable)return;const t=this.resolved!==void 0?{attributes:this.resolved.attributes,reference:this.resolved.reference}:{attributes:{...this.selection},reference:""};this.dispatchSubmit(t),await this.submitCallback?.(t)}handlePricingReceived(t){this.pricing=t,this.recompute()}handleSelectionChanged(t){this.selection=t,this.recompute()}recompute(){this.resolved=this.resolve();for(const t of this.changeCallbacks)t(this.resolved);this.dispatchChange(this.resolved),this.notifyRender()}notifyRender(){for(const t of this.renderCallbacks)t()}resolve(){if(this.pricing===void 0)return;const t=Yn(this.pricing.rules,this.selection);if(!(t===void 0||t.availability===vn.HIDDEN))return{attributes:{...this.selection},reference:t.reference,price:t.priceCents,currency:this.pricing.currency,availability:t.availability}}}class ue{constructor(t,e){this.send=t,this.dispatch=e}send;dispatch;focused=null;attributes=[];changeCallbacks=[];get current(){return this.focused}set(t){if(typeof t!="string"||t.length===0)throw x.invalidParameter(`set() requires a non-empty component name, got ${String(t)}`);this.send({type:N.FOCUS,action:Jt.FOCUS,component:t})}clear(){this.send({type:N.FOCUS,action:Jt.UNFOCUS})}onChange(t){this.changeCallbacks.push(t)}handleStateReceived(t){t.state===bn.FOCUSED&&t.component!==void 0?(this.focused=t.component,this.attributes=t.attributes??[]):(this.focused=null,this.attributes=[]);const e=this.focused!==null?{component:this.focused,attributes:this.attributes}:null;for(const i of this.changeCallbacks)i(e);this.dispatch(e)}}class de{constructor(t){this.filename=t}filename;developedCallbacks=new Set;errorCallbacks=new Set;developed=!1;failed=!1;photoData=null;onDeveloped(t){return this.developed&&this.photoData!==null?(t(this.photoData),this):(this.developedCallbacks.add(t),this)}onError(t){return this.errorCallbacks.add(t),this}getFilename(){return this.filename}develop(t){this.developed||this.failed||(this.photoData=t,this.developed=!0,this.developedCallbacks.forEach(e=>{e(this.photoData)}),this.developedCallbacks.clear(),this.errorCallbacks.clear())}fail(t){this.developed||this.failed||(this.failed=!0,this.errorCallbacks.forEach(e=>{e(t)}),this.developedCallbacks.clear(),this.errorCallbacks.clear())}}const he=3e4;class fe{constructor(t){this.send=t}send;validExtensions=[".png"];pendingPhotos=new Map;take(t){this.validateFilename(t),M.logger.debug("Taking snapshot",{filename:t});const e=new de(t),i=setTimeout(()=>{this.pendingPhotos.delete(t),M.logger.warn("Snapshot timed out",{filename:t}),e.fail(new x(`Snapshot timed out: the viewer did not respond within ${he}ms`,q.SNAPSHOT_FAILED))},he);return this.pendingPhotos.set(t,{photo:e,timeout:i}),this.send({type:N.SNAPSHOT,filename:t}),e}handleSnapshotResult(t){const e=this.pendingPhotos.get(t.filename);if(e===void 0){M.logger.warn("No pending photo found for filename",{filename:t.filename,pendingFilenames:Array.from(this.pendingPhotos.keys())});return}clearTimeout(e.timeout),this.pendingPhotos.delete(t.filename);const{photo:i}=e;if(t.error!==void 0){i.fail(new x(t.error,q.SNAPSHOT_FAILED));return}t.data!==void 0&&i.develop({filename:t.filename,data:t.data})}clear(){if(this.pendingPhotos.size===0)return;const t=new x("Client destroyed before snapshot completed",q.SNAPSHOT_FAILED);for(const{photo:e,timeout:i}of this.pendingPhotos.values())clearTimeout(i),e.fail(t);this.pendingPhotos.clear()}validateFilename(t){if(t===""||typeof t!="string")throw new x("Filename must be a non-empty string",q.INVALID_PARAMETER);if(!this.validExtensions.some(i=>t.toLowerCase().endsWith(i)))throw new x(`Invalid filename: "${t}". Filename must end with one of: ${this.validExtensions.join(", ")}`,q.INVALID_PARAMETER);if(t.includes("..")||t.includes("/")||t.includes("\\"))throw new x('Filename cannot contain path separators or ".."',q.INVALID_PARAMETER)}}class Jn{container=null;attach(t){this.container=t}dispatch(t,e,i=!1){const o=new CustomEvent(t,{detail:e,cancelable:i});return this.container?.dispatchEvent(o),o}on(t,e){const i=o=>{const r=o,s={...r.detail,preventDefault:()=>{r.preventDefault()}};e(s)};return this.container?.addEventListener(t,i),()=>{this.container?.removeEventListener(t,i)}}}const Zn={},Wn="en",ge=["en","nl","de"],ct=["baseLocale"],me=[];let pe,be;function Xn(n){if(me.length===0)return;const t=typeof n=="string"?n:n.href;if(pe===t)return be;const e=new URL(t,"http://dummy.com");let i;for(const o of me)if(new Zn(o.match,e.href).exec(e.href)){i=o;break}return pe=t,be=i,i}function ve(n){const t=Xn(n);return t&&t.exclude!==!0&&Array.isArray(t.strategy)?t.strategy:ct}const ut=typeof window>"u";globalThis.__paraglide=globalThis.__paraglide??{},globalThis.__paraglide.ssr=globalThis.__paraglide.ssr??{};let ye=!1,B=()=>{let n=ct;!ut&&typeof window<"u"&&window.location?.href&&(n=ve(window.location.href));const t=ti(n);if(t)return ye||(ye=!0,we(t,{reload:!1})),t;throw new Error("No locale found. Read the docs https://paraglidejs.com/errors#no-locale-found")};function ti(n,t){let e;for(const i of n){if(i==="baseLocale")e=Wn;else if(Se(i)&&rt.has(i)){const r=rt.get(i);if(r){const s=r.getLocale();if(s instanceof Promise)continue;if(s!==void 0)return ni(s)}}const o=Ce(e);if(o)return o}}const ei=n=>{window.location.reload()};let we=(n,t)=>{const e={reload:!0,...t};let i;try{i=B()}catch{}const o=[];let r=ct;!ut&&typeof window<"u"&&window.location?.href&&(r=ve(window.location.href));for(const a of r)if(a!=="baseLocale"&&Se(a)&&rt.has(a)){const l=rt.get(a);if(l){let c=l.setLocale(n);c instanceof Promise&&(c=c.catch(u=>{throw new Error(`Custom strategy "${a}" setLocale failed.`,{cause:u})}),o.push(c))}}const s=()=>{!ut&&e.reload&&window.location&&n!==i&&ei()};if(o.length)return Promise.all(o).then(()=>{s()});s()};function Ce(n){if(typeof n!="string")return;const t=n.toLowerCase();for(const e of ge)if(e.toLowerCase()===t)return e}function ni(n){const t=Ce(n);if(t)return t;throw new Error(`Invalid locale: ${n}. Expected one of: ${ge.join(", ")}`)}const rt=new Map;function Se(n){return typeof n=="string"&&/^custom-[A-Za-z0-9_-]+$/.test(n)}const ii=()=>"Activate AR",oi=()=>"AR activeren",ri=()=>"AR aktivieren",si=((n={},t={})=>{const e=t.locale??B();return e==="en"?ii():e==="nl"?oi():ri()}),ai=()=>"Scan to view in AR",li=()=>"Scan om in AR te bekijken",ci=()=>"Scannen für AR-Ansicht",ui=((n={},t={})=>{const e=t.locale??B();return e==="en"?ai():e==="nl"?li():ci()}),di=()=>"Use your smartphone camera to scan this QR code",hi=()=>"Gebruik de camera van je smartphone om deze QR-code te scannen",fi=()=>"Verwende die Kamera deines Smartphones, um diesen QR-Code zu scannen",gi=((n={},t={})=>{const e=t.locale??B();return e==="en"?di():e==="nl"?hi():fi()}),mi=()=>"Your phone will open the 3D model in AR mode.",pi=()=>"Je telefoon opent het 3D-model in AR-modus.",bi=()=>"Dein Telefon öffnet das 3D-Modell im AR-Modus.",vi=((n={},t={})=>{const e=t.locale??B();return e==="en"?mi():e==="nl"?pi():bi()}),yi=()=>"Close",wi=()=>"Sluiten",Ci=()=>"Schließen",Si=((n={},t={})=>{const e=t.locale??B();return e==="en"?yi():e==="nl"?wi():Ci()}),Ei=()=>"Fullscreen",_i=()=>"Volledig scherm",Ai=()=>"Vollbild",ki=((n={},t={})=>{const e=t.locale??B();return e==="en"?Ei():e==="nl"?_i():Ai()}),Ti=()=>"Downloading",Ri=()=>"Downloaden",Ii=()=>"Herunterladen",Ee=((n={},t={})=>{const e=t.locale??B();return e==="en"?Ti():e==="nl"?Ri():Ii()}),Ni=()=>"Rendering",Mi=()=>"Renderen",Bi=()=>"Rendern",Pi=((n={},t={})=>{const e=t.locale??B();return e==="en"?Ni():e==="nl"?Mi():Bi()}),Li=()=>"Screenshot",Oi=()=>"Screenshot",xi=()=>"Screenshot",zi=((n={},t={})=>{const e=t.locale??B();return e==="en"?Li():e==="nl"?Oi():xi()}),Fi=()=>"Configure",Di=()=>"Configureren",Ui=()=>"Konfigurieren",$i=((n={},t={})=>{const e=t.locale??B();return e==="en"?Fi():e==="nl"?Di():Ui()}),qi=()=>"Close",Vi=()=>"Sluiten",ji=()=>"Schließen",Hi=((n={},t={})=>{const e=t.locale??B();return e==="en"?qi():e==="nl"?Vi():ji()}),Gi=()=>"Reset camera",Ki=()=>"Camera resetten",Yi=()=>"Kamera zurücksetzen",Qi=((n={},t={})=>{const e=t.locale??B();return e==="en"?Gi():e==="nl"?Ki():Yi()}),Ji=()=>"Zoom in",Zi=()=>"Inzoomen",Wi=()=>"Hineinzoomen",Xi=((n={},t={})=>{const e=t.locale??B();return e==="en"?Ji():e==="nl"?Zi():Wi()}),to=()=>"Zoom out",eo=()=>"Uitzoomen",no=()=>"Herauszoomen",io=((n={},t={})=>{const e=t.locale??B();return e==="en"?to():e==="nl"?eo():no()}),oo=()=>"Rotate left",ro=()=>"Naar links draaien",so=()=>"Nach links drehen",ao=((n={},t={})=>{const e=t.locale??B();return e==="en"?oo():e==="nl"?ro():so()}),lo=()=>"Rotate right",co=()=>"Naar rechts draaien",uo=()=>"Nach rechts drehen",ho=((n={},t={})=>{const e=t.locale??B();return e==="en"?lo():e==="nl"?co():uo()}),fo=()=>"Tilt up",go=()=>"Omhoog kantelen",mo=()=>"Nach oben kippen",po=((n={},t={})=>{const e=t.locale??B();return e==="en"?fo():e==="nl"?go():mo()}),bo=()=>"Tilt down",vo=()=>"Omlaag kantelen",yo=()=>"Nach unten kippen",wo=((n={},t={})=>{const e=t.locale??B();return e==="en"?bo():e==="nl"?vo():yo()}),Co=()=>"Working…",So=()=>"Bezig…",Eo=()=>"Läuft…",_o=((n={},t={})=>{const e=t.locale??B();return e==="en"?Co():e==="nl"?So():Eo()}),Ao=()=>"Done",ko=()=>"Gelukt",To=()=>"Fertig",Ro=((n={},t={})=>{const e=t.locale??B();return e==="en"?Ao():e==="nl"?ko():To()}),Io=()=>"Failed",No=()=>"Mislukt",Mo=()=>"Fehlgeschlagen",Bo=((n={},t={})=>{const e=t.locale??B();return e==="en"?Io():e==="nl"?No():Mo()});const Po={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};const _e=([n,t,e])=>{const i=document.createElementNS("http://www.w3.org/2000/svg",n);return Object.keys(t).forEach(o=>{i.setAttribute(o,String(t[o]))}),e?.length&&e.forEach(o=>{const r=_e(o);i.appendChild(r)}),i},Ae=(n,t={})=>{const i={...Po,...t};return _e(["svg",i,n])};const Lo=[["path",{d:"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z"}],["path",{d:"m3.3 7 8.7 5 8.7-5"}],["path",{d:"M12 22V12"}]];const Oo=[["path",{d:"M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z"}],["circle",{cx:"12",cy:"13",r:"3"}]];const ke=[["path",{d:"m6 9 6 6 6-6"}]];const xo=[["path",{d:"m15 18-6-6 6-6"}]];const zo=[["path",{d:"m9 18 6-6-6-6"}]];const Fo=[["path",{d:"m18 15-6-6-6 6"}]];const Do=[["path",{d:"M15 3h6v6"}],["path",{d:"m21 3-7 7"}],["path",{d:"m3 21 7-7"}],["path",{d:"M9 21H3v-6"}]];const Uo=[["path",{d:"m14 10 7-7"}],["path",{d:"M20 10h-6V4"}],["path",{d:"m3 21 7-7"}],["path",{d:"M4 14h6v6"}]];const $o=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"}],["path",{d:"M3 3v5h5"}]];const qo=[["path",{d:"M10 5H3"}],["path",{d:"M12 19H3"}],["path",{d:"M14 3v4"}],["path",{d:"M16 17v4"}],["path",{d:"M21 12h-9"}],["path",{d:"M21 19h-5"}],["path",{d:"M21 5h-7"}],["path",{d:"M8 10v4"}],["path",{d:"M8 12H3"}]];const Vo=[["path",{d:"M18 6 6 18"}],["path",{d:"m6 6 12 12"}]];const jo=[["circle",{cx:"11",cy:"11",r:"8"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65"}],["line",{x1:"11",x2:"11",y1:"8",y2:"14"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11"}]];const Ho=[["circle",{cx:"11",cy:"11",r:"8"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11"}]];function D(n,{size:t=20,strokeWidth:e=1.75}={}){return Ae(n,{width:t,height:t,"stroke-width":e})}const z={ar:n=>D(Lo,n),fullscreen:n=>D(Do,n),exitFullscreen:n=>D(Uo,n),screenshot:n=>D(Oo,n),tiltUp:n=>D(Fo,n),tiltDown:n=>D(ke,n),rotateLeft:n=>D(xo,n),rotateRight:n=>D(zo,n),zoomIn:n=>D(jo,n),zoomOut:n=>D(Ho,n),reset:n=>D($o,n),configurator:n=>D(qo,n),close:n=>D(Vo,n)};class F{element;constructor({variant:t="default",size:e="default",label:i,icon:o,onClick:r,disabled:s=!1}={}){this.element=document.createElement("button"),this.element.className=`ui-btn ui-btn--${t} ui-btn--size-${e}`,i!==void 0&&(this.element.setAttribute("aria-label",i),this.element.title=i),o!==void 0?this.element.appendChild(o):i!==void 0&&(this.element.textContent=i),r&&this.element.addEventListener("click",r),this.element.disabled=s}setIcon(t){const e=this.element.querySelector("svg");e!==null?e.replaceWith(t):this.element.appendChild(t)}}const L={semantic:{error:"#dc2626"},neutral:{500:"#737373",600:"#525252",900:"#171717"},white:"#ffffff",black:"#000000"},E={0:"0",.5:"0.125rem",1:"0.25rem",1.5:"0.375rem",2:"0.5rem",3:"0.75rem",4:"1rem",5:"1.25rem",6:"1.5rem",8:"2rem",9:"2.25rem"};class Go{element;constructor(){this.element=document.createElement("div"),Object.assign(this.element.style,{background:L.white,borderRadius:E[3],padding:E[6],boxShadow:`0 ${E[2]} ${E[8]} oklch(0% 0 0 / 20%)`,maxWidth:"20rem",width:"100%"})}}class Ko{constructor(t={}){this.options=t,this.card=new Go,this.backdrop=this.createBackdrop(),this.backdrop.appendChild(this.card.element)}options;card;backdrop;keyHandler=null;open(){document.body.appendChild(this.backdrop),this.keyHandler=t=>{t.key==="Escape"&&this.close()},document.addEventListener("keydown",this.keyHandler)}close(){this.backdrop.remove(),this.keyHandler!==null&&(document.removeEventListener("keydown",this.keyHandler),this.keyHandler=null),this.options.onClose?.()}createBackdrop(){const t=document.createElement("div");return Object.assign(t.style,{position:"fixed",inset:E[0],background:"oklch(0% 0 0 / 50%)",zIndex:"9999",display:"flex",alignItems:"center",justifyContent:"center"}),t.addEventListener("click",e=>{e.target===t&&this.close()}),t}}class Yo{element;selectCallback=null;constructor(t,e,i){this.element=document.createElement("div"),this.element.className="ui-toggle-group";for(let o=0;o<t.length;o++){const r=t[o],s=document.createElement("button");s.className="ui-toggle-group-item",s.dataset.value=r,s.textContent=i?.[o]??r,s.dataset.state=r===e?"on":"off",s.setAttribute("aria-pressed",r===e?"true":"false"),s.addEventListener("click",()=>{this.selectCallback?.(r)}),this.element.appendChild(s)}}setSelected(t){for(const e of this.element.querySelectorAll(".ui-toggle-group-item")){const i=e.dataset.value===t;e.dataset.state=i?"on":"off",e.setAttribute("aria-pressed",i?"true":"false")}}onSelect(t){this.selectCallback=t}}class Qo{element;select;constructor(t,e,i,o,r){this.select=document.createElement("select"),this.select.className="ui-native-select",this.select.dataset.name=t,this.select.setAttribute("aria-label",i);const s=document.createElement("option");s.value="",s.disabled=!0,s.textContent=i,this.select.appendChild(s);let a=!1;for(let c=0;c<e.length;c++){const u=e[c],h=document.createElement("option");h.value=u,h.textContent=r?.[c]??u,u===o&&(h.selected=!0,a=!0),this.select.appendChild(h)}a||(s.selected=!0);const l=Ae(ke,{width:16,height:16,"stroke-width":2});l.classList.add("ui-native-select-icon"),this.element=document.createElement("div"),this.element.className="ui-native-select-wrap",this.element.appendChild(this.select),this.element.appendChild(l)}setSelected(t){this.select.value=t}onSelect(t){this.select.addEventListener("change",()=>{t(this.select.value)})}}const U={fontFamily:{sans:["Mona Sans","ui-sans-serif","system-ui","sans-serif","Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"]},fontSize:{xs:"0.75rem",sm:"0.875rem",base:"1rem",lg:"1.125rem"},fontWeight:{medium:"500",semibold:"600"}},J=U.fontFamily.sans.join(", "),Jo=`
|
|
2
2
|
:root {
|
|
3
3
|
--primary: oklch(5% 0 0);
|
|
4
4
|
--primary-foreground: oklch(100% 0 0);
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
gap: 0.5rem;
|
|
23
23
|
border: 1px solid transparent;
|
|
24
24
|
border-radius: var(--radius);
|
|
25
|
-
font-family: ${
|
|
25
|
+
font-family: ${J};
|
|
26
26
|
font-size: 0.875rem;
|
|
27
27
|
font-weight: 600;
|
|
28
28
|
white-space: nowrap;
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
border-radius: var(--radius);
|
|
80
80
|
background: var(--background);
|
|
81
81
|
color: var(--foreground);
|
|
82
|
-
font-family: ${
|
|
82
|
+
font-family: ${J};
|
|
83
83
|
font-size: 0.875rem;
|
|
84
84
|
font-weight: 600;
|
|
85
85
|
cursor: pointer;
|
|
@@ -118,7 +118,7 @@
|
|
|
118
118
|
background: var(--background);
|
|
119
119
|
appearance: none;
|
|
120
120
|
color: var(--foreground);
|
|
121
|
-
font-family: ${
|
|
121
|
+
font-family: ${J};
|
|
122
122
|
font-size: 0.875rem;
|
|
123
123
|
font-weight: 400;
|
|
124
124
|
cursor: pointer;
|
|
@@ -166,7 +166,7 @@
|
|
|
166
166
|
border: 2px solid oklch(100% 0 0);
|
|
167
167
|
background: var(--primary);
|
|
168
168
|
color: var(--primary-foreground);
|
|
169
|
-
font-family: ${
|
|
169
|
+
font-family: ${J};
|
|
170
170
|
font-size: 0.8125rem;
|
|
171
171
|
font-weight: 600;
|
|
172
172
|
cursor: pointer;
|
|
@@ -240,7 +240,7 @@
|
|
|
240
240
|
}
|
|
241
241
|
|
|
242
242
|
.vd-annotation-popup-title {
|
|
243
|
-
font-family: ${
|
|
243
|
+
font-family: ${J};
|
|
244
244
|
font-size: 0.875rem;
|
|
245
245
|
font-weight: 600;
|
|
246
246
|
line-height: 1.25rem;
|
|
@@ -249,19 +249,51 @@
|
|
|
249
249
|
}
|
|
250
250
|
|
|
251
251
|
.vd-annotation-popup-description {
|
|
252
|
-
font-family: ${
|
|
252
|
+
font-family: ${J};
|
|
253
253
|
font-size: 0.8125rem;
|
|
254
254
|
font-weight: 400;
|
|
255
255
|
line-height: 1.125rem;
|
|
256
256
|
color: var(--muted-foreground);
|
|
257
257
|
margin-block-start: 0.25rem;
|
|
258
258
|
}
|
|
259
|
-
`;let de=!1;function Po(){if(de||typeof document>"u")return;de=!0;const n=document.createElement("style");n.id="vd-ui-vanilla",n.textContent=Bo,document.head.appendChild(n)}function Lo(){return new Date}function Oo(n){return n.toISOString()}function he(){return typeof navigator>"u"?"":navigator.userAgent}function xo(){return typeof navigator>"u"?!1:navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1}function zo(){return/iPhone|iPad|iPod/i.test(he())||xo()}function Do(){return/Android/i.test(he())}function Fo(){return zo()||Do()}class fe{constructor(t){this.send=t}send;setEnabled(t){this.send({type:M.ANNOTATION_TOGGLE,enabled:t})}}class ge{constructor(t,e){this.value=t,this.attribute=e}value;attribute;isSelectedValue=!1;get isSelected(){return this.isSelectedValue}setSelected(t){this.isSelectedValue=t}}const V={NO_MAPPING:"NO_MAPPING",ATTRIBUTE_NOT_FOUND:"ATTRIBUTE_NOT_FOUND",VALUE_NOT_FOUND:"VALUE_NOT_FOUND",PARENT_NOT_FOUND:"PARENT_NOT_FOUND",INVALID_PARAMETER:"INVALID_PARAMETER",SNAPSHOT_FAILED:"SNAPSHOT_FAILED"};class x extends Error{code;constructor(t,e){super(t),this.name="VirtualdisplayError",this.code=e}static valueNotFound(t,e){return new x(`Value "${e}" not found for attribute "${t}"`,V.VALUE_NOT_FOUND)}static parentNotFound(t){return new x(`Parent element not found: ${t}`,V.PARENT_NOT_FOUND)}static invalidParameter(t){return new x(t,V.INVALID_PARAMETER)}}class me{name;defaultValue;values;onSelect;onChangeCallback;constructor(t){this.name=t.name,this.defaultValue=t.defaultValue,this.onSelect=t.onSelect,this.values=this.createValues(t.values)}select(t){if(!this.values.has(t))throw x.valueNotFound(this.name,t);this.onSelect(this.name,t)}getValues(){return Array.from(this.values.values())}getValue(t){return this.values.get(t)}get selected(){for(const t of this.values.values())if(t.isSelected)return t.value}onChange(t){this.onChangeCallback=t}handleResult(t){let e;for(const i of this.values.values()){const o=i.value===t;i.setSelected(o),o&&(e=i)}e!==void 0&&this.onChangeCallback!==void 0&&this.onChangeCallback(e)}createValues(t){const e=new Map;for(const i of t){const o=new ge(i,this.name);i===this.defaultValue&&o.setSelected(!0),e.set(i,o)}return e}}class Uo{attributes=new Map;constructor(t,e,i){for(const o of t){const r=this.buildOptions(o,e);this.attributes.set(o.name,new me(r))}this.onMutationFailed=i}onMutationFailed;get(t){return this.attributes.get(t)}getSelection(){const t={};for(const[e,i]of this.attributes){const o=i.selected;o!==void 0&&(t[e]=o)}return t}handleResults(t){for(const e of t){if(!e.success){this.onMutationFailed?.(e.name,e.value);continue}this.get(e.name)?.handleResult(e.value)}}buildOptions(t,e){const i={name:t.name,values:t.values,onSelect:(o,r)=>{e([{name:o,value:r}],!1)}};return t.defaultValue!==void 0?{...i,defaultValue:t.defaultValue}:i}}function $o(n){const t=new Date(n.timestamp).toLocaleTimeString("en-GB",{hour12:!1}),e=n.level.toUpperCase().padEnd(5),i=n.trace_id?.slice(0,8)??"--------",o=n.msg,r=["timestamp","level","msg","service","trace_id","span_id"],s=Object.entries(n).filter(([a])=>!r.includes(a)).map(([a,l])=>`${a}=${JSON.stringify(l)}`).join(" ");return`${t} ${e} [${i}] ${o}${s?" "+s:""}`}function Vo(n){return JSON.stringify(n)}function qo(n,t){const e=t?$o(n):Vo(n);n.level==="error"?console.error(e):n.level==="warn"?console.warn(e):console.log(e)}function pe(n,t=0){const e={name:n.name,message:n.message};n.stack!==void 0&&(e.stack=n.stack);for(const i of Object.getOwnPropertyNames(n)){if(i==="name"||i==="message"||i==="stack"||i==="cause")continue;const o=n[i];o!==void 0&&(e[i]=o)}return n.cause!==void 0&&n.cause!==null&&(e.cause=n.cause instanceof Error&&t<5?pe(n.cause,t+1):String(n.cause)),e}function jo(n){const t={};for(const[e,i]of Object.entries(n))t[e]=i instanceof Error?pe(i):i;return t}class Ho{constructor(t){this.config=t}config;log(t,e,i={}){const o=this.config.traceProvider?.()??{},r={timestamp:Oo(Lo()),level:t,msg:e,service:this.config.service,...o,...jo(i)};qo(r,this.config.isDev)}debug(t,e){this.config.isDev&&this.log("debug",t,e)}info(t,e){this.log("info",t,e)}warn(t,e){this.log("warn",t,e)}error(t,e){this.log("error",t,e)}}function be(n,t){const e=t?.isDev!==void 0?t.isDev:typeof process<"u"?process.env.NODE_ENV!=="production":!0;return new Ho({service:n,isDev:e,traceProvider:t?.traceProvider})}function rt(n){if(n!==void 0)return typeof n=="object"&&n!==null&&!Array.isArray(n)&&!(n instanceof Error)?n:n instanceof Error?{error:n.message}:{value:n}}function ve(n){return{debug:(t,e)=>n.debug(t,rt(e)),info:(t,e)=>n.info(t,rt(e)),warn:(t,e)=>n.warn(t,rt(e)),error:(t,e)=>n.error(t,rt(e))}}let ye=!1;N.logger=ve(be("client",{isDev:!1}));function we(){ye=!0,N.logger=ve(be("client",{isDev:!0}))}function Go(){return ye}class Ko{constructor(t,e){this.send=t,this.onMutationFailed=e}send;onMutationFailed;registry;pendingCallbacks=[];handleMappingReceived(t){N.logger.debug("Initializing from server mapping",{attributeCount:t.attributes.length}),this.registry=new Uo(t.attributes,(e,i)=>this.sendMutation(e,i),this.onMutationFailed),this.replayPendingCallbacks()}handleMutationResult(t){this.registry?.handleResults(t.results)}select(t,e){this.sendMutation([{name:t,value:e}],!1)}getValues(t){return this.registry?.get(t)?.getValues()??[]}getValue(t,e){return this.registry?.get(t)?.getValue(e)}onChange(t,e){if(this.registry===void 0){this.pendingCallbacks.push({name:t,callback:e});return}const i=this.registry.get(t);if(i===void 0){N.logger.warn(`onChange: attribute "${t}" not found — callback will not fire`);return}i.onChange(e)}getAttribute(t){return this.registry?.get(t)}getSelection(){return this.registry?.getSelection()??{}}get hasMapping(){return this.registry!==void 0}sendMutation(t,e){const i={type:M.MUTATION,mutations:t,isInitial:e};this.send(i)}replayPendingCallbacks(){for(const{name:t,callback:e}of this.pendingCallbacks){const i=this.registry?.get(t);i===void 0&&N.logger.warn(`onChange: attribute "${t}" not found — buffered callback will not fire`),i?.onChange(e)}this.pendingCallbacks.length=0}}class Ce{constructor(t){this.send=t}send;commands=[];rotate(t){return this.validateFiniteNumber(t,"rotate"),this.commands.push({action:"rotate",value:t}),this}tilt(t){return this.validateFiniteNumber(t,"tilt"),this.commands.push({action:"tilt",value:t}),this}zoom(t){return this.validateFiniteNumber(t,"zoom"),this.commands.push({action:"zoom",value:t}),this}set(){if(this.commands.length===0)throw x.invalidParameter("No camera commands to execute. Call rotate(), tilt(), or zoom() before set().");const t={type:M.CAMERA,commands:this.commands};this.send(t),this.commands=[]}validateFiniteNumber(t,e){if(!Number.isFinite(t))throw x.invalidParameter(`${e}() requires a finite number, got ${String(t)}`)}reset(){const t={type:M.CAMERA,commands:[{action:"reset"}]};this.send(t)}}class Yo{state;limitsState;changeCallbacks=[];constructor(){this.state={rotation:0,tilt:0,zoom:100}}get rotation(){return this.state.rotation}get tilt(){return this.state.tilt}get zoom(){return this.state.zoom}onChange(t){this.changeCallbacks.push(t)}get limits(){return this.limitsState}applyLimits(t){this.limitsState=t;const e={rotation:this.rotation,tilt:this.tilt,zoom:this.zoom};for(const i of this.changeCallbacks)i(e)}handlePositionUpdate(t){this.update(t.transforms)}update(t){let e=!1;for(const i of t)switch(i.type){case"rotation":this.state.rotation=i.value,e=!0;break;case"tilt":this.state.tilt=i.value,e=!0;break;case"zoom":this.state.zoom=i.value,e=!0;break}if(e){const i={rotation:this.rotation,tilt:this.tilt,zoom:this.zoom};for(const o of this.changeCallbacks)o(i)}}}function Jo(n,t){const e=n.filter(r=>Zo(r,t));if(e.length===0)return;const i=Math.max(...e.map(Ee)),o=e.filter(r=>Ee(r)===i);return o.length===1?o[0]:void 0}function Zo(n,t){return Object.entries(n.attributes).every(([e,i])=>t[e]===i)}function Ee(n){return Object.keys(n.attributes).length}class _e{constructor(t,e){this.dispatchChange=t,this.dispatchSubmit=e}dispatchChange;dispatchSubmit;pricing;selection={};resolved;changeCallbacks=[];renderCallbacks=[];submitCallback;submitDefaultLabel;get current(){return this.resolved}get vatDisplay(){return this.pricing?.vatDisplay}get buttonLabel(){const t=this.pricing?.buttonLabel;if(t!=null&&t!=="")return t;if(this.submitDefaultLabel!==void 0&&this.submitDefaultLabel!=="")return this.submitDefaultLabel}get submittable(){return this.submitCallback===void 0?!1:this.pricing===void 0?!0:this.resolved?.availability==="available"}get submitEnabled(){return this.submittable&&this.buttonLabel!==void 0}onChange(t){this.changeCallbacks.push(t)}onSubmit(t,e){this.submitCallback=t,this.submitDefaultLabel=e?.defaultLabel,this.notifyRender()}onRender(t){return this.renderCallbacks.push(t),()=>{const e=this.renderCallbacks.indexOf(t);e!==-1&&this.renderCallbacks.splice(e,1)}}async submit(){if(!this.submittable)return;const t=this.resolved!==void 0?{attributes:this.resolved.attributes,reference:this.resolved.reference}:{attributes:{...this.selection},reference:""};this.dispatchSubmit(t),await this.submitCallback?.(t)}handlePricingReceived(t){this.pricing=t,this.recompute()}handleSelectionChanged(t){this.selection=t,this.recompute()}recompute(){this.resolved=this.resolve();for(const t of this.changeCallbacks)t(this.resolved);this.dispatchChange(this.resolved),this.notifyRender()}notifyRender(){for(const t of this.renderCallbacks)t()}resolve(){if(this.pricing===void 0)return;const t=Jo(this.pricing.rules,this.selection);if(!(t===void 0||t.availability===bn.HIDDEN))return{attributes:{...this.selection},reference:t.reference,price:t.priceCents,currency:this.pricing.currency,availability:t.availability}}}class Se{constructor(t,e){this.send=t,this.dispatch=e}send;dispatch;focused=null;attributes=[];changeCallbacks=[];get current(){return this.focused}set(t){if(typeof t!="string"||t.length===0)throw x.invalidParameter(`set() requires a non-empty component name, got ${String(t)}`);this.send({type:M.FOCUS,action:Zt.FOCUS,component:t})}clear(){this.send({type:M.FOCUS,action:Zt.UNFOCUS})}onChange(t){this.changeCallbacks.push(t)}handleStateReceived(t){t.state===pn.FOCUSED&&t.component!==void 0?(this.focused=t.component,this.attributes=t.attributes??[]):(this.focused=null,this.attributes=[]);const e=this.focused!==null?{component:this.focused,attributes:this.attributes}:null;for(const i of this.changeCallbacks)i(e);this.dispatch(e)}}class Ae{constructor(t){this.filename=t}filename;developedCallbacks=new Set;errorCallbacks=new Set;developed=!1;failed=!1;photoData=null;onDeveloped(t){return this.developed&&this.photoData!==null?(t(this.photoData),this):(this.developedCallbacks.add(t),this)}onError(t){return this.errorCallbacks.add(t),this}getFilename(){return this.filename}develop(t){this.developed||this.failed||(this.photoData=t,this.developed=!0,this.developedCallbacks.forEach(e=>{e(this.photoData)}),this.developedCallbacks.clear(),this.errorCallbacks.clear())}fail(t){this.developed||this.failed||(this.failed=!0,this.errorCallbacks.forEach(e=>{e(t)}),this.developedCallbacks.clear(),this.errorCallbacks.clear())}}const ke=3e4;class Te{constructor(t){this.send=t}send;validExtensions=[".png"];pendingPhotos=new Map;take(t){this.validateFilename(t),N.logger.debug("Taking snapshot",{filename:t});const e=new Ae(t),i=setTimeout(()=>{this.pendingPhotos.delete(t),N.logger.warn("Snapshot timed out",{filename:t}),e.fail(new x(`Snapshot timed out: the viewer did not respond within ${ke}ms`,V.SNAPSHOT_FAILED))},ke);return this.pendingPhotos.set(t,{photo:e,timeout:i}),this.send({type:M.SNAPSHOT,filename:t}),e}handleSnapshotResult(t){const e=this.pendingPhotos.get(t.filename);if(e===void 0){N.logger.warn("No pending photo found for filename",{filename:t.filename,pendingFilenames:Array.from(this.pendingPhotos.keys())});return}clearTimeout(e.timeout),this.pendingPhotos.delete(t.filename);const{photo:i}=e;if(t.error!==void 0){i.fail(new x(t.error,V.SNAPSHOT_FAILED));return}t.data!==void 0&&i.develop({filename:t.filename,data:t.data})}clear(){if(this.pendingPhotos.size===0)return;const t=new x("Client destroyed before snapshot completed",V.SNAPSHOT_FAILED);for(const{photo:e,timeout:i}of this.pendingPhotos.values())clearTimeout(i),e.fail(t);this.pendingPhotos.clear()}validateFilename(t){if(t===""||typeof t!="string")throw new x("Filename must be a non-empty string",V.INVALID_PARAMETER);if(!this.validExtensions.some(i=>t.toLowerCase().endsWith(i)))throw new x(`Invalid filename: "${t}". Filename must end with one of: ${this.validExtensions.join(", ")}`,V.INVALID_PARAMETER);if(t.includes("..")||t.includes("/")||t.includes("\\"))throw new x('Filename cannot contain path separators or ".."',V.INVALID_PARAMETER)}}class Wo{container=null;attach(t){this.container=t}dispatch(t,e,i=!1){const o=new CustomEvent(t,{detail:e,cancelable:i});return this.container?.dispatchEvent(o),o}on(t,e){const i=o=>{const r=o,s={...r.detail,preventDefault:()=>{r.preventDefault()}};e(s)};return this.container?.addEventListener(t,i),()=>{this.container?.removeEventListener(t,i)}}}function F(n,{size:t=20,strokeWidth:e=1.75}={}){return Xt(n,{width:t,height:t,"stroke-width":e})}const D={ar:n=>F(Bn,n),fullscreen:n=>F(zn,n),exitFullscreen:n=>F(Dn,n),screenshot:n=>F(Pn,n),tiltUp:n=>F(xn,n),tiltDown:n=>F(te,n),rotateLeft:n=>F(Ln,n),rotateRight:n=>F(On,n),zoomIn:n=>F(Vn,n),zoomOut:n=>F(qn,n),reset:n=>F(Fn,n),configurator:n=>F(Un,n),close:n=>F($n,n)};function Re(n){const t=Math.max(0,Math.min(1,n));return t*t*(3-2*t)}function Qo(n,t,e,i,o,r){const[s,a,l]=n,c=Math.cos(t),u=Math.sin(t),h=c*s+u*l,f=-u*s+c*l,d=Math.cos(e),p=Math.sin(e),k=d*a-p*f,P=p*a+d*f,_=.55;return[i+h*r*_,o-k*r*_,P]}function Xo(n,t,e){n.beginPath(),n.moveTo(t[0],t[1]),n.lineTo(e[0],e[1]),n.strokeStyle="#000",n.lineWidth=2,n.stroke()}function tr(n,t,e,i,o){const r=t(e),s=t(i),a=[r[0]+(s[0]-r[0])*o,r[1]+(s[1]-r[1])*o,r[2]];Xo(n,r,a)}const dt=[-1,-1,1],ht=[1,-1,1],ft=[1,-1,-1],gt=[-1,-1,-1],mt=[-1,1,1],pt=[1,1,1],bt=[1,1,-1],vt=[-1,1,-1],Ie=[[dt,ht],[ht,ft],[ft,gt],[gt,dt],[dt,mt],[ht,pt],[ft,bt],[gt,vt],[mt,pt],[pt,bt],[bt,vt],[vt,mt]],er=400,Ne='-apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif';function nr(){const n=document.createElement("div");Object.assign(n.style,{position:"absolute",inset:"0",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",background:"#fff",zIndex:"20",opacity:"0",transition:"opacity 0.3s ease-in-out"});const t=document.createElement("canvas");Object.assign(t.style,{width:"100%",height:"100%",position:"absolute",inset:"0"});const e=document.createElement("div");Object.assign(e.style,{position:"absolute",top:"56%",left:"0",right:"0",textAlign:"center",pointerEvents:"none"});const i=document.createElement("span");Object.assign(i.style,{fontSize:"13px",fontWeight:"400",color:"#000",fontVariantNumeric:"tabular-nums",fontFamily:Ne});const o=document.createElement("span");return Object.assign(o.style,{fontSize:"13px",color:"#000",fontFamily:Ne}),o.textContent=ue(),e.appendChild(i),e.appendChild(o),n.appendChild(t),n.appendChild(e),{overlay:n,canvas:t,pctEl:i,phaseEl:o}}class ir{overlay;canvas;ctx;pctEl;phaseEl;animationId=null;showTimerId=null;startTime;hidden=!1;visible=!1;constructor(t,e={}){this.startTime=performance.now();const i=nr();this.overlay=i.overlay,this.canvas=i.canvas,this.pctEl=i.pctEl,this.phaseEl=i.phaseEl,t.appendChild(this.overlay),this.ctx=this.canvas.getContext("2d"),this.ctx!==null&&(this.sizeCanvas(),this.tick());const o=e.showDelay??er;this.showTimerId=setTimeout(()=>{this.reveal()},o)}get loadingTexts(){return{downloading:ue(),rendering:Ni()}}updateProgress(t,e){this.hidden||(this.pctEl.textContent=`${Math.round(t)}%`,this.phaseEl.textContent=e!==""?` · ${e}`:"")}showError(t){if(this.hidden=!1,this.animationId!==null&&(cancelAnimationFrame(this.animationId),this.animationId=null),this.ctx!==null){const e=Math.min(devicePixelRatio,2),i=this.canvas.width/e,o=this.canvas.height/e;this.ctx.fillStyle="#fff",this.ctx.fillRect(0,0,i*e,o*e)}this.pctEl.textContent="",this.phaseEl.textContent=t,this.phaseEl.style.color="#b91c1c",this.reveal()}hide(){if(!this.hidden){if(this.hidden=!0,this.cancelShowTimer(),!this.visible){this.destroy();return}this.overlay.style.opacity="0",this.overlay.addEventListener("transitionend",()=>{this.destroy()},{once:!0}),setTimeout(()=>{this.destroy()},500)}}destroy(){this.cancelShowTimer(),this.animationId!==null&&(cancelAnimationFrame(this.animationId),this.animationId=null),this.overlay.remove()}reveal(){this.hidden||this.visible||(this.visible=!0,this.overlay.style.opacity="1")}cancelShowTimer(){this.showTimerId!==null&&(clearTimeout(this.showTimerId),this.showTimerId=null)}sizeCanvas(){if(this.ctx===null)return;const t=Math.min(devicePixelRatio,2),e=this.overlay.clientWidth||440,i=this.overlay.clientHeight||360;this.canvas.width=e*t,this.canvas.height=i*t,this.ctx.scale(t,t),this.ctx.lineCap="round",this.ctx.lineJoin="round"}tick=()=>{this.hidden||(this.drawFrame(),this.animationId=requestAnimationFrame(this.tick))};drawFrame(){if(this.ctx===null)return;const t=this.canvas.width/Math.min(devicePixelRatio,2),e=this.canvas.height/Math.min(devicePixelRatio,2),i=(performance.now()-this.startTime)/1e3;this.ctx.fillStyle="#fff",this.ctx.fillRect(0,0,t,e);const o=t/2,r=e*.44,s=Math.min(t,e)*.08,a=.785,l=.615,c=p=>Qo(p,a,l,o,r,s),u=6,h=i%u/u,f=Ie.length;let d;h<.35?d=Re(h/.35)*f:h<.55?d=f:h<.9?d=(1-Re((h-.55)/.35))*f:d=0,this.ctx.shadowBlur=5,this.ctx.shadowColor="rgba(30,30,30,0.08)";for(let p=0;p<f&&!(p>=d);p++){const k=Ie[p];if(k===void 0)continue;const P=Math.min(1,d-p);tr(this.ctx,c,k[0],k[1],P)}this.ctx.shadowBlur=0}}class or{constructor(t){this.options=t,this.element=document.createElement("div"),Object.assign(this.element.style,{display:"flex",gap:"0.375rem"}),this.onFullscreenChange=()=>{this.setFullscreenIcon(document.fullscreenElement!==null)},document.addEventListener("fullscreenchange",this.onFullscreenChange)}options;element;arBtn=null;fullscreenBtn=null;onFullscreenChange;setFullscreenIcon(t){this.fullscreenBtn!==null&&this.fullscreenBtn.setIcon(t?D.exitFullscreen():D.fullscreen())}syncButton(t,e,i){if(e&&t===null){const o=i();return this.element.appendChild(o.element),o}return!e&&t!==null?(t.element.remove(),null):t}applySettings(t){this.arBtn=this.syncButton(this.arBtn,t.ar!==!1&&this.options.onAr!==void 0,()=>new z({variant:"outline",size:"icon",label:ii(),icon:D.ar(),onClick:()=>{this.options.onAr?.()}})),this.fullscreenBtn=this.syncButton(this.fullscreenBtn,t.fullscreen!==!1&&this.options.onFullscreen!==void 0,()=>new z({variant:"outline",size:"icon",label:_i(),icon:D.fullscreen(),onClick:()=>{this.options.onFullscreen?.()}}))}destroy(){document.removeEventListener("fullscreenchange",this.onFullscreenChange)}}const W=.5;class st{element;constructor(t,e){this.element=Object.assign(document.createElement("div"),{className:"vd-camera-controls"});const i={targetRotation:e.rotation,targetTilt:e.tilt,targetZoom:e.zoom,thetaOffset:0},o=rr(t,e,i);e.onChange(r=>{i.targetRotation=r.rotation-i.thetaOffset,i.targetTilt=r.tilt,i.targetZoom=r.zoom,sr(o,e,r)}),this.element.appendChild(st.buildZoom(o.zoomOut,o.zoomIn)),this.element.appendChild(st.buildDpad(o.tiltUp,o.rotateLeft,o.reset,o.rotateRight,o.tiltDown))}static buildZoom(t,e){const i=document.createElement("div");return i.className="vd-zoom",i.appendChild(t.element),i.appendChild(e.element),i}static buildDpad(t,e,i,o,r){const s=document.createElement("div");s.className="vd-dpad";for(const[a,l]of[[t,"up"],[e,"left"],[i,"center"],[o,"right"],[r,"down"]])a.element.classList.add(`vd-dpad-${l}`),s.appendChild(a.element);return s}}function rr(n,t,e){const i=s=>Math.max(t.limits?.minZoom??1,Math.min(t.limits?.maxZoom??1/0,s)),o=s=>{const a=t.limits?.minRotate,l=t.limits?.maxRotate;return a!==void 0||l!==void 0?Math.max(a??-1/0,Math.min(l??1/0,s)):s},r=s=>{const a=t.limits?.minTilt,l=t.limits?.maxTilt;if(a!==void 0||l!==void 0){e.targetTilt=Math.max(a??0,Math.min(l??180,e.targetTilt+s)),n.tilt(e.targetTilt).set();return}const c=e.targetTilt+s;c>180||c<0?(e.targetTilt=c>180?360-c:-c,e.thetaOffset=(e.thetaOffset+180)%360,n.tilt(e.targetTilt).rotate(e.targetRotation+e.thetaOffset).set()):(e.targetTilt=c,n.tilt(e.targetTilt).set())};return{zoomOut:new z({variant:"outline",size:"icon",label:to(),icon:D.zoomOut(),onClick:()=>{e.targetZoom=i(e.targetZoom-10),n.zoom(e.targetZoom).set()}}),zoomIn:new z({variant:"outline",size:"icon",label:Zi(),icon:D.zoomIn(),onClick:()=>{e.targetZoom=i(e.targetZoom+10),n.zoom(e.targetZoom).set()}}),tiltUp:new z({variant:"outline",size:"icon",label:fo(),icon:D.tiltUp(),onClick:()=>{r(-15)}}),rotateLeft:new z({variant:"outline",size:"icon",label:oo(),icon:D.rotateLeft(),onClick:()=>{e.targetRotation=o(e.targetRotation-15),n.rotate(e.targetRotation+e.thetaOffset).set()}}),reset:new z({variant:"outline",size:"icon",label:Gi(),icon:D.reset(),onClick:()=>{e.thetaOffset=0,n.reset()}}),rotateRight:new z({variant:"outline",size:"icon",label:lo(),icon:D.rotateRight(),onClick:()=>{e.targetRotation=o(e.targetRotation+15),n.rotate(e.targetRotation+e.thetaOffset).set()}}),tiltDown:new z({variant:"outline",size:"icon",label:bo(),icon:D.tiltDown(),onClick:()=>{r(15)}})}}function sr(n,t,e){const i=t.limits;i!==void 0&&(n.zoomOut.element.disabled=i.minZoom!==void 0&&e.zoom<=i.minZoom+W,n.zoomIn.element.disabled=i.maxZoom!==void 0&&e.zoom>=i.maxZoom-W,n.tiltUp.element.disabled=i.minTilt!==void 0&&e.tilt<=i.minTilt+W,n.tiltDown.element.disabled=i.maxTilt!==void 0&&e.tilt>=i.maxTilt-W,n.rotateLeft.element.disabled=i.minRotate!==void 0&&e.rotation<=i.minRotate+W,n.rotateRight.element.disabled=i.maxRotate!==void 0&&e.rotation>=i.maxRotate-W)}const Q={SELECT:"ui:select",SELECTED:"ui:selected",FOCUS_CHANGE:"vd:focus-change",CONFIGURATION_CHANGE:"vd:configuration-change",CONFIGURATION_SUBMIT:"vd:configuration-submit"},ar=5;let lr=0;function yt(n){const t=n.replace(/([A-Z])/g," $1").trim();return t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()}function cr(n,t,e,i,o){const r=document.createElement("div");r.className="vd-attribute",r.dataset.name=n.name;const s=document.createElement("span");s.className="vd-attribute-label",s.textContent=yt(n.name),s.id=`vd-attribute-label-${lr++}`,r.appendChild(s),r.setAttribute("role","group"),r.setAttribute("aria-labelledby",s.id);const a=n.values.find(u=>t.getValue(n.name,u)?.isSelected===!0),l=n.values.map(yt),c=n.values.length<=ar?new Gn(n.values,a,l):new Kn(n.name,n.values,yt(n.name),a,l);return c.onSelect(u=>{e.dispatch(Q.SELECT,{attribute:n.name,value:u},!0).defaultPrevented||i(n.name,u)}),o(n.name,u=>{c.setSelected(u.value),e.dispatch(Q.SELECTED,{attribute:n.name,value:u.value})}),r.appendChild(c.element),r}const ur=80,dr=2500;class hr{constructor(t,e=dr){this.configuration=t,this.resetMs=e,this.element=document.createElement("div"),this.element.className="vd-commerce vd-hidden";const i=document.createElement("div");i.className="vd-commerce-price",this.priceEl=document.createElement("span"),this.priceEl.className="vd-price",this.vatEl=document.createElement("span"),this.vatEl.className="vd-vat",i.append(this.priceEl,this.vatEl),this.button=new z({variant:"default",onClick:()=>{this.handleSubmit()}}),this.button.element.classList.add("vd-cta","vd-hidden"),this.element.append(i,this.button.element),this.unsubscribe=this.configuration.onRender(()=>{this.update()}),this.update()}configuration;resetMs;element;priceEl;vatEl;button;unsubscribe;state="idle";resetTimer;update(){this.renderPrice(this.configuration.current),this.renderButton();const t=this.configuration.current!==void 0||this.configuration.submitEnabled;this.element.classList.toggle("vd-hidden",!t)}destroy(){this.unsubscribe(),this.resetTimer!==void 0&&clearTimeout(this.resetTimer),this.element.remove()}renderPrice(t){if(t===void 0){this.priceEl.textContent="",this.vatEl.textContent="";return}this.priceEl.textContent=fr(t.price,t.currency),this.vatEl.textContent=Me(this.configuration.vatDisplay)}renderButton(){const t=this.configuration.submitEnabled;this.button.element.classList.toggle("vd-hidden",!t),t&&this.state==="idle"&&this.setButtonText(Me(this.configuration.buttonLabel))}async handleSubmit(){if(this.state!=="busy"){this.setState("busy",Co());try{await this.configuration.submit(),this.setState("success",Ao())}catch{this.setState("failed",Io())}this.scheduleReset()}}scheduleReset(){this.resetTimer!==void 0&&clearTimeout(this.resetTimer),this.resetTimer=setTimeout(()=>{this.state="idle",this.update()},this.resetMs)}setState(t,e){this.state=t,this.element.dataset.submit=t,this.button.element.disabled=t==="busy",this.setButtonText(e)}setButtonText(t){this.button.element.textContent=t,this.button.element.setAttribute("aria-label",t)}}function Me(n){return(n??"").slice(0,ur)}function fr(n,t){try{const e=new Intl.NumberFormat(B(),{style:"currency",currency:t}),i=e.resolvedOptions().maximumFractionDigits??2;return e.format(n/10**i)}catch{return`${t} ${(n/100).toFixed(2)}`}}class Be{slot=null;panel=null;attach(t,e){this.panel=e,e.style.display="none",this.slot=document.createElement("div"),this.slot.className="vd-slot-bottom-left",this.slot.appendChild(e),t.appendChild(this.slot)}setVisible(t){this.panel!==null&&(this.panel.style.display=t?"flex":"none")}destroy(){this.slot?.remove(),this.slot=null,this.panel=null}}const gr=572;class mr{element=null;body=null;openButton=null;closeButton=null;container=null;observer=null;collapsible=!1;expanded=!0;visible=!1;attach(t,e){this.container=t,e.classList.add("vd-attributes-sidebar"),this.closeButton=new z({variant:"ghost",size:"icon-sm",label:Vi(),icon:D.close({size:18}),onClick:()=>{this.expanded=!1,this.render()}});const i=document.createElement("div");i.className="vd-sidebar-header",i.appendChild(this.closeButton.element),this.body=document.createElement("div"),this.body.className="vd-sidebar-body",this.body.appendChild(e),this.element=document.createElement("div"),this.element.className="vd-sidebar vd-hidden",this.element.append(i,this.body),t.appendChild(this.element),this.openButton=new z({variant:"outline",size:"default",label:Di(),icon:D.configurator({size:18}),onClick:()=>{this.expanded=!0,this.render()}}),this.openButton.element.classList.add("vd-configurator-toggle","vd-hidden"),t.appendChild(this.openButton.element),this.observe()}setVisible(t){this.visible=t,this.render()}destroy(){this.observer?.disconnect(),this.observer=null,this.openButton?.element.remove(),this.element?.remove(),this.container?.classList.remove("vd-layout-sidebar-right","vd-layout-sidebar-collapsed"),this.container=null}observe(){typeof ResizeObserver>"u"||this.container===null||(this.observer=new ResizeObserver(t=>{const e=t[0]?.contentRect.width??0;this.setCollapsible(e>0&&e<gr)}),this.observer.observe(this.container))}setCollapsible(t){t!==this.collapsible&&(this.collapsible=t,this.expanded=!t,this.render())}render(){if(this.element===null||this.openButton===null||this.closeButton===null||this.container===null)return;const t=this.visible&&this.expanded,e=this.visible&&!this.expanded;this.element.classList.toggle("vd-hidden",!this.visible),this.element.classList.toggle("vd-sidebar-collapsed",e),this.openButton.element.classList.toggle("vd-hidden",!e),this.closeButton.element.style.display=this.collapsible?"":"none",this.container.classList.toggle("vd-layout-sidebar-right",t),this.container.classList.toggle("vd-layout-sidebar-collapsed",e)}}class pr{attach(t,e){}setVisible(t){}destroy(){}}const br={"inframe-bottom-left":()=>new Be,"sidebar-right":()=>new mr,hidden:()=>new pr};function vr(n){return(br[n??""]??(()=>new Be))()}const wt=U.fontFamily.sans.join(", "),Ct=`
|
|
259
|
+
|
|
260
|
+
/* ── QR modal ────────────────────────────────────────────── */
|
|
261
|
+
/* The slot the QR renders into. While loading it is a calm pulsing
|
|
262
|
+
placeholder of the same size, so the modal opens instantly and the QR
|
|
263
|
+
swaps in without any layout shift. */
|
|
264
|
+
.ui-qr-slot {
|
|
265
|
+
inline-size: 6rem;
|
|
266
|
+
block-size: 6rem;
|
|
267
|
+
border-radius: 0.25rem;
|
|
268
|
+
overflow: hidden;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
.ui-qr-slot img {
|
|
272
|
+
inline-size: 100%;
|
|
273
|
+
block-size: 100%;
|
|
274
|
+
display: block;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
.ui-qr-slot--loading {
|
|
278
|
+
background: var(--secondary);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
282
|
+
.ui-qr-slot--loading {
|
|
283
|
+
animation: vd-qr-pulse 1.6s ease-in-out infinite;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
@keyframes vd-qr-pulse {
|
|
288
|
+
0%, 100% { opacity: 1; }
|
|
289
|
+
50% { opacity: 0.55; }
|
|
290
|
+
}
|
|
291
|
+
`;let Te=!1;function Re(){if(Te||typeof document>"u")return;Te=!0;const n=document.createElement("style");n.id="vd-ui-vanilla",n.textContent=Jo,document.head.appendChild(n)}const Zo=U.fontFamily.sans.join(", ");class Wo{qrLib=null;dialog=null;qrSlot=null;show(){this.hide(),Re(),this.dialog=new Ko({onClose:()=>{this.dialog=null,this.qrSlot=null}}),Object.assign(this.dialog.card.element.style,{display:"flex",flexDirection:"column",alignItems:"center",gap:E[3],fontFamily:Zo}),this.dialog.card.element.appendChild(this.createText(ui(),{fontSize:U.fontSize.base,fontWeight:U.fontWeight.semibold,color:L.neutral[900]})),this.dialog.card.element.appendChild(this.createText(gi(),{fontSize:U.fontSize.sm,color:L.neutral[600]})),this.qrSlot=this.createQrSlot(),this.dialog.card.element.appendChild(this.qrSlot),this.dialog.card.element.appendChild(this.createText(vi(),{fontSize:U.fontSize.xs,color:L.neutral[500]}));const t=new F({variant:"outline",label:Si(),onClick:()=>{this.hide()}});this.dialog.card.element.appendChild(t.element),this.dialog.open()}async update(t){this.qrLib??=await Promise.resolve().then(()=>os);const e=await this.qrLib.toDataURL(t,{width:256,margin:4,errorCorrectionLevel:"M",color:{dark:L.black,light:L.white}});return this.qrSlot===null?!1:(this.qrSlot.classList.remove("ui-qr-slot--loading"),this.qrSlot.replaceChildren(this.createQrImage(e)),!0)}hide(){this.dialog?.close(),this.dialog=null,this.qrSlot=null}createText(t,e){const i=document.createElement("p");return i.textContent=t,Object.assign(i.style,{margin:"0",textAlign:"center",...e}),i}createQrSlot(){const t=document.createElement("div");return t.className="ui-qr-slot ui-qr-slot--loading",t}createQrImage(t){const e=document.createElement("img");return e.src=t,e.alt="QR code",e}}function Ie(n){const t=Math.max(0,Math.min(1,n));return t*t*(3-2*t)}function Xo(n,t,e,i,o,r){const[s,a,l]=n,c=Math.cos(t),u=Math.sin(t),h=c*s+u*l,f=-u*s+c*l,d=Math.cos(e),p=Math.sin(e),k=d*a-p*f,P=p*a+d*f,S=.55;return[i+h*r*S,o-k*r*S,P]}function tr(n,t,e){n.beginPath(),n.moveTo(t[0],t[1]),n.lineTo(e[0],e[1]),n.strokeStyle="#000",n.lineWidth=2,n.stroke()}function er(n,t,e,i,o){const r=t(e),s=t(i),a=[r[0]+(s[0]-r[0])*o,r[1]+(s[1]-r[1])*o,r[2]];tr(n,r,a)}const dt=[-1,-1,1],ht=[1,-1,1],ft=[1,-1,-1],gt=[-1,-1,-1],mt=[-1,1,1],pt=[1,1,1],bt=[1,1,-1],vt=[-1,1,-1],Ne=[[dt,ht],[ht,ft],[ft,gt],[gt,dt],[dt,mt],[ht,pt],[ft,bt],[gt,vt],[mt,pt],[pt,bt],[bt,vt],[vt,mt]],nr=400,Me='-apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif';function ir(){const n=document.createElement("div");Object.assign(n.style,{position:"absolute",inset:"0",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",background:"#fff",zIndex:"20",opacity:"0",transition:"opacity 0.3s ease-in-out"});const t=document.createElement("canvas");Object.assign(t.style,{width:"100%",height:"100%",position:"absolute",inset:"0"});const e=document.createElement("div");Object.assign(e.style,{position:"absolute",top:"56%",left:"0",right:"0",textAlign:"center",pointerEvents:"none"});const i=document.createElement("span");Object.assign(i.style,{fontSize:"13px",fontWeight:"400",color:"#000",fontVariantNumeric:"tabular-nums",fontFamily:Me});const o=document.createElement("span");return Object.assign(o.style,{fontSize:"13px",color:"#000",fontFamily:Me}),o.textContent=Ee(),e.appendChild(i),e.appendChild(o),n.appendChild(t),n.appendChild(e),{overlay:n,canvas:t,pctEl:i,phaseEl:o}}class or{overlay;canvas;ctx;pctEl;phaseEl;animationId=null;showTimerId=null;startTime;hidden=!1;visible=!1;constructor(t,e={}){this.startTime=performance.now();const i=ir();this.overlay=i.overlay,this.canvas=i.canvas,this.pctEl=i.pctEl,this.phaseEl=i.phaseEl,t.appendChild(this.overlay),this.ctx=this.canvas.getContext("2d"),this.ctx!==null&&(this.sizeCanvas(),this.tick());const o=e.showDelay??nr;this.showTimerId=setTimeout(()=>{this.reveal()},o)}get loadingTexts(){return{downloading:Ee(),rendering:Pi()}}updateProgress(t,e){this.hidden||(this.pctEl.textContent=`${Math.round(t)}%`,this.phaseEl.textContent=e!==""?` · ${e}`:"")}showError(t){if(this.hidden=!1,this.animationId!==null&&(cancelAnimationFrame(this.animationId),this.animationId=null),this.ctx!==null){const e=Math.min(devicePixelRatio,2),i=this.canvas.width/e,o=this.canvas.height/e;this.ctx.fillStyle="#fff",this.ctx.fillRect(0,0,i*e,o*e)}this.pctEl.textContent="",this.phaseEl.textContent=t,this.phaseEl.style.color="#b91c1c",this.reveal()}hide(){if(!this.hidden){if(this.hidden=!0,this.cancelShowTimer(),!this.visible){this.destroy();return}this.overlay.style.opacity="0",this.overlay.addEventListener("transitionend",()=>{this.destroy()},{once:!0}),setTimeout(()=>{this.destroy()},500)}}destroy(){this.cancelShowTimer(),this.animationId!==null&&(cancelAnimationFrame(this.animationId),this.animationId=null),this.overlay.remove()}reveal(){this.hidden||this.visible||(this.visible=!0,this.overlay.style.opacity="1")}cancelShowTimer(){this.showTimerId!==null&&(clearTimeout(this.showTimerId),this.showTimerId=null)}sizeCanvas(){if(this.ctx===null)return;const t=Math.min(devicePixelRatio,2),e=this.overlay.clientWidth||440,i=this.overlay.clientHeight||360;this.canvas.width=e*t,this.canvas.height=i*t,this.ctx.scale(t,t),this.ctx.lineCap="round",this.ctx.lineJoin="round"}tick=()=>{this.hidden||(this.drawFrame(),this.animationId=requestAnimationFrame(this.tick))};drawFrame(){if(this.ctx===null)return;const t=this.canvas.width/Math.min(devicePixelRatio,2),e=this.canvas.height/Math.min(devicePixelRatio,2),i=(performance.now()-this.startTime)/1e3;this.ctx.fillStyle="#fff",this.ctx.fillRect(0,0,t,e);const o=t/2,r=e*.44,s=Math.min(t,e)*.08,a=.785,l=.615,c=p=>Xo(p,a,l,o,r,s),u=6,h=i%u/u,f=Ne.length;let d;h<.35?d=Ie(h/.35)*f:h<.55?d=f:h<.9?d=(1-Ie((h-.55)/.35))*f:d=0,this.ctx.shadowBlur=5,this.ctx.shadowColor="rgba(30,30,30,0.08)";for(let p=0;p<f&&!(p>=d);p++){const k=Ne[p];if(k===void 0)continue;const P=Math.min(1,d-p);er(this.ctx,c,k[0],k[1],P)}this.ctx.shadowBlur=0}}class rr{constructor(t){this.options=t,this.element=document.createElement("div"),Object.assign(this.element.style,{display:"flex",gap:"0.375rem"}),this.onFullscreenChange=()=>{this.setFullscreenIcon(document.fullscreenElement!==null)},document.addEventListener("fullscreenchange",this.onFullscreenChange)}options;element;arBtn=null;fullscreenBtn=null;onFullscreenChange;setFullscreenIcon(t){this.fullscreenBtn!==null&&this.fullscreenBtn.setIcon(t?z.exitFullscreen():z.fullscreen())}syncButton(t,e,i){if(e&&t===null){const o=i();return this.element.appendChild(o.element),o}return!e&&t!==null?(t.element.remove(),null):t}applySettings(t){this.arBtn=this.syncButton(this.arBtn,t.ar!==!1&&this.options.onAr!==void 0,()=>new F({variant:"outline",size:"icon",label:si(),icon:z.ar(),onClick:()=>{this.options.onAr?.()}})),this.fullscreenBtn=this.syncButton(this.fullscreenBtn,t.fullscreen!==!1&&this.options.onFullscreen!==void 0,()=>new F({variant:"outline",size:"icon",label:ki(),icon:z.fullscreen(),onClick:()=>{this.options.onFullscreen?.()}}))}destroy(){document.removeEventListener("fullscreenchange",this.onFullscreenChange)}}const Z=.5;class st{element;constructor(t,e){this.element=Object.assign(document.createElement("div"),{className:"vd-camera-controls"});const i={targetRotation:e.rotation,targetTilt:e.tilt,targetZoom:e.zoom,thetaOffset:0},o=sr(t,e,i);e.onChange(r=>{i.targetRotation=r.rotation-i.thetaOffset,i.targetTilt=r.tilt,i.targetZoom=r.zoom,ar(o,e,r)}),this.element.appendChild(st.buildZoom(o.zoomOut,o.zoomIn)),this.element.appendChild(st.buildDpad(o.tiltUp,o.rotateLeft,o.reset,o.rotateRight,o.tiltDown))}static buildZoom(t,e){const i=document.createElement("div");return i.className="vd-zoom",i.appendChild(t.element),i.appendChild(e.element),i}static buildDpad(t,e,i,o,r){const s=document.createElement("div");s.className="vd-dpad";for(const[a,l]of[[t,"up"],[e,"left"],[i,"center"],[o,"right"],[r,"down"]])a.element.classList.add(`vd-dpad-${l}`),s.appendChild(a.element);return s}}function sr(n,t,e){const i=s=>Math.max(t.limits?.minZoom??1,Math.min(t.limits?.maxZoom??1/0,s)),o=s=>{const a=t.limits?.minRotate,l=t.limits?.maxRotate;return a!==void 0||l!==void 0?Math.max(a??-1/0,Math.min(l??1/0,s)):s},r=s=>{const a=t.limits?.minTilt,l=t.limits?.maxTilt;if(a!==void 0||l!==void 0){e.targetTilt=Math.max(a??0,Math.min(l??180,e.targetTilt+s)),n.tilt(e.targetTilt).set();return}const c=e.targetTilt+s;c>180||c<0?(e.targetTilt=c>180?360-c:-c,e.thetaOffset=(e.thetaOffset+180)%360,n.tilt(e.targetTilt).rotate(e.targetRotation+e.thetaOffset).set()):(e.targetTilt=c,n.tilt(e.targetTilt).set())};return{zoomOut:new F({variant:"outline",size:"icon",label:io(),icon:z.zoomOut(),onClick:()=>{e.targetZoom=i(e.targetZoom-10),n.zoom(e.targetZoom).set()}}),zoomIn:new F({variant:"outline",size:"icon",label:Xi(),icon:z.zoomIn(),onClick:()=>{e.targetZoom=i(e.targetZoom+10),n.zoom(e.targetZoom).set()}}),tiltUp:new F({variant:"outline",size:"icon",label:po(),icon:z.tiltUp(),onClick:()=>{r(-15)}}),rotateLeft:new F({variant:"outline",size:"icon",label:ao(),icon:z.rotateLeft(),onClick:()=>{e.targetRotation=o(e.targetRotation-15),n.rotate(e.targetRotation+e.thetaOffset).set()}}),reset:new F({variant:"outline",size:"icon",label:Qi(),icon:z.reset(),onClick:()=>{e.thetaOffset=0,n.reset()}}),rotateRight:new F({variant:"outline",size:"icon",label:ho(),icon:z.rotateRight(),onClick:()=>{e.targetRotation=o(e.targetRotation+15),n.rotate(e.targetRotation+e.thetaOffset).set()}}),tiltDown:new F({variant:"outline",size:"icon",label:wo(),icon:z.tiltDown(),onClick:()=>{r(15)}})}}function ar(n,t,e){const i=t.limits;i!==void 0&&(n.zoomOut.element.disabled=i.minZoom!==void 0&&e.zoom<=i.minZoom+Z,n.zoomIn.element.disabled=i.maxZoom!==void 0&&e.zoom>=i.maxZoom-Z,n.tiltUp.element.disabled=i.minTilt!==void 0&&e.tilt<=i.minTilt+Z,n.tiltDown.element.disabled=i.maxTilt!==void 0&&e.tilt>=i.maxTilt-Z,n.rotateLeft.element.disabled=i.minRotate!==void 0&&e.rotation<=i.minRotate+Z,n.rotateRight.element.disabled=i.maxRotate!==void 0&&e.rotation>=i.maxRotate-Z)}const W={SELECT:"ui:select",SELECTED:"ui:selected",FOCUS_CHANGE:"vd:focus-change",CONFIGURATION_CHANGE:"vd:configuration-change",CONFIGURATION_SUBMIT:"vd:configuration-submit"},lr=5;let cr=0;function yt(n){const t=n.replace(/([A-Z])/g," $1").trim();return t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()}function ur(n,t,e,i,o){const r=document.createElement("div");r.className="vd-attribute",r.dataset.name=n.name;const s=document.createElement("span");s.className="vd-attribute-label",s.textContent=yt(n.name),s.id=`vd-attribute-label-${cr++}`,r.appendChild(s),r.setAttribute("role","group"),r.setAttribute("aria-labelledby",s.id);const a=n.values.find(u=>t.getValue(n.name,u)?.isSelected===!0),l=n.values.map(yt),c=n.values.length<=lr?new Yo(n.values,a,l):new Qo(n.name,n.values,yt(n.name),a,l);return c.onSelect(u=>{e.dispatch(W.SELECT,{attribute:n.name,value:u},!0).defaultPrevented||i(n.name,u)}),o(n.name,u=>{c.setSelected(u.value),e.dispatch(W.SELECTED,{attribute:n.name,value:u.value})}),r.appendChild(c.element),r}const dr=80,hr=2500;class fr{constructor(t,e=hr){this.configuration=t,this.resetMs=e,this.element=document.createElement("div"),this.element.className="vd-commerce vd-hidden";const i=document.createElement("div");i.className="vd-commerce-price",this.priceEl=document.createElement("span"),this.priceEl.className="vd-price",this.vatEl=document.createElement("span"),this.vatEl.className="vd-vat",i.append(this.priceEl,this.vatEl),this.button=new F({variant:"default",onClick:()=>{this.handleSubmit()}}),this.button.element.classList.add("vd-cta","vd-hidden"),this.element.append(i,this.button.element),this.unsubscribe=this.configuration.onRender(()=>{this.update()}),this.update()}configuration;resetMs;element;priceEl;vatEl;button;unsubscribe;state="idle";resetTimer;update(){this.renderPrice(this.configuration.current),this.renderButton();const t=this.configuration.current!==void 0||this.configuration.submitEnabled;this.element.classList.toggle("vd-hidden",!t)}destroy(){this.unsubscribe(),this.resetTimer!==void 0&&clearTimeout(this.resetTimer),this.element.remove()}renderPrice(t){if(t===void 0){this.priceEl.textContent="",this.vatEl.textContent="";return}this.priceEl.textContent=gr(t.price,t.currency),this.vatEl.textContent=Be(this.configuration.vatDisplay)}renderButton(){const t=this.configuration.submitEnabled;this.button.element.classList.toggle("vd-hidden",!t),t&&this.state==="idle"&&this.setButtonText(Be(this.configuration.buttonLabel))}async handleSubmit(){if(this.state!=="busy"){this.setState("busy",_o());try{await this.configuration.submit(),this.setState("success",Ro())}catch{this.setState("failed",Bo())}this.scheduleReset()}}scheduleReset(){this.resetTimer!==void 0&&clearTimeout(this.resetTimer),this.resetTimer=setTimeout(()=>{this.state="idle",this.update()},this.resetMs)}setState(t,e){this.state=t,this.element.dataset.submit=t,this.button.element.disabled=t==="busy",this.setButtonText(e)}setButtonText(t){this.button.element.textContent=t,this.button.element.setAttribute("aria-label",t)}}function Be(n){return(n??"").slice(0,dr)}function gr(n,t){try{const e=new Intl.NumberFormat(B(),{style:"currency",currency:t}),i=e.resolvedOptions().maximumFractionDigits??2;return e.format(n/10**i)}catch{return`${t} ${(n/100).toFixed(2)}`}}class Pe{slot=null;panel=null;attach(t,e){this.panel=e,e.style.display="none",this.slot=document.createElement("div"),this.slot.className="vd-slot-bottom-left",this.slot.appendChild(e),t.appendChild(this.slot)}setVisible(t){this.panel!==null&&(this.panel.style.display=t?"flex":"none")}destroy(){this.slot?.remove(),this.slot=null,this.panel=null}}const mr=572;class pr{element=null;body=null;openButton=null;closeButton=null;container=null;observer=null;collapsible=!1;expanded=!0;visible=!1;attach(t,e){this.container=t,e.classList.add("vd-attributes-sidebar"),this.closeButton=new F({variant:"ghost",size:"icon-sm",label:Hi(),icon:z.close({size:18}),onClick:()=>{this.expanded=!1,this.render()}});const i=document.createElement("div");i.className="vd-sidebar-header",i.appendChild(this.closeButton.element),this.body=document.createElement("div"),this.body.className="vd-sidebar-body",this.body.appendChild(e),this.element=document.createElement("div"),this.element.className="vd-sidebar vd-hidden",this.element.append(i,this.body),t.appendChild(this.element),this.openButton=new F({variant:"outline",size:"default",label:$i(),icon:z.configurator({size:18}),onClick:()=>{this.expanded=!0,this.render()}}),this.openButton.element.classList.add("vd-configurator-toggle","vd-hidden"),t.appendChild(this.openButton.element),this.observe()}setVisible(t){this.visible=t,this.render()}destroy(){this.observer?.disconnect(),this.observer=null,this.openButton?.element.remove(),this.element?.remove(),this.container?.classList.remove("vd-layout-sidebar-right","vd-layout-sidebar-collapsed","vd-layout-sidebar-permanent"),this.container=null}observe(){typeof ResizeObserver>"u"||this.container===null||(this.observer=new ResizeObserver(t=>{const e=t[0]?.contentRect.width??0;this.setCollapsible(e>0&&e<mr)}),this.observer.observe(this.container))}setCollapsible(t){t!==this.collapsible&&(this.collapsible=t,this.expanded=!t,this.render())}render(){if(this.element===null||this.openButton===null||this.closeButton===null||this.container===null)return;const t=this.visible&&this.expanded,e=this.visible&&!this.expanded;this.element.classList.toggle("vd-hidden",!this.visible),this.element.classList.toggle("vd-sidebar-collapsed",e),this.openButton.element.classList.toggle("vd-hidden",!e),this.closeButton.element.style.display=this.collapsible?"":"none",this.container.classList.toggle("vd-layout-sidebar-right",t),this.container.classList.toggle("vd-layout-sidebar-collapsed",e),this.container.classList.toggle("vd-layout-sidebar-permanent",t&&!this.collapsible)}}class br{attach(t,e){}setVisible(t){}destroy(){}}const vr={"inframe-bottom-left":()=>new Pe,"sidebar-right":()=>new pr,hidden:()=>new br};function yr(n){return(vr[n??""]??(()=>new Pe))()}const wt=U.fontFamily.sans.join(", "),Ct=`
|
|
260
292
|
position: absolute;
|
|
261
293
|
display: flex;
|
|
262
294
|
z-index: 10;
|
|
263
295
|
transition: inset-inline-end 0.18s ease;
|
|
264
|
-
`,
|
|
296
|
+
`,wr=`
|
|
265
297
|
/* Override browser's default black fullscreen backdrop */
|
|
266
298
|
.vd-container:fullscreen {
|
|
267
299
|
background: oklch(100% 0 0);
|
|
@@ -270,51 +302,51 @@
|
|
|
270
302
|
/* Layout slots — four corners */
|
|
271
303
|
.vd-slot-top-right {
|
|
272
304
|
${Ct}
|
|
273
|
-
inset-block-start: ${
|
|
274
|
-
inset-inline-end: ${
|
|
305
|
+
inset-block-start: ${E[3]};
|
|
306
|
+
inset-inline-end: ${E[3]};
|
|
275
307
|
flex-direction: column;
|
|
276
308
|
align-items: flex-end;
|
|
277
|
-
gap: ${
|
|
309
|
+
gap: ${E[1.5]};
|
|
278
310
|
}
|
|
279
311
|
|
|
280
312
|
.vd-slot-bottom-left {
|
|
281
313
|
${Ct}
|
|
282
|
-
inset-block-end: ${
|
|
283
|
-
inset-inline-start: ${
|
|
314
|
+
inset-block-end: ${E[3]};
|
|
315
|
+
inset-inline-start: ${E[3]};
|
|
284
316
|
flex-direction: column;
|
|
285
317
|
align-items: flex-start;
|
|
286
|
-
gap: ${
|
|
318
|
+
gap: ${E[1.5]};
|
|
287
319
|
}
|
|
288
320
|
|
|
289
321
|
.vd-slot-bottom-right {
|
|
290
322
|
${Ct}
|
|
291
|
-
inset-block-end: ${
|
|
292
|
-
inset-inline-end: ${
|
|
323
|
+
inset-block-end: ${E[3]};
|
|
324
|
+
inset-inline-end: ${E[3]};
|
|
293
325
|
flex-direction: row;
|
|
294
|
-
gap: ${
|
|
326
|
+
gap: ${E[1.5]};
|
|
295
327
|
}
|
|
296
328
|
|
|
297
329
|
/* Component styles — no positioning */
|
|
298
330
|
.vd-camera-controls {
|
|
299
331
|
display: flex;
|
|
300
332
|
flex-direction: column;
|
|
301
|
-
gap: ${
|
|
333
|
+
gap: ${E[1]};
|
|
302
334
|
background: color-mix(in oklch, ${L.white} 85%, transparent);
|
|
303
335
|
backdrop-filter: blur(8px);
|
|
304
|
-
border-radius: ${
|
|
305
|
-
padding: ${
|
|
336
|
+
border-radius: ${E[2]};
|
|
337
|
+
padding: ${E[2]};
|
|
306
338
|
}
|
|
307
339
|
|
|
308
340
|
.vd-zoom {
|
|
309
341
|
display: flex;
|
|
310
|
-
gap: ${
|
|
342
|
+
gap: ${E[.5]};
|
|
311
343
|
}
|
|
312
344
|
|
|
313
345
|
.vd-dpad {
|
|
314
346
|
display: grid;
|
|
315
|
-
grid-template-columns: repeat(3, ${
|
|
316
|
-
grid-template-rows: repeat(3, ${
|
|
317
|
-
gap: ${
|
|
347
|
+
grid-template-columns: repeat(3, ${E[9]});
|
|
348
|
+
grid-template-rows: repeat(3, ${E[9]});
|
|
349
|
+
gap: ${E[.5]};
|
|
318
350
|
}
|
|
319
351
|
|
|
320
352
|
.vd-dpad-up { grid-column: 2; grid-row: 1; }
|
|
@@ -326,20 +358,20 @@
|
|
|
326
358
|
.vd-attributes {
|
|
327
359
|
display: flex;
|
|
328
360
|
flex-direction: column;
|
|
329
|
-
gap: ${
|
|
361
|
+
gap: ${E[3]};
|
|
330
362
|
background: color-mix(in oklch, ${L.white} 85%, transparent);
|
|
331
363
|
backdrop-filter: blur(8px);
|
|
332
364
|
border: 1px solid color-mix(in oklch, ${L.neutral[900]} 8%, transparent);
|
|
333
|
-
border-radius: ${
|
|
334
|
-
padding: ${
|
|
335
|
-
box-shadow: 0 ${
|
|
365
|
+
border-radius: ${E[3]};
|
|
366
|
+
padding: ${E[3]};
|
|
367
|
+
box-shadow: 0 ${E[1]} ${E[4]} color-mix(in oklch, ${L.neutral[900]} 6%, transparent);
|
|
336
368
|
font-family: ${wt};
|
|
337
369
|
}
|
|
338
370
|
|
|
339
371
|
.vd-attribute {
|
|
340
372
|
display: flex;
|
|
341
373
|
flex-direction: column;
|
|
342
|
-
gap: ${
|
|
374
|
+
gap: ${E[1.5]};
|
|
343
375
|
}
|
|
344
376
|
|
|
345
377
|
/* Micro-label: recedes so the controls lead. */
|
|
@@ -355,6 +387,21 @@
|
|
|
355
387
|
/* sidebar-right layout — a docked, full-height right panel */
|
|
356
388
|
.vd-container { --vd-sidebar-width: 300px; }
|
|
357
389
|
|
|
390
|
+
.vd-container > iframe {
|
|
391
|
+
width: 100%;
|
|
392
|
+
height: 100%;
|
|
393
|
+
border: none;
|
|
394
|
+
display: block;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
/* Permanently docked panel (wide embeds, not collapsible): the viewer fills the
|
|
398
|
+
remaining width instead of the panel floating over it. On narrow embeds the
|
|
399
|
+
panel is a temporary tap-to-reveal overlay instead (vd-layout-sidebar-right
|
|
400
|
+
without -permanent), where covering part of the model briefly is expected. */
|
|
401
|
+
.vd-container.vd-layout-sidebar-permanent > iframe {
|
|
402
|
+
width: calc(100% - var(--vd-sidebar-width));
|
|
403
|
+
}
|
|
404
|
+
|
|
358
405
|
.vd-hidden { display: none !important; }
|
|
359
406
|
|
|
360
407
|
.vd-sidebar {
|
|
@@ -368,7 +415,7 @@
|
|
|
368
415
|
background: color-mix(in oklch, ${L.white} 90%, transparent);
|
|
369
416
|
backdrop-filter: blur(10px);
|
|
370
417
|
border-inline-start: 1px solid color-mix(in oklch, ${L.neutral[900]} 8%, transparent);
|
|
371
|
-
box-shadow: -${
|
|
418
|
+
box-shadow: -${E[1]} 0 ${E[4]} color-mix(in oklch, ${L.neutral[900]} 5%, transparent);
|
|
372
419
|
}
|
|
373
420
|
|
|
374
421
|
@media (prefers-reduced-motion: no-preference) {
|
|
@@ -380,13 +427,13 @@
|
|
|
380
427
|
.vd-sidebar-header {
|
|
381
428
|
display: flex;
|
|
382
429
|
justify-content: flex-end;
|
|
383
|
-
padding: ${
|
|
430
|
+
padding: ${E[1.5]} ${E[1.5]} 0;
|
|
384
431
|
}
|
|
385
432
|
|
|
386
433
|
.vd-sidebar-body {
|
|
387
434
|
flex: 1;
|
|
388
435
|
overflow-y: auto;
|
|
389
|
-
padding: ${
|
|
436
|
+
padding: ${E[4]};
|
|
390
437
|
}
|
|
391
438
|
|
|
392
439
|
/* attributes inside the sidebar: flat and full-width — the panel provides the frosting */
|
|
@@ -397,34 +444,34 @@
|
|
|
397
444
|
border-radius: 0;
|
|
398
445
|
padding: 0;
|
|
399
446
|
box-shadow: none;
|
|
400
|
-
gap: ${
|
|
447
|
+
gap: ${E[5]};
|
|
401
448
|
}
|
|
402
449
|
|
|
403
450
|
/* floating toggle, shown when the sidebar is collapsed on narrow embeds */
|
|
404
451
|
.vd-configurator-toggle {
|
|
405
452
|
position: absolute;
|
|
406
|
-
inset-block-end: ${
|
|
407
|
-
inset-inline-end: ${
|
|
453
|
+
inset-block-end: ${E[3]};
|
|
454
|
+
inset-inline-end: ${E[3]};
|
|
408
455
|
z-index: 12;
|
|
409
456
|
}
|
|
410
457
|
|
|
411
458
|
/* while the panel is open, keep the corner controls clear of it */
|
|
412
|
-
.vd-layout-sidebar-right .vd-slot-top-right { inset-inline-end: calc(var(--vd-sidebar-width) + ${
|
|
413
|
-
.vd-layout-sidebar-right .vd-slot-bottom-right { inset-inline-end: calc(var(--vd-sidebar-width) + ${
|
|
459
|
+
.vd-layout-sidebar-right .vd-slot-top-right { inset-inline-end: calc(var(--vd-sidebar-width) + ${E[3]}); }
|
|
460
|
+
.vd-layout-sidebar-right .vd-slot-bottom-right { inset-inline-end: calc(var(--vd-sidebar-width) + ${E[3]}); }
|
|
414
461
|
|
|
415
462
|
/* while collapsed on a narrow embed, lift the bottom-right controls above the
|
|
416
463
|
floating toggle so the AR/fullscreen buttons aren't hidden behind the
|
|
417
464
|
"open configurator" button (spacing[9] = the default toggle button height) */
|
|
418
465
|
.vd-layout-sidebar-collapsed .vd-slot-bottom-right {
|
|
419
|
-
inset-block-end: calc(${
|
|
466
|
+
inset-block-end: calc(${E[3]} + ${E[9]} + ${E[1.5]});
|
|
420
467
|
}
|
|
421
468
|
|
|
422
469
|
/* Price + CTA — sit under the attribute controls, separated by a hairline */
|
|
423
470
|
.vd-commerce {
|
|
424
471
|
display: flex;
|
|
425
472
|
flex-direction: column;
|
|
426
|
-
gap: ${
|
|
427
|
-
padding-block-start: ${
|
|
473
|
+
gap: ${E[2]};
|
|
474
|
+
padding-block-start: ${E[3]};
|
|
428
475
|
border-block-start: 1px solid color-mix(in oklch, ${L.neutral[900]} 8%, transparent);
|
|
429
476
|
font-family: ${wt};
|
|
430
477
|
}
|
|
@@ -432,7 +479,7 @@
|
|
|
432
479
|
.vd-commerce-price {
|
|
433
480
|
display: flex;
|
|
434
481
|
align-items: baseline;
|
|
435
|
-
gap: ${
|
|
482
|
+
gap: ${E[1.5]};
|
|
436
483
|
}
|
|
437
484
|
|
|
438
485
|
.vd-price {
|
|
@@ -458,11 +505,11 @@
|
|
|
458
505
|
color: ${L.white};
|
|
459
506
|
}
|
|
460
507
|
|
|
461
|
-
`;function wr(){if(Po(),document.getElementById("vd-styles")!==null)return;const n=document.createElement("style");n.id="vd-styles",n.textContent=yr,document.head.appendChild(n)}function Cr(n,t){const e=document.createElement("a");e.href=`data:image/png;base64,${n}`,e.download=t,e.click()}class Er{options;settings={};container=null;loading=null;slots={topRight:null,bottomRight:null};screenshotBtn=null;actionBar=null;cameraControls=null;attributes=null;layout=null;commerce=null;constructor(t){this.options=t}attach(t){wr(),this.container=t,this.loading=new ir(t),this.slots.topRight=this.createSlot(t,"vd-slot-top-right"),this.slots.bottomRight=this.createSlot(t,"vd-slot-bottom-right")}onReady(){this.loading?.hide(),this.loading=null,this.mountToolbar(),this.cameraControls!==null&&(this.cameraControls.element.style.display="flex"),this.layout?.setVisible(!0)}mountToolbar(){if(this.actionBar!==null||this.slots.bottomRight===null||this.container===null)return;const t=typeof this.container.requestFullscreen=="function";this.actionBar=new or({onAr:this.options.onAr,onFullscreen:t?()=>{this.toggleFullscreen()}:void 0}),this.actionBar.applySettings(this.settings),this.slots.bottomRight.appendChild(this.actionBar.element),this.syncScreenshotButton(),this.placeScreenshotButton()}toggleFullscreen(){this.container!==null&&(document.fullscreenElement!==null?document.exitFullscreen():(this.options.onFullscreenEnter?.(),this.container.requestFullscreen()))}updateProgress(t,e){this.loading?.updateProgress(t,e)}showError(t){this.loading?.showError(t)}applyViewerSettings(t){this.settings=t,t.language!==void 0&&ae(t.language,{reload:!1}),this.syncScreenshotButton(),this.actionBar?.applySettings(t),this.cameraControls!==null&&(this.cameraControls.element.style.display=t.cameraControls===!0?"flex":"none"),this.placeScreenshotButton()}renderAttributeControls(t,e){if(!(this.container===null||this.slots.topRight===null)&&(this.cameraControls?.element.remove(),this.cameraControls=null,this.teardownConfigurator(),this.settings.cameraControls===!0&&(this.cameraControls=new st(this.options.cameraApi,this.options.cameraPositionApi),this.cameraControls.element.style.display="none",this.slots.topRight.appendChild(this.cameraControls.element)),this.placeScreenshotButton(),e.length!==0)){this.attributes=document.createElement("div"),this.attributes.className="vd-attributes";for(const i of e)this.attributes.appendChild(cr(i,t,this.options.eventBus,this.options.onSelect,this.options.onSubscribe));this.commerce=new hr(this.options.configuration),this.attributes.appendChild(this.commerce.element),this.layout=vr(this.settings.configuratorLayout),this.layout.attach(this.container,this.attributes)}}get viewerSettings(){return this.settings}teardownConfigurator(){this.commerce?.destroy(),this.commerce=null,this.attributes?.remove(),this.attributes=null,this.layout?.destroy(),this.layout=null}destroy(){this.loading?.destroy(),this.screenshotBtn?.element.remove(),this.actionBar?.destroy(),this.actionBar?.element.remove(),this.cameraControls?.element.remove(),this.teardownConfigurator();for(const t of Object.values(this.slots))t?.remove();this.container=null}createSlot(t,e){const i=document.createElement("div");return i.className=e,t.appendChild(i),i}syncScreenshotButton(){const t=this.settings.screenshot===!0;t&&this.screenshotBtn===null&&(this.screenshotBtn=new z({variant:"outline",size:"icon",label:Li(),icon:D.screenshot(),onClick:()=>{this.options.snapshotApi.take("snapshot.png").onDeveloped(({data:e,filename:i})=>{Cr(e,i)})}})),!t&&this.screenshotBtn!==null&&(this.screenshotBtn.element.remove(),this.screenshotBtn=null)}placeScreenshotButton(){this.screenshotBtn===null||this.slots.topRight===null||(this.cameraControls!==null?this.cameraControls.element.appendChild(this.screenshotBtn.element):this.slots.topRight.appendChild(this.screenshotBtn.element))}}const _r={};class Sr{defaultServer="https://server.virtualdisplay.io";options;serverHost;constructor(t,e){this.options=t,this.serverHost=e}create(){const t=this.createContainer(),e=this.createIframe();return t.appendChild(e),this.attachToParent(t),{container:t,iframe:e}}createContainer(){const t=document.createElement("div");return t.className="vd-container",Object.assign(t.style,{position:"relative",width:"100%",height:"100%",overflow:"hidden"}),t}createIframe(){const t=document.createElement("iframe");return t.src=this.buildUrl(),Object.assign(t.style,{width:"100%",height:"100%",border:"none",display:"block"}),t.setAttribute("allow","xr-spatial-tracking; fullscreen"),t}attachToParent(t){this.getParentElement().appendChild(t)}buildUrl(){const t=this.getServerUrl(),e=new URL(t);return e.searchParams.set("license",this.options.license),e.searchParams.set("model",this.options.model),this.options.language!==void 0&&e.searchParams.set("language",this.options.language),this.options.debug===!0&&e.searchParams.set("debug","true"),this.options.traceparent!==void 0&&e.searchParams.set("traceparent",this.options.traceparent),e.toString()}getServerUrl(){if(this.serverHost!==void 0)return this.serverHost;if(_r?.VITE_VIRTUALDISPLAY_SERVER_HOST===void 0)return this.defaultServer}getParentElement(){if(typeof this.options.parent!="string")return this.options.parent;const t=document.querySelector(this.options.parent);if(t===null)throw x.parentNotFound(this.options.parent);return t}}function Ar(n){const{messenger:t}=n;t.on(M.HANDSHAKE,e=>{wn(e)&&(N.logger.info("Server handshake received, flushing publisher queue"),t.markReady())}),t.on(M.SESSION,e=>{Cn(e)&&n.onSession(e.sessionId)}),t.on(M.MUTATION,e=>{En(e)&&(n.attributes.handleMutationResult(e),n.configuration.handleSelectionChanged(n.attributes.getSelection()))}),t.on(M.SNAPSHOT,e=>{_n(e)&&n.snapshot.handleSnapshotResult(e)}),t.on(M.CAMERA,e=>{Sn(e)&&n.cameraPosition.handlePositionUpdate(e)}),t.on(M.LOADING_INDICATOR,e=>{kn(e)&&(e.error!==void 0?n.ui.showError(e.error):n.ui.updateProgress(e.progress,e.phase))}),t.on(M.CONFIG,e=>{Tn(e)&&n.applyConfig(e)}),t.on(M.MAPPING,e=>{An(e)&&(n.attributes.handleMappingReceived(e),n.configuration.handleSelectionChanged(n.attributes.getSelection()),n.ui.renderAttributeControls(n.attributes,e.attributes),n.readyStateTracker.handleMappingReceived())}),kr(n)}function kr(n){const{messenger:t}=n;t.on(M.FOCUS,e=>{Rn(e)&&n.focus.handleStateReceived(e)}),t.on(M.PRICING,e=>{In(e)&&n.configuration.handlePricingReceived(e.pricing)})}class Tr{ready=!1;onReady;constructor(t){this.onReady=t}handleMappingReceived(){this.ready||(this.ready=!0,N.logger.info("Mapping received from server, client is now ready"),this.onReady?.())}get isReady(){return this.ready}clear(){this.ready=!1}}class Rr{attributes;readyStateTracker;messenger;cameraApi;cameraPositionApi;focusApi;configurationApi;snapshotApi;annotationsApi;eventBus;ui;qrModal;options;serverHost;iframe;container;readyCallbacks=[];mutationFailedCallbacks=[];viewerSessionId;constructor(t,e){this.options=t,this.serverHost=e?.serverHost,this.initializeLogging(),this.messenger=new Nn(()=>this.iframe?.contentWindow??null,e?.messengerOptions);const i=o=>{this.messenger.send(o)};this.attributes=new Ko(i,(o,r)=>{for(const s of this.mutationFailedCallbacks)s({attribute:o,value:r})}),this.snapshotApi=new Te(i),this.annotationsApi=new fe(i),this.cameraApi=new Ce(i),this.cameraPositionApi=new Yo,this.focusApi=new Se(i,o=>{this.dispatchFocusChange(o)}),this.configurationApi=new _e(o=>{this.dispatchConfigurationChange(o)},o=>{this.dispatchConfigurationSubmit(o)}),this.eventBus=new Wo,this.qrModal=new Mo,this.readyStateTracker=new Tr(()=>{const o=this.readyCallbacks;this.readyCallbacks=[];for(const r of o)r(this);this.ui.onReady()}),this.ui=new Er({snapshotApi:this.snapshotApi,cameraApi:this.cameraApi,cameraPositionApi:this.cameraPositionApi,eventBus:this.eventBus,configuration:this.configurationApi,onSelect:(o,r)=>this.attributes.select(o,r),onSubscribe:(o,r)=>this.attributes.onChange(o,r),onAr:()=>{this.activateAr()},onFullscreenEnter:()=>{this.trackFullscreen()}}),this.wireIncomingMessages(),e?.registerHandlers?.(this.messenger,i),this.messenger.start(),this.createAndConnectIframe()}wireIncomingMessages(){Ar({messenger:this.messenger,attributes:this.attributes,configuration:this.configurationApi,snapshot:this.snapshotApi,cameraPosition:this.cameraPositionApi,focus:this.focusApi,ui:this.ui,readyStateTracker:this.readyStateTracker,applyConfig:t=>{this.handleConfig(t)},onSession:t=>{this.viewerSessionId=t}})}dispatchFocusChange(t){this.container?.dispatchEvent(new CustomEvent(Q.FOCUS_CHANGE,{detail:t,bubbles:!0}))}dispatchConfigurationChange(t){this.container?.dispatchEvent(new CustomEvent(Q.CONFIGURATION_CHANGE,{detail:t??null,bubbles:!0}))}dispatchConfigurationSubmit(t){this.container?.dispatchEvent(new CustomEvent(Q.CONFIGURATION_SUBMIT,{detail:t,bubbles:!0}))}handleConfig(t){const e=t.viewerSettings,i=this.options.viewerSettings;if(e!==void 0||i!==void 0){const o=i!==void 0?{...e??{},...i}:e;if(i!==void 0&&e!==void 0){const r=Object.entries(i).filter(([s,a])=>e[s]!==a).map(([s,a])=>`${s} (metadata: ${e[s]??"undefined"}, override: ${a})`);r.length>0&&N.logger.warn(`Viewer settings override active: ${r.join(", ")}`)}this.ui.applyViewerSettings(o),this.annotationsApi.setEnabled(o.annotations!==!1)}this.cameraPositionApi.applyLimits(t.cameraLimits)}activateAr(){if(Fo()){this.messenger.send({type:M.AR_ACTIVATE});return}this.qrModal.show(this.iframe?.src??"")}trackFullscreen(){this.messenger.send({type:M.FULLSCREEN})}initializeLogging(){this.options.debug===!0&&we(),N.logger.info("Initializing Virtualdisplay client",{model:this.options.model})}createAndConnectIframe(){const e=new Sr(this.options,this.serverHost).create();this.container=e.container,this.iframe=e.iframe,this.eventBus.attach(this.container),this.ui.attach(this.container);try{const i=new URL(this.iframe.src).origin;this.messenger.setTargetOrigin(i)}catch{}}select(t,e){this.attributes.select(t,e)}getValues(t){return this.attributes.getValues(t)}getValue(t,e){return this.attributes.getValue(t,e)}onChange(t,e){this.attributes.onChange(t,e)}getAttribute(t){return this.attributes.getAttribute(t)}get isReady(){return this.readyStateTracker.isReady}onReady(t){if(this.readyStateTracker.isReady){t(this);return}this.readyCallbacks.push(t)}onMutationFailed(t){this.mutationFailedCallbacks.push(t)}on(t,e){this.eventBus.on(t,e)}get annotations(){return this.annotationsApi}get camera(){return this.cameraApi}get focus(){return this.focusApi}get configuration(){return this.configurationApi}get cameraPosition(){return this.cameraPositionApi}get snapshot(){return this.snapshotApi}get sessionId(){return this.viewerSessionId}get viewerSettings(){return this.ui.viewerSettings}destroy(){this.readyStateTracker.clear(),this.readyCallbacks=[],this.mutationFailedCallbacks.length=0,this.snapshotApi.clear(),this.messenger.destroy(),this.qrModal.hide(),this.ui.destroy(),this.container?.parentElement!==null&&this.container?.parentElement!==void 0&&this.container.parentElement.removeChild(this.container),this.container=void 0,this.iframe=void 0}}class Ir extends Rr{}function Nr(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var X={},Et,Pe;function Mr(){return Pe||(Pe=1,Et=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then}),Et}var _t={},G={},Le;function Y(){if(Le)return G;Le=1;let n;const t=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];return G.getSymbolSize=function(i){if(!i)throw new Error('"version" cannot be null or undefined');if(i<1||i>40)throw new Error('"version" should be in range from 1 to 40');return i*4+17},G.getSymbolTotalCodewords=function(i){return t[i]},G.getBCHDigit=function(e){let i=0;for(;e!==0;)i++,e>>>=1;return i},G.setToSJISFunction=function(i){if(typeof i!="function")throw new Error('"toSJISFunc" is not a valid function.');n=i},G.isKanjiModeEnabled=function(){return typeof n<"u"},G.toSJIS=function(i){return n(i)},G}var St={},Oe;function At(){return Oe||(Oe=1,(function(n){n.L={bit:1},n.M={bit:0},n.Q={bit:3},n.H={bit:2};function t(e){if(typeof e!="string")throw new Error("Param is not a string");switch(e.toLowerCase()){case"l":case"low":return n.L;case"m":case"medium":return n.M;case"q":case"quartile":return n.Q;case"h":case"high":return n.H;default:throw new Error("Unknown EC Level: "+e)}}n.isValid=function(i){return i&&typeof i.bit<"u"&&i.bit>=0&&i.bit<4},n.from=function(i,o){if(n.isValid(i))return i;try{return t(i)}catch{return o}}})(St)),St}var kt,xe;function Br(){if(xe)return kt;xe=1;function n(){this.buffer=[],this.length=0}return n.prototype={get:function(t){const e=Math.floor(t/8);return(this.buffer[e]>>>7-t%8&1)===1},put:function(t,e){for(let i=0;i<e;i++)this.putBit((t>>>e-i-1&1)===1)},getLengthInBits:function(){return this.length},putBit:function(t){const e=Math.floor(this.length/8);this.buffer.length<=e&&this.buffer.push(0),t&&(this.buffer[e]|=128>>>this.length%8),this.length++}},kt=n,kt}var Tt,ze;function Pr(){if(ze)return Tt;ze=1;function n(t){if(!t||t<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=t,this.data=new Uint8Array(t*t),this.reservedBit=new Uint8Array(t*t)}return n.prototype.set=function(t,e,i,o){const r=t*this.size+e;this.data[r]=i,o&&(this.reservedBit[r]=!0)},n.prototype.get=function(t,e){return this.data[t*this.size+e]},n.prototype.xor=function(t,e,i){this.data[t*this.size+e]^=i},n.prototype.isReserved=function(t,e){return this.reservedBit[t*this.size+e]},Tt=n,Tt}var Rt={},De;function Lr(){return De||(De=1,(function(n){const t=Y().getSymbolSize;n.getRowColCoords=function(i){if(i===1)return[];const o=Math.floor(i/7)+2,r=t(i),s=r===145?26:Math.ceil((r-13)/(2*o-2))*2,a=[r-7];for(let l=1;l<o-1;l++)a[l]=a[l-1]-s;return a.push(6),a.reverse()},n.getPositions=function(i){const o=[],r=n.getRowColCoords(i),s=r.length;for(let a=0;a<s;a++)for(let l=0;l<s;l++)a===0&&l===0||a===0&&l===s-1||a===s-1&&l===0||o.push([r[a],r[l]]);return o}})(Rt)),Rt}var It={},Fe;function Or(){if(Fe)return It;Fe=1;const n=Y().getSymbolSize,t=7;return It.getPositions=function(i){const o=n(i);return[[0,0],[o-t,0],[0,o-t]]},It}var Nt={},Ue;function xr(){return Ue||(Ue=1,(function(n){n.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};const t={N1:3,N2:3,N3:40,N4:10};n.isValid=function(o){return o!=null&&o!==""&&!isNaN(o)&&o>=0&&o<=7},n.from=function(o){return n.isValid(o)?parseInt(o,10):void 0},n.getPenaltyN1=function(o){const r=o.size;let s=0,a=0,l=0,c=null,u=null;for(let h=0;h<r;h++){a=l=0,c=u=null;for(let f=0;f<r;f++){let d=o.get(h,f);d===c?a++:(a>=5&&(s+=t.N1+(a-5)),c=d,a=1),d=o.get(f,h),d===u?l++:(l>=5&&(s+=t.N1+(l-5)),u=d,l=1)}a>=5&&(s+=t.N1+(a-5)),l>=5&&(s+=t.N1+(l-5))}return s},n.getPenaltyN2=function(o){const r=o.size;let s=0;for(let a=0;a<r-1;a++)for(let l=0;l<r-1;l++){const c=o.get(a,l)+o.get(a,l+1)+o.get(a+1,l)+o.get(a+1,l+1);(c===4||c===0)&&s++}return s*t.N2},n.getPenaltyN3=function(o){const r=o.size;let s=0,a=0,l=0;for(let c=0;c<r;c++){a=l=0;for(let u=0;u<r;u++)a=a<<1&2047|o.get(c,u),u>=10&&(a===1488||a===93)&&s++,l=l<<1&2047|o.get(u,c),u>=10&&(l===1488||l===93)&&s++}return s*t.N3},n.getPenaltyN4=function(o){let r=0;const s=o.data.length;for(let l=0;l<s;l++)r+=o.data[l];return Math.abs(Math.ceil(r*100/s/5)-10)*t.N4};function e(i,o,r){switch(i){case n.Patterns.PATTERN000:return(o+r)%2===0;case n.Patterns.PATTERN001:return o%2===0;case n.Patterns.PATTERN010:return r%3===0;case n.Patterns.PATTERN011:return(o+r)%3===0;case n.Patterns.PATTERN100:return(Math.floor(o/2)+Math.floor(r/3))%2===0;case n.Patterns.PATTERN101:return o*r%2+o*r%3===0;case n.Patterns.PATTERN110:return(o*r%2+o*r%3)%2===0;case n.Patterns.PATTERN111:return(o*r%3+(o+r)%2)%2===0;default:throw new Error("bad maskPattern:"+i)}}n.applyMask=function(o,r){const s=r.size;for(let a=0;a<s;a++)for(let l=0;l<s;l++)r.isReserved(l,a)||r.xor(l,a,e(o,l,a))},n.getBestMask=function(o,r){const s=Object.keys(n.Patterns).length;let a=0,l=1/0;for(let c=0;c<s;c++){r(c),n.applyMask(c,o);const u=n.getPenaltyN1(o)+n.getPenaltyN2(o)+n.getPenaltyN3(o)+n.getPenaltyN4(o);n.applyMask(c,o),u<l&&(l=u,a=c)}return a}})(Nt)),Nt}var at={},$e;function Ve(){if($e)return at;$e=1;const n=At(),t=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],e=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];return at.getBlocksCount=function(o,r){switch(r){case n.L:return t[(o-1)*4+0];case n.M:return t[(o-1)*4+1];case n.Q:return t[(o-1)*4+2];case n.H:return t[(o-1)*4+3];default:return}},at.getTotalCodewordsCount=function(o,r){switch(r){case n.L:return e[(o-1)*4+0];case n.M:return e[(o-1)*4+1];case n.Q:return e[(o-1)*4+2];case n.H:return e[(o-1)*4+3];default:return}},at}var Mt={},nt={},qe;function zr(){if(qe)return nt;qe=1;const n=new Uint8Array(512),t=new Uint8Array(256);return(function(){let i=1;for(let o=0;o<255;o++)n[o]=i,t[i]=o,i<<=1,i&256&&(i^=285);for(let o=255;o<512;o++)n[o]=n[o-255]})(),nt.log=function(i){if(i<1)throw new Error("log("+i+")");return t[i]},nt.exp=function(i){return n[i]},nt.mul=function(i,o){return i===0||o===0?0:n[t[i]+t[o]]},nt}var je;function Dr(){return je||(je=1,(function(n){const t=zr();n.mul=function(i,o){const r=new Uint8Array(i.length+o.length-1);for(let s=0;s<i.length;s++)for(let a=0;a<o.length;a++)r[s+a]^=t.mul(i[s],o[a]);return r},n.mod=function(i,o){let r=new Uint8Array(i);for(;r.length-o.length>=0;){const s=r[0];for(let l=0;l<o.length;l++)r[l]^=t.mul(o[l],s);let a=0;for(;a<r.length&&r[a]===0;)a++;r=r.slice(a)}return r},n.generateECPolynomial=function(i){let o=new Uint8Array([1]);for(let r=0;r<i;r++)o=n.mul(o,new Uint8Array([1,t.exp(r)]));return o}})(Mt)),Mt}var Bt,He;function Fr(){if(He)return Bt;He=1;const n=Dr();function t(e){this.genPoly=void 0,this.degree=e,this.degree&&this.initialize(this.degree)}return t.prototype.initialize=function(i){this.degree=i,this.genPoly=n.generateECPolynomial(this.degree)},t.prototype.encode=function(i){if(!this.genPoly)throw new Error("Encoder not initialized");const o=new Uint8Array(i.length+this.degree);o.set(i);const r=n.mod(o,this.genPoly),s=this.degree-r.length;if(s>0){const a=new Uint8Array(this.degree);return a.set(r,s),a}return r},Bt=t,Bt}var Pt={},Lt={},Ot={},Ge;function Ke(){return Ge||(Ge=1,Ot.isValid=function(t){return!isNaN(t)&&t>=1&&t<=40}),Ot}var q={},Ye;function Je(){if(Ye)return q;Ye=1;const n="[0-9]+",t="[A-Z $%*+\\-./:]+";let e="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";e=e.replace(/u/g,"\\u");const i="(?:(?![A-Z0-9 $%*+\\-./:]|"+e+`)(?:.|[\r
|
|
462
|
-
]))+`;
|
|
463
|
-
Make sure your charset is UTF-8`);r=(r>>>8&255)*192+(r&255),i.put(r,13)}},$t=e,$t}var
|
|
464
|
-
Suggested mode is: `+t.toString(
|
|
508
|
+
`;function Cr(){if(Re(),document.getElementById("vd-styles")!==null)return;const n=document.createElement("style");n.id="vd-styles",n.textContent=wr,document.head.appendChild(n)}function Sr(n,t){const e=document.createElement("a");e.href=`data:image/png;base64,${n}`,e.download=t,e.click()}class Er{options;settings={};container=null;loading=null;slots={topRight:null,bottomRight:null};screenshotBtn=null;actionBar=null;cameraControls=null;attributes=null;layout=null;commerce=null;constructor(t){this.options=t}attach(t){Cr(),this.container=t,this.loading=new or(t),this.slots.topRight=this.createSlot(t,"vd-slot-top-right"),this.slots.bottomRight=this.createSlot(t,"vd-slot-bottom-right")}onReady(){this.loading?.hide(),this.loading=null,this.mountToolbar(),this.cameraControls!==null&&(this.cameraControls.element.style.display="flex"),this.layout?.setVisible(!0)}mountToolbar(){if(this.actionBar!==null||this.slots.bottomRight===null||this.container===null)return;const t=typeof this.container.requestFullscreen=="function";this.actionBar=new rr({onAr:this.options.onAr,onFullscreen:t?()=>{this.toggleFullscreen()}:void 0}),this.actionBar.applySettings(this.settings),this.slots.bottomRight.appendChild(this.actionBar.element),this.syncScreenshotButton(),this.placeScreenshotButton()}toggleFullscreen(){this.container!==null&&(document.fullscreenElement!==null?document.exitFullscreen():(this.options.onFullscreenEnter?.(),this.container.requestFullscreen()))}updateProgress(t,e){this.loading?.updateProgress(t,e)}showError(t){this.loading?.showError(t)}applyViewerSettings(t){this.settings=t,t.language!==void 0&&we(t.language,{reload:!1}),this.syncScreenshotButton(),this.actionBar?.applySettings(t),this.cameraControls!==null&&(this.cameraControls.element.style.display=t.cameraControls===!0?"flex":"none"),this.placeScreenshotButton()}renderAttributeControls(t,e){if(!(this.container===null||this.slots.topRight===null)&&(this.cameraControls?.element.remove(),this.cameraControls=null,this.teardownConfigurator(),this.settings.cameraControls===!0&&(this.cameraControls=new st(this.options.cameraApi,this.options.cameraPositionApi),this.cameraControls.element.style.display="none",this.slots.topRight.appendChild(this.cameraControls.element)),this.placeScreenshotButton(),e.length!==0)){this.attributes=document.createElement("div"),this.attributes.className="vd-attributes";for(const i of e)this.attributes.appendChild(ur(i,t,this.options.eventBus,this.options.onSelect,this.options.onSubscribe));this.commerce=new fr(this.options.configuration),this.attributes.appendChild(this.commerce.element),this.layout=yr(this.settings.configuratorLayout),this.layout.attach(this.container,this.attributes)}}get viewerSettings(){return this.settings}teardownConfigurator(){this.commerce?.destroy(),this.commerce=null,this.attributes?.remove(),this.attributes=null,this.layout?.destroy(),this.layout=null}destroy(){this.loading?.destroy(),this.screenshotBtn?.element.remove(),this.actionBar?.destroy(),this.actionBar?.element.remove(),this.cameraControls?.element.remove(),this.teardownConfigurator();for(const t of Object.values(this.slots))t?.remove();this.container=null}createSlot(t,e){const i=document.createElement("div");return i.className=e,t.appendChild(i),i}syncScreenshotButton(){const t=this.settings.screenshot===!0;t&&this.screenshotBtn===null&&(this.screenshotBtn=new F({variant:"outline",size:"icon",label:zi(),icon:z.screenshot(),onClick:()=>{this.options.snapshotApi.take("snapshot.png").onDeveloped(({data:e,filename:i})=>{Sr(e,i)})}})),!t&&this.screenshotBtn!==null&&(this.screenshotBtn.element.remove(),this.screenshotBtn=null)}placeScreenshotButton(){this.screenshotBtn===null||this.slots.topRight===null||(this.cameraControls!==null?this.cameraControls.element.appendChild(this.screenshotBtn.element):this.slots.topRight.appendChild(this.screenshotBtn.element))}}const _r={};class Ar{defaultServer="https://server.virtualdisplay.io";options;serverHost;constructor(t,e){this.options=t,this.serverHost=e}create(){const t=this.createContainer(),e=this.createIframe();return t.appendChild(e),this.attachToParent(t),{container:t,iframe:e}}createContainer(){const t=document.createElement("div");return t.className="vd-container",Object.assign(t.style,{position:"relative",width:"100%",height:"100%",overflow:"hidden"}),t}createIframe(){const t=document.createElement("iframe");return t.src=this.buildUrl(),t.setAttribute("allow","xr-spatial-tracking; fullscreen"),t}attachToParent(t){this.getParentElement().appendChild(t)}buildUrl(){const t=this.getServerUrl(),e=new URL(t);return e.searchParams.set("license",this.options.license),e.searchParams.set("model",this.options.model),this.options.language!==void 0&&e.searchParams.set("language",this.options.language),this.options.session!==void 0&&e.searchParams.set("session",this.options.session),this.options.debug===!0&&e.searchParams.set("debug","true"),this.options.traceparent!==void 0&&e.searchParams.set("traceparent",this.options.traceparent),e.toString()}getServerUrl(){if(this.serverHost!==void 0)return this.serverHost;if(_r?.VITE_VIRTUALDISPLAY_SERVER_HOST===void 0)return this.defaultServer}getParentElement(){if(typeof this.options.parent!="string")return this.options.parent;const t=document.querySelector(this.options.parent);if(t===null)throw x.parentNotFound(this.options.parent);return t}}function kr(n){const{messenger:t}=n;t.on(N.HANDSHAKE,e=>{Cn(e)&&(M.logger.info("Server handshake received, flushing publisher queue"),t.markReady())}),t.on(N.SESSION,e=>{Sn(e)&&n.onSession(e.sessionId)}),t.on(N.MUTATION,e=>{En(e)&&(n.attributes.handleMutationResult(e),n.configuration.handleSelectionChanged(n.attributes.getSelection()))}),t.on(N.SNAPSHOT,e=>{_n(e)&&n.snapshot.handleSnapshotResult(e)}),t.on(N.CAMERA,e=>{An(e)&&n.cameraPosition.handlePositionUpdate(e)}),t.on(N.LOADING_INDICATOR,e=>{Tn(e)&&(e.error!==void 0?n.ui.showError(e.error):n.ui.updateProgress(e.progress,e.phase))}),t.on(N.CONFIG,e=>{In(e)&&n.applyConfig(e)}),t.on(N.MAPPING,e=>{kn(e)&&(n.attributes.handleMappingReceived(e),n.configuration.handleSelectionChanged(n.attributes.getSelection()),n.ui.renderAttributeControls(n.attributes,e.attributes),n.readyStateTracker.handleMappingReceived())}),Tr(n)}function Tr(n){const{messenger:t}=n;t.on(N.FOCUS,e=>{Nn(e)&&n.focus.handleStateReceived(e)}),t.on(N.PRICING,e=>{Mn(e)&&n.configuration.handlePricingReceived(e.pricing)}),t.on(N.SYNC,e=>{Rn(e)&&n.onSync(e.connected)})}class Rr{ready=!1;onReady;constructor(t){this.onReady=t}handleMappingReceived(){this.ready||(this.ready=!0,M.logger.info("Mapping received from server, client is now ready"),this.onReady?.())}get isReady(){return this.ready}clear(){this.ready=!1}}class Ir{attributes;readyStateTracker;messenger;cameraApi;cameraPositionApi;focusApi;configurationApi;snapshotApi;annotationsApi;eventBus;ui;options;serverHost;arActivation;syncTracker;iframe;container;readyCallbacks=[];mutationFailedCallbacks=[];viewerSessionId;constructor(t,e){this.options=t,this.serverHost=e?.serverHost,this.initializeLogging(),this.messenger=new Bn(()=>this.iframe?.contentWindow??null,e?.messengerOptions);const i=r=>{this.messenger.send(r)};this.attributes=new Gn(i,(r,s)=>{this.notifyMutationFailed(r,s)}),this.snapshotApi=new fe(i),this.annotationsApi=new Wt(i),this.cameraApi=new ae(i),this.cameraPositionApi=new Kn,this.focusApi=new ue(i,r=>{this.dispatchFocusChange(r)}),this.configurationApi=new ce(r=>{this.dispatchConfigurationChange(r)},r=>{this.dispatchConfigurationSubmit(r)}),this.eventBus=new Jn,this.arActivation=e?.createArActivation?.(i),this.syncTracker=e?.createSyncTracker?.(),this.readyStateTracker=new Rr(()=>{this.notifyReady()});const o=this.arActivation;this.ui=new Er({snapshotApi:this.snapshotApi,cameraApi:this.cameraApi,cameraPositionApi:this.cameraPositionApi,eventBus:this.eventBus,configuration:this.configurationApi,onSelect:(r,s)=>this.attributes.select(r,s),onSubscribe:(r,s)=>this.attributes.onChange(r,s),...o!==void 0&&{onAr:()=>{o.activate()}},onFullscreenEnter:()=>{this.trackFullscreen()}}),this.wireIncomingMessages(),e?.registerHandlers?.(this.messenger,i),this.messenger.start(),this.createAndConnectIframe()}wireIncomingMessages(){kr({messenger:this.messenger,attributes:this.attributes,configuration:this.configurationApi,snapshot:this.snapshotApi,cameraPosition:this.cameraPositionApi,focus:this.focusApi,ui:this.ui,readyStateTracker:this.readyStateTracker,applyConfig:t=>{this.handleConfig(t)},onSession:t=>{this.handleSession(t)},onSync:t=>{this.syncTracker?.handleSync(t)}})}handleSession(t){this.viewerSessionId=t,this.arActivation?.onSession(t)}notifyMutationFailed(t,e){for(const i of this.mutationFailedCallbacks)i({attribute:t,value:e})}notifyReady(){const t=this.readyCallbacks;this.readyCallbacks=[];for(const e of t)e(this);this.ui.onReady()}dispatchFocusChange(t){this.container?.dispatchEvent(new CustomEvent(W.FOCUS_CHANGE,{detail:t,bubbles:!0}))}dispatchConfigurationChange(t){this.container?.dispatchEvent(new CustomEvent(W.CONFIGURATION_CHANGE,{detail:t??null,bubbles:!0}))}dispatchConfigurationSubmit(t){this.container?.dispatchEvent(new CustomEvent(W.CONFIGURATION_SUBMIT,{detail:t,bubbles:!0}))}handleConfig(t){const e=t.viewerSettings,i=this.options.viewerSettings;if(e!==void 0||i!==void 0){const o=i!==void 0?{...e??{},...i}:e;if(i!==void 0&&e!==void 0){const r=Object.entries(i).filter(([s,a])=>e[s]!==a).map(([s,a])=>`${s} (metadata: ${e[s]??"undefined"}, override: ${a})`);r.length>0&&M.logger.warn(`Viewer settings override active: ${r.join(", ")}`)}this.ui.applyViewerSettings(o),this.annotationsApi.setEnabled(o.annotations!==!1)}this.cameraPositionApi.applyLimits(t.cameraLimits)}trackFullscreen(){this.messenger.send({type:N.FULLSCREEN})}initializeLogging(){this.options.debug===!0&&se(),M.logger.info("Initializing Virtualdisplay client",{model:this.options.model})}createAndConnectIframe(){const e=new Ar(this.options,this.serverHost).create();this.container=e.container,this.iframe=e.iframe,this.eventBus.attach(this.container),this.ui.attach(this.container);try{const i=new URL(this.iframe.src).origin;this.messenger.setTargetOrigin(i)}catch{}}select(t,e){this.attributes.select(t,e)}getValues(t){return this.attributes.getValues(t)}getValue(t,e){return this.attributes.getValue(t,e)}onChange(t,e){this.attributes.onChange(t,e)}getAttribute(t){return this.attributes.getAttribute(t)}get isReady(){return this.readyStateTracker.isReady}onReady(t){if(this.readyStateTracker.isReady){t(this);return}this.readyCallbacks.push(t)}onMutationFailed(t){this.mutationFailedCallbacks.push(t)}activateAr(){this.arActivation?.activate()}on(t,e){this.eventBus.on(t,e)}get annotations(){return this.annotationsApi}get camera(){return this.cameraApi}get focus(){return this.focusApi}get configuration(){return this.configurationApi}get cameraPosition(){return this.cameraPositionApi}get snapshot(){return this.snapshotApi}get sessionId(){return this.viewerSessionId}get viewerSettings(){return this.ui.viewerSettings}destroy(){this.readyStateTracker.clear(),this.readyCallbacks=[],this.mutationFailedCallbacks.length=0,this.snapshotApi.clear(),this.messenger.destroy(),this.arActivation?.destroy(),this.ui.destroy(),this.container?.parentElement!==null&&this.container?.parentElement!==void 0&&this.container.parentElement.removeChild(this.container),this.container=void 0,this.iframe=void 0}}const Nr="ar.virtualdisplay.io";function Mr(n){const t=new URL(`https://${Nr}/go`);return n.sessionId!==void 0?t.searchParams.set("session",n.sessionId):(t.searchParams.set("license",n.license),t.searchParams.set("model",n.model)),t.toString()}const Br=1500;class Pr{options;qrModal=new Wo;sessionId;waiters=[];pendingTimers=new Set;destroyed=!1;constructor(t){this.options=t}onSession(t){this.sessionId=t;const e=this.waiters;this.waiters=[];for(const i of e)i(t)}activate(){if(Vn()){this.options.send({type:N.AR_ACTIVATE});return}this.showQrCode()}destroy(){this.destroyed=!0;for(const t of this.pendingTimers)clearTimeout(t);this.pendingTimers.clear(),this.waiters=[],this.qrModal.hide()}async showQrCode(){this.qrModal.show();const t=await this.waitForSessionId();if(this.destroyed)return;const e=Mr({sessionId:t,license:this.options.license,model:this.options.model}),i=await this.qrModal.update(e);if(this.destroyed){this.qrModal.hide();return}i&&this.options.send({type:N.QR_SHOWN})}waitForSessionId(){return this.sessionId!==void 0?Promise.resolve(this.sessionId):new Promise(t=>{const e=setTimeout(()=>{this.pendingTimers.delete(e),t(void 0)},Br);this.pendingTimers.add(e),this.waiters.push(i=>{this.pendingTimers.delete(e),clearTimeout(e),t(i)})})}}class Lr{callbacks=[];lastKnown;handleSync(t){this.lastKnown=t;for(const e of this.callbacks)e(t)}onChange(t){this.callbacks.push(t),this.lastKnown!==void 0&&t(this.lastKnown)}}class Or extends Ir{syncStatusTracker;constructor(t){const e=new Lr;super(t,{createArActivation:i=>new Pr({license:t.license,model:t.model,send:i}),createSyncTracker:()=>e}),this.syncStatusTracker=e}onSyncChange(t){this.syncStatusTracker.onChange(t)}}function xr(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var X={},St,Le;function zr(){return Le||(Le=1,St=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then}),St}var Et={},G={},Oe;function Y(){if(Oe)return G;Oe=1;let n;const t=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];return G.getSymbolSize=function(i){if(!i)throw new Error('"version" cannot be null or undefined');if(i<1||i>40)throw new Error('"version" should be in range from 1 to 40');return i*4+17},G.getSymbolTotalCodewords=function(i){return t[i]},G.getBCHDigit=function(e){let i=0;for(;e!==0;)i++,e>>>=1;return i},G.setToSJISFunction=function(i){if(typeof i!="function")throw new Error('"toSJISFunc" is not a valid function.');n=i},G.isKanjiModeEnabled=function(){return typeof n<"u"},G.toSJIS=function(i){return n(i)},G}var _t={},xe;function At(){return xe||(xe=1,(function(n){n.L={bit:1},n.M={bit:0},n.Q={bit:3},n.H={bit:2};function t(e){if(typeof e!="string")throw new Error("Param is not a string");switch(e.toLowerCase()){case"l":case"low":return n.L;case"m":case"medium":return n.M;case"q":case"quartile":return n.Q;case"h":case"high":return n.H;default:throw new Error("Unknown EC Level: "+e)}}n.isValid=function(i){return i&&typeof i.bit<"u"&&i.bit>=0&&i.bit<4},n.from=function(i,o){if(n.isValid(i))return i;try{return t(i)}catch{return o}}})(_t)),_t}var kt,ze;function Fr(){if(ze)return kt;ze=1;function n(){this.buffer=[],this.length=0}return n.prototype={get:function(t){const e=Math.floor(t/8);return(this.buffer[e]>>>7-t%8&1)===1},put:function(t,e){for(let i=0;i<e;i++)this.putBit((t>>>e-i-1&1)===1)},getLengthInBits:function(){return this.length},putBit:function(t){const e=Math.floor(this.length/8);this.buffer.length<=e&&this.buffer.push(0),t&&(this.buffer[e]|=128>>>this.length%8),this.length++}},kt=n,kt}var Tt,Fe;function Dr(){if(Fe)return Tt;Fe=1;function n(t){if(!t||t<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=t,this.data=new Uint8Array(t*t),this.reservedBit=new Uint8Array(t*t)}return n.prototype.set=function(t,e,i,o){const r=t*this.size+e;this.data[r]=i,o&&(this.reservedBit[r]=!0)},n.prototype.get=function(t,e){return this.data[t*this.size+e]},n.prototype.xor=function(t,e,i){this.data[t*this.size+e]^=i},n.prototype.isReserved=function(t,e){return this.reservedBit[t*this.size+e]},Tt=n,Tt}var Rt={},De;function Ur(){return De||(De=1,(function(n){const t=Y().getSymbolSize;n.getRowColCoords=function(i){if(i===1)return[];const o=Math.floor(i/7)+2,r=t(i),s=r===145?26:Math.ceil((r-13)/(2*o-2))*2,a=[r-7];for(let l=1;l<o-1;l++)a[l]=a[l-1]-s;return a.push(6),a.reverse()},n.getPositions=function(i){const o=[],r=n.getRowColCoords(i),s=r.length;for(let a=0;a<s;a++)for(let l=0;l<s;l++)a===0&&l===0||a===0&&l===s-1||a===s-1&&l===0||o.push([r[a],r[l]]);return o}})(Rt)),Rt}var It={},Ue;function $r(){if(Ue)return It;Ue=1;const n=Y().getSymbolSize,t=7;return It.getPositions=function(i){const o=n(i);return[[0,0],[o-t,0],[0,o-t]]},It}var Nt={},$e;function qr(){return $e||($e=1,(function(n){n.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};const t={N1:3,N2:3,N3:40,N4:10};n.isValid=function(o){return o!=null&&o!==""&&!isNaN(o)&&o>=0&&o<=7},n.from=function(o){return n.isValid(o)?parseInt(o,10):void 0},n.getPenaltyN1=function(o){const r=o.size;let s=0,a=0,l=0,c=null,u=null;for(let h=0;h<r;h++){a=l=0,c=u=null;for(let f=0;f<r;f++){let d=o.get(h,f);d===c?a++:(a>=5&&(s+=t.N1+(a-5)),c=d,a=1),d=o.get(f,h),d===u?l++:(l>=5&&(s+=t.N1+(l-5)),u=d,l=1)}a>=5&&(s+=t.N1+(a-5)),l>=5&&(s+=t.N1+(l-5))}return s},n.getPenaltyN2=function(o){const r=o.size;let s=0;for(let a=0;a<r-1;a++)for(let l=0;l<r-1;l++){const c=o.get(a,l)+o.get(a,l+1)+o.get(a+1,l)+o.get(a+1,l+1);(c===4||c===0)&&s++}return s*t.N2},n.getPenaltyN3=function(o){const r=o.size;let s=0,a=0,l=0;for(let c=0;c<r;c++){a=l=0;for(let u=0;u<r;u++)a=a<<1&2047|o.get(c,u),u>=10&&(a===1488||a===93)&&s++,l=l<<1&2047|o.get(u,c),u>=10&&(l===1488||l===93)&&s++}return s*t.N3},n.getPenaltyN4=function(o){let r=0;const s=o.data.length;for(let l=0;l<s;l++)r+=o.data[l];return Math.abs(Math.ceil(r*100/s/5)-10)*t.N4};function e(i,o,r){switch(i){case n.Patterns.PATTERN000:return(o+r)%2===0;case n.Patterns.PATTERN001:return o%2===0;case n.Patterns.PATTERN010:return r%3===0;case n.Patterns.PATTERN011:return(o+r)%3===0;case n.Patterns.PATTERN100:return(Math.floor(o/2)+Math.floor(r/3))%2===0;case n.Patterns.PATTERN101:return o*r%2+o*r%3===0;case n.Patterns.PATTERN110:return(o*r%2+o*r%3)%2===0;case n.Patterns.PATTERN111:return(o*r%3+(o+r)%2)%2===0;default:throw new Error("bad maskPattern:"+i)}}n.applyMask=function(o,r){const s=r.size;for(let a=0;a<s;a++)for(let l=0;l<s;l++)r.isReserved(l,a)||r.xor(l,a,e(o,l,a))},n.getBestMask=function(o,r){const s=Object.keys(n.Patterns).length;let a=0,l=1/0;for(let c=0;c<s;c++){r(c),n.applyMask(c,o);const u=n.getPenaltyN1(o)+n.getPenaltyN2(o)+n.getPenaltyN3(o)+n.getPenaltyN4(o);n.applyMask(c,o),u<l&&(l=u,a=c)}return a}})(Nt)),Nt}var at={},qe;function Ve(){if(qe)return at;qe=1;const n=At(),t=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],e=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];return at.getBlocksCount=function(o,r){switch(r){case n.L:return t[(o-1)*4+0];case n.M:return t[(o-1)*4+1];case n.Q:return t[(o-1)*4+2];case n.H:return t[(o-1)*4+3];default:return}},at.getTotalCodewordsCount=function(o,r){switch(r){case n.L:return e[(o-1)*4+0];case n.M:return e[(o-1)*4+1];case n.Q:return e[(o-1)*4+2];case n.H:return e[(o-1)*4+3];default:return}},at}var Mt={},nt={},je;function Vr(){if(je)return nt;je=1;const n=new Uint8Array(512),t=new Uint8Array(256);return(function(){let i=1;for(let o=0;o<255;o++)n[o]=i,t[i]=o,i<<=1,i&256&&(i^=285);for(let o=255;o<512;o++)n[o]=n[o-255]})(),nt.log=function(i){if(i<1)throw new Error("log("+i+")");return t[i]},nt.exp=function(i){return n[i]},nt.mul=function(i,o){return i===0||o===0?0:n[t[i]+t[o]]},nt}var He;function jr(){return He||(He=1,(function(n){const t=Vr();n.mul=function(i,o){const r=new Uint8Array(i.length+o.length-1);for(let s=0;s<i.length;s++)for(let a=0;a<o.length;a++)r[s+a]^=t.mul(i[s],o[a]);return r},n.mod=function(i,o){let r=new Uint8Array(i);for(;r.length-o.length>=0;){const s=r[0];for(let l=0;l<o.length;l++)r[l]^=t.mul(o[l],s);let a=0;for(;a<r.length&&r[a]===0;)a++;r=r.slice(a)}return r},n.generateECPolynomial=function(i){let o=new Uint8Array([1]);for(let r=0;r<i;r++)o=n.mul(o,new Uint8Array([1,t.exp(r)]));return o}})(Mt)),Mt}var Bt,Ge;function Hr(){if(Ge)return Bt;Ge=1;const n=jr();function t(e){this.genPoly=void 0,this.degree=e,this.degree&&this.initialize(this.degree)}return t.prototype.initialize=function(i){this.degree=i,this.genPoly=n.generateECPolynomial(this.degree)},t.prototype.encode=function(i){if(!this.genPoly)throw new Error("Encoder not initialized");const o=new Uint8Array(i.length+this.degree);o.set(i);const r=n.mod(o,this.genPoly),s=this.degree-r.length;if(s>0){const a=new Uint8Array(this.degree);return a.set(r,s),a}return r},Bt=t,Bt}var Pt={},Lt={},Ot={},Ke;function Ye(){return Ke||(Ke=1,Ot.isValid=function(t){return!isNaN(t)&&t>=1&&t<=40}),Ot}var V={},Qe;function Je(){if(Qe)return V;Qe=1;const n="[0-9]+",t="[A-Z $%*+\\-./:]+";let e="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";e=e.replace(/u/g,"\\u");const i="(?:(?![A-Z0-9 $%*+\\-./:]|"+e+`)(?:.|[\r
|
|
509
|
+
]))+`;V.KANJI=new RegExp(e,"g"),V.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g"),V.BYTE=new RegExp(i,"g"),V.NUMERIC=new RegExp(n,"g"),V.ALPHANUMERIC=new RegExp(t,"g");const o=new RegExp("^"+e+"$"),r=new RegExp("^"+n+"$"),s=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");return V.testKanji=function(l){return o.test(l)},V.testNumeric=function(l){return r.test(l)},V.testAlphanumeric=function(l){return s.test(l)},V}var Ze;function Q(){return Ze||(Ze=1,(function(n){const t=Ye(),e=Je();n.NUMERIC={id:"Numeric",bit:1,ccBits:[10,12,14]},n.ALPHANUMERIC={id:"Alphanumeric",bit:2,ccBits:[9,11,13]},n.BYTE={id:"Byte",bit:4,ccBits:[8,16,16]},n.KANJI={id:"Kanji",bit:8,ccBits:[8,10,12]},n.MIXED={bit:-1},n.getCharCountIndicator=function(r,s){if(!r.ccBits)throw new Error("Invalid mode: "+r);if(!t.isValid(s))throw new Error("Invalid version: "+s);return s>=1&&s<10?r.ccBits[0]:s<27?r.ccBits[1]:r.ccBits[2]},n.getBestModeForData=function(r){return e.testNumeric(r)?n.NUMERIC:e.testAlphanumeric(r)?n.ALPHANUMERIC:e.testKanji(r)?n.KANJI:n.BYTE},n.toString=function(r){if(r&&r.id)return r.id;throw new Error("Invalid mode")},n.isValid=function(r){return r&&r.bit&&r.ccBits};function i(o){if(typeof o!="string")throw new Error("Param is not a string");switch(o.toLowerCase()){case"numeric":return n.NUMERIC;case"alphanumeric":return n.ALPHANUMERIC;case"kanji":return n.KANJI;case"byte":return n.BYTE;default:throw new Error("Unknown mode: "+o)}}n.from=function(r,s){if(n.isValid(r))return r;try{return i(r)}catch{return s}}})(Lt)),Lt}var We;function Gr(){return We||(We=1,(function(n){const t=Y(),e=Ve(),i=At(),o=Q(),r=Ye(),s=7973,a=t.getBCHDigit(s);function l(f,d,p){for(let k=1;k<=40;k++)if(d<=n.getCapacity(k,p,f))return k}function c(f,d){return o.getCharCountIndicator(f,d)+4}function u(f,d){let p=0;return f.forEach(function(k){const P=c(k.mode,d);p+=P+k.getBitsLength()}),p}function h(f,d){for(let p=1;p<=40;p++)if(u(f,p)<=n.getCapacity(p,d,o.MIXED))return p}n.from=function(d,p){return r.isValid(d)?parseInt(d,10):p},n.getCapacity=function(d,p,k){if(!r.isValid(d))throw new Error("Invalid QR Code version");typeof k>"u"&&(k=o.BYTE);const P=t.getSymbolTotalCodewords(d),S=e.getTotalCodewordsCount(d,p),I=(P-S)*8;if(k===o.MIXED)return I;const T=I-c(k,d);switch(k){case o.NUMERIC:return Math.floor(T/10*3);case o.ALPHANUMERIC:return Math.floor(T/11*2);case o.KANJI:return Math.floor(T/13);case o.BYTE:default:return Math.floor(T/8)}},n.getBestVersionForData=function(d,p){let k;const P=i.from(p,i.M);if(Array.isArray(d)){if(d.length>1)return h(d,P);if(d.length===0)return 1;k=d[0]}else k=d;return l(k.mode,k.getLength(),P)},n.getEncodedBits=function(d){if(!r.isValid(d)||d<7)throw new Error("Invalid QR Code version");let p=d<<12;for(;t.getBCHDigit(p)-a>=0;)p^=s<<t.getBCHDigit(p)-a;return d<<12|p}})(Pt)),Pt}var xt={},Xe;function Kr(){if(Xe)return xt;Xe=1;const n=Y(),t=1335,e=21522,i=n.getBCHDigit(t);return xt.getEncodedBits=function(r,s){const a=r.bit<<3|s;let l=a<<10;for(;n.getBCHDigit(l)-i>=0;)l^=t<<n.getBCHDigit(l)-i;return(a<<10|l)^e},xt}var zt={},Ft,tn;function Yr(){if(tn)return Ft;tn=1;const n=Q();function t(e){this.mode=n.NUMERIC,this.data=e.toString()}return t.getBitsLength=function(i){return 10*Math.floor(i/3)+(i%3?i%3*3+1:0)},t.prototype.getLength=function(){return this.data.length},t.prototype.getBitsLength=function(){return t.getBitsLength(this.data.length)},t.prototype.write=function(i){let o,r,s;for(o=0;o+3<=this.data.length;o+=3)r=this.data.substr(o,3),s=parseInt(r,10),i.put(s,10);const a=this.data.length-o;a>0&&(r=this.data.substr(o),s=parseInt(r,10),i.put(s,a*3+1))},Ft=t,Ft}var Dt,en;function Qr(){if(en)return Dt;en=1;const n=Q(),t=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":"];function e(i){this.mode=n.ALPHANUMERIC,this.data=i}return e.getBitsLength=function(o){return 11*Math.floor(o/2)+6*(o%2)},e.prototype.getLength=function(){return this.data.length},e.prototype.getBitsLength=function(){return e.getBitsLength(this.data.length)},e.prototype.write=function(o){let r;for(r=0;r+2<=this.data.length;r+=2){let s=t.indexOf(this.data[r])*45;s+=t.indexOf(this.data[r+1]),o.put(s,11)}this.data.length%2&&o.put(t.indexOf(this.data[r]),6)},Dt=e,Dt}var Ut,nn;function Jr(){if(nn)return Ut;nn=1;const n=Q();function t(e){this.mode=n.BYTE,typeof e=="string"?this.data=new TextEncoder().encode(e):this.data=new Uint8Array(e)}return t.getBitsLength=function(i){return i*8},t.prototype.getLength=function(){return this.data.length},t.prototype.getBitsLength=function(){return t.getBitsLength(this.data.length)},t.prototype.write=function(e){for(let i=0,o=this.data.length;i<o;i++)e.put(this.data[i],8)},Ut=t,Ut}var $t,on;function Zr(){if(on)return $t;on=1;const n=Q(),t=Y();function e(i){this.mode=n.KANJI,this.data=i}return e.getBitsLength=function(o){return o*13},e.prototype.getLength=function(){return this.data.length},e.prototype.getBitsLength=function(){return e.getBitsLength(this.data.length)},e.prototype.write=function(i){let o;for(o=0;o<this.data.length;o++){let r=t.toSJIS(this.data[o]);if(r>=33088&&r<=40956)r-=33088;else if(r>=57408&&r<=60351)r-=49472;else throw new Error("Invalid SJIS character: "+this.data[o]+`
|
|
510
|
+
Make sure your charset is UTF-8`);r=(r>>>8&255)*192+(r&255),i.put(r,13)}},$t=e,$t}var qt={exports:{}},rn;function Wr(){return rn||(rn=1,(function(n){var t={single_source_shortest_paths:function(e,i,o){var r={},s={};s[i]=0;var a=t.PriorityQueue.make();a.push(i,0);for(var l,c,u,h,f,d,p,k,P;!a.empty();){l=a.pop(),c=l.value,h=l.cost,f=e[c]||{};for(u in f)f.hasOwnProperty(u)&&(d=f[u],p=h+d,k=s[u],P=typeof s[u]>"u",(P||k>p)&&(s[u]=p,a.push(u,p),r[u]=c))}if(typeof o<"u"&&typeof s[o]>"u"){var S=["Could not find a path from ",i," to ",o,"."].join("");throw new Error(S)}return r},extract_shortest_path_from_predecessor_list:function(e,i){for(var o=[],r=i;r;)o.push(r),e[r],r=e[r];return o.reverse(),o},find_path:function(e,i,o){var r=t.single_source_shortest_paths(e,i,o);return t.extract_shortest_path_from_predecessor_list(r,o)},PriorityQueue:{make:function(e){var i=t.PriorityQueue,o={},r;e=e||{};for(r in i)i.hasOwnProperty(r)&&(o[r]=i[r]);return o.queue=[],o.sorter=e.sorter||i.default_sorter,o},default_sorter:function(e,i){return e.cost-i.cost},push:function(e,i){var o={value:e,cost:i};this.queue.push(o),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};n.exports=t})(qt)),qt.exports}var sn;function Xr(){return sn||(sn=1,(function(n){const t=Q(),e=Yr(),i=Qr(),o=Jr(),r=Zr(),s=Je(),a=Y(),l=Wr();function c(S){return unescape(encodeURIComponent(S)).length}function u(S,I,T){const _=[];let O;for(;(O=S.exec(T))!==null;)_.push({data:O[0],index:O.index,mode:I,length:O[0].length});return _}function h(S){const I=u(s.NUMERIC,t.NUMERIC,S),T=u(s.ALPHANUMERIC,t.ALPHANUMERIC,S);let _,O;return a.isKanjiModeEnabled()?(_=u(s.BYTE,t.BYTE,S),O=u(s.KANJI,t.KANJI,S)):(_=u(s.BYTE_KANJI,t.BYTE,S),O=[]),I.concat(T,_,O).sort(function(w,y){return w.index-y.index}).map(function(w){return{data:w.data,mode:w.mode,length:w.length}})}function f(S,I){switch(I){case t.NUMERIC:return e.getBitsLength(S);case t.ALPHANUMERIC:return i.getBitsLength(S);case t.KANJI:return r.getBitsLength(S);case t.BYTE:return o.getBitsLength(S)}}function d(S){return S.reduce(function(I,T){const _=I.length-1>=0?I[I.length-1]:null;return _&&_.mode===T.mode?(I[I.length-1].data+=T.data,I):(I.push(T),I)},[])}function p(S){const I=[];for(let T=0;T<S.length;T++){const _=S[T];switch(_.mode){case t.NUMERIC:I.push([_,{data:_.data,mode:t.ALPHANUMERIC,length:_.length},{data:_.data,mode:t.BYTE,length:_.length}]);break;case t.ALPHANUMERIC:I.push([_,{data:_.data,mode:t.BYTE,length:_.length}]);break;case t.KANJI:I.push([_,{data:_.data,mode:t.BYTE,length:c(_.data)}]);break;case t.BYTE:I.push([{data:_.data,mode:t.BYTE,length:c(_.data)}])}}return I}function k(S,I){const T={},_={start:{}};let O=["start"];for(let m=0;m<S.length;m++){const w=S[m],y=[];for(let g=0;g<w.length;g++){const A=w[g],b=""+m+g;y.push(b),T[b]={node:A,lastCount:0},_[b]={};for(let C=0;C<O.length;C++){const v=O[C];T[v]&&T[v].node.mode===A.mode?(_[v][b]=f(T[v].lastCount+A.length,A.mode)-f(T[v].lastCount,A.mode),T[v].lastCount+=A.length):(T[v]&&(T[v].lastCount=A.length),_[v][b]=f(A.length,A.mode)+4+t.getCharCountIndicator(A.mode,I))}}O=y}for(let m=0;m<O.length;m++)_[O[m]].end=0;return{map:_,table:T}}function P(S,I){let T;const _=t.getBestModeForData(S);if(T=t.from(I,_),T!==t.BYTE&&T.bit<_.bit)throw new Error('"'+S+'" cannot be encoded with mode '+t.toString(T)+`.
|
|
511
|
+
Suggested mode is: `+t.toString(_));switch(T===t.KANJI&&!a.isKanjiModeEnabled()&&(T=t.BYTE),T){case t.NUMERIC:return new e(S);case t.ALPHANUMERIC:return new i(S);case t.KANJI:return new r(S);case t.BYTE:return new o(S)}}n.fromArray=function(I){return I.reduce(function(T,_){return typeof _=="string"?T.push(P(_,null)):_.data&&T.push(P(_.data,_.mode)),T},[])},n.fromString=function(I,T){const _=h(I,a.isKanjiModeEnabled()),O=p(_),m=k(O,T),w=l.find_path(m.map,"start","end"),y=[];for(let g=1;g<w.length-1;g++)y.push(m.table[w[g]].node);return n.fromArray(d(y))},n.rawSplit=function(I){return n.fromArray(h(I,a.isKanjiModeEnabled()))}})(zt)),zt}var an;function ts(){if(an)return Et;an=1;const n=Y(),t=At(),e=Fr(),i=Dr(),o=Ur(),r=$r(),s=qr(),a=Ve(),l=Hr(),c=Gr(),u=Kr(),h=Q(),f=Xr();function d(m,w){const y=m.size,g=r.getPositions(w);for(let A=0;A<g.length;A++){const b=g[A][0],C=g[A][1];for(let v=-1;v<=7;v++)if(!(b+v<=-1||y<=b+v))for(let R=-1;R<=7;R++)C+R<=-1||y<=C+R||(v>=0&&v<=6&&(R===0||R===6)||R>=0&&R<=6&&(v===0||v===6)||v>=2&&v<=4&&R>=2&&R<=4?m.set(b+v,C+R,!0,!0):m.set(b+v,C+R,!1,!0))}}function p(m){const w=m.size;for(let y=8;y<w-8;y++){const g=y%2===0;m.set(y,6,g,!0),m.set(6,y,g,!0)}}function k(m,w){const y=o.getPositions(w);for(let g=0;g<y.length;g++){const A=y[g][0],b=y[g][1];for(let C=-2;C<=2;C++)for(let v=-2;v<=2;v++)C===-2||C===2||v===-2||v===2||C===0&&v===0?m.set(A+C,b+v,!0,!0):m.set(A+C,b+v,!1,!0)}}function P(m,w){const y=m.size,g=c.getEncodedBits(w);let A,b,C;for(let v=0;v<18;v++)A=Math.floor(v/3),b=v%3+y-8-3,C=(g>>v&1)===1,m.set(A,b,C,!0),m.set(b,A,C,!0)}function S(m,w,y){const g=m.size,A=u.getEncodedBits(w,y);let b,C;for(b=0;b<15;b++)C=(A>>b&1)===1,b<6?m.set(b,8,C,!0):b<8?m.set(b+1,8,C,!0):m.set(g-15+b,8,C,!0),b<8?m.set(8,g-b-1,C,!0):b<9?m.set(8,15-b-1+1,C,!0):m.set(8,15-b-1,C,!0);m.set(g-8,8,1,!0)}function I(m,w){const y=m.size;let g=-1,A=y-1,b=7,C=0;for(let v=y-1;v>0;v-=2)for(v===6&&v--;;){for(let R=0;R<2;R++)if(!m.isReserved(A,v-R)){let K=!1;C<w.length&&(K=(w[C]>>>b&1)===1),m.set(A,v-R,K),b--,b===-1&&(C++,b=7)}if(A+=g,A<0||y<=A){A-=g,g=-g;break}}}function T(m,w,y){const g=new e;y.forEach(function(R){g.put(R.mode.bit,4),g.put(R.getLength(),h.getCharCountIndicator(R.mode,m)),R.write(g)});const A=n.getSymbolTotalCodewords(m),b=a.getTotalCodewordsCount(m,w),C=(A-b)*8;for(g.getLengthInBits()+4<=C&&g.put(0,4);g.getLengthInBits()%8!==0;)g.putBit(0);const v=(C-g.getLengthInBits())/8;for(let R=0;R<v;R++)g.put(R%2?17:236,8);return _(g,m,w)}function _(m,w,y){const g=n.getSymbolTotalCodewords(w),A=a.getTotalCodewordsCount(w,y),b=g-A,C=a.getBlocksCount(w,y),v=g%C,R=C-v,K=Math.floor(g/C),it=Math.floor(b/C),rs=it+1,gn=K-it,ss=new l(gn);let Gt=0;const lt=new Array(C),mn=new Array(C);let Kt=0;const as=new Uint8Array(m.buffer);for(let tt=0;tt<C;tt++){const Qt=tt<R?it:rs;lt[tt]=as.slice(Gt,Gt+Qt),mn[tt]=ss.encode(lt[tt]),Gt+=Qt,Kt=Math.max(Kt,Qt)}const Yt=new Uint8Array(g);let pn=0,j,H;for(j=0;j<Kt;j++)for(H=0;H<C;H++)j<lt[H].length&&(Yt[pn++]=lt[H][j]);for(j=0;j<gn;j++)for(H=0;H<C;H++)Yt[pn++]=mn[H][j];return Yt}function O(m,w,y,g){let A;if(Array.isArray(m))A=f.fromArray(m);else if(typeof m=="string"){let K=w;if(!K){const it=f.rawSplit(m);K=c.getBestVersionForData(it,y)}A=f.fromString(m,K||40)}else throw new Error("Invalid data");const b=c.getBestVersionForData(A,y);if(!b)throw new Error("The amount of data is too big to be stored in a QR Code");if(!w)w=b;else if(w<b)throw new Error(`
|
|
465
512
|
The chosen QR Code version cannot contain this amount of data.
|
|
466
513
|
Minimum version required to store current data is: `+b+`.
|
|
467
|
-
`);const
|
|
468
|
-
`;return typeof a=="function"&&a(null,P),P},Ht}var
|
|
514
|
+
`);const C=T(w,y,A),v=n.getSymbolSize(w),R=new i(v);return d(R,w),p(R),k(R,w),S(R,y,0),w>=7&&P(R,w),I(R,C),isNaN(g)&&(g=s.getBestMask(R,S.bind(null,R,y))),s.applyMask(g,R),S(R,y,g),{modules:R,version:w,errorCorrectionLevel:y,maskPattern:g,segments:A}}return Et.create=function(w,y){if(typeof w>"u"||w==="")throw new Error("No input text");let g=t.M,A,b;return typeof y<"u"&&(g=t.from(y.errorCorrectionLevel,t.M),A=c.from(y.version),b=s.from(y.maskPattern),y.toSJISFunc&&n.setToSJISFunction(y.toSJISFunc)),O(w,A,g,b)},Et}var Vt={},jt={},ln;function cn(){return ln||(ln=1,(function(n){function t(e){if(typeof e=="number"&&(e=e.toString()),typeof e!="string")throw new Error("Color should be defined as hex string");let i=e.slice().replace("#","").split("");if(i.length<3||i.length===5||i.length>8)throw new Error("Invalid hex color: "+e);(i.length===3||i.length===4)&&(i=Array.prototype.concat.apply([],i.map(function(r){return[r,r]}))),i.length===6&&i.push("F","F");const o=parseInt(i.join(""),16);return{r:o>>24&255,g:o>>16&255,b:o>>8&255,a:o&255,hex:"#"+i.slice(0,6).join("")}}n.getOptions=function(i){i||(i={}),i.color||(i.color={});const o=typeof i.margin>"u"||i.margin===null||i.margin<0?4:i.margin,r=i.width&&i.width>=21?i.width:void 0,s=i.scale||4;return{width:r,scale:r?4:s,margin:o,color:{dark:t(i.color.dark||"#000000ff"),light:t(i.color.light||"#ffffffff")},type:i.type,rendererOpts:i.rendererOpts||{}}},n.getScale=function(i,o){return o.width&&o.width>=i+o.margin*2?o.width/(i+o.margin*2):o.scale},n.getImageWidth=function(i,o){const r=n.getScale(i,o);return Math.floor((i+o.margin*2)*r)},n.qrToImageData=function(i,o,r){const s=o.modules.size,a=o.modules.data,l=n.getScale(s,r),c=Math.floor((s+r.margin*2)*l),u=r.margin*l,h=[r.color.light,r.color.dark];for(let f=0;f<c;f++)for(let d=0;d<c;d++){let p=(f*c+d)*4,k=r.color.light;if(f>=u&&d>=u&&f<c-u&&d<c-u){const P=Math.floor((f-u)/l),S=Math.floor((d-u)/l);k=h[a[P*s+S]?1:0]}i[p++]=k.r,i[p++]=k.g,i[p++]=k.b,i[p]=k.a}}})(jt)),jt}var un;function es(){return un||(un=1,(function(n){const t=cn();function e(o,r,s){o.clearRect(0,0,r.width,r.height),r.style||(r.style={}),r.height=s,r.width=s,r.style.height=s+"px",r.style.width=s+"px"}function i(){try{return document.createElement("canvas")}catch{throw new Error("You need to specify a canvas element")}}n.render=function(r,s,a){let l=a,c=s;typeof l>"u"&&(!s||!s.getContext)&&(l=s,s=void 0),s||(c=i()),l=t.getOptions(l);const u=t.getImageWidth(r.modules.size,l),h=c.getContext("2d"),f=h.createImageData(u,u);return t.qrToImageData(f.data,r,l),e(h,c,u),h.putImageData(f,0,0),c},n.renderToDataURL=function(r,s,a){let l=a;typeof l>"u"&&(!s||!s.getContext)&&(l=s,s=void 0),l||(l={});const c=n.render(r,s,l),u=l.type||"image/png",h=l.rendererOpts||{};return c.toDataURL(u,h.quality)}})(Vt)),Vt}var Ht={},dn;function ns(){if(dn)return Ht;dn=1;const n=cn();function t(o,r){const s=o.a/255,a=r+'="'+o.hex+'"';return s<1?a+" "+r+'-opacity="'+s.toFixed(2).slice(1)+'"':a}function e(o,r,s){let a=o+r;return typeof s<"u"&&(a+=" "+s),a}function i(o,r,s){let a="",l=0,c=!1,u=0;for(let h=0;h<o.length;h++){const f=Math.floor(h%r),d=Math.floor(h/r);!f&&!c&&(c=!0),o[h]?(u++,h>0&&f>0&&o[h-1]||(a+=c?e("M",f+s,.5+d+s):e("m",l,0),l=0,c=!1),f+1<r&&o[h+1]||(a+=e("h",u),u=0)):l++}return a}return Ht.render=function(r,s,a){const l=n.getOptions(s),c=r.modules.size,u=r.modules.data,h=c+l.margin*2,f=l.color.light.a?"<path "+t(l.color.light,"fill")+' d="M0 0h'+h+"v"+h+'H0z"/>':"",d="<path "+t(l.color.dark,"stroke")+' d="'+i(u,c,l.margin)+'"/>',p='viewBox="0 0 '+h+" "+h+'"',P='<svg xmlns="http://www.w3.org/2000/svg" '+(l.width?'width="'+l.width+'" height="'+l.width+'" ':"")+p+' shape-rendering="crispEdges">'+f+d+`</svg>
|
|
515
|
+
`;return typeof a=="function"&&a(null,P),P},Ht}var hn;function is(){if(hn)return X;hn=1;const n=zr(),t=ts(),e=es(),i=ns();function o(r,s,a,l,c){const u=[].slice.call(arguments,1),h=u.length,f=typeof u[h-1]=="function";if(!f&&!n())throw new Error("Callback required as last argument");if(f){if(h<2)throw new Error("Too few arguments provided");h===2?(c=a,a=s,s=l=void 0):h===3&&(s.getContext&&typeof c>"u"?(c=l,l=void 0):(c=l,l=a,a=s,s=void 0))}else{if(h<1)throw new Error("Too few arguments provided");return h===1?(a=s,s=l=void 0):h===2&&!s.getContext&&(l=a,a=s,s=void 0),new Promise(function(d,p){try{const k=t.create(a,l);d(r(k,s,l))}catch(k){p(k)}})}try{const d=t.create(a,l);c(null,r(d,s,l))}catch(d){c(d)}}return X.create=t.create,X.toCanvas=o.bind(null,e.render),X.toDataURL=o.bind(null,e.renderToDataURL),X.toString=o.bind(null,function(r,s,a){return i.render(r,a)}),X}var fn=is();const os=et({__proto__:null,default:xr(fn)},[fn]);M.Annotations=Wt,M.Attribute=te,M.AttributeValue=Xt,M.Camera=ae,M.Configuration=ce,M.ERROR_CODES=q,M.Focus=ue,M.Photo=de,M.Snapshot=fe,M.VD_EVENTS=W,M.VirtualdisplayClient=Or,M.VirtualdisplayError=x,M.enableDebugMode=se,M.isDebugMode=Hn,Object.defineProperty(M,Symbol.toStringTag,{value:"Module"})}));
|