@imagineio/configurator-sdk 0.1.3 → 0.1.4
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/dist/2990ba64d6.js +1 -1
- package/dist/2c7c1bcef1.js +1 -1
- package/dist/30be653f00.css +106 -106
- package/dist/39a62ef7b8.js +1 -1
- package/dist/3c916f744f.js +1 -1
- package/dist/4e7d0a0d4a.js +1 -1
- package/dist/60d697292c.js +1 -1
- package/dist/6bff84d27e.js +1 -1
- package/dist/718ecf1729.js +1 -0
- package/dist/776277593f.js +1 -1
- package/dist/7d9ddaeb47.js +1 -1
- package/dist/811b403d43.js +1 -1
- package/dist/87bb469216.js +1 -1
- package/dist/9526094bb7.js +1 -1
- package/dist/98f3644031.js +1 -1
- package/dist/99577e3161.js +1 -0
- package/dist/a0f71d0bf5.js +1 -1
- package/dist/a493e9aa8f.js +1 -1
- package/dist/a77b15c0d6.js +1 -1
- package/dist/bcd44b4040.js +1 -1
- package/dist/bdec200d00.js +1 -1
- package/dist/be07a7f885.js +1 -0
- package/dist/c9a1656c62.js +1 -1
- package/dist/ce663020e4.js +2 -2
- package/dist/d4378d9afa.js +1 -1
- package/dist/dbd5ba1d07.js +1 -1
- package/dist/dc2a1a0e13.js +1 -1
- package/dist/fbd844f2d1.js +1 -1
- package/package.json +1 -1
package/dist/87bb469216.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Fragment as ue,jsx as f,jsxs as it}from"react/jsx-runtime";import{useCallback as Y,useEffect as N,useMemo as Z,useRef as Mt,useState as Pt,useSyncExternalStore as We}from"react";import{Html as bn,useProgress as yn}from"@react-three/drei";import O from"./9c6c598569.js";import K from"./872c4302e0.js";import z from"./be337ddda5.js";import ft from"./d94df858ea.js";import{normalizeMaterialTargets as vn}from"./dc2a1a0e13.js";import S from"./8f60e5059a.js";import Mn from"./60d697292c.js";import Pn from"./811b403d43.js";import{useUiToggles as xn}from"./d0f9681634.js";import{ProductInstance as le,SelectionActionPanel as wn,FreeMovable as Cn,PlacementGaps as _n,SceneStage as Tn,SceneRoom as Fn,SceneProductsSource as On}from"./8a3a57c008.js";import Gn from"./205827c5c8.js";import{computeTargets as Ln,resolveTarget as kn,resolveTargetRenderer as An,resolveInsertSequence as Dn}from"./58e6419ba8.js";import{disarmPlacement as Ye}from"./ab6c80484f.js";import{resolveComponent as de,useComponentRegistry as Ke}from"./882bc739c8.js";import Rn from"./88251d6671.js";import{useLabels as zn}from"./28d887bf8a.js";import{SlotHost as En}from"./73f7d65985.js";import{ModalHost as Nn}from"./09c4973968.js";import qn from"./6c0a2572dd.js";import Xn from"./20b0104576.js";import{getConfigState as Zn,subscribe as $e,getVersion as Et}from"./817d930a49.js";import{getPlacementStrategy as Qe}from"./281cf952fa.js";import{resolveAddMode as Hn,armPlacement as jn}from"./ab6c80484f.js";import{resolveReplaceTarget as Vn}from"./4d7a0d1897.js";import{enforceCorners as Un}from"./388cadacbd.js";import{resolvePlacementStrategyConfig as Je}from"./281cf952fa.js";import{getLabel as Bn}from"./28d887bf8a.js";import{isAddFeature as Wn}from"./8c27edda0f.js";import{usePlacementInteraction as Yn}from"./4b8958aa4c.js";import{refreshCanonicalState as Kn,seedInitialState as $n,addProduct as Nt}from"./a77b15c0d6.js";import{resolveLayout as Qn,hasLayout as Jn,useLayoutRegistry as to,layoutOverride as eo,_publishResolvedLayoutKey as no}from"./31ea036f5c.js";import{themeLayoutKey as oo,useSystemTheme as so}from"./5c9fd9201c.js";import"./1a2629800a.css";import{runIntent as qt,INTENTS as Xt}from"./6d238282c1.js";function ro(){const w=ft(r=>r.sceneSelections),g=ft(r=>r.selectionOrder),m=O(r=>r.activeSceneConfigId),u=z(r=>r.defaultPresetId),i=z(r=>r.sceneConfigurations),G=z(r=>r.getSceneFeatures),I=We($e,Et,Et);return Z(()=>{const r=m||u||Object.keys(i||{})[0],$=r?G(r):[],H=K.getState(),b=[],Q=new Set,lt=(c,L)=>{if(!c||c.id==null||Q.has(String(c.id))||L>4)return;Q.add(String(c.id)),b.push(c);const P=(H.features?.[c.id]||H.features?.[String(c.id)])?.childOptionSetIds||[];for(const y of P){const d=H.features?.[y]||H.features?.[String(y)];d&<({id:y,type:d.type,sequence:d.sequence},L+1)}};for(const c of $)lt(c,0);const mt=b.filter(c=>/finish/i.test(c.type||"")&&w[c.id]!=null).sort((c,L)=>{const q=g?.[String(c.id)]??-1,P=g?.[String(L.id)]??-1;return q!==P?q-P:(c.sequence??0)-(L.sequence??0)}),M={};for(const c of mt){const L=w[c.id],q=H.options?.[L]?.value;if(q==null)continue;const P=H.features?.[c.id]||{},y=vn(P.materialTargets??P.material_targets??P.materials);for(const d of y)M[String(d).toLowerCase()]=q}return M},[w,g,m,u,i,G,I])}function ao(w,g){if(g==null)return null;const m=String(g);for(const u of Object.values(w.products||{})){const i=u?.components_configuration||u?.componentsConfiguration;if(!(!i||typeof i!="object"))for(const G of Object.values(i))for(const I of Array.isArray(G)?G:[G]){const r=I&&typeof I=="object"?I.componentId??I.component_id:I;if(r!=null&&String(r)===m)return u}}return null}function co(w){const g=ft(b=>b.sceneSelections),m=ft(b=>b.setSceneSelection),u=z(b=>b.getSceneFeatures),i=z(b=>b.sceneConfigurations),G=We($e,Et,Et),I=Z(()=>new Set((w?u(w)||[]:[]).filter(b=>Wn(b)).map(b=>String(b.id))),[w,u,i,G]),r=Mt({}),$=Mt(!1),H=ft(b=>b.sceneSelectionsSettled);N(()=>{if(!H){r.current={...g};return}if(!$.current){$.current=!0;let M=!1;for(const[c,L]of Object.entries(g||{}))L==null||!I.has(String(c))||(m(c,null),M=!0);if(M){r.current={...g};return}}const b=r.current,Q=[];for(const[M,c]of Object.entries(g||{}))b[M]===c||c==null||I.has(String(M))&&Q.push([M,c]);if(r.current={...g},!Q.length)return;const lt=z.getState().systemId;let mt=!1;return(async()=>{const M=K.getState(),c=O.getState();for(const[L,q]of Q){const P=M.options?.[q];let y=P?.valueProductVariantId??P?.value_product_variant_id??P?.value_product_variant??P?.variantId??P?.variant_id??null,d=y!=null?M.getProduct?.(y):null;if(d==null){const p=P?.value??(M.optionToProducts?.[String(q)]||[])[0]??P?.product_id??P?.productId??null;d=p!=null?M.getProduct?.(p):null,d==null&&p!=null&&M.getComponent?.(p)&&(d=ao(M,p)),y=d?.id??y??p}else y=d?.id??y;if(y==null){m(L,null);continue}const xt=d?.id??y,wt=d?.placementGroup??d?.placement_group??null,Zt=d?.productGraph??d?.product_graph??null,gt=d?.compatibleSlots??d?.compatible_slots??null;if(Array.isArray(gt)&>.length){const p=new Set(gt.map(String));if(Object.values(c.productInstances||{}).some(pt=>{const Vt=M.getProduct?.(pt.variantId)||M.getProduct?.(pt.productId),St=Vt?.product_graph??Vt?.productGraph;return St!=null&&p.has(String(St))})){S.getState().setPendingSlotPlacement?.({productId:xt,variantId:y,name:d?.name??d?.displayName??d?.variantName??"product",compatibleGraphIds:Array.from(p)}),m(L,null);continue}}if(Hn(lt,d)==="arm"){jn({productId:xt,variantId:y});const p=Qe(),Ct=typeof p?.computeTargets=="function",pt=Object.prototype.hasOwnProperty.call(p??{},"armHint")?p.armHint:Bn(Ct?"placement.armedPickTarget":"placement.armedPickGap",Ct?"":"Click a + between pieces to insert it.");pt&&S.getState().showInfo?.(pt),m(L,null);continue}const It=O.getState(),dt=It.selectedInstanceId,j=dt!=null?(It.productInstances||{})[dt]:null,J=j&&Number.isFinite(Number(j.sequence))?Number(j.sequence):void 0,ut=Vn({placementGroup:wt}),A=ut!=null?(It.productInstances||{})[ut]:null,Ht=A&&Number.isFinite(Number(A.sequence))?Number(A.sequence):J,nt=Array.isArray(A?.position)?A.position:[0,0,0];let jt=null;try{jt=await qt({type:Xt.PRODUCT_ADD,productGraphId:Zt,variantId:y,placementGroup:wt,sequence:Ht,replacePlacementId:ut??void 0},p=>Nt({productGraphId:p.productGraphId,variantId:p.variantId,placementGroup:p.placementGroup,position:nt,sequence:p.sequence,replace:p.replacePlacementId!=null,replacePlacementId:p.replacePlacementId}))}catch{}if(m(L,null),mt)return}})(),()=>{mt=!0}},[g,I,w,m])}function io({position:w,onClick:g}){const[m,u]=Pt(!1);return f(bn,{position:w,center:!0,style:{pointerEvents:"auto"},zIndexRange:[100,0],children:f("div",{onClick:g,onPointerEnter:()=>u(!0),onPointerLeave:()=>u(!1),style:{width:22,height:22,borderRadius:"50%",background:m?"#ff8a65":"rgba(255, 87, 34, 0.85)",display:"flex",alignItems:"center",justifyContent:"center",color:"var(--bg-primary, #fff)",fontSize:13,fontWeight:"bold",boxShadow:"0 1px 4px rgba(0,0,0,0.3)",cursor:"pointer",transition:"transform 0.2s",transform:m?"scale(1.15)":"scale(1)"},children:"+"})})}function lo({isMobile:w}={}){Ke();const g=de("SelectionActionPanel",wn),m=O(t=>t.productInstances),u=K(t=>t.getProduct),i=K(t=>t.componentGroups),G=O(t=>t.clearSelection),I=O(t=>t.selectedInstanceId),r=O(t=>t.isFocusing),$=S(t=>t.bootLoading),H=S(t=>t.bootDetail),b=S(t=>t.bootProgress);Ke();const Q=de("LoadingScreen",Rn),lt=zn();N(()=>{if(typeof document>"u")return;const t=document.documentElement;return $?t.setAttribute("data-scene-booting",""):t.removeAttribute("data-scene-booting"),()=>t.removeAttribute("data-scene-booting")},[$]),N(()=>{S.getState().markUiReady?.()},[]);const mt=O(t=>t.removeProductInstance),M=O(t=>t.addProductInstance),c=O(t=>t.updateInstancePosition),L=O(t=>t.updateInstanceRotation),q=O(t=>t.activeSceneConfigId),P=z(t=>t.defaultPresetId),y=z(t=>t.sceneConfigurations),d=z(t=>t.systemId),xt=z(t=>t.useTransform),wt=S(t=>t.sceneCapabilities),Zt=S(t=>t.showWalls),gt=S(t=>t.showDimensions),It=S(t=>t.pendingSlotPlacement),dt=ro(),j=S(t=>t.hostMaterialOverrides),J=(Zn()||{}).room||null,ut=q||P||Object.keys(y||{})[0]||null;co(ut);const[A,Ht]=Pt(!0),[nt,jt]=Pt(!1),p=Y(async()=>{try{await $n()}catch{}jt(!0)},[]),{edgeOf:Ct,cornerOf:pt,isHostAnchored:Vt,isMovable:St,rawFree:po,splitReliable:ho,freeInstances:_t,ordered:x,syntheticHosts:pe,moveInFlightRef:fo}=Mn(),Tt=Z(()=>new Map(pe.map(t=>[t.hostedProductId,t])),[pe]),[bt,en]=Pt({}),Ut=Y((t,e)=>{en(n=>{const o=n[t],a=e.full||null;return o&&o.width===e.width&&o.depth===e.depth&&o.height===e.height&&o.cx===e.cx&&o.cz===e.cz&&(o.full?.width??null)===(a?.width??null)&&(o.full?.height??null)===(a?.height??null)&&(o.full?.depth??null)===(a?.depth??null)?n:{...n,[t]:{width:e.width,depth:e.depth,height:e.height,cx:e.cx,cz:e.cz,full:a}}})},[]),ot=Y(t=>bt[t]||null,[bt]),he=K(t=>t.placementBoundsExcludeIds),fe=Z(()=>new Set((he||[]).map(t=>String(t))),[he]),Bt=Y((t,e)=>{const n=t?.componentId??e?.id??e?.componentId??null;return n!=null&&fe.has(String(n))||/leg|arm/i.test(String(t?.slotKey||""))?!0:(e?.groups||e?.group_ids||[]).some(a=>{const l=i?.[a]||i?.[String(a)];return/leg|arm/i.test(String(l?.name??l?.slotKey??l?.slot_key??""))})},[i,fe]),st=Mt(!1),Ft=Mt(!1),D=x.length+_t.length,Wt=Z(()=>[...x,..._t],[x,_t]),rt=D>0&&Wt.every(t=>bt[t.productId]),Ot=Z(()=>Wt.filter(t=>bt[t.productId]).length,[Wt,bt]),{active:Yt,loaded:me,total:Kt}=yn(),ge=S(t=>t.isEvaluating),Gt=S(t=>t.isLayoutLoading),Ie=S(t=>t.bootEvaluating),Se=Mt({pieceCount:0,allMeasured:!1});Se.current={pieceCount:D,allMeasured:rt};const Lt=Y(()=>{const{pieceCount:t,allMeasured:e}=Se.current;t>0&&!st.current&&!Ft.current&&(O.getState().resetCameraToDefault?.({instant:!0}),st.current=e,Ft.current=!e)},[]);N(()=>S.subscribe((t,e)=>{e?.bootLoading&&!t.bootLoading&&Lt()}),[Lt]),N(()=>{if(!nt)return;const t=!Yt&&(Kt===0||me>=Kt),e=(rt||D===0)&&t&&!ge&&!Ie,n=()=>{Lt(),Ht(!1),S.getState().endBootLoading()};if(e){const a=setTimeout(n,900);return()=>clearTimeout(a)}const o=setTimeout(n,Yt?12e4:15e3);return()=>clearTimeout(o)},[nt,rt,D,Ot,Yt,me,Kt,ge,Ie,Lt]);const[be,ye]=Pt(!1);N(()=>{if(!A){ye(!1);return}(rt&&D>0||nt&&D===0)&&ye(!0)},[rt,D,nt,A]);const ve=nt?be||D===0?"Finishing up\u2026":`Loading products\u2026 ${Math.min(Ot,D)}/${D}`:"Preparing your configurator\u2026",Me=be?100:D>0?Math.min(Math.round(Ot/D*100),92):0;N(()=>{A&&S.getState().setBootPhase(ve,Me)},[A,ve,Me]),N(()=>(S.setState({initialSceneLoading:A}),()=>S.setState({initialSceneLoading:!1})),[A]),N(()=>{Gt&&(st.current=!1)},[Gt]),N(()=>{if(D===0){st.current=!1;return}if(st.current||A||Gt||!rt)return;const t=setTimeout(()=>{st.current||(O.getState().resetCameraToDefault?.({instant:!Ft.current}),Ft.current=!1,st.current=!0)},250);return()=>clearTimeout(t)},[D,Ot,A,Gt,rt]);const yt=Qe(),kt=Z(()=>x.map(t=>{const e=Tt.get(t.id);return e?{...t,productId:e.hostVariantId}:t}),[x,Tt]),Pe=xt||!!y?.[ut]?.useTransform,X=O(t=>t.pendingPlacementPiece),xe=!!X&&typeof yt?.computeTargets=="function"&&!!An(),at=Z(()=>{const t={getProduct:u,getDims:ot,useTransform:Pe,candidate:X,openSlots:xe,config:Je()},e=yt.computeLayout?yt.computeLayout(kt,t):kt.map(()=>({position:[0,0,0],rotation:[0,0,0]}));return Un(e,kt,t,yt)},[yt,kt,u,ot,Pe,X,xe]),V=Z(()=>{const e=J?.height>0?J.height:2.7,n=.1,o=.05,a=new Map;let l=1/0,C=-1/0,k=1/0,h=-1/0,U=0,R=!1;if(x.forEach((s,B)=>{const _=at[B];if(!_||St(s))return;const v=_.position||[0,0,0],T=ot(s.productId),W=u(s.productId),E=T?.full||T,re=E?.height>0?E.height:W?.height>0?W.height*.0254:0,Rt=(v[1]||0)+re;if(Rt>U&&(U=Rt),(s.positionedAbove??s.positioned_above)!=null)return;const ae=(v[1]||0)<=.01,zt=-((Array.isArray(_.rotation)?_.rotation[1]:0)||0),ce=T?.depth>0?T.depth:W?.depth>0?W.depth*.0254:.6,ie=T?.width>0?T.width:W?.width>0?W.width*.0254:.9,tt=Math.cos(zt),et=Math.sin(zt),Ge=T?.cx||0,Le=T?.cz||0,ke=v[0]+tt*Ge-et*Le,Ae=v[2]+et*Ge+tt*Le,De=(ie*Math.abs(tt)+ce*Math.abs(et))/2,Re=(ie*Math.abs(et)+ce*Math.abs(tt))/2,ze=ke-De,Ee=ke+De,Ne=Ae-Re,qe=Ae+Re,Xe=E?.width>0?E.width:ie,Ze=E?.depth>0?E.depth:ce,He=v[0]+tt*(E?.cx||0)-et*(E?.cz||0),je=v[2]+et*(E?.cx||0)+tt*(E?.cz||0),Ve=(Xe*Math.abs(tt)+Ze*Math.abs(et))/2,Ue=(Xe*Math.abs(et)+Ze*Math.abs(tt))/2,mn=He-Ve,gn=He+Ve,In=je-Ue,Sn=je+Ue,Be=String((Math.round(zt/(Math.PI/2))%4+4)%4),F=a.get(Be)||{heading:zt,minX:1/0,maxX:-1/0,minZ:1/0,maxZ:-1/0,fMinX:1/0,fMaxX:-1/0,fMinZ:1/0,fMaxZ:-1/0,hasFloor:!1};F.minX=Math.min(F.minX,ze),F.maxX=Math.max(F.maxX,Ee),F.minZ=Math.min(F.minZ,Ne),F.maxZ=Math.max(F.maxZ,qe),ae&&(F.fMinX=Math.min(F.fMinX,ze),F.fMaxX=Math.max(F.fMaxX,Ee),F.fMinZ=Math.min(F.fMinZ,Ne),F.fMaxZ=Math.max(F.fMaxZ,qe),F.hasFloor=!0),a.set(Be,F),l=Math.min(l,mn),C=Math.max(C,gn),k=Math.min(k,In),h=Math.max(h,Sn),R=!0}),!R)return null;const ht=Math.max(e,U>0?U+.02:e),Jt=[...a.values()].map(s=>{const B=Math.sin(s.heading),_=Math.cos(s.heading),v=B,T=-_,W=Math.abs(v)>Math.abs(T),E=s.hasFloor?s.fMinX:s.minX,re=s.hasFloor?s.fMaxX:s.maxX,Rt=s.hasFloor?s.fMinZ:s.minZ,ae=s.hasFloor?s.fMaxZ:s.maxZ,Oe=W?(v>0?re:E)+(v>0?n/2:-n/2):(T>0?ae:Rt)+(T>0?n/2:-n/2);return{g:s,isSide:W,plane:Oe}}),At=Jt.some(s=>s.g.hasFloor)?Jt.filter(s=>s.g.hasFloor):Jt,un=At.filter(s=>s.isSide).map(s=>s.plane),pn=At.filter(s=>!s.isSide).map(s=>s.plane),te=[];for(const s of At){const{g:B}=s;if(s.isSide){let _=B.minZ,v=B.maxZ;for(const T of pn)_=Math.min(_,T),v=Math.max(v,T);te.push({cx:s.plane,cz:(_+v)/2,cy:ht/2,length:v-_+o*2,thickness:n,height:ht,rotY:Math.PI/2})}else{let _=B.minX,v=B.maxX;for(const T of un)_=Math.min(_,T),v=Math.max(v,T);te.push({cx:(_+v)/2,cz:s.plane,cy:ht/2,length:v-_+o*2,thickness:n,height:ht,rotY:0})}}const Dt=.4,Fe=C>l&&h>k;let ee=l-Dt,ne=C+Dt,oe=k-Dt,se=h+Dt;for(const s of At){const B=Math.sin(s.g.heading),_=-Math.cos(s.g.heading);s.isSide?B<0?ee=s.plane-n/2:ne=s.plane+n/2:_<0?oe=s.plane-n/2:se=s.plane+n/2}const hn=Fe?{cx:(ee+ne)/2,cz:(oe+se)/2,w:ne-ee,d:se-oe}:null,fn=Fe?{minX:l,maxX:C,minZ:k,maxZ:h,w:C-l,d:h-k,h:ht,height:U>0?U:ht}:null;return{segments:te,floor:hn,bbox:fn}},[x,at,J,ot,u,St]),nn=Zt&&!!(V&&V.segments&&V.segments.length),on=gt&&!!(V&&V.bbox&&V.bbox.w>0),sn=(t,e)=>{const n=at[e]||{position:[0,0,0],rotation:[0,0,0]},o=Tt.get(t.id);if(!o)return n;const a=n.position||[0,0,0],l=(Array.isArray(n.rotation)?n.rotation[1]:0)||0,C=Math.cos(l),k=Math.sin(l),h=o.offset||[0,0,0];return{position:[a[0]+(h[0]||0)*C+(h[2]||0)*k,a[1]+(h[1]||0),a[2]-(h[0]||0)*k+(h[2]||0)*C],rotation:[0,l+(o.rotDegY||0)*Math.PI/180,0]}},ct=It,vt=!!ct,we=Z(()=>{if(!ct)return new Set;const t=new Set((ct.compatibleGraphIds||[]).map(String)),e=new Set;for(const n of Object.values(m||{})){const o=u(n.variantId)||u(n.productId),a=o?.product_graph??o?.productGraph;a!=null&&t.has(String(a))&&e.add(String(n.id))}return e},[ct,m,u]),$t=Y(()=>{S.getState().clearPendingSlotPlacement?.(),S.getState().clearPendingHostedProduct?.()},[]),Ce=Y((t,e)=>{if(!e)return;const n=K.getState(),o=n.getProduct?.(e.variantId)||n.getProduct?.(e.productId),a=o?.productGraph??o?.product_graph??null,l=O.getState().productInstances?.[String(t)],C=o?.placementGroup??o?.placement_group??l?.placementGroup??null,k=Array.isArray(l?.position)?l.position:[0,0,0],h=l?.variantId??l?.productId??null,U=Number.isFinite(Number(l?.sequence))?Number(l.sequence):void 0;$t(),qt({type:Xt.PRODUCT_ADD,productGraphId:a,variantId:e.variantId??e.productId,placementGroup:C,sequence:U,hostPlacementId:String(t),hostVariantId:h},R=>Nt({productGraphId:R.productGraphId,variantId:R.variantId,placementGroup:R.placementGroup,position:k,sequence:R.sequence,hostPlacementId:R.hostPlacementId,hostVariantId:R.hostVariantId}).catch(()=>{}))},[$t]),Qt=Y((t,e)=>{const n=K.getState(),o=n.getProduct?.(e.variantId)||n.getProduct?.(e.productId),a=o?.productGraph??o?.product_graph??null,l=o?.placementGroup??o?.placement_group??null,C=x[t-1]||x[t],k=Array.isArray(C?.position)?C.position:[0,0,0],h=x[t],U=h&&Number.isFinite(Number(h.sequence))?Number(h.sequence):void 0;qt({type:Xt.PRODUCT_ADD,productGraphId:a,variantId:e.variantId??e.productId,placementGroup:l,sequence:U},R=>Nt({productGraphId:R.productGraphId,variantId:R.variantId,placementGroup:R.placementGroup,position:k,sequence:R.sequence}).catch(()=>{}))},[x]);N(()=>{if(!X||x.length>0)return;const t=X;Ye(),Qt(0,t)},[X,x.length,Qt]);const{gaps:rn,onInsert:an}=Yn({systemId:d,count:x.length,positionOf:t=>at[t]?.position||[0,0,0],insertAt:Qt}),_e=Z(()=>{if(!X)return[];const t=K.getState();return Ln(x,{candidate:X,getProduct:e=>t.getProduct?.(e),getDims:ot,config:Je(),layout:at})},[X,x,at,ot]),cn=Y(t=>{const e=kn(t,{candidate:X});if(!e)return;const n=K.getState(),o=n.getProduct?.(e.variantId)||n.getProduct?.(e.productId),a=o?.productGraph??o?.product_graph??null,l=o?.placementGroup??o?.placement_group??null,C=e.transform?.position??t.position??[0,0,0],k=Dn(e,t,x);qt({type:Xt.PRODUCT_ADD,productGraphId:a,variantId:e.variantId??e.productId,placementGroup:l,anchor:e.anchor??null,sequence:k},h=>Nt({productGraphId:h.productGraphId,variantId:h.variantId,placementGroup:h.placementGroup,position:C,sequence:h.sequence}).catch(()=>{})),Ye()},[X,x]),{selectedInst:mo,swapOrder:go,panelActions:Te,priceInfo:ln}=Pn(),dn=xn()("selectionPanel");N(()=>{if(I==null)return;const t=m||{},e=String(I),n="__host";if(e.endsWith(n)){const o=e.slice(0,-n.length);if(t[o]||Object.values(t).some(a=>String(a?.id??a?.instanceId)===o))return}else if(t[I]||Object.values(t).some(o=>String(o?.instanceId??o?.id)===e))return;G?.()},[I,m,G]);const So=ft(t=>t.placementPricing),bo=z(t=>t.getChannelPriceConfig);return it(ue,{children:[f(On,{onSeeded:p}),it(Tn,{isMobile:w,camera:{position:[2.6,2.2,4],fov:45},controlsTarget:[0,.5,0],onPointerMissed:()=>G?.(),groundShadowCatcher:!0,overlay:it(ue,{children:[!vt&&Te&&dn?f(g,{actions:Te,priceInfo:ln}):null,vt&&f("div",{className:"placement-mode-overlay",children:it("div",{className:"placement-mode-overlay__content",children:[it("span",{className:"placement-mode-overlay__text",children:["Click on a highlighted slot to place ",f("strong",{children:ct?.name})]}),f("button",{type:"button",className:"placement-mode-overlay__cancel",onClick:$t,children:f("span",{className:"placement-mode-overlay__cancel-text",children:"Cancel"})})]})}),f(En,{name:"overlay"}),$&&f(Q,{scene:!0,message:lt("loading.message","Loading your configurator\u2026"),detail:H,progress:b}),r&&f("div",{"aria-hidden":"true",style:{position:"absolute",inset:0,zIndex:30,cursor:"default"}})]}),children:[nn&&f(Fn,{width:J?.width,depth:J?.depth,height:J?.height??V?.bbox?.h??2.7,showCeiling:wt?.ceiling===!0,segments:V?.segments||null,floor:V?.floor||null}),on&&(()=>{const t=de("SceneDimensions",Xn);return f(t,{bbox:V.bbox})})(),x.map((t,e)=>{const n=Tt.get(t.id),o=at[e]||{position:[0,0,0],rotation:[0,0,0]};return o.hidden?null:it("group",{children:[n&&f(le,{instance:{id:n.id,instanceId:n.id,productId:n.hostVariantId,variantId:n.hostVariantId,position:o.position||[0,0,0],rotation:o.rotation||[0,0,0]},slotMaterials:{...dt,...j?.[n.hostedProductId]||{},...j?.[n.id]||{}},stateInstanceId:n.hostedProductId,onSelect:()=>O.getState().selectInstance(n.id),isSelected:String(I)===String(n.id),onMeasure:a=>Ut(n.hostVariantId,a),footprintExcludeItem:Bt,hoverable:!0,focusable:!0},n.id),f(le,{instance:{...t,...sn(t,e)},slotMaterials:{...dt,...j?.[t.id]||j?.[t.instanceId]||{}},onSelect:(a,l,C)=>{if(vt){we.has(String(t.id))&&Ce(t.id,ct);return}O.getState().selectInstance(a,C??null)},isSelected:!vt&&String(I)===String(t.instanceId??t.id),onMeasure:a=>Ut(t.productId,a),footprintExcludeItem:Bt,hoverable:!0,focusable:!0}),vt&&we.has(String(t.id))&&f(io,{position:[o.position?.[0]||0,(o.position?.[1]||0)+.45,o.position?.[2]||0],onClick:()=>Ce(t.id,ct)})]},t.id??t.instanceId??e)}),_t.map((t,e)=>f(Cn,{selected:I===t.id,disabled:!!t.locked,position:t.position||[0,0,0],rotationY:(Array.isArray(t.rotation)&&t.rotation[1]||0)*Math.PI/180,gizmoOffset:(()=>{const n=ot(t.productId);return[n?.cx||0,0,n?.cz||0]})(),onCommit:({position:n,rotationY:o})=>{c(t.id,n),L(t.id,[0,o*180/Math.PI,0]),Kn({allowRevert:!0}).catch(()=>{})},children:f(le,{instance:{...t,position:[0,0,0],rotation:[0,0,0]},slotMaterials:{...dt,...j?.[t.id]||j?.[t.instanceId]||{}},onMeasure:n=>Ut(t.productId,n),footprintExcludeItem:Bt})},t.id??t.instanceId??`free-${e}`)),_e.length>0?f(Gn,{targets:_e,onPick:cn}):f(_n,{gaps:rn,onInsert:an})]})]})}const tn=new Set;function uo(){to();const w=z(r=>r.systemLayoutTemplate),g=z(r=>r.systemTheme),m=z(r=>r.systemThemeRecord);so(g,m);const u=oo(m)||(g?String(g).trim().toLowerCase():null);let i=w;try{const r=new URLSearchParams(window.location.search);r.has("template")?i=r.get("template"):r.has("theme")&&(i=r.get("theme"))}catch{}i=i||w||u||null;const G=eo();G&&(i=G),!G&&!w&&i&&i===u&&!Jn(i)&&!/^theme\d+$/.test(i)&&!tn.has(i)&&tn.add(i),no(i);const I=Qn(i);return it(ue,{children:[f(I,{Scene:lo,template:i}),f(Nn,{}),f(qn,{})]})}export{lo as SharedConfiguratorScene,uo as default};
|
|
1
|
+
import{Fragment as le,jsx as m,jsxs as dt}from"react/jsx-runtime";import{useCallback as J,useEffect as N,useMemo as H,useRef as Mt,useState as xt,useSyncExternalStore as We}from"react";import{Html as yn,useProgress as vn}from"@react-three/drei";import _ from"./9c6c598569.js";import W from"./872c4302e0.js";import R from"./be337ddda5.js";import gt from"./d94df858ea.js";import{normalizeMaterialTargets as Pn}from"./dc2a1a0e13.js";import y from"./8f60e5059a.js";import Mn from"./60d697292c.js";import xn from"./811b403d43.js";import{useUiToggles as wn}from"./d0f9681634.js";import{ProductInstance as ce,SelectionActionPanel as Cn,FreeMovable as _n,PlacementGaps as Tn,SceneStage as Fn,SceneRoom as Gn,SceneProductsSource as On}from"./8a3a57c008.js";import An from"./205827c5c8.js";import{computeTargets as Dn,resolveTarget as Ln,resolveTargetRenderer as kn,resolveInsertSequence as zn}from"./58e6419ba8.js";import{disarmPlacement as Ye}from"./ab6c80484f.js";import{isCompatibleSlot as $e}from"./99577e3161.js";import{resolveComponent as ie,useComponentRegistry as Ke}from"./882bc739c8.js";import Rn from"./88251d6671.js";import{useLabels as En}from"./28d887bf8a.js";import{SlotHost as qn}from"./73f7d65985.js";import{ModalHost as Nn}from"./09c4973968.js";import Xn from"./6c0a2572dd.js";import Zn from"./20b0104576.js";import{getConfigState as Hn,subscribe as Qe,getVersion as Et}from"./817d930a49.js";import{getPlacementStrategy as Je}from"./281cf952fa.js";import{resolveAddMode as Vn,armPlacement as jn}from"./ab6c80484f.js";import{resolveReplaceTarget as Un}from"./4d7a0d1897.js";import{enforceCorners as Bn}from"./388cadacbd.js";import{resolvePlacementStrategyConfig as tn}from"./281cf952fa.js";import{getLabel as Wn}from"./28d887bf8a.js";import{isAddFeature as Yn}from"./8c27edda0f.js";import{usePlacementInteraction as $n}from"./4b8958aa4c.js";import{refreshCanonicalState as Kn,seedInitialState as Qn,addProduct as qt}from"./a77b15c0d6.js";import{resolveLayout as Jn,hasLayout as to,useLayoutRegistry as eo,layoutOverride as no,_publishResolvedLayoutKey as oo}from"./31ea036f5c.js";import{themeLayoutKey as so,useSystemTheme as ro}from"./5c9fd9201c.js";import"./1a2629800a.css";import{runIntent as Nt,INTENTS as Xt}from"./6d238282c1.js";function ao(){const T=gt(c=>c.sceneSelections),S=gt(c=>c.selectionOrder),g=_(c=>c.activeSceneConfigId),h=R(c=>c.defaultPresetId),f=R(c=>c.sceneConfigurations),D=R(c=>c.getSceneFeatures),b=We(Qe,Et,Et);return H(()=>{const c=g||h||Object.keys(f||{})[0],tt=c?D(c):[],V=W.getState(),v=[],et=new Set,ut=(l,L)=>{if(!l||l.id==null||et.has(String(l.id))||L>4)return;et.add(String(l.id)),v.push(l);const w=(V.features?.[l.id]||V.features?.[String(l.id)])?.childOptionSetIds||[];for(const M of w){const d=V.features?.[M]||V.features?.[String(M)];d&&ut({id:M,type:d.type,sequence:d.sequence},L+1)}};for(const l of tt)ut(l,0);const It=v.filter(l=>/finish/i.test(l.type||"")&&T[l.id]!=null).sort((l,L)=>{const X=S?.[String(l.id)]??-1,w=S?.[String(L.id)]??-1;return X!==w?X-w:(l.sequence??0)-(L.sequence??0)}),P={};for(const l of It){const L=T[l.id],X=V.options?.[L]?.value;if(X==null)continue;const w=V.features?.[l.id]||{},M=Pn(w.materialTargets??w.material_targets??w.materials);for(const d of M)P[String(d).toLowerCase()]=X}return P},[T,S,g,h,f,D,b])}function co(T,S){if(S==null)return null;const g=String(S);for(const h of Object.values(T.products||{})){const f=h?.components_configuration||h?.componentsConfiguration;if(!(!f||typeof f!="object"))for(const D of Object.values(f))for(const b of Array.isArray(D)?D:[D]){const c=b&&typeof b=="object"?b.componentId??b.component_id:b;if(c!=null&&String(c)===g)return h}}return null}function io(T){const S=gt(v=>v.sceneSelections),g=gt(v=>v.setSceneSelection),h=R(v=>v.getSceneFeatures),f=R(v=>v.sceneConfigurations),D=We(Qe,Et,Et),b=H(()=>new Set((T?h(T)||[]:[]).filter(v=>Yn(v)).map(v=>String(v.id))),[T,h,f,D]),c=Mt({}),tt=Mt(!1),V=gt(v=>v.sceneSelectionsSettled);N(()=>{if(!V){c.current={...S};return}if(!tt.current){tt.current=!0;let P=!1;for(const[l,L]of Object.entries(S||{}))L==null||!b.has(String(l))||(g(l,null),P=!0);if(P){c.current={...S};return}}const v=c.current,et=[];for(const[P,l]of Object.entries(S||{}))v[P]===l||l==null||b.has(String(P))&&et.push([P,l]);if(c.current={...S},!et.length)return;const ut=R.getState().systemId;let It=!1;return(async()=>{const P=W.getState(),l=_.getState();for(const[L,X]of et){const w=P.options?.[X];let M=w?.valueProductVariantId??w?.value_product_variant_id??w?.value_product_variant??w?.variantId??w?.variant_id??null,d=M!=null?P.getProduct?.(M):null;if(d==null){const I=w?.value??(P.optionToProducts?.[String(X)]||[])[0]??w?.product_id??w?.productId??null;d=I!=null?P.getProduct?.(I):null,d==null&&I!=null&&P.getComponent?.(I)&&(d=co(P,I)),M=d?.id??M??I}else M=d?.id??M;if(M==null){g(L,null);continue}const wt=d?.id??M,Ct=d?.placementGroup??d?.placement_group??null,Zt=d?.productGraph??d?.product_graph??null,St=d?.compatibleSlots??d?.compatible_slots??null;if(Array.isArray(St)&&St.length){const I=new Set(St.map(String));if(Object.values(l.productInstances||{}).some(ft=>{const de=P.getProduct?.(ft.variantId)||P.getProduct?.(ft.productId);return $e(d,de,P.products)})){y.getState().setPendingSlotPlacement?.({productId:wt,variantId:M,name:d?.name??d?.displayName??d?.variantName??"product",compatibleGraphIds:Array.from(I)}),g(L,null);continue}}if(Vn(ut,d)==="arm"){jn({productId:wt,variantId:M});const I=Je(),_t=typeof I?.computeTargets=="function",ft=Object.prototype.hasOwnProperty.call(I??{},"armHint")?I.armHint:Wn(_t?"placement.armedPickTarget":"placement.armedPickGap",_t?"":"Click a + between pieces to insert it.");ft&&y.getState().showInfo?.(ft),g(L,null);continue}const bt=_.getState(),pt=bt.selectedInstanceId,j=pt!=null?(bt.productInstances||{})[pt]:null,nt=j&&Number.isFinite(Number(j.sequence))?Number(j.sequence):void 0,ht=Un({placementGroup:Ct}),z=ht!=null?(bt.productInstances||{})[ht]:null,Ht=z&&Number.isFinite(Number(z.sequence))?Number(z.sequence):nt,ct=Array.isArray(z?.position)?z.position:[0,0,0];let Vt=null;try{Vt=await Nt({type:Xt.PRODUCT_ADD,productGraphId:Zt,variantId:M,placementGroup:Ct,sequence:Ht,replacePlacementId:ht??void 0},I=>qt({productGraphId:I.productGraphId,variantId:I.variantId,placementGroup:I.placementGroup,position:ct,sequence:I.sequence,replace:I.replacePlacementId!=null,replacePlacementId:I.replacePlacementId}))}catch{}if(g(L,null),It)return}})(),()=>{It=!0}},[S,b,T,g])}function lo({position:T,onClick:S}){const[g,h]=xt(!1);return m(yn,{position:T,center:!0,style:{pointerEvents:"auto"},zIndexRange:[100,0],children:m("div",{onClick:S,onPointerEnter:()=>h(!0),onPointerLeave:()=>h(!1),style:{width:22,height:22,borderRadius:"50%",background:g?"#ff8a65":"rgba(255, 87, 34, 0.85)",display:"flex",alignItems:"center",justifyContent:"center",color:"var(--bg-primary, #fff)",fontSize:13,fontWeight:"bold",boxShadow:"0 1px 4px rgba(0,0,0,0.3)",cursor:"pointer",transition:"transform 0.2s",transform:g?"scale(1.15)":"scale(1)"},children:"+"})})}function uo({isMobile:T}={}){Ke();const S=ie("SelectionActionPanel",Cn),g=_(t=>t.productInstances),h=W(t=>t.getProduct),f=W(t=>t.componentGroups),D=_(t=>t.clearSelection),b=_(t=>t.selectedInstanceId),c=_(t=>t.isFocusing),tt=y(t=>t.bootLoading),V=y(t=>t.bootDetail),v=y(t=>t.bootProgress);Ke();const et=ie("LoadingScreen",Rn),ut=En();N(()=>{if(typeof document>"u")return;const t=document.documentElement;return tt?t.setAttribute("data-scene-booting",""):t.removeAttribute("data-scene-booting"),()=>t.removeAttribute("data-scene-booting")},[tt]),N(()=>{y.getState().markUiReady?.()},[]);const It=_(t=>t.removeProductInstance),P=_(t=>t.addProductInstance),l=_(t=>t.updateInstancePosition),L=_(t=>t.updateInstanceRotation),X=_(t=>t.activeSceneConfigId),w=R(t=>t.defaultPresetId),M=R(t=>t.sceneConfigurations),d=R(t=>t.systemId),wt=R(t=>t.useTransform),Ct=y(t=>t.sceneCapabilities),Zt=y(t=>t.showWalls),St=y(t=>t.showDimensions),bt=y(t=>t.pendingSlotPlacement),pt=ao(),j=y(t=>t.hostMaterialOverrides),nt=(Hn()||{}).room||null,ht=X||w||Object.keys(M||{})[0]||null;io(ht);const[z,Ht]=xt(!0),[ct,Vt]=xt(!1),I=J(async()=>{try{await Qn()}catch{}Vt(!0)},[]),{edgeOf:_t,cornerOf:ft,isHostAnchored:de,isMovable:ue,rawFree:ho,splitReliable:fo,freeInstances:Tt,ordered:C,syntheticHosts:pe,moveInFlightRef:mo}=Mn(),Ft=H(()=>new Map(pe.map(t=>[t.hostedProductId,t])),[pe]),[ot,nn]=xt({}),jt=J((t,e,n=null)=>{const o=(r,a)=>{const i=r[a],u=e.full||null;return i&&i.width===e.width&&i.depth===e.depth&&i.height===e.height&&i.cx===e.cx&&i.cz===e.cz&&(i.full?.width??null)===(u?.width??null)&&(i.full?.height??null)===(u?.height??null)&&(i.full?.depth??null)===(u?.depth??null)?r:{...r,[a]:{width:e.width,depth:e.depth,height:e.height,cx:e.cx,cz:e.cz,full:u,forProductId:t,...e.__slots?{slots:e.__slots}:{}}}};nn(r=>{const a=o(r,t);return n!=null?o(a,`inst:${n}`):a})},[]),st=J((t,e)=>{const n=e?.id!=null?ot[`inst:${e.id}`]:null;return n&&String(n.forProductId)===String(t)?n:ot[t]||null},[ot]),he=W(t=>t.placementBoundsExcludeIds),fe=H(()=>new Set((he||[]).map(t=>String(t))),[he]),Ut=J((t,e)=>{const n=t?.componentId??e?.id??e?.componentId??null;if(n!=null&&fe.has(String(n)))return!0},[f,fe]),Y=Mt(!1),Gt=Mt(!1),k=C.length+Tt.length,Bt=H(()=>[...C,...Tt],[C,Tt]),it=k>0&&Bt.every(t=>ot[t.productId]),Ot=H(()=>Bt.filter(t=>ot[t.productId]).length,[Bt,ot]),{active:Wt,loaded:me,total:Yt}=vn(),ge=y(t=>t.isEvaluating),At=y(t=>t.isLayoutLoading),Ie=y(t=>t.bootEvaluating),Se=Mt({pieceCount:0,allMeasured:!1});Se.current={pieceCount:k,allMeasured:it};const Dt=J(()=>{const{pieceCount:t,allMeasured:e}=Se.current;t>0&&!Y.current&&!Gt.current&&(_.getState().resetCameraToDefault?.({instant:!0}),Y.current=e,Gt.current=!e)},[]);N(()=>y.subscribe((t,e)=>{e?.bootLoading&&!t.bootLoading&&Dt()}),[Dt]),N(()=>{if(!ct)return;const t=!Wt&&(Yt===0||me>=Yt),e=(it||k===0)&&t&&!ge&&!Ie,n=()=>{Dt(),Ht(!1),y.getState().endBootLoading()};if(e){let r=null;const a=setTimeout(()=>{k>0&&!Y.current&&(_.getState().resetCameraToDefault?.({instant:!0}),Y.current=!0),r=setTimeout(n,120)},780);return()=>{clearTimeout(a),r&&clearTimeout(r)}}const o=setTimeout(n,Wt?12e4:15e3);return()=>clearTimeout(o)},[ct,it,k,Ot,Wt,me,Yt,ge,Ie,Dt]);const[be,ye]=xt(!1);N(()=>{if(!z){ye(!1);return}(it&&k>0||ct&&k===0)&&ye(!0)},[it,k,ct,z]);const ve=ct?be||k===0?"Finishing up\u2026":`Loading products\u2026 ${Math.min(Ot,k)}/${k}`:"Preparing your configurator\u2026",Pe=be?100:k>0?Math.min(Math.round(Ot/k*100),92):0;N(()=>{z&&y.getState().setBootPhase(ve,Pe)},[z,ve,Pe]),N(()=>(y.setState({initialSceneLoading:z}),()=>y.setState({initialSceneLoading:!1})),[z]),N(()=>{At&&(Y.current=!1)},[At]),N(()=>{if(k===0){Y.current=!1;return}if(Y.current||z||At||!it)return;const t=setTimeout(()=>{Y.current||(_.getState().resetCameraToDefault?.({instant:!Gt.current}),Gt.current=!1,Y.current=!0)},250);return()=>clearTimeout(t)},[k,Ot,z,At,it]);const yt=Je(),mt=H(()=>C.map(t=>{const e=Ft.get(t.id);return e?{...t,productId:e.hostVariantId}:t}),[C,Ft]),Me=wt||!!M?.[ht]?.useTransform,Z=_(t=>t.pendingPlacementPiece),xe=!!Z&&typeof yt?.computeTargets=="function"&&!!kn(),lt=H(()=>{const t={getProduct:h,getDims:st,useTransform:Me,candidate:Z,openSlots:xe,config:tn()},e=yt.computeLayout?yt.computeLayout(mt,t):mt.map(()=>({position:[0,0,0],rotation:[0,0,0]})),n=Bn(e,mt,t,yt);try{import.meta.env?.DEV&&typeof window<"u"&&(window.__layoutDebug={at:Date.now(),dims:ot,items:mt.map(o=>({id:o.id,variantId:o.variantId,productId:o.productId,placementGroup:o.placementGroup,sequence:o.sequence,positionedAbove:o.positionedAbove??null,hostVariantId:o.hostVariantId??null,position:o.position,rotation:o.rotation,corner:!!o.corner})),layout:n})}catch{}return n},[yt,mt,h,st,Me,Z,xe,ot]),U=H(()=>{const e=nt?.height>0?nt.height:2.7,n=.1,o=.05,r=new Map;let a=1/0,i=-1/0,u=1/0,p=-1/0,E=0,A=!1;if(C.forEach((s,B)=>{const F=lt[B];if(!F||ue(s))return;const x=F.position||[0,0,0],G=st(s.productId,s),Q=h(s.productId),q=G?.full||G,oe=q?.height>0?q.height:Q?.height>0?Q.height*.0254:0,zt=(x[1]||0)+oe;if(zt>E&&(E=zt),(s.positionedAbove??s.positioned_above)!=null)return;const se=(x[1]||0)<=.01,Rt=-((Array.isArray(F.rotation)?F.rotation[1]:0)||0),re=G?.depth>0?G.depth:Q?.depth>0?Q.depth*.0254:.6,ae=G?.width>0?G.width:Q?.width>0?Q.width*.0254:.9,rt=Math.cos(Rt),at=Math.sin(Rt),Oe=G?.cx||0,Ae=G?.cz||0,De=x[0]+rt*Oe-at*Ae,Le=x[2]+at*Oe+rt*Ae,ke=(ae*Math.abs(rt)+re*Math.abs(at))/2,ze=(ae*Math.abs(at)+re*Math.abs(rt))/2,Re=De-ke,Ee=De+ke,qe=Le-ze,Ne=Le+ze,Xe=q?.width>0?q.width:ae,Ze=q?.depth>0?q.depth:re,He=x[0]+rt*(q?.cx||0)-at*(q?.cz||0),Ve=x[2]+at*(q?.cx||0)+rt*(q?.cz||0),je=(Xe*Math.abs(rt)+Ze*Math.abs(at))/2,Ue=(Xe*Math.abs(at)+Ze*Math.abs(rt))/2,gn=He-je,In=He+je,Sn=Ve-Ue,bn=Ve+Ue,Be=String((Math.round(Rt/(Math.PI/2))%4+4)%4),O=r.get(Be)||{heading:Rt,minX:1/0,maxX:-1/0,minZ:1/0,maxZ:-1/0,fMinX:1/0,fMaxX:-1/0,fMinZ:1/0,fMaxZ:-1/0,hasFloor:!1};O.minX=Math.min(O.minX,Re),O.maxX=Math.max(O.maxX,Ee),O.minZ=Math.min(O.minZ,qe),O.maxZ=Math.max(O.maxZ,Ne),se&&(O.fMinX=Math.min(O.fMinX,Re),O.fMaxX=Math.max(O.fMaxX,Ee),O.fMinZ=Math.min(O.fMinZ,qe),O.fMaxZ=Math.max(O.fMaxZ,Ne),O.hasFloor=!0),r.set(Be,O),a=Math.min(a,gn),i=Math.max(i,In),u=Math.min(u,Sn),p=Math.max(p,bn),A=!0}),!A)return null;const K=Math.max(e,E>0?E+.02:e),Pt=[...r.values()].map(s=>{const B=Math.sin(s.heading),F=Math.cos(s.heading),x=B,G=-F,Q=Math.abs(x)>Math.abs(G),q=s.hasFloor?s.fMinX:s.minX,oe=s.hasFloor?s.fMaxX:s.maxX,zt=s.hasFloor?s.fMinZ:s.minZ,se=s.hasFloor?s.fMaxZ:s.maxZ,Ge=Q?(x>0?oe:q)+(x>0?n/2:-n/2):(G>0?se:zt)+(G>0?n/2:-n/2);return{g:s,isSide:Q,plane:Ge}}),Lt=Pt.some(s=>s.g.hasFloor)?Pt.filter(s=>s.g.hasFloor):Pt,pn=Lt.filter(s=>s.isSide).map(s=>s.plane),hn=Lt.filter(s=>!s.isSide).map(s=>s.plane),Qt=[];for(const s of Lt){const{g:B}=s;if(s.isSide){let F=B.minZ,x=B.maxZ;for(const G of hn)F=Math.min(F,G),x=Math.max(x,G);Qt.push({cx:s.plane,cz:(F+x)/2,cy:K/2,length:x-F+o*2,thickness:n,height:K,rotY:Math.PI/2})}else{let F=B.minX,x=B.maxX;for(const G of pn)F=Math.min(F,G),x=Math.max(x,G);Qt.push({cx:(F+x)/2,cz:s.plane,cy:K/2,length:x-F+o*2,thickness:n,height:K,rotY:0})}}const kt=.4,Fe=i>a&&p>u;let Jt=a-kt,te=i+kt,ee=u-kt,ne=p+kt;for(const s of Lt){const B=Math.sin(s.g.heading),F=-Math.cos(s.g.heading);s.isSide?B<0?Jt=s.plane-n/2:te=s.plane+n/2:F<0?ee=s.plane-n/2:ne=s.plane+n/2}const fn=Fe?{cx:(Jt+te)/2,cz:(ee+ne)/2,w:te-Jt,d:ne-ee}:null,mn=Fe?{minX:a,maxX:i,minZ:u,maxZ:p,w:i-a,d:p-u,h:K,height:E>0?E:K}:null;return{segments:Qt,floor:fn,bbox:mn}},[C,lt,nt,st,h,ue]),on=Zt&&!!(U&&U.segments&&U.segments.length),sn=St&&!!(U&&U.bbox&&U.bbox.w>0),rn=(t,e)=>{const n=lt[e]||{position:[0,0,0],rotation:[0,0,0]},o=Ft.get(t.id);if(!o)return n;const r=n.position||[0,0,0],a=(Array.isArray(n.rotation)?n.rotation[1]:0)||0,i=Math.cos(a),u=Math.sin(a),p=o.offset||[0,0,0];return{position:[r[0]+(p[0]||0)*i+(p[2]||0)*u,r[1]+(p[1]||0),r[2]-(p[0]||0)*u+(p[2]||0)*i],rotation:[0,a+(o.rotDegY||0)*Math.PI/180,0]}},$=bt,vt=!!$,we=H(()=>{if(!$)return new Set;const t=h($.variantId)||h($.productId)||null,e=W.getState().products,n=new Set;for(const o of Object.values(g||{})){const r=h(o.variantId)||h(o.productId);(t?$e(t,r,e):(()=>{const i=new Set(($.compatibleGraphIds||[]).map(String)),u=r?.product_graph??r?.productGraph;return u!=null&&i.has(String(u))})())&&n.add(String(o.id))}return n},[$,g,h]),$t=J(()=>{y.getState().clearPendingSlotPlacement?.(),y.getState().clearPendingHostedProduct?.()},[]),Ce=J((t,e)=>{if(!e)return;const n=W.getState(),o=n.getProduct?.(e.variantId)||n.getProduct?.(e.productId),r=o?.productGraph??o?.product_graph??null,a=_.getState().productInstances?.[String(t)],i=o?.placementGroup??o?.placement_group??a?.placementGroup??null,u=Array.isArray(a?.position)?a.position:[0,0,0],p=a?.variantId??a?.productId??null,E=Number.isFinite(Number(a?.sequence))?Number(a.sequence):void 0;$t(),Nt({type:Xt.PRODUCT_ADD,productGraphId:r,variantId:e.variantId??e.productId,placementGroup:i,sequence:E,hostPlacementId:String(t),hostVariantId:p},A=>qt({productGraphId:A.productGraphId,variantId:A.variantId,placementGroup:A.placementGroup,position:u,sequence:A.sequence,hostPlacementId:A.hostPlacementId,hostVariantId:A.hostVariantId}).catch(()=>{}))},[$t]),Kt=J((t,e)=>{const n=W.getState(),o=n.getProduct?.(e.variantId)||n.getProduct?.(e.productId),r=o?.productGraph??o?.product_graph??null,a=o?.placementGroup??o?.placement_group??null,i=C[t-1]||C[t],u=Array.isArray(i?.position)?i.position:[0,0,0],p=C[t],E=p&&Number.isFinite(Number(p.sequence))?Number(p.sequence):void 0;Nt({type:Xt.PRODUCT_ADD,productGraphId:r,variantId:e.variantId??e.productId,placementGroup:a,sequence:E},A=>qt({productGraphId:A.productGraphId,variantId:A.variantId,placementGroup:A.placementGroup,position:u,sequence:A.sequence}).catch(()=>{}))},[C]);N(()=>{if(!Z||C.length>0)return;const t=Z;Ye(),Kt(0,t)},[Z,C.length,Kt]);const{gaps:an,onInsert:cn}=$n({systemId:d,count:C.length,positionOf:t=>lt[t]?.position||[0,0,0],insertAt:Kt}),_e=H(()=>{if(!Z)return[];const t=W.getState();return Dn(C,{candidate:Z,getProduct:e=>t.getProduct?.(e),getDims:st,config:tn(),layout:lt})},[Z,C,lt,st]),ln=J(t=>{const e=Ln(t,{candidate:Z});if(!e)return;const n=W.getState(),o=n.getProduct?.(e.variantId)||n.getProduct?.(e.productId),r=o?.productGraph??o?.product_graph??null,a=o?.placementGroup??o?.placement_group??null,i=e.transform?.position??t.position??[0,0,0],u=zn(e,t,C);Nt({type:Xt.PRODUCT_ADD,productGraphId:r,variantId:e.variantId??e.productId,placementGroup:a,anchor:e.anchor??null,sequence:u},p=>qt({productGraphId:p.productGraphId,variantId:p.variantId,placementGroup:p.placementGroup,position:i,sequence:p.sequence}).catch(()=>{})),Ye()},[Z,C]),{selectedInst:go,swapOrder:Io,panelActions:Te,priceInfo:dn}=xn(),un=wn()("selectionPanel");N(()=>{if(b==null)return;const t=g||{},e=String(b),n="__host";if(e.endsWith(n)){const o=e.slice(0,-n.length);if(t[o]||Object.values(t).some(r=>String(r?.id??r?.instanceId)===o))return}else if(t[b]||Object.values(t).some(o=>String(o?.instanceId??o?.id)===e))return;D?.()},[b,g,D]);const bo=gt(t=>t.placementPricing),yo=R(t=>t.getChannelPriceConfig);return dt(le,{children:[m(On,{onSeeded:I}),dt(Fn,{isMobile:T,camera:{position:[2.6,2.2,4],fov:45},controlsTarget:[0,.5,0],onPointerMissed:()=>D?.(),groundShadowCatcher:!0,overlay:dt(le,{children:[!vt&&Te&&un?m(S,{actions:Te,priceInfo:dn}):null,vt&&m("div",{className:"placement-mode-overlay",children:dt("div",{className:"placement-mode-overlay__content",children:[dt("span",{className:"placement-mode-overlay__text",children:["Click on a highlighted slot to place ",m("strong",{children:$?.name})]}),m("button",{type:"button",className:"placement-mode-overlay__cancel",onClick:$t,children:m("span",{className:"placement-mode-overlay__cancel-text",children:"Cancel"})})]})}),m(qn,{name:"overlay"}),tt&&m(et,{scene:!0,message:ut("loading.message","Loading your configurator\u2026"),detail:V,progress:v}),c&&m("div",{"aria-hidden":"true",style:{position:"absolute",inset:0,zIndex:30,cursor:"default"}})]}),children:[on&&m(Gn,{width:nt?.width,depth:nt?.depth,height:nt?.height??U?.bbox?.h??2.7,showCeiling:Ct?.ceiling===!0,segments:U?.segments||null,floor:U?.floor||null}),sn&&(()=>{const t=ie("SceneDimensions",Zn);return m(t,{bbox:U.bbox})})(),C.map((t,e)=>{const n=Ft.get(t.id),o=lt[e]||{position:[0,0,0],rotation:[0,0,0]};return o.hidden?null:dt("group",{children:[n&&m(ce,{instance:{id:n.id,instanceId:n.id,productId:n.hostVariantId,variantId:n.hostVariantId,position:o.position||[0,0,0],rotation:o.rotation||[0,0,0]},slotMaterials:{...pt,...j?.[n.hostedProductId]||{},...j?.[n.id]||{}},stateInstanceId:n.hostedProductId,onSelect:()=>_.getState().selectInstance(n.id),isSelected:String(b)===String(n.id),onMeasure:r=>jt(n.hostVariantId,r),footprintExcludeItem:Ut,hoverable:!0,focusable:!0},n.id),m(ce,{instance:{...t,...rn(t,e)},slotMaterials:{...pt,...j?.[t.id]||j?.[t.instanceId]||{}},onSelect:(r,a,i)=>{if(vt){we.has(String(t.id))&&Ce(t.id,$);return}_.getState().selectInstance(r,i??null)},isSelected:!vt&&String(b)===String(t.instanceId??t.id),onMeasure:r=>jt(t.productId,r,t.id),footprintExcludeItem:Ut,hoverable:!0,focusable:!0}),vt&&we.has(String(t.id))&&(()=>{const r=o.position||[0,0,0],a=st(mt[e]?.productId??t.productId,t),i=(Array.isArray(o.rotation)?o.rotation[1]:0)||0,u=Math.cos(i),p=Math.sin(i),E=a?.cx||0,A=a?.cz||0,K=a?.full?.height??a?.height,Pt=[r[0]+E*u+A*p,r[1]+(K>0?K/2:.45),r[2]-E*p+A*u];return m(lo,{position:Pt,onClick:()=>Ce(t.id,$)})})()]},t.id??t.instanceId??e)}),Tt.map((t,e)=>m(_n,{selected:b===t.id,disabled:!!t.locked,position:t.position||[0,0,0],rotationY:(Array.isArray(t.rotation)&&t.rotation[1]||0)*Math.PI/180,gizmoOffset:(()=>{const n=st(t.productId,t);return[n?.cx||0,0,n?.cz||0]})(),onCommit:({position:n,rotationY:o})=>{l(t.id,n),L(t.id,[0,o*180/Math.PI,0]),Kn({allowRevert:!0}).catch(()=>{})},children:m(ce,{instance:{...t,position:[0,0,0],rotation:[0,0,0]},slotMaterials:{...pt,...j?.[t.id]||j?.[t.instanceId]||{}},onMeasure:n=>jt(t.productId,n,t.id),footprintExcludeItem:Ut})},t.id??t.instanceId??`free-${e}`)),_e.length>0?m(An,{targets:_e,onPick:ln}):m(Tn,{gaps:an,onInsert:cn})]})]})}const en=new Set;function po(){eo();const T=R(c=>c.systemLayoutTemplate),S=R(c=>c.systemTheme),g=R(c=>c.systemThemeRecord);ro(S,g);const h=so(g)||(S?String(S).trim().toLowerCase():null);let f=T;try{const c=new URLSearchParams(window.location.search);c.has("template")?f=c.get("template"):c.has("theme")&&(f=c.get("theme"))}catch{}f=f||T||h||null;const D=no();D&&(f=D),!D&&!T&&f&&f===h&&!to(f)&&!/^theme\d+$/.test(f)&&!en.has(f)&&en.add(f),oo(f);const b=Jn(f);return dt(le,{children:[m(b,{Scene:uo,template:f}),m(Nn,{}),m(Xn,{})]})}export{uo as SharedConfiguratorScene,po as default};
|
package/dist/9526094bb7.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import S from"./8f60e5059a.js";import w from"./872c4302e0.js";import L,{deriveSceneFeatures as b}from"./be337ddda5.js";import D from"./9c6c598569.js";import N from"./d94df858ea.js";import{extractHostedProductsFromProducts as W,placeHostedProductsFromList as j}from"./37addc7fb3.js";import{isWallCornerProduct as R}from"./5e4f2349ff.js";import{FEATURE_ROLES as u,FEATURE_TYPES as x,findFeatureByType as Y,pickToggleOption as $,roleSelectionsToFeatureIds as U}from"./f8cb80a93c.js";import{normalizeLayoutConfig as z}from"./bb719febc6.js";function k(a,y,O){if(!a)return{color:null,materialId:null};if(a.startsWith("#"))return{color:a,materialId:null};const f=y[a];if(!f)return{color:null,materialId:null};const o=f.value||null;return{color:(o?O[o]:null)?.color||f.color||f.color_hex||null,materialId:o}}function
|
|
1
|
+
import S from"./8f60e5059a.js";import w from"./872c4302e0.js";import L,{deriveSceneFeatures as b}from"./be337ddda5.js";import D from"./9c6c598569.js";import N from"./d94df858ea.js";import{extractHostedProductsFromProducts as W,placeHostedProductsFromList as j}from"./37addc7fb3.js";import{isWallCornerProduct as R}from"./5e4f2349ff.js";import{FEATURE_ROLES as u,FEATURE_TYPES as x,findFeatureByType as Y,pickToggleOption as $,roleSelectionsToFeatureIds as U}from"./f8cb80a93c.js";import{normalizeLayoutConfig as z}from"./bb719febc6.js";import{isAddFeature as M}from"./8c27edda0f.js";function k(a,y,O){if(!a)return{color:null,materialId:null};if(a.startsWith("#"))return{color:a,materialId:null};const f=y[a];if(!f)return{color:null,materialId:null};const o=f.value||null;return{color:(o?O[o]:null)?.color||f.color||f.color_hex||null,materialId:o}}function G(a,y,O,f){const o={finishes:{},materials:{},styles:{},handleTypes:{},hardwareFinishes:{}},d=s=>O[s]?.value??s,p=(s,l,m,{fillOnly:H=!1}={})=>{const E=(e,i)=>{i==null||i===""||H&&o[e][s]!=null||(o[e][s]=i)},_=l||{};if(_[u.PIECE_FINISH]){const{color:e,materialId:i}=k(_[u.PIECE_FINISH],O,f);E("finishes",e),E("materials",i)}m&&E("materials",m),_[u.DOOR_STYLE]&&E("styles",d(_[u.DOOR_STYLE])),_[u.HANDLE_TYPE]&&E("handleTypes",d(_[u.HANDLE_TYPE])),_[u.HARDWARE_FINISH]&&E("hardwareFinishes",d(_[u.HARDWARE_FINISH]))},t="island",c={corner:0,[t]:0},r=(s,l)=>{const m=s.type||"base";return m==="corner"?`corner-${c.corner++}`:m===t?`${t}-part-${c[t]++}`:`${m}-${l}`},n=a.map((s,l)=>r(s,l));a.forEach((s,l)=>p(n[l],s.selections,s.materialId));const g=c[t],h=y?.freePieceConfig;if(h&&g>0){p(t,h.selections,null,{fillOnly:!0});for(let s=0;s<g;s++){const l=`${t}-part-${s}`;for(const m of Object.keys(o))o[m][l]==null&&o[m][t]!=null&&(o[m][l]=o[m][t])}}else if(g>0){const s=a.find(l=>(l.type||"base")===t);s&&p(t,s.selections,s.materialId)}const F=S.getState(),P={},T={finishes:"hostFinishes",materials:"hostMaterials",styles:"hostStyles",handleTypes:"hostHandleTypes",hardwareFinishes:"hostHardwareFinishes"};for(const[s,l]of Object.entries(T))Object.keys(o[s]).length>0&&(P[l]={...F[l],...o[s]});const C={};return a.forEach((s,l)=>{s.product_id&&(C[n[l]]=s.product_id)}),{stylingUpdate:P,overridesToRestore:C}}function V(a,y,O){const f=S.getState(),o={finishes:{},materials:{},styles:{},handleTypes:{},hardwareFinishes:{}},d=c=>y[c]?.value??c;a.forEach((c,r)=>{const n=`wcorner-${r}`,g=c.selections||{};if(g[u.PIECE_FINISH]){const{color:h,materialId:F}=k(g[u.PIECE_FINISH],y,O);h&&(o.finishes[n]=h),F&&(o.materials[n]=F)}c.materialId&&(o.materials[n]=c.materialId),g[u.DOOR_STYLE]&&(o.styles[n]=d(g[u.DOOR_STYLE])),g[u.HANDLE_TYPE]&&(o.handleTypes[n]=d(g[u.HANDLE_TYPE])),g[u.HARDWARE_FINISH]&&(o.hardwareFinishes[n]=d(g[u.HARDWARE_FINISH]))});const p={},t={finishes:"hostFinishes",materials:"hostMaterials",styles:"hostStyles",handleTypes:"hostHandleTypes",hardwareFinishes:"hostHardwareFinishes"};for(const[c,r]of Object.entries(t))Object.keys(o[c]).length>0&&(p[r]={...f[r],...o[c]});Object.keys(p).length>0&&S.setState(p)}function B(a,y,O,f){const o=()=>S.getState().clearSceneLoading(),d=()=>{y.length>0?setTimeout(()=>{j(y)},400):o()};if(a.length>0){let p=0;const t=()=>{if(p>=a.length){V(a,O,f),setTimeout(()=>{const{pieceConfigSnapshot:r}=S.getState();r&&S.getState().setInitialPieceConfigSnapshot(r)},400),setTimeout(d,300);return}const c=a[p];S.setState({pendingWallCornerAdd:{productId:c.product_id}}),p++,setTimeout(t,300)};t()}else setTimeout(d,300)}function ie(a,y){const O=w.getState().options,f=L.getState().sceneConfigurations,o=L.getState().originalSceneConfigurations,d=N.getState().setSceneSelection,p=D.getState().initializeScene,t=S.getState();D.getState().resetCameraToDefault(),t.clearHostedProducts(),t.clearHostWidths(),t.clearHostDoorTypes(),t.clearHostProductOverrides(),t.clearHostFinishes(),t.clearHostStyles(),t.clearHostHandleTypes(),t.clearHostHardwareFinishes(),t.clearDisabledWalls(),t.clearSelectedFeature(),S.setState({_snapshotOverridesOnLoadComplete:!0,isLayoutLoading:!0,pieceOverlapDetected:!1,tallWallOverlapDetected:!1,wallPieceOverlapDetected:!1,wallPieceHostedOverlapDetected:!1,overlappingPieces:[],islandOverlapDetected:!1,skipWallPieceOverlapCheck:!0,cornerOverflowDetected:!1,wallOverflowDetected:!1,wallOverflowRecenterMode:!1,wallOverflowSuppressUntil:Date.now()+1500}),t.setFreePiecePosition(null),t.setFreePieceRotation(null),y.forEach(e=>{e.type!=="layout_change"&&(e.default_option_id&&!M(e)?d(e.id,e.default_option_id):d(e.id,null))});const c=()=>(S.setState({isSceneLoading:!1,sceneLoadingMessage:null,isLayoutLoading:!1}),!1),r=O[a];if(!r)return c();let n=null;for(const[e,i]of Object.entries(f)){const I=i?.scene_option_id??i?.sceneOptionId;if(I!=null&&String(I)===String(a)){n=e;break}}if(!n){const e=[r.value,r.valueText,r.value_text,a].filter(i=>i!=null).map(String);for(const i of e)if(f[i]){n=i;break}}if(!n){let e=r.value??r.valueText??r.value_text;if(!e&&Array.isArray(r.rules))for(const i of r.rules){const I=i?.effectParams??i?.effect_params??{},v=I.layout??I.value??I.variant_key;if(v){e=v;break}}if(!e&&r.name&&(e=String(r.name).trim().toLowerCase().replace(/[\s-]+/g,"_")),e){const i=`scene_config_${e}_internal`;f[i]&&(n=i)}}if(!n||!f[n])return c();const g=o[n]||f[n],h=z(g,b(g),U),F=h?.products||[],P=h?.freePieceConfig?.product_id||[],T=[...F,...P],{pendingHostedProducts:C}=W(T),s=T.filter(R),l=T.filter(e=>!R(e)),m=l.some(e=>e.type==="island")||P.length>0,H=Y(b(h),x.FREE_PIECE);if(H){const e=$(H,O,{on:m,tier:h?.freePieceConfig?.tier??null});e!=null&&d(H.id,e)}if(h?.freePieceConfig){const e=h.freePieceConfig;e.tier&&t.setFreePieceTier(e.tier),e.width&&t.setFreePieceWidthOption(e.width)}for(const[e,i]of Object.entries(h?.default_scene_selections||{}))i!=null&&d(e,i);const E=o[n];E&&L.setState(e=>({sceneConfigurations:{...e.sceneConfigurations,[n]:E}})),p(n);const _=C.length>0||s.length>0||F.some(e=>e.selections&&Object.keys(e.selections).length>0||e.materialId);setTimeout(_?()=>{const e=w.getState().options,i=w.getState().materials,{stylingUpdate:I,overridesToRestore:v}=G(l,h,e,i);if(Object.keys(I).length>0&&S.setState(I),Object.keys(v).length>0){const A=S.getState().hostProductOverrides;S.setState({hostProductOverrides:{...A,...v}})}B(s,C,e,i)}:()=>{S.getState().clearSceneLoading()},600)}export{ie as executeLayoutChange,k as resolveFinish,G as restorePieceStyling};
|
package/dist/98f3644031.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Fragment as fe,jsx as e,jsxs as
|
|
1
|
+
import{Fragment as fe,jsx as e,jsxs as b}from"react/jsx-runtime";import{Suspense as U,useEffect as j,useRef as x,useSyncExternalStore as W}from"react";import{getSceneAccessGranted as A,subscribeSceneAccess as _}from"./87f511c4a8.js";import*as F from"three";import{Canvas as Q,useThree as L}from"@react-three/fiber";import{setSceneContext as T,disposeSceneExtras as q}from"./95a44ebec2.js";import{PerspectiveCamera as J,OrbitControls as K}from"@react-three/drei";import X from"./be337ddda5.js";import O from"./8f60e5059a.js";import"./9c6c598569.js";import Y from"./d4378d9afa.js";import Z from"./00a41227ff.js";import $ from"./28a9d58274.js";import ee from"./8db8655f21.js";import{rememberRenderer as te}from"./b59b0dde17.js";import oe from"./14c83bc57a.js";import{applyEnvironmentToRenderer as re,RENDERER_DEFAULTS as G}from"./4e7d0a0d4a.js";import{setR3FState as z}from"./e1cd279733.js";import{computeTopDownView as ne,computeFitView as ie,ORTHO_FOV as B}from"./85af90fade.js";const V=(t,o)=>t?o:Math.max(o,1e5);function ae({defaultPosition:t,fov:o,controlsRef:a,controlsTarget:p,maxDistance:c}){const{scene:f,size:m,invalidate:h}=L(),u=O(r=>r.is3D)!==!1,g=x(),w=x(u),D=x(!1);return j(()=>{const r=g.current,n=a?.current;if(!r)return;const R=w.current;w.current=u;const C=!D.current;D.current=!0;const y=m.width/Math.max(m.height,1);if(n&&(n.maxDistance=V(u,c)),!u){const i=ne({scene:f,aspect:y,fov:B});if(!i)return;r.fov=B,r.position.set(i.position[0],i.position[1],i.position[2]),r.updateProjectionMatrix(),n&&(n.target.set(i.target[0],i.target[1],i.target[2]),n.update()),h?.();return}if(R&&!C){r.updateProjectionMatrix(),h?.();return}r.fov=o;const S=R?null:ie({scene:f,aspect:y,fov:o}),v=S?.position||t,M=S?.target||p;r.position.set(v[0],v[1],v[2]),r.updateProjectionMatrix(),n&&(n.target.set(M[0],M[1],M[2]),n.update()),h?.()},[u,f,m.width,m.height]),e(J,{ref:g,makeDefault:!0,position:t,fov:o})}function se(){const{gl:t,scene:o,camera:a,invalidate:p}=L(),c=W(_,A,()=>!1);return j(()=>(z({gl:t,scene:o,camera:a}),c?T({THREE:F,scene:o,camera:a,renderer:t,invalidate:p}):T(null),()=>{q(),T(null),z(null)}),[t,o,a,c]),null}function ce({background:t="#f4f4f5"}){return b(fe,{children:[e("color",{attach:"background",args:[t]}),e("ambientLight",{intensity:.7}),e("directionalLight",{position:[4,6,4],intensity:1.1,castShadow:!0,"shadow-mapSize-width":1024,"shadow-mapSize-height":1024})]})}function ue({env:t}){return!!t&&Object.keys(t).length>0?null:b("mesh",{rotation:[-Math.PI/2,0,0],position:[0,.001,0],receiveShadow:!0,children:[e("circleGeometry",{args:[21,64]}),e("shadowMaterial",{transparent:!0,opacity:.28,color:"#000000"})]})}function pe({children:t,overlay:o,isMobile:a=!1,is3D:p,camera:c={position:[2.6,2.2,4],fov:45},controlsTarget:f=[0,.5,0],renderCamera:m=!0,renderControls:h=!0,minDistance:u=1.2,maxDistance:g=14,orbitProps:w,renderFallbackLighting:D=!0,fallbackBackground:r="#f4f4f5",groundShadowCatcher:n=!1,fallback:R=null,dpr:C=[1,2],shadows:y=!0,frameloop:S,canvasStyle:v,onPointerMissed:M,onCreated:i}){const k=x(),P=X(s=>s.systemEnvironment),H=O(s=>s.is3D),I=O(s=>s.captureMode)===!0,E=p??H!==!1,l=P&&Object.keys(P).length>0?P:null,N=V(E,g);return b("div",{className:"scene-canvas",style:{position:"relative",width:"100%",height:"100%"},children:[b(Q,{shadows:y,dpr:C,...S?{frameloop:S}:{},style:{width:"100%",height:"100%",...v||{}},onPointerMissed:M,onCreated:s=>{const{gl:d}=s;te(d),d.outputColorSpace=F.SRGBColorSpace,d.toneMapping=G.toneMapping,d.toneMappingExposure=G.exposure,d.shadowMap.type=G.shadowMapType,l&&re(l,d),A()&&i?.(s)},children:[l&&e(Y,{env:l,isMobile:a,is3D:E,reducedQuality:!!a,captureMode:I}),!l&&D&&e(ce,{background:r}),n&&E&&!I&&e(ue,{env:l}),m&&e(ae,{defaultPosition:c.position,fov:c.fov,controlsRef:k,controlsTarget:f,maxDistance:g}),e(U,{fallback:R,children:t}),h&&e(K,{ref:k,makeDefault:!0,target:f,enablePan:!0,minDistance:u,maxDistance:N,maxPolarAngle:Math.PI/2.05,enableRotate:E,...w||{}}),e(se,{}),e(oe,{controlsRef:k}),e(Z,{})]}),o,e($,{}),e(ee,{})]})}export{pe as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const o=t=>t?.productGraph??t?.product_graph??null,m=t=>{const n=t?.hostVariants??t?.host_variants;return Array.isArray(n)?n:[]},b=t=>t?.hostVariantId??t?.host_variant_id??null;function p(t,n,a){if(!t||!n)return!1;const h=new Set((t.compatibleSlots??t.compatible_slots??[]).map(String)),e=o(n);if(e==null||!h.has(String(e)))return!1;if(!n.corner)return!0;const c=String(n.id),f=a instanceof Map?Array.from(a.values()):Object.values(a||{}),S=r=>(a instanceof Map?a.get(r)??a.get(String(r)):a?.[r]??a?.[String(r)])??null,l=[t],u=o(t);for(const r of f)r&&r!==t&&u!=null&&String(o(r))===String(u)&&l.push(r);const g=r=>{const i=b(r);if(i==null)return!1;if(String(i)===c)return!0;const s=S(i);return!!s?.corner&&String(o(s))===String(o(n))&&s.width!=null&&n.width!=null&&Number(s.width)===Number(n.width)};return l.some(r=>m(r).some(g))}export{p as isCompatibleSlot};
|
package/dist/a0f71d0bf5.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{addProduct as q,removeProduct as N,moveProduct as K,transformProduct as Y,changeProductVariant as z,placeHostedProduct as W,applyLayoutPreset as J,setRoomDimensions as X,restoreConfiguration as Z,clearProductOption as $,selectOptionForProduct as ee,selectOptionForScene as te,clearSceneOption as oe}from"./a77b15c0d6.js";import{selectProduct as re,deselect as ne,getSelectedProduct as se,moveSelectedLeft as ae,moveSelectedRight as ie,duplicateSelected as le,deleteSelected as ce,resetScene as de,undo as ue,redo as me,canUndo as pe,canRedo as ge,clearHistory as fe,toggleDimensions as Se,toggleWalls as Pe,toggleFloor as he,toggleCeiling as ve,resetCamera as ye,setCameraPreset as Ie,focusOnObject as be,setRoomFootprint as Ce,toggleView as Te,isView3D as Ae,view2D as Oe,view3D as xe,toggleSidebar as Re,setSidebarTab as Ee,closeModal as Me,notify as Le,setGuiVisible as Be,openQuote as De,setUIRegions as He,hideUI as Fe,showUI as we,showInfo as Ue,setSceneLoading as Ge,clearSceneLoading as Qe,setSceneSelection as Ve,clearSceneSelection as je,removeSceneInstance as _e,setSceneInstanceVariant as ke,setPendingSlotPlacement as T,clearPendingSlotPlacement as A,clearDeferredHostedProductPlacement as qe,setHostedProductFeatureForSlot as O,updateHostedProductSlotForProduct as Ne,addHostedProduct as Ke,removeHostedProduct as Ye,clearHostedProducts as ze,placeHostedProductAtHost as We}from"./2cafe3274b.js";import{registerPlacementStrategy as Je,listPlacementStrategies as Xe,hasPlacementStrategy as Ze,setPlacementStrategy as $e,getPlacementStrategy as et,clearPlacementStrategy as tt,getPlacementStrategyOverride as ot,resolvePlacementStrategyConfig as rt,setPlacementStrategyConfig as nt,placementKit as st,STRATEGIES as at,DEFAULT_STRATEGY_ID as it,PLACEMENT_TYPES as lt,getPlacementType as ct,currentConfiguratorKey as dt,armPlacement as x,disarmPlacement as R,getPendingPlacement as E,armHostedProduct as M,disarmHostedProduct as L,computeTargets as ut,resolveTarget as mt,registerTargetRenderer as pt}from"./a77b15c0d6.js";import{registerComponentRenderer as gt,registerMaterialResolver as ft,registerInteraction as St,onSceneReady as Pt,readSceneBounds as ht,onSceneSettled as vt,listComponentRenderers as yt,listMaterialResolvers as It,listInteractions as bt,hideComponent as Ct,showComponent as Tt,transformComponent as At,setComponentMaterial as Ot,clearComponentOverrides as xt,listComponents as Rt,setToggles as Et,getToggles as Mt,registerAssetResolver as Lt,resolveAssetUrl as Bt,registerButton as Dt}from"./a77b15c0d6.js";import{registerComponent as Ht,resolveComponent as Ft,hasComponent as wt,listComponentOverrides as Ut,registerLayout as Gt,resolveLayout as Qt,hasLayout as Vt,listLayouts as jt,setLayout as _t,activeLayoutKey as kt,registerRoute as qt,resolveRoute as Nt,hasRoute as Kt,listRoutes as Yt,registerSlot as zt,listSlots as Wt,hasSlot as Jt,registerAction as Xt,runAction as Zt,listActions as $t,actions as eo,registerIcon as to,resolveIcon as oo,listIcons as ro,hasIcon as no,registerModal as so,listModals as ao,setLabels as io,getLabel as lo,getLabels as co,setLocale as uo,getLocale as mo,setCurrency as po,getCurrency as go,isRtl as fo,formatMoney as So,formatNumber as Po,applyTheme as ho,applyThemeById as vo,validateTheme as yo,checkThemeContrast as Io,contrastRatio as bo,applyCustomCss as Co,applyFontUrl as To}from"./a77b15c0d6.js";import{openModal as Ao}from"./09c4973968.js";import{useComponentRegistry as Oo}from"./882bc739c8.js";import{getLastEvaluation as xo,getEvaluationHistory as Ro,isEvaluationPending as Eo,subscribeEvaluation as Mo,explainOption as Lo}from"./9f474b5d1a.js";import{selectOption as Bo}from"./dbd5ba1d07.js";import P from"./872c4302e0.js";function h(e,o,a){let i=a;if(!i){const l=P.getState().features||{};i=l[e]??l[String(e)]??null}return Bo(e,o,i??{id:e})}const c=e=>String(e??"").trim().toLowerCase();function Do(e,o){const a=P.getState(),i=a.features||{},l=a.options||{},m=t=>i[t]??i[String(t)]??null,d=t=>Object.values(i).filter(r=>c(r?.name)===c(t)),p=Object.entries(l).filter(([,t])=>t&&typeof t=="object").map(([t,r])=>r.id==null?{...r,id:t}:r),b=t=>{const r=Array.isArray(t?.options)?t.options.map(n=>{if(n&&typeof n=="object")return n;const u=l[n]??l[String(n)];return u&&typeof u=="object"?u.id==null?{...u,id:n}:u:n==null?null:{id:n}}):[],s=p.filter(n=>String(n?.optionSetId??n?.option_set_id??"")===String(t?.id??""));return[...r,...s].filter(Boolean)},k=(t,r)=>t.find(s=>String(s?.id)===String(r))??t.find(s=>c(s?.name)===c(r))??null;if(o!=null){const t=m(e)?[m(e)]:d(e);if(!t.length||t.length>1)return null;const r=t[0],s=k(b(r),o);return s?{optionSetId:r.id,optionId:s.id,optionSet:r}:null}const C=p.filter(t=>String(t?.id)===String(e)),S=C.length?C:p.filter(t=>c(t?.name)===c(e)||c(t?.label)===c(e));if(!S.length){const t=m(e)??d(e)[0]??null;if(t){const r=b(t).map(s=>s?.name??s?.id).filter(Boolean);return null}return p.length,null}if(S.length>1)return null;const f=S[0];let g=f.optionSetId??f.option_set_id??null;if(g==null){const t=Object.entries(i).find(([r,s])=>Array.isArray(s?.options)&&s.options.some(n=>{const u=n&&typeof n=="object"?n.id:n;return String(u)===String(f.id)})&&r);t&&(g=t[1]?.id??t[0])}return g==null?null:{optionSetId:g,optionId:f.id,optionSet:m(g)}}function Ho(e,o,a){const l=P.getState().features||{};if(o!=null&&(l[e]!=null||l[String(e)]!=null))return h(e,o,a);const d=Do(e,o);return d?h(d.optionSetId,d.optionId,a??d.optionSet):!1}import{use as B,runIntent as v,INTENTS as y,onEvent as D,onceEvent as H,offEvent as F,on as w,registerEffectHandler as U,onRequest as Fo,onResponse as wo,setTransport as Uo,hasTransport as Go,readBom as Qo,readQuote as I,readGeneratedAssets as Vo,getUIRegions as jo,UI_REGIONS as _o,collectGenericBom as ko,setMetadata as qo,readMetadata as No,serializeMetadata as Ko,restoreMetadata as Yo,registerQuoteTemplate as zo,hasQuoteTemplate as Wo,setQuoteTemplate as Jo,listQuoteTemplates as Xo,activeQuoteTemplateKey as Zo,listQuotePdfBuilders as $o,buildQuotePdfBlob as er,saveQuotePdf as tr,registerQuotePdf as or,registerQuotePdfEndpoint as rr,hasQuotePdf as nr,generateSilo as sr,generateLifestyle as ar,generateArAsset as ir,generateBomPdf as lr,generateAll as cr,generationStatus as dr,METADATA_LIMITS as ur}from"./a77b15c0d6.js";import{bootConfigurator as G,mountConfigurator as Q,loadConfigurator as V,configureSDK as j,getVersion as _,saveProject as mr,loadProject as pr,restoreProject as gr,buildShareUrl as fr,parseShareToken as Sr,getShareToken as Pr,fetchEmbedBoot as hr,setEmbedSlug as vr,getEmbedSlug as yr,setEmbedContext as Ir,trackEmbed as br,setIframeAllowedOrigins as Cr,getIframeAllowedOrigins as Tr,getApiBaseUrl as Ar,setApiKey as Or,setChannelId as xr,getChannelId as Rr,setEmbedded as Er,getEffectiveSelections as Mr,recomputePrice as Lr,getProduct as Br,getProductName as Dr,getPlacedProductName as Hr,getProductVariants as Fr,listProducts as wr,getOptionSet as Ur,getOption as Gr,listOptionSets as Qr,listSceneOptionSets as Vr,listProductOptionSets as jr,listOptions as _r,listMaterials as kr,getMaterial as qr,buildDesignPdf as Nr,captureDesignViews as Kr,generateArForCurrentScene as Yr,checkCopilotAvailability as zr,getCopilotRuntimeUrl as Wr,setCopilotApiUrl as Jr}from"./a77b15c0d6.js";const Xr={add:(e={})=>v({type:y.PRODUCT_ADD,productGraphId:e.productGraphId,variantId:e.variantId,placementGroup:e.placementGroup??null,sequence:e.sequence??null},o=>q({...e,productGraphId:o.productGraphId,variantId:o.variantId,placementGroup:o.placementGroup??e.placementGroup,sequence:o.sequence??e.sequence})),remove:(e,o)=>v({type:y.PRODUCT_REMOVE,placementId:e},a=>N(a.placementId,o)),move:(e={})=>v({type:y.PRODUCT_MOVE,placementId:e.placementId,sequence:e.sequence??null,direction:null},o=>K({...e,placementId:o.placementId,sequence:o.sequence??e.sequence})),transform:Y,changeVariant:z,addHosted:W,select:re,deselect:ne,getSelected:se,moveLeft:ae,moveRight:ie,duplicate:le,deleteSelected:ce,anchor:x,unanchor:R,getAnchored:E,anchorHosted:M,unanchorHosted:L,arm:x,disarm:R,getArmed:E,armHosted:M,disarmHosted:L,hosted:{add:Ke,remove:Ye,clear:ze,placeAtHost:We}},Zr={select:Ho,selectByIds:h,selectForProduct:ee,clearForProduct:$,selectForScene:te,clearForScene:oe,effective:Mr},$r={applyPreset:J,setRoomDimensions:X,setRoomFootprint:Ce,restoreState:Z,reset:de,recomputePrice:Lr,camera:{reset:ye,preset:Ie,focusOn:be},view:{toggle:Te,is3D:Ae,to2D:Oe,to3D:xe},toggle:{dimensions:Se,walls:Pe,floor:he,ceiling:ve},onReady:Pt,readBounds:ht,onSettled:vt,registerRenderer:gt,registerMaterial:ft,registerInteraction:St,listRenderers:yt,listMaterials:It,listInteractions:bt,capture:Kr,buildPdf:Nr,generateAr:Yr,setSelection:Ve,clearSelection:je,removeInstance:_e,setInstanceVariant:ke,anchorSlot:T,unanchorSlot:A,armSlot:T,disarmSlot:A,clearDeferredHostedPlacement:qe,setHostedOptionForSlot:O,setHostedFeatureForSlot:O,moveHostedToSlot:Ne,hideComponent:Ct,showComponent:Tt,transformComponent:At,setComponentMaterial:Ot,clearComponentOverrides:xt,listComponents:Rt},en={registerComponent:Ht,resolveComponent:Ft,hasComponent:wt,listComponentOverrides:Ut,useComponentRegistry:Oo,registerLayout:Gt,resolveLayout:Qt,hasLayout:Vt,listLayouts:jt,activeLayout:kt,setLayout:_t,registerRoute:qt,resolveRoute:Nt,hasRoute:Kt,listRoutes:Yt,setToggles:Et,getToggles:Mt,registerAssetResolver:Lt,resolveAssetUrl:Bt,registerButton:Dt,registerSlot:zt,listSlots:Wt,hasSlot:Jt,registerAction:Xt,runAction:Zt,listActions:$t,actions:eo,registerIcon:to,resolveIcon:oo,listIcons:ro,hasIcon:no,registerModal:so,openModal:Ao,closeModal:Me,listModals:ao,setLabels:io,getLabel:lo,getLabels:co,setLocale:uo,getLocale:mo,setCurrency:po,getCurrency:go,isRtl:fo,formatMoney:So,formatNumber:Po,applyTheme:ho,applyThemeById:vo,validateTheme:yo,checkThemeContrast:Io,contrastRatio:bo,applyCustomCss:Co,applyFontUrl:To,hide:Fe,show:we,setVisible:He,visible:jo,regions:_o,sidebar:{toggle:Re,setTab:Ee},notify:Le,setSceneOverlaysVisible:Be,showInfo:Ue,setLoading:Ge,clearLoading:Qe},tn={read:I,registerTemplate:zo,hasTemplate:Wo,setTemplate:Jo,listTemplates:Xo,activeTemplate:Zo,listPdfBuilders:$o,open:De,images:Vo,generateSilo:sr,generateLifestyle:ar,generateAr:ir,generateBomPdf:lr,generateAll:cr,generationStatus:dr,toPdf:(e={})=>er(I(),e),savePdf:(e={})=>tr(I(),e),registerPdf:or,registerPdfEndpoint:rr,hasPdf:nr,setDocument:jn,hasDocument:_n,resetDocument:kn},on={registerStrategy:Je,listStrategies:Xe,hasStrategy:Ze,setStrategy:$e,strategyOverride:ot,config:rt,setConfig:nt,kit:st,getStrategy:et,clearStrategy:tt,computeTargets:ut,resolveTarget:mt,registerTargetRenderer:pt,getType:ct,currentKey:dt,STRATEGIES:at,DEFAULT_STRATEGY_ID:it,TYPES:lt},rn={readBom:Qo,collectBom:ko,setMetadata:qo,readMetadata:No,serializeMetadata:Ko,restoreMetadata:Yo,LIMITS:ur},nn={onRequest:Fo,onResponse:wo,setTransport:Uo,hasTransport:Go},sn={save:mr,load:pr,restore:gr,shareUrl:fr,parseShareToken:Sr,getShareToken:Pr},an={undo:ue,redo:me,canUndo:pe,canRedo:ge,clear:fe},ln={fetchBoot:hr,setSlug:vr,getSlug:yr,setContext:Ir,track:br,setEmbedded:Er,setAllowedOrigins:Cr,getAllowedOrigins:Tr},cn={isAvailable:zr,runtimeUrl:Wr,setApiUrl:Jr},As={quota:ds},dn={getProduct:Br,getProductName:Dr,getProductVariants:Fr,getPlacedProductName:Hr,listProducts:wr,listOptionSets:Qr,listSceneOptionSets:Vr,listProductOptionSets:jr,listOptions:_r,listMaterials:kr,getMaterial:qr,getOptionSet:Ur,getOption:Gr},Os={last:xo,history:Ro,pending:Eo,subscribe:Mo,explainOption:Lo},un={getApiBaseUrl:Ar,setChannelId:xr,getChannelId:Rr,setApiKey:Or};import{default as ks}from"./2990ba64d6.js";import{useComponentRegistry as Ns}from"./882bc739c8.js";import{default as Ys}from"./60d697292c.js";import{default as Ws}from"./6ba86aa3b8.js";import{default as Xs}from"./811b403d43.js";import{useSelection as $s,useProducts as ea,usePrice as ta}from"./16a399703e.js";import{default as ra}from"./d0f9681634.js";import{useBootStatus as sa,useSystem as aa}from"./066fc9aa40.js";import{useEvaluation as la}from"./9f474b5d1a.js";import{useLabel as da,useLabels as ua,useFormatters as ma}from"./28d887bf8a.js";import{useProduct as ga,useCatalogMaps as fa}from"./1458417bdb.js";import{useSceneState as Pa}from"./16a399703e.js";import{useUIState as va,useOptionGating as ya,useHostedProductState as Ia,useUIRegion as ba,useUIRegions as Ca}from"./9840b9ce12.js";import{useSystemConfig as Aa}from"./6855e6a3b1.js";import{useIcon as xa}from"./09c4973968.js";import{default as Ea}from"./921bf270dd.js";import{usePlacementInteraction as La}from"./4b8958aa4c.js";import{default as Da}from"./f11a45a150.js";import{useCopilotAvailable as Fa}from"./672404d987.js";import mn from"./3fb3ab6757.js";import pn from"./7206ce49c6.js";import gn from"./0f7c8345a8.js";import fn from"./82a8a4bc35.js";import Sn from"./e379e0039b.js";import{Sidebar as Pn,SaveProjectButton as hn,GenerateAssetsButton as vn,LiveStatusPanel as yn,ChatBar as In,NotificationContainer as bn,EvaluatingOverlay as Cn,Modals as Tn,SaveProjectModal as An,ExportModal as On,ARModal as xn,GeneratedAssetsModal as Rn,Header as En,SceneToolbar as Mn,SidebarFrame as Ln,OptionSidebar as Bn,LoadingScreen as Dn,ConfirmDialog as Hn,Modal as Fn,Button as wn,ARViewer as Un,SceneRoom as Gn,SceneDimensions as Qn,CameraAnimator as Vn}from"./64e9020b49.js";import{setQuoteDocument as jn,hasQuoteDocument as _n,resetQuoteDocument as kn}from"./12b8165d6d.js";import{SlotHost as qn}from"./73f7d65985.js";import{ModalHost as Nn}from"./09c4973968.js";import{OptionThumbnail as Kn,FinishThumbnail as Yn,LayoutThumbnail as zn,ColorSwatch as Wn,WidthSlider as Jn,FrameSizeButton as Xn,HostedProductThumbnail as Zn,ProductFeaturePickers as $n,AddProductToggle as es}from"./c12c112c6f.js";import{ProductInstance as ts,ComponentMesh as os,SceneStage as rs,SceneEnvironment as ns,SelectionBox as ss,FreeMovable as as,PlacementGaps as is,SelectionActionPanel as ls}from"./8a3a57c008.js";import cs from"./205827c5c8.js";import{refreshAiQuota as ds}from"./2f8cc8b292.js";const us={Sidebar:Pn,SidebarFrame:Ln,OptionSetSection:mn,OptionThumbnail:Kn,FinishThumbnail:Yn,LayoutThumbnail:zn,ColorSwatch:Wn,WidthSlider:Jn,FrameSizeButton:Xn,HostedProductThumbnail:Zn,ProductFeaturePickers:$n,AddProductToggle:es,QuoteRenders:gn,QuoteQr:Sn,ConfigurationSummary:fn,SaveProjectButton:hn,GenerateAssetsButton:vn,LiveStatusPanel:yn,ChatBar:In,NotificationContainer:bn,EvaluatingOverlay:Cn,Header:En,SceneToolbar:Mn,OptionSidebar:Bn,LoadingScreen:Dn,Modals:Tn,SaveProjectModal:An,ExportModal:On,ARModal:xn,GeneratedAssetsModal:Rn,Modal:Fn,Button:wn,ConfirmDialog:Hn,ARViewer:Un,SceneRoom:Gn,SceneDimensions:Qn,CameraAnimator:Vn,Popover:pn,SlotHost:qn,ModalHost:Nn,ProductInstance:ts,ComponentMesh:os,SceneStage:rs,SceneEnvironment:ns,SelectionBox:ss,FreeMovable:as,PlacementGaps:is,PlacementTargets:cs,SelectionActionPanel:ls},ms={products:Xr,options:Zr,scene:$r,ui:en,placement:on,commerce:rn,http:nn,project:sn,history:an,embed:ln,config:un,copilot:cn,catalog:dn,parts:us,quote:tn,boot:G,mount:Q,load:V,configure:j,version:_,on:D,once:H,off:F,onBackendEvent:w,registerEffectHandler:U,addMiddleware:B};var Vs=ms;export{B as addMiddleware,As as ai,G as boot,dn as catalog,rn as commerce,un as config,j as configure,cn as copilot,Vs as default,ln as embed,Os as evaluation,an as history,nn as http,V as load,Q as mount,F as off,D as on,w as onBackendEvent,H as once,Zr as options,us as parts,on as placement,Xr as products,sn as project,tn as quote,U as registerEffectHandler,$r as scene,en as ui,Da as useAppVersion,sa as useBootStatus,fa as useCatalogMaps,Ns as useComponentRegistry,Fa as useCopilotAvailable,la as useEvaluation,ma as useFormatters,Ea as useGenerateAssets,Ia as useHostedProductState,xa as useIcon,da as useLabel,ua as useLabels,ya as useOptionGating,ks as useOptionSets,La as usePlacementInteraction,ta as usePrice,ga as useProduct,Ys as useProductOrder,Ws as useProductOverrides,ea as useProducts,Pa as useSceneState,$s as useSelection,Xs as useSelectionActions,aa as useSystem,Aa as useSystemConfig,ra as useToolbar,ba as useUIRegion,Ca as useUIRegions,va as useUIState,_ as version};
|
|
1
|
+
import{addProduct as q,removeProduct as N,moveProduct as K,transformProduct as Y,changeProductVariant as z,changeHostVariantForProduct as W,placeHostedProduct as J,applyLayoutPreset as X,setRoomDimensions as Z,restoreConfiguration as $,clearProductOption as ee,selectOptionForProduct as te,selectOptionForScene as oe,clearSceneOption as re}from"./a77b15c0d6.js";import{selectProduct as ne,deselect as se,getSelectedProduct as ae,moveSelectedLeft as ie,moveSelectedRight as le,duplicateSelected as ce,deleteSelected as de,resetScene as ue,undo as me,redo as pe,canUndo as ge,canRedo as fe,clearHistory as Se,toggleDimensions as Pe,toggleWalls as he,toggleFloor as ve,toggleCeiling as ye,resetCamera as Ie,setCameraPreset as be,focusOnObject as Ce,setRoomFootprint as Te,toggleView as Ae,isView3D as Oe,view2D as xe,view3D as Re,toggleSidebar as Ee,setSidebarTab as Me,closeModal as He,notify as Le,setGuiVisible as Be,openQuote as De,setUIRegions as Fe,hideUI as we,showUI as Ue,showInfo as Ge,setSceneLoading as Qe,clearSceneLoading as Ve,setSceneSelection as je,clearSceneSelection as _e,removeSceneInstance as ke,setSceneInstanceVariant as qe,setPendingSlotPlacement as T,clearPendingSlotPlacement as A,clearDeferredHostedProductPlacement as Ne,setHostedProductFeatureForSlot as O,updateHostedProductSlotForProduct as Ke,addHostedProduct as Ye,removeHostedProduct as ze,clearHostedProducts as We,placeHostedProductAtHost as Je}from"./2cafe3274b.js";import{registerPlacementStrategy as Xe,listPlacementStrategies as Ze,hasPlacementStrategy as $e,setPlacementStrategy as et,getPlacementStrategy as tt,clearPlacementStrategy as ot,getPlacementStrategyOverride as rt,resolvePlacementStrategyConfig as nt,setPlacementStrategyConfig as st,placementKit as at,STRATEGIES as it,DEFAULT_STRATEGY_ID as lt,PLACEMENT_TYPES as ct,getPlacementType as dt,currentConfiguratorKey as ut,armPlacement as x,disarmPlacement as R,getPendingPlacement as E,armHostedProduct as M,disarmHostedProduct as H,computeTargets as mt,resolveTarget as pt,registerTargetRenderer as gt}from"./a77b15c0d6.js";import{registerComponentRenderer as ft,registerMaterialResolver as St,registerInteraction as Pt,onSceneReady as ht,readSceneBounds as vt,onSceneSettled as yt,listComponentRenderers as It,listMaterialResolvers as bt,listInteractions as Ct,hideComponent as Tt,showComponent as At,transformComponent as Ot,setComponentMaterial as xt,clearComponentOverrides as Rt,listComponents as Et,setToggles as Mt,getToggles as Ht,registerAssetResolver as Lt,resolveAssetUrl as Bt,registerButton as Dt}from"./a77b15c0d6.js";import{registerComponent as Ft,resolveComponent as wt,hasComponent as Ut,listComponentOverrides as Gt,registerLayout as Qt,resolveLayout as Vt,hasLayout as jt,listLayouts as _t,setLayout as kt,activeLayoutKey as qt,registerRoute as Nt,resolveRoute as Kt,hasRoute as Yt,listRoutes as zt,registerSlot as Wt,listSlots as Jt,hasSlot as Xt,registerAction as Zt,runAction as $t,listActions as eo,actions as to,registerIcon as oo,resolveIcon as ro,listIcons as no,hasIcon as so,registerModal as ao,listModals as io,setLabels as lo,getLabel as co,getLabels as uo,setLocale as mo,getLocale as po,setCurrency as go,getCurrency as fo,isRtl as So,formatMoney as Po,formatNumber as ho,applyTheme as vo,applyThemeById as yo,validateTheme as Io,checkThemeContrast as bo,contrastRatio as Co,applyCustomCss as To,applyFontUrl as Ao}from"./a77b15c0d6.js";import{openModal as Oo}from"./09c4973968.js";import{useComponentRegistry as xo}from"./882bc739c8.js";import{getLastEvaluation as Ro,getEvaluationHistory as Eo,isEvaluationPending as Mo,subscribeEvaluation as Ho,explainOption as Lo}from"./9f474b5d1a.js";import{selectOption as Bo}from"./dbd5ba1d07.js";import P from"./872c4302e0.js";function h(e,o,a){let i=a;if(!i){const l=P.getState().features||{};i=l[e]??l[String(e)]??null}return Bo(e,o,i??{id:e})}const c=e=>String(e??"").trim().toLowerCase();function Do(e,o){const a=P.getState(),i=a.features||{},l=a.options||{},m=t=>i[t]??i[String(t)]??null,d=t=>Object.values(i).filter(r=>c(r?.name)===c(t)),p=Object.entries(l).filter(([,t])=>t&&typeof t=="object").map(([t,r])=>r.id==null?{...r,id:t}:r),b=t=>{const r=Array.isArray(t?.options)?t.options.map(n=>{if(n&&typeof n=="object")return n;const u=l[n]??l[String(n)];return u&&typeof u=="object"?u.id==null?{...u,id:n}:u:n==null?null:{id:n}}):[],s=p.filter(n=>String(n?.optionSetId??n?.option_set_id??"")===String(t?.id??""));return[...r,...s].filter(Boolean)},k=(t,r)=>t.find(s=>String(s?.id)===String(r))??t.find(s=>c(s?.name)===c(r))??null;if(o!=null){const t=m(e)?[m(e)]:d(e);if(!t.length||t.length>1)return null;const r=t[0],s=k(b(r),o);return s?{optionSetId:r.id,optionId:s.id,optionSet:r}:null}const C=p.filter(t=>String(t?.id)===String(e)),S=C.length?C:p.filter(t=>c(t?.name)===c(e)||c(t?.label)===c(e));if(!S.length){const t=m(e)??d(e)[0]??null;if(t){const r=b(t).map(s=>s?.name??s?.id).filter(Boolean);return null}return p.length,null}if(S.length>1)return null;const f=S[0];let g=f.optionSetId??f.option_set_id??null;if(g==null){const t=Object.entries(i).find(([r,s])=>Array.isArray(s?.options)&&s.options.some(n=>{const u=n&&typeof n=="object"?n.id:n;return String(u)===String(f.id)})&&r);t&&(g=t[1]?.id??t[0])}return g==null?null:{optionSetId:g,optionId:f.id,optionSet:m(g)}}function Fo(e,o,a){const l=P.getState().features||{};if(o!=null&&(l[e]!=null||l[String(e)]!=null))return h(e,o,a);const d=Do(e,o);return d?h(d.optionSetId,d.optionId,a??d.optionSet):!1}import{use as L,runIntent as v,INTENTS as y,onEvent as B,onceEvent as D,offEvent as F,on as w,registerEffectHandler as U,onRequest as wo,onResponse as Uo,setTransport as Go,hasTransport as Qo,readBom as Vo,readQuote as I,readGeneratedAssets as jo,getUIRegions as _o,UI_REGIONS as ko,collectGenericBom as qo,setMetadata as No,readMetadata as Ko,serializeMetadata as Yo,restoreMetadata as zo,registerQuoteTemplate as Wo,hasQuoteTemplate as Jo,setQuoteTemplate as Xo,listQuoteTemplates as Zo,activeQuoteTemplateKey as $o,listQuotePdfBuilders as er,buildQuotePdfBlob as tr,saveQuotePdf as or,registerQuotePdf as rr,registerQuotePdfEndpoint as nr,hasQuotePdf as sr,generateSilo as ar,generateLifestyle as ir,generateArAsset as lr,generateBomPdf as cr,generateAll as dr,generationStatus as ur,METADATA_LIMITS as mr}from"./a77b15c0d6.js";import{bootConfigurator as G,mountConfigurator as Q,loadConfigurator as V,configureSDK as j,getVersion as _,saveProject as pr,loadProject as gr,restoreProject as fr,buildShareUrl as Sr,parseShareToken as Pr,getShareToken as hr,fetchEmbedBoot as vr,setEmbedSlug as yr,getEmbedSlug as Ir,setEmbedContext as br,trackEmbed as Cr,setIframeAllowedOrigins as Tr,getIframeAllowedOrigins as Ar,getApiBaseUrl as Or,setApiKey as xr,setChannelId as Rr,getChannelId as Er,setEmbedded as Mr,getEffectiveSelections as Hr,recomputePrice as Lr,getProduct as Br,getProductName as Dr,getPlacedProductName as Fr,getProductVariants as wr,listProducts as Ur,getOptionSet as Gr,getOption as Qr,listOptionSets as Vr,listSceneOptionSets as jr,listProductOptionSets as _r,listOptions as kr,listMaterials as qr,getMaterial as Nr,buildDesignPdf as Kr,captureDesignViews as Yr,generateArForCurrentScene as zr,checkCopilotAvailability as Wr,getCopilotRuntimeUrl as Jr,setCopilotApiUrl as Xr}from"./a77b15c0d6.js";const Zr={add:(e={})=>v({type:y.PRODUCT_ADD,productGraphId:e.productGraphId,variantId:e.variantId,placementGroup:e.placementGroup??null,sequence:e.sequence??null},o=>q({...e,productGraphId:o.productGraphId,variantId:o.variantId,placementGroup:o.placementGroup??e.placementGroup,sequence:o.sequence??e.sequence})),remove:(e,o)=>v({type:y.PRODUCT_REMOVE,placementId:e},a=>N(a.placementId,o)),move:(e={})=>v({type:y.PRODUCT_MOVE,placementId:e.placementId,sequence:e.sequence??null,direction:null},o=>K({...e,placementId:o.placementId,sequence:o.sequence??e.sequence})),transform:Y,changeVariant:z,changeHost:W,addHosted:J,select:ne,deselect:se,getSelected:ae,moveLeft:ie,moveRight:le,duplicate:ce,deleteSelected:de,anchor:x,unanchor:R,getAnchored:E,anchorHosted:M,unanchorHosted:H,arm:x,disarm:R,getArmed:E,armHosted:M,disarmHosted:H,hosted:{add:Ye,remove:ze,clear:We,placeAtHost:Je}},$r={select:Fo,selectByIds:h,selectForProduct:te,clearForProduct:ee,selectForScene:oe,clearForScene:re,effective:Hr},en={applyPreset:X,setRoomDimensions:Z,setRoomFootprint:Te,restoreState:$,reset:ue,recomputePrice:Lr,camera:{reset:Ie,preset:be,focusOn:Ce},view:{toggle:Ae,is3D:Oe,to2D:xe,to3D:Re},toggle:{dimensions:Pe,walls:he,floor:ve,ceiling:ye},onReady:ht,readBounds:vt,onSettled:yt,registerRenderer:ft,registerMaterial:St,registerInteraction:Pt,listRenderers:It,listMaterials:bt,listInteractions:Ct,capture:Yr,buildPdf:Kr,generateAr:zr,setSelection:je,clearSelection:_e,removeInstance:ke,setInstanceVariant:qe,anchorSlot:T,unanchorSlot:A,armSlot:T,disarmSlot:A,clearDeferredHostedPlacement:Ne,setHostedOptionForSlot:O,setHostedFeatureForSlot:O,moveHostedToSlot:Ke,hideComponent:Tt,showComponent:At,transformComponent:Ot,setComponentMaterial:xt,clearComponentOverrides:Rt,listComponents:Et},tn={registerComponent:Ft,resolveComponent:wt,hasComponent:Ut,listComponentOverrides:Gt,useComponentRegistry:xo,registerLayout:Qt,resolveLayout:Vt,hasLayout:jt,listLayouts:_t,activeLayout:qt,setLayout:kt,registerRoute:Nt,resolveRoute:Kt,hasRoute:Yt,listRoutes:zt,setToggles:Mt,getToggles:Ht,registerAssetResolver:Lt,resolveAssetUrl:Bt,registerButton:Dt,registerSlot:Wt,listSlots:Jt,hasSlot:Xt,registerAction:Zt,runAction:$t,listActions:eo,actions:to,registerIcon:oo,resolveIcon:ro,listIcons:no,hasIcon:so,registerModal:ao,openModal:Oo,closeModal:He,listModals:io,setLabels:lo,getLabel:co,getLabels:uo,setLocale:mo,getLocale:po,setCurrency:go,getCurrency:fo,isRtl:So,formatMoney:Po,formatNumber:ho,applyTheme:vo,applyThemeById:yo,validateTheme:Io,checkThemeContrast:bo,contrastRatio:Co,applyCustomCss:To,applyFontUrl:Ao,hide:we,show:Ue,setVisible:Fe,visible:_o,regions:ko,sidebar:{toggle:Ee,setTab:Me},notify:Le,setSceneOverlaysVisible:Be,showInfo:Ge,setLoading:Qe,clearLoading:Ve},on={read:I,registerTemplate:Wo,hasTemplate:Jo,setTemplate:Xo,listTemplates:Zo,activeTemplate:$o,listPdfBuilders:er,open:De,images:jo,generateSilo:ar,generateLifestyle:ir,generateAr:lr,generateBomPdf:cr,generateAll:dr,generationStatus:ur,toPdf:(e={})=>tr(I(),e),savePdf:(e={})=>or(I(),e),registerPdf:rr,registerPdfEndpoint:nr,hasPdf:sr,setDocument:_n,hasDocument:kn,resetDocument:qn},rn={registerStrategy:Xe,listStrategies:Ze,hasStrategy:$e,setStrategy:et,strategyOverride:rt,config:nt,setConfig:st,kit:at,getStrategy:tt,clearStrategy:ot,computeTargets:mt,resolveTarget:pt,registerTargetRenderer:gt,getType:dt,currentKey:ut,STRATEGIES:it,DEFAULT_STRATEGY_ID:lt,TYPES:ct},nn={readBom:Vo,collectBom:qo,setMetadata:No,readMetadata:Ko,serializeMetadata:Yo,restoreMetadata:zo,LIMITS:mr},sn={onRequest:wo,onResponse:Uo,setTransport:Go,hasTransport:Qo},an={save:pr,load:gr,restore:fr,shareUrl:Sr,parseShareToken:Pr,getShareToken:hr},ln={undo:me,redo:pe,canUndo:ge,canRedo:fe,clear:Se},cn={fetchBoot:vr,setSlug:yr,getSlug:Ir,setContext:br,track:Cr,setEmbedded:Mr,setAllowedOrigins:Tr,getAllowedOrigins:Ar},dn={isAvailable:Wr,runtimeUrl:Jr,setApiUrl:Xr},Os={quota:us},un={getProduct:Br,getProductName:Dr,getProductVariants:wr,getPlacedProductName:Fr,listProducts:Ur,listOptionSets:Vr,listSceneOptionSets:jr,listProductOptionSets:_r,listOptions:kr,listMaterials:qr,getMaterial:Nr,getOptionSet:Gr,getOption:Qr},xs={last:Ro,history:Eo,pending:Mo,subscribe:Ho,explainOption:Lo},mn={getApiBaseUrl:Or,setChannelId:Rr,getChannelId:Er,setApiKey:xr};import{default as qs}from"./2990ba64d6.js";import{useComponentRegistry as Ks}from"./882bc739c8.js";import{default as zs}from"./60d697292c.js";import{default as Js}from"./6ba86aa3b8.js";import{default as Zs}from"./811b403d43.js";import{useSelection as ea,useProducts as ta,usePrice as oa}from"./16a399703e.js";import{default as na}from"./d0f9681634.js";import{useBootStatus as aa,useSystem as ia}from"./066fc9aa40.js";import{useEvaluation as ca}from"./9f474b5d1a.js";import{useLabel as ua,useLabels as ma,useFormatters as pa}from"./28d887bf8a.js";import{useProduct as fa,useCatalogMaps as Sa}from"./1458417bdb.js";import{useSceneState as ha}from"./16a399703e.js";import{useUIState as ya,useOptionGating as Ia,useHostedProductState as ba,useUIRegion as Ca,useUIRegions as Ta}from"./9840b9ce12.js";import{useSystemConfig as Oa}from"./6855e6a3b1.js";import{useIcon as Ra}from"./09c4973968.js";import{default as Ma}from"./921bf270dd.js";import{usePlacementInteraction as La}from"./4b8958aa4c.js";import{default as Da}from"./f11a45a150.js";import{useCopilotAvailable as wa}from"./672404d987.js";import pn from"./3fb3ab6757.js";import gn from"./7206ce49c6.js";import fn from"./0f7c8345a8.js";import Sn from"./82a8a4bc35.js";import Pn from"./e379e0039b.js";import{Sidebar as hn,SaveProjectButton as vn,GenerateAssetsButton as yn,LiveStatusPanel as In,ChatBar as bn,NotificationContainer as Cn,EvaluatingOverlay as Tn,Modals as An,SaveProjectModal as On,ExportModal as xn,ARModal as Rn,GeneratedAssetsModal as En,Header as Mn,SceneToolbar as Hn,SidebarFrame as Ln,OptionSidebar as Bn,LoadingScreen as Dn,ConfirmDialog as Fn,Modal as wn,Button as Un,ARViewer as Gn,SceneRoom as Qn,SceneDimensions as Vn,CameraAnimator as jn}from"./64e9020b49.js";import{setQuoteDocument as _n,hasQuoteDocument as kn,resetQuoteDocument as qn}from"./12b8165d6d.js";import{SlotHost as Nn}from"./73f7d65985.js";import{ModalHost as Kn}from"./09c4973968.js";import{OptionThumbnail as Yn,FinishThumbnail as zn,LayoutThumbnail as Wn,ColorSwatch as Jn,WidthSlider as Xn,FrameSizeButton as Zn,HostedProductThumbnail as $n,ProductFeaturePickers as es,AddProductToggle as ts}from"./c12c112c6f.js";import{ProductInstance as os,ComponentMesh as rs,SceneStage as ns,SceneEnvironment as ss,SelectionBox as as,FreeMovable as is,PlacementGaps as ls,SelectionActionPanel as cs}from"./8a3a57c008.js";import ds from"./205827c5c8.js";import{refreshAiQuota as us}from"./2f8cc8b292.js";const ms={Sidebar:hn,SidebarFrame:Ln,OptionSetSection:pn,OptionThumbnail:Yn,FinishThumbnail:zn,LayoutThumbnail:Wn,ColorSwatch:Jn,WidthSlider:Xn,FrameSizeButton:Zn,HostedProductThumbnail:$n,ProductFeaturePickers:es,AddProductToggle:ts,QuoteRenders:fn,QuoteQr:Pn,ConfigurationSummary:Sn,SaveProjectButton:vn,GenerateAssetsButton:yn,LiveStatusPanel:In,ChatBar:bn,NotificationContainer:Cn,EvaluatingOverlay:Tn,Header:Mn,SceneToolbar:Hn,OptionSidebar:Bn,LoadingScreen:Dn,Modals:An,SaveProjectModal:On,ExportModal:xn,ARModal:Rn,GeneratedAssetsModal:En,Modal:wn,Button:Un,ConfirmDialog:Fn,ARViewer:Gn,SceneRoom:Qn,SceneDimensions:Vn,CameraAnimator:jn,Popover:gn,SlotHost:Nn,ModalHost:Kn,ProductInstance:os,ComponentMesh:rs,SceneStage:ns,SceneEnvironment:ss,SelectionBox:as,FreeMovable:is,PlacementGaps:ls,PlacementTargets:ds,SelectionActionPanel:cs},ps={products:Zr,options:$r,scene:en,ui:tn,placement:rn,commerce:nn,http:sn,project:an,history:ln,embed:cn,config:mn,copilot:dn,catalog:un,parts:ms,quote:on,boot:G,mount:Q,load:V,configure:j,version:_,on:B,once:D,off:F,onBackendEvent:w,registerEffectHandler:U,addMiddleware:L};var js=ps;export{L as addMiddleware,Os as ai,G as boot,un as catalog,nn as commerce,mn as config,j as configure,dn as copilot,js as default,cn as embed,xs as evaluation,ln as history,sn as http,V as load,Q as mount,F as off,B as on,w as onBackendEvent,D as once,$r as options,ms as parts,rn as placement,Zr as products,an as project,on as quote,U as registerEffectHandler,en as scene,tn as ui,Da as useAppVersion,aa as useBootStatus,Sa as useCatalogMaps,Ks as useComponentRegistry,wa as useCopilotAvailable,ca as useEvaluation,pa as useFormatters,Ma as useGenerateAssets,ba as useHostedProductState,Ra as useIcon,ua as useLabel,ma as useLabels,Ia as useOptionGating,qs as useOptionSets,La as usePlacementInteraction,oa as usePrice,fa as useProduct,zs as useProductOrder,Js as useProductOverrides,ta as useProducts,ha as useSceneState,ea as useSelection,Zs as useSelectionActions,ia as useSystem,Oa as useSystemConfig,na as useToolbar,Ca as useUIRegion,Ta as useUIRegions,ya as useUIState,_ as version};
|
package/dist/a493e9aa8f.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const E=.0254,L=.9,P=.95,O=Math.PI/2,D=1,A=t=>t*180/Math.PI,F=t=>t*Math.PI/180;function l(t,r={}){const
|
|
1
|
+
const E=.0254,L=.9,P=.95,O=Math.PI/2,D=1,A=t=>t*180/Math.PI,F=t=>t*Math.PI/180;function l(t,r={}){const c=t?.productId??t?.variantId??t,e=r.getDims?.(c,t&&typeof t=="object"?t:void 0),o=r.getProduct?.(c),n=typeof o?.width=="number"&&o.width>0?o.width*.0254:.9,h=typeof o?.depth=="number"&&o.depth>0?o.depth*.0254:.95;return{width:e?.width>0?e.width:n,depth:e?.depth>0?e.depth:h,cx:e?.cx||0,cz:e?.cz||0}}function u(t){return{hx:Math.cos(t),hz:Math.sin(t),fx:-Math.sin(t)*D,fz:Math.cos(t)*D}}function N(t,r){const c=(r?.[0]??0)-(t?.[0]??0),e=(r?.[2]??0)-(t?.[2]??0);return Math.hypot(c,e)<1e-6?null:Math.atan2(e,c)}const I=t=>!!(t?.corner??t?.isCorner);function y(t,r={},c={}){const e=typeof c.turn=="number"?c.turn:O,o=r.openSlots&&r.candidate?l(r.candidate,r).width:0;let n=0,h=0,i=0;const d=[];for(const a of t||[]){if(o){const w=u(n);h+=w.hx*o,i+=w.hz*o}const{width:s,depth:p,cx:f,cz:g}=l(a,r),{hx:x,hz:M,fx:z,fz:_}=u(n),m=I(a);d.push({position:[h+x*(s/2)+z*(p/2)-(x*f+z*g),0,i+M*(s/2)+_*(p/2)-(M*f+_*g)],rotation:[0,-n,0]}),h+=x*s,i+=M*s,m&&(n+=e,h+=Math.cos(n)*p,i+=Math.sin(n)*p)}return d}function T(t,r,c={}){return Array.isArray(t)?t.map((e,o)=>{const n=e?.position||[0,0,0],h=-(e?.rotation?.[1]??0),{hx:i,hz:d}=u(h),a=l(r?.[o],c).width/2;return{heading:h,trailing:[n[0]-i*a,n[1]??0,n[2]-d*a],leading:[n[0]+i*a,n[1]??0,n[2]+d*a]}}):[]}function U(t,r,c={},e=0){const o=T(t,r,c);if(!o.length)return[];const n=e/2,h=o.map((s,p)=>{const{hx:f,hz:g}=u(s.heading);return{index:p,heading:s.heading,position:[s.trailing[0]-f*n,s.trailing[1],s.trailing[2]-g*n]}}),i=o[o.length-1],{hx:d,hz:a}=u(i.heading);return h.push({index:o.length,heading:i.heading,position:[i.leading[0]+d*n,i.leading[1],i.leading[2]+a*n]}),h}var W={dimsOf:l,axesFor:u,headingOf:N,isCorner:I,chain:y,edgesOf:T,gapCentres:U,toDegrees:A,toRadians:F};export{D as FRONT_SIGN,O as TURN,u as axesFor,y as chain,W as default,l as dimsOf,T as edgesOf,U as gapCentres,N as headingOf,I as isCorner,A as toDegrees,F as toRadians};
|
package/dist/a77b15c0d6.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import S from"./be337ddda5.js";import v from"./9c6c598569.js";import C from"./872c4302e0.js";import A from"./8f60e5059a.js";import L from"./1fac915f8b.js";import I from"./d94df858ea.js";import{dispatch as h,setRefetchCatalogHandler as U,setFocusProvider as F,setRejectionHandler as $,setEvaluationStateHandler as q}from"./776277593f.js";import{coalescedDispatch as _}from"./4e1db1e3b0.js";import{dispatchEvents as Q,dispatchCustomEffects as G}from"./970313b92b.js";import{emitEvent as x,EVENTS as P}from"./2e366d7386.js";import{setConfigState as d,setInitial as Y,resetConfigState as z}from"./817d930a49.js";import{buildCanonicalState as m,applyResolvedToScene as k,applyRemovedPlacements as N,applyAddedPlacements as V,applyWarnings as J,applyMessages as w,applyWallMountedPlacements as X,applyPresetPieceTrims as Z,applyInitialSelections as ee,getHostedProductSpawnSelections as te,applyResolvedPieceAdds as oe,hydrateProductInstancesFromState as H,syncOwnedInstanceVariants as re,applyOwnedTransforms as ne}from"./bcd44b4040.js";import{applyBackendPricing as j}from"./67f6338a4a.js";import{fetchInitialConfiguration as ae}from"./fbd844f2d1.js";import*as p from"./3c916f744f.js";import{resolveReplaceTarget as se}from"./4d7a0d1897.js";import{authHeaders as le,isAuthFailure as ce,reportAuthFailure as ie}from"./431a2d8618.js";import{assertLicensed as ue}from"./fe235d7160.js";import{setApiKey as dt,setChannelId as mt,getChannelId as pt,setEmbedSlug as ft,getEmbedSlug as gt,setShareToken as St,getShareToken as yt}from"./431a2d8618.js";import{isReadOnlyCredential as xt,onReadOnlyChange as Pt}from"./431a2d8618.js";import{setTokenProvider as Ct,clearSessionToken as It,getSessionScope as Tt}from"./33fa2c8ca2.js";import{getApiBaseUrl as de}from"./8ade32d067.js";async function me(){const e=S.getState().systemId;try{const t=`/api/v1/systems/${e}/`;await ue(t);const r=await fetch(`${de()}${t}`,{cache:"no-store",headers:{...le(t)}});ce(r)&&await ie(r,{url:t,method:"GET"});const o=await r.json(),n=o?.catalogVersion??o?.catalog_version??null;return n!=null&&S.setState({catalogVersion:n}),{catalogVersion:n}}catch{return{catalogVersion:S.getState().catalogVersion}}}let O=0;function M(e){O=Math.max(0,O+(e?1:-1));try{A.setState({isEvaluating:O>0})}catch{}}function W(e){const t=e?.uiToggles??e?.ui_toggles??null;if(!(!t||typeof t!="object"))try{C.getState().mergeSystemUiToggles(t)}catch{}}function pe(e){const t=e?.placementBoundsExclude??e?.placement_bounds_exclude??e?.state?.placementBoundsExclude??e?.state?.placement_bounds_exclude??e?.system?.placementBoundsExclude??e?.system?.placement_bounds_exclude??null,r=t?.componentIds??t?.component_ids??null,o=Array.isArray(r)?r.map(n=>String(n)):[];try{C.setState({placementBoundsExcludeIds:o})}catch{}}async function fe({onRefetchCatalog:e}={}){U(e||me),F(he),$(t=>{try{A.getState().showWarning?.(B(t))}catch{}}),q(M),ge(),d(m())}let T=null,R=null;function ge(){if(T){try{T()}catch{}T=null}T=v.subscribe(e=>`${e.selectedInstanceId??""}|${e.selectedComponentId??""}`,()=>{R&&clearTimeout(R),R=setTimeout(()=>{ye()},120)})}function Se(){if(R&&(clearTimeout(R),R=null),T){try{T()}catch{}T=null}}async function ye(){let e=null;try{e=v.getState().selectedInstanceId}catch{}try{if(A.getState().isLayoutLoading)return null}catch{}d(m());let t=null;try{t=await _(p.noop())}catch{return null}return g(t)}function he(){const e=v.getState(),t=e.selectedInstanceId;if(t==null)return{};if(String(t).endsWith("__host")){const a=String(t).replace(/__host$/,""),s=(e.productInstances||{})[a]||null,l=C.getState(),c=s?l.getProduct?.(s.variantId??s.productId):null,i=c?.hostVariants??c?.host_variants,u=Array.isArray(i)?i.find(b=>b?.isDefault??b?.is_default)??i[0]:null,f=u?.hostVariantId??u?.host_variant_id??null,y={placementId:String(t)};return f!=null&&(y.variantId=f),y.componentId=e.selectedComponentId??null,y}const r=(e.productInstances||{})[String(t)]||null,o=r?.variantId??r?.productId??null,n={placementId:String(t)};return o!=null&&(n.variantId=o),n.componentId=e.selectedComponentId??null,n}async function xe(e,t,r,o){const n=e&&typeof e=="object"?e:{placementId:e,optionSetId:t,optionId:r,...o||{}},{placementId:a,optionSetId:s,optionId:l,optimistic:c,rollback:i}=n;if(a==null||s==null||l==null)return null;try{if(v.getState().productInstances?.[String(a)]?.locked)return A.getState().showWarning?.("This item is locked and can\u2019t be changed."),null}catch{}d(m());let u=null;try{u=await _(p.selectOption(a,s,l),{optimistic:c,rollback:i})}catch{return null}return g(u)}async function We(e){if(e==null)return null;const{osId:t,assignments:r}=te(),o=r.find(s=>String(s.instanceId)===String(e));if(t==null||!o)return null;d(m({excludeHostedProductInstanceId:e}));const n=Number(t)||t;let a=null;try{a=await h(p.selectOption(o.pieceId,n,o.optionId))}catch{return null}return g(a)}async function Ke(e,t,r){const o=e&&typeof e=="object"?e:{optionSetId:e,optionId:t,...r||{}},{optionSetId:n,optionId:a,optimistic:s,rollback:l}=o;if(n==null||a==null)return null;const c=I.getState(),i=c.sceneSelections?.[n];c.setSceneSelection?.(n,a),d(m());let u=null;try{u=await _(p.selectSystemOption(n,a),{optimistic:s,rollback:l})}catch{return I.getState().setSceneSelection?.(n,i),null}return u&&u.rejected&&I.getState().setSceneSelection?.(n,i),g(u)}async function $e({optionSetId:e,optionId:t,overrides:r={}}={}){if(e==null||t==null)return null;const o=C.getState().options||{},n=o[t]||o[String(t)];if(!n)return null;const a=n.value??n.valueText??n.value_text,s=C.getState().products||{},l=a!=null?s[a]||s[String(a)]:null;if(!l&&r.productGraphId==null)return null;const c=r.productGraphId??l?.productGraph??l?.product_graph??l?.productGraphId??null,i=r.placementGroup??l?.placementGroup??l?.placement_group??null,u=r.variantId??a,f=r.replacePlacementId!==void 0?r.replacePlacementId:se({placementGroup:i});return ve({productGraphId:c,variantId:u,placementGroup:i,position:r.position,replace:f!=null,replacePlacementId:f})}async function qe(e,t,r){const o=e&&typeof e=="object"?e:{placementId:e,variantId:t,...r||{}},{placementId:n,variantId:a,optimistic:s,rollback:l}=o;if(n==null||a==null)return null;d(m());let c=null;try{c=await _(p.changeVariant(n,a),{optimistic:s,rollback:l})}catch{return null}return g(c)}function K(){let e=null,t=null;try{e=S.getState().systemId??null}catch{}try{const r=v.getState(),o=S.getState();t=r.activeSceneConfigId||o.defaultPresetId||Object.keys(o.sceneConfigurations||{})[0]||null}catch{}return e==null?null:`${e}|${t??""}`}let E=null;const D=new Set;async function Ye({force:e=!1}={}){const t=K();if(!e&&t!=null&&D.has(t))return null;if(E)return E;E=Pe(),M(!0);try{const r=await E;t!=null&&D.add(t);const o=K();return o!=null&&D.add(o),r}finally{E=null,M(!1)}}async function Pe(){const e=S.getState().systemId;if(e==null)return null;const t=v.getState().activeSceneConfigId??null;let r=null;try{r=await ae({systemId:e,presetId:t})}catch{return null}if(W(r?.system),pe(r),!r?.state)return null;Y(r);try{ee(r.state)}catch{}try{w(r.messages)}catch{}try{w(r.customDiagnostics)}catch{}try{Q(r.events)}catch{}try{G(r.customEffects)}catch{}try{const o=r.state.sceneId??r.state.scene_id;o!=null&&v.getState().setActiveSceneId?.(o)}catch{}try{Z(r.removedPlacements)}catch{}try{N(r.removedPlacements)}catch{}try{X(r.state)}catch{}try{V(r.addedPlacements,r.state)}catch{}try{H(r.state)}catch{}try{k(r.state)}catch{}try{ne(r.state)}catch{}try{j(r.pricing)}catch{}try{I.getState().markSceneSelectionsSettled?.()}catch{}try{x(P.READY,{systemId:r?.state?.systemId??null})}catch{}return r}function B(e){const r=(Array.isArray(e?.errors)?e.errors:[]).map(n=>typeof n=="string"?n:n?.message??n?.detail??null).filter(Boolean),o=[...new Set(r)];return o.length?o.join(" "):"That change isn\u2019t allowed by the current design rules \u2014 reverted."}function ze(e){const t=A.getState();if(t.isLayoutLoading||t._snapshotOverridesOnLoadComplete){try{t.showWarning?.(B(e))}catch{}return}try{t.showError?.(B(e))}catch{}if((L.getState().past||[]).length>0)try{L.getState().undo()}catch{}}async function Je(){try{d(m())}catch{}return null}function g(e){if(W(e?.system),e&&e.applied&&e.resolvedState&&(k(e.resolvedState),N(e.removedPlacements),V(e.addedPlacements,e.resolvedState),oe(e.resolvedState),H(e.resolvedState),re(e.resolvedState),J(e.warnings)),e){try{w(e.messages)}catch{}try{w(e.customDiagnostics)}catch{}try{Q(e.events)}catch{}try{G(e.customEffects)}catch{}try{e.pricing&&j(e.pricing)}catch{}}return e}async function ve({productGraphId:e,variantId:t,placementGroup:r,position:o,sequence:n,hostPlacementId:a,hostVariantId:s,replace:l,replacePlacementId:c,excludePieceIndex:i,optimistic:u,rollback:f}={}){d(m(i!=null?{excludePieceIndex:i}:{}));let y=null;try{y=await h(p.addPlacement({productGraphId:e,variantId:t,placementGroup:r,position:o,sequence:n,hostPlacementId:a,hostVariantId:s,replace:l,replacePlacementId:c}),{optimistic:u,rollback:f})}catch{return x(P.ERROR,{op:"addPlacement"}),null}const b=g(y);return y?.applied&&x(P.PRODUCT_ADDED,{variantId:t,productGraphId:e,placementGroup:r,placementIds:Object.keys(y?.resolvedState?.placements||{})}),b}async function Xe(e,{optimistic:t,rollback:r}={}){if(e==null)return null;d(m());let o=null;try{o=await h(p.removePlacement(e),{optimistic:t,rollback:r})}catch{return x(P.ERROR,{op:"removePlacement"}),null}const n=g(o);return o?.applied&&x(P.PRODUCT_REMOVED,{placementId:e}),n}async function Ze({placementId:e,sequence:t,placementGroup:r,position:o,rotation:n,hostPlacementId:a,hostVariantId:s,optimistic:l,rollback:c}={}){if(e==null)return null;if(!(t!=null&&Number.isInteger(Number(t))))return o!=null||n!=null?Ce(e,o,n):null;d(m());let u=null;try{u=await h(p.movePlacement({placementId:e,sequence:Number(t),placementGroup:r,position:o,rotation:n,hostPlacementId:a,hostVariantId:s}),{optimistic:l,rollback:c})}catch{return x(P.ERROR,{op:"movePlacement"}),null}const f=g(u);return u?.applied&&x(P.PRODUCT_MOVED,{placementId:e,sequence:Number(t)}),f}async function et(e,{optimistic:t,rollback:r}={}){if(e==null)return null;d(m());let o=null;try{o=await h(p.applyPreset(e),{optimistic:t,rollback:r})}catch{return x(P.ERROR,{op:"applyPreset"}),null}const n=g(o);return o?.applied&&x(P.LAYOUT_CHANGED,{presetId:e}),n}async function tt(e,{optimistic:t,rollback:r}={}){if(!e)return null;let o=null;try{o=await h(p.restoreState(e),{optimistic:t,rollback:r})}catch{return null}return g(o)}async function ot(e,t,r,{optimistic:o,rollback:n}={}){d(m());let a=null;try{a=await _(p.setRoomDimensions(e,t,r),{optimistic:o,rollback:n})}catch{return null}return g(a)}async function rt(e,t,{optimistic:r,rollback:o}={}){if(e==null||t==null)return null;d(m());let n=null;try{n=await h(p.clearSelection(e,t),{optimistic:r,rollback:o})}catch{return null}return g(n)}async function nt(e,{optimistic:t,rollback:r}={}){if(e==null)return null;const o=I.getState(),n=o.sceneSelections?.[e],a=C.getState(),s=a.features?.[e]??a.features?.[String(e)],l=s?.defaultOption??s?.default_option_id??s?.default_option??void 0;o.setSceneSelection?.(e,l),d(m());let c=null;try{c=await h(p.clearSystemSelection(e),{optimistic:t,rollback:r})}catch{return I.getState().setSceneSelection?.(e,n),null}if(c&&c.rejected)I.getState().setSceneSelection?.(e,n);else{const i=c?.defaultOptionOverrides?.[e]??c?.defaultOptionOverrides?.[String(e)];i!=null&&I.getState().setSceneSelection?.(e,i)}return g(c)}function Ce(e,t,r){if(e==null)return null;const o=String(e),n=v.getState(),a=n.productInstances?.[o];if(!a)return null;const s=Array.isArray(t)?t:null,l=Array.isArray(r)?r:null;if(!s&&!l)return null;s&&n.updateInstancePosition(o,s),l&&n.updateInstanceRotation(o,l);const c=C.getState(),i=c.getProduct?.(a.variantId)||c.getProduct?.(a.productId),u=i?.hostVariants??i?.host_variants,y=!(a.positionedAbove!=null||Array.isArray(u)&&u.length>0)&&!!i?.movable;return d(m()),h(p.setTransform(o,s??a.position,l??a.rotation)),{placementId:o,position:s??a.position??null,rotation:l??a.rotation??null,freeMovable:y}}async function Ie(e=null){const t=C.getState(),r=S.getState(),o=typeof window<"u"&&window.location?new URLSearchParams(window.location.search).get("system"):null,n=e??o??null;await t.loadCatalog({systemId:n}),await r.loadConfigurations(n??e);try{const s=S.getState(),l=s.systemDomainDefaults??s.systemRoom?.domain_defaults??null;if(l){const{loadDomainDefaults:c}=await import("./ee242c0099.js");c(l)}}catch{}return fe(),{systemId:S.getState().systemId,sceneConfigurations:S.getState().sceneConfigurations}}const at=(e=null)=>Ie(e);function st(){return S.getState().systemId??null}const lt=({pieceIndex:e,...t}={})=>xe({placementId:e,...t});function ct(){U(null),F(null),Se(),z()}import{dispatch as At}from"./776277593f.js";import{subscribe as Et,getVersion as bt,getConfigState as wt,getResolved as Ot,getBindingAvailable as Mt,getPlacementBinding as Dt,getPlacementBindings as Bt,getEffectiveSelections as Lt,resetConfigState as Ut}from"./817d930a49.js";import{getPlacementOverrides as Qt,getSlotOverride as Gt,resolveComponentTransform as kt,resolveComponentVisibility as Nt,resolveComponentMaterial as Vt}from"./c3b8f1973b.js";export*from"./3c916f744f.js";import{buildCanonicalState as Wt,hostedProductPlacementId as Kt,getHostedProductSpawnSelections as $t,applySceneConfigDefaults as qt,queuePieceAdd as Yt,dequeuePieceAdd as zt,wasPieceAddConsumed as Jt}from"./bcd44b4040.js";import{recomputePrice as Zt,applyBackendPricing as eo}from"./67f6338a4a.js";import{on as oo,registerEffectHandler as ro,_resetEventBus as no}from"./970313b92b.js";import{registerComponent as so,resolveComponent as lo,hasComponent as co,listComponentOverrides as io,_resetComponents as uo}from"./882bc739c8.js";import{registerSlot as po,listSlots as fo,hasSlot as go,SlotHost as So,_resetSlots as yo}from"./73f7d65985.js";import{use as xo,runIntent as Po,listMiddleware as vo,INTENTS as Co,_resetMiddleware as Io}from"./6d238282c1.js";import{onEvent as Ro,onceEvent as Ao,offEvent as _o,listEvents as Eo,emitEvent as bo,EVENTS as wo,_resetEvents as Oo}from"./2e366d7386.js";import{onRequest as Do,onResponse as Bo,setTransport as Lo,hasTransport as Uo,_resetHttp as Fo}from"./a3f18e76fe.js";import{readBom as Go,readQuote as ko,readGeneratedAssets as No,setMetadata as Vo,readMetadata as Ho,serializeMetadata as jo,restoreMetadata as Wo,METADATA_LIMITS as Ko,_resetMetadata as $o}from"./3656ffa1b8.js";import{collectGenericBom as Yo,collectGenericBom as zo,collectPlacementParts as Jo}from"./81802759ca.js";import{readBounds as Zo,onSettled as er}from"./da7b5f450d.js";import{registerComponentRenderer as or,resolveComponentRenderer as rr,listComponentRenderers as nr,registerMaterialResolver as ar,listMaterialResolvers as sr,registerInteraction as lr,runInteraction as cr,listInteractions as ir,onSceneReady as ur,getSceneContext as dr,_resetSceneRegistry as mr}from"./95a44ebec2.js";import{registerAction as fr,runAction as gr,listActions as Sr,actions as yr,registerIcon as hr,resolveIcon as xr,listIcons as Pr,hasIcon as vr,useIcon as Cr,useHasIcon as Ir,registerModal as Tr,listModals as Rr,ModalHost as Ar,openModal as _r,_resetUiRegistry as Er}from"./09c4973968.js";import{setLabels as wr,getLabel as Or,getLabels as Mr,useLabel as Dr,setLocale as Br,getLocale as Lr,setCurrency as Ur,getCurrency as Fr,isRtl as Qr,formatMoney as Gr,formatNumber as kr,useFormatters as Nr,useLabels as Vr,_resetLabels as Hr}from"./28d887bf8a.js";import{computeTargets as Wr,resolveTarget as Kr,registerTargetRenderer as $r,resolveTargetRenderer as qr,resolveInsertSequence as Yr,_resetTargets as zr}from"./58e6419ba8.js";import{default as Xr}from"./205827c5c8.js";import{registerQuoteTemplate as en,resolveQuoteTemplate as tn,hasQuoteTemplate as on,useQuoteTemplate as rn,setQuoteTemplate as nn,setBackendQuoteTemplate as an,activeQuoteTemplateKey as sn,activeQuoteDesignKey as ln,listQuoteTemplates as cn,_resetQuoteTemplate as un}from"./4ba4f544b9.js";import{useUIRegion as mn,useUIRegions as pn,getUIRegions as fn,UI_REGIONS as gn}from"./9840b9ce12.js";import{default as yn}from"./b976df09ec.js";import{default as xn}from"./6c0a2572dd.js";import{default as vn}from"./cdb4a0f7b3.js";import{default as In}from"./0f7c8345a8.js";import{default as Rn}from"./82a8a4bc35.js";import{default as _n}from"./e379e0039b.js";import{registerRoute as bn,resolveRoute as wn,hasRoute as On,listRoutes as Mn,useRouteRegistry as Dn,_resetRoutes as Bn}from"./61e0c0c9b5.js";import{hideComponent as Un,showComponent as Fn,transformComponent as Qn,setComponentMaterial as Gn,clearComponentOverrides as kn,listComponents as Nn,componentOverrideFor as Vn,useComponentOverride as Hn,_resetComponentApi as jn}from"./a3c983d431.js";import{setToggles as Kn,getToggles as $n,useHostToggles as qn,_resetToggles as Yn}from"./41ed5985ad.js";import{registerAssetResolver as Jn,hasAssetResolver as Xn,resolveAssetUrl as Zn,_resetAssetResolver as ea}from"./cec035efb1.js";import{registerButton as oa}from"./f1b3b2622a.js";import{SaveProjectButton as na,GenerateAssetsButton as aa,LiveStatusPanel as sa,ChatBar as la,NotificationContainer as ca,EvaluatingOverlay as ia,Modals as ua,SaveProjectModal as da,ExportModal as ma,ARModal as pa,GeneratedAssetsModal as fa,Header as ga,SceneToolbar as Sa,Sidebar as ya,SidebarFrame as ha,OptionSidebar as xa,LoadingScreen as Pa,ConfirmDialog as va,Modal as Ca,Button as Ia,ARViewer as Ta,SceneRoom as Ra,SceneDimensions as Aa,CameraAnimator as _a}from"./64e9020b49.js";import{default as ba}from"./921bf270dd.js";import{registerLayout as Oa,resolveLayout as Ma,hasLayout as Da,listLayouts as Ba,useLayoutRegistry as La,setLayout as Ua,activeLayoutKey as Fa,_resetLayouts as Qa}from"./31ea036f5c.js";import{setQuoteDocument as ka,getQuoteDocument as Na,hasQuoteDocument as Va,resetQuoteDocument as Ha,subscribeQuoteDocument as ja,QUOTE_COLUMNS as Wa,COLUMN_DEFS as Ka}from"./12b8165d6d.js";import{useQuoteDocument as qa}from"./d464da28a5.js";import{generateSilo as za,generateLifestyle as Ja,generateAr as Xa,generateBomPdf as Za,generateAll as es,generationStatus as ts,waitForAssets as os,ASSET_GROUPS as rs}from"./5d05e8982e.js";import{buildQuotePdfBlob as as,saveQuotePdf as ss,registerQuotePdf as ls,registerQuotePdfEndpoint as cs,hasQuotePdf as is,listQuotePdfBuilders as us,_resetQuotePdf as ds}from"./d20718159b.js";import{configureSDK as ps}from"./db4afd43c9.js";import{default as gs}from"./7206ce49c6.js";import{default as ys}from"./d0f9681634.js";import{default as xs}from"./2990ba64d6.js";import{useSelection as vs,useProducts as Cs,usePrice as Is}from"./16a399703e.js";import{getProduct as Rs,getProductName as As,getPlacedProductName as _s,getProductVariants as Es,listProducts as bs,getOptionSet as ws,getOption as Os,useProduct as Ms,listOptionSets as Ds,listSceneOptionSets as Bs,listProductOptionSets as Ls,listOptions as Us,listMaterials as Fs,getMaterial as Qs}from"./1458417bdb.js";import{useBootStatus as ks,useSystem as Ns,endBootLoading as Vs,markThemeReady as Hs,setEmbedded as js,setSystemTheme as Ws}from"./066fc9aa40.js";import{default as $s}from"./60d697292c.js";import{default as Ys}from"./811b403d43.js";import{default as Js}from"./6ba86aa3b8.js";import{default as Zs}from"./3fb3ab6757.js";import{OptionThumbnail as tl,FinishThumbnail as ol,LayoutThumbnail as rl,HostedProductThumbnail as nl,WidthSlider as al,ColorSwatch as sl,FrameSizeButton as ll,ProductFeaturePickers as cl}from"./c12c112c6f.js";import{loadWallMaterial as ul,getConcreteWallMaterial as dl,getWallBoxMaterials as ml,createWallDiffuse as pl,createWallNormalMap as fl,createWallRoughnessMap as gl}from"./22bd38ddcf.js";import{SelectionBox as yl,SELECTION_COLOR as hl,SelectionActionPanel as xl,ProductInstance as Pl,ComponentMesh as vl,FreeMovable as Cl,PlacementGaps as Il,SceneStage as Tl,SceneEnvironment as Rl,applyEnvironmentToRenderer as Al}from"./8a3a57c008.js";import{PLACEMENT_TYPES as El,getPlacementType as bl,resolveReplaceTarget as wl}from"./4d7a0d1897.js";import{FEATURE_ACTIONS as Ml,resolveFeatureAction as Dl,isAddFeature as Bl}from"./8c27edda0f.js";import{getPlacementStrategy as Ul,resolvePlacementStrategyId as Fl,setPlacementStrategy as Ql,clearPlacementStrategy as Gl,getPlacementStrategyOverride as kl,resolvePlacementStrategyConfig as Nl,setPlacementStrategyConfig as Vl,DEFAULT_STRATEGY_ID as Hl,STRATEGIES as jl}from"./281cf952fa.js";import{default as Kl}from"./a493e9aa8f.js";import{registerPlacementStrategy as ql,hasPlacementStrategy as Yl,listPlacementStrategies as zl,currentConfiguratorKey as Jl,_resetPlacementStrategies as Xl}from"./281cf952fa.js";import{enforceCorners as ec}from"./388cadacbd.js";import{resolveAddMode as oc,armPlacement as rc,disarmPlacement as nc,getPendingPlacement as ac,computeGaps as sc}from"./ab6c80484f.js";import{armHostedProduct as cc,disarmHostedProduct as ic}from"./ab6c80484f.js";import{usePlacementInteraction as dc}from"./4b8958aa4c.js";import{bootConfigurator as pc}from"./371ed78aa2.js";import{setAllowedOrigins as gc,getAllowedOrigins as Sc}from"./1e243363f6.js";import{mountConfigurator as hc}from"./1870fc037b.js";import*as xc from"./d30f1f506e.js";export*from"./2cafe3274b.js";import{registerCommand as Cc,runCommand as Ic,hasCommand as Tc,listCommands as Rc,resetCommands as Ac,COMMANDS as _c}from"./d6851ea979.js";import{captureDesignViews as bc,buildDesignPdf as wc,saveProject as Oc,loadProject as Mc,restoreProject as Dc,parseShareToken as Bc,buildShareUrl as Lc,adoptShareTokenInUrl as Uc,generateArForCurrentScene as Fc}from"./d30f1f506e.js";import{default as Gc}from"./be337ddda5.js";import{default as Nc}from"./872c4302e0.js";import{default as Hc}from"./9c6c598569.js";import{default as Wc}from"./8f60e5059a.js";import{default as $c}from"./1fac915f8b.js";import{default as Yc}from"./3f37665dd1.js";import{default as Jc,fetchEmbedBoot as Xc}from"./79a397bb92.js";import{getApiKey as ei}from"./431a2d8618.js";import{setApiBaseUrl as oi,getApiBaseUrl as ri}from"./8ade32d067.js";import{setServiceUrls as ai}from"./9544661159.js";import{applyTheme as li,applyThemeById as ci,themeMode as ii,normalizeThemeId as ui,themeLayoutKey as di}from"./5c9fd9201c.js";import{validateTheme as pi,checkThemeContrast as fi,contrastRatio as gi,applyCustomCss as Si,applyFontUrl as yi}from"./b1349d5a21.js";import{default as xi}from"./f11a45a150.js";import{setEmbedContext as vi,trackEmbed as Ci}from"./0af28430ab.js";import{CopilotContext as Ti,useCopilotAvailable as Ri}from"./672404d987.js";import{checkCopilotAvailability as _i,getCopilotRuntimeUrl as Ei,getCopilotWarmupUrl as bi,getCopilotApiUrl as wi,setCopilotApiUrl as Oi}from"./fe58a84b85.js";export{pa as ARModal,Ta as ARViewer,rs as ASSET_GROUPS,Ia as Button,Ka as COLUMN_DEFS,_c as COMMANDS,_a as CameraAnimator,la as ChatBar,sl as ColorSwatch,vl as ComponentMesh,Rn as ConfigurationSummary,va as ConfirmDialog,Ti as CopilotContext,Hl as DEFAULT_STRATEGY_ID,vn as DefaultQuoteTemplate,wo as EVENTS,ia as EvaluatingOverlay,ma as ExportModal,Ml as FEATURE_ACTIONS,ol as FinishThumbnail,ll as FrameSizeButton,Cl as FreeMovable,aa as GenerateAssetsButton,fa as GeneratedAssetsModal,ga as Header,nl as HostedProductThumbnail,Co as INTENTS,rl as LayoutThumbnail,sa as LiveStatusPanel,Pa as LoadingScreen,Ko as METADATA_LIMITS,Ca as Modal,Ar as ModalHost,ua as Modals,ca as NotificationContainer,Zs as OptionSetSection,xa as OptionSidebar,tl as OptionThumbnail,El as PLACEMENT_TYPES,Il as PlacementGaps,Xr as PlacementTargets,gs as Popover,cl as ProductFeaturePickers,Pl as ProductInstance,Wa as QUOTE_COLUMNS,_n as QuoteQr,In as QuoteRenders,xn as QuoteView,hl as SELECTION_COLOR,jl as STRATEGIES,na as SaveProjectButton,da as SaveProjectModal,Aa as SceneDimensions,Rl as SceneEnvironment,Ra as SceneRoom,Tl as SceneStage,Sa as SceneToolbar,xl as SelectionActionPanel,yl as SelectionBox,ya as Sidebar,ha as SidebarFrame,So as SlotHost,gn as UI_REGIONS,al as WidthSlider,ea as _resetAssetResolver,jn as _resetComponentApi,uo as _resetComponents,no as _resetEventBus,Oo as _resetEvents,Fo as _resetHttp,Hr as _resetLabels,Qa as _resetLayouts,$o as _resetMetadata,Io as _resetMiddleware,Xl as _resetPlacementStrategies,ds as _resetQuotePdf,un as _resetQuoteTemplate,Bn as _resetRoutes,mr as _resetSceneRegistry,yo as _resetSlots,zr as _resetTargets,Yn as _resetToggles,Er as _resetUiRegistry,yr as actions,Fa as activeLayoutKey,ln as activeQuoteDesignKey,sn as activeQuoteTemplateKey,ve as addProduct,$e as addProductFromOption,Uc as adoptShareTokenInUrl,Jc as apiService,eo as applyBackendPricing,Si as applyCustomCss,Al as applyEnvironmentToRenderer,yi as applyFontUrl,et as applyLayoutPreset,qt as applySceneConfigDefaults,li as applyTheme,ci as applyThemeById,cc as armHostedProduct,rc as armPlacement,pc as bootConfigurator,Wt as buildCanonicalState,wc as buildDesignPdf,he as buildFocusContext,as as buildQuotePdfBlob,Lc as buildShareUrl,bc as captureDesignViews,qe as changeProductVariant,_i as checkCopilotAvailability,fi as checkThemeContrast,kn as clearComponentOverrides,Gl as clearPlacementStrategy,rt as clearProductOption,nt as clearSceneOption,It as clearSessionToken,zo as collectBom,Yo as collectGenericBom,Jo as collectPlacementParts,Vn as componentOverrideFor,sc as computeGaps,Wr as computeTargets,ps as configureSDK,gi as contrastRatio,pl as createWallDiffuse,fl as createWallNormalMap,gl as createWallRoughnessMap,Jl as currentConfiguratorKey,zt as dequeuePieceAdd,ic as disarmHostedProduct,nc as disarmPlacement,At as dispatch,bo as emitEvent,Vs as endBootLoading,ec as enforceCorners,Xc as fetchEmbedBoot,Gr as formatMoney,kr as formatNumber,es as generateAll,Xa as generateArAsset,Fc as generateArForCurrentScene,Za as generateBomPdf,Ja as generateLifestyle,za as generateSilo,ts as generationStatus,ri as getApiBaseUrl,ei as getApiKey,Mt as getBindingAvailable,pt as getChannelId,dl as getConcreteWallMaterial,wt as getConfigState,wi as getCopilotApiUrl,Ei as getCopilotRuntimeUrl,bi as getCopilotWarmupUrl,Fr as getCurrency,Lt as getEffectiveSelections,gt as getEmbedSlug,$t as getHostedProductSpawnSelections,Sc as getIframeAllowedOrigins,Or as getLabel,Mr as getLabels,Lr as getLocale,Qs as getMaterial,Os as getOption,ws as getOptionSet,ac as getPendingPlacement,_s as getPlacedProductName,Dt as getPlacementBinding,Bt as getPlacementBindings,Qt as getPlacementOverrides,Ul as getPlacementStrategy,kl as getPlacementStrategyOverride,bl as getPlacementType,Rs as getProduct,As as getProductName,Es as getProductVariants,Na as getQuoteDocument,Ot as getResolved,dr as getSceneContext,st as getSelectedSystemId,Tt as getSessionScope,yt as getShareToken,Gt as getSlotOverride,$n as getToggles,fn as getUIRegions,bt as getVersion,ml as getWallBoxMaterials,Xn as hasAssetResolver,Tc as hasCommand,co as hasComponent,vr as hasIcon,Da as hasLayout,Yl as hasPlacementStrategy,Va as hasQuoteDocument,is as hasQuotePdf,on as hasQuoteTemplate,On as hasRoute,go as hasSlot,Uo as hasTransport,Un as hideComponent,Kt as hostedProductPlacementId,fe as initConfigEngine,Bl as isAddFeature,xt as isReadOnlyCredential,Qr as isRtl,Sr as listActions,Rc as listCommands,io as listComponentOverrides,nr as listComponentRenderers,Nn as listComponents,Eo as listEvents,Pr as listIcons,ir as listInteractions,Ba as listLayouts,sr as listMaterialResolvers,Fs as listMaterials,vo as listMiddleware,Rr as listModals,Ds as listOptionSets,Us as listOptions,zl as listPlacementStrategies,Ls as listProductOptionSets,bs as listProducts,us as listQuotePdfBuilders,cn as listQuoteTemplates,Mn as listRoutes,Bs as listSceneOptionSets,fo as listSlots,Ie as loadConfigurator,Mc as loadProject,ul as loadWallMaterial,Hs as markThemeReady,hc as mountConfigurator,Ze as moveProduct,ui as normalizeThemeId,_o as offEvent,oo as on,Ro as onEvent,Pt as onReadOnlyChange,Do as onRequest,Bo as onResponse,ur as onSceneReady,er as onSceneSettled,Ao as onceEvent,_r as openModal,Bc as parseShareToken,lt as pilotFinishSelect,We as placeHostedProduct,Kl as placementKit,xc as projects,Yt as queuePieceAdd,Go as readBom,No as readGeneratedAssets,Ho as readMetadata,ko as readQuote,Zo as readSceneBounds,Zt as recomputePrice,ye as reevaluateForFocus,Je as refreshCanonicalState,fr as registerAction,Jn as registerAssetResolver,oa as registerButton,Cc as registerCommand,so as registerComponent,or as registerComponentRenderer,ro as registerEffectHandler,hr as registerIcon,lr as registerInteraction,Oa as registerLayout,ar as registerMaterialResolver,Tr as registerModal,ql as registerPlacementStrategy,ls as registerQuotePdf,cs as registerQuotePdfEndpoint,en as registerQuoteTemplate,bn as registerRoute,po as registerSlot,$r as registerTargetRenderer,Xe as removeProduct,Ac as resetCommands,Ut as resetConfigState,Ha as resetQuoteDocument,oc as resolveAddMode,Zn as resolveAssetUrl,lo as resolveComponent,Vt as resolveComponentMaterial,rr as resolveComponentRenderer,kt as resolveComponentTransform,Nt as resolveComponentVisibility,Dl as resolveFeatureAction,xr as resolveIcon,Yr as resolveInsertSequence,Ma as resolveLayout,Nl as resolvePlacementStrategyConfig,Fl as resolvePlacementStrategyId,tn as resolveQuoteTemplate,wl as resolveReplaceTarget,wn as resolveRoute,Kr as resolveTarget,qr as resolveTargetRenderer,tt as restoreConfiguration,Wo as restoreMetadata,Dc as restoreProject,gr as runAction,Ic as runCommand,Po as runIntent,cr as runInteraction,Oc as saveProject,ss as saveQuotePdf,Ye as seedInitialState,xe as selectOptionForProduct,Ke as selectOptionForScene,at as selectSystem,jo as serializeMetadata,oi as setApiBaseUrl,dt as setApiKey,an as setBackendQuoteTemplate,mt as setChannelId,Gn as setComponentMaterial,Oi as setCopilotApiUrl,Ur as setCurrency,vi as setEmbedContext,ft as setEmbedSlug,js as setEmbedded,gc as setIframeAllowedOrigins,wr as setLabels,Ua as setLayout,Br as setLocale,Vo as setMetadata,Ql as setPlacementStrategy,Vl as setPlacementStrategyConfig,ka as setQuoteDocument,nn as setQuoteTemplate,ot as setRoomDimensions,ai as setServiceUrls,St as setShareToken,Ws as setSystemTheme,Kn as setToggles,Ct as setTokenProvider,Lo as setTransport,Fn as showComponent,Et as subscribe,ja as subscribeQuoteDocument,ct as teardownConfigEngine,di as themeLayoutKey,ii as themeMode,Ci as trackEmbed,Qn as transformComponent,Ce as transformProduct,xo as use,xi as useAppVersion,ks as useBootStatus,Hn as useComponentOverride,Gc as useConfigurationGraphStore,Ri as useCopilotAvailable,Nr as useFormatters,ba as useGenerateAssets,Yc as useGeneratedAssetsStore,Ir as useHasIcon,qn as useHostToggles,Cr as useIcon,Dr as useLabel,Vr as useLabels,La as useLayoutRegistry,Nc as useObjectGraphStore,xs as useOptionSets,dc as usePlacementInteraction,Is as usePrice,Ms as useProduct,$s as useProductOrder,Js as useProductOverrides,Cs as useProducts,qa as useQuoteDocument,rn as useQuoteTemplate,yn as useReadOnly,Dn as useRouteRegistry,Hc as useSceneGraphStore,vs as useSelection,Ys as useSelectionActions,Ns as useSystem,ys as useToolbar,mn as useUIRegion,pn as useUIRegions,Wc as useUIStore,$c as useUndoRedoStore,pi as validateTheme,os as waitForAssets,Jt as wasPieceAddConsumed};
|
|
1
|
+
import g from"./be337ddda5.js";import v from"./9c6c598569.js";import P from"./872c4302e0.js";import T from"./8f60e5059a.js";import B from"./1fac915f8b.js";import I from"./d94df858ea.js";import{dispatch as y,setRefetchCatalogHandler as L,setFocusProvider as U,setRejectionHandler as $,setEvaluationStateHandler as q}from"./776277593f.js";import{coalescedDispatch as b}from"./4e1db1e3b0.js";import{dispatchEvents as F,dispatchCustomEffects as Q}from"./970313b92b.js";import{emitEvent as h,EVENTS as x}from"./2e366d7386.js";import{setConfigState as d,setInitial as Y,resetConfigState as z}from"./817d930a49.js";import{buildCanonicalState as p,applyResolvedToScene as k,applyRemovedPlacements as G,applyAddedPlacements as V,applyWarnings as J,applyMessages as _,applyWallMountedPlacements as X,applyPresetPieceTrims as Z,applyInitialSelections as ee,applySelectionOverrides as te,getHostedProductSpawnSelections as oe,applyResolvedPieceAdds as re,hydrateProductInstancesFromState as H,syncOwnedInstanceVariants as ne,applyOwnedTransforms as ae}from"./bcd44b4040.js";import{applyBackendPricing as N}from"./67f6338a4a.js";import{fetchInitialConfiguration as se}from"./fbd844f2d1.js";import*as m from"./3c916f744f.js";import{resolveReplaceTarget as le}from"./4d7a0d1897.js";import{resolveHostVariantId as ce}from"./be07a7f885.js";import{authHeaders as ie,isAuthFailure as ue,reportAuthFailure as de}from"./431a2d8618.js";import{assertLicensed as pe}from"./fe235d7160.js";import{setApiKey as gt,setChannelId as St,getChannelId as yt,setEmbedSlug as ht,getEmbedSlug as xt,setShareToken as vt,getShareToken as Pt}from"./431a2d8618.js";import{isReadOnlyCredential as Ct,onReadOnlyChange as Rt}from"./431a2d8618.js";import{setTokenProvider as At,clearSessionToken as bt,getSessionScope as Et}from"./33fa2c8ca2.js";import{getApiBaseUrl as me}from"./8ade32d067.js";async function fe(){const e=g.getState().systemId;try{const t=`/api/v1/systems/${e}/`;await pe(t);const r=await fetch(`${me()}${t}`,{cache:"no-store",headers:{...ie(t)}});ue(r)&&await de(r,{url:t,method:"GET"});const o=await r.json(),n=o?.catalogVersion??o?.catalog_version??null;return n!=null&&g.setState({catalogVersion:n}),{catalogVersion:n}}catch{return{catalogVersion:g.getState().catalogVersion}}}let w=0;function M(e){w=Math.max(0,w+(e?1:-1));try{T.setState({isEvaluating:w>0})}catch{}}function j(e){const t=e?.uiToggles??e?.ui_toggles??null;if(!(!t||typeof t!="object"))try{P.getState().mergeSystemUiToggles(t)}catch{}}function ge(e){const t=e?.placementBoundsExclude??e?.placement_bounds_exclude??e?.state?.placementBoundsExclude??e?.state?.placement_bounds_exclude??e?.system?.placementBoundsExclude??e?.system?.placement_bounds_exclude??null,r=t?.componentIds??t?.component_ids??null,o=Array.isArray(r)?r.map(n=>String(n)):[];try{P.setState({placementBoundsExcludeIds:o})}catch{}}async function Se({onRefetchCatalog:e}={}){L(e||fe),U(ve),$(t=>{try{T.getState().showWarning?.(D(t))}catch{}}),q(M),ye(),d(p())}let C=null,A=null;function ye(){if(C){try{C()}catch{}C=null}C=v.subscribe(e=>`${e.selectedInstanceId??""}|${e.selectedComponentId??""}`,()=>{A&&clearTimeout(A),A=setTimeout(()=>{xe()},120)})}function he(){if(A&&(clearTimeout(A),A=null),C){try{C()}catch{}C=null}}async function xe(){let e=null;try{e=v.getState().selectedInstanceId}catch{}try{if(T.getState().isLayoutLoading)return null}catch{}d(p());let t=null;try{t=await b(m.noop())}catch{return null}return f(t)}function ve(){const e=v.getState(),t=e.selectedInstanceId;if(t==null)return{};if(String(t).endsWith("__host")){const a=String(t).replace(/__host$/,""),s=(e.productInstances||{})[a]||null,l=P.getState(),c=s?l.getProduct?.(s.variantId??s.productId):null,i=ce(c,s),u={placementId:String(t)};return i!=null&&(u.variantId=i),u.componentId=e.selectedComponentId??null,u}const r=(e.productInstances||{})[String(t)]||null,o=r?.variantId??r?.productId??null,n={placementId:String(t)};return o!=null&&(n.variantId=o),n.componentId=e.selectedComponentId??null,n}async function Pe(e,t,r,o){const n=e&&typeof e=="object"?e:{placementId:e,optionSetId:t,optionId:r,...o||{}},{placementId:a,optionSetId:s,optionId:l,optimistic:c,rollback:i}=n;if(a==null||s==null||l==null)return null;try{if(v.getState().productInstances?.[String(a)]?.locked)return T.getState().showWarning?.("This item is locked and can\u2019t be changed."),null}catch{}d(p());let u=null;try{u=await b(m.selectOption(a,s,l),{optimistic:c,rollback:i})}catch{return null}return f(u)}async function qe(e,t,r){const o=e&&typeof e=="object"?e:{placementId:e,variantId:t,...r||{}},{variantId:n,optimistic:a,rollback:s}=o,l=o.placementId!=null?String(o.placementId).replace(/__host$/,""):null;if(l==null||n==null)return null;try{if(v.getState().productInstances?.[l]?.locked)return T.getState().showWarning?.("This item is locked and can\u2019t be changed."),null}catch{}d(p());let c=null;try{c=await y(m.changeHostVariant(l,n),{optimistic:a,rollback:s})}catch{return h(x.ERROR,{op:"changeHostVariant"}),null}return f(c)}async function Ye(e){if(e==null)return null;const{osId:t,assignments:r}=oe(),o=r.find(s=>String(s.instanceId)===String(e));if(t==null||!o)return null;d(p({excludeHostedProductInstanceId:e}));const n=Number(t)||t;let a=null;try{a=await y(m.selectOption(o.pieceId,n,o.optionId))}catch{return null}return f(a)}async function ze(e,t,r){const o=e&&typeof e=="object"?e:{optionSetId:e,optionId:t,...r||{}},{optionSetId:n,optionId:a,optimistic:s,rollback:l}=o;if(n==null||a==null)return null;const c=I.getState(),i=c.sceneSelections?.[n];c.setSceneSelection?.(n,a),d(p());let u=null;try{u=await b(m.selectSystemOption(n,a),{optimistic:s,rollback:l})}catch{return I.getState().setSceneSelection?.(n,i),null}return u&&u.rejected&&I.getState().setSceneSelection?.(n,i),f(u)}async function Je({optionSetId:e,optionId:t,overrides:r={}}={}){if(e==null||t==null)return null;const o=P.getState().options||{},n=o[t]||o[String(t)];if(!n)return null;const a=n.value??n.valueText??n.value_text,s=P.getState().products||{},l=a!=null?s[a]||s[String(a)]:null;if(!l&&r.productGraphId==null)return null;const c=r.productGraphId??l?.productGraph??l?.product_graph??l?.productGraphId??null,i=r.placementGroup??l?.placementGroup??l?.placement_group??null,u=r.variantId??a,S=r.replacePlacementId!==void 0?r.replacePlacementId:le({placementGroup:i});return Ce({productGraphId:c,variantId:u,placementGroup:i,position:r.position,replace:S!=null,replacePlacementId:S})}async function Xe(e,t,r){const o=e&&typeof e=="object"?e:{placementId:e,variantId:t,...r||{}},{placementId:n,variantId:a,optimistic:s,rollback:l}=o;if(n==null||a==null)return null;d(p());let c=null;try{c=await b(m.changeVariant(n,a),{optimistic:s,rollback:l})}catch{return null}return f(c)}function W(){let e=null,t=null;try{e=g.getState().systemId??null}catch{}try{const r=v.getState(),o=g.getState();t=r.activeSceneConfigId||o.defaultPresetId||Object.keys(o.sceneConfigurations||{})[0]||null}catch{}return e==null?null:`${e}|${t??""}`}let E=null;const O=new Set;async function Ze({force:e=!1}={}){const t=W();if(!e&&t!=null&&O.has(t))return null;if(E)return E;E=Ie(),M(!0);try{const r=await E;t!=null&&O.add(t);const o=W();return o!=null&&O.add(o),r}finally{E=null,M(!1)}}async function Ie(){const e=g.getState().systemId;if(e==null)return null;const t=v.getState().activeSceneConfigId??null;let r=null;try{r=await se({systemId:e,presetId:t})}catch{return null}if(j(r?.system),ge(r),!r?.state)return null;Y(r);try{ee(r.state)}catch{}try{_(r.messages)}catch{}try{_(r.customDiagnostics)}catch{}try{F(r.events)}catch{}try{Q(r.customEffects)}catch{}try{const o=r.state.sceneId??r.state.scene_id;o!=null&&v.getState().setActiveSceneId?.(o)}catch{}try{Z(r.removedPlacements)}catch{}try{G(r.removedPlacements)}catch{}try{X(r.state)}catch{}try{V(r.addedPlacements,r.state)}catch{}try{H(r.state)}catch{}try{k(r.state)}catch{}try{ae(r.state)}catch{}try{N(r.pricing)}catch{}try{I.getState().markSceneSelectionsSettled?.()}catch{}try{h(x.READY,{systemId:r?.state?.systemId??null})}catch{}return r}function D(e){const r=(Array.isArray(e?.errors)?e.errors:[]).map(n=>typeof n=="string"?n:n?.message??n?.detail??null).filter(Boolean),o=[...new Set(r)];return o.length?o.join(" "):"That change isn\u2019t allowed by the current design rules \u2014 reverted."}function et(e){const t=T.getState();if(t.isLayoutLoading||t._snapshotOverridesOnLoadComplete){try{t.showWarning?.(D(e))}catch{}return}try{t.showError?.(D(e))}catch{}if((B.getState().past||[]).length>0)try{B.getState().undo()}catch{}}async function tt(){try{d(p())}catch{}return null}function f(e){if(j(e?.system),e&&e.applied&&e.resolvedState&&(k(e.resolvedState),G(e.removedPlacements),V(e.addedPlacements,e.resolvedState),re(e.resolvedState),H(e.resolvedState),ne(e.resolvedState),te(e.selectionOverrides),J(e.warnings)),e){try{_(e.messages)}catch{}try{_(e.customDiagnostics)}catch{}try{F(e.events)}catch{}try{Q(e.customEffects)}catch{}try{e.pricing&&N(e.pricing)}catch{}}return e}async function Ce({productGraphId:e,variantId:t,placementGroup:r,position:o,sequence:n,hostPlacementId:a,hostVariantId:s,replace:l,replacePlacementId:c,excludePieceIndex:i,optimistic:u,rollback:S}={}){d(p(i!=null?{excludePieceIndex:i}:{}));let R=null;try{R=await y(m.addPlacement({productGraphId:e,variantId:t,placementGroup:r,position:o,sequence:n,hostPlacementId:a,hostVariantId:s,replace:l,replacePlacementId:c}),{optimistic:u,rollback:S})}catch{return h(x.ERROR,{op:"addPlacement"}),null}const K=f(R);return R?.applied&&h(x.PRODUCT_ADDED,{variantId:t,productGraphId:e,placementGroup:r,placementIds:Object.keys(R?.resolvedState?.placements||{})}),K}async function ot(e,{optimistic:t,rollback:r}={}){if(e==null)return null;d(p());let o=null;try{o=await y(m.removePlacement(e),{optimistic:t,rollback:r})}catch{return h(x.ERROR,{op:"removePlacement"}),null}const n=f(o);return o?.applied&&h(x.PRODUCT_REMOVED,{placementId:e}),n}async function rt({placementId:e,sequence:t,placementGroup:r,position:o,rotation:n,hostPlacementId:a,hostVariantId:s,optimistic:l,rollback:c}={}){if(e==null)return null;if(!(t!=null&&Number.isInteger(Number(t))))return o!=null||n!=null?Re(e,o,n):null;d(p());let u=null;try{u=await y(m.movePlacement({placementId:e,sequence:Number(t),placementGroup:r,position:o,rotation:n,hostPlacementId:a,hostVariantId:s}),{optimistic:l,rollback:c})}catch{return h(x.ERROR,{op:"movePlacement"}),null}const S=f(u);return u?.applied&&h(x.PRODUCT_MOVED,{placementId:e,sequence:Number(t)}),S}async function nt(e,{optimistic:t,rollback:r}={}){if(e==null)return null;d(p());let o=null;try{o=await y(m.applyPreset(e),{optimistic:t,rollback:r})}catch{return h(x.ERROR,{op:"applyPreset"}),null}const n=f(o);return o?.applied&&h(x.LAYOUT_CHANGED,{presetId:e}),n}async function at(e,{optimistic:t,rollback:r}={}){if(!e)return null;let o=null;try{o=await y(m.restoreState(e),{optimistic:t,rollback:r})}catch{return null}return f(o)}async function st(e,t,r,{optimistic:o,rollback:n}={}){d(p());let a=null;try{a=await b(m.setRoomDimensions(e,t,r),{optimistic:o,rollback:n})}catch{return null}return f(a)}async function lt(e,t,{optimistic:r,rollback:o}={}){if(e==null||t==null)return null;d(p());let n=null;try{n=await y(m.clearSelection(e,t),{optimistic:r,rollback:o})}catch{return null}return f(n)}async function ct(e,{optimistic:t,rollback:r}={}){if(e==null)return null;const o=I.getState(),n=o.sceneSelections?.[e],a=P.getState(),s=a.features?.[e]??a.features?.[String(e)],l=s?.defaultOption??s?.default_option_id??s?.default_option??void 0;o.setSceneSelection?.(e,l),d(p());let c=null;try{c=await y(m.clearSystemSelection(e),{optimistic:t,rollback:r})}catch{return I.getState().setSceneSelection?.(e,n),null}if(c&&c.rejected)I.getState().setSceneSelection?.(e,n);else{const i=c?.defaultOptionOverrides?.[e]??c?.defaultOptionOverrides?.[String(e)];i!=null&&I.getState().setSceneSelection?.(e,i)}return f(c)}function Re(e,t,r){if(e==null)return null;const o=String(e),n=v.getState(),a=n.productInstances?.[o];if(!a)return null;const s=Array.isArray(t)?t:null,l=Array.isArray(r)?r:null;if(!s&&!l)return null;s&&n.updateInstancePosition(o,s),l&&n.updateInstanceRotation(o,l);const c=P.getState(),i=c.getProduct?.(a.variantId)||c.getProduct?.(a.productId),u=i?.hostVariants??i?.host_variants,R=!(a.positionedAbove!=null||Array.isArray(u)&&u.length>0)&&!!i?.movable;return d(p()),y(m.setTransform(o,s??a.position,l??a.rotation)),{placementId:o,position:s??a.position??null,rotation:l??a.rotation??null,freeMovable:R}}async function Te(e=null){const t=P.getState(),r=g.getState(),o=typeof window<"u"&&window.location?new URLSearchParams(window.location.search).get("system"):null,n=e??o??null;await t.loadCatalog({systemId:n}),await r.loadConfigurations(n??e);try{const s=g.getState(),l=s.systemDomainDefaults??s.systemRoom?.domain_defaults??null;if(l){const{loadDomainDefaults:c}=await import("./ee242c0099.js");c(l)}}catch{}return Se(),{systemId:g.getState().systemId,sceneConfigurations:g.getState().sceneConfigurations}}const it=(e=null)=>Te(e);function ut(){return g.getState().systemId??null}const dt=({pieceIndex:e,...t}={})=>Pe({placementId:e,...t});function pt(){L(null),U(null),he(),z()}import{dispatch as wt}from"./776277593f.js";import{subscribe as Ot,getVersion as Dt,getConfigState as Bt,getResolved as Lt,getBindingAvailable as Ut,getPlacementBinding as Ft,getPlacementBindings as Qt,getEffectiveSelections as kt,resetConfigState as Gt}from"./817d930a49.js";import{getPlacementOverrides as Ht,getSlotOverride as Nt,resolveComponentTransform as jt,resolveComponentVisibility as Wt,resolveComponentMaterial as Kt}from"./c3b8f1973b.js";export*from"./3c916f744f.js";import{buildCanonicalState as Yt,hostedProductPlacementId as zt,getHostedProductSpawnSelections as Jt,applySceneConfigDefaults as Xt,queuePieceAdd as Zt,dequeuePieceAdd as eo,wasPieceAddConsumed as to}from"./bcd44b4040.js";import{recomputePrice as ro,applyBackendPricing as no}from"./67f6338a4a.js";import{on as so,registerEffectHandler as lo,_resetEventBus as co}from"./970313b92b.js";import{registerComponent as uo,resolveComponent as po,hasComponent as mo,listComponentOverrides as fo,_resetComponents as go}from"./882bc739c8.js";import{registerSlot as yo,listSlots as ho,hasSlot as xo,SlotHost as vo,_resetSlots as Po}from"./73f7d65985.js";import{use as Co,runIntent as Ro,listMiddleware as To,INTENTS as Ao,_resetMiddleware as bo}from"./6d238282c1.js";import{onEvent as _o,onceEvent as wo,offEvent as Mo,listEvents as Oo,emitEvent as Do,EVENTS as Bo,_resetEvents as Lo}from"./2e366d7386.js";import{onRequest as Fo,onResponse as Qo,setTransport as ko,hasTransport as Go,_resetHttp as Vo}from"./a3f18e76fe.js";import{readBom as No,readQuote as jo,readGeneratedAssets as Wo,setMetadata as Ko,readMetadata as $o,serializeMetadata as qo,restoreMetadata as Yo,METADATA_LIMITS as zo,_resetMetadata as Jo}from"./3656ffa1b8.js";import{collectGenericBom as Zo,collectGenericBom as er,collectPlacementParts as tr}from"./81802759ca.js";import{readBounds as rr,onSettled as nr}from"./da7b5f450d.js";import{registerComponentRenderer as sr,resolveComponentRenderer as lr,listComponentRenderers as cr,registerMaterialResolver as ir,listMaterialResolvers as ur,registerInteraction as dr,runInteraction as pr,listInteractions as mr,onSceneReady as fr,getSceneContext as gr,_resetSceneRegistry as Sr}from"./95a44ebec2.js";import{registerAction as hr,runAction as xr,listActions as vr,actions as Pr,registerIcon as Ir,resolveIcon as Cr,listIcons as Rr,hasIcon as Tr,useIcon as Ar,useHasIcon as br,registerModal as Er,listModals as _r,ModalHost as wr,openModal as Mr,_resetUiRegistry as Or}from"./09c4973968.js";import{setLabels as Br,getLabel as Lr,getLabels as Ur,useLabel as Fr,setLocale as Qr,getLocale as kr,setCurrency as Gr,getCurrency as Vr,isRtl as Hr,formatMoney as Nr,formatNumber as jr,useFormatters as Wr,useLabels as Kr,_resetLabels as $r}from"./28d887bf8a.js";import{computeTargets as Yr,resolveTarget as zr,registerTargetRenderer as Jr,resolveTargetRenderer as Xr,resolveInsertSequence as Zr,_resetTargets as en}from"./58e6419ba8.js";import{default as on}from"./205827c5c8.js";import{registerQuoteTemplate as nn,resolveQuoteTemplate as an,hasQuoteTemplate as sn,useQuoteTemplate as ln,setQuoteTemplate as cn,setBackendQuoteTemplate as un,activeQuoteTemplateKey as dn,activeQuoteDesignKey as pn,listQuoteTemplates as mn,_resetQuoteTemplate as fn}from"./4ba4f544b9.js";import{useUIRegion as Sn,useUIRegions as yn,getUIRegions as hn,UI_REGIONS as xn}from"./9840b9ce12.js";import{default as Pn}from"./b976df09ec.js";import{default as Cn}from"./6c0a2572dd.js";import{default as Tn}from"./cdb4a0f7b3.js";import{default as bn}from"./0f7c8345a8.js";import{default as _n}from"./82a8a4bc35.js";import{default as Mn}from"./e379e0039b.js";import{registerRoute as Dn,resolveRoute as Bn,hasRoute as Ln,listRoutes as Un,useRouteRegistry as Fn,_resetRoutes as Qn}from"./61e0c0c9b5.js";import{hideComponent as Gn,showComponent as Vn,transformComponent as Hn,setComponentMaterial as Nn,clearComponentOverrides as jn,listComponents as Wn,componentOverrideFor as Kn,useComponentOverride as $n,_resetComponentApi as qn}from"./a3c983d431.js";import{setToggles as zn,getToggles as Jn,useHostToggles as Xn,_resetToggles as Zn}from"./41ed5985ad.js";import{registerAssetResolver as ta,hasAssetResolver as oa,resolveAssetUrl as ra,_resetAssetResolver as na}from"./cec035efb1.js";import{registerButton as sa}from"./f1b3b2622a.js";import{SaveProjectButton as ca,GenerateAssetsButton as ia,LiveStatusPanel as ua,ChatBar as da,NotificationContainer as pa,EvaluatingOverlay as ma,Modals as fa,SaveProjectModal as ga,ExportModal as Sa,ARModal as ya,GeneratedAssetsModal as ha,Header as xa,SceneToolbar as va,Sidebar as Pa,SidebarFrame as Ia,OptionSidebar as Ca,LoadingScreen as Ra,ConfirmDialog as Ta,Modal as Aa,Button as ba,ARViewer as Ea,SceneRoom as _a,SceneDimensions as wa,CameraAnimator as Ma}from"./64e9020b49.js";import{default as Da}from"./921bf270dd.js";import{registerLayout as La,resolveLayout as Ua,hasLayout as Fa,listLayouts as Qa,useLayoutRegistry as ka,setLayout as Ga,activeLayoutKey as Va,_resetLayouts as Ha}from"./31ea036f5c.js";import{setQuoteDocument as ja,getQuoteDocument as Wa,hasQuoteDocument as Ka,resetQuoteDocument as $a,subscribeQuoteDocument as qa,QUOTE_COLUMNS as Ya,COLUMN_DEFS as za}from"./12b8165d6d.js";import{useQuoteDocument as Xa}from"./d464da28a5.js";import{generateSilo as es,generateLifestyle as ts,generateAr as os,generateBomPdf as rs,generateAll as ns,generationStatus as as,waitForAssets as ss,ASSET_GROUPS as ls}from"./5d05e8982e.js";import{buildQuotePdfBlob as is,saveQuotePdf as us,registerQuotePdf as ds,registerQuotePdfEndpoint as ps,hasQuotePdf as ms,listQuotePdfBuilders as fs,_resetQuotePdf as gs}from"./d20718159b.js";import{configureSDK as ys}from"./db4afd43c9.js";import{default as xs}from"./7206ce49c6.js";import{default as Ps}from"./d0f9681634.js";import{default as Cs}from"./2990ba64d6.js";import{useSelection as Ts,useProducts as As,usePrice as bs}from"./16a399703e.js";import{getProduct as _s,getProductName as ws,getPlacedProductName as Ms,getProductVariants as Os,listProducts as Ds,getOptionSet as Bs,getOption as Ls,useProduct as Us,listOptionSets as Fs,listSceneOptionSets as Qs,listProductOptionSets as ks,listOptions as Gs,listMaterials as Vs,getMaterial as Hs}from"./1458417bdb.js";import{useBootStatus as js,useSystem as Ws,endBootLoading as Ks,markThemeReady as $s,setEmbedded as qs,setSystemTheme as Ys}from"./066fc9aa40.js";import{default as Js}from"./60d697292c.js";import{default as Zs}from"./811b403d43.js";import{default as tl}from"./6ba86aa3b8.js";import{default as rl}from"./3fb3ab6757.js";import{OptionThumbnail as al,FinishThumbnail as sl,LayoutThumbnail as ll,HostedProductThumbnail as cl,WidthSlider as il,ColorSwatch as ul,FrameSizeButton as dl,ProductFeaturePickers as pl}from"./c12c112c6f.js";import{loadWallMaterial as fl,getConcreteWallMaterial as gl,getWallBoxMaterials as Sl,createWallDiffuse as yl,createWallNormalMap as hl,createWallRoughnessMap as xl}from"./22bd38ddcf.js";import{SelectionBox as Pl,SELECTION_COLOR as Il,SelectionActionPanel as Cl,ProductInstance as Rl,ComponentMesh as Tl,FreeMovable as Al,PlacementGaps as bl,SceneStage as El,SceneEnvironment as _l,applyEnvironmentToRenderer as wl}from"./8a3a57c008.js";import{PLACEMENT_TYPES as Ol,getPlacementType as Dl,resolveReplaceTarget as Bl}from"./4d7a0d1897.js";import{FEATURE_ACTIONS as Ul,resolveFeatureAction as Fl,isAddFeature as Ql}from"./8c27edda0f.js";import{getPlacementStrategy as Gl,resolvePlacementStrategyId as Vl,setPlacementStrategy as Hl,clearPlacementStrategy as Nl,getPlacementStrategyOverride as jl,resolvePlacementStrategyConfig as Wl,setPlacementStrategyConfig as Kl,DEFAULT_STRATEGY_ID as $l,STRATEGIES as ql}from"./281cf952fa.js";import{default as zl}from"./a493e9aa8f.js";import{registerPlacementStrategy as Xl,hasPlacementStrategy as Zl,listPlacementStrategies as ec,currentConfiguratorKey as tc,_resetPlacementStrategies as oc}from"./281cf952fa.js";import{enforceCorners as nc}from"./388cadacbd.js";import{resolveAddMode as sc,armPlacement as lc,disarmPlacement as cc,getPendingPlacement as ic,computeGaps as uc}from"./ab6c80484f.js";import{armHostedProduct as pc,disarmHostedProduct as mc}from"./ab6c80484f.js";import{usePlacementInteraction as gc}from"./4b8958aa4c.js";import{bootConfigurator as yc}from"./371ed78aa2.js";import{setAllowedOrigins as xc,getAllowedOrigins as vc}from"./1e243363f6.js";import{mountConfigurator as Ic}from"./1870fc037b.js";import*as Cc from"./d30f1f506e.js";export*from"./2cafe3274b.js";import{registerCommand as Ac,runCommand as bc,hasCommand as Ec,listCommands as _c,resetCommands as wc,COMMANDS as Mc}from"./d6851ea979.js";import{captureDesignViews as Dc,buildDesignPdf as Bc,saveProject as Lc,loadProject as Uc,restoreProject as Fc,parseShareToken as Qc,buildShareUrl as kc,adoptShareTokenInUrl as Gc,generateArForCurrentScene as Vc}from"./d30f1f506e.js";import{default as Nc}from"./be337ddda5.js";import{default as Wc}from"./872c4302e0.js";import{default as $c}from"./9c6c598569.js";import{default as Yc}from"./8f60e5059a.js";import{default as Jc}from"./1fac915f8b.js";import{default as Zc}from"./3f37665dd1.js";import{default as ti,fetchEmbedBoot as oi}from"./79a397bb92.js";import{getApiKey as ni}from"./431a2d8618.js";import{setApiBaseUrl as si,getApiBaseUrl as li}from"./8ade32d067.js";import{setServiceUrls as ii}from"./9544661159.js";import{applyTheme as di,applyThemeById as pi,themeMode as mi,normalizeThemeId as fi,themeLayoutKey as gi}from"./5c9fd9201c.js";import{validateTheme as yi,checkThemeContrast as hi,contrastRatio as xi,applyCustomCss as vi,applyFontUrl as Pi}from"./b1349d5a21.js";import{default as Ci}from"./f11a45a150.js";import{setEmbedContext as Ti,trackEmbed as Ai}from"./0af28430ab.js";import{CopilotContext as Ei,useCopilotAvailable as _i}from"./672404d987.js";import{checkCopilotAvailability as Mi,getCopilotRuntimeUrl as Oi,getCopilotWarmupUrl as Di,getCopilotApiUrl as Bi,setCopilotApiUrl as Li}from"./fe58a84b85.js";export{ya as ARModal,Ea as ARViewer,ls as ASSET_GROUPS,ba as Button,za as COLUMN_DEFS,Mc as COMMANDS,Ma as CameraAnimator,da as ChatBar,ul as ColorSwatch,Tl as ComponentMesh,_n as ConfigurationSummary,Ta as ConfirmDialog,Ei as CopilotContext,$l as DEFAULT_STRATEGY_ID,Tn as DefaultQuoteTemplate,Bo as EVENTS,ma as EvaluatingOverlay,Sa as ExportModal,Ul as FEATURE_ACTIONS,sl as FinishThumbnail,dl as FrameSizeButton,Al as FreeMovable,ia as GenerateAssetsButton,ha as GeneratedAssetsModal,xa as Header,cl as HostedProductThumbnail,Ao as INTENTS,ll as LayoutThumbnail,ua as LiveStatusPanel,Ra as LoadingScreen,zo as METADATA_LIMITS,Aa as Modal,wr as ModalHost,fa as Modals,pa as NotificationContainer,rl as OptionSetSection,Ca as OptionSidebar,al as OptionThumbnail,Ol as PLACEMENT_TYPES,bl as PlacementGaps,on as PlacementTargets,xs as Popover,pl as ProductFeaturePickers,Rl as ProductInstance,Ya as QUOTE_COLUMNS,Mn as QuoteQr,bn as QuoteRenders,Cn as QuoteView,Il as SELECTION_COLOR,ql as STRATEGIES,ca as SaveProjectButton,ga as SaveProjectModal,wa as SceneDimensions,_l as SceneEnvironment,_a as SceneRoom,El as SceneStage,va as SceneToolbar,Cl as SelectionActionPanel,Pl as SelectionBox,Pa as Sidebar,Ia as SidebarFrame,vo as SlotHost,xn as UI_REGIONS,il as WidthSlider,na as _resetAssetResolver,qn as _resetComponentApi,go as _resetComponents,co as _resetEventBus,Lo as _resetEvents,Vo as _resetHttp,$r as _resetLabels,Ha as _resetLayouts,Jo as _resetMetadata,bo as _resetMiddleware,oc as _resetPlacementStrategies,gs as _resetQuotePdf,fn as _resetQuoteTemplate,Qn as _resetRoutes,Sr as _resetSceneRegistry,Po as _resetSlots,en as _resetTargets,Zn as _resetToggles,Or as _resetUiRegistry,Pr as actions,Va as activeLayoutKey,pn as activeQuoteDesignKey,dn as activeQuoteTemplateKey,Ce as addProduct,Je as addProductFromOption,Gc as adoptShareTokenInUrl,ti as apiService,no as applyBackendPricing,vi as applyCustomCss,wl as applyEnvironmentToRenderer,Pi as applyFontUrl,nt as applyLayoutPreset,Xt as applySceneConfigDefaults,di as applyTheme,pi as applyThemeById,pc as armHostedProduct,lc as armPlacement,yc as bootConfigurator,Yt as buildCanonicalState,Bc as buildDesignPdf,ve as buildFocusContext,is as buildQuotePdfBlob,kc as buildShareUrl,Dc as captureDesignViews,qe as changeHostVariantForProduct,Xe as changeProductVariant,Mi as checkCopilotAvailability,hi as checkThemeContrast,jn as clearComponentOverrides,Nl as clearPlacementStrategy,lt as clearProductOption,ct as clearSceneOption,bt as clearSessionToken,er as collectBom,Zo as collectGenericBom,tr as collectPlacementParts,Kn as componentOverrideFor,uc as computeGaps,Yr as computeTargets,ys as configureSDK,xi as contrastRatio,yl as createWallDiffuse,hl as createWallNormalMap,xl as createWallRoughnessMap,tc as currentConfiguratorKey,eo as dequeuePieceAdd,mc as disarmHostedProduct,cc as disarmPlacement,wt as dispatch,Do as emitEvent,Ks as endBootLoading,nc as enforceCorners,oi as fetchEmbedBoot,Nr as formatMoney,jr as formatNumber,ns as generateAll,os as generateArAsset,Vc as generateArForCurrentScene,rs as generateBomPdf,ts as generateLifestyle,es as generateSilo,as as generationStatus,li as getApiBaseUrl,ni as getApiKey,Ut as getBindingAvailable,yt as getChannelId,gl as getConcreteWallMaterial,Bt as getConfigState,Bi as getCopilotApiUrl,Oi as getCopilotRuntimeUrl,Di as getCopilotWarmupUrl,Vr as getCurrency,kt as getEffectiveSelections,xt as getEmbedSlug,Jt as getHostedProductSpawnSelections,vc as getIframeAllowedOrigins,Lr as getLabel,Ur as getLabels,kr as getLocale,Hs as getMaterial,Ls as getOption,Bs as getOptionSet,ic as getPendingPlacement,Ms as getPlacedProductName,Ft as getPlacementBinding,Qt as getPlacementBindings,Ht as getPlacementOverrides,Gl as getPlacementStrategy,jl as getPlacementStrategyOverride,Dl as getPlacementType,_s as getProduct,ws as getProductName,Os as getProductVariants,Wa as getQuoteDocument,Lt as getResolved,gr as getSceneContext,ut as getSelectedSystemId,Et as getSessionScope,Pt as getShareToken,Nt as getSlotOverride,Jn as getToggles,hn as getUIRegions,Dt as getVersion,Sl as getWallBoxMaterials,oa as hasAssetResolver,Ec as hasCommand,mo as hasComponent,Tr as hasIcon,Fa as hasLayout,Zl as hasPlacementStrategy,Ka as hasQuoteDocument,ms as hasQuotePdf,sn as hasQuoteTemplate,Ln as hasRoute,xo as hasSlot,Go as hasTransport,Gn as hideComponent,zt as hostedProductPlacementId,Se as initConfigEngine,Ql as isAddFeature,Ct as isReadOnlyCredential,Hr as isRtl,vr as listActions,_c as listCommands,fo as listComponentOverrides,cr as listComponentRenderers,Wn as listComponents,Oo as listEvents,Rr as listIcons,mr as listInteractions,Qa as listLayouts,ur as listMaterialResolvers,Vs as listMaterials,To as listMiddleware,_r as listModals,Fs as listOptionSets,Gs as listOptions,ec as listPlacementStrategies,ks as listProductOptionSets,Ds as listProducts,fs as listQuotePdfBuilders,mn as listQuoteTemplates,Un as listRoutes,Qs as listSceneOptionSets,ho as listSlots,Te as loadConfigurator,Uc as loadProject,fl as loadWallMaterial,$s as markThemeReady,Ic as mountConfigurator,rt as moveProduct,fi as normalizeThemeId,Mo as offEvent,so as on,_o as onEvent,Rt as onReadOnlyChange,Fo as onRequest,Qo as onResponse,fr as onSceneReady,nr as onSceneSettled,wo as onceEvent,Mr as openModal,Qc as parseShareToken,dt as pilotFinishSelect,Ye as placeHostedProduct,zl as placementKit,Cc as projects,Zt as queuePieceAdd,No as readBom,Wo as readGeneratedAssets,$o as readMetadata,jo as readQuote,rr as readSceneBounds,ro as recomputePrice,xe as reevaluateForFocus,tt as refreshCanonicalState,hr as registerAction,ta as registerAssetResolver,sa as registerButton,Ac as registerCommand,uo as registerComponent,sr as registerComponentRenderer,lo as registerEffectHandler,Ir as registerIcon,dr as registerInteraction,La as registerLayout,ir as registerMaterialResolver,Er as registerModal,Xl as registerPlacementStrategy,ds as registerQuotePdf,ps as registerQuotePdfEndpoint,nn as registerQuoteTemplate,Dn as registerRoute,yo as registerSlot,Jr as registerTargetRenderer,ot as removeProduct,wc as resetCommands,Gt as resetConfigState,$a as resetQuoteDocument,sc as resolveAddMode,ra as resolveAssetUrl,po as resolveComponent,Kt as resolveComponentMaterial,lr as resolveComponentRenderer,jt as resolveComponentTransform,Wt as resolveComponentVisibility,Fl as resolveFeatureAction,Cr as resolveIcon,Zr as resolveInsertSequence,Ua as resolveLayout,Wl as resolvePlacementStrategyConfig,Vl as resolvePlacementStrategyId,an as resolveQuoteTemplate,Bl as resolveReplaceTarget,Bn as resolveRoute,zr as resolveTarget,Xr as resolveTargetRenderer,at as restoreConfiguration,Yo as restoreMetadata,Fc as restoreProject,xr as runAction,bc as runCommand,Ro as runIntent,pr as runInteraction,Lc as saveProject,us as saveQuotePdf,Ze as seedInitialState,Pe as selectOptionForProduct,ze as selectOptionForScene,it as selectSystem,qo as serializeMetadata,si as setApiBaseUrl,gt as setApiKey,un as setBackendQuoteTemplate,St as setChannelId,Nn as setComponentMaterial,Li as setCopilotApiUrl,Gr as setCurrency,Ti as setEmbedContext,ht as setEmbedSlug,qs as setEmbedded,xc as setIframeAllowedOrigins,Br as setLabels,Ga as setLayout,Qr as setLocale,Ko as setMetadata,Hl as setPlacementStrategy,Kl as setPlacementStrategyConfig,ja as setQuoteDocument,cn as setQuoteTemplate,st as setRoomDimensions,ii as setServiceUrls,vt as setShareToken,Ys as setSystemTheme,zn as setToggles,At as setTokenProvider,ko as setTransport,Vn as showComponent,Ot as subscribe,qa as subscribeQuoteDocument,pt as teardownConfigEngine,gi as themeLayoutKey,mi as themeMode,Ai as trackEmbed,Hn as transformComponent,Re as transformProduct,Co as use,Ci as useAppVersion,js as useBootStatus,$n as useComponentOverride,Nc as useConfigurationGraphStore,_i as useCopilotAvailable,Wr as useFormatters,Da as useGenerateAssets,Zc as useGeneratedAssetsStore,br as useHasIcon,Xn as useHostToggles,Ar as useIcon,Fr as useLabel,Kr as useLabels,ka as useLayoutRegistry,Wc as useObjectGraphStore,Cs as useOptionSets,gc as usePlacementInteraction,bs as usePrice,Us as useProduct,Js as useProductOrder,tl as useProductOverrides,As as useProducts,Xa as useQuoteDocument,ln as useQuoteTemplate,Pn as useReadOnly,Fn as useRouteRegistry,$c as useSceneGraphStore,Ts as useSelection,Zs as useSelectionActions,Ws as useSystem,Ps as useToolbar,Sn as useUIRegion,yn as useUIRegions,Yc as useUIStore,Jc as useUndoRedoStore,yi as validateTheme,ss as waitForAssets,to as wasPieceAddConsumed};
|
package/dist/bcd44b4040.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{HOSTED_PLACEMENT_ID_PREFIX as M,isHostedPlacementId as $,stripHostedPlacementPrefix as N}from"./23dc0ccf32.js";import k,{deriveSceneFeatures as U}from"./be337ddda5.js";import G from"./d94df858ea.js";import w from"./9c6c598569.js";import _ from"./8f60e5059a.js";import j from"./872c4302e0.js";import{isHostFloating as B}from"./061b81ad81.js";import{getProductAllComponents as V,pieceKindOf as q}from"./9326c23506.js";import{autoFixAdjacency as z}from"./710c1ab641.js";import{getPlacementStrategy as X}from"./281cf952fa.js";function K(o){const l=o?.features||{};for(const[d,p]of Object.entries(l))if(p?.type==="appliance_selection")return d;const u=new Set(Object.keys(o?.hostedProductByOptionId||{}));if(u.size>0){for(const[d,p]of Object.entries(l))if((Array.isArray(p?.options)?p.options.map(String):[]).some(a=>u.has(a)))return d}return null}function Y(o,l){if(l==null)return!1;const u=o?.products||{},d=u[l]||u[String(l)];return d?String(d.placement_group??d.placementGroup??"").toLowerCase().includes("overlay"):!1}function Q(o=null){const l=_.getState(),u=j.getState(),d=K(u);if(d==null)return{osId:null,assignments:[]};const p=l.basePiecePositions||{},g=l.hostProductOverrides||{},a=Object.keys(p).filter(n=>!Y(u,g[n]??p[n]?.productId)).sort((n,f)=>n.localeCompare(f,void 0,{numeric:!0})),t=[];for(const n of l.sceneHostedProducts||[]){if(o!=null&&String(n.id)===String(o))continue;const f=n.hostedProductId??n.productId??null;if(f==null)continue;const m=u.getHostedProduct?.(f)?.optionId??null;m!=null&&t.push({instanceId:n.id,variantId:f,optionId:m,replacedPiece:n.replacedPiece??null,pos:Array.isArray(n.position)?n.position:null})}const i=new Map;for(const n of t){const f=String(n.optionId),m=i.get(f);(!m||!m.pos&&n.pos)&&i.set(f,n)}const r=[...i.values()],s=new Set,e=[],c=(n,f)=>{const m=p[f]?.position;if(!Array.isArray(m)||!Array.isArray(n))return 1/0;const I=(m[0]??0)-(n[0]??0),b=(m[1]??0)-(n[1]??0),v=(m[2]??0)-(n[2]??0);return I*I+b*b+v*v},S=r.filter(n=>n.pos),y=new Set(S.map(n=>n.instanceId));for(;y.size;){let n=null;for(const f of S)if(y.has(f.instanceId))for(const m of a){if(s.has(m))continue;const I=c(f.pos,m);(n==null||I<n.d)&&(n={a:f,pieceId:m,d:I})}if(!n)break;s.add(n.pieceId),y.delete(n.a.instanceId),e.push({instanceId:n.a.instanceId,variantId:n.a.variantId,pieceId:n.pieceId,optionId:n.a.optionId})}for(const n of r){if(n.pos)continue;const f=n.replacedPiece&&!s.has(n.replacedPiece)&&p[n.replacedPiece]?n.replacedPiece:a.find(m=>!s.has(m));if(!f)break;s.add(f),e.push({instanceId:n.instanceId,variantId:n.variantId,pieceId:f,optionId:n.optionId})}return{osId:d,assignments:e}}const J=1;function mt(o){const l=N(o);return`${M}${l}`}function Z(o){switch(o){case"left":return"left";case"right":case"side":return"right";case"front":case"front-left":case"front-right":return"front";default:return"back"}}function yt(o,l){const u=k.getState().placementGroups||{},d=Object.keys(u);if(d.length===0)return null;const p=i=>u[i]?.type??u[i]?.kind??null,g=i=>String(u[i]?.wall??u[i]?.location??"").toLowerCase(),a=i=>p(i)===o,t=Z(l);return d.find(i=>a(i)&&g(i)===t)||d.find(i=>a(i)&&g(i).includes(t))||d.find(a)||null}const L="floor_back";function St(){const o=Object.keys(k.getState().placementGroups||{});return o.find(l=>/floor/i.test(l))??o[0]??L}function It(o={}){const l=k.getState(),u=_.getState(),d=j.getState(),p=G.getState().sceneSelections||{},g=w.getState().placementSelections||{},a=[];{const s=w.getState(),e=j.getState(),c=Object.keys(k.getState().placementGroups||{}),S=Object.values(s.productInstances||{}).map(y=>y?.placementGroup).find(Boolean)??null;for(const[y,n]of Object.entries(s.productInstances||{})){if(!n)continue;const f=n.variantId??n.productId??null;if(f==null)continue;const m=e.getProduct?.(n.productId)||e.getProduct?.(f),I=n.placementGroup??m?.placementGroup??m?.placement_group??S??c.find(v=>/floor/i.test(v))??c[0]??L,b=(()=>{const v=n.positionedAbove??n.positioned_above??null;if(v!=null){const O=(s.productInstances||{})[String(v)];return O?.variantId??O?.productId??null}const h=m?.hostVariants??m?.host_variants;if(Array.isArray(h)&&h.length){const O=h.find(x=>x?.isDefault??x?.is_default)||h[0];return O?.hostVariantId??O?.host_variant_id??null}return null})();a.push({id:y,variantId:f,placementGroup:I,sequence:0,...b!=null?{hostVariantId:b}:{},transform:{position:n.position||[0,0,0],rotation:n.rotation||[0,0,0]},selections:g[y]||{},overrides:{},edge:(m?.edge??e.getProduct?.(f)?.edge??"")||null,createdAt:n.createdAt??0})}}{const s=w.getState().productInstances||{};for(const e of a){const c=Number(s[String(e.id)]?.sequence);e.sequence=Number.isFinite(c)?c:0}for(const e of a)e.sequence==null&&(e.sequence=0),delete e.createdAt,delete e.edge}const{osId:t,assignments:i}=Q(o.excludeHostedProductInstanceId??null);if(t!=null){const s=String(t);for(const c of a)c.selections&&s in c.selections&&delete c.selections[s];const e=new Map(a.map(c=>[String(c.id),c]));for(const c of i){const S=e.get(String(c.pieceId));S&&(S.selections[s]=c.optionId)}}const r={};for(const[s,e]of Object.entries(p)){const c=Number(e);!Number.isFinite(c)||!Number.isFinite(Number(s))||(d.features?.[s]?.type??d.features?.[String(s)]?.type)==="load_new_product"||(r[String(s)]=c)}return{schemaVersion:J,systemId:Number(l.systemId)||l.systemId,versionNumber:1,catalogVersion:l.catalogVersion??null,room:(()=>{const s=l.systemRoom||{},e=c=>Number(c)>0?Number(c):null;return{width:(u.roomFootprint?.width>0?u.roomFootprint.width:null)??e(s.width)??4,depth:(u.roomFootprint?.depth>0?u.roomFootprint.depth:null)??e(s.depth)??3.5,height:e(s.height)??2.7}})(),selections:r,placements:a}}function ht(o){if(!Array.isArray(o)||o.length===0)return;try{tt(o)}catch{}const l=_.getState(),u=j.getState();for(const d of o){if(String(d?.reason||"").includes("max_count"))continue;const p=String(d?.variantId??N(d?.id)),g=(l.sceneHostedProducts||[]).find(a=>{if(String(a.hostedProductId)===p)return!0;const t=u.getHostedProduct?.(a.hostedProductId)?.id;return t!=null&&String(t)===p});if(g){try{l.removeHostedProduct?.(g.id)}catch{}const a=g.name||u.getHostedProduct?.(g.hostedProductId)?.name||"Hosted product",t=String(d?.reason||"");let i=`${a} was removed automatically.`;t.includes("mutually_exclusive")?i=`${a} was removed \u2014 it can't be combined with the product you just added.`:(t.includes("positioned_above")||t.includes("cascade"))&&(i=`${a} was removed because the product it was paired with is no longer in the scene.`);try{l.showInfo?.(i)}catch{}}}}let R="",W=0;function tt(o){const l=(Array.isArray(o)?o:[]).filter(f=>String(f?.reason||"").includes("max_count"));if(l.length===0)return;const u=_.getState(),d=u.pieceConfigSnapshot;if(!d||typeof d!="object")return;const p=u.basePiecePositions||{},g=u.hostProductOverrides||{},a=f=>String(g[f]??p[f]?.productId??""),t={};for(const f of l){const m=String(f?.variantId??String(f?.id??"").replace(/^.*?-/,""));m&&(t[m]=(t[m]||0)+1)}const i=Object.entries(t).map(([f,m])=>`${f}:${m}`).sort().join(","),r=Date.now();if(i&&i===R&&r-W<6e3)return;const s=[];for(const[f,m]of Object.entries(t)){const I=Object.keys(p).filter(b=>a(b)===f).sort((b,v)=>b.localeCompare(v,void 0,{numeric:!0}));s.push(...I.slice(Math.max(0,I.length-m)))}if(s.length===0)return;const e={...d};for(const f of s){const m=f.indexOf("-");if(m===-1)continue;const I=f.slice(0,m),b=Number(f.slice(m+1));Array.isArray(e[I])&&(e[I]=e[I].filter(h=>h!==b));const v=`${I}ByWall`;if(e[v]&&typeof e[v]=="object"){const h={};for(const[O,x]of Object.entries(e[v]))h[O]=Array.isArray(x)?x.filter(H=>H!==b):x;e[v]=h}if(I==="corner"&&e.cornerPositions&&typeof e.cornerPositions=="object"){const h={...e.cornerPositions};delete h[b],e.cornerPositions=h}}const c=new Set(s),S=f=>{const m={...f};for(const I of c)delete m[I];return m},y={pieceConfigSnapshot:e};for(const f of["hostProductOverrides","hostWidths","hostDoorTypes","hostStyles","hostHandleTypes","hostFinishes","hostMaterials","hostHardwareFinishes"])u[f]&&typeof u[f]=="object"&&(y[f]=S(u[f]));_.setState(y);const n=_.getState().selectedPieceIndex;n&&c.has(n)&&_.getState().clearSelectedFeature?.(),R=i,W=r}function Pt(o){const l=(Array.isArray(o)?o:[]).filter(a=>String(a?.code??a?.type??"").toUpperCase()!=="STALE_SELECTION"),u=_.getState().setConstraintWarnings;if(typeof u!="function")return;const d=k.getState().constraints||[],p=new Map(d.map(a=>[String(a.id),a.constraintType??a.constraint_type??null])),g=l.map(a=>{const t=a?.details?.constraintId??a?.constraintId??null;return{code:a?.code??a?.type??"CONSTRAINT_VIOLATION_SOFT",message:a?.message??String(a??""),constraintId:t,constraintType:t!=null?p.get(String(t))??null:null,placementId:a?.details?.placementId??null,offending:Array.isArray(a?.details?.offending)?a.details.offending:[]}});u(g);try{z(g)}catch{}}function D(o){const l=String(o??"info").toLowerCase();return l==="success"||l==="warning"||l==="error"?l:"info"}function bt(o){const l=_.getState(),u=(Array.isArray(o)?o:[]).map(t=>{const i=t||{};return{ruleId:i.ruleId??i.rule_id??null,text:i.text??i.message??"",severity:String(i.severity??"info").toLowerCase(),display:String(i.display??"toast").toLowerCase(),placementId:i.placementId??i.placement_id??null}}).filter(t=>t.text),d=u.filter(t=>t.display==="modal"),p=u.filter(t=>t.display!=="modal");try{l.setInlineMessages?.([])}catch{}for(const t of p){const i=D(t.severity),r=i==="warning"||i==="error"?0:5e3;try{l.addNotification?.({type:i,message:t.text,duration:r})}catch{}}const g=d.map(t=>t.ruleId??t.text??null).filter(t=>t!=null),a=Array.isArray(l.lastModalKeys)?l.lastModalKeys:[];if(d.length){const t=d[d.length-1],i=t.ruleId??t.text??null;if(i==null||!a.includes(i))try{l.setMessageModal?.({ruleId:t.ruleId,text:t.text,severity:D(t.severity)})}catch{}}try{_.setState({lastModalKeys:g})}catch{}}function At(o,l){if(!Array.isArray(o)||o.length===0)return;const u=_.getState(),d=j.getState(),p=u.basePiecePositions||{};let g=!1;for(const a of o){const t=a?.variantId??String(a?.id??"").replace(/^.*?-/,"");if(t==null||t===""||(u.sceneHostedProducts||[]).some(y=>{if(String(y.hostedProductId)===String(t))return!0;const n=d.getHostedProduct?.(y.hostedProductId)?.id;return n!=null&&String(n)===String(t)}))continue;const r=d.getHostedProduct?.(t);if(!r?.id)continue;let s=r.modelUrl;s||(s=(V(r.id)||[]).find(n=>!!n.url)?.url||null);const e=(l?.placements||[]).find(y=>String(y.id)===String(a.id));let c=e?.hostPlacementId&&p[e.hostPlacementId]?e.hostPlacementId:null;if(!c){const y=(u.sceneHostedProducts||[]).find(n=>B(n)&&n.replacedPiece);y?.replacedPiece&&p[y.replacedPiece]&&(c=y.replacedPiece)}if(c||(c=Object.keys(p).sort((y,n)=>y.localeCompare(n,void 0,{numeric:!0})).find(y=>q(y)==="base"&&p[y]?.position)||null),!c||!p[c]?.position)continue;const S=p[c];try{u.placeHostedProductAtPiece?.({...r,modelUrl:s},c,S.position,S.rotation||[0,0,0]),g=!0}catch{}}}let C=[],et=0;function _t(o){const l=++et;return C.push({token:l,req:o,consumed:!1}),l}function vt(o){C=C.filter(l=>l.token!==o)}function Ot(o){const u=!!C.find(d=>d.token===o)?.consumed;return C=C.filter(d=>d.token!==o),u}function xt(o){if(C.length===0)return 0;const l=Array.isArray(o?.placements)?o.placements:[];if(l.length===0)return 0;const u=j.getState(),d=_.getState(),p=d.basePiecePositions||{};let g=0;for(const a of C){if(a.consumed)continue;const t=String(a.req.productId);l.find(r=>{if(p[r.id])return!1;const s=r.variantId??String(r.id??"");return!(String(s)!==t||u.getHostedProduct?.(s)?.id)})&&(d.setPendingPieceAdd({...a.req,_preValidated:!0,_fromResponse:!0}),a.consumed=!0,g+=1)}return g}function wt(o){if(!o||typeof o!="object")return;const l=o.selections||{},u=G.getState(),d=u.sceneSelections||{};for(const[p,g]of Object.entries(l)){const a=Number(g);if(Number.isFinite(a)&&!(d[p]!=null||d[String(p)]!=null))try{(u.setSeededSceneSelection??u.setSceneSelection)?.(p,a)}catch{}}}function Ht(o){const d=(k.getState().sceneConfigurations||{})[o];if(!d)return!1;const p=G.getState(),g=w.getState(),a=j.getState();d?.scene_id&&g.setActiveSceneId?.(d.scene_id);const t=U(d);for(const i of t)i.id&&i.default_option_id&&p.setSceneSelection(i.id,i.default_option_id);if(t.length>0){const i=a.options||{};for(const r of t){if(!r?.id)continue;const s=r.type;if(s!=="layout_change"&&s!=="load_configuration")continue;let e=d.scene_option_id??d.sceneOptionId??null;if(e==null){const c=a.features||{},S=r.feature_id??r.id,y=c[S]??c[String(S)],n=Array.isArray(y?.options)?y.options:[];for(const f of n){const m=typeof f=="object"?f?.id??f?.optionId??f?.option_id:f;if(m==null)continue;const I=i[m]??i[String(m)];if(!I)continue;if([I.value,I.valueText,I.value_text,I.id].filter(v=>v!=null).map(String).includes(String(o))){e=I.id;break}}}e!=null&&p.setSceneSelection(r.id,e)}}if(d.default_scene_selections)for(const[i,r]of Object.entries(d.default_scene_selections))p.setSceneSelection(i,r);return g.setSceneLoading?.(!1),!0}function nt(o){const l=Array.isArray(o?.placements)?o.placements:[],u=l.filter(g=>g?.positionedAbove!=null);if(u.length===0)return;const d=j.getState(),p=_.getState().basePiecePositions||{};for(const g of u){const a=g.variantId??N(g.id),t=d.getHostedProduct?.(a);if(!t?.id)continue;const i=l.find(A=>String(A.id)===String(g.positionedAbove)),r=i?.variantId??(i?N(i.id):null);if(r==null)continue;const s=(_.getState().sceneHostedProducts||[]).find(A=>{if(String(A.hostedProductId)===String(r))return!0;const P=d.getHostedProduct?.(A.hostedProductId)?.id;return P!=null&&String(P)===String(r)}),e=s?.replacedPiece,c=e&&p[e]?.position?p[e]:null,S=c?.position??s?.position??null,y=c?.rotation??s?.rotation??[0,0,0];if(!S)continue;let n=0;if(c){const A=d.getHostedProduct?.(r),P=c.productId||A?.target_product_id;n=(A?.slots?.find(F=>F.product_id===P)||A?.slots?.find(F=>F.isDefault)||A?.slots?.[0])?.position?.[0]??A?.componentModelOffset?.[0]??0}const f=S[0];let m=S[1]+1.5;for(const[A,P]of Object.entries(p))if(q(A)==="upper"&&Math.abs((P.position?.[0]??1/0)-f)<.5){m=P.position[1];break}const I=m-S[1]+.25,b=(y||[0,0,0])[1],v=Math.cos(b),h=Math.sin(b),O=[n,I,0],x=[S[0]+n*v,S[1]+I,S[2]-n*h];let H=t.modelUrl;H||(H=(V(t.id)||[]).find(P=>!!P.url)?.url||null);const T=(_.getState().sceneHostedProducts||[]).find(A=>{if(String(A.hostedProductId)===String(t.id))return!0;const P=d.getHostedProduct?.(A.hostedProductId)?.id;return P!=null&&String(P)===String(t.id)});if(T)_.setState(A=>({sceneHostedProducts:A.sceneHostedProducts.map(P=>P.id===T.id?{...P,position:x,rotation:y||[0,0,0],positionOffset:O,replacedPiece:e??P.replacedPiece,pairedWithPiece:e??P.pairedWithPiece,pairedWithHostedProductId:s?.id??P.pairedWithHostedProductId}:P)}));else{const A=String(g.id??`${M}${t.id}`);_.setState(P=>({sceneHostedProducts:[...P.sceneHostedProducts,{id:A,hostedProductId:t.id,name:t.name,modelUrl:H,position:x,rotation:y||[0,0,0],scale:t.scale||[1,1,1],placement_type:t.placement_type,replacedPiece:e??null,positionOffset:O,pairedWithPiece:e??null,pairedWithHostedProductId:s?.id??null}],...e?{occupiedPieceSlots:{...P.occupiedPieceSlots,[e]:{...P.occupiedPieceSlots[e],pairedHostedProductId:A}}}:{}}))}}}const E=()=>{try{const o=X();return!!o&&typeof o.computeLayout!="function"}catch{return!1}};function jt(o){if(!o||!Array.isArray(o.placements))return;const u=w.getState().productInstances||{};let d=!1;try{d=!!_.getState().ownsSceneGraph}catch{}if(E())return;const p={};let g=!1;for(const r of o.placements){const s=String(r.id??"");if(!s)continue;const e=[r.transform,r.default_transform,r.defaultTransform,Array.isArray(r.position)?{position:r.position,rotation:r.rotation}:null].find(y=>y&&Array.isArray(y.position))||{},c=u[s],S={id:s,instanceId:s,placementId:s,productId:r.variantId,variantId:r.variantId,configId:null,placementGroup:r.placementGroup??null,sequence:Number.isFinite(Number(r.sequence))?Number(r.sequence):null,positionedAbove:r.positionedAbove??r.positioned_above??r.hostPlacementId??r.host_placement_id??r.host??null,lockVariantId:r.lockVariantId??r.lock_variant_id??null,position:Array.isArray(e.position)?e.position:[0,0,0],rotation:Array.isArray(e.rotation)?e.rotation:[0,0,0],scale:[1,1,1],locked:r.locked===!0,createdAt:c?.createdAt??(d?Date.now()+(Number.isFinite(Number(r.sequence))?Number(r.sequence):0):Date.now())};p[s]=S,(!c||c.productId!==S.productId||c.position!==S.position||c.rotation!==S.rotation||c.locked!==S.locked)&&(g=!0)}for(const[r,s]of Object.entries(u))r in p||(g=!0);const a=Object.entries(u).filter(([r])=>!(r in p));let t=a;Object.keys(p).length>0&&(t=[]);const i=t.length!==a.length;!g&&!i||w.setState({productInstances:{...Object.fromEntries(t),...p}})}function Ct(o){if(!o||!Array.isArray(o.placements))return;try{if(!_.getState().ownsSceneGraph)return}catch{return}const l=w.getState(),u=l.productInstances||{},d=l.componentStates||{},p={...u},g={...d};let a=!1;if(!E()){for(const t of o.placements){const i=String(t.id??""),r=u[i];if(!r)continue;const s=t.variantId;s!=null&&(String(r.productId)===String(s)&&String(r.variantId??r.productId)===String(s)||(p[i]={...r,productId:s,variantId:s},g[i]&&(g[i]={}),a=!0))}a&&w.setState({productInstances:p,componentStates:g})}}function ot(o){if(!o||!Array.isArray(o.placements))return;try{if(!_.getState().ownsSceneGraph)return}catch{return}const u=w.getState().productInstances||{},d={};for(const t of o.placements){const i=String(t?.id??"");i&&(d[i]=t)}const p=t=>{const r=d[String(t?.id??"")]?.transform?.position?.[1];return typeof r=="number"&&r>0?r:null},g={...u};let a=!1;for(const[t,i]of Object.entries(u)){const r=p(i);if(r==null)continue;const s=Array.isArray(i.position)?i.position:[0,0,0];Math.abs((s[1]||0)-r)<1e-6||(g[t]={...i,position:[s[0]||0,r,s[2]||0]},a=!0)}a&&w.setState({productInstances:g})}function kt(o){if(!o||!Array.isArray(o.placements))return;const l=_.getState(),u=j.getState(),d=u.componentGroups||{},p=u.components||{},g={},a={},t=(s,e,c)=>{e!=null&&(s!=null&&(g[String(s)]={variantKey:e,isHandle:c}),a[String(e)]=c)};for(const s of Object.values(d)){const e=c=>(p[c]?.type??p[String(c)]?.type)==="handle";for(const[c,S]of Object.entries(s?.variants||{}))t(S,c,e(S));for(const c of Array.isArray(s?.members)?s.members:[]){const S=c?.componentId??c?.component_id;t(S,c?.variantKey??c?.variant_key,e(S))}}const i=(s,e)=>{const c=g[String(e)];return c||{variantKey:e,isHandle:a[String(e)]??!1}},r=K(u);for(const s of o.placements){const e=s.id;if(!e)continue;if(s.selections&&typeof s.selections=="object"){let h=s.selections;r!=null&&String(r)in h&&(h={...h},delete h[String(r)]),w.getState().setPlacementSelections?.(e,h)}if($(String(e)))continue;const c=s.overrides||{},S=c.materials;if(S&&typeof S=="object")for(const[h,O]of Object.entries(S))O!=null&&l.setHostMaterialOverride(e,h,O);const y=c.componentSlots||c.component_slots,n=[];if(y&&typeof y=="object"){const h=w.getState();for(const[O,x]of Object.entries(y)){if(x===null){n.push(O),h.setComponentSwap?.(e,O,null);continue}if(x===void 0)continue;h.setComponentSwap?.(e,O,x);const{variantKey:H,isHandle:T}=i(O,x);H!=null&&(T?l.setHostHandleType?.(e,H):l.setHostStyle?.(e,H))}}const f=c.visibility&&typeof c.visibility=="object"?{...c.visibility}:null,m=f||n.length?f||{}:null;for(const h of n)m[h]===void 0&&(m[h]=!1);const I=c.transforms||c.transform,b=c.hiddenComponentIds||c.hidden_component_ids,v=Array.isArray(b)&&b.length?b.map(Number):null;if(w.getState().setPlacementOverrides?.(e,{visibility:m,transforms:I&&typeof I=="object"?I:null,hiddenComponentIds:v}),m)for(const[h,O]of Object.entries(m))O===!1&&String(h).toLowerCase().includes("handle")&&l.setHostHandleType?.(e,"none")}nt(o),ot(o)}export{L as DEFAULT_PLACEMENT_GROUP,At as applyAddedPlacements,wt as applyInitialSelections,bt as applyMessages,ot as applyOwnedTransforms,tt as applyPresetPieceTrims,ht as applyRemovedPlacements,xt as applyResolvedPieceAdds,kt as applyResolvedToScene,Ht as applySceneConfigDefaults,nt as applyWallMountedPlacements,Pt as applyWarnings,It as buildCanonicalState,vt as dequeuePieceAdd,Q as getHostedProductSpawnSelections,mt as hostedProductPlacementId,jt as hydrateProductInstancesFromState,Y as isOverlayPlacementProduct,_t as queuePieceAdd,yt as resolveDeclaredPlacementGroup,St as resolveDefaultFloorPlacementGroup,Ct as syncOwnedInstanceVariants,Ot as wasPieceAddConsumed};
|
|
1
|
+
import{HOSTED_PLACEMENT_ID_PREFIX as M,isHostedPlacementId as $,stripHostedPlacementPrefix as N}from"./23dc0ccf32.js";import k,{deriveSceneFeatures as B}from"./be337ddda5.js";import F from"./d94df858ea.js";import x from"./9c6c598569.js";import _ from"./8f60e5059a.js";import H from"./872c4302e0.js";import{isHostFloating as z}from"./061b81ad81.js";import{getProductAllComponents as V,pieceKindOf as L}from"./9326c23506.js";import{autoFixAdjacency as X}from"./710c1ab641.js";import{getPlacementStrategy as Y}from"./281cf952fa.js";import{resolveHostVariantId as Q}from"./be07a7f885.js";import{isAddFeature as E}from"./8c27edda0f.js";function R(e){const l=e?.features||{};for(const[a,p]of Object.entries(l))if(p?.type==="appliance_selection")return a;const u=new Set(Object.keys(e?.hostedProductByOptionId||{}));if(u.size>0){for(const[a,p]of Object.entries(l))if((Array.isArray(p?.options)?p.options.map(String):[]).some(d=>u.has(d)))return a}return null}function J(e,l){if(l==null)return!1;const u=e?.products||{},a=u[l]||u[String(l)];return a?String(a.placement_group??a.placementGroup??"").toLowerCase().includes("overlay"):!1}function Z(e=null){const l=_.getState(),u=H.getState(),a=R(u);if(a==null)return{osId:null,assignments:[]};const p=l.basePiecePositions||{},f=l.hostProductOverrides||{},d=Object.keys(p).filter(s=>!J(u,f[s]??p[s]?.productId)).sort((s,g)=>s.localeCompare(g,void 0,{numeric:!0})),t=[];for(const s of l.sceneHostedProducts||[]){if(e!=null&&String(s.id)===String(e))continue;const g=s.hostedProductId??s.productId??null;if(g==null)continue;const m=u.getHostedProduct?.(g)?.optionId??null;m!=null&&t.push({instanceId:s.id,variantId:g,optionId:m,replacedPiece:s.replacedPiece??null,pos:Array.isArray(s.position)?s.position:null})}const o=new Map;for(const s of t){const g=String(s.optionId),m=o.get(g);(!m||!m.pos&&s.pos)&&o.set(g,s)}const i=[...o.values()],r=new Set,n=[],c=(s,g)=>{const m=p[g]?.position;if(!Array.isArray(m)||!Array.isArray(s))return 1/0;const I=(m[0]??0)-(s[0]??0),b=(m[1]??0)-(s[1]??0),v=(m[2]??0)-(s[2]??0);return I*I+b*b+v*v},y=i.filter(s=>s.pos),S=new Set(y.map(s=>s.instanceId));for(;S.size;){let s=null;for(const g of y)if(S.has(g.instanceId))for(const m of d){if(r.has(m))continue;const I=c(g.pos,m);(s==null||I<s.d)&&(s={a:g,pieceId:m,d:I})}if(!s)break;r.add(s.pieceId),S.delete(s.a.instanceId),n.push({instanceId:s.a.instanceId,variantId:s.a.variantId,pieceId:s.pieceId,optionId:s.a.optionId})}for(const s of i){if(s.pos)continue;const g=s.replacedPiece&&!r.has(s.replacedPiece)&&p[s.replacedPiece]?s.replacedPiece:d.find(m=>!r.has(m));if(!g)break;r.add(g),n.push({instanceId:s.instanceId,variantId:s.variantId,pieceId:g,optionId:s.optionId})}return{osId:a,assignments:n}}const tt=1;function ht(e){const l=N(e);return`${M}${l}`}function et(e){switch(e){case"left":return"left";case"right":case"side":return"right";case"front":case"front-left":case"front-right":return"front";default:return"back"}}function Pt(e,l){const u=k.getState().placementGroups||{},a=Object.keys(u);if(a.length===0)return null;const p=o=>u[o]?.type??u[o]?.kind??null,f=o=>String(u[o]?.wall??u[o]?.location??"").toLowerCase(),d=o=>p(o)===e,t=et(l);return a.find(o=>d(o)&&f(o)===t)||a.find(o=>d(o)&&f(o).includes(t))||a.find(d)||null}const q="floor_back";function bt(){const e=Object.keys(k.getState().placementGroups||{});return e.find(l=>/floor/i.test(l))??e[0]??q}function At(e={}){const l=k.getState(),u=_.getState(),a=H.getState(),p=F.getState().sceneSelections||{},f=x.getState().placementSelections||{},d=[];{const r=x.getState(),n=H.getState(),c=Object.keys(k.getState().placementGroups||{}),y=Object.values(r.productInstances||{}).map(S=>S?.placementGroup).find(Boolean)??null;for(const[S,s]of Object.entries(r.productInstances||{})){if(!s)continue;const g=s.variantId??s.productId??null;if(g==null)continue;const m=n.getProduct?.(s.productId)||n.getProduct?.(g),I=s.placementGroup??m?.placementGroup??m?.placement_group??y??c.find(v=>/floor/i.test(v))??c[0]??q,b=(()=>{const v=s.positionedAbove??s.positioned_above??null;if(v!=null){const h=(r.productInstances||{})[String(v)];return h?.variantId??h?.productId??null}return Q(m,s)})();d.push({id:S,variantId:g,placementGroup:I,sequence:0,...b!=null?{hostVariantId:b}:{},transform:{position:s.position||[0,0,0],rotation:s.rotation||[0,0,0]},selections:f[S]||{},overrides:{},edge:(m?.edge??n.getProduct?.(g)?.edge??"")||null,createdAt:s.createdAt??0})}}{const r=x.getState().productInstances||{};for(const n of d){const c=Number(r[String(n.id)]?.sequence);n.sequence=Number.isFinite(c)?c:0}for(const n of d)n.sequence==null&&(n.sequence=0),delete n.createdAt,delete n.edge}const{osId:t,assignments:o}=Z(e.excludeHostedProductInstanceId??null);if(t!=null){const r=String(t);for(const c of d)c.selections&&r in c.selections&&delete c.selections[r];const n=new Map(d.map(c=>[String(c.id),c]));for(const c of o){const y=n.get(String(c.pieceId));y&&(y.selections[r]=c.optionId)}}const i={};for(const[r,n]of Object.entries(p)){const c=Number(n);!Number.isFinite(c)||!Number.isFinite(Number(r))||(a.features?.[r]?.type??a.features?.[String(r)]?.type)==="load_new_product"||(i[String(r)]=c)}return{schemaVersion:tt,systemId:Number(l.systemId)||l.systemId,versionNumber:1,catalogVersion:l.catalogVersion??null,room:(()=>{const r=l.systemRoom||{},n=c=>Number(c)>0?Number(c):null;return{width:(u.roomFootprint?.width>0?u.roomFootprint.width:null)??n(r.width)??4,depth:(u.roomFootprint?.depth>0?u.roomFootprint.depth:null)??n(r.depth)??3.5,height:n(r.height)??2.7}})(),selections:i,placements:d}}function _t(e){if(!Array.isArray(e)||e.length===0)return;try{nt(e)}catch{}const l=_.getState(),u=H.getState();for(const a of e){if(String(a?.reason||"").includes("max_count"))continue;const p=String(a?.variantId??N(a?.id)),f=(l.sceneHostedProducts||[]).find(d=>{if(String(d.hostedProductId)===p)return!0;const t=u.getHostedProduct?.(d.hostedProductId)?.id;return t!=null&&String(t)===p});if(f){try{l.removeHostedProduct?.(f.id)}catch{}const d=f.name||u.getHostedProduct?.(f.hostedProductId)?.name||"Hosted product",t=String(a?.reason||"");let o=`${d} was removed automatically.`;t.includes("mutually_exclusive")?o=`${d} was removed \u2014 it can't be combined with the product you just added.`:(t.includes("positioned_above")||t.includes("cascade"))&&(o=`${d} was removed because the product it was paired with is no longer in the scene.`);try{l.showInfo?.(o)}catch{}}}}let K="",D=0;function nt(e){const l=(Array.isArray(e)?e:[]).filter(g=>String(g?.reason||"").includes("max_count"));if(l.length===0)return;const u=_.getState(),a=u.pieceConfigSnapshot;if(!a||typeof a!="object")return;const p=u.basePiecePositions||{},f=u.hostProductOverrides||{},d=g=>String(f[g]??p[g]?.productId??""),t={};for(const g of l){const m=String(g?.variantId??String(g?.id??"").replace(/^.*?-/,""));m&&(t[m]=(t[m]||0)+1)}const o=Object.entries(t).map(([g,m])=>`${g}:${m}`).sort().join(","),i=Date.now();if(o&&o===K&&i-D<6e3)return;const r=[];for(const[g,m]of Object.entries(t)){const I=Object.keys(p).filter(b=>d(b)===g).sort((b,v)=>b.localeCompare(v,void 0,{numeric:!0}));r.push(...I.slice(Math.max(0,I.length-m)))}if(r.length===0)return;const n={...a};for(const g of r){const m=g.indexOf("-");if(m===-1)continue;const I=g.slice(0,m),b=Number(g.slice(m+1));Array.isArray(n[I])&&(n[I]=n[I].filter(h=>h!==b));const v=`${I}ByWall`;if(n[v]&&typeof n[v]=="object"){const h={};for(const[O,w]of Object.entries(n[v]))h[O]=Array.isArray(w)?w.filter(j=>j!==b):w;n[v]=h}if(I==="corner"&&n.cornerPositions&&typeof n.cornerPositions=="object"){const h={...n.cornerPositions};delete h[b],n.cornerPositions=h}}const c=new Set(r),y=g=>{const m={...g};for(const I of c)delete m[I];return m},S={pieceConfigSnapshot:n};for(const g of["hostProductOverrides","hostWidths","hostDoorTypes","hostStyles","hostHandleTypes","hostFinishes","hostMaterials","hostHardwareFinishes"])u[g]&&typeof u[g]=="object"&&(S[g]=y(u[g]));_.setState(S);const s=_.getState().selectedPieceIndex;s&&c.has(s)&&_.getState().clearSelectedFeature?.(),K=o,D=i}function vt(e){const l=(Array.isArray(e)?e:[]).filter(d=>{const t=String(d?.code??d?.type??"").toUpperCase();return t!=="STALE_SELECTION"&&t!=="RULE_APPLIED"}),u=_.getState().setConstraintWarnings;if(typeof u!="function")return;const a=k.getState().constraints||[],p=new Map(a.map(d=>[String(d.id),d.constraintType??d.constraint_type??null])),f=l.map(d=>{const t=d?.details?.constraintId??d?.constraintId??null;return{code:d?.code??d?.type??"CONSTRAINT_VIOLATION_SOFT",message:d?.message??String(d??""),constraintId:t,constraintType:t!=null?p.get(String(t))??null:null,placementId:d?.details?.placementId??null,offending:Array.isArray(d?.details?.offending)?d.details.offending:[]}});u(f);try{X(f)}catch{}}function W(e){const l=String(e??"info").toLowerCase();return l==="success"||l==="warning"||l==="error"?l:"info"}function Ot(e){const l=_.getState(),u=(Array.isArray(e)?e:[]).map(t=>{const o=t||{};return{ruleId:o.ruleId??o.rule_id??null,text:o.text??o.message??"",severity:String(o.severity??"info").toLowerCase(),display:String(o.display??"toast").toLowerCase(),placementId:o.placementId??o.placement_id??null,code:String(o.code??"").toUpperCase()}}).filter(t=>t.text&&t.code!=="RULE_APPLIED"),a=u.filter(t=>t.display==="modal"),p=u.filter(t=>t.display!=="modal");try{l.setInlineMessages?.([])}catch{}for(const t of p){const o=W(t.severity),i=o==="warning"||o==="error"?0:5e3;try{l.addNotification?.({type:o,message:t.text,duration:i})}catch{}}const f=a.map(t=>t.ruleId??t.text??null).filter(t=>t!=null),d=Array.isArray(l.lastModalKeys)?l.lastModalKeys:[];if(a.length){const t=a[a.length-1],o=t.ruleId??t.text??null;if(o==null||!d.includes(o))try{l.setMessageModal?.({ruleId:t.ruleId,text:t.text,severity:W(t.severity)})}catch{}}try{_.setState({lastModalKeys:f})}catch{}}function xt(e,l){if(!Array.isArray(e)||e.length===0)return;const u=_.getState(),a=H.getState(),p=u.basePiecePositions||{};let f=!1;for(const d of e){const t=d?.variantId??String(d?.id??"").replace(/^.*?-/,"");if(t==null||t===""||(u.sceneHostedProducts||[]).some(S=>{if(String(S.hostedProductId)===String(t))return!0;const s=a.getHostedProduct?.(S.hostedProductId)?.id;return s!=null&&String(s)===String(t)}))continue;const i=a.getHostedProduct?.(t);if(!i?.id)continue;let r=i.modelUrl;r||(r=(V(i.id)||[]).find(s=>!!s.url)?.url||null);const n=(l?.placements||[]).find(S=>String(S.id)===String(d.id));let c=n?.hostPlacementId&&p[n.hostPlacementId]?n.hostPlacementId:null;if(!c){const S=(u.sceneHostedProducts||[]).find(s=>z(s)&&s.replacedPiece);S?.replacedPiece&&p[S.replacedPiece]&&(c=S.replacedPiece)}if(c||(c=Object.keys(p).sort((S,s)=>S.localeCompare(s,void 0,{numeric:!0})).find(S=>L(S)==="base"&&p[S]?.position)||null),!c||!p[c]?.position)continue;const y=p[c];try{u.placeHostedProductAtPiece?.({...i,modelUrl:r},c,y.position,y.rotation||[0,0,0]),f=!0}catch{}}}let C=[],ot=0;function wt(e){const l=++ot;return C.push({token:l,req:e,consumed:!1}),l}function Ht(e){C=C.filter(l=>l.token!==e)}function jt(e){const u=!!C.find(a=>a.token===e)?.consumed;return C=C.filter(a=>a.token!==e),u}function Ct(e){if(C.length===0)return 0;const l=Array.isArray(e?.placements)?e.placements:[];if(l.length===0)return 0;const u=H.getState(),a=_.getState(),p=a.basePiecePositions||{};let f=0;for(const d of C){if(d.consumed)continue;const t=String(d.req.productId);l.find(i=>{if(p[i.id])return!1;const r=i.variantId??String(i.id??"");return!(String(r)!==t||u.getHostedProduct?.(r)?.id)})&&(a.setPendingPieceAdd({...d.req,_preValidated:!0,_fromResponse:!0}),d.consumed=!0,f+=1)}return f}function kt(e){if(!Array.isArray(e)||e.length===0)return;const l=F.getState(),u=x.getState();for(const a of e){const p=a?.optionSetId,f=Number(a?.optionId);if(!(p==null||!Number.isFinite(f)))try{if(a.placementId==null)(l.setSeededSceneSelection??l.setSceneSelection)?.(p,f);else{const d=a.placementId,t=u.placementSelections?.[d]??u.placementSelections?.[String(d)]??{};u.setPlacementSelections?.(d,{...t,[String(p)]:f})}}catch{}}}function Tt(e){if(!e||typeof e!="object")return;const l=e.selections||{},u=F.getState(),a=u.sceneSelections||{},p=H.getState().features||{};for(const[f,d]of Object.entries(l)){const t=Number(d);if(!Number.isFinite(t)||a[f]!=null||a[String(f)]!=null)continue;const o=p[f]??p[String(f)];if(!(o&&E(o)))try{(u.setSeededSceneSelection??u.setSceneSelection)?.(f,t)}catch{}}}function Nt(e){const a=(k.getState().sceneConfigurations||{})[e];if(!a)return!1;const p=F.getState(),f=x.getState(),d=H.getState();a?.scene_id&&f.setActiveSceneId?.(a.scene_id);const t=B(a);for(const o of t)o.id&&o.default_option_id&&!E(o)&&p.setSceneSelection(o.id,o.default_option_id);if(t.length>0){const o=d.options||{};for(const i of t){if(!i?.id)continue;const r=i.type;if(r!=="layout_change"&&r!=="load_configuration")continue;let n=a.scene_option_id??a.sceneOptionId??null;if(n==null){const c=d.features||{},y=i.feature_id??i.id,S=c[y]??c[String(y)],s=Array.isArray(S?.options)?S.options:[];for(const g of s){const m=typeof g=="object"?g?.id??g?.optionId??g?.option_id:g;if(m==null)continue;const I=o[m]??o[String(m)];if(!I)continue;if([I.value,I.valueText,I.value_text,I.id].filter(v=>v!=null).map(String).includes(String(e))){n=I.id;break}}}n!=null&&p.setSceneSelection(i.id,n)}}if(a.default_scene_selections)for(const[o,i]of Object.entries(a.default_scene_selections))p.setSceneSelection(o,i);return f.setSceneLoading?.(!1),!0}function st(e){const l=Array.isArray(e?.placements)?e.placements:[],u=l.filter(f=>f?.positionedAbove!=null);if(u.length===0)return;const a=H.getState(),p=_.getState().basePiecePositions||{};for(const f of u){const d=f.variantId??N(f.id),t=a.getHostedProduct?.(d);if(!t?.id)continue;const o=l.find(A=>String(A.id)===String(f.positionedAbove)),i=o?.variantId??(o?N(o.id):null);if(i==null)continue;const r=(_.getState().sceneHostedProducts||[]).find(A=>{if(String(A.hostedProductId)===String(i))return!0;const P=a.getHostedProduct?.(A.hostedProductId)?.id;return P!=null&&String(P)===String(i)}),n=r?.replacedPiece,c=n&&p[n]?.position?p[n]:null,y=c?.position??r?.position??null,S=c?.rotation??r?.rotation??[0,0,0];if(!y)continue;let s=0;if(c){const A=a.getHostedProduct?.(i),P=c.productId||A?.target_product_id;s=(A?.slots?.find(G=>G.product_id===P)||A?.slots?.find(G=>G.isDefault)||A?.slots?.[0])?.position?.[0]??A?.componentModelOffset?.[0]??0}const g=y[0];let m=y[1]+1.5;for(const[A,P]of Object.entries(p))if(L(A)==="upper"&&Math.abs((P.position?.[0]??1/0)-g)<.5){m=P.position[1];break}const I=m-y[1]+.25,b=(S||[0,0,0])[1],v=Math.cos(b),h=Math.sin(b),O=[s,I,0],w=[y[0]+s*v,y[1]+I,y[2]-s*h];let j=t.modelUrl;j||(j=(V(t.id)||[]).find(P=>!!P.url)?.url||null);const T=(_.getState().sceneHostedProducts||[]).find(A=>{if(String(A.hostedProductId)===String(t.id))return!0;const P=a.getHostedProduct?.(A.hostedProductId)?.id;return P!=null&&String(P)===String(t.id)});if(T)_.setState(A=>({sceneHostedProducts:A.sceneHostedProducts.map(P=>P.id===T.id?{...P,position:w,rotation:S||[0,0,0],positionOffset:O,replacedPiece:n??P.replacedPiece,pairedWithPiece:n??P.pairedWithPiece,pairedWithHostedProductId:r?.id??P.pairedWithHostedProductId}:P)}));else{const A=String(f.id??`${M}${t.id}`);_.setState(P=>({sceneHostedProducts:[...P.sceneHostedProducts,{id:A,hostedProductId:t.id,name:t.name,modelUrl:j,position:w,rotation:S||[0,0,0],scale:t.scale||[1,1,1],placement_type:t.placement_type,replacedPiece:n??null,positionOffset:O,pairedWithPiece:n??null,pairedWithHostedProductId:r?.id??null}],...n?{occupiedPieceSlots:{...P.occupiedPieceSlots,[n]:{...P.occupiedPieceSlots[n],pairedHostedProductId:A}}}:{}}))}}}const U=()=>{try{const e=Y();return!!e&&typeof e.computeLayout!="function"}catch{return!1}};function Ft(e){if(!e||!Array.isArray(e.placements))return;const u=x.getState().productInstances||{};let a=!1;try{a=!!_.getState().ownsSceneGraph}catch{}if(U())return;const p={};let f=!1;for(const i of e.placements){const r=String(i.id??"");if(!r)continue;const n=[i.transform,i.default_transform,i.defaultTransform,Array.isArray(i.position)?{position:i.position,rotation:i.rotation}:null].find(S=>S&&Array.isArray(S.position))||{},c=u[r],y={id:r,instanceId:r,placementId:r,productId:i.variantId,variantId:i.variantId,configId:null,placementGroup:i.placementGroup??null,sequence:Number.isFinite(Number(i.sequence))?Number(i.sequence):null,positionedAbove:i.positionedAbove??i.positioned_above??i.hostPlacementId??i.host_placement_id??i.host??null,hostVariantId:i.hostVariantId??i.host_variant_id??null,lockVariantId:i.lockVariantId??i.lock_variant_id??null,position:Array.isArray(n.position)?n.position:[0,0,0],rotation:Array.isArray(n.rotation)?n.rotation:[0,0,0],scale:[1,1,1],locked:i.locked===!0,createdAt:c?.createdAt??(a?Date.now()+(Number.isFinite(Number(i.sequence))?Number(i.sequence):0):Date.now())};p[r]=y,(!c||c.productId!==y.productId||c.position!==y.position||c.rotation!==y.rotation||c.locked!==y.locked||(c.hostVariantId??null)!==(y.hostVariantId??null))&&(f=!0)}for(const[i,r]of Object.entries(u))i in p||(f=!0);const d=Object.entries(u).filter(([i])=>!(i in p));let t=d;Object.keys(p).length>0&&(t=[]);const o=t.length!==d.length;!f&&!o||x.setState({productInstances:{...Object.fromEntries(t),...p}})}function Gt(e){if(!e||!Array.isArray(e.placements))return;try{if(!_.getState().ownsSceneGraph)return}catch{return}const l=x.getState(),u=l.productInstances||{},a=l.componentStates||{},p={...u},f={...a};let d=!1;if(!U()){for(const t of e.placements){const o=String(t.id??""),i=u[o];if(!i)continue;const r=t.variantId;r!=null&&(String(i.productId)===String(r)&&String(i.variantId??i.productId)===String(r)||(p[o]={...i,productId:r,variantId:r},f[o]&&(f[o]={}),d=!0))}d&&x.setState({productInstances:p,componentStates:f})}}function it(e){if(!e||!Array.isArray(e.placements))return;try{if(!_.getState().ownsSceneGraph)return}catch{return}const u=x.getState().productInstances||{},a={};for(const t of e.placements){const o=String(t?.id??"");o&&(a[o]=t)}const p=t=>{const i=a[String(t?.id??"")]?.transform?.position?.[1];return typeof i=="number"&&i>0?i:null},f={...u};let d=!1;for(const[t,o]of Object.entries(u)){const i=p(o);if(i==null)continue;const r=Array.isArray(o.position)?o.position:[0,0,0];Math.abs((r[1]||0)-i)<1e-6||(f[t]={...o,position:[r[0]||0,i,r[2]||0]},d=!0)}d&&x.setState({productInstances:f})}function Mt(e){if(!e||!Array.isArray(e.placements))return;const l=_.getState(),u=H.getState(),a=u.componentGroups||{},p=u.components||{},f={},d={},t=(r,n,c)=>{n!=null&&(r!=null&&(f[String(r)]={variantKey:n,isHandle:c}),d[String(n)]=c)};for(const r of Object.values(a)){const n=c=>(p[c]?.type??p[String(c)]?.type)==="handle";for(const[c,y]of Object.entries(r?.variants||{}))t(y,c,n(y));for(const c of Array.isArray(r?.members)?r.members:[]){const y=c?.componentId??c?.component_id;t(y,c?.variantKey??c?.variant_key,n(y))}}const o=(r,n)=>{const c=f[String(n)];return c||{variantKey:n,isHandle:d[String(n)]??!1}},i=R(u);for(const r of e.placements){const n=r.id;if(!n)continue;if(r.selections&&typeof r.selections=="object"){let h=r.selections;i!=null&&String(i)in h&&(h={...h},delete h[String(i)]),x.getState().setPlacementSelections?.(n,h)}if($(String(n)))continue;const c=r.overrides||{},y=c.materials;if(y&&typeof y=="object")for(const[h,O]of Object.entries(y))O!=null&&l.setHostMaterialOverride(n,h,O);const S=c.componentSlots||c.component_slots,s=[];if(S&&typeof S=="object"){const h=x.getState();for(const[O,w]of Object.entries(S)){if(w===null){s.push(O),h.setComponentSwap?.(n,O,null);continue}if(w===void 0)continue;h.setComponentSwap?.(n,O,w);const{variantKey:j,isHandle:T}=o(O,w);j!=null&&(T?l.setHostHandleType?.(n,j):l.setHostStyle?.(n,j))}}const g=c.visibility&&typeof c.visibility=="object"?{...c.visibility}:null,m=g||s.length?g||{}:null;for(const h of s)m[h]===void 0&&(m[h]=!1);const I=c.transforms||c.transform,b=c.hiddenComponentIds||c.hidden_component_ids,v=Array.isArray(b)&&b.length?b.map(Number):null;if(x.getState().setPlacementOverrides?.(n,{visibility:m,transforms:I&&typeof I=="object"?I:null,hiddenComponentIds:v}),m)for(const[h,O]of Object.entries(m))O===!1&&String(h).toLowerCase().includes("handle")&&l.setHostHandleType?.(n,"none")}st(e),it(e)}export{q as DEFAULT_PLACEMENT_GROUP,xt as applyAddedPlacements,Tt as applyInitialSelections,Ot as applyMessages,it as applyOwnedTransforms,nt as applyPresetPieceTrims,_t as applyRemovedPlacements,Ct as applyResolvedPieceAdds,Mt as applyResolvedToScene,Nt as applySceneConfigDefaults,kt as applySelectionOverrides,st as applyWallMountedPlacements,vt as applyWarnings,At as buildCanonicalState,Ht as dequeuePieceAdd,Z as getHostedProductSpawnSelections,ht as hostedProductPlacementId,Ft as hydrateProductInstancesFromState,J as isOverlayPlacementProduct,wt as queuePieceAdd,Pt as resolveDeclaredPlacementGroup,bt as resolveDefaultFloorPlacementGroup,Gt as syncOwnedInstanceVariants,jt as wasPieceAddConsumed};
|