@imagineio/configurator-sdk 0.1.0-beta.1
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/LICENSE.md +294 -0
- package/README.md +103 -0
- package/dist/00a41227ff.js +1 -0
- package/dist/00ab3dcbb5.js +1 -0
- package/dist/01a664fa9f.css +51 -0
- package/dist/04746bff9a.js +1 -0
- package/dist/04931f795e.js +1 -0
- package/dist/05973a4da2.js +3 -0
- package/dist/061b81ad81.js +1 -0
- package/dist/066fc9aa40.js +1 -0
- package/dist/09c4973968.js +1 -0
- package/dist/0a35b2c5f4.js +1 -0
- package/dist/0af28430ab.js +1 -0
- package/dist/0e2dedae0d.js +1 -0
- package/dist/0f7c8345a8.js +1 -0
- package/dist/12b8165d6d.js +1 -0
- package/dist/1458417bdb.js +1 -0
- package/dist/14c83bc57a.js +1 -0
- package/dist/15d6bec3b5.css +150 -0
- package/dist/16a399703e.js +1 -0
- package/dist/17876f4322.css +114 -0
- package/dist/1870fc037b.js +1 -0
- package/dist/1a2629800a.css +196 -0
- package/dist/1e243363f6.js +1 -0
- package/dist/1fac915f8b.js +1 -0
- package/dist/1fff100656.js +1 -0
- package/dist/205827c5c8.js +1 -0
- package/dist/20b0104576.js +1 -0
- package/dist/2239b22616.js +1 -0
- package/dist/22bd38ddcf.js +1 -0
- package/dist/239b619005.css +1849 -0
- package/dist/23dc0ccf32.js +1 -0
- package/dist/26155bf68c.js +1 -0
- package/dist/2774152dd2.js +1 -0
- package/dist/27fee7007f.js +1 -0
- package/dist/281cf952fa.js +1 -0
- package/dist/28a9d58274.js +1 -0
- package/dist/28d887bf8a.js +1 -0
- package/dist/28df2aa12f.js +1 -0
- package/dist/297e653adf.js +1 -0
- package/dist/2990ba64d6.js +1 -0
- package/dist/2b6aa27f6d.js +1 -0
- package/dist/2c7c1bcef1.js +1 -0
- package/dist/2cab5c5c23.js +1 -0
- package/dist/2cafe3274b.js +1 -0
- package/dist/2e366d7386.js +1 -0
- package/dist/2f8cc8b292.js +1 -0
- package/dist/30be653f00.css +110 -0
- package/dist/31ea036f5c.js +1 -0
- package/dist/32861ea2b0.js +1 -0
- package/dist/33fa2c8ca2.js +1 -0
- package/dist/35d8449ed8.js +1 -0
- package/dist/3656ffa1b8.js +1 -0
- package/dist/367a479d3a.js +1 -0
- package/dist/371ed78aa2.js +1 -0
- package/dist/37596ace72.js +1 -0
- package/dist/37addc7fb3.js +1 -0
- package/dist/388cadacbd.js +1 -0
- package/dist/39a62ef7b8.js +1 -0
- package/dist/3bbcee0334.js +1 -0
- package/dist/3c916f744f.js +1 -0
- package/dist/3f37665dd1.js +1 -0
- package/dist/3fb3ab6757.js +1 -0
- package/dist/40d6aeb28c.js +1 -0
- package/dist/41ed5985ad.js +1 -0
- package/dist/431a2d8618.js +1 -0
- package/dist/44a229099f.js +1 -0
- package/dist/4741e5d07d.css +263 -0
- package/dist/4910c07ca8.css +411 -0
- package/dist/4a99ddb3fd.js +1 -0
- package/dist/4aa671f9f6.js +1 -0
- package/dist/4b8958aa4c.js +1 -0
- package/dist/4ba4f544b9.js +1 -0
- package/dist/4c24338793.js +1 -0
- package/dist/4d7a0d1897.js +1 -0
- package/dist/4e1db1e3b0.js +1 -0
- package/dist/4e7d0a0d4a.js +1 -0
- package/dist/51b23203e5.css +1447 -0
- package/dist/52436e0169.js +1 -0
- package/dist/54413c1eae.js +1 -0
- package/dist/54f0fcf38b.js +1 -0
- package/dist/55ab45ada4.css +370 -0
- package/dist/561dc3f1ab.js +1 -0
- package/dist/58e6419ba8.js +1 -0
- package/dist/5c9fd9201c.js +1 -0
- package/dist/5d05e8982e.js +1 -0
- package/dist/5d5e8a9c58.js +3 -0
- package/dist/5e4f2349ff.js +1 -0
- package/dist/609e5e5d28.js +1 -0
- package/dist/60d697292c.js +1 -0
- package/dist/61e0c0c9b5.js +1 -0
- package/dist/631a9f7fac.js +1 -0
- package/dist/64e9020b49.js +1 -0
- package/dist/66c461dc2c.js +1 -0
- package/dist/672404d987.js +1 -0
- package/dist/67f6338a4a.js +1 -0
- package/dist/6855e6a3b1.js +1 -0
- package/dist/6b0a81e4f8.js +1 -0
- package/dist/6ba86aa3b8.js +1 -0
- package/dist/6bff84d27e.js +1 -0
- package/dist/6c0a2572dd.js +1 -0
- package/dist/6d238282c1.js +1 -0
- package/dist/6e2595aa36.js +1 -0
- package/dist/6f9ae59d6c.js +1 -0
- package/dist/70dd811d74.js +1 -0
- package/dist/710c1ab641.js +1 -0
- package/dist/7206ce49c6.js +1 -0
- package/dist/7281d77ed9.js +1 -0
- package/dist/73f7d65985.js +1 -0
- package/dist/776277593f.js +1 -0
- package/dist/79a397bb92.js +1 -0
- package/dist/7a748aae59.js +1 -0
- package/dist/7bfb0ecfbb.css +572 -0
- package/dist/7bfcd0a517.js +1 -0
- package/dist/7d9ddaeb47.js +1 -0
- package/dist/7f833bc5af.js +1 -0
- package/dist/811b403d43.js +1 -0
- package/dist/817d930a49.js +1 -0
- package/dist/81802759ca.js +1 -0
- package/dist/81eb433604.js +1 -0
- package/dist/82a8a4bc35.js +1 -0
- package/dist/85af90fade.js +1 -0
- package/dist/872c4302e0.js +1 -0
- package/dist/87bb469216.js +1 -0
- package/dist/87dcc12b65.js +1 -0
- package/dist/87f511c4a8.js +1 -0
- package/dist/88251d6671.js +1 -0
- package/dist/882bc739c8.js +1 -0
- package/dist/89ab18ebc5.js +1 -0
- package/dist/8a22e8944f.css +563 -0
- package/dist/8a3a57c008.js +1 -0
- package/dist/8ade32d067.js +1 -0
- package/dist/8bf6d26ad6.css +233 -0
- package/dist/8c27edda0f.js +1 -0
- package/dist/8db8655f21.js +24 -0
- package/dist/8f60e5059a.js +1 -0
- package/dist/91707f5ca0.css +78 -0
- package/dist/921bf270dd.js +20 -0
- package/dist/9326c23506.js +1 -0
- package/dist/94a0a79c65.js +1 -0
- package/dist/9526094bb7.js +1 -0
- package/dist/9544661159.js +1 -0
- package/dist/95a44ebec2.js +1 -0
- package/dist/970313b92b.js +1 -0
- package/dist/9794652102.js +1 -0
- package/dist/983cbed22c.js +1 -0
- package/dist/9840b9ce12.js +1 -0
- package/dist/98f3644031.js +1 -0
- package/dist/992778075d.css +353 -0
- package/dist/9c6c598569.js +1 -0
- package/dist/9f474b5d1a.js +1 -0
- package/dist/a0f71d0bf5.js +1 -0
- package/dist/a3c983d431.js +1 -0
- package/dist/a3f18e76fe.js +1 -0
- package/dist/a493e9aa8f.js +1 -0
- package/dist/a77b15c0d6.js +1 -0
- package/dist/a811c90bd5.js +1 -0
- package/dist/a822c5e4f2.js +1 -0
- package/dist/aaa0e82d7f.css +69 -0
- package/dist/ab6c80484f.js +1 -0
- package/dist/ae96f219e3.js +1 -0
- package/dist/b11b38869d.css +427 -0
- package/dist/b1349d5a21.js +4 -0
- package/dist/b14379d31b.css +151 -0
- package/dist/b3efb26fd7.js +1 -0
- package/dist/b59b0dde17.js +1 -0
- package/dist/b5c372377f.js +1 -0
- package/dist/b976df09ec.js +1 -0
- package/dist/baeaed46c9.js +1 -0
- package/dist/bb719febc6.js +1 -0
- package/dist/bcd44b4040.js +1 -0
- package/dist/bdc4e4c5b9.css +209 -0
- package/dist/bdec200d00.js +1 -0
- package/dist/be0cfe2236.js +1 -0
- package/dist/be337ddda5.js +1 -0
- package/dist/c12c112c6f.js +1 -0
- package/dist/c2a14a77ae.js +1 -0
- package/dist/c3b8f1973b.js +1 -0
- package/dist/c44d37da7a.js +1 -0
- package/dist/c4790179f1.js +1 -0
- package/dist/c5e990946e.js +1 -0
- package/dist/c71892453b.js +1 -0
- package/dist/c9a1656c62.js +1 -0
- package/dist/ca497b066c.js +1 -0
- package/dist/cdb4a0f7b3.js +3 -0
- package/dist/ce663020e4.js +60 -0
- package/dist/cec035efb1.js +1 -0
- package/dist/d0f9681634.js +1 -0
- package/dist/d118c2e7ba.js +1 -0
- package/dist/d20718159b.js +3 -0
- package/dist/d30f1f506e.js +1 -0
- package/dist/d3cd7f1bc1.js +1 -0
- package/dist/d4378d9afa.js +1 -0
- package/dist/d464da28a5.js +1 -0
- package/dist/d566d3874b.js +1 -0
- package/dist/d617bbb9f5.js +26 -0
- package/dist/d65f32e004.js +1 -0
- package/dist/d6851ea979.js +1 -0
- package/dist/d7c9500ba9.js +1 -0
- package/dist/d803155241.js +1 -0
- package/dist/d903df4e0d.js +1 -0
- package/dist/d94df858ea.js +1 -0
- package/dist/da7b5f450d.js +1 -0
- package/dist/daa11edd01.js +1 -0
- package/dist/db4afd43c9.js +1 -0
- package/dist/dbd5ba1d07.js +1 -0
- package/dist/dc2a1a0e13.js +1 -0
- package/dist/dc812f3e14.js +1 -0
- package/dist/dcbf419090.css +122 -0
- package/dist/dcdba78ddf.js +1 -0
- package/dist/de408c4516.js +1 -0
- package/dist/e1cd279733.js +1 -0
- package/dist/e379e0039b.js +1 -0
- package/dist/e4fe0551fd.js +1 -0
- package/dist/e6eed481cc.css +28 -0
- package/dist/e75f1e5992.js +1 -0
- package/dist/ea8577d22b.js +1 -0
- package/dist/ec4a34fc80.css +313 -0
- package/dist/ed6a54cdf6.js +1 -0
- package/dist/ee242c0099.js +1 -0
- package/dist/ee9b9fd7d1.js +1 -0
- package/dist/f0c3d8a28a.js +1 -0
- package/dist/f11a45a150.js +1 -0
- package/dist/f1b3b2622a.js +1 -0
- package/dist/f7b4a178e3.js +1 -0
- package/dist/f89d7cd931.js +1 -0
- package/dist/f8cb80a93c.js +1 -0
- package/dist/f8fec86f10.js +1 -0
- package/dist/fbd844f2d1.js +1 -0
- package/dist/fe235d7160.js +1 -0
- package/dist/fe58a84b85.js +1 -0
- package/dist/fe68b361ba.js +1 -0
- package/dist/ff5b3d17e2.js +1 -0
- package/dist/styles/globals.css +442 -0
- package/dist/styles/themes.css +532 -0
- package/dist/styles/variables.css +299 -0
- package/package.json +68 -0
- package/static/assets/draco/README.md +32 -0
- package/static/assets/draco/draco_decoder.js +34 -0
- package/static/assets/draco/draco_decoder.wasm +0 -0
- package/static/assets/draco/draco_encoder.js +35 -0
- package/static/assets/draco/draco_encoder.wasm +0 -0
- package/static/assets/draco/draco_encoder_wrapper.js +98 -0
- package/static/assets/draco/draco_wasm_wrapper.js +117 -0
- package/static/favicon.svg +28 -0
- package/static/version.txt +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import V from"./9c6c598569.js";import k from"./872c4302e0.js";import x from"./d94df858ea.js";import tt from"./be337ddda5.js";import nt from"./8f60e5059a.js";import{resolveBasePrice as et}from"./b5c372377f.js";import{calculatePricing as ot}from"./fbd844f2d1.js";import{resolveEffectiveSelections as rt}from"./3656ffa1b8.js";function H(o){const n=o?.bomGroup??o?.bom_group;return typeof n=="string"&&n.trim()?n.trim():"Bill of Materials"}function st(o){return String(o||"").replace(/[_-]+/g," ").replace(/\b\w/g,n=>n.toUpperCase()).trim()}function R(o){const n=j(o?.width),s=j(o?.height),r=j(o?.depth);if(n==null&&s==null&&r==null)return null;const i=[n,s,r].some(a=>a!=null&&a>5)?"in":"m",c=[];return n!=null&&c.push(`W ${n}${i}`),s!=null&&c.push(`H ${s}${i}`),r!=null&&c.push(`D ${r}${i}`),c.join(" \xD7 ")}function j(o){const n=typeof o=="number"?o:o!=null?Number(o):null;return Number.isFinite(n)?n:null}function W(o,n,s,r){const d=n?.[o];if(!d||typeof d!="object")return[];const i=[];for(const[c,a]of Object.entries(d)){if(!a||typeof a!="object")continue;const e=a.componentId;if(e==null||a.visible===!1||r&&(r.has(String(c).toLowerCase())||r.has(String(e).toLowerCase())))continue;const u=s?.[e]||s?.[String(e)];i.push({slotKey:c,componentId:e,componentName:u?.name??u?.variantKey??`Component ${e}`})}return i}function E(o,n,s,r){const d=n?.[o];if(!d||typeof d!="object")return[];const i=[];for(const[c,a]of Object.entries(d)){if(!a||typeof a!="object"||a.visible===!1||r&&(r.has(String(c).toLowerCase())||r.has(String(a.componentId).toLowerCase())))continue;const e=a.materialId;if(e==null)continue;const u=s?.[e]||s?.[String(e)];i.push({slotKey:c,materialId:e,materialName:u?.name??`Material ${e}`})}return i}function it({uiState:o,products:n}){const s=o?.pieceConfigSnapshot;if(!s)return[];const r=[],d=(i,c)=>{const e=o?.hostProductOverrides?.[`${i}-${c}`]||null,u=e?n?.[e]||n?.[String(e)]:null;r.push({_synthetic:!0,_snapshotBucket:i,instanceId:`${i}-${c}`,productId:e,product:u})};for(const i of s.base||[])d("base",i);for(const i of s.upper||[])d("upper",i);for(const i of s.tall||[])d("tall",i);for(const i of s.island||[])d("island",i);return r}function z(o,n){const s=o?n?.[o]?.visibility:null;return s?new Set(Object.entries(s).filter(([,r])=>r===!1).map(([r])=>String(r).toLowerCase())):null}function It(o){const n=V.getState(),s=k.getState(),r=n.componentStates||{},d=n.placementOverrides||{},i=z(o,d),c=W(o,r,s.components||{},i),a=E(o,r,s.materials||{},i);return{components:c.map(e=>({slot:e.slotKey,componentId:e.componentId,name:e.componentName})),materials:a.map(e=>({slot:e.slotKey,materialId:e.materialId,name:e.materialName}))}}function at(o,n){const{products:s,components:r,materials:d,componentStates:i,placementOverrides:c}=n,a=o.productId??o.product?.id??null,e=o.variantId??a,u=o.product||(e!=null?s?.[e]||s?.[String(e)]:null)||(a!=null?s?.[a]||s?.[String(a)]:null),g=o.instanceId??o.id??null,S=z(g,c),M=g?W(g,i,r,S):[],q=g?E(g,i,d,S):[],O=new Map;{const y=n.placementPricing?.[g]??n.placementPricing?.[String(g)];for(const h of Array.isArray(y?.adjustments)?y.adjustments:[]){const I=h?.optionSetId??h?.option_set_id,v=h?.optionSetLabel??h?.option_set_label;I!=null&&v&&O.set(String(I),v)}}const A=[];if(g){const y=rt(g);for(const[h,I]of Object.entries(y)){const v=n.features?.[h]??n.features?.[String(h)],L=String(v?.priceMode??"per_placement");if(L==="excluded"||L==="not_listed")continue;const w=n.options?.[I]??n.options?.[String(I)]??(Array.isArray(v?.options)?v.options.find(_=>_&&typeof _=="object"&&String(_.id)===String(I)):null),N=w?.name??(I!=null?String(I):null);if(N==null)continue;const K=String(v?.type??"").toLowerCase();if(K==="load_new_product"||K==="product_change"){const _=w?.value??w?.valueProductVariant??w?.value_product_variant??null;if(_!=null&&e!=null&&String(_)!==String(e))continue}A.push({setId:h,setName:O.get(String(h))??v?.name??String(h),optionId:I,optionName:N})}}return{namedSelections:A,variantId:e??a,placementId:g,productGraphId:u?.productGraph??u?.product_graph??null,productGraphName:u?.productGraphName??u?.product_graph_name??null,name:u?.name||`Item ${e??a??"?"}`,category:u?.category??null,placementGroup:u?.placementGroup??u?.placement_group??null,dimensions:R(u),dimensionsRaw:{width:j(u?.width),height:j(u?.height),depth:j(u?.depth)},basePrice:et(u),tags:(Array.isArray(u?.tags)?u.tags:[]).map(y=>typeof y=="string"?y:y?.name??y?.label??null).filter(Boolean),componentSwaps:M,materialOverrides:q,_groupKey:H(u)}}function ct(o){const n=[],s=new Map;for(const r of o){const d=r.componentSwaps.map(u=>`${u.slotKey}=${u.componentId}`).sort().join(","),i=r.materialOverrides.map(u=>`${u.slotKey}=${u.materialId}`).sort().join(","),c=`${r.unitPrice??""}|${(r.adjustments||[]).map(u=>`${u.optionId??u.label}:${u.amount}`).join(",")}`,a=(r.namedSelections||[]).map(u=>`${u.setId}:${u.optionId}`).sort().join(","),e=`${r.variantId}|${d}|${i}|${c}|${a}|${r._includedWith??""}`;s.has(e)?n[s.get(e)].qty+=1:(s.set(e,n.length),n.push({...r,qty:1}))}return n}function lt({configuratorKey:o,systemName:n,groupNames:s}){const r=s?.[0];return r?String(r):n?String(n):o?st(o):"Configuration"}async function _t({lifestyleImages:o={},shareUrl:n=null,arUrl:s=null}={}){const r=V.getState(),d=k.getState(),i=tt.getState(),c=x.getState(),a=nt.getState(),e=r.productInstances||{},u=r.componentStates||{},g=r.placementOverrides||{},S=d.products||{},M=d.components||{},q=d.materials||{},O=d.features||{},A=d.options||{},y=c.sceneSelections||{},h={products:S,components:M,materials:q,componentStates:u,placementOverrides:g,features:O,options:A,placementPricing:c.placementPricing||{}},I=Object.values(e||{}),v=it({uiState:a,products:S}),L=[...I,...v],w=[];for(const t of L){const l=at(t,h);if(l.variantId==null)continue;const p=(()=>{const b=t.hostVariantId??t.host_variant_id;if(b!=null)return b;if((t.positionedAbove??t.positioned_above)!=null)return null;const P=t.product||(t.variantId!=null?S?.[t.variantId]||S?.[String(t.variantId)]:null)||(t.productId!=null?S?.[t.productId]||S?.[String(t.productId)]:null),G=P?.hostVariants??P?.host_variants;if(!Array.isArray(G)||!G.length)return null;const C=G.find(f=>f?.isDefault??f?.is_default)||G[0];return C?.hostVariantId??C?.host_variant_id??null})(),m=p!=null?S?.[p]||S?.[String(p)]:null;if(m){const b=new Set(Object.values(m.components_configuration??m.componentsConfiguration??{}).map(f=>f?.slotName??f?.slot_name).filter(Boolean).map(f=>String(f).toLowerCase())),P=f=>b.has(String(f.slotKey??"").toLowerCase()),G=l.componentSwaps.filter(P),C=l.materialOverrides.filter(P);l.componentSwaps=l.componentSwaps.filter(f=>!P(f)),l.materialOverrides=l.materialOverrides.filter(f=>!P(f)),w.push(l),w.push({variantId:p,placementId:`${l.placementId}__host`,productGraphId:m.productGraph??m.product_graph??null,productGraphName:m.productGraphName??m.product_graph_name??null,name:m.name||`Item ${p}`,category:m.category??null,placementGroup:m.placementGroup??m.placement_group??null,dimensions:R(m),dimensionsRaw:{width:j(m.width),height:j(m.height),depth:j(m.depth)},tags:[],componentSwaps:G,materialOverrides:C,namedSelections:[],_isHostPiece:!0,_includedWith:l.name,_groupKey:H(m)});continue}w.push(l)}const N=c.placementPricing||{},K=Object.keys(N).length>0;if(K)for(const t of w){const l=t.placementId!=null?N[t.placementId]||N[String(t.placementId)]:null;l&&(typeof l.basePrice=="number"&&(t.basePrice=l.basePrice),typeof l.unitPrice=="number"&&(t.unitPrice=l.unitPrice),Array.isArray(l.adjustments)&&(t.adjustments=l.adjustments.map(p=>{if(p.label||p.name)return p;const m=p.optionId!=null?A[p.optionId]||A[String(p.optionId)]:null,b=p.optionSetId!=null?O[p.optionSetId]||O[String(p.optionSetId)]:null;return{...p,label:m?.name||m?.label||b?.name||"Option"}})))}const _=new Map;for(const t of w){const l=t._groupKey||"Items";_.has(l)||_.set(l,[]),_.get(l).push(t)}const $=[..._.entries()].map(([t,l])=>({name:t,items:ct(l).sort((p,m)=>m.qty-p.qty)})).sort((t,l)=>l.items.length-t.items.length),B=(Array.isArray(c.aggregateAdjustments)?c.aggregateAdjustments:[]).filter(t=>Number(t.amount??t.unitAmount??t.unit_amount)!==0);if(B.length>0){const t=B.map(p=>{const m=p.optionSetId??p.option_set_id,b=p.optionId??p.option_id,P=m!=null?O[m]||O[String(m)]:null,G=b!=null?A[b]||A[String(b)]:null,C=p.label||G?.name||"Option",f=p.unitAmount??p.unit_amount;return{name:P?.name?`${P.name}: ${C}`:C,variantId:`${m}-${b}`,qty:Number(p.count??1)||1,unitPrice:typeof f=="number"?f:null,lineTotal:typeof p.amount=="number"?p.amount:null,componentSwaps:[],materialOverrides:[],_isAggregate:!0}}),l=$.find(p=>p.name==="Bill of Materials");l?l.items.push(...t):$.push({name:"Bill of Materials",items:t})}const D=i.configuratorKey??null,F=i.systemName??i.systemRoom?.name??null,J=$.filter(t=>t.name!=="Finishes & Materials"&&t.name!=="Additional Options"&&t.name!=="Bill of Materials").map(t=>t.name),Q=lt({configuratorKey:D,systemName:F,groupNames:J}),T=K?(i.getChannelPriceConfig?.()||{}).currency||"USD":await ut({groups:$,sceneSelections:y}),U=t=>t.items.filter(l=>!l._isFinish&&!l._isAggregate),X=$.reduce((t,l)=>t+U(l).reduce((p,m)=>p+(m.qty||1),0),0),Y=$.reduce((t,l)=>t+U(l).length,0),Z=$.reduce((t,l)=>t+l.items.length,0);return{isGeneric:!0,title:Q,groups:$,currency:T,summary:{totalItems:X,totalUnique:Y,lineItems:Z,groupCount:$.length,grandTotal:c.totalPrice??c.sceneTotal??null,configuratorKey:D,systemName:F,currency:T},lifestyleImages:o,shareUrl:n,arUrl:s}}async function ut({groups:o,sceneSelections:n}){const s=[];for(const c of o)if(c.name!=="Finishes & Materials")for(const a of c.items)a._isFinish||a.productGraphId!=null&&s.push(a);if(s.length===0)return"USD";const r={...n||{}},d=s.map(c=>({product:Number(c.productGraphId),options:r,quantity:c.qty||1})),i=await ot(d);if(!i||!Array.isArray(i.items))return"USD";for(let c=0;c<s.length&&c<i.items.length;c++){const a=i.items[c],e=s[c];typeof a.basePrice=="number"&&(e.basePrice=a.basePrice),typeof a.unitPrice=="number"&&(e.unitPrice=a.unitPrice),typeof a.lineTotal=="number"&&(e.lineTotal=a.lineTotal),Array.isArray(a.adjustments)&&(e.adjustments=a.adjustments)}return i.currency||"USD"}export{_t as collectGenericBom,It as collectPlacementParts};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as e,jsxs as n}from"react/jsx-runtime";import{useEffect as i,useRef as l,useState as c}from"react";import{QRCodeSVG as L}from"qrcode.react";import{getModelViewerSrc as y}from"./9544661159.js";import{useLabel as o}from"./28d887bf8a.js";import"./17876f4322.css";function M(){const v=o("ar.title","View in AR"),u=o("ar.subtitle","Scan this QR code with your mobile device"),m=o("ar.hint","Point your phone camera at the code above"),p=o("ar.cta","View in your space"),h=o("ar.instruction","Move your camera around the floor to visualize the model in your space."),f=o("ar.noModel","No AR model URL provided."),s=l(),d=l(),[a,w]=c(null),[b,N]=c(!1),[A,R]=c(!1);return i(()=>{const r=navigator.userAgent;N(/Android|iPhone|iPad|iPod/i.test(r)),R(/iPhone|iPad|iPod/i.test(r))},[]),i(()=>{const r=y();if(document.querySelector("script[data-model-viewer]"))return;const t=document.createElement("script");t.type="module",t.src=r,t.setAttribute("data-model-viewer",""),document.head.appendChild(t)},[]),i(()=>{const t=new URLSearchParams(window.location.search).get("data");if(t)try{w(decodeURIComponent(t))}catch{}},[]),i(()=>{const r=s.current;if(!r||!a)return;const t=()=>{d.current?.click()};return r.addEventListener("load",t),()=>r.removeEventListener("load",t)},[a,A]),a?b?n("div",{className:"arv-wrapper",children:[e("div",{className:"arv-info",children:h}),e("model-viewer",{className:"arv-model-viewer",src:a,ar:!0,"ar-placement":"floor","ar-modes":"webxr quick-look scene-viewer","auto-rotate":!0,"rotation-per-second":"45deg","ar-scale":"auto","shadow-intensity":"1",ref:s,children:e("button",{slot:"ar-button",ref:d,style:{display:"none"}})}),n("button",{className:"arv-view-btn",onClick:()=>s.current?.activateAR(),children:[n("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[e("path",{d:"M12 3l-4 2.18v4.64L12 12l4-2.18V5.18L12 3z"}),e("path",{d:"M4 8.18v4.64L8 15l4-2.18"}),e("path",{d:"M20 8.18v4.64L16 15l-4-2.18"}),e("path",{d:"M12 21l-4-2.18v-4.64"}),e("path",{d:"M12 21l4-2.18v-4.64"})]}),p]})]}):e("div",{className:"arv-center",children:n("div",{className:"arv-qr-card",children:[e("h2",{className:"arv-qr-title",children:v}),e("p",{className:"arv-qr-subtitle",children:u}),e("div",{className:"arv-qr-wrapper",children:e(L,{value:window.location.href,size:200,level:"Q"})}),e("p",{className:"arv-qr-hint",children:m})]})}):e("div",{className:"arv-center",children:e("p",{className:"arv-error",children:f})})}var I=M;export{I as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as m,jsxs as b}from"react/jsx-runtime";import{useMemo as V,useSyncExternalStore as j}from"react";import{useLabels as B}from"./28d887bf8a.js";import T from"./2990ba64d6.js";import{optionRecordFrom as E,optionsForSetFrom as X}from"./4a99ddb3fd.js";import{currentOptionIdFor as Y,readCurrentOptionInputs as q}from"./2c7c1bcef1.js";import v from"./9c6c598569.js";import F from"./872c4302e0.js";import{subscribe as z,getVersion as R,getEffectiveSelections as D,getPlacementBindings as $}from"./817d930a49.js";import"./91707f5ca0.css";const P=t=>t?.name||t?.displayName||t?.label||t?.value||(t?.id!=null?String(t.id):""),x=t=>t?.name||t?.label||"",A=(t,n)=>t?.[n]??t?.[String(n)]??null;function I(t,{features:n,options:i}){if(t==null)return[];const c=D(t)||{},f=($(t)||[]).map(r=>String(r?.optionSetId??r?.option_set_id)).filter(Boolean),a=Object.keys(c).sort((r,u)=>{const l=f.indexOf(String(r)),g=f.indexOf(String(u));return(l<0?Number.MAX_SAFE_INTEGER:l)-(g<0?Number.MAX_SAFE_INTEGER:g)}),y=$(t)||null,N=q(),d=[];for(const r of a){const u=A(n,r),l=x(u);if(!u||!l)continue;const g=X(u,{features:n,options:i,bindings:y}),s=Y({placementId:t,set:u,opts:g,inputs:N}),S=E(u,s,{features:n,options:i,bindings:y});S&&d.push({key:`${t}:${r}`,label:l,value:P(S)})}return d}function rt(t){const n=F.getState();return I(t,{features:n.features,options:n.options}).length>0}function H(t){const{sceneOptionSets:n,features:i,options:c,getOptionsForFeature:f,getSelection:a,visibleOptions:y}=T({placementId:null}),N=v(s=>s.selectedInstanceId),d=t===void 0?N??null:t,r=v(s=>s.productInstances),u=v(s=>s.placementSelections),l=F(s=>s.getProduct),g=j(z,R,R);return V(()=>{const s=d!=null&&I(d,{features:i,options:c}).length>0,S=s?[d]:Object.keys(r||{}),k=[];for(const e of s?[]:n||[]){const o=e?.feature_id??e?.id;if(o==null)continue;const p=a(o);if(p==null)continue;const w=y(o,f(e)).find(M=>String(M?.id)===String(p))??E(e,p,{features:i,options:c});if(!w)continue;const O=x(e);O&&k.push({key:String(o),label:O,value:P(w)})}const G=e=>{const o=A(r,e),p=l?.(o?.variantId)||l?.(o?.productId);return p?.name||p?.displayName||p?.variantName||""},_=[];for(const e of S){const o=I(e,{features:i,options:c});o.length&&_.push({key:String(e),title:G(e),rows:o})}const L=_.reduce((e,o)=>({...e,[o.title]:(e[o.title]||0)+1}),{}),h={};for(const e of _)!e.title||L[e.title]<2||(h[e.title]=(h[e.title]||0)+1,e.title=`${e.title} ${h[e.title]}`);return{scene:k,items:_}},[n,i,c,f,a,y,r,u,l,g,d])}function C({rows:t}){return m("dl",{className:"config-summary__rows",children:t.map(n=>b("div",{className:"config-summary__row","data-part":"summary/row",children:[m("dt",{className:"config-summary__label",children:n.label}),m("dd",{className:"config-summary__value",children:n.value})]},n.key))})}function J({className:t="",placementId:n}){const i=B(),{scene:c,items:f}=H(n);return!c.length&&!f.length?m("div",{className:`config-summary ${t}`.trim(),"data-part":"summary",children:m("p",{className:"config-summary__empty",children:i("summary.empty","Nothing selected yet.")})}):b("div",{className:`config-summary ${t}`.trim(),"data-part":"summary",children:[c.length>0&&b("section",{className:"config-summary__group","data-part":"summary/group",children:[i("summary.selections","Your selections")?m("h3",{className:"config-summary__group-title",children:i("summary.selections","Your selections")}):null,m(C,{rows:c})]}),f.map(a=>b("section",{className:"config-summary__group","data-part":"summary/group",children:[a.title?m("h3",{className:"config-summary__group-title",children:a.title}):null,m(C,{rows:a.rows})]},a.key))]})}export{J as default,rt as hasPlacementRows};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import*as m from"three";const h=2,V=45,e=new m.Box3,g=new m.Vector3,M=new m.Vector3;function b({scene:y,aspect:x,fov:p=h,padding:s=1.3}){if(e.makeEmpty(),y.traverse(r=>{if(!r.isMesh||!r.geometry)return;const o=r.geometry.type;o==="CircleGeometry"||o==="PlaneGeometry"||e.expandByObject(r)}),e.isEmpty())return null;const a=e.getSize(g),t=e.getCenter(M),n=Math.tan(p*Math.PI/360),c=a.z*s/(2*n),f=a.x*s/(2*n*x),u=Math.max(c,f);return{position:[t.x,u,t.z+.01],target:[t.x,0,t.z]}}function w({scene:y,aspect:x=1,fov:p=V,padding:s=1.35,dir:a=[.55,.5,1]}){if(e.makeEmpty(),y.traverse(i=>{if(!i.isMesh||!i.geometry)return;const z=i.geometry.type;z==="CircleGeometry"||z==="PlaneGeometry"||e.expandByObject(i)}),e.isEmpty())return null;const t=e.getSize(g),n=e.getCenter(M),c=Math.tan(p*Math.PI/360),f=t.y*s/(2*c),u=Math.max(t.x,t.z)*s/(2*c*Math.max(x,1e-4)),r=Math.max(f,u,Math.max(t.x,t.y,t.z)*s),o=new m.Vector3(a[0],a[1],a[2]);return o.lengthSq()===0&&o.set(.55,.5,1),o.normalize(),{position:[n.x+o.x*r,n.y+o.y*r,n.z+o.z*r],target:[n.x,n.y,n.z]}}export{h as ORTHO_FOV,V as PERSP_FOV,w as computeFitView,b as computeTopDownView};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{isHostedProduct as J}from"./061b81ad81.js";import{create as it}from"zustand";import{setSceneAccessFromBackend as rt,setAiChatFromBackend as Q}from"./87f511c4a8.js";import{devtools as st}from"./52436e0169.js";import j from"./79a397bb92.js";import{clearMaterialCache as lt}from"./c44d37da7a.js";import{resolveComponentType as at}from"./061b81ad81.js";import{registerBaselineHiddenLookup as ct}from"./817d930a49.js";import{setWatermarkFromBackend as ut}from"./d3cd7f1bc1.js";let C=null;function dt(m){if(!Array.isArray(m))return[];const d=[];for(const s of m){const c=s?.match||{},g=c.product_id,h=s?.slot||{},r=Array.isArray(g)?g:g!=null?[g]:[null];for(const b of r)d.push({product_id:b!=null?String(b):null,match:c,position:h.offset||h.position||null,rotation:h.rotation||null,component_overrides:h.component_overrides||{},component_transforms:h.component_transforms||{},additionalModels:h.additionalModels||h.additional_models||[]})}return d}function pt(m){const d=Object.keys(m||{})[0];if(!d)return[1,1,1];const s=m[d]?.scale;return Array.isArray(s)&&s.length>=3?s:[1,1,1]}const X=it(st((m,d)=>({products:{},productsByRef:{},components:{},features:{},options:{},materials:{},componentGroups:{},watermarkEnabled:!0,systemUiToggles:{},presets:{},defaultPresetId:null,optionToProducts:{},hostedProducts:{},hostedProductByOptionId:{},isLoading:!1,loadError:null,loadCatalog:async({force:s=!1,systemId:c=null}={})=>{if(!s&&C)return C;const g=d();if(!s&&g.products&&Object.keys(g.products).length>0)return Promise.resolve();s&&(C=null,j.invalidateCache("/api/v1/catalog/"),j.invalidateCache("/api/v1/products/"));const h=c!=null&&String(c)!=="";return C=(async()=>{m({isLoading:!0,loadError:null}),lt();try{const[r,b]=await Promise.all([h?j.fetchCatalogForSystem(c):j.fetchCatalog(),h?j.fetchProductsForSystem(c):j.fetchProducts()]),S={};for(const[n,t]of Object.entries(r.options||{}))S[n]=t&&typeof t=="object"&&t.id==null?{...t,id:n}:t;const Y=new Set(Object.keys(S).map(String)),E=r.presets||{},D={};for(const[n,t]of Object.entries(r.optionSets||{})){let e=[];const p=["options","optionIds","option_ids","availableOptions","optionsList","option_list"];for(const i of p)if(Array.isArray(t[i])&&t[i].length>0){e=t[i];break}if(!e.length)for(const i of Object.values(t)){if(!Array.isArray(i)||i.length===0)continue;const u=i[0],y=typeof u=="object"?u?.id:u;if(y!=null&&Y.has(String(y))){e=i;break}}if(!e.length&&E[n]){const i=E[n];Array.isArray(i)?e=i:Array.isArray(i?.options)&&(e=i.options)}if(e.length||(e=Object.values(S).filter(i=>i?.optionSetId==n||i?.option_set_id==n||i?.optionSet==n||i?.feature_id==n).sort((i,u)=>(i?.sequence||0)-(u?.sequence||0)).map(i=>i.id)),!e.length){const i=t.defaultOption??t.default_option_id;i!=null&&(e=[i])}e=e.map(i=>typeof i=="object"?i.id:i).filter(i=>i!=null),D[n]={...t,options:e,default_option_id:t.defaultOption??t.default_option_id,materials:t.materialTargets||t.materials,contentKind:t.contentKind||t.content_kind||"options",childOptionSetIds:t.childOptionSetIds||t.child_option_set_ids||[],priceMode:t.priceMode||t.price_mode||"per_placement"}}const A={};for(const[n,t]of Object.entries(b||{})){const e={...t};e.componentsConfiguration&&!e.components_configuration&&(e.components_configuration=e.componentsConfiguration),e.optionSets&&!e.features_configuration_ids&&(e.features_configuration_ids=e.optionSets),A[n]=e}for(const[n,t]of Object.entries(A)){if(t.width!=null&&t.width>0||!J(t))continue;let e=t.target_width??t.targetWidth;if(e==null||!(e>0)){const p=Array.isArray(t.hostVariants)?t.hostVariants:Array.isArray(t.host_variants)?t.host_variants:null;if(Array.isArray(p)&&p.length>0){const i=p.find(P=>P?.isDefault??P?.is_default)||p[0],u=i?.hostVariantId??i?.host_variant_id,y=u!=null?A[u]||A[String(u)]:null;y?.width!=null&&y.width>0&&(e=y.width)}}e!=null&&e>0&&(A[n]={...t,width:e})}const I={};for(const[n,t]of Object.entries(A)){const e=t.optionSets||t.features_configuration_ids||[];if(Array.isArray(e))for(const p of e){if(!p||typeof p!="object")continue;const i=p.defaultOption??p.default_option??p.default_option_id;if(i==null)continue;const u=String(i);I[u]||(I[u]=[]);const y=String(n);I[u].includes(y)||I[u].push(y)}}const M={};for(const[n,t]of Object.entries(r.components||{}))M[n]={...t,type:at(t),replace_key:t.replaceKey||t.replace_key,finish_slot:t.finishSlot||t.finish_slot,default_material:t.defaultMaterial||t.default_material};const G={};for(const n of Object.values(S))n?.value!=null&&(G[String(n.value)]=n);const H={},R={};for(const[n,t]of Object.entries(A)){if(!J(t))continue;const e=G[String(n)],p=Array.isArray(t.hostVariants)?t.hostVariants:Array.isArray(t.host_variants)?t.host_variants:null,i=Array.isArray(t.compatibleSlots)?t.compatibleSlots:Array.isArray(t.compatible_slots)?t.compatible_slots:null;let u=[],y=null,P=null;if(Array.isArray(p))for(const o of p){if(!o)continue;const l=o.hostVariantId??o.host_variant_id??null;if(l==null)continue;const _=Array.isArray(o.position)?o.position:null,a=Array.isArray(o.rotation)?o.rotation:null,v=o.isDefault??o.is_default??!1;if(u.push({product_id:String(l),position:_,rotation:a,match:{product_id:[l]},component_overrides:{},component_transforms:{},additionalModels:[],isDefault:v}),v&&y==null){y=l;const f=A[l]||A[String(l)];f?.width!=null&&(P=f.width)}}if(u.length===0&&e?.rules){for(const o of e.rules)if(o.effectType==="load_product"&&o.effectParams?.compatible_slots){u=dt(o.effectParams.compatible_slots);break}}const F=t.componentsConfiguration||t.components_configuration||{},L=Array.isArray(t.components_config)?t.components_config:Array.isArray(t.componentsConfig)?t.componentsConfig:null;let k=null,U=null,z=null;const O=[],Z=o=>{let l=null;Number.isFinite(Number(o.position_x))||Number.isFinite(Number(o.position_y))||Number.isFinite(Number(o.position_z))?l=[Number(o.position_x??0)||0,Number(o.position_y??0)||0,Number(o.position_z??0)||0]:Array.isArray(o.position)&&o.position.length===3&&(l=[...o.position]);let _=null;Number.isFinite(Number(o.rotation_x))||Number.isFinite(Number(o.rotation_y))||Number.isFinite(Number(o.rotation_z))?_=[Number(o.rotation_x??0)||0,Number(o.rotation_y??0)||0,Number(o.rotation_z??0)||0]:Array.isArray(o.rotation)&&o.rotation.length===3&&(_=[...o.rotation]);let a=null;return Array.isArray(o.scale)&&o.scale.length===3?a=[...o.scale]:Number.isFinite(Number(o.scale_x))&&(a=[Number(o.scale_x??1)||1,Number(o.scale_y??1)||1,Number(o.scale_z??1)||1]),{pos:l,rot:_,scl:a}};if(L&&L.length>0)for(const o of L){const l=o?.component,_=l?.modelPath||l?.model_path||l?.modelUrl||l?.model_url;if(!_)continue;const{pos:a,rot:v,scl:f}=Z(o);k?O.push({url:_,position:a||[0,0,0],rotation:v||[0,0,0],scale:f||[1,1,1],materialSlot:l?.materialSlot??l?.material_slot??null}):(k=_,U=a,z=v)}if(!k||O.length===0){const o=Object.keys(F||{});for(let l=0;l<o.length;l++){const _=o[l],a=F[_],v=a?.componentId??a?.component_id??_,f=M[v]||M[String(v)];let N=null;if(f?.variants){const $=a?.variantKey??a?.variant_key;N=$&&f.variants[$]||f.variants.default||Object.values(f.variants)[0]||null}if(!N&&f&&(N=f.modelPath||f.model_path||f.modelUrl||f.model_url||null),!N)continue;const B=a&&Array.isArray(a.position)&&a.position.length===3?[...a.position]:a&&Number.isFinite(Number(a.position_x))?[Number(a.position_x??0)||0,Number(a.position_y??0)||0,Number(a.position_z??0)||0]:null,V=a&&Array.isArray(a.rotation)&&a.rotation.length===3?[...a.rotation]:null;k?O.push({url:N,position:B||[0,0,0],rotation:V||[0,0,0],scale:[1,1,1],materialSlot:f?.materialSlot??f?.material_slot??null}):(k=N,B&&(U=B),V&&(z=V))}}if(O.length>0)for(const o of u)o.additionalModels=[...O];const K=[],q={},W=t.optionSets||[];if(Array.isArray(W))for(const o of W){const l=o?.optionSetId??o?.option_set_id??o?.id;l!=null&&K.push(l);const _=o?.defaultOption??o?.default_option??o?.default_option_id;l!=null&&_!=null&&(q[l]=_)}const tt=t.target_all_base??!1,ot=t.target_all_tall??!1,et=t.target_all_upper??!1,nt={id:n,optionId:e?.id??null,name:t.name,description:t.description||"",thumbnail:e?.thumbnail??e?.thumbnailUrl??e?.thumbnail_url??e?.imageUrl??e?.image_url??t.thumbnail??t.thumbnailUrl??t.thumbnail_url??t.thumbnailPath??t.thumbnail_path??t.imageUrl??t.image_url??t.icon??null,icon:t.icon||null,placement_type:t.placementType||t.placement_type||"replace_components",placementGroup:t.placementGroup||t.placement_group||null,movable:t.movable??!0,scale:pt(F),modelUrl:k,componentModelOffset:U||null,componentModelRotation:z||null,features:K,feature_defaults:q,slots:u,replaceable_by:t.replaceable_by??[],target_all_base:tt,target_all_tall:ot,target_all_upper:et,target_product_id:t.target_product_id??y??null,target_tall_product_id:t.target_tall_product_id??null,target_width:t.target_width??P??t.width??null,target_tall_width:t.target_tall_width??null,auto_target_product_id:t.auto_target_product_id??y??null,auto_target_width:t.auto_target_width??P??t.width??null,compatibleSlots:i||[],hostVariants:p||[],exclude_occupied_appliances:t.exclude_occupied_appliances??[],exclude_product_ids:t.exclude_product_ids??[],host_display_overrides:t.host_display_overrides??t.hostDisplayOverrides??null,additionalModels:O.length>0?O:t.additionalModels??t.additional_models??[]};H[String(n)]=nt,e?.id!=null&&(R[String(e.id)]=String(n))}const x={},w=(n,t)=>{if(n==null||n==="")return;const e=String(n).toLowerCase();x[e]||(x[e]=t)};for(const[n,t]of Object.entries(A))if(w(n,n),t?.id!=null&&w(t.id,n),t?.slug!=null&&w(t.slug,n),t?.name!=null&&w(t.name,n),t?.product_id!=null&&w(t.product_id,n),t?.name){const e="product_"+String(t.name).toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"");w(e,n)}const T=r.watermarkEnabled??r.watermark_enabled;if(T!=null)try{ut(T)}catch{}m({products:A,productsByRef:x,components:M,features:D,options:S,materials:r.materials||{},componentGroups:r.componentGroups||{},watermarkEnabled:(r.watermarkEnabled??r.watermark_enabled)!==!1,systemUiToggles:r.system?.uiToggles??r.system?.ui_toggles??{},presets:r.presets||{},defaultPresetId:r.defaultPreset??r.default_preset??null,optionToProducts:I,hostedProducts:H,hostedProductByOptionId:R,isLoading:!1}),rt(r.exposeThreejsScene??r.expose_threejs_scene),Q(r.system?.uiToggles??r.system?.ui_toggles)}catch(r){throw m({loadError:r.message,isLoading:!1}),C=null,r}})(),C},getProduct:s=>d().products[s],getComponent:s=>d().components[s],getMaterial:s=>d().materials[s],mergeSystemUiToggles:s=>{!s||typeof s!="object"||(Q(s),m(c=>({systemUiToggles:{...c.systemUiToggles||{},...s}})))},getHostedProductsList:()=>Object.values(d().hostedProducts||{}),getHostedProduct:s=>{if(s==null)return null;const c=String(s),g=d().hostedProducts||{};if(g[c])return g[c];const r=(d().hostedProductByOptionId||{})[c];if(r&&g[r])return g[r];const b=c.toLowerCase();return Object.values(g).find(S=>String(S.name||"").toLowerCase()===b||String(S.slug||"").toLowerCase()===b)||null},getFeatureOptions:s=>{const c=d().features[s];if(!c||!c.options)return[];const h=c.options.map(r=>typeof r=="string"?r:r.id).map(r=>d().options[r]).filter(Boolean);if(c.options.length>0&&typeof c.options[0]=="object"){const r={};c.options.forEach(b=>{r[b.id]=b.sequence||0}),h.sort((b,S)=>(r[b.id]||0)-(r[S.id]||0))}return h}}),{name:"object-graph"}));try{ct(m=>{if(m==null)return null;const d=X.getState().features||{},s=d[String(m)]??d[m];return s?.defaultHiddenOptions??s?.default_hidden_options??null})}catch{}var vt=X;export{vt as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Fragment as Jt,jsx as I,jsxs as ct}from"react/jsx-runtime";import{useCallback as tt,useEffect as Y,useMemo as X,useRef as Ee,useState as Pt,useSyncExternalStore as Ne}from"react";import{Html as un,useProgress as pn}from"@react-three/drei";import T from"./9c6c598569.js";import B from"./872c4302e0.js";import D from"./be337ddda5.js";import ft from"./d94df858ea.js";import{normalizeMaterialTargets as hn}from"./dc2a1a0e13.js";import O from"./8f60e5059a.js";import mn from"./60d697292c.js";import fn from"./811b403d43.js";import{useUiToggles as gn}from"./d0f9681634.js";import{ProductInstance as Qt,SelectionActionPanel as In,FreeMovable as Sn,PlacementGaps as yn,SceneStage as bn,SceneRoom as vn,SceneProductsSource as Pn}from"./8a3a57c008.js";import Mn from"./205827c5c8.js";import{computeTargets as xn,resolveTarget as wn,resolveTargetRenderer as Cn,resolveInsertSequence as _n}from"./58e6419ba8.js";import{disarmPlacement as Xe}from"./ab6c80484f.js";import{resolveComponent as Ze,useComponentRegistry as Tn}from"./882bc739c8.js";import{SlotHost as Fn}from"./73f7d65985.js";import{ModalHost as Gn}from"./09c4973968.js";import On from"./6c0a2572dd.js";import An from"./20b0104576.js";import{getConfigState as kn,subscribe as He,getVersion as At}from"./817d930a49.js";import{getPlacementStrategy as je}from"./281cf952fa.js";import{resolveAddMode as Dn,armPlacement as Ln}from"./ab6c80484f.js";import{resolveReplaceTarget as Rn}from"./4d7a0d1897.js";import{enforceCorners as qn}from"./388cadacbd.js";import{resolvePlacementStrategyConfig as Ve}from"./281cf952fa.js";import{getLabel as zn}from"./28d887bf8a.js";import{isAddFeature as En}from"./8c27edda0f.js";import{usePlacementInteraction as Nn}from"./4b8958aa4c.js";import{refreshCanonicalState as Xn,seedInitialState as Zn,addProduct as kt}from"./a77b15c0d6.js";import{resolveLayout as Hn,hasLayout as jn,useLayoutRegistry as Vn,layoutOverride as Un,_publishResolvedLayoutKey as Wn}from"./31ea036f5c.js";import{themeLayoutKey as Yn}from"./5c9fd9201c.js";import"./1a2629800a.css";import{runIntent as Dt,INTENTS as Lt}from"./6d238282c1.js";function Bn(){const v=ft(a=>a.sceneSelections),P=ft(a=>a.selectionOrder),S=T(a=>a.activeSceneConfigId),p=D(a=>a.defaultPresetId),c=D(a=>a.sceneConfigurations),F=D(a=>a.getSceneFeatures),y=Ne(He,At,At);return X(()=>{const a=S||p||Object.keys(c||{})[0],Mt=a?F(a):[],h=B.getState(),K=[],it=new Set,et=(l,R)=>{if(!l||l.id==null||it.has(String(l.id))||R>4)return;it.add(String(l.id)),K.push(l);const f=(h.features?.[l.id]||h.features?.[String(l.id)])?.childOptionSetIds||[];for(const d of f){const Z=h.features?.[d]||h.features?.[String(d)];Z&&et({id:d,type:Z.type,sequence:Z.sequence},R+1)}};for(const l of Mt)et(l,0);const G=K.filter(l=>/finish/i.test(l.type||"")&&v[l.id]!=null).sort((l,R)=>{const _=P?.[String(l.id)]??-1,f=P?.[String(R.id)]??-1;return _!==f?_-f:(l.sequence??0)-(R.sequence??0)}),z={};for(const l of G){const R=v[l.id],_=h.options?.[R]?.value;if(_==null)continue;const f=h.features?.[l.id]||{},d=hn(f.materialTargets??f.material_targets??f.materials);for(const Z of d)z[String(Z).toLowerCase()]=_}return z},[v,P,S,p,c,F,y])}function Kn(v,P){if(P==null)return null;const S=String(P);for(const p of Object.values(v.products||{})){const c=p?.components_configuration||p?.componentsConfiguration;if(!(!c||typeof c!="object"))for(const F of Object.values(c))for(const y of Array.isArray(F)?F:[F]){const a=y&&typeof y=="object"?y.componentId??y.component_id:y;if(a!=null&&String(a)===S)return p}}return null}function $n(v){const P=ft(h=>h.sceneSelections),S=ft(h=>h.setSceneSelection),p=D(h=>h.getSceneFeatures),c=D(h=>h.sceneConfigurations),F=Ne(He,At,At),y=X(()=>new Set((v?p(v)||[]:[]).filter(h=>En(h)).map(h=>String(h.id))),[v,p,c,F]),a=Ee({}),Mt=ft(h=>h.sceneSelectionsSettled);Y(()=>{if(!Mt){a.current={...P};return}const h=a.current,K=[];for(const[G,z]of Object.entries(P||{}))h[G]===z||z==null||y.has(String(G))&&K.push([G,z]);if(a.current={...P},!K.length)return;const it=D.getState().systemId;let et=!1;return(async()=>{const G=B.getState(),z=T.getState();for(const[l,R]of K){const _=G.options?.[R];let f=_?.valueProductVariantId??_?.value_product_variant_id??_?.value_product_variant??_?.variantId??_?.variant_id??null,d=f!=null?G.getProduct?.(f):null;if(d==null){const u=_?.value??(G.optionToProducts?.[String(R)]||[])[0]??_?.product_id??_?.productId??null;d=u!=null?G.getProduct?.(u):null,d==null&&u!=null&&G.getComponent?.(u)&&(d=Kn(G,u)),f=d?.id??f??u}else f=d?.id??f;if(f==null){S(l,null);continue}const Z=d?.id??f,lt=d?.placementGroup??d?.placement_group??null,$=d?.productGraph??d?.product_graph??null,H=d?.compatibleSlots??d?.compatible_slots??null;if(Array.isArray(H)&&H.length){const u=new Set(H.map(String));if(Object.values(z.productInstances||{}).some(ut=>{const st=G.getProduct?.(ut.variantId)||G.getProduct?.(ut.productId),g=st?.product_graph??st?.productGraph;return g!=null&&u.has(String(g))})){O.getState().setPendingSlotPlacement?.({productId:Z,variantId:f,name:d?.name??d?.displayName??d?.variantName??"product",compatibleGraphIds:Array.from(u)}),S(l,null);continue}}if(Dn(it,d)==="arm"){Ln({productId:Z,variantId:f});const u=je(),xt=typeof u?.computeTargets=="function",ut=Object.prototype.hasOwnProperty.call(u??{},"armHint")?u.armHint:zn(xt?"placement.armedPickTarget":"placement.armedPickGap",xt?"":"Click a + between pieces to insert it.");ut&&O.getState().showInfo?.(ut),S(l,null);continue}const dt=T.getState(),E=dt.selectedInstanceId,gt=E!=null?(dt.productInstances||{})[E]:null,nt=gt&&Number.isFinite(Number(gt.sequence))?Number(gt.sequence):void 0,It=Rn({placementGroup:lt}),ot=It!=null?(dt.productInstances||{})[It]:null,te=ot&&Number.isFinite(Number(ot.sequence))?Number(ot.sequence):nt,ee=Array.isArray(ot?.position)?ot.position:[0,0,0];let ne=null;try{ne=await Dt({type:Lt.PRODUCT_ADD,productGraphId:$,variantId:f,placementGroup:lt,sequence:te,replacePlacementId:It??void 0},u=>kt({productGraphId:u.productGraphId,variantId:u.variantId,placementGroup:u.placementGroup,position:ee,sequence:u.sequence,replace:u.replacePlacementId!=null,replacePlacementId:u.replacePlacementId}))}catch{}if(et)return;S(l,null)}})(),()=>{et=!0}},[P,y,v,S])}function Qn({position:v,onClick:P}){const[S,p]=Pt(!1);return I(un,{position:v,center:!0,style:{pointerEvents:"auto"},zIndexRange:[100,0],children:I("div",{onClick:P,onPointerEnter:()=>p(!0),onPointerLeave:()=>p(!1),style:{width:22,height:22,borderRadius:"50%",background:S?"#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:S?"scale(1.15)":"scale(1)"},children:"+"})})}function Jn({isMobile:v}={}){Tn();const P=Ze("SelectionActionPanel",In),S=T(t=>t.productInstances),p=B(t=>t.getProduct),c=B(t=>t.componentGroups),F=T(t=>t.clearSelection),y=T(t=>t.selectedInstanceId),a=T(t=>t.isFocusing),Mt=T(t=>t.removeProductInstance),h=T(t=>t.addProductInstance),K=T(t=>t.updateInstancePosition),it=T(t=>t.updateInstanceRotation),et=T(t=>t.activeSceneConfigId),G=D(t=>t.defaultPresetId),z=D(t=>t.sceneConfigurations),l=D(t=>t.systemId),R=D(t=>t.useTransform),_=O(t=>t.sceneCapabilities),f=O(t=>t.showWalls),d=O(t=>t.showDimensions),Z=O(t=>t.pendingSlotPlacement),lt=Bn(),$=O(t=>t.hostMaterialOverrides),H=(kn()||{}).room||null,dt=et||G||Object.keys(z||{})[0]||null;$n(dt);const[E,gt]=Pt(!0),[nt,It]=Pt(!1),ot=tt(async()=>{try{await Zn()}catch{}It(!0)},[]),{edgeOf:te,cornerOf:ee,isHostAnchored:ne,isMovable:u,rawFree:xt,splitReliable:ut,freeInstances:st,ordered:g,syntheticHosts:oe,moveInFlightRef:eo}=mn(),wt=X(()=>new Map(oe.map(t=>[t.hostedProductId,t])),[oe]),[St,We]=Pt({}),Rt=tt((t,e)=>{We(n=>{const o=n[t],r=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)===(r?.width??null)&&(o.full?.height??null)===(r?.height??null)&&(o.full?.depth??null)===(r?.depth??null)?n:{...n,[t]:{width:e.width,depth:e.depth,height:e.height,cx:e.cx,cz:e.cz,full:r}}})},[]),pt=tt(t=>St[t]||null,[St]),se=B(t=>t.placementBoundsExcludeIds),re=X(()=>new Set((se||[]).map(t=>String(t))),[se]),qt=tt((t,e)=>{const n=t?.componentId??e?.id??e?.componentId??null;return n!=null&&re.has(String(n))||/leg|arm/i.test(String(t?.slotKey||""))?!0:(e?.groups||e?.group_ids||[]).some(r=>{const i=c?.[r]||c?.[String(r)];return/leg|arm/i.test(String(i?.name??i?.slotKey??i?.slot_key??""))})},[c,re]),yt=Ee(!1),L=g.length+st.length,zt=X(()=>[...g,...st],[g,st]),ht=L>0&&zt.every(t=>St[t.productId]),Et=X(()=>zt.filter(t=>St[t.productId]).length,[zt,St]),{active:ae,loaded:ce,total:Nt}=pn(),ie=O(t=>t.isEvaluating),Ct=O(t=>t.isLayoutLoading),le=O(t=>t.bootEvaluating);Y(()=>{if(!nt)return;const t=!ae&&(Nt===0||ce>=Nt),e=(ht||L===0)&&t&&!ie&&!le,n=()=>{gt(!1),O.getState().endBootLoading()};if(e){const r=setTimeout(n,900);return()=>clearTimeout(r)}const o=setTimeout(n,15e3);return()=>clearTimeout(o)},[nt,ht,L,Et,ae,ce,Nt,ie,le]);const[de,ue]=Pt(!1);Y(()=>{if(!E){ue(!1);return}(ht&&L>0||nt&&L===0)&&ue(!0)},[ht,L,nt,E]);const pe=nt?de||L===0?"Finishing up\u2026":`Loading products\u2026 ${Math.min(Et,L)}/${L}`:"Preparing your configurator\u2026",he=de?100:L>0?Math.min(Math.round(Et/L*100),92):0;Y(()=>{E&&O.getState().setBootPhase(pe,he)},[E,pe,he]),Y(()=>(O.setState({initialSceneLoading:E}),()=>O.setState({initialSceneLoading:!1})),[E]),Y(()=>{Ct&&(yt.current=!1)},[Ct]),Y(()=>{if(L===0){yt.current=!1;return}if(yt.current||E||Ct||!ht)return;const t=requestAnimationFrame(()=>{yt.current||(T.getState().resetCameraToDefault?.({instant:!0}),yt.current=!0)});return()=>cancelAnimationFrame(t)},[L,E,Ct,ht]);const bt=je(),_t=X(()=>g.map(t=>{const e=wt.get(t.id);return e?{...t,productId:e.hostVariantId}:t}),[g,wt]),me=R||!!z?.[dt]?.useTransform,N=T(t=>t.pendingPlacementPiece),fe=!!N&&typeof bt?.computeTargets=="function"&&!!Cn(),rt=X(()=>{const t={getProduct:p,getDims:pt,useTransform:me,candidate:N,openSlots:fe,config:Ve()},e=bt.computeLayout?bt.computeLayout(_t,t):_t.map(()=>({position:[0,0,0],rotation:[0,0,0]}));return qn(e,_t,t,bt)},[bt,_t,p,pt,me,N,fe]),j=X(()=>{const e=H?.height>0?H.height:2.7,n=.1,o=.05,r=new Map;let i=1/0,M=-1/0,A=1/0,m=-1/0,V=0,k=!1;if(g.forEach((s,U)=>{const x=rt[U];if(!x||u(s))return;const b=x.position||[0,0,0],w=pt(s.productId),W=p(s.productId),q=w?.full||w,Yt=q?.height>0?q.height:W?.height>0?W.height*.0254:0,Gt=(b[1]||0)+Yt;if(Gt>V&&(V=Gt),(s.positionedAbove??s.positioned_above)!=null)return;const Bt=(b[1]||0)<=.01,Ot=-((Array.isArray(x.rotation)?x.rotation[1]:0)||0),Kt=w?.depth>0?w.depth:W?.depth>0?W.depth*.0254:.6,$t=w?.width>0?w.width:W?.width>0?W.width*.0254:.9,Q=Math.cos(Ot),J=Math.sin(Ot),Pe=w?.cx||0,Me=w?.cz||0,xe=b[0]+Q*Pe-J*Me,we=b[2]+J*Pe+Q*Me,Ce=($t*Math.abs(Q)+Kt*Math.abs(J))/2,_e=($t*Math.abs(J)+Kt*Math.abs(Q))/2,Te=xe-Ce,Fe=xe+Ce,Ge=we-_e,Oe=we+_e,Ae=q?.width>0?q.width:$t,ke=q?.depth>0?q.depth:Kt,De=b[0]+Q*(q?.cx||0)-J*(q?.cz||0),Le=b[2]+J*(q?.cx||0)+Q*(q?.cz||0),Re=(Ae*Math.abs(Q)+ke*Math.abs(J))/2,qe=(Ae*Math.abs(J)+ke*Math.abs(Q))/2,an=De-Re,cn=De+Re,ln=Le-qe,dn=Le+qe,ze=String((Math.round(Ot/(Math.PI/2))%4+4)%4),C=r.get(ze)||{heading:Ot,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};C.minX=Math.min(C.minX,Te),C.maxX=Math.max(C.maxX,Fe),C.minZ=Math.min(C.minZ,Ge),C.maxZ=Math.max(C.maxZ,Oe),Bt&&(C.fMinX=Math.min(C.fMinX,Te),C.fMaxX=Math.max(C.fMaxX,Fe),C.fMinZ=Math.min(C.fMinZ,Ge),C.fMaxZ=Math.max(C.fMaxZ,Oe),C.hasFloor=!0),r.set(ze,C),i=Math.min(i,an),M=Math.max(M,cn),A=Math.min(A,ln),m=Math.max(m,dn),k=!0}),!k)return null;const mt=Math.max(e,V>0?V+.02:e),Tt=[...r.values()].map(s=>{const U=Math.sin(s.heading),x=Math.cos(s.heading),b=U,w=-x,W=Math.abs(b)>Math.abs(w),q=s.hasFloor?s.fMinX:s.minX,Yt=s.hasFloor?s.fMaxX:s.maxX,Gt=s.hasFloor?s.fMinZ:s.minZ,Bt=s.hasFloor?s.fMaxZ:s.maxZ,ve=W?(b>0?Yt:q)+(b>0?n/2:-n/2):(w>0?Bt:Gt)+(w>0?n/2:-n/2);return{g:s,isSide:W,plane:ve}}),nn=Tt.filter(s=>s.isSide).map(s=>s.plane),on=Tt.filter(s=>!s.isSide).map(s=>s.plane),Ht=[];for(const s of Tt){const{g:U}=s;if(s.isSide){let x=U.minZ,b=U.maxZ;for(const w of on)x=Math.min(x,w),b=Math.max(b,w);Ht.push({cx:s.plane,cz:(x+b)/2,cy:mt/2,length:b-x+o*2,thickness:n,height:mt,rotY:Math.PI/2})}else{let x=U.minX,b=U.maxX;for(const w of nn)x=Math.min(x,w),b=Math.max(b,w);Ht.push({cx:(x+b)/2,cz:s.plane,cy:mt/2,length:b-x+o*2,thickness:n,height:mt,rotY:0})}}const Ft=.4,be=M>i&&m>A;let jt=i-Ft,Vt=M+Ft,Ut=A-Ft,Wt=m+Ft;for(const s of Tt){const U=Math.sin(s.g.heading),x=-Math.cos(s.g.heading);s.isSide?U<0?jt=s.plane-n/2:Vt=s.plane+n/2:x<0?Ut=s.plane-n/2:Wt=s.plane+n/2}const sn=be?{cx:(jt+Vt)/2,cz:(Ut+Wt)/2,w:Vt-jt,d:Wt-Ut}:null,rn=be?{minX:i,maxX:M,minZ:A,maxZ:m,w:M-i,d:m-A,h:mt,height:V>0?V:mt}:null;return{segments:Ht,floor:sn,bbox:rn}},[g,rt,H,pt,p,u]),Ye=f&&!!(j&&j.segments&&j.segments.length),Be=d&&!!(j&&j.bbox&&j.bbox.w>0),Ke=(t,e)=>{const n=rt[e]||{position:[0,0,0],rotation:[0,0,0]},o=wt.get(t.id);if(!o)return n;const r=n.position||[0,0,0],i=(Array.isArray(n.rotation)?n.rotation[1]:0)||0,M=Math.cos(i),A=Math.sin(i),m=o.offset||[0,0,0];return{position:[r[0]+(m[0]||0)*M+(m[2]||0)*A,r[1]+(m[1]||0),r[2]-(m[0]||0)*A+(m[2]||0)*M],rotation:[0,i+(o.rotDegY||0)*Math.PI/180,0]}},at=Z,vt=!!at,ge=X(()=>{if(!at)return new Set;const t=new Set((at.compatibleGraphIds||[]).map(String)),e=new Set;for(const n of Object.values(S||{})){const o=p(n.variantId)||p(n.productId),r=o?.product_graph??o?.productGraph;r!=null&&t.has(String(r))&&e.add(String(n.id))}return e},[at,S,p]),Xt=tt(()=>{O.getState().clearPendingSlotPlacement?.(),O.getState().clearPendingHostedProduct?.()},[]),Ie=tt((t,e)=>{if(!e)return;const n=B.getState(),o=n.getProduct?.(e.variantId)||n.getProduct?.(e.productId),r=o?.productGraph??o?.product_graph??null,i=T.getState().productInstances?.[String(t)],M=o?.placementGroup??o?.placement_group??i?.placementGroup??null,A=Array.isArray(i?.position)?i.position:[0,0,0],m=i?.variantId??i?.productId??null,V=Number.isFinite(Number(i?.sequence))?Number(i.sequence):void 0;Xt(),Dt({type:Lt.PRODUCT_ADD,productGraphId:r,variantId:e.variantId??e.productId,placementGroup:M,sequence:V,hostPlacementId:String(t),hostVariantId:m},k=>kt({productGraphId:k.productGraphId,variantId:k.variantId,placementGroup:k.placementGroup,position:A,sequence:k.sequence,hostPlacementId:k.hostPlacementId,hostVariantId:k.hostVariantId}).catch(()=>{}))},[Xt]),Zt=tt((t,e)=>{const n=B.getState(),o=n.getProduct?.(e.variantId)||n.getProduct?.(e.productId),r=o?.productGraph??o?.product_graph??null,i=o?.placementGroup??o?.placement_group??null,M=g[t-1]||g[t],A=Array.isArray(M?.position)?M.position:[0,0,0],m=g[t],V=m&&Number.isFinite(Number(m.sequence))?Number(m.sequence):void 0;Dt({type:Lt.PRODUCT_ADD,productGraphId:r,variantId:e.variantId??e.productId,placementGroup:i,sequence:V},k=>kt({productGraphId:k.productGraphId,variantId:k.variantId,placementGroup:k.placementGroup,position:A,sequence:k.sequence}).catch(()=>{}))},[g]);Y(()=>{if(!N||g.length>0)return;const t=N;Xe(),Zt(0,t)},[N,g.length,Zt]);const{gaps:$e,onInsert:Qe}=Nn({systemId:l,count:g.length,positionOf:t=>rt[t]?.position||[0,0,0],insertAt:Zt}),Se=X(()=>{if(!N)return[];const t=B.getState();return xn(g,{candidate:N,getProduct:e=>t.getProduct?.(e),getDims:pt,config:Ve(),layout:rt})},[N,g,rt,pt]),Je=tt(t=>{const e=wn(t,{candidate:N});if(!e)return;const n=B.getState(),o=n.getProduct?.(e.variantId)||n.getProduct?.(e.productId),r=o?.productGraph??o?.product_graph??null,i=o?.placementGroup??o?.placement_group??null,M=e.transform?.position??t.position??[0,0,0],A=_n(e,t,g);Dt({type:Lt.PRODUCT_ADD,productGraphId:r,variantId:e.variantId??e.productId,placementGroup:i,anchor:e.anchor??null,sequence:A},m=>kt({productGraphId:m.productGraphId,variantId:m.variantId,placementGroup:m.placementGroup,position:M,sequence:m.sequence}).catch(()=>{})),Xe()},[N,g]),{selectedInst:no,swapOrder:oo,panelActions:ye,priceInfo:tn}=fn(),en=gn()("selectionPanel");Y(()=>{if(y==null)return;const t=S||{},e=String(y),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[y]||Object.values(t).some(o=>String(o?.instanceId??o?.id)===e))return;F?.()},[y,S,F]);const ro=ft(t=>t.placementPricing),ao=D(t=>t.getChannelPriceConfig);return ct(Jt,{children:[I(Pn,{onSeeded:ot}),ct(bn,{isMobile:v,camera:{position:[2.6,2.2,4],fov:45},controlsTarget:[0,.5,0],onPointerMissed:()=>F?.(),groundShadowCatcher:!0,overlay:ct(Jt,{children:[!vt&&ye&&en?I(P,{actions:ye,priceInfo:tn}):null,vt&&I("div",{className:"placement-mode-overlay",children:ct("div",{className:"placement-mode-overlay__content",children:[ct("span",{className:"placement-mode-overlay__text",children:["Click on a highlighted slot to place ",I("strong",{children:at?.name})]}),I("button",{type:"button",className:"placement-mode-overlay__cancel",onClick:Xt,children:I("span",{className:"placement-mode-overlay__cancel-text",children:"Cancel"})})]})}),I(Fn,{name:"overlay"}),a&&I("div",{"aria-hidden":"true",style:{position:"absolute",inset:0,zIndex:30,cursor:"default"}})]}),children:[Ye&&I(vn,{width:H?.width,depth:H?.depth,height:H?.height??j?.bbox?.h??2.7,showCeiling:_?.ceiling===!0,segments:j?.segments||null,floor:j?.floor||null}),Be&&(()=>{const t=Ze("SceneDimensions",An);return I(t,{bbox:j.bbox})})(),g.map((t,e)=>{const n=wt.get(t.id),o=rt[e]||{position:[0,0,0],rotation:[0,0,0]};return o.hidden?null:ct("group",{children:[n&&I(Qt,{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:{...lt,...$?.[n.hostedProductId]||{},...$?.[n.id]||{}},stateInstanceId:n.hostedProductId,onSelect:()=>T.getState().selectInstance(n.id),isSelected:String(y)===String(n.id),onMeasure:r=>Rt(n.hostVariantId,r),footprintExcludeItem:qt,hoverable:!0,focusable:!0},n.id),I(Qt,{instance:{...t,...Ke(t,e)},slotMaterials:{...lt,...$?.[t.id]||$?.[t.instanceId]||{}},onSelect:(r,i,M)=>{if(vt){ge.has(String(t.id))&&Ie(t.id,at);return}T.getState().selectInstance(r,M??null)},isSelected:!vt&&String(y)===String(t.instanceId??t.id),onMeasure:r=>Rt(t.productId,r),footprintExcludeItem:qt,hoverable:!0,focusable:!0}),vt&&ge.has(String(t.id))&&I(Qn,{position:[o.position?.[0]||0,(o.position?.[1]||0)+.45,o.position?.[2]||0],onClick:()=>Ie(t.id,at)})]},t.id??t.instanceId??e)}),st.map((t,e)=>I(Sn,{selected:y===t.id,disabled:!!t.locked,position:t.position||[0,0,0],rotationY:(Array.isArray(t.rotation)&&t.rotation[1]||0)*Math.PI/180,onCommit:({position:n,rotationY:o})=>{K(t.id,n),it(t.id,[0,o*180/Math.PI,0]),Xn({allowRevert:!0}).catch(()=>{})},children:I(Qt,{instance:{...t,position:[0,0,0],rotation:[0,0,0]},slotMaterials:{...lt,...$?.[t.id]||$?.[t.instanceId]||{}},onMeasure:n=>Rt(t.productId,n),footprintExcludeItem:qt})},t.id??t.instanceId??`free-${e}`)),Se.length>0?I(Mn,{targets:Se,onPick:Je}):I(yn,{gaps:$e,onInsert:Qe})]})]})}const Ue=new Set;function to(){Vn();const v=D(a=>a.systemLayoutTemplate),P=D(a=>a.systemTheme),S=D(a=>a.systemThemeRecord),p=Yn(S)||(P?String(P).trim().toLowerCase():null);let c=v;try{const a=new URLSearchParams(window.location.search);a.has("template")?c=a.get("template"):a.has("theme")&&(c=a.get("theme"))}catch{}c=c||v||p||null;const F=Un();F&&(c=F),!F&&!v&&c&&c===p&&!jn(c)&&!/^theme\d+$/.test(c)&&!Ue.has(c)&&Ue.add(c),Wn(c);const y=Hn(c);return ct(Jt,{children:[I(y,{Scene:Jn,template:c}),I(Gn,{}),I(On,{})]})}export{Jn as SharedConfiguratorScene,to as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{isHostedProduct as d}from"./061b81ad81.js";import g from"./872c4302e0.js";const b=i=>String(i??"").toLowerCase();function p(i,n){const e=b(i);return!e||!n?!0:n==="upper"||n==="wall"?e==="upper"||e==="wall":n==="corner"?e.includes("corner"):e===n}function a(i){if(i==null)return[];const n=g.getState(),e=n.products||{},l=n.optionToProducts||{};return(l[String(i)]||l[i]||[]).map(t=>e[t]||e[String(t)]).filter(t=>t&&!d(t))}function S({optionId:i,optionValue:n,cabinetType:e,desiredWidth:l,desiredHeight:r}={}){const c=g.getState().products||{};if(n!=null){const o=c[n]||c[String(n)];if(o&&!d(o))return{productId:o.id??n,width:o.width??l??null,height:o.height??null,product:o}}let u=a(i).filter(o=>p(o.cabinet_type??o.cabinetType,e));if(u.length||(u=a(i)),!u.length)return null;let s=null;if(l!=null){const o=u.filter(f=>Number(f.width)===Number(l));s=r!=null&&o.length>1&&o.find(f=>Number(f.height)===Number(r))||o[0]}return!s&&r!=null&&(s=u.find(o=>Number(o.height)===Number(r))),s||(s=[...u].sort((o,f)=>(Number(o.width)||1e9)-(Number(f.width)||1e9))[0]),s?{productId:s.id,width:s.width??l??null,height:s.height??null,product:s}:null}function _(i="floor_back_corner"){const e=g.getState().products||{},l=b(i),r=c=>c&&!d(c);let t=Object.values(e).find(c=>r(c)&&b(c.placement_group??c.placementGroup)===l);return t||(t=Object.values(e).find(c=>r(c)&&p(c.cabinet_type??c.cabinetType,"corner"))),t?t.id??null:null}function w(i,n){const e=a(i).filter(r=>p(r.cabinet_type??r.cabinetType,n)),l=new Set;for(const r of e){const t=Number(r.width);!Number.isNaN(t)&&t>0&&l.add(t)}return[...l].sort((r,t)=>r-t)}function y(i,n,e){if(n==null)return[];const l=a(i).filter(t=>p(t.cabinet_type??t.cabinetType,e)),r=new Set;for(const t of l){const c=t.optionSets||t.features_configuration_ids||[];for(const u of Array.isArray(c)?c:[]){if(!u||typeof u!="object")continue;const s=u.optionSetId??u.option_set_id??u.id??u.feature_id;if(String(s)!==String(n))continue;const o=u.defaultOption??u.default_option??u.default_option_id;o!=null&&r.add(String(o))}}return[...r]}export{y as catalogFrameOptionsForDoorType,w as catalogWidthsForOption,_ as resolveDefaultCornerProduct,S as resolvePieceProduct};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
let u=!1,o=!1,n=!0,s=!1,r=!0,f=!1;const a=new Set;function i(){for(const e of a)try{e()}catch{}}function p(e){const t=e===!0;t||(o=!0);const l=t&&!o;l!==u&&(u=l,i())}function d(e){if(!e||typeof e!="object"||!Object.prototype.hasOwnProperty.call(e,"aiChat"))return;e.aiChat===!1&&(s=!0);const t=!s;t!==n&&(n=t,i())}let c=!1;function h(){c||(c=!0,i())}function _(e){if(!e||typeof e!="object"||!Object.prototype.hasOwnProperty.call(e,"ai_chat_configurator"))return;e.ai_chat_configurator===!1&&(f=!0);const t=!f;t!==r&&(r=t,i())}function x(){return n&&r&&!c}function C(){return c?"unauthorized":r?n?null:"disabled":"plan"}function b(){return u}function A(e){return a.add(e),()=>{a.delete(e)}}function F(e){return a.add(e),()=>{a.delete(e)}}function m(){u=!1,o=!1,n=!0,s=!1,c=!1,r=!0,f=!1,i()}export{m as _resetEntitlementGate,C as getAiChatDenialReason,x as getAiChatGranted,b as getSceneAccessGranted,_ as setAiChatFeatureFromBackend,d as setAiChatFromBackend,h as setAiChatRuntimeRefused,p as setSceneAccessFromBackend,A as subscribeEntitlements,F as subscribeSceneAccess};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as a,jsxs as r}from"react/jsx-runtime";import{useLabels as p}from"./28d887bf8a.js";function m({message:t,detail:i=null,progress:n=null,overlay:c=!1,translucent:d=!1,compact:o=!1}){const u=p(),g=t??u("loading.message","Loading Configurator..."),e=["loading-screen"];c&&e.push("loading-screen--overlay"),d&&e.push("loading-screen--translucent"),o&&e.push("loading-screen--compact");const s=typeof n=="number"&&n>=0,l=s?Math.max(0,Math.min(100,Math.round(n))):0;return a("div",{className:e.join(" "),role:"status","aria-live":"polite","data-part":"loading","data-compact":o?"true":void 0,children:r("div",{className:"loading-screen__box",children:[a("div",{className:"loading-screen__spinner"}),a("p",{className:"loading-screen__text",children:g}),i&&a("p",{className:"loading-screen__detail",children:i}),s&&a("div",{className:"loading-screen__bar",role:"progressbar","aria-valuenow":l,"aria-valuemin":0,"aria-valuemax":100,children:a("div",{className:"loading-screen__bar-fill",style:{width:`${l}%`}})}),s&&r("p",{className:"loading-screen__pct",children:[l,"%"]})]})})}var f=m;export{f as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{useSyncExternalStore as y}from"react";const n=new Map;let u=new Map,a=0;const i=new Set;function p(){a+=1,u=new Map;for(const e of i)try{e()}catch{}}function f(e){return typeof e=="string"?e.trim().toLowerCase():""}function v(e,t){const r=f(e);return!r||typeof t!="function"?()=>{}:(n.set(r,t),p(),()=>{n.get(r)===t&&(n.delete(r),p())})}function w(e){const t=f(e);return!!t&&n.has(t)}function C(){return Array.from(n.keys())}function _(e,t){const r=f(e);if(!r)return t;const o=n.get(r);if(!o)return t;const s=u.get(r);if(s&&s.override===o&&s.Builtin===t)return s.Wrapper;const c=m=>o({...m,Default:t});return c.displayName=`Override(${e})`,u.set(r,{override:o,Builtin:t,Wrapper:c}),c}function x(e){return i.add(e),()=>{i.delete(e)}}function d(){return a}function g(){return y(x,d,d)}function k(e,t){return g(),_(e,t)}function h(){n.clear(),p()}export{h as _resetComponents,w as hasComponent,C as listComponentOverrides,v as registerComponent,_ as resolveComponent,k as useComponent,g as useComponentRegistry};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(){return/iPad|iPhone|iPod/.test(navigator.userAgent)||navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1}function n(){return!!(document.documentElement.requestFullscreen||document.documentElement.webkitRequestFullscreen)&&!e()}function t(){return!!(screen.orientation&&screen.orientation.lock)}export{t as canLockOrientation,n as canUseFullscreen,e as isIOS};
|