@virtualdisplay.io/client 4.0.0-alpha.15 → 4.0.0-alpha.16
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 +6 -0
- package/dist/index.d.ts +1064 -0
- package/dist/virtualdisplay.client.cjs.js +3 -3
- package/dist/virtualdisplay.client.es.js +448 -448
- package/dist/virtualdisplay.client.umd.js +4 -4
- package/package.json +3 -3
- package/dist/src/annotations/annotations.d.ts +0 -20
- package/dist/src/annotations/annotations.d.ts.map +0 -1
- package/dist/src/annotations/index.d.ts +0 -2
- package/dist/src/annotations/index.d.ts.map +0 -1
- package/dist/src/attributes/attribute.d.ts +0 -40
- package/dist/src/attributes/attribute.d.ts.map +0 -1
- package/dist/src/attributes/attributes.d.ts +0 -45
- package/dist/src/attributes/attributes.d.ts.map +0 -1
- package/dist/src/attributes/selections.d.ts +0 -17
- package/dist/src/attributes/selections.d.ts.map +0 -1
- package/dist/src/attributes/value.d.ts +0 -13
- package/dist/src/attributes/value.d.ts.map +0 -1
- package/dist/src/camera/camera.d.ts +0 -40
- package/dist/src/camera/camera.d.ts.map +0 -1
- package/dist/src/camera/index.d.ts +0 -4
- package/dist/src/camera/index.d.ts.map +0 -1
- package/dist/src/camera/position.d.ts +0 -56
- package/dist/src/camera/position.d.ts.map +0 -1
- package/dist/src/client/client.d.ts +0 -71
- package/dist/src/client/client.d.ts.map +0 -1
- package/dist/src/client/error.d.ts +0 -23
- package/dist/src/client/error.d.ts.map +0 -1
- package/dist/src/client/events.d.ts +0 -22
- package/dist/src/client/events.d.ts.map +0 -1
- package/dist/src/client/iframe-builder.d.ts +0 -27
- package/dist/src/client/iframe-builder.d.ts.map +0 -1
- package/dist/src/client/options.d.ts +0 -19
- package/dist/src/client/options.d.ts.map +0 -1
- package/dist/src/client/ready-state-tracker.d.ts +0 -13
- package/dist/src/client/ready-state-tracker.d.ts.map +0 -1
- package/dist/src/client/types.d.ts +0 -20
- package/dist/src/client/types.d.ts.map +0 -1
- package/dist/src/configuration/configuration.d.ts +0 -113
- package/dist/src/configuration/configuration.d.ts.map +0 -1
- package/dist/src/configuration/index.d.ts +0 -2
- package/dist/src/configuration/index.d.ts.map +0 -1
- package/dist/src/configuration/resolver.d.ts +0 -16
- package/dist/src/configuration/resolver.d.ts.map +0 -1
- package/dist/src/focus/focus.d.ts +0 -43
- package/dist/src/focus/focus.d.ts.map +0 -1
- package/dist/src/focus/index.d.ts +0 -2
- package/dist/src/focus/index.d.ts.map +0 -1
- package/dist/src/index.d.ts +0 -16
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/snapshot/index.d.ts +0 -3
- package/dist/src/snapshot/index.d.ts.map +0 -1
- package/dist/src/snapshot/photo.d.ts +0 -47
- package/dist/src/snapshot/photo.d.ts.map +0 -1
- package/dist/src/snapshot/snapshot.d.ts +0 -36
- package/dist/src/snapshot/snapshot.d.ts.map +0 -1
- package/dist/src/ui/action-bar.d.ts +0 -18
- package/dist/src/ui/action-bar.d.ts.map +0 -1
- package/dist/src/ui/camera-controls.d.ts +0 -8
- package/dist/src/ui/camera-controls.d.ts.map +0 -1
- package/dist/src/ui/commerce-panel.d.ts +0 -31
- package/dist/src/ui/commerce-panel.d.ts.map +0 -1
- package/dist/src/ui/controls/attribute-group.d.ts +0 -6
- package/dist/src/ui/controls/attribute-group.d.ts.map +0 -1
- package/dist/src/ui/event-bus.d.ts +0 -12
- package/dist/src/ui/event-bus.d.ts.map +0 -1
- package/dist/src/ui/layouts/inframe-layout.d.ts +0 -13
- package/dist/src/ui/layouts/inframe-layout.d.ts.map +0 -1
- package/dist/src/ui/layouts/layout.d.ts +0 -15
- package/dist/src/ui/layouts/layout.d.ts.map +0 -1
- package/dist/src/ui/layouts/null-layout.d.ts +0 -12
- package/dist/src/ui/layouts/null-layout.d.ts.map +0 -1
- package/dist/src/ui/layouts/registry.d.ts +0 -4
- package/dist/src/ui/layouts/registry.d.ts.map +0 -1
- package/dist/src/ui/layouts/sidebar-layout.d.ts +0 -24
- package/dist/src/ui/layouts/sidebar-layout.d.ts.map +0 -1
- package/dist/src/ui/loading.d.ts +0 -43
- package/dist/src/ui/loading.d.ts.map +0 -1
- package/dist/src/ui/standard-interface.d.ts +0 -47
- package/dist/src/ui/standard-interface.d.ts.map +0 -1
- package/dist/src/ui/styles.d.ts +0 -3
- package/dist/src/ui/styles.d.ts.map +0 -1
- package/dist/src/utils/logger.d.ts +0 -11
- package/dist/src/utils/logger.d.ts.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(I,et){typeof exports=="object"&&typeof module<"u"?et(exports):typeof define=="function"&&define.amd?define(["exports"],et):(I=typeof globalThis<"u"?globalThis:I||self,et(I.VirtualdisplayClient={}))})(this,(function(I){"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 $={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}"`,$.VALUE_NOT_FOUND)}static parentNotFound(t){return new x(`Parent element not found: ${t}`,$.PARENT_NOT_FOUND)}static invalidParameter(t){return new x(t,$.INVALID_PARAMETER)}}const bn={};class vn{defaultServer="https://server.virtualdisplay.io";options;constructor(t){this.options=t}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(bn?.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 yn(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 wn(n){return JSON.stringify(n)}function Cn(n,t){const e=t?yn(n):wn(n);n.level==="error"?console.error(e):n.level==="warn"?console.warn(e):console.log(e)}function Wt(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?Wt(n.cause,t+1):String(n.cause)),e}function En(n){const t={};for(const[e,i]of Object.entries(n))t[e]=i instanceof Error?Wt(i):i;return t}function _n(){return new Date}function An(n){return n.toISOString()}function Qt(){return typeof navigator>"u"?"":navigator.userAgent}function Sn(){return typeof navigator>"u"?!1:navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1}function kn(){return/iPhone|iPad|iPod/i.test(Qt())||Sn()}function Tn(){return/Android/i.test(Qt())}function Rn(){return kn()||Tn()}class ct{constructor(t){this.config=t}config;log(t,e,i={}){const o=this.config.traceProvider?.()??{},r={timestamp:An(_n()),level:t,msg:e,service:this.config.service,...o,...En(i)};Cn(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)}with(t){const e=new ct(this.config);return e.log=((i,o,r={})=>{this.log(i,o,{...t,...r})}).bind(this),e}}function Xt(n,t){const e=t?.isDev!==void 0?t.isDev:typeof process<"u"?process.env.NODE_ENV!=="production":!0;return new ct({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 te(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 ee=!1;I.logger=te(Xt("client",{isDev:!1}));function ne(){ee=!0,I.logger=te(Xt("client",{isDev:!0}))}function Nn(){return ee}class In{ready=!1;onReady;constructor(t){this.onReady=t}handleMappingReceived(){this.ready||(this.ready=!0,I.logger.info("Mapping received from server, client is now ready"),this.onReady?.())}get isReady(){return this.ready}clear(){this.ready=!1}}const M={HANDSHAKE:"handshake",MUTATION:"mutation",STATE:"state",LOADING_INDICATOR:"loading_indicator",CAMERA:"camera",SNAPSHOT:"snapshot",MAPPING:"mapping",AR_ACTIVATE:"ar_activate",CONFIG:"config",ANNOTATION_PLACE_MODE:"annotation_place_mode",ANNOTATION_PLACED:"annotation_placed",ANNOTATION_TOGGLE:"annotation_toggle",FOCUS:"focus",PRICING:"pricing"},ie={FOCUS:"focus",UNFOCUS:"unfocus"},Mn={FOCUSED:"focused"},Pn={HIDDEN:"hidden"},Bn=new Set(Object.values(M));function Ln(n){if(typeof n!="object"||n===null)return!1;const t=n;return typeof t.target=="string"?!1:typeof t.type=="string"&&Bn.has(t.type)}function On(n){const t=V(n);return t!==null&&t.type===M.HANDSHAKE}function xn(n){const t=V(n);return t!==null&&t.type===M.MUTATION&&Array.isArray(t.results)}function Dn(n){const t=V(n);return t!==null&&t.type===M.SNAPSHOT&&("data"in t||"error"in t)}function zn(n){const t=V(n);return t!==null&&t.type===M.CAMERA&&Array.isArray(t.transforms)}function Fn(n){const t=V(n);return t!==null&&t.type===M.MAPPING&&Array.isArray(t.attributes)}function Un(n){const t=V(n);return t!==null&&t.type===M.LOADING_INDICATOR&&typeof t.progress=="number"}function $n(n){const t=V(n);return t!==null&&t.type===M.CONFIG&&typeof t.viewerSettings=="object"}function Vn(n){const t=V(n);return t!==null&&t.type===M.ANNOTATION_PLACED&&typeof t.position=="object"&&t.position!==null}function qn(n){const t=V(n);return t!==null&&t.type===M.FOCUS&&typeof t.state=="string"}function jn(n){const t=V(n);return t!==null&&t.type===M.PRICING&&typeof t.pricing=="object"&&t.pricing!==null}function V(n){return typeof n!="object"||n===null?null:n}class oe{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 Hn{constructor(t,e){this.getTarget=t,this.sourceId=`vd-${Math.random().toString(36).slice(2,8)}`,this.targetOrigin=e?.targetOrigin??"*",this.publisher=new oe(i=>this.post(i)),this.consumer=new oe(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;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(!Ln(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 re{constructor(t){this.send=t}send;placedCallbacks=[];setEnabled(t){this.send({type:M.ANNOTATION_TOGGLE,enabled:t})}startPlacing(){this.send({type:M.ANNOTATION_PLACE_MODE,enabled:!0})}stopPlacing(){this.send({type:M.ANNOTATION_PLACE_MODE,enabled:!1})}onPlaced(t){this.placedCallbacks.push(t)}handlePlaced(t){for(const e of this.placedCallbacks)e(t)}}class se{constructor(t,e){this.value=t,this.attribute=e}value;attribute;isSelectedValue=!1;get isSelected(){return this.isSelectedValue}setSelected(t){this.isSelectedValue=t}}class ae{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 se(i,this.name);i===this.defaultValue&&o.setSelected(!0),e.set(i,o)}return e}}class Gn{attributes=new Map;constructor(t,e,i){for(const o of t){const r=this.buildOptions(o,e);this.attributes.set(o.name,new ae(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}}class Kn{constructor(t,e){this.send=t,this.onMutationFailed=e}send;onMutationFailed;registry;pendingCallbacks=[];handleMappingReceived(t){I.logger.debug("Initializing from server mapping",{attributeCount:t.attributes.length}),this.registry=new Gn(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){I.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&&I.logger.warn(`onChange: attribute "${t}" not found — buffered callback will not fire`),i?.onChange(e)}this.pendingCallbacks.length=0}}let le=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: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 Yn{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)}}}const Z={SELECT:"ui:select",SELECTED:"ui:selected",FOCUS_CHANGE:"vd:focus-change",CONFIGURATION_CHANGE:"vd:configuration-change",CONFIGURATION_SUBMIT:"vd:configuration-submit"};class ce{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:ie.FOCUS,component:t})}clear(){this.send({type:M.FOCUS,action:ie.UNFOCUS})}onChange(t){this.changeCallbacks.push(t)}handleStateReceived(t){t.state===Mn.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)}}function Jn(n,t){const e=n.filter(r=>Zn(r,t));if(e.length===0)return;const i=Math.max(...e.map(ue)),o=e.filter(r=>ue(r)===i);return o.length===1?o[0]:void 0}function Zn(n,t){return Object.entries(n.attributes).every(([e,i])=>t[e]===i)}function ue(n){return Object.keys(n.attributes).length}class de{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=Jn(this.pricing.rules,this.selection);if(!(t===void 0||t.availability===Pn.HIDDEN))return{attributes:{...this.selection},reference:t.reference,price:t.priceCents,currency:this.pricing.currency,availability:t.availability}}}class he{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 fe=3e4;class ge{constructor(t){this.send=t}send;validExtensions=[".png"];pendingPhotos=new Map;take(t){this.validateFilename(t),I.logger.debug("Taking snapshot",{filename:t});const e=new he(t),i=setTimeout(()=>{this.pendingPhotos.delete(t),I.logger.warn("Snapshot timed out",{filename:t}),e.fail(new x(`Snapshot timed out: the viewer did not respond within ${fe}ms`,$.SNAPSHOT_FAILED))},fe);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){I.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,$.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",$.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",$.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(", ")}`,$.INVALID_PARAMETER);if(t.includes("..")||t.includes("/")||t.includes("\\"))throw new x('Filename cannot contain path separators or ".."',$.INVALID_PARAMETER)}}class Wn{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 Qn={},Xn="en",me=["en","nl","de"],ut=["baseLocale"],pe=[];let be,ve;function ti(n){if(pe.length===0)return;const t=typeof n=="string"?n:n.href;if(be===t)return ve;const e=new URL(t,"http://dummy.com");let i;for(const o of pe)if(new Qn(o.match,e.href).exec(e.href)){i=o;break}return be=t,ve=i,i}function ye(n){const t=ti(n);return t&&t.exclude!==!0&&Array.isArray(t.strategy)?t.strategy:ut}const dt=typeof window>"u";globalThis.__paraglide=globalThis.__paraglide??{},globalThis.__paraglide.ssr=globalThis.__paraglide.ssr??{};let we=!1,P=()=>{let n=ut;!dt&&typeof window<"u"&&window.location?.href&&(n=ye(window.location.href));const t=ei(n);if(t)return we||(we=!0,Ce(t,{reload:!1})),t;throw new Error("No locale found. Read the docs https://paraglidejs.com/errors#no-locale-found")};function ei(n,t){let e;for(const i of n){if(i==="baseLocale")e=Xn;else if(_e(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 ii(s)}}const o=Ee(e);if(o)return o}}const ni=n=>{window.location.reload()};let Ce=(n,t)=>{const e={reload:!0,...t};let i;try{i=P()}catch{}const o=[];let r=ut;!dt&&typeof window<"u"&&window.location?.href&&(r=ye(window.location.href));for(const a of r)if(a!=="baseLocale"&&_e(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=()=>{!dt&&e.reload&&window.location&&n!==i&&ni()};if(o.length)return Promise.all(o).then(()=>{s()});s()};function Ee(n){if(typeof n!="string")return;const t=n.toLowerCase();for(const e of me)if(e.toLowerCase()===t)return e}function ii(n){const t=Ee(n);if(t)return t;throw new Error(`Invalid locale: ${n}. Expected one of: ${me.join(", ")}`)}const rt=new Map;function _e(n){return typeof n=="string"&&/^custom-[A-Za-z0-9_-]+$/.test(n)}const oi=()=>"Activate AR",ri=()=>"AR activeren",si=()=>"AR aktivieren",ai=((n={},t={})=>{const e=t.locale??P();return e==="en"?oi():e==="nl"?ri():si()}),li=()=>"Scan to view in AR",ci=()=>"Scan om in AR te bekijken",ui=()=>"Scannen für AR-Ansicht",di=((n={},t={})=>{const e=t.locale??P();return e==="en"?li():e==="nl"?ci():ui()}),hi=()=>"Use your smartphone camera to scan this QR code",fi=()=>"Gebruik de camera van je smartphone om deze QR-code te scannen",gi=()=>"Verwenden Sie die Kamera Ihres Smartphones, um diesen QR-Code zu scannen",mi=((n={},t={})=>{const e=t.locale??P();return e==="en"?hi():e==="nl"?fi():gi()}),pi=()=>"Your phone will open the 3D model in AR mode.",bi=()=>"Je telefoon opent het 3D-model in AR-modus.",vi=()=>"Das 3D-Modell wird im AR-Modus Ihres Telefons geöffnet",yi=((n={},t={})=>{const e=t.locale??P();return e==="en"?pi():e==="nl"?bi():vi()}),wi=()=>"Close",Ci=()=>"Sluiten",Ei=()=>"Schließen",_i=((n={},t={})=>{const e=t.locale??P();return e==="en"?wi():e==="nl"?Ci():Ei()}),Ai=()=>"Fullscreen",Si=()=>"Volledig scherm",ki=()=>"Vollbild",Ti=((n={},t={})=>{const e=t.locale??P();return e==="en"?Ai():e==="nl"?Si():ki()}),Ri=()=>"Downloading",Ni=()=>"Downloaden",Ii=()=>"Herunterladen",Ae=((n={},t={})=>{const e=t.locale??P();return e==="en"?Ri():e==="nl"?Ni():Ii()}),Mi=()=>"Rendering",Pi=()=>"Renderen",Bi=()=>"Rendern",Li=((n={},t={})=>{const e=t.locale??P();return e==="en"?Mi():e==="nl"?Pi():Bi()}),Oi=()=>"Screenshot",xi=()=>"Screenshot",Di=()=>"Screenshot",zi=((n={},t={})=>{const e=t.locale??P();return e==="en"?Oi():e==="nl"?xi():Di()}),Fi=()=>"Configure",Ui=()=>"Configureer",$i=()=>"Konfigurieren",Vi=((n={},t={})=>{const e=t.locale??P();return e==="en"?Fi():e==="nl"?Ui():$i()}),qi=()=>"Close",ji=()=>"Sluiten",Hi=()=>"Schließen",Gi=((n={},t={})=>{const e=t.locale??P();return e==="en"?qi():e==="nl"?ji():Hi()}),Ki=()=>"Reset camera",Yi=()=>"Camera resetten",Ji=()=>"Kamera zurücksetzen",Zi=((n={},t={})=>{const e=t.locale??P();return e==="en"?Ki():e==="nl"?Yi():Ji()}),Wi=()=>"Zoom in",Qi=()=>"Inzoomen",Xi=()=>"Hineinzoomen",to=((n={},t={})=>{const e=t.locale??P();return e==="en"?Wi():e==="nl"?Qi():Xi()}),eo=()=>"Zoom out",no=()=>"Uitzoomen",io=()=>"Herauszoomen",oo=((n={},t={})=>{const e=t.locale??P();return e==="en"?eo():e==="nl"?no():io()}),ro=()=>"Rotate left",so=()=>"Naar links draaien",ao=()=>"Nach links drehen",lo=((n={},t={})=>{const e=t.locale??P();return e==="en"?ro():e==="nl"?so():ao()}),co=()=>"Rotate right",uo=()=>"Naar rechts draaien",ho=()=>"Nach rechts drehen",fo=((n={},t={})=>{const e=t.locale??P();return e==="en"?co():e==="nl"?uo():ho()}),go=()=>"Tilt up",mo=()=>"Omhoog kantelen",po=()=>"Nach oben kippen",bo=((n={},t={})=>{const e=t.locale??P();return e==="en"?go():e==="nl"?mo():po()}),vo=()=>"Tilt down",yo=()=>"Omlaag kantelen",wo=()=>"Nach unten kippen",Co=((n={},t={})=>{const e=t.locale??P();return e==="en"?vo():e==="nl"?yo():wo()}),Eo=()=>"Working…",_o=()=>"Bezig…",Ao=()=>"Läuft…",So=((n={},t={})=>{const e=t.locale??P();return e==="en"?Eo():e==="nl"?_o():Ao()}),ko=()=>"Done",To=()=>"Gelukt",Ro=()=>"Fertig",No=((n={},t={})=>{const e=t.locale??P();return e==="en"?ko():e==="nl"?To():Ro()}),Io=()=>"Failed",Mo=()=>"Mislukt",Po=()=>"Fehlgeschlagen",Bo=((n={},t={})=>{const e=t.locale??P();return e==="en"?Io():e==="nl"?Mo():Po()});const Lo={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 Se=([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=Se(o);i.appendChild(r)}),i},ke=(n,t={})=>{const i={...Lo,...t};return Se(["svg",i,n])};const Oo=[["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 xo=[["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 Do=[["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 Uo=[["path",{d:"M15 3h6v6"}],["path",{d:"m21 3-7 7"}],["path",{d:"m3 21 7-7"}],["path",{d:"M9 21H3v-6"}]];const $o=[["path",{d:"m14 10 7-7"}],["path",{d:"M20 10h-6V4"}],["path",{d:"m3 21 7-7"}],["path",{d:"M4 14h6v6"}]];const Vo=[["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 jo=[["path",{d:"M18 6 6 18"}],["path",{d:"m6 6 12 12"}]];const Ho=[["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 Go=[["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 F(n,{size:t=20,strokeWidth:e=1.75}={}){return ke(n,{width:t,height:t,"stroke-width":e})}const D={ar:n=>F(Oo,n),fullscreen:n=>F(Uo,n),exitFullscreen:n=>F($o,n),screenshot:n=>F(xo,n),tiltUp:n=>F(Fo,n),tiltDown:n=>F(Te,n),rotateLeft:n=>F(Do,n),rotateRight:n=>F(zo,n),zoomIn:n=>F(Ho,n),zoomOut:n=>F(Go,n),reset:n=>F(Vo,n),configurator:n=>F(qo,n),close:n=>F(jo,n)};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 L={semantic:{error:"#dc2626"},neutral:{500:"#737373",600:"#525252",900:"#171717"},white:"#ffffff",black:"#000000"},_={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 Ko{element;constructor(){this.element=document.createElement("div"),Object.assign(this.element.style,{background:L.white,borderRadius:_[3],padding:_[6],boxShadow:`0 ${_[2]} ${_[8]} oklch(0% 0 0 / 20%)`,maxWidth:"20rem",width:"100%"})}}class Yo{constructor(t={}){this.options=t,this.card=new Ko,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:_[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 Jo{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 Zo{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=ke(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 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"}},Wo=U.fontFamily.sans.join(", ");class Qo{qrLib=null;dialog=null;async show(t){this.hide(),this.qrLib??=await Promise.resolve().then(()=>Jr);const e=await this.qrLib.toDataURL(t,{width:256,margin:4,errorCorrectionLevel:"M",color:{dark:L.black,light:L.white}});this.dialog=new Yo({onClose:()=>{this.dialog=null}}),Object.assign(this.dialog.card.element.style,{display:"flex",flexDirection:"column",alignItems:"center",gap:_[3],fontFamily:Wo}),this.dialog.card.element.appendChild(this.createText(di(),{fontSize:U.fontSize.base,fontWeight:U.fontWeight.semibold,color:L.neutral[900]})),this.dialog.card.element.appendChild(this.createText(mi(),{fontSize:U.fontSize.sm,color:L.neutral[600]})),this.dialog.card.element.appendChild(this.createQrImage(e)),this.dialog.card.element.appendChild(this.createText(yi(),{fontSize:U.fontSize.xs,color:L.neutral[500]}));const i=new z({variant:"outline",label:_i(),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:_[24],height:_[24],borderRadius:_[1]}),e}}const W=U.fontFamily.sans.join(", "),Xo=`
|
|
1
|
+
(function(I,et){typeof exports=="object"&&typeof module<"u"?et(exports):typeof define=="function"&&define.amd?define(["exports"],et):(I=typeof globalThis<"u"?globalThis:I||self,et(I.VirtualdisplayClient={}))})(this,(function(I){"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 $={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}"`,$.VALUE_NOT_FOUND)}static parentNotFound(t){return new x(`Parent element not found: ${t}`,$.PARENT_NOT_FOUND)}static invalidParameter(t){return new x(t,$.INVALID_PARAMETER)}}const bn={};class vn{defaultServer="https://server.virtualdisplay.io";options;constructor(t){this.options=t}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(bn?.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 yn(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 wn(n){return JSON.stringify(n)}function Cn(n,t){const e=t?yn(n):wn(n);n.level==="error"?console.error(e):n.level==="warn"?console.warn(e):console.log(e)}function Wt(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?Wt(n.cause,t+1):String(n.cause)),e}function En(n){const t={};for(const[e,i]of Object.entries(n))t[e]=i instanceof Error?Wt(i):i;return t}function _n(){return new Date}function An(n){return n.toISOString()}function Qt(){return typeof navigator>"u"?"":navigator.userAgent}function Sn(){return typeof navigator>"u"?!1:navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1}function kn(){return/iPhone|iPad|iPod/i.test(Qt())||Sn()}function Tn(){return/Android/i.test(Qt())}function Rn(){return kn()||Tn()}class ct{constructor(t){this.config=t}config;log(t,e,i={}){const o=this.config.traceProvider?.()??{},r={timestamp:An(_n()),level:t,msg:e,service:this.config.service,...o,...En(i)};Cn(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)}with(t){const e=new ct(this.config);return e.log=((i,o,r={})=>{this.log(i,o,{...t,...r})}).bind(this),e}}function Xt(n,t){const e=t?.isDev!==void 0?t.isDev:typeof process<"u"?process.env.NODE_ENV!=="production":!0;return new ct({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 te(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 ee=!1;I.logger=te(Xt("client",{isDev:!1}));function ne(){ee=!0,I.logger=te(Xt("client",{isDev:!0}))}function Nn(){return ee}class In{ready=!1;onReady;constructor(t){this.onReady=t}handleMappingReceived(){this.ready||(this.ready=!0,I.logger.info("Mapping received from server, client is now ready"),this.onReady?.())}get isReady(){return this.ready}clear(){this.ready=!1}}const Z={SELECT:"ui:select",SELECTED:"ui:selected",FOCUS_CHANGE:"vd:focus-change",CONFIGURATION_CHANGE:"vd:configuration-change",CONFIGURATION_SUBMIT:"vd:configuration-submit"};class ie{constructor(t,e){this.value=t,this.attribute=e}value;attribute;isSelectedValue=!1;get isSelected(){return this.isSelectedValue}setSelected(t){this.isSelectedValue=t}}class oe{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 ie(i,this.name);i===this.defaultValue&&o.setSelected(!0),e.set(i,o)}return e}}class Mn{attributes=new Map;constructor(t,e,i){for(const o of t){const r=this.buildOptions(o,e);this.attributes.set(o.name,new oe(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}}const M={HANDSHAKE:"handshake",MUTATION:"mutation",STATE:"state",LOADING_INDICATOR:"loading_indicator",CAMERA:"camera",SNAPSHOT:"snapshot",MAPPING:"mapping",AR_ACTIVATE:"ar_activate",CONFIG:"config",ANNOTATION_PLACE_MODE:"annotation_place_mode",ANNOTATION_PLACED:"annotation_placed",ANNOTATION_TOGGLE:"annotation_toggle",FOCUS:"focus",PRICING:"pricing"},re={FOCUS:"focus",UNFOCUS:"unfocus"},Pn={FOCUSED:"focused"},Bn={HIDDEN:"hidden"},Ln=new Set(Object.values(M));function On(n){if(typeof n!="object"||n===null)return!1;const t=n;return typeof t.target=="string"?!1:typeof t.type=="string"&&Ln.has(t.type)}function xn(n){const t=V(n);return t!==null&&t.type===M.HANDSHAKE}function Dn(n){const t=V(n);return t!==null&&t.type===M.MUTATION&&Array.isArray(t.results)}function zn(n){const t=V(n);return t!==null&&t.type===M.SNAPSHOT&&("data"in t||"error"in t)}function Fn(n){const t=V(n);return t!==null&&t.type===M.CAMERA&&Array.isArray(t.transforms)}function Un(n){const t=V(n);return t!==null&&t.type===M.MAPPING&&Array.isArray(t.attributes)}function $n(n){const t=V(n);return t!==null&&t.type===M.LOADING_INDICATOR&&typeof t.progress=="number"}function Vn(n){const t=V(n);return t!==null&&t.type===M.CONFIG&&typeof t.viewerSettings=="object"}function qn(n){const t=V(n);return t!==null&&t.type===M.ANNOTATION_PLACED&&typeof t.position=="object"&&t.position!==null}function jn(n){const t=V(n);return t!==null&&t.type===M.FOCUS&&typeof t.state=="string"}function Hn(n){const t=V(n);return t!==null&&t.type===M.PRICING&&typeof t.pricing=="object"&&t.pricing!==null}function V(n){return typeof n!="object"||n===null?null:n}class se{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 Gn{constructor(t,e){this.getTarget=t,this.sourceId=`vd-${Math.random().toString(36).slice(2,8)}`,this.targetOrigin=e?.targetOrigin??"*",this.publisher=new se(i=>this.post(i)),this.consumer=new se(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;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(!On(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 Kn{constructor(t,e){this.send=t,this.onMutationFailed=e}send;onMutationFailed;registry;pendingCallbacks=[];handleMappingReceived(t){I.logger.debug("Initializing from server mapping",{attributeCount:t.attributes.length}),this.registry=new Mn(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){I.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&&I.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: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 Yn{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)}}}class le{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:re.FOCUS,component:t})}clear(){this.send({type:M.FOCUS,action:re.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)}}function Jn(n,t){const e=n.filter(r=>Zn(r,t));if(e.length===0)return;const i=Math.max(...e.map(ce)),o=e.filter(r=>ce(r)===i);return o.length===1?o[0]:void 0}function Zn(n,t){return Object.entries(n.attributes).every(([e,i])=>t[e]===i)}function ce(n){return Object.keys(n.attributes).length}class ue{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=Jn(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 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),I.logger.debug("Taking snapshot",{filename:t});const e=new de(t),i=setTimeout(()=>{this.pendingPhotos.delete(t),I.logger.warn("Snapshot timed out",{filename:t}),e.fail(new x(`Snapshot timed out: the viewer did not respond within ${he}ms`,$.SNAPSHOT_FAILED))},he);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){I.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,$.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",$.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",$.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(", ")}`,$.INVALID_PARAMETER);if(t.includes("..")||t.includes("/")||t.includes("\\"))throw new x('Filename cannot contain path separators or ".."',$.INVALID_PARAMETER)}}class Wn{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 Qn={},Xn="en",ge=["en","nl","de"],ut=["baseLocale"],me=[];let pe,be;function ti(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 Qn(o.match,e.href).exec(e.href)){i=o;break}return pe=t,be=i,i}function ve(n){const t=ti(n);return t&&t.exclude!==!0&&Array.isArray(t.strategy)?t.strategy:ut}const dt=typeof window>"u";globalThis.__paraglide=globalThis.__paraglide??{},globalThis.__paraglide.ssr=globalThis.__paraglide.ssr??{};let ye=!1,P=()=>{let n=ut;!dt&&typeof window<"u"&&window.location?.href&&(n=ve(window.location.href));const t=ei(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 ei(n,t){let e;for(const i of n){if(i==="baseLocale")e=Xn;else if(Ee(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 ii(s)}}const o=Ce(e);if(o)return o}}const ni=n=>{window.location.reload()};let we=(n,t)=>{const e={reload:!0,...t};let i;try{i=P()}catch{}const o=[];let r=ut;!dt&&typeof window<"u"&&window.location?.href&&(r=ve(window.location.href));for(const a of r)if(a!=="baseLocale"&&Ee(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=()=>{!dt&&e.reload&&window.location&&n!==i&&ni()};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 ii(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 Ee(n){return typeof n=="string"&&/^custom-[A-Za-z0-9_-]+$/.test(n)}const oi=()=>"Activate AR",ri=()=>"AR activeren",si=()=>"AR aktivieren",ai=((n={},t={})=>{const e=t.locale??P();return e==="en"?oi():e==="nl"?ri():si()}),li=()=>"Scan to view in AR",ci=()=>"Scan om in AR te bekijken",ui=()=>"Scannen für AR-Ansicht",di=((n={},t={})=>{const e=t.locale??P();return e==="en"?li():e==="nl"?ci():ui()}),hi=()=>"Use your smartphone camera to scan this QR code",fi=()=>"Gebruik de camera van je smartphone om deze QR-code te scannen",gi=()=>"Verwenden Sie die Kamera Ihres Smartphones, um diesen QR-Code zu scannen",mi=((n={},t={})=>{const e=t.locale??P();return e==="en"?hi():e==="nl"?fi():gi()}),pi=()=>"Your phone will open the 3D model in AR mode.",bi=()=>"Je telefoon opent het 3D-model in AR-modus.",vi=()=>"Das 3D-Modell wird im AR-Modus Ihres Telefons geöffnet",yi=((n={},t={})=>{const e=t.locale??P();return e==="en"?pi():e==="nl"?bi():vi()}),wi=()=>"Close",Ci=()=>"Sluiten",Ei=()=>"Schließen",_i=((n={},t={})=>{const e=t.locale??P();return e==="en"?wi():e==="nl"?Ci():Ei()}),Ai=()=>"Fullscreen",Si=()=>"Volledig scherm",ki=()=>"Vollbild",Ti=((n={},t={})=>{const e=t.locale??P();return e==="en"?Ai():e==="nl"?Si():ki()}),Ri=()=>"Downloading",Ni=()=>"Downloaden",Ii=()=>"Herunterladen",_e=((n={},t={})=>{const e=t.locale??P();return e==="en"?Ri():e==="nl"?Ni():Ii()}),Mi=()=>"Rendering",Pi=()=>"Renderen",Bi=()=>"Rendern",Li=((n={},t={})=>{const e=t.locale??P();return e==="en"?Mi():e==="nl"?Pi():Bi()}),Oi=()=>"Screenshot",xi=()=>"Screenshot",Di=()=>"Screenshot",zi=((n={},t={})=>{const e=t.locale??P();return e==="en"?Oi():e==="nl"?xi():Di()}),Fi=()=>"Configure",Ui=()=>"Configureren",$i=()=>"Konfigurieren",Vi=((n={},t={})=>{const e=t.locale??P();return e==="en"?Fi():e==="nl"?Ui():$i()}),qi=()=>"Close",ji=()=>"Sluiten",Hi=()=>"Schließen",Gi=((n={},t={})=>{const e=t.locale??P();return e==="en"?qi():e==="nl"?ji():Hi()}),Ki=()=>"Reset camera",Yi=()=>"Camera resetten",Ji=()=>"Kamera zurücksetzen",Zi=((n={},t={})=>{const e=t.locale??P();return e==="en"?Ki():e==="nl"?Yi():Ji()}),Wi=()=>"Zoom in",Qi=()=>"Inzoomen",Xi=()=>"Hineinzoomen",to=((n={},t={})=>{const e=t.locale??P();return e==="en"?Wi():e==="nl"?Qi():Xi()}),eo=()=>"Zoom out",no=()=>"Uitzoomen",io=()=>"Herauszoomen",oo=((n={},t={})=>{const e=t.locale??P();return e==="en"?eo():e==="nl"?no():io()}),ro=()=>"Rotate left",so=()=>"Naar links draaien",ao=()=>"Nach links drehen",lo=((n={},t={})=>{const e=t.locale??P();return e==="en"?ro():e==="nl"?so():ao()}),co=()=>"Rotate right",uo=()=>"Naar rechts draaien",ho=()=>"Nach rechts drehen",fo=((n={},t={})=>{const e=t.locale??P();return e==="en"?co():e==="nl"?uo():ho()}),go=()=>"Tilt up",mo=()=>"Omhoog kantelen",po=()=>"Nach oben kippen",bo=((n={},t={})=>{const e=t.locale??P();return e==="en"?go():e==="nl"?mo():po()}),vo=()=>"Tilt down",yo=()=>"Omlaag kantelen",wo=()=>"Nach unten kippen",Co=((n={},t={})=>{const e=t.locale??P();return e==="en"?vo():e==="nl"?yo():wo()}),Eo=()=>"Working…",_o=()=>"Bezig…",Ao=()=>"Läuft…",So=((n={},t={})=>{const e=t.locale??P();return e==="en"?Eo():e==="nl"?_o():Ao()}),ko=()=>"Done",To=()=>"Gelukt",Ro=()=>"Fertig",No=((n={},t={})=>{const e=t.locale??P();return e==="en"?ko():e==="nl"?To():Ro()}),Io=()=>"Failed",Mo=()=>"Mislukt",Po=()=>"Fehlgeschlagen",Bo=((n={},t={})=>{const e=t.locale??P();return e==="en"?Io():e==="nl"?Mo():Po()});const Lo={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 Ae=([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=Ae(o);i.appendChild(r)}),i},Se=(n,t={})=>{const i={...Lo,...t};return Ae(["svg",i,n])};const Oo=[["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 xo=[["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 Do=[["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 Uo=[["path",{d:"M15 3h6v6"}],["path",{d:"m21 3-7 7"}],["path",{d:"m3 21 7-7"}],["path",{d:"M9 21H3v-6"}]];const $o=[["path",{d:"m14 10 7-7"}],["path",{d:"M20 10h-6V4"}],["path",{d:"m3 21 7-7"}],["path",{d:"M4 14h6v6"}]];const Vo=[["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 jo=[["path",{d:"M18 6 6 18"}],["path",{d:"m6 6 12 12"}]];const Ho=[["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 Go=[["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 F(n,{size:t=20,strokeWidth:e=1.75}={}){return Se(n,{width:t,height:t,"stroke-width":e})}const D={ar:n=>F(Oo,n),fullscreen:n=>F(Uo,n),exitFullscreen:n=>F($o,n),screenshot:n=>F(xo,n),tiltUp:n=>F(Fo,n),tiltDown:n=>F(ke,n),rotateLeft:n=>F(Do,n),rotateRight:n=>F(zo,n),zoomIn:n=>F(Ho,n),zoomOut:n=>F(Go,n),reset:n=>F(Vo,n),configurator:n=>F(qo,n),close:n=>F(jo,n)};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 L={semantic:{error:"#dc2626"},neutral:{500:"#737373",600:"#525252",900:"#171717"},white:"#ffffff",black:"#000000"},_={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 Ko{element;constructor(){this.element=document.createElement("div"),Object.assign(this.element.style,{background:L.white,borderRadius:_[3],padding:_[6],boxShadow:`0 ${_[2]} ${_[8]} oklch(0% 0 0 / 20%)`,maxWidth:"20rem",width:"100%"})}}class Yo{constructor(t={}){this.options=t,this.card=new Ko,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:_[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 Jo{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 Zo{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=Se(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"}},Wo=U.fontFamily.sans.join(", ");class Qo{qrLib=null;dialog=null;async show(t){this.hide(),this.qrLib??=await Promise.resolve().then(()=>Jr);const e=await this.qrLib.toDataURL(t,{width:256,margin:4,errorCorrectionLevel:"M",color:{dark:L.black,light:L.white}});this.dialog=new Yo({onClose:()=>{this.dialog=null}}),Object.assign(this.dialog.card.element.style,{display:"flex",flexDirection:"column",alignItems:"center",gap:_[3],fontFamily:Wo}),this.dialog.card.element.appendChild(this.createText(di(),{fontSize:U.fontSize.base,fontWeight:U.fontWeight.semibold,color:L.neutral[900]})),this.dialog.card.element.appendChild(this.createText(mi(),{fontSize:U.fontSize.sm,color:L.neutral[600]})),this.dialog.card.element.appendChild(this.createQrImage(e)),this.dialog.card.element.appendChild(this.createText(yi(),{fontSize:U.fontSize.xs,color:L.neutral[500]}));const i=new z({variant:"outline",label:_i(),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:_[24],height:_[24],borderRadius:_[1]}),e}}const W=U.fontFamily.sans.join(", "),Xo=`
|
|
2
2
|
:root {
|
|
3
3
|
--primary: oklch(5% 0 0);
|
|
4
4
|
--primary-foreground: oklch(100% 0 0);
|
|
@@ -256,7 +256,7 @@
|
|
|
256
256
|
color: var(--muted-foreground);
|
|
257
257
|
margin-block-start: 0.25rem;
|
|
258
258
|
}
|
|
259
|
-
`;let Re=!1;function tr(){if(Re||typeof document>"u")return;Re=!0;const n=document.createElement("style");n.id="vd-ui-vanilla",n.textContent=Xo,document.head.appendChild(n)}function Ne(n){const t=Math.max(0,Math.min(1,n));return t*t*(3-2*t)}function er(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,B=p*a+d*f,E=.55;return[i+h*r*E,o-k*r*E,B]}function nr(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 ir(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]];nr(n,r,a)}const 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],yt=[-1,1,-1],Ie=[[ht,ft],[ft,gt],[gt,mt],[mt,ht],[ht,pt],[ft,bt],[gt,vt],[mt,yt],[pt,bt],[bt,vt],[vt,yt],[yt,pt]],or=400,Me='-apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif';function rr(){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=Ae(),e.appendChild(i),e.appendChild(o),n.appendChild(t),n.appendChild(e),{overlay:n,canvas:t,pctEl:i,phaseEl:o}}class sr{overlay;canvas;ctx;pctEl;phaseEl;animationId=null;showTimerId=null;startTime;hidden=!1;visible=!1;constructor(t,e={}){this.startTime=performance.now();const i=rr();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??or;this.showTimerId=setTimeout(()=>{this.reveal()},o)}get loadingTexts(){return{downloading:Ae(),rendering:Li()}}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=>er(p,a,l,o,r,s),u=6,h=i%u/u,f=Ie.length;let d;h<.35?d=Ne(h/.35)*f:h<.55?d=f:h<.9?d=(1-Ne((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 B=Math.min(1,d-p);ir(this.ctx,c,k[0],k[1],B)}this.ctx.shadowBlur=0}}class ar{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:ai(),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:Ti(),icon:D.fullscreen(),onClick:()=>{this.options.onFullscreen?.()}}))}destroy(){document.removeEventListener("fullscreenchange",this.onFullscreenChange)}}const Q=.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=lr(t,e,i);e.onChange(r=>{i.targetRotation=r.rotation-i.thetaOffset,i.targetTilt=r.tilt,i.targetZoom=r.zoom,cr(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 lr(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:oo(),icon:D.zoomOut(),onClick:()=>{e.targetZoom=i(e.targetZoom-10),n.zoom(e.targetZoom).set()}}),zoomIn:new z({variant:"outline",size:"icon",label:to(),icon:D.zoomIn(),onClick:()=>{e.targetZoom=i(e.targetZoom+10),n.zoom(e.targetZoom).set()}}),tiltUp:new z({variant:"outline",size:"icon",label:bo(),icon:D.tiltUp(),onClick:()=>{r(-15)}}),rotateLeft:new z({variant:"outline",size:"icon",label:lo(),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:Zi(),icon:D.reset(),onClick:()=>{e.thetaOffset=0,n.reset()}}),rotateRight:new z({variant:"outline",size:"icon",label:fo(),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:Co(),icon:D.tiltDown(),onClick:()=>{r(15)}})}}function cr(n,t,e){const i=t.limits;i!==void 0&&(n.zoomOut.element.disabled=i.minZoom!==void 0&&e.zoom<=i.minZoom+Q,n.zoomIn.element.disabled=i.maxZoom!==void 0&&e.zoom>=i.maxZoom-Q,n.tiltUp.element.disabled=i.minTilt!==void 0&&e.tilt<=i.minTilt+Q,n.tiltDown.element.disabled=i.maxTilt!==void 0&&e.tilt>=i.maxTilt-Q,n.rotateLeft.element.disabled=i.minRotate!==void 0&&e.rotation<=i.minRotate+Q,n.rotateRight.element.disabled=i.maxRotate!==void 0&&e.rotation>=i.maxRotate-Q)}const ur=5;let dr=0;function wt(n){const t=n.replace(/([A-Z])/g," $1").trim();return t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()}function hr(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=wt(n.name),s.id=`vd-attribute-label-${dr++}`,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(wt),c=n.values.length<=ur?new Jo(n.values,a,l):new Zo(n.name,n.values,wt(n.name),a,l);return c.onSelect(u=>{e.dispatch(Z.SELECT,{attribute:n.name,value:u},!0).defaultPrevented||i(n.name,u)}),o(n.name,u=>{c.setSelected(u.value),e.dispatch(Z.SELECTED,{attribute:n.name,value:u.value})}),r.appendChild(c.element),r}const fr=80,gr=2500;class mr{constructor(t,e=gr){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=pr(t.price,t.currency),this.vatEl.textContent=Pe(this.configuration.vatDisplay)}renderButton(){const t=this.configuration.submitEnabled;this.button.element.classList.toggle("vd-hidden",!t),t&&this.state==="idle"&&this.setButtonText(Pe(this.configuration.buttonLabel))}async handleSubmit(){if(this.state!=="busy"){this.setState("busy",So());try{await this.configuration.submit(),this.setState("success",No())}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 Pe(n){return(n??"").slice(0,fr)}function pr(n,t){try{const e=new Intl.NumberFormat(P(),{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 br=572;class vr{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:Gi(),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:Vi(),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"),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<br)}),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;this.element.classList.toggle("vd-hidden",!this.visible),this.element.classList.toggle("vd-sidebar-collapsed",this.visible&&!this.expanded),this.openButton.element.classList.toggle("vd-hidden",!(this.visible&&!this.expanded)),this.closeButton.element.style.display=this.collapsible?"":"none",this.container.classList.toggle("vd-layout-sidebar-right",t)}}class yr{attach(t,e){}setVisible(t){}destroy(){}}const wr={"inframe-bottom-left":()=>new Be,"sidebar-right":()=>new vr,hidden:()=>new yr};function Cr(n){return(wr[n??""]??(()=>new Be))()}const Ct=U.fontFamily.sans.join(", "),Et=`
|
|
259
|
+
`;let Te=!1;function tr(){if(Te||typeof document>"u")return;Te=!0;const n=document.createElement("style");n.id="vd-ui-vanilla",n.textContent=Xo,document.head.appendChild(n)}function Re(n){const t=Math.max(0,Math.min(1,n));return t*t*(3-2*t)}function er(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,B=p*a+d*f,E=.55;return[i+h*r*E,o-k*r*E,B]}function nr(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 ir(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]];nr(n,r,a)}const 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],yt=[-1,1,-1],Ne=[[ht,ft],[ft,gt],[gt,mt],[mt,ht],[ht,pt],[ft,bt],[gt,vt],[mt,yt],[pt,bt],[bt,vt],[vt,yt],[yt,pt]],or=400,Ie='-apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif';function rr(){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:Ie});const o=document.createElement("span");return Object.assign(o.style,{fontSize:"13px",color:"#000",fontFamily:Ie}),o.textContent=_e(),e.appendChild(i),e.appendChild(o),n.appendChild(t),n.appendChild(e),{overlay:n,canvas:t,pctEl:i,phaseEl:o}}class sr{overlay;canvas;ctx;pctEl;phaseEl;animationId=null;showTimerId=null;startTime;hidden=!1;visible=!1;constructor(t,e={}){this.startTime=performance.now();const i=rr();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??or;this.showTimerId=setTimeout(()=>{this.reveal()},o)}get loadingTexts(){return{downloading:_e(),rendering:Li()}}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=>er(p,a,l,o,r,s),u=6,h=i%u/u,f=Ne.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=Ne[p];if(k===void 0)continue;const B=Math.min(1,d-p);ir(this.ctx,c,k[0],k[1],B)}this.ctx.shadowBlur=0}}class ar{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:ai(),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:Ti(),icon:D.fullscreen(),onClick:()=>{this.options.onFullscreen?.()}}))}destroy(){document.removeEventListener("fullscreenchange",this.onFullscreenChange)}}const Q=.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=lr(t,e,i);e.onChange(r=>{i.targetRotation=r.rotation-i.thetaOffset,i.targetTilt=r.tilt,i.targetZoom=r.zoom,cr(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 lr(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:oo(),icon:D.zoomOut(),onClick:()=>{e.targetZoom=i(e.targetZoom-10),n.zoom(e.targetZoom).set()}}),zoomIn:new z({variant:"outline",size:"icon",label:to(),icon:D.zoomIn(),onClick:()=>{e.targetZoom=i(e.targetZoom+10),n.zoom(e.targetZoom).set()}}),tiltUp:new z({variant:"outline",size:"icon",label:bo(),icon:D.tiltUp(),onClick:()=>{r(-15)}}),rotateLeft:new z({variant:"outline",size:"icon",label:lo(),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:Zi(),icon:D.reset(),onClick:()=>{e.thetaOffset=0,n.reset()}}),rotateRight:new z({variant:"outline",size:"icon",label:fo(),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:Co(),icon:D.tiltDown(),onClick:()=>{r(15)}})}}function cr(n,t,e){const i=t.limits;i!==void 0&&(n.zoomOut.element.disabled=i.minZoom!==void 0&&e.zoom<=i.minZoom+Q,n.zoomIn.element.disabled=i.maxZoom!==void 0&&e.zoom>=i.maxZoom-Q,n.tiltUp.element.disabled=i.minTilt!==void 0&&e.tilt<=i.minTilt+Q,n.tiltDown.element.disabled=i.maxTilt!==void 0&&e.tilt>=i.maxTilt-Q,n.rotateLeft.element.disabled=i.minRotate!==void 0&&e.rotation<=i.minRotate+Q,n.rotateRight.element.disabled=i.maxRotate!==void 0&&e.rotation>=i.maxRotate-Q)}const ur=5;let dr=0;function wt(n){const t=n.replace(/([A-Z])/g," $1").trim();return t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()}function hr(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=wt(n.name),s.id=`vd-attribute-label-${dr++}`,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(wt),c=n.values.length<=ur?new Jo(n.values,a,l):new Zo(n.name,n.values,wt(n.name),a,l);return c.onSelect(u=>{e.dispatch(Z.SELECT,{attribute:n.name,value:u},!0).defaultPrevented||i(n.name,u)}),o(n.name,u=>{c.setSelected(u.value),e.dispatch(Z.SELECTED,{attribute:n.name,value:u.value})}),r.appendChild(c.element),r}const fr=80,gr=2500;class mr{constructor(t,e=gr){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=pr(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",So());try{await this.configuration.submit(),this.setState("success",No())}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 Me(n){return(n??"").slice(0,fr)}function pr(n,t){try{const e=new Intl.NumberFormat(P(),{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 br=572;class vr{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:Gi(),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:Vi(),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"),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<br)}),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;this.element.classList.toggle("vd-hidden",!this.visible),this.element.classList.toggle("vd-sidebar-collapsed",this.visible&&!this.expanded),this.openButton.element.classList.toggle("vd-hidden",!(this.visible&&!this.expanded)),this.closeButton.element.style.display=this.collapsible?"":"none",this.container.classList.toggle("vd-layout-sidebar-right",t)}}class yr{attach(t,e){}setVisible(t){}destroy(){}}const wr={"inframe-bottom-left":()=>new Pe,"sidebar-right":()=>new vr,hidden:()=>new yr};function Cr(n){return(wr[n??""]??(()=>new Pe))()}const Ct=U.fontFamily.sans.join(", "),Et=`
|
|
260
260
|
position: absolute;
|
|
261
261
|
display: flex;
|
|
262
262
|
z-index: 10;
|
|
@@ -451,11 +451,11 @@
|
|
|
451
451
|
color: ${L.white};
|
|
452
452
|
}
|
|
453
453
|
|
|
454
|
-
`;function _r(){if(tr(),document.getElementById("vd-styles")!==null)return;const n=document.createElement("style");n.id="vd-styles",n.textContent=Er,document.head.appendChild(n)}function Ar(n,t){const e=document.createElement("a");e.href=`data:image/png;base64,${n}`,e.download=t,e.click()}class Sr{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){_r(),this.container=t,this.loading=new sr(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 ar({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.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&&Ce(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(hr(i,t,this.options.eventBus,this.options.onSelect,this.options.onSubscribe));this.commerce=new mr(this.options.configuration),this.attributes.appendChild(this.commerce.element),this.layout=Cr(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:zi(),icon:D.screenshot(),onClick:()=>{this.options.snapshotApi.take("snapshot.png").onDeveloped(({data:e,filename:i})=>{Ar(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))}}class kr{attributes;readyStateTracker;messenger;cameraApi;cameraPositionApi;focusApi;configurationApi;snapshotApi;annotationsApi;eventBus;ui;qrModal;options;iframe;container;readyCallbacks=[];mutationFailedCallbacks=[];constructor(t){this.options=t,this.initializeLogging(),this.messenger=new Hn(()=>this.iframe?.contentWindow??null);const e=i=>{this.messenger.send(i)};this.attributes=new Kn(e,(i,o)=>{for(const r of this.mutationFailedCallbacks)r({attribute:i,value:o})}),this.snapshotApi=new ge(e),this.annotationsApi=new re(e),this.cameraApi=new le(e),this.cameraPositionApi=new Yn,this.focusApi=new ce(e,i=>{this.dispatchFocusChange(i)}),this.configurationApi=new de(i=>{this.dispatchConfigurationChange(i)},i=>{this.dispatchConfigurationSubmit(i)}),this.eventBus=new Wn,this.qrModal=new Qo,this.readyStateTracker=new In(()=>{const i=this.readyCallbacks;this.readyCallbacks=[];for(const o of i)o(this);this.ui.onReady()}),this.ui=new Sr({snapshotApi:this.snapshotApi,cameraApi:this.cameraApi,cameraPositionApi:this.cameraPositionApi,eventBus:this.eventBus,configuration:this.configurationApi,onSelect:(i,o)=>this.attributes.select(i,o),onSubscribe:(i,o)=>this.attributes.onChange(i,o),onAr:()=>{this.activateAr()}}),this.registerHandlers(),this.messenger.start(),this.createAndConnectIframe()}registerHandlers(){this.messenger.on(M.HANDSHAKE,t=>{On(t)&&(I.logger.info("Server handshake received, flushing publisher queue"),this.messenger.markReady())}),this.messenger.on(M.MUTATION,t=>{xn(t)&&(this.attributes.handleMutationResult(t),this.configurationApi.handleSelectionChanged(this.attributes.getSelection()))}),this.messenger.on(M.SNAPSHOT,t=>{Dn(t)&&this.snapshotApi.handleSnapshotResult(t)}),this.messenger.on(M.CAMERA,t=>{zn(t)&&this.cameraPositionApi.handlePositionUpdate(t)}),this.messenger.on(M.LOADING_INDICATOR,t=>{Un(t)&&(t.error!==void 0?this.ui.showError(t.error):this.ui.updateProgress(t.progress,t.phase))}),this.messenger.on(M.CONFIG,t=>{$n(t)&&this.handleConfig(t)}),this.messenger.on(M.ANNOTATION_PLACED,t=>{Vn(t)&&this.annotationsApi.handlePlaced(t.position)}),this.messenger.on(M.MAPPING,t=>{Fn(t)&&(this.attributes.handleMappingReceived(t),this.configurationApi.handleSelectionChanged(this.attributes.getSelection()),this.ui.renderAttributeControls(this.attributes,t.attributes),this.readyStateTracker.handleMappingReceived())}),this.registerFacadeStateHandlers()}registerFacadeStateHandlers(){this.messenger.on(M.FOCUS,t=>{qn(t)&&this.focusApi.handleStateReceived(t)}),this.messenger.on(M.PRICING,t=>{jn(t)&&this.configurationApi.handlePricingReceived(t.pricing)})}dispatchFocusChange(t){this.container?.dispatchEvent(new CustomEvent(Z.FOCUS_CHANGE,{detail:t,bubbles:!0}))}dispatchConfigurationChange(t){this.container?.dispatchEvent(new CustomEvent(Z.CONFIGURATION_CHANGE,{detail:t??null,bubbles:!0}))}dispatchConfigurationSubmit(t){this.container?.dispatchEvent(new CustomEvent(Z.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&&I.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(Rn()){this.messenger.send({type:M.AR_ACTIVATE});return}this.qrModal.show(this.iframe?.src??"")}initializeLogging(){this.options.debug===!0&&ne(),I.logger.info("Initializing Virtualdisplay client",{model:this.options.model})}createAndConnectIframe(){const e=new vn(this.options).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 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}}function Tr(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var X={},_t,Le;function Rr(){return Le||(Le=1,_t=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then}),_t}var At={},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 St={},xe;function kt(){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}}})(St)),St}var Tt,De;function Nr(){if(De)return Tt;De=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++}},Tt=n,Tt}var Rt,ze;function Ir(){if(ze)return Rt;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]},Rt=n,Rt}var Nt={},Fe;function Mr(){return Fe||(Fe=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}})(Nt)),Nt}var It={},Ue;function Pr(){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 Mt={},$e;function Br(){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}})(Mt)),Mt}var at={},Ve;function qe(){if(Ve)return at;Ve=1;const n=kt(),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 Pt={},nt={},je;function Lr(){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 Or(){return He||(He=1,(function(n){const t=Lr();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}})(Pt)),Pt}var Bt,Ge;function xr(){if(Ge)return Bt;Ge=1;const n=Or();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 Lt={},Ot={},xt={},Ke;function Ye(){return Ke||(Ke=1,xt.isValid=function(t){return!isNaN(t)&&t>=1&&t<=40}),xt}var q={},Je;function Ze(){if(Je)return q;Je=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
|
|
454
|
+
`;function _r(){if(tr(),document.getElementById("vd-styles")!==null)return;const n=document.createElement("style");n.id="vd-styles",n.textContent=Er,document.head.appendChild(n)}function Ar(n,t){const e=document.createElement("a");e.href=`data:image/png;base64,${n}`,e.download=t,e.click()}class Sr{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){_r(),this.container=t,this.loading=new sr(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 ar({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.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(hr(i,t,this.options.eventBus,this.options.onSelect,this.options.onSubscribe));this.commerce=new mr(this.options.configuration),this.attributes.appendChild(this.commerce.element),this.layout=Cr(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:zi(),icon:D.screenshot(),onClick:()=>{this.options.snapshotApi.take("snapshot.png").onDeveloped(({data:e,filename:i})=>{Ar(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))}}class Be{constructor(t){this.send=t}send;placedCallbacks=[];setEnabled(t){this.send({type:M.ANNOTATION_TOGGLE,enabled:t})}startPlacing(){this.send({type:M.ANNOTATION_PLACE_MODE,enabled:!0})}stopPlacing(){this.send({type:M.ANNOTATION_PLACE_MODE,enabled:!1})}onPlaced(t){this.placedCallbacks.push(t)}handlePlaced(t){for(const e of this.placedCallbacks)e(t)}}class kr{attributes;readyStateTracker;messenger;cameraApi;cameraPositionApi;focusApi;configurationApi;snapshotApi;annotationsApi;eventBus;ui;qrModal;options;iframe;container;readyCallbacks=[];mutationFailedCallbacks=[];constructor(t){this.options=t,this.initializeLogging(),this.messenger=new Gn(()=>this.iframe?.contentWindow??null);const e=i=>{this.messenger.send(i)};this.attributes=new Kn(e,(i,o)=>{for(const r of this.mutationFailedCallbacks)r({attribute:i,value:o})}),this.snapshotApi=new fe(e),this.annotationsApi=new Be(e),this.cameraApi=new ae(e),this.cameraPositionApi=new Yn,this.focusApi=new le(e,i=>{this.dispatchFocusChange(i)}),this.configurationApi=new ue(i=>{this.dispatchConfigurationChange(i)},i=>{this.dispatchConfigurationSubmit(i)}),this.eventBus=new Wn,this.qrModal=new Qo,this.readyStateTracker=new In(()=>{const i=this.readyCallbacks;this.readyCallbacks=[];for(const o of i)o(this);this.ui.onReady()}),this.ui=new Sr({snapshotApi:this.snapshotApi,cameraApi:this.cameraApi,cameraPositionApi:this.cameraPositionApi,eventBus:this.eventBus,configuration:this.configurationApi,onSelect:(i,o)=>this.attributes.select(i,o),onSubscribe:(i,o)=>this.attributes.onChange(i,o),onAr:()=>{this.activateAr()}}),this.registerHandlers(),this.messenger.start(),this.createAndConnectIframe()}registerHandlers(){this.messenger.on(M.HANDSHAKE,t=>{xn(t)&&(I.logger.info("Server handshake received, flushing publisher queue"),this.messenger.markReady())}),this.messenger.on(M.MUTATION,t=>{Dn(t)&&(this.attributes.handleMutationResult(t),this.configurationApi.handleSelectionChanged(this.attributes.getSelection()))}),this.messenger.on(M.SNAPSHOT,t=>{zn(t)&&this.snapshotApi.handleSnapshotResult(t)}),this.messenger.on(M.CAMERA,t=>{Fn(t)&&this.cameraPositionApi.handlePositionUpdate(t)}),this.messenger.on(M.LOADING_INDICATOR,t=>{$n(t)&&(t.error!==void 0?this.ui.showError(t.error):this.ui.updateProgress(t.progress,t.phase))}),this.messenger.on(M.CONFIG,t=>{Vn(t)&&this.handleConfig(t)}),this.messenger.on(M.ANNOTATION_PLACED,t=>{qn(t)&&this.annotationsApi.handlePlaced(t.position)}),this.messenger.on(M.MAPPING,t=>{Un(t)&&(this.attributes.handleMappingReceived(t),this.configurationApi.handleSelectionChanged(this.attributes.getSelection()),this.ui.renderAttributeControls(this.attributes,t.attributes),this.readyStateTracker.handleMappingReceived())}),this.registerFacadeStateHandlers()}registerFacadeStateHandlers(){this.messenger.on(M.FOCUS,t=>{jn(t)&&this.focusApi.handleStateReceived(t)}),this.messenger.on(M.PRICING,t=>{Hn(t)&&this.configurationApi.handlePricingReceived(t.pricing)})}dispatchFocusChange(t){this.container?.dispatchEvent(new CustomEvent(Z.FOCUS_CHANGE,{detail:t,bubbles:!0}))}dispatchConfigurationChange(t){this.container?.dispatchEvent(new CustomEvent(Z.CONFIGURATION_CHANGE,{detail:t??null,bubbles:!0}))}dispatchConfigurationSubmit(t){this.container?.dispatchEvent(new CustomEvent(Z.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&&I.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(Rn()){this.messenger.send({type:M.AR_ACTIVATE});return}this.qrModal.show(this.iframe?.src??"")}initializeLogging(){this.options.debug===!0&&ne(),I.logger.info("Initializing Virtualdisplay client",{model:this.options.model})}createAndConnectIframe(){const e=new vn(this.options).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 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}}function Tr(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var X={},_t,Le;function Rr(){return Le||(Le=1,_t=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then}),_t}var At={},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 St={},xe;function kt(){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}}})(St)),St}var Tt,De;function Nr(){if(De)return Tt;De=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++}},Tt=n,Tt}var Rt,ze;function Ir(){if(ze)return Rt;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]},Rt=n,Rt}var Nt={},Fe;function Mr(){return Fe||(Fe=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}})(Nt)),Nt}var It={},Ue;function Pr(){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 Mt={},$e;function Br(){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}})(Mt)),Mt}var at={},Ve;function qe(){if(Ve)return at;Ve=1;const n=kt(),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 Pt={},nt={},je;function Lr(){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 Or(){return He||(He=1,(function(n){const t=Lr();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}})(Pt)),Pt}var Bt,Ge;function xr(){if(Ge)return Bt;Ge=1;const n=Or();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 Lt={},Ot={},xt={},Ke;function Ye(){return Ke||(Ke=1,xt.isValid=function(t){return!isNaN(t)&&t>=1&&t<=40}),xt}var q={},Je;function Ze(){if(Je)return q;Je=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
|
|
455
455
|
]))+`;q.KANJI=new RegExp(e,"g"),q.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g"),q.BYTE=new RegExp(i,"g"),q.NUMERIC=new RegExp(n,"g"),q.ALPHANUMERIC=new RegExp(t,"g");const o=new RegExp("^"+e+"$"),r=new RegExp("^"+n+"$"),s=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");return q.testKanji=function(l){return o.test(l)},q.testNumeric=function(l){return r.test(l)},q.testAlphanumeric=function(l){return s.test(l)},q}var We;function J(){return We||(We=1,(function(n){const t=Ye(),e=Ze();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}}})(Ot)),Ot}var Qe;function Dr(){return Qe||(Qe=1,(function(n){const t=Y(),e=qe(),i=kt(),o=J(),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 B=c(k.mode,d);p+=B+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 B=t.getSymbolTotalCodewords(d),E=e.getTotalCodewordsCount(d,p),N=(B-E)*8;if(k===o.MIXED)return N;const T=N-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 B=i.from(p,i.M);if(Array.isArray(d)){if(d.length>1)return h(d,B);if(d.length===0)return 1;k=d[0]}else k=d;return l(k.mode,k.getLength(),B)},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}})(Lt)),Lt}var Dt={},Xe;function zr(){if(Xe)return Dt;Xe=1;const n=Y(),t=1335,e=21522,i=n.getBCHDigit(t);return Dt.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},Dt}var zt={},Ft,tn;function Fr(){if(tn)return Ft;tn=1;const n=J();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 Ut,en;function Ur(){if(en)return Ut;en=1;const n=J(),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)},Ut=e,Ut}var $t,nn;function $r(){if(nn)return $t;nn=1;const n=J();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)},$t=t,$t}var Vt,on;function Vr(){if(on)return Vt;on=1;const n=J(),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]+`
|
|
456
456
|
Make sure your charset is UTF-8`);r=(r>>>8&255)*192+(r&255),i.put(r,13)}},Vt=e,Vt}var qt={exports:{}},rn;function qr(){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,B;!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],B=typeof s[u]>"u",(B||k>p)&&(s[u]=p,a.push(u,p),r[u]=c))}if(typeof o<"u"&&typeof s[o]>"u"){var E=["Could not find a path from ",i," to ",o,"."].join("");throw new Error(E)}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 jr(){return sn||(sn=1,(function(n){const t=J(),e=Fr(),i=Ur(),o=$r(),r=Vr(),s=Ze(),a=Y(),l=qr();function c(E){return unescape(encodeURIComponent(E)).length}function u(E,N,T){const A=[];let O;for(;(O=E.exec(T))!==null;)A.push({data:O[0],index:O.index,mode:N,length:O[0].length});return A}function h(E){const N=u(s.NUMERIC,t.NUMERIC,E),T=u(s.ALPHANUMERIC,t.ALPHANUMERIC,E);let A,O;return a.isKanjiModeEnabled()?(A=u(s.BYTE,t.BYTE,E),O=u(s.KANJI,t.KANJI,E)):(A=u(s.BYTE_KANJI,t.BYTE,E),O=[]),N.concat(T,A,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(E,N){switch(N){case t.NUMERIC:return e.getBitsLength(E);case t.ALPHANUMERIC:return i.getBitsLength(E);case t.KANJI:return r.getBitsLength(E);case t.BYTE:return o.getBitsLength(E)}}function d(E){return E.reduce(function(N,T){const A=N.length-1>=0?N[N.length-1]:null;return A&&A.mode===T.mode?(N[N.length-1].data+=T.data,N):(N.push(T),N)},[])}function p(E){const N=[];for(let T=0;T<E.length;T++){const A=E[T];switch(A.mode){case t.NUMERIC:N.push([A,{data:A.data,mode:t.ALPHANUMERIC,length:A.length},{data:A.data,mode:t.BYTE,length:A.length}]);break;case t.ALPHANUMERIC:N.push([A,{data:A.data,mode:t.BYTE,length:A.length}]);break;case t.KANJI:N.push([A,{data:A.data,mode:t.BYTE,length:c(A.data)}]);break;case t.BYTE:N.push([{data:A.data,mode:t.BYTE,length:c(A.data)}])}}return N}function k(E,N){const T={},A={start:{}};let O=["start"];for(let m=0;m<E.length;m++){const w=E[m],y=[];for(let g=0;g<w.length;g++){const S=w[g],b=""+m+g;y.push(b),T[b]={node:S,lastCount:0},A[b]={};for(let C=0;C<O.length;C++){const v=O[C];T[v]&&T[v].node.mode===S.mode?(A[v][b]=f(T[v].lastCount+S.length,S.mode)-f(T[v].lastCount,S.mode),T[v].lastCount+=S.length):(T[v]&&(T[v].lastCount=S.length),A[v][b]=f(S.length,S.mode)+4+t.getCharCountIndicator(S.mode,N))}}O=y}for(let m=0;m<O.length;m++)A[O[m]].end=0;return{map:A,table:T}}function B(E,N){let T;const A=t.getBestModeForData(E);if(T=t.from(N,A),T!==t.BYTE&&T.bit<A.bit)throw new Error('"'+E+'" cannot be encoded with mode '+t.toString(T)+`.
|
|
457
457
|
Suggested mode is: `+t.toString(A));switch(T===t.KANJI&&!a.isKanjiModeEnabled()&&(T=t.BYTE),T){case t.NUMERIC:return new e(E);case t.ALPHANUMERIC:return new i(E);case t.KANJI:return new r(E);case t.BYTE:return new o(E)}}n.fromArray=function(N){return N.reduce(function(T,A){return typeof A=="string"?T.push(B(A,null)):A.data&&T.push(B(A.data,A.mode)),T},[])},n.fromString=function(N,T){const A=h(N,a.isKanjiModeEnabled()),O=p(A),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(N){return n.fromArray(h(N,a.isKanjiModeEnabled()))}})(zt)),zt}var an;function Hr(){if(an)return At;an=1;const n=Y(),t=kt(),e=Nr(),i=Ir(),o=Mr(),r=Pr(),s=Br(),a=qe(),l=xr(),c=Dr(),u=zr(),h=J(),f=jr();function d(m,w){const y=m.size,g=r.getPositions(w);for(let S=0;S<g.length;S++){const b=g[S][0],C=g[S][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 S=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(S+C,b+v,!0,!0):m.set(S+C,b+v,!1,!0)}}function B(m,w){const y=m.size,g=c.getEncodedBits(w);let S,b,C;for(let v=0;v<18;v++)S=Math.floor(v/3),b=v%3+y-8-3,C=(g>>v&1)===1,m.set(S,b,C,!0),m.set(b,S,C,!0)}function E(m,w,y){const g=m.size,S=u.getEncodedBits(w,y);let b,C;for(b=0;b<15;b++)C=(S>>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 N(m,w){const y=m.size;let g=-1,S=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(S,v-R)){let K=!1;C<w.length&&(K=(w[C]>>>b&1)===1),m.set(S,v-R,K),b--,b===-1&&(C++,b=7)}if(S+=g,S<0||y<=S){S-=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 S=n.getSymbolTotalCodewords(m),b=a.getTotalCodewordsCount(m,w),C=(S-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 A(g,m,w)}function A(m,w,y){const g=n.getSymbolTotalCodewords(w),S=a.getTotalCodewordsCount(w,y),b=g-S,C=a.getBlocksCount(w,y),v=g%C,R=C-v,K=Math.floor(g/C),it=Math.floor(b/C),Zr=it+1,gn=K-it,Wr=new l(gn);let Kt=0;const lt=new Array(C),mn=new Array(C);let Yt=0;const Qr=new Uint8Array(m.buffer);for(let tt=0;tt<C;tt++){const Zt=tt<R?it:Zr;lt[tt]=Qr.slice(Kt,Kt+Zt),mn[tt]=Wr.encode(lt[tt]),Kt+=Zt,Yt=Math.max(Yt,Zt)}const Jt=new Uint8Array(g);let pn=0,j,H;for(j=0;j<Yt;j++)for(H=0;H<C;H++)j<lt[H].length&&(Jt[pn++]=lt[H][j]);for(j=0;j<gn;j++)for(H=0;H<C;H++)Jt[pn++]=mn[H][j];return Jt}function O(m,w,y,g){let S;if(Array.isArray(m))S=f.fromArray(m);else if(typeof m=="string"){let K=w;if(!K){const it=f.rawSplit(m);K=c.getBestVersionForData(it,y)}S=f.fromString(m,K||40)}else throw new Error("Invalid data");const b=c.getBestVersionForData(S,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(`
|
|
458
458
|
The chosen QR Code version cannot contain this amount of data.
|
|
459
459
|
Minimum version required to store current data is: `+b+`.
|
|
460
460
|
`);const C=T(w,y,S),v=n.getSymbolSize(w),R=new i(v);return d(R,w),p(R),k(R,w),E(R,y,0),w>=7&&B(R,w),N(R,C),isNaN(g)&&(g=s.getBestMask(R,E.bind(null,R,y))),s.applyMask(g,R),E(R,y,g),{modules:R,version:w,errorCorrectionLevel:y,maskPattern:g,segments:S}}return At.create=function(w,y){if(typeof w>"u"||w==="")throw new Error("No input text");let g=t.M,S,b;return typeof y<"u"&&(g=t.from(y.errorCorrectionLevel,t.M),S=c.from(y.version),b=s.from(y.maskPattern),y.toSJISFunc&&n.setToSJISFunction(y.toSJISFunc)),O(w,S,g,b)},At}var jt={},Ht={},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 B=Math.floor((f-u)/l),E=Math.floor((d-u)/l);k=h[a[B*s+E]?1:0]}i[p++]=k.r,i[p++]=k.g,i[p++]=k.b,i[p]=k.a}}})(Ht)),Ht}var un;function Gr(){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)}})(jt)),jt}var Gt={},dn;function Kr(){if(dn)return Gt;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 Gt.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+'"',B='<svg xmlns="http://www.w3.org/2000/svg" '+(l.width?'width="'+l.width+'" height="'+l.width+'" ':"")+p+' shape-rendering="crispEdges">'+f+d+`</svg>
|
|
461
|
-
`;return typeof a=="function"&&a(null,B),B},Gt}var hn;function Yr(){if(hn)return X;hn=1;const n=Rr(),t=Hr(),e=Gr(),i=Kr();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=Yr();const Jr=et({__proto__:null,default:Tr(fn)},[fn]);I.Annotations=
|
|
461
|
+
`;return typeof a=="function"&&a(null,B),B},Gt}var hn;function Yr(){if(hn)return X;hn=1;const n=Rr(),t=Hr(),e=Gr(),i=Kr();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=Yr();const Jr=et({__proto__:null,default:Tr(fn)},[fn]);I.Annotations=Be,I.Attribute=oe,I.AttributeValue=ie,I.Camera=ae,I.Configuration=ue,I.ERROR_CODES=$,I.Focus=le,I.Photo=de,I.Snapshot=fe,I.VD_EVENTS=Z,I.VirtualdisplayClient=kr,I.VirtualdisplayError=x,I.enableDebugMode=ne,I.isDebugMode=Nn,Object.defineProperty(I,Symbol.toStringTag,{value:"Module"})}));
|
package/package.json
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@virtualdisplay.io/client",
|
|
3
3
|
"description": "TypeScript-first 3D model integration library with iframe-based architecture",
|
|
4
|
-
"version": "4.0.0-alpha.
|
|
4
|
+
"version": "4.0.0-alpha.16",
|
|
5
5
|
"author": "Virtualdisplay <support@virtualdisplay.io>",
|
|
6
6
|
"homepage": "https://virtualdisplay.io",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"type": "module",
|
|
9
9
|
"exports": {
|
|
10
10
|
".": {
|
|
11
|
-
"types": "./dist/
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
12
|
"import": "./dist/virtualdisplay.client.es.js",
|
|
13
13
|
"require": "./dist/virtualdisplay.client.cjs.js"
|
|
14
14
|
}
|
|
15
15
|
},
|
|
16
16
|
"main": "dist/virtualdisplay.client.cjs.js",
|
|
17
17
|
"module": "dist/virtualdisplay.client.es.js",
|
|
18
|
-
"types": "dist/
|
|
18
|
+
"types": "dist/index.d.ts",
|
|
19
19
|
"files": [
|
|
20
20
|
"dist",
|
|
21
21
|
"CHANGELOG.md"
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { AnnotationPosition, Message } from '@virtualdisplay.io/messaging';
|
|
2
|
-
type SendFn = (message: Message) => void;
|
|
3
|
-
type PlacedCallback = (position: AnnotationPosition) => void;
|
|
4
|
-
/**
|
|
5
|
-
* Annotation controls for the viewer.
|
|
6
|
-
* Toggle visibility, and manage click-to-place for the annotation editor.
|
|
7
|
-
*/
|
|
8
|
-
export declare class Annotations {
|
|
9
|
-
private readonly send;
|
|
10
|
-
private readonly placedCallbacks;
|
|
11
|
-
constructor(send: SendFn);
|
|
12
|
-
setEnabled(enabled: boolean): void;
|
|
13
|
-
startPlacing(): void;
|
|
14
|
-
stopPlacing(): void;
|
|
15
|
-
onPlaced(callback: PlacedCallback): void;
|
|
16
|
-
/** Called by the client when an ANNOTATION_PLACED message is received. */
|
|
17
|
-
handlePlaced(position: AnnotationPosition): void;
|
|
18
|
-
}
|
|
19
|
-
export {};
|
|
20
|
-
//# sourceMappingURL=annotations.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"annotations.d.ts","sourceRoot":"","sources":["../../../src/annotations/annotations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,kBAAkB,EAAE,KAAK,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAEpG,KAAK,MAAM,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AACzC,KAAK,cAAc,GAAG,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;AAE7D;;;GAGG;AACH,qBAAa,WAAW;IAGV,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAwB;gBAE3B,IAAI,EAAE,MAAM;IAEzC,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAOlC,YAAY,IAAI,IAAI;IAOpB,WAAW,IAAI,IAAI;IAOnB,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAIxC,0EAA0E;IAC1E,YAAY,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;CAKjD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/annotations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { AttributeValue } from './value';
|
|
2
|
-
export interface AttributeOptions {
|
|
3
|
-
readonly name: string;
|
|
4
|
-
readonly values: string[];
|
|
5
|
-
readonly onSelect: (name: string, value: string) => void;
|
|
6
|
-
readonly defaultValue?: string;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Represents a single attribute with its available values
|
|
10
|
-
* Flat API - no source/target translation, works with server values directly
|
|
11
|
-
*/
|
|
12
|
-
export declare class Attribute {
|
|
13
|
-
readonly name: string;
|
|
14
|
-
readonly defaultValue: string | undefined;
|
|
15
|
-
private readonly values;
|
|
16
|
-
private readonly onSelect;
|
|
17
|
-
private onChangeCallback?;
|
|
18
|
-
constructor(options: AttributeOptions);
|
|
19
|
-
/**
|
|
20
|
-
* Select a value for this attribute
|
|
21
|
-
* @throws {VirtualdisplayError} When value not found
|
|
22
|
-
*/
|
|
23
|
-
select(value: string): void;
|
|
24
|
-
getValues(): AttributeValue[];
|
|
25
|
-
getValue(value: string): AttributeValue | undefined;
|
|
26
|
-
/** The currently selected value, or undefined before any selection lands. */
|
|
27
|
-
get selected(): string | undefined;
|
|
28
|
-
/**
|
|
29
|
-
* Register callback that fires when selection changes
|
|
30
|
-
* Receives the newly selected AttributeValue
|
|
31
|
-
*/
|
|
32
|
-
onChange(callback: (selectedValue: AttributeValue) => void): void;
|
|
33
|
-
/**
|
|
34
|
-
* Update selection state from server mutation result
|
|
35
|
-
* Direct value comparison - no source/target translation
|
|
36
|
-
*/
|
|
37
|
-
handleResult(serverValue: string): void;
|
|
38
|
-
private createValues;
|
|
39
|
-
}
|
|
40
|
-
//# sourceMappingURL=attribute.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"attribute.d.ts","sourceRoot":"","sources":["../../../src/attributes/attribute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAGzC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;;GAGG;AACH,qBAAa,SAAS;IACpB,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B,SAAgB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IAEjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;IAErD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwC;IAEjE,OAAO,CAAC,gBAAgB,CAAC,CAA2C;gBAExD,OAAO,EAAE,gBAAgB;IAOrC;;;OAGG;IACI,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ3B,SAAS,IAAI,cAAc,EAAE;IAI7B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI1D,6EAA6E;IAC7E,IAAW,QAAQ,IAAI,MAAM,GAAG,SAAS,CAOxC;IAED;;;OAGG;IACI,QAAQ,CAAC,QAAQ,EAAE,CAAC,aAAa,EAAE,cAAc,KAAK,IAAI,GAAG,IAAI;IAIxE;;;OAGG;IACI,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAgB9C,OAAO,CAAC,YAAY;CAarB"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { Attribute } from './attribute';
|
|
2
|
-
import { AttributeValue } from './value';
|
|
3
|
-
import { MappingMessage, MessageCallback, MutationResultMessage } from '@virtualdisplay.io/messaging';
|
|
4
|
-
/**
|
|
5
|
-
* Public attribute API.
|
|
6
|
-
* Receives mapping from server, provides query/select API,
|
|
7
|
-
* and sends mutations via postMessage.
|
|
8
|
-
*
|
|
9
|
-
* select() can be called before the mapping arrives — mutations are sent
|
|
10
|
-
* immediately and buffered by the messenger's publisher queue until the
|
|
11
|
-
* iframe is ready. onChange() callbacks registered before the mapping are
|
|
12
|
-
* replayed once the registry is created.
|
|
13
|
-
*/
|
|
14
|
-
export declare class Attributes {
|
|
15
|
-
private readonly send;
|
|
16
|
-
private readonly onMutationFailed?;
|
|
17
|
-
private registry;
|
|
18
|
-
private readonly pendingCallbacks;
|
|
19
|
-
constructor(send: MessageCallback, onMutationFailed?: ((attribute: string, value: string) => void) | undefined);
|
|
20
|
-
/**
|
|
21
|
-
* Handle incoming MAPPING message from server
|
|
22
|
-
*/
|
|
23
|
-
handleMappingReceived(message: MappingMessage): void;
|
|
24
|
-
handleMutationResult(message: MutationResultMessage): void;
|
|
25
|
-
/**
|
|
26
|
-
* Select a value for an attribute - sends mutation to server.
|
|
27
|
-
* Can be called before the mapping arrives — the mutation is sent immediately
|
|
28
|
-
* and the messenger's publisher queue holds it until the iframe is ready.
|
|
29
|
-
*/
|
|
30
|
-
select(name: string, value: string): void;
|
|
31
|
-
getValues(name: string): AttributeValue[];
|
|
32
|
-
getValue(name: string, value: string): AttributeValue | undefined;
|
|
33
|
-
/**
|
|
34
|
-
* Register onChange callback for an attribute.
|
|
35
|
-
* Buffers the callback if the mapping hasn't arrived yet.
|
|
36
|
-
*/
|
|
37
|
-
onChange(name: string, callback: (selectedValue: AttributeValue) => void): void;
|
|
38
|
-
getAttribute(name: string): Attribute | undefined;
|
|
39
|
-
/** The current selection as attribute name→value pairs, empty before the mapping arrives. */
|
|
40
|
-
getSelection(): Record<string, string>;
|
|
41
|
-
get hasMapping(): boolean;
|
|
42
|
-
private sendMutation;
|
|
43
|
-
private replayPendingCallbacks;
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=attributes.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"attributes.d.ts","sourceRoot":"","sources":["../../../src/attributes/attributes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,eAAe,EAGpB,KAAK,qBAAqB,EAC3B,MAAM,8BAA8B,CAAC;AAGtC;;;;;;;;;GASG;AACH,qBAAa,UAAU;IAMnB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IANpC,OAAO,CAAC,QAAQ,CAAgC;IAEhD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkF;gBAGhG,IAAI,EAAE,eAAe,EACrB,gBAAgB,CAAC,GAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,aAAA;IAGhF;;OAEG;IACI,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAepD,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAIjE;;;;OAIG;IACI,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIzC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE;IAIzC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAIxE;;;OAGG;IACI,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,aAAa,EAAE,cAAc,KAAK,IAAI,GAAG,IAAI;IAe/E,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAIxD,6FAA6F;IACtF,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAI7C,IAAW,UAAU,IAAI,OAAO,CAE/B;IAED,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,sBAAsB;CAU/B"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Attribute } from './attribute';
|
|
2
|
-
import { AttributeDefinition, MutationDto, MutationResult } from '@virtualdisplay.io/messaging';
|
|
3
|
-
/**
|
|
4
|
-
* Creates and tracks attribute instances from server definitions.
|
|
5
|
-
* Handles mutation results by updating the corresponding attribute.
|
|
6
|
-
*/
|
|
7
|
-
export declare class AttributeRegistry {
|
|
8
|
-
private readonly attributes;
|
|
9
|
-
constructor(definitions: AttributeDefinition[], sendMutation: (mutations: MutationDto[], isInitial: boolean) => void, onMutationFailed?: (attribute: string, value: string) => void);
|
|
10
|
-
private readonly onMutationFailed;
|
|
11
|
-
get(name: string): Attribute | undefined;
|
|
12
|
-
/** The current selection as attribute name→value pairs, skipping unset attributes. */
|
|
13
|
-
getSelection(): Record<string, string>;
|
|
14
|
-
handleResults(results: MutationResult[]): void;
|
|
15
|
-
private buildOptions;
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=selections.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"selections.d.ts","sourceRoot":"","sources":["../../../src/attributes/selections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAyB,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAErG;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgC;gBAGzD,WAAW,EAAE,mBAAmB,EAAE,EAClC,YAAY,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,EACpE,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI;IAS/D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA2D;IAErF,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI/C,sFAAsF;IAC/E,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAWtC,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI;IAWrD,OAAO,CAAC,YAAY;CAkBrB"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pure domain entity representing a single attribute value
|
|
3
|
-
* No side effects - only state
|
|
4
|
-
*/
|
|
5
|
-
export declare class AttributeValue {
|
|
6
|
-
readonly value: string;
|
|
7
|
-
readonly attribute: string;
|
|
8
|
-
private isSelectedValue;
|
|
9
|
-
constructor(value: string, attribute: string);
|
|
10
|
-
get isSelected(): boolean;
|
|
11
|
-
setSelected(selected: boolean): void;
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=value.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"value.d.ts","sourceRoot":"","sources":["../../../src/attributes/value.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,cAAc;aAIP,KAAK,EAAE,MAAM;aACb,SAAS,EAAE,MAAM;IAJnC,OAAO,CAAC,eAAe,CAAS;gBAGd,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM;IAGnC,IAAW,UAAU,IAAI,OAAO,CAE/B;IAEM,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;CAG5C"}
|