PageSourceSearch

https://wedraw.kr/assets/AppSinkCabinet.BLvkLTfp.js

js wedraw.kr collected 2026-10-04 07:42:42 UTC 58,092 bytes, 195 lines download raw bytes

1import{j as n}from"./vendor-ui.BwPBmVwt.js";import{r as y,R as Xe}from"./vendor-react.kR8tqwKZ.js";import{j as He,k as Fe,a7 as we,B as ce,f as $e,aE as qe,y as Re,aD as Be,aC as Ke,V as e,r as Y,g as Ge,aA as Je,C as Qe,O as en,E as nn,u as tn}from"./vendor-three.C5-HLXBy.js";import{a as sn,d as re}from"./vendor-utils.D2q0l15H.js";import{B as Pe,E as We,S as Ie}from"./Evaluator.DqK84_8_.js";import{a as Oe}from"./index.42ANG6Sg.js";import{t as Ne}from"./dateHelpers.cqHLwmI3.js";import{L as on,a as rn}from"./LabBanner.DdcZKo4g.js";import{S as an}from"./SEOHead.D0qkmjFM.js";import{u as ln}from"./useSEOMetadata.BlLpe0O8.js";import"./index.86ltQqcV.js";import"./seoConfig.O5IaGInB.js";const Ee=a=>{const g=a.width*a.depth/1e6,L=(a.height-850)/10*1500,G=a.countertopMaterial==="artificial-marble-white"?12e4:14e4,P={white:8e4,gray:6e4,"linen-grayish":7e4,"linen-ash":9e4}[a.interiorMaterial],S=4e4,A=0,D=a.shelfReinforcement==="hardware"?3e4:a.shelfReinforcement==="vertical"?15e3:0,O=a.legType==="leveler"?2e4:a.legType==="adjustable"?15e3:1e4,f=a.channelHeight/10*(a.channelDepth/10)*100,N=(13e4+g*G+g*P+S+A+D+O+f+L)*1.1;return Math.ceil(N/1e3)*1e3},ae=sn((a,l)=>({config:{countertopMaterial:"artificial-marble-white",interiorMaterial:"linen-grayish",doorFinish:"clean-white",width:600,depth:500,height:850,doorConfig:"double",isDoorsOpen:!1,channelHeight:60,channelDepth:40,shelfReinforcement:"none",legType:"adjustable",legHeight:100,topPanelThickness:30,doorThickness:18,panelThickness:18,backPanelThickness:3,supportHeight:70,shelfInset:18},totalPrice:0,updateConfig:g=>{a(C=>{const L={...C.config,...g},G=Ee(L);return{config:L,totalPrice:G}})},calculatePrice:()=>{const{config:g}=l(),C=Ee(g);return a({totalPrice:C}),C},toggleDoors:()=>{a(g=>({config:{...g.config,isDoorsOpen:!g.config.isDoorsOpen}}))},getCarcassDimensions:()=>{const{config:g}=l();return{width:g.width,height:g.height-g.topPanelThickness-g.legHeight,depth:g.depth-g.doorThickness}},getInnerDimensions:()=>{const{config:g}=l(),C=l().getCarcassDimensions();return{width:C.width-g.panelThickness*2,height:C.height-g.panelThickness,depth:C.depth-g.backPanelThickness}},getDoorDimensions:()=>{const{config:g}=l(),C=g.height-g.topPanelThickness-g.legHeight-g.channelHeight+28;return{width:g.width,height:C,depth:g.doorThickness}}}));setTimeout(()=>{ae.getState().calculatePrice()},0);const cn=({width:a,depth:l,height:g=30,position:C,material:L})=>{const P=a*.001,S=l*.001,A=g*.001,D=He({"artificial-marble-white":"/images/countertop/artificial-marble-white.jpg","ceramic-gray":"/images/countertop/ceramic-gray.jpg"}),O=D[L];y.useMemo(()=>{Object.values(D).forEach(N=>{N.wrapS=N.wrapT=Fe,N.repeat.set(1,1)})},[D]);const f=y.useMemo(()=>{const N=L==="artificial-marble-white"?new we(.5,.5,.5):new we(.3,.3,.3);return{map:O,color:N,roughness:.95,metalness:0}},[O,L]),m=y.useMemo(()=>{const N=new ce(P,A,S);return new $e(N)},[P,A,S]);return n.jsxs("group",{position:C,children:[n.jsxs("mesh",{castShadow:!0,receiveShadow:!0,children:[n.jsx("boxGeometry",{args:[P,A,S]}),n.jsx("meshStandardMaterial",{...f})]}),n.jsx("lineSegments",{geometry:m,children:n.jsx("lineBasicMaterial",{color:"#333333",opacity:.15,transparent:!0})})]})},dn=({legType:a,legHeight:l,cabinetWidth:g,cabinetDepth:C,position:L})=>{const G=ae(b=>b.config),P=.001,S=He({white:"/images/innerpanel/lx-white.jpg",gray:"/images/innerpanel/lx-gray.jpg","linen-grayish":"/images/innerpanel/lx-linen-grayish.jpg","linen-ash":"/images/innerpanel/lx-linen-ash.jpg"}),A=S[G.interiorMaterial];y.useMemo(()=>
1{Object.values(S).forEach(b=>{b.wrapS=b.wrapT=Fe,b.repeat.set(1,1)})},[S]);const D=50*P,O=70*P,f=40*P,m=y.useMemo(()=>{const b=g*P,M=C*P,j=a==="leveler"?O:D,v=a==="leveler"?20*P:0,U=[[-b/2+j,0,-M/2+j+v],[b/2-j,0,-M/2+j+v],[-b/2+j,0,M/2-j-f+v],[b/2-j,0,M/2-j-f+v]];return g>=900&&U.push([0,0,-M/2+j+v],[0,0,M/2-j-f+v]),U},[g,C,a]),N={color:"#2a2a2a",roughness:.3,metalness:.5},X=({pos:b})=>{const M=l*P,j=50*P,v=.003,U=60*P,Z=M-v;return n.jsxs("group",{position:b,children:[n.jsxs("mesh",{position:[0,v/2,0],children:[n.jsx("cylinderGeometry",{args:[U/2,U/2,v,32]}),n.jsx("meshStandardMaterial",{color:"#1a1a1a",roughness:.4,metalness:.2})]}),n.jsxs("mesh",{position:[0,v+Z/2,0],children:[n.jsx("cylinderGeometry",{args:[j/2,j/2,Z,32]}),n.jsx("meshStandardMaterial",{...N})]}),n.jsxs("mesh",{position:[0,v+Z+.005,0],children:[n.jsx("cylinderGeometry",{args:[.025,.025,.01,32]}),n.jsx("meshStandardMaterial",{...N})]}),n.jsxs("lineSegments",{position:[0,v+Z/2,0],children:[n.jsx("edgesGeometry",{args:[new qe(j/2,j/2,Z,32)]}),n.jsx("lineBasicMaterial",{color:"#333333",opacity:.15,transparent:!0})]})]})},F=()=>{const b=l*P,M=g*P,j=C*P,v=.018,U=.018,Z=.022,te=j-U-Z,V=j/2-U-Z-te/2,R=A.clone();R.wrapS=R.wrapT=Re,R.colorSpace=A.colorSpace;const oe=b/te;R.repeat.set(1,oe),R.needsUpdate=!0;const Q=A.clone();Q.wrapS=Q.wrapT=Re,Q.colorSpace=A.colorSpace;const r=b/M;Q.repeat.set(1,r),Q.needsUpdate=!0;const E=A.clone();
1E.wrapS=E.wrapT=Re,E.colorSpace=A.colorSpace,E.repeat.set(1,r),E.needsUpdate=!0;const $=G.interiorMaterial==="white"?0:G.interiorMaterial==="gray"?.1:G.interiorMaterial==="linen-grayish"?.05:0,q=G.interiorMaterial==="white"?new we(.9,.9,.9):G.interiorMaterial==="gray"?new we(.4,.4,.4):G.interiorMaterial==="linen-grayish"?new we(.35,.35,.35):new we(.55,.55,.55);return n.jsxs("group",{position:[0,0,0],children:[n.jsxs("mesh",{castShadow:!0,receiveShadow:!0,position:[-M/2+v/2,b/2,V],children:[n.jsx("boxGeometry",{args:[v,b,te]}),n.jsx("meshStandardMaterial",{map:R,color:q,roughness:.7,metalness:.1,emissive:"#ffffff",emissiveIntensity:$})]}),n.jsxs("mesh",{castShadow:!0,receiveShadow:!0,position:[M/2-v/2,b/2,V],children:[n.jsx("boxGeometry",{args:[v,b,te]}),n.jsx("meshStandardMaterial",{map:R,color:q,roughness:.7,metalness:.1,emissive:"#ffffff",emissiveIntensity:$})]}),n.jsxs("mesh",{castShadow:!0,receiveShadow:!0,position:[0,b/2,j/2-U-Z-v/2],children:[n.jsx("boxGeometry",{args:[M-v*2,b,v]}),n.jsx("meshStandardMaterial",{map:Q,color:q,roughness:.7,metalness:.1,emissive:"#ffffff",emissiveIntensity:$})]}),n.jsxs("mesh",{castShadow:!0,receiveShadow:!0,position:[0,b/2,-j/2+v/2],children:[n.jsx("boxGeometry",{args:[M-v*2,b,v]}),n.jsx("meshStandardMaterial",{map:E,color:q,roughness:.7,metalness:.1,emissive:"#ffffff",emissiveIntensity:$})]}),n.jsxs("lineSegments",{position:[-M/2+v/2,b/2,V],children:[n.jsx("edgesGeometry",{args:[new ce(v,b,te)]}),n.jsx("lineBasicMaterial",{color:"#333333",opacity:.15,transparent:!0})]}),n.jsxs("lineSegments",{position:[M/2-v/2,b/2,V],children:[n.jsx("edgesGeometry",{args:[new ce(v,b,te)]}),n.jsx("lineBasicMaterial",{color:"#333333",opacity:.15,transparent:!0})]}),n.jsxs("lineSegments",{position:[0,b/2,j/2-U-Z-v/2],children:[n.jsx("edgesGeometry",{args:[new ce(M-v*2,b,v)]}),n.jsx("lineBasicMaterial",{color:"#333333",opacity:.15,transparent:!0})]}),n.jsxs("lineSegments",{position:[0,b/2,-j/2+v/2],children:[n.jsx("edgesGeometry",{args:[new ce(M-v*2,b,v)]}),n.jsx("lineBasicMaterial",{color:"#333333",opacity:.15,transparent:!0})]})]})},z=({pos:b})=>{const M=l*P,j=10*P,v=65*P,U=5*P,Z=60*P,te=65*P,V=90*P,R=20*P,oe=15*P,Q=M-U-R-oe,r=ee=>{const se=new Ke,I=ee/2,ne=j;
1return se.moveTo(-I+ne,-I),se.lineTo(I-ne,-I),se.quadraticCurveTo(I,-I,I,-I+ne),se.lineTo(I,I-ne),se.quadraticCurveTo(I,I,I-ne,I),se.lineTo(-I+ne,I),se.quadraticCurveTo(-I,I,-I,I-ne),se.lineTo(-I,-I+ne),se.quadraticCurveTo(-I,-I,-I+ne,-I),se},E=y.useMemo(()=>{const ee=new Be(r(v),{depth:U,bevelEnabled:!1});return ee.rotateX(Math.PI/2),ee},[v,U]),$=y.useMemo(()=>{const ee=new Be(r(Z),{depth:Q,bevelEnabled:!1});return ee.rotateX(Math.PI/2),ee},[Z,Q]),q=y.useMemo(()=>{const ee=new Be(r(te),{depth:oe,bevelEnabled:!1});return ee.rotateX(Math.PI/2),ee},[te,oe]),de=y.useMemo(()=>{const ee=new Be(r(V),{depth:R,bevelEnabled:!1});return ee.rotateX(Math.PI/2),ee},[V,R]),me=0,ie=-R,pe=-R-oe,je=-R-oe-Q;return n.jsxs("group",{position:b,children:[n.jsx("mesh",{position:[0,me,0],geometry:de,children:n.jsx("meshStandardMaterial",{...N})}),n.jsxs("lineSegments",{position:[0,me,0],children:[n.jsx("edgesGeometry",{args:[de]}),n.jsx("lineBasicMaterial",{color:"#333333",opacity:.15,transparent:!0})]}),n.jsx("mesh",{position:[0,ie,0],geometry:q,children:n.jsx("meshStandardMaterial",{...N})}),n.jsxs("lineSegments",{position:[0,ie,0],children:[n.jsx("edgesGeometry",{args:[q]}),n.jsx("lineBasicMaterial",{color:"#333333",opacity:.15,transparent:!0})]}),n.jsx("mesh",{position:[0,pe,0],geometry:$,children:n.jsx("meshStandardMaterial",{...N})}),n.jsxs("lineSegments",{position:[0,pe,0],children:[n.jsx("edgesGeometry",{args:[$]}),n.jsx("lineBasicMaterial",{color:"#333333",opacity:.15,transparent:!0})]}),n.jsx("mesh",{position:[0,je,0],geometry:E,children:n.jsx("meshStandardMaterial",{...N})}),n.jsxs("lineSegments",{position:[0,je,0],children:[n.jsx("edgesGeometry",{args:[E]}),n.jsx("lineBasicMaterial",{color:"#333333",opacity:.15,transparent:!0})]})]})},J=a==="leveler"?0:-(l*P);return n.jsxs("group",{position:L,children:[a==="adjustable"&&n.jsx(n.Fragment,{children:m.map((b,M)=>n.jsx(X,{pos:[b[0],J,b[2]]},`adj-leg-${M}`))}),a==="base"&&n.jsx("group",{position:[0,J,0],children:n.jsx(F,{})}),a==="leveler"&&n.jsx(n.Fragment,{children:m.map((b,M)=>n.jsx(z,{pos:[b[0],J,b[2]]},`leveler-${M}`))})]})},pn=()=>{const{config:a,getCarcassDimensions:l,getInnerDimensions:g}=ae(),C=He({white:"/images/innerpanel/lx-white.jpg",gray:"/images/innerpanel/lx-gray.jpg","linen-grayish":"/images/innerpanel/lx-linen-grayish.jpg","linen-ash":"/images/innerpanel/lx-linen-ash.jpg"}),L=C[a.interiorMaterial];y.useMemo(()=>{Object.values(C).forEach(u=>{u.wrapS=u.wrapT=Fe,u.repeat.set(1,1)})},[C]);const G=l(),P=g(),S=.001,A=G.width*S,D=G.height*S,O=G.depth*S,f=P.width*S;P.height*S,P.depth*S;const m=a.panelThickness*S,N=a.backPanelThickness*S,X=a.supportHeight*S,F=a.channelDepth*S,z=a.channelHeight*S,J=a.shelfInset*S,b=a.legHeight*S,M={map:L,color:a.interiorMaterial==="white"?new we(.9,.9,.9):new we(.4,.4,.4),roughness:.7,metalness:.1},j={color:"#000000",opacity:.5,transparent:!0},v=y.useMemo(()=>{const u=new We,s=new ce(m,D,O),o=new Pe(s),t=new ce(m*2,z*1.2,F*1.2),i=new Pe(t);return i.position.x=m*.25,i.position.y=D/2-z/2+z*.1,i.position.z=O/2-F/2+F*.1,i.updateMatrixWorld(),u.evaluate(o,i,Ie).geometry.clone()},[m,D,O,F,z]),U=()=>{const u=y.useMemo(()=>{const s=[],o=m/2,t=D/2,i=O/2;return s.push(new e(-o,-t,i)),s.push(new e(-o,t-z,i)),s.push(new e(-o,t-z,i)),s.push(new e(-o,t-z,i-F)),s.push(new e(-o,t,i-F)),s.push(new e(-o,t,-i)),s.push(new e(-o,t,-i)),s.push(new e(-o,-t,-i)),s.push(new e(-o,-t,i)),s.push(new e(o,-t,i)),s.push(new e(o,t-z,i)),s.push(new e(o,t-z,i)),s.push(new e(o,t-z,i-F)),s.push(new e(o,t,i-F)),s.push(new e(o,t,-i)),s.push(new e(o,t,-i)),s.push(new e(o,-t,-i)),s.push(new e(o,-t,i)),new Y().setFromPoints(s)},[m,D,O,z,F]);return n.jsxs("group",{position:[-A/2+m/2,0,0],children:[n.jsx("mesh",{geometry:v,castShadow:!0,receiveShadow:!0,children:n.jsx("meshStandardMaterial",{...M})}),n.jsx("line",{geometry:u,children:n.jsx("lineBasicMaterial",{...j})})]})},Z=y.useMemo(()=>{const u=new We,s=new ce(m,D,O),o=new Pe(s),t=new ce(m*2,z*1.2,F*1.2),i=new Pe(t);return i.position.x=-m*.25,i.position.y=D/2-z/2+z*.1,i.position.z=O/2-F/2+F*.1,i.updateMatrixWorld(),u.evaluate(o,i,Ie).geometry.clone()},[m,D,O,F,z]),te=()=>{const u=y.useMemo(()=>{const s=[],o=m/2,t=D/2,i=O/2;return s.push(new e(o,-t,i)),s.push(new e(o,t-z,i)),s.push(new e(o,t-z,i)),s.push(new e(o,t-z,i-F)),s.push(new e(o,t,i-F)),s.push(new e(o,t,-i)),s.push(new e(o,t,-i)),s.push(new e(o,-t,-i)),s.push(new e(o,-t,i)),s.push(new e(-o,-t,i)),s.push(new e(-o,t-z,i)),s.push(new e(-o,t-z,i)),s.push(new e(-o,t-z,i-F)),s.push(new e(-o,t,i-F)),s.push(new e(-o,t,-i)),s.push(new e(-o,t,-i)),s.push(new e(-o,-t,-i)),s.push(new e(-o,-t,i)),new Y().setFromPoints(s)},[m,D,O,z,F]);return n.jsxs("group",{position:[A/2-m/2,0,0],children:[n.jsx("mesh",{geometry:Z,castShadow:!0,receiveShadow:!0,children:n.jsx("meshStandardMaterial",{...M})}),n.jsx("line",{geometry:u,children:n.jsx("lineBasicMaterial",{...j})})]})},V=O-(J+N),R=O/2-V/2,oe=()=>{const u=y.useMemo(()=>{const t=f/2,i=m/2,k=V/2,B=[new e(-t,-i,-k),new e(-t,i,-k),new e(-t,-i,k),new e(-t,i,k),new e(-t,-i,-k),new e(-t,-i,k),new e(-t,i,-k),new e(-t,i,k)];return new Y().setFromPoints(B)},[f,m,V]),s=y.useMemo(()=>{const t=f/2,i=m/2,k=V/2,B=[new e(t,-i,-k),new e(t,i,-k),new e(t,-i,k),new e(t,i,k),new e(t,-i,-k),new e(t,-i,k),new e(t,i,-k),new e(t,i,k)];return new Y().setFromPoints(B)},[f,m,V]),o=y.useMemo(()=>{const t=f/2,i=m/2,k=V/2,B=[new e(-t,-i,k),new e(t,-i,k),new e(t,-i,k),new e(t,i,k),new e(t,i,k),new e(-t,i,k),new e(-t,i,k),new e(-t,-i,k),new e(-t,-i,-k),new e(t,-i,-k),new e(t,-i,-k),new e(t,i,-k),new e(t,i,-k),new e(-t,i,-k),new e(-t,i,-k),new e(-t,-i,-k)];return new Y().setFromPoints(B)},[f,m,V]);return n.jsxs("group",{position:[0,-D/2+m/2,R],children:[n.jsxs("mesh",{castShadow:!0,receiveShadow:!0,children:[n.jsx("boxGeometry",{args:[f,m,V]}),n.jsx("meshStandardMaterial",{...M})]}),n.jsx("lineSegments",{geometry:u,position:[5e-4,0,0],children:n.jsx("lineBasicMaterial",{...j})}),n.jsx("lineSegments",{geometry:s,position:[-5e-4,0,0],children:n.jsx("lineBasicMaterial",{...j})}),n.jsx("lineSegments",{geometry:o,children:n.jsx("lineBasicMaterial",{...j})})]})},Q=J+N,r=O-J-Q,E=O/2-J-r/2,$=-D/2+m,q=D/2-z-m,de=($+q)/2,me=()=>{const u=y.useMemo(()=>{const B=f/2,T=m/2,H=r/2,fe=[new e(-B,-T,-H),new e(-B,T,-H),new e(-B,-T,H),new e(-B,T,H),new e(-B,-T,-H),new e(-B,-T,H),new e(-B,T,-H),new e(-B,T,H)];return new Y().setFromPoints(fe)},[f,m,r]),s=y.useMemo(()=>{const B=f/2,T=m/2,H=r/2,fe=[new e(B,-T,-H),new e(B,T,-H),new e(B,-T,H),new e(B,T,H),new e(B,-T,-H),new e(B,-T,H),new e(B,T,-H),new e(B,T,H)];return new Y().setFromPoints(fe)},[f,m,r]),o=y.useMemo(()=>{const B=f/2,T=m/2,H=r/2,fe=[new e(-B,-T,H),new e(B,-T,H),new e(B,-T,H),new e(B,T,H),new e(B,T,H),new e(-B,T,H),new e(-B,T,H),new e(-B,-T,H),new e(-B,-T,-H),new e(B,-T,-H),new e(B,-T,-H),new e(B,T,-H),new e(B,T,-H),new e(-B,T,-H),new e(-B,T,-H),new e(-B,-T,-H)];return new Y().setFromPoints(fe)},[f,m,r]),t=.002,i=.006,k=()=>{const B=r/2+t/2,T=y.useMemo(()=>{const h=f/2,x=m/2,w=t/2,Se=[new e(-h,-x,w),new e(h,-x,w),new e(h,-x,w),new e(h,x,w),new e(h,x,w),new e(-h,x,w),new e(-h,x,w),new e(-h,-x,w),new e(-h,-x,-w),new e(h,-x,-w),new e(h,-x,-w),new e(h,x,-w),new e(h,x,-w),new e(-h,x,-w),new e(-h,x,-w),new e(-h,-x,-w),new e(-h,-x,-w),new e(-h,-x,w),new e(h,-x,-w),new e(h,-x,w),new e(h,x,-w),new e(h,x,w),new e(-h,x,-w),new e(-h,x,w)];return new Y().setFromPoints(Se)},[]),H=m/2+t/2,fe=r/2-i/2+.001,Ue=y.useMemo(()=>{const h=f/2,x=t/2,w=i/2,Se=[new e(-h,-x,w),new e(h,-x,w),new e(h,-x,w),new e(h,x,w),new e(h,x,w),new e(-h,x,w),new e(-h,x,w),new e(-h,-x,w),new e(-h,-x,-w),new e(h,-x,-w),new e(h,-x,-w),new e(h,x,-w),new e(h,x,-w),new e(-h,x,-w),new e(-h,x,-w),new e(-h,-x,-w),new e(-h,-x,-w),new e(-h,-x,w),new e(h,-x,-w),new e(h,-x,w),new e(h,x,-w),new e(h,x,w),new e(-h,x,-w),new e(-h,x,w)];return new Y().setFromPoints(Se)},[]),Ye=-m/2-t/2,Ze=r/2-i/2+.001,Ve=y.useMemo(()=>{const h=f/2,x=t/2,w=i/2,Se=[new e(-h,-x,w),new e(h,-x,w),new e(h,-x,w),new e(h,x,w),new e(h,x,w),new e(-h,x,w),new e(-h,x,w),new e(-h,-x,w),new e(-h,-x,-w),new e(h,-x,-w),new e(h,-x,-w),new e(h,x,-w),new e(h,x,-w),new e(-h,x,-w),new e(-h,x,-w),new e(-h,-x,-w),new e(-h,-x,-w),new e(-h,-x,w),new e(h,-x,-w),new e(h,-x,w),new e(h,x,-w),new e(h,x,w),new e(-h,x,-w),new e(-h,x,w)];return new Y().setFromPoints(Se)},[]),De={color:"#c8c8c8",roughness:.8,metalness:.2};return n.jsxs("group",{children:[n.jsxs("group",{position:[0,0,B],children:[n.jsxs("mesh",{castShadow:!0,receiveShadow:!0,children:[n.jsx("boxGeometry",{args:[f,m,t]}),n.jsx("meshStandardMaterial",{...De})]}),n.jsx("lineSegments",{geometry:T,children:n.jsx("lineBasicMaterial",{...j})})]}),n.jsxs("group",{position:[0,H,fe],children:[n.jsxs("mesh",{castShadow:!0,receiveShadow:!0,children:[n.jsx("boxGeometry",{args:[f,t,i]}),n.jsx("meshStandardMaterial",{...De})]}),n.jsx("lineSegments",{geometry:Ue,children:n.jsx("lineBasicMaterial",{...j})})]}),n.jsxs("group",{position:[0,Ye,Ze],children:[n.jsxs("mesh",{castShadow:!0,receiveShadow:!0,children:[n.jsx("boxGeometry",{args:[f,t,i]}),n.jsx("meshStandardMaterial",{...De})]}),n.jsx("lineSegments",{geometry:Ve,children:n.jsx("lineBasicMaterial",{...j})})]})]})};return n.jsxs("group",{position:[0,de,E],children:[n.jsxs("mesh",{castShadow:!0,receiveShadow:!0,children:[n.jsx("boxGeometry",{args:[f,m,r]}),n.jsx("meshStandardMaterial",{...M})]}),n.jsx("lineSegments",{geometry:u,position:[5e-4,0,0],children:n.jsx("lineBasicMaterial",{...j})}),n.jsx("lineSegments",{geometry:s,position:[-5e-4,0,0],children:n.jsx("lineBasicMaterial",{...j})}),n.jsx("lineSegments",{geometry:o,children:n.jsx("lineBasicMaterial",{...j})}),a.shelfReinforcement==="hardware"&&n.jsx(k,{})]})},ie=-O/2+J+N/2,pe=()=>{const u=y.useMemo(()=>{const s=f/2,o=D/2,t=N/2,i=[new e(-s,-o,-t),new e(s,-o,-t),new e(s,-o,-t),new e(s,-o,t),new e(s,-o,t),new e(-s,-o,t),new e(-s,-o,t),new e(-s,-o,-t),new e(-s,o,-t),new e(s,o,-t),new e(s,o,-t),new e(s,o,t),new e(s,o,t),new e(-s,o,t),new e(-s,o,t),new e(-s,o,-t),new e(-s,-o,-t),new e(-s,o,-t),new e(s,-o,-t),new e(s,o,-t),new e(s,-o,t),new e(s,o,t),new e(-s,-o,t),new e(-s,o,t)];return new Y().setFromPoints(i)},[f,D,N]);return n.jsxs("group",{position:[0,0,ie],children:[n.jsxs("mesh",{castShadow:!0,receiveShadow:!0,children:[n.jsx("boxGeometry",{args:[f,D,N]}),n.jsx("meshStandardMaterial",{...M})]}),n.jsx("lineSegments",{geometry:u,children:n.jsx("lineBasicMaterial",{...j})})]})},je=ie-N/2-m/2,ee=()=>{const u=y.useMemo(()=>{const s=f/2,o=X/2,t=m/2,i=[new e(-s,-o,-t),new e(s,-o,-t),new e(s,-o,-t),new e(s,-o,t),new e(s,-o,t),new e(-s,-o,t),new e(-s,-o,t),new e(-s,-o,-t),new e(-s,o,-t),new e(s,o,-t),new e(s,o,-t),new e(s,o,t),new e(s,o,t),new e(-s,o,t),new e(-s,o,t),new e(-s,o,-t),new e(-s,-o,-t),new e(-s,o,-t),new e(s,-o,-t),new e(s,o,-t),new e(s,-o,t),new e(s,o,t),new e(-s,-o,t),new e(-s,o,t)];return new Y().setFromPoints(i)},[f,X,m]);return n.jsxs("group",{position:[0,0,je],children:[n.jsxs("mesh",{castShadow:!0,receiveShadow:!0,children:[n.jsx("boxGeometry",{args:[f,X,m]}),n.jsx("meshStandardMaterial",{...M})]}),n.jsx("lineSegments",{geometry:u,children:n.jsx("lineBasicMaterial",{...j})})]})},se=ie+N/2+m/2,I=()=>{const u=y.useMemo(()=>{const s=f/2,o=X/2,t=m/2,i=[new e(-s,-o,-t),new e(s,-o,-t),new e(s,-o,-t),new e(s,-o,t),new e(s,-o,t),new e(-s,-o,t),new e(-s,-o,t),new e(-s,-o,-t),new e(-s,o,-t),new e(s,o,-t),new e(s,o,-t),new e(s,o,t),new e(s,o,t),new e(-s,o,t),new e(-s,o,t),new e(-s,o,-t),new e(-s,-o,-t),new e(-s,o,-t),new e(s,-o,-t),new e(s,o,-t),new e(s,-o,t),new e(s,o,t),new e(-s,-o,t),new e(-s,o,t)];return new Y().setFromPoints(i)},[f,X,m]);return n.jsxs("group",{position:[0,D/2-X/2,se],children:[n.jsxs("mesh",{castShadow:!0,receiveShadow:!0,children:[n.jsx("boxGeometry",{args:[f,X,m]}),n.jsx("meshStandardMaterial",{...M})]}),n.jsx("lineSegments",{geometry:u,children:n.jsx("lineBasicMaterial",{...j})})]})},ne=F+m,K=D/2-z-m/2,c=O/2-ne/2,d=()=>{const u=y.useMemo(()=>{const s=f/2,o=m/2,t=ne/2,i=[new e(-s,-o,-t),new e(s,-o,-t),new e(s,-o,-t),new e(s,-o,t),new e(s,-o,t),new e(-s,-o,t),new e(-s,-o,t),new e(-s,-o,-t),new e(-s,o,-t),new e(s,o,-t),new e(s,o,-t),new e(s,o,t),new e(s,o,t),new e(-s,o,t),new e(-s,o,t),new e(-s,o,-t),new e(-s,-o,-t),new e(-s,o,-t),new e(s,-o,-t),new e(s,o,-t),new e(s,-o,t),new e(s,o,t),new e(-s,-o,t),new e(-s,o,t)];return new Y().setFromPoints(i)},[f,m,ne]);return n.jsxs("group",{position:[0,K,c],children:[n.jsxs("mesh",{castShadow:!0,receiveShadow:!0,children:[n.jsx("boxGeometry",{args:[f,m,ne]}),n.jsx("meshStandardMaterial",{...M})]}),n.jsx("lineSegments",{geometry:u,children:n.jsx("lineBasicMaterial",{...j})})]})},p=D/2-z/2,le=O/2-ne+m/2,ke=()=>{const u=y.useMemo(()=>{const s=f/2,o=z/2,t=m/2,i=[new e(-s,-o,-t),new e(s,-o,-t),new e(s,-o,-t),new e(s,-o,t),new e(s,-o,t),new e(-s,-o,t),new e(-s,-o,t),new e(-s,-o,-t),new e(-s,o,-t),new e(s,o,-t),new e(s,o,-t),new e(s,o,t),new e(s,o,t),new e(-s,o,t),new e(-s,o,t),new e(-s,o,-t),new e(-s,-o,-t),new e(-s,o,-t),new e(s,-o,-t),new e(s,o,-t),new e(s,-o,t),new e(s,o,t),new e(-s,-o,t),new e(-s,o,t)];return new Y().setFromPoints(i)},[f,z,m]);return n.jsxs("group",{position:[0,p,le],children:[n.jsxs("mesh",{castShadow:!0,receiveShadow:!0,children:[n.jsx("boxGeometry",{args:[f,z,m]}),n.jsx("meshStandardMaterial",{...M})]}),n.jsx("lineSegments",{geometry:u,children:n.jsx("lineBasicMaterial",{...j})})]})},he=50*S,ge=17*S,ue=-D/2+m,xe=K-m/2,be=xe-ue,ze=(ue+xe)/2,W=O/2-ge/2,_=()=>{const u=y.useMemo(()=>{const s=he/2,o=be/2,t=ge/2,i=2e-4,k=[new e(-s,-o+i,t),new e(s,-o+i,t),new e(s,-o,t),new e(s,o,t),new e(s,o-i,t),new e(-s,o-i,t),new e(-s,o,t),new e(-s,-o,t),new e(-s,-o+i,-t),new e(s,-o+i,-t),new e(s,-o,-t),new e(s,o,-t),new e(s,o-i,-t),new e(-s,o-i,-t),new e(-s,o,-t),new e(-s,-o,-t),new e(-s,-o+i,-t),new e(-s,-o+i,t),new e(-s,o-i,-t),new e(-s,o-i,t),new e(s,-o+i,-t),new e(s,-o+i,t),new e(s,o-i,-t),new e(s,o-i,t),new e(-s,-o,-t),new e(-s,-o,t),new e(s,-o,-t),new e(s,-o,t),new e(s,o,-t),new e(s,o,t),new e(-s,o,-t),new e(-s,o,t)];return new Y().setFromPoints(k)},[he,be,ge]);return n.jsxs("group",{position:[0,ze,W],children:[n.jsxs("mesh",{castShadow:!0,receiveShadow:!0,children:[n.jsx("boxGeometry",{args:[he,be,ge]}),n.jsx("meshStandardMaterial",{...M})]}),n.jsx("lineSegments",{geometry:u,children:n.jsx("lineBasicMaterial",{...j})})]})};return n.jsxs("group",{position:[0,b+D/2,0],children:[n.jsx(U,{}),n.jsx(te,{}),n.jsx(oe,{}),n.jsx(me,{}),n.jsx(pe,{}),n.jsx(ee,{}),n.jsx(I,{}),n.jsx(d,{}),n.jsx(ke,{}),a.shelfReinforcement==="vertical"&&n.jsx(_,{}),n.jsx(cn,{width:G.width,depth:G.depth+18,height:a.topPanelThickness,position:[0,D/2+a.topPanelThickness*S/2,18*S/2],material:a.countertopMaterial}),n.jsx(dn,{legType:a.legType,legHeight:a.legHeight,cabinetWidth:G.width,cabinetDepth:G.depth,position:[0,-D/2,0]})]})},ye=new Map,hn=()=>{const{config:a,getCarcassDimensions:l,getDoorDimensions:g}=ae(),L={"clean-white":"#FFFFFF","pure-gray":"#9B9999","silky-gray":"#827971","latte-beige":"#78715F","cocoa-gray":"#4B453F","mighty-gray":"#2E2B29","hazy-green":"#313C3A","deep-blue":"#19232D"}[a.doorFinish],G=l(),P=g(),S=.001,A=G.width*S,D=G.height*S,O=G.depth*S,f=a.doorThickness*S,m=a.legHeight*S,N=P.height*S,X=.002;let F,z,J;switch(a.doorConfig){case"double":F=(A-X)/2,z=N,J=f;break;case"left":case"right":F=A-X,z=N,J=f;break}const b=O/2+f/2,M=m+z/2,j={color:L,roughness:1,metalness:0},v={color:"#000000",opacity:.5,transparent:!0,linewidth:.5},U=A,Z=m,te=f,V=b-.04,R=m/2,oe=()=>{const K=y.useMemo(()=>{const c=U/2,d=Z/2,p=te/2,le=[new e(-c,-d,p),new e(c,-d,p),new e(c,-d,p),new e(c,d,p),new e(c,d,p),new e(-c,d,p),new e(-c,d,p),new e(-c,-d,p),new e(-c,-d,-p),new e(c,-d,-p),new e(c,-d,-p),new e(c,d,-p),new e(c,d,-p),new e(-c,d,-p),new e(-c,d,-p),new e(-c,-d,-p),new e(-c,-d,-p),new e(-c,-d,p),new e(c,-d,-p),new e(c,-d,p),new e(c,d,-p),new e(c,d,p),new e(-c,d,-p),new e(-c,d,p)];return new Y().setFromPoints(le)},[]);return n.jsxs("group",{position:[0,R,V],children:[n.jsxs("mesh",{castShadow:!0,receiveShadow:!0,children:[n.jsx("boxGeometry",{args:[U,Z,te]}),n.jsx("meshStandardMaterial",{...j})]}),n.jsx("lineSegments",{geometry:K,children:n.jsx("lineBasicMaterial",{...v})})]})},Q=a.width*S,r=f,E=a.channelDepth*S,$=m+D-a.channelHeight*S-f/2+.018,q=O/2-E/2,de=()=>{const K=y.useMemo(()=>{const c=Q/2,d=r/2,p=E/2,le=[new e(-c,-d,p),new e(c,-d,p),new e(c,-d,p),new e(c,d,p),new e(c,d,p),new e(-c,d,p),new e(-c,d,p),new e(-c,-d,p)
1,new e(-c,-d,-p),new e(c,-d,-p),new e(c,-d,-p),new e(c,d,-p),new e(c,d,-p),new e(-c,d,-p),new e(-c,d,-p),new e(-c,-d,-p),new e(-c,-d,-p),new e(-c,-d,p),new e(c,-d,-p),new e(c,-d,p),new e(c,d,-p),new e(c,d,p),new e(-c,d,-p),new e(-c,d,p)];return new Y().setFromPoints(le)},[]);return n.jsxs("group",{position:[0,$,q],children:[n.jsxs("mesh",{castShadow:!0,receiveShadow:!0,children:[n.jsx("boxGeometry",{args:[Q,r,E]}),n.jsx("meshStandardMaterial",{...j})]}),n.jsx("lineSegments",{geometry:K,children:n.jsx("lineBasicMaterial",{...v})})]})},me=a.width*S,ie=a.channelHeight*S-.018,pe=f,je=m+D-a.channelHeight*S+.018+ie/2,ee=O/2-E+pe/2,se=()=>{const K=y.useMemo(()=>{const c=me/2,d=ie/2,p=pe/2,le=[new e(-c,-d,p),new e(c,-d,p),new e(c,-d,p),new e(c,d,p),new e(c,d,p),new e(-c,d,p),new e(-c,d,p),new e(-c,-d,p),new e(-c,-d,-p),new e(c,-d,-p),new e(c,-d,-p),new e(c,d,-p),new e(c,d,-p),new e(-c,d,-p),new e(-c,d,-p),new e(-c,-d,-p),new e(-c,-d,-p),new e(-c,-d,p),new e(c,-d,-p),new e(c,-d,p),new e(c,d,-p),new e(c,d,p),new e(-c,d,-p),new e(-c,d,p)];return new Y().setFromPoints(le)},[]);return n.jsxs("group",{position:[0,je,ee],children:[n.jsxs("mesh",{castShadow:!0,receiveShadow:!0,children:[n.jsx("boxGeometry",{args:[me,ie,pe]}),n.jsx("meshStandardMaterial",{...j})]}),n.jsx("lineSegments",{geometry:K,children:n.jsx("lineBasicMaterial",{...v})})]})},I=Xe.memo(({position:K,side:c})=>{const d=ae(W=>W.toggleDoors),p=ae(W=>W.config.isDoorsOpen),[le,ke]=y.useState(!1),he=c==="left"?-F/2:F/2,ge=110*Math.PI/180,ue=p?c==="left"?-ge:ge:0,xe=y.useRef(null),be=y.useRef(!1);Ge((W,_)=>{if(!xe.current)return;be.current||(ye.has(c)?xe.current.rotation.y=ye.get(c):ye.set(c,0),be.current=!0);const u=ye.get(c),s=ue-u;if(Math.abs(s)<.001){u!==ue&&(ye.set(c,ue),xe.current.rotation.y=ue);return}const t=s*8*_,i=u+t;ye.set(c,i),xe.current.rotation.y=i});const ze=y.useMemo(()=>{const W=F/2,_=z/2,u=J/2,s=[new e(-W,-_,u),new e(W,-_,u),new e(W,-_,u),new e(W,_,u),new e(W,_,u),new e(-W,_,u),new e(-W,_,u),new e(-W,-_,u),new e(-W,-_,-u),new e(W,-_,-u),new e(W,-_,-u),new e(W,_,-u),new e(W,_,-u),new e(-W,_,-u),new e(-W,_,-u),new e(-W,-_,-u),new e(-W,-_,-u),new e(-W,-_,u),new e(W,-_,-u),new e(W,-_,u),new e(W,_,-u),new e(W,_,u),new e(-W,_,-u),new e(-W,_,u)];return new Y().setFromPoints(s)},[]);return n.jsx("group",{position:K,children:n.jsxs("group",{ref:xe,position:[he,0,0],children:[n.jsxs("mesh",{castShadow:!0,receiveShadow:!0,position:[-he,0,0],onClick:W=>{W.stopPropagation(),d()},onPointerOver:W=>{W.stopPropagation(),ke(!0),document.body.style.cursor="pointer"},onPointerOut:()=>{ke(!1),document.body.style.cursor="default"},children:[n.jsx("boxGeometry",{args:[F,z,J]}),n.jsx("meshStandardMaterial",{...j})]}),n.jsx("lineSegments",{position:[-he,0,0],geometry:ze,children:n.jsx("lineBasicMaterial",{...v})}),le&&n.jsx(ne,{pivotX:he,doorDepth:J})]})})}),ne=({pivotX:K,doorDepth:c})=>{const d=ae(p=>p.config.isDoorsOpen);return n.jsx(Je,{position:[-K,0,c/2+.01],center:!0,distanceFactor:2,style:{pointerEvents:"none",userSelect:"none"},children:n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px",padding:"10px 16px",backgroundColor:"rgba(0, 0, 0, 0.8)",color:"white",borderRadius:"8px",fontSize:"14px",fontWeight:"600",whiteSpace:"nowrap",boxShadow:"0 4px 12px rgba(0, 0, 0, 0.3)",backdropFilter:"blur(4px)",animation:"fadeIn 0.2s ease-out",border:"1px solid rgba(255, 255, 255, 0.2)"},children:[n.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:n.jsx("path",{d:"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4M10 17l5-5-5-5M13.8 12H3"})}),n.jsx("span",{children:d?"클릭하여 닫기":"클릭하여 열기"})]})})};if(a.doorConfig==="double"){const K=-F/2-X/2,c=F/2+X/2;return n.jsxs(n.Fragment,{children:[n.jsx(oe,{}),n.jsx(de,{}),n.jsx(se,{}),n.jsx(I,{position:[K,M,b],side:"left"},"left-door"),n.jsx(I,{position:[c,M,b],side:"right"},"right-door")]})}else if(a.doorConfig==="left"){const K=-X/2;return n.jsxs(n.Fragment,{children:[n.jsx(oe,{}),n.jsx(de,{}),n.jsx(se,{}),n.jsx(I,{position:[K,M,b],side:"left"},"left-door")]})}else if(a.doorConfig==="right"){const K=X/2;return n.jsxs(n.Fragment,{children:[n.jsx(oe,{}),n.jsx(de,{}),n.jsx(se,{}),n.jsx(I,{position:[K,M,b],side:"right"},"right-door")]})}return null},xn="https://api.blue-chain.kr",ve={health:5e3,setMaterial:1e4,setSize:3e4,download:6e4},wn=()=>Oe.create({baseURL:xn,timeout:ve.setSize,headers:{"Content-Type":"application/json"}}),Me=wn(),Ce=a=>
1{if(Oe.isAxiosError(a)){const l=a;return{message:l.response?.data?.message||l.message||"알 수 없는 오류",code:l.code,status:l.response?.status}}return a instanceof Error?{message:a.message}:{message:"알 수 없는 오류가 발생했습니다"}},mn=a=>a==="double"?1:a==="left"?2:3,gn=a=>a==="adjustable"?1:a==="base"?2:3,un=a=>a==="none"?1:a==="vertical"?2:3,_e=a=>({material:{plate_material:a.doorFinish,plate_inner_material:a.interiorMaterial,top_material:a.countertopMaterial,edge_band_material:a.doorFinish,edge_band_thk:1},size:{width:a.width,depth:a.depth,ch_d:a.channelDepth,ch_h:a.channelHeight,heigh_r:a.height,thk_top:a.topPanelThickness,skirt:a.legHeight,door_type:mn(a.doorConfig),leg_type:gn(a.legType),support_type:un(a.shelfReinforcement)}}),fn=async()=>{try{return(await Me.get("/health",{timeout:ve.health})).data}catch(a){throw Ce(a)}},Le=async a=>{try{await Me.post("/api/experimental/aflow_set_material/",a,{timeout:ve.setMaterial})}catch(l){throw Ce(l)}},Ae=async a=>{try{await Me.post("/api/experimental/aflow_set_size/",a,{timeout:ve.setSize})}catch(l){throw Ce(l)}},jn=async()=>{try{const a=await Me.post("/api/experimental/aflow_download_bom/",{},{timeout:ve.download,responseType:"blob"}),l=new Blob([a.data],{type:"text/csv"}),g=window.URL.createObjectURL(l),C=document.createElement("a");C.href=g,C.download=`BOM_${Ne()}.csv`,document.body.appendChild(C),C.click(),document.body.removeChild(C),window.URL.revokeObjectURL(g)}catch(a){throw Ce(a)}},bn=async()=>{try{const a=await Me.post("/api/experimental/aflow_download_draw/",{},{timeout:ve.download,responseType:"blob"}),l=new Blob([a.data],{type:"application/octet-stream"}),g=window.URL.createObjectURL(l),C=document.createElement("a");C.href=g,C.download=`Drawing_${Ne()}.skp`,document.body.appendChild(C),C.click(),document.body.removeChild(C),window.URL.revokeObjectURL(g)}catch(a){throw Ce(a)}},yn=async a=>{const{material:l,size:g}=_e(a);await Le(l),await Ae(g)},Te={healthCheck:fn,setMaterial:Le,setSize:Ae,downloadBOM:jn,downloadDrawing:bn,generateDrawing:yn,mapConfigToApiParams:_e};function vn(){const a=new Date;let l=0;const g=new Date(a);for(;l<4;){g.setDate(g.getDate()+1);const G=g.getDay();G!==0&&G!==6&&l++}const C=g.getMonth()+1,L=g.getDate();return`${C}월 ${L}일`}function Sn({fov:a}){const{camera:l}=tn(),g=y.useRef(a);return y.useEffect(()=>{g.current=a},[a]),Ge(()=>{if(l&&"fov"in l){const C=l.fov,L=g.current;if(Math.abs(L-C)<.01){C!==L&&(l.fov=L,l.updateProjectionMatrix());return}l.fov+=(L-C)*.1,l.updateProjectionMatrix()}}),null}function In(){const a=ln("/sink-cabinet","sinkCabinet"),l=ae(r=>r.config),g=ae(r=>r.updateConfig),C=ae(r=>r.totalPrice),G=new URLSearchParams(window.location.search).get("is_addin")==="true",[P,S]=y.useState(!1),[A,D]=y.useState(!1),[O,f]=y.useState(!1),[m,N]=y.useState(!1),[X,F]=y.useState(0),z=y.useRef(null),[J,b]=y.useState(50),[M,j]=y.useState(null),v=vn();y.useEffect(()=>{const r=z.current;if(!r)return;const E=()=>{r.clientWidth<=1024?b(40):b(50)};E();const $=new ResizeObserver(E);return $.observe(r),()=>{$.disconnect()}},[]);const U=async()=>{N(!0),F(0),D(!1);const r=50;let E=0;const $=setInterval(()=>{E<30?E+=1.2:E<60?E+=.7:E<90?E+=.4:E<99&&(E+=.05),F(Math.min(Math.floor(E),99))},r);try{await Te.generateDrawing(l),await new Promise(q=>setTimeout(q,6e4)),clearInterval($),F(100),await new Promise(q=>setTimeout(q,300)),S(!0),re.success("설계가 확정되었습니다!")}catch(q){console.error("도면 생성 실패:",q),clearInterval($),re.error("도면 생성에 실패했습니다. 다시 시도해주세요.")}finally{clearInterval($),N(!1),F(0)}},Z=()=>{S(!1)},te=async()=>{if(G){try{typeof window<"u"&&window.sketchup?(window.sketchup.render(),re.success("SketchUp으로 전송되었습니다!")):re.error("SketchUp 플러그인이 설치되지 않았습니다.")}catch(r){console.error("SketchUp 렌더 실패:",r),re.error("SketchUp 전송에 실패했습니다.")}return}if(!P){re.warning("설계를 확정해야 다운로드가 가능합니다.");return}re.loading("도면 다운로드 중...",{id:"download-skp"});try{await Te.downloadDrawing(),re.success("도면 다운로드 완료!",{id:"download-skp"})}catch(r){console.error("도면 다운로드 실패:",r),re.error("도면 다운로드에 실패했습니다.",{id:"download-skp"})}},V=async()=>
1{if(!P){re.warning("설계를 확정해야 다운로드가 가능합니다.");return}re.loading("BOM 다운로드 중...",{id:"download-bom"});try{await Te.downloadBOM(),re.success("BOM 다운로드 완료!",{id:"download-bom"})}catch(r){console.error("BOM 다운로드 실패:",r),re.error("BOM 다운로드에 실패했습니다.",{id:"download-bom"})}},R=r=>{if("width"in r){const E=r.width;E>=800&&l.shelfReinforcement==="none"?r.shelfReinforcement="vertical":E<800&&l.shelfReinforcement==="vertical"&&(r.shelfReinforcement="none")}P?(j(r),f(!0)):g(r)},oe=()=>{S(!1),M&&g(M),f(!1),j(null)},Q=()=>{f(!1),j(null)};return n.jsxs(n.Fragment,{children:[n.jsx(an,{...a}),n.jsx("style",{children:`
2        @keyframes fadeIn {
3          from {
4            opacity: 0;
5            transform: translateY(-10px);
6          }
7          to {
8            opacity: 1;
9            transform: translateY(0);
10          }
11        }
12      `}),A&&n.jsx("div",{style:{position:"fixed",top:0,left:0,right:0,bottom:0,backgroundColor:"rgba(0, 0, 0, 0.5)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:9999},children:n.jsxs("div",{style:{backgroundColor:"white",borderRadius:"12px",padding:"32px",maxWidth:"400px",width:"90%",boxShadow:"0 20px 25px -5px rgba(0, 0, 0, 0.3)"},children:[n.jsx("h2",{style:{fontSize:"20px",fontWeight:"bold",marginBottom:"16px",color:"#1f2937"},children:"설계 확정"}),n.jsx("p",{style:{fontSize:"14px",color:"#6b7280",marginBottom:"24px",lineHeight:"1.6"},children:"현재 설정된 상태로 설계를 확정하시겠습니까?"}),n.jsxs("div",{style:{display:"flex",gap:"12px",justifyContent:"flex-end"},children:[n.jsx("button",{onClick:()=>D(!1),style:{padding:"10px 20px",backgroundColor:"#f3f4f6",color:"#374151",border:"none",borderRadius:"6px",fontSize:"14px",fontWeight:"600",cursor:"pointer"},children:"취소"}),n.jsx("button",{onClick:U,style:{padding:"10px 20px",backgroundColor:"#3b82f6",color:"white",border:"none",borderRadius:"6px",fontSize:"14px",fontWeight:"600",cursor:"pointer"},children:"확정하기"})]})]})}),O&&n.jsx("div",{style:{position:"fixed",top:0,left:0,right:0,bottom:0,backgroundColor:"rgba(0, 0, 0, 0.5)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:9999},children:n.jsxs("div",{style:{backgroundColor:"white",borderRadius:"12px",padding:"32px",maxWidth:"400px",width:"90%",boxShadow:"0 20px 25px -5px rgba(0, 0, 0, 0.3)"},children:[n.jsx("h2",{style:{fontSize:"20px",fontWeight:"bold",marginBottom:"16px",color:"#1f2937"},children:"설계 수정"}),n.jsxs("p",{style:{fontSize:"14px",color:"#6b7280",marginBottom:"24px",lineHeight:"1.6"},children:["설계를 수정하시겠습니까?",n.jsx("br",{}),"확정된 설계가 취소됩니다."]}),n.jsxs("div",{style:{display:"flex",gap:"12px",justifyContent:"flex-end"},children:[n.jsx("button",{onClick:Q,style:{padding:"10px 20px",backgroundColor:"#f3f4f6",color:"#374151",border:"none",borderRadius:"6px",fontSize:"14px",fontWeight:"600",cursor:"pointer"},children:"취소"}),n.jsx("button",{onClick:oe,style:{padding:"10px 20px",backgroundColor:"#f59e0b",color:"white",border:"none",borderRadius:"6px",fontSize:"14px",fontWeight:"600",cursor:"pointer"},children:"수정하기"})]})]})}),n.jsx(on,{}),n.jsx("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",minHeight:"100vh",backgroundColor:"white",fontFamily:"system-ui, -apple-system, sans-serif",paddingTop:`${80+rn}px`,paddingLeft:"20px",paddingRight:"20px",paddingBottom:"20px",gap:"20px"},className:"sink-cabinet-container",children:n.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"20px",width:"100%",maxWidth:"1400px"},className:"sink-cabinet-wrapper",children:[n.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"20px",width:"100%"},className:"sink-cabinet-viewer",children:[n.jsxs("div",{ref:z,style:{width:"100%",height:"500px",backgroundColor:"#ffffff",position:"relative",borderRadius:"8px",overflow:"hidden",boxShadow:"0 2px 8px rgba(0,0,0,0.1)"},className:"canvas-container",children:[n.jsxs(Qe,{shadows:!0,camera:{position:[1,1.5,2],fov:50},gl:{outputColorSpace:"srgb"},children:[n.jsx(Sn,{fov:J}),n.jsx("ambientLight",{intensity:.2}),n.jsx("directionalLight",{position:[0,5,5],intensity:.2,castShadow:!0,"shadow-mapSize":[2048,2048]}),n.jsx("directionalLight",{position:[-5,5,3],intensity:5.5,color:"#ffffff"}),n.jsx("directionalLight",{position:[-4,-2,2],intensity:.5,color:"#ffffff"}),n.jsx("directionalLight",{position:[5,5,3],intensity:2.5}),n.jsx("directionalLight",{position:[4,-2,2],intensity:1.5,color:"#ffffff"}),n.jsx("directionalLight",{position:[0,5,-5],intensity:4.5,color:"#ffffff"}),n.jsx(pn,{}),n.jsx(hn,{}),n.jsx(en,{target:[0,.48,0],enablePan:!0,enableZoom:!0,enableRotate:!0,minDistance:.3,maxDistance:10}
12),n.jsx(nn,{preset:"apartment"})]}),n.jsxs("div",{style:{position:"absolute",bottom:"16px",left:"16px",backgroundColor:"rgba(255, 255, 255, 0.95)",padding:"10px 16px",borderRadius:"8px",boxShadow:"0 2px 8px rgba(0,0,0,0.15)",backdropFilter:"blur(10px)",display:"flex",alignItems:"center",gap:"8px"},children:[n.jsx("span",{style:{fontSize:"13px",color:"#6b7280"},children:"예상 출고일"}),n.jsx("span",{style:{fontSize:"16px",fontWeight:"700",color:"#1f2937"},children:v})]}),n.jsxs("div",{style:{position:"absolute",bottom:"16px",right:"16px",backgroundColor:"rgba(255, 255, 255, 0.95)",padding:"10px 16px",borderRadius:"8px",boxShadow:"0 2px 8px rgba(0,0,0,0.15)",backdropFilter:"blur(10px)",display:"flex",alignItems:"center",gap:"8px"},children:[n.jsx("span",{style:{fontSize:"13px",color:"#6b7280"},children:"총 금액"}),n.jsxs("span",{style:{fontSize:"20px",fontWeight:"700",color:"#3b82f6"},children:[C.toLocaleString(),"원"]})]})]}),n.jsx("div",{style:{display:"flex",gap:"12px"},children:P?n.jsxs(n.Fragment,{children:[n.jsx("button",{onClick:Z,className:"action-button",style:{flex:1,padding:"16px 12px",backgroundColor:"#f59e0b",color:"white",border:"none",borderRadius:"8px",fontSize:"14px",fontWeight:"600",cursor:"pointer",whiteSpace:"nowrap"},children:"수정하기"}),n.jsx("button",{onClick:te,className:"action-button",style:{flex:1,padding:"16px 12px",backgroundColor:"#3b82f6",color:"white",border:"none",borderRadius:"8px",fontSize:"14px",fontWeight:"600",cursor:"pointer",whiteSpace:"nowrap"},children:G?"SketchUp으로 불러오기":"SketchUp 다운로드"}),n.jsx("button",{onClick:V,className:"action-button",style:{flex:1,padding:"16px 12px",backgroundColor:"#3b82f6",color:"white",border:"none",borderRadius:"8px",fontSize:"14px",fontWeight:"600",cursor:"pointer",whiteSpace:"nowrap"},children:"BOM 다운로드"})]}):n.jsxs("button",{onClick:()=>D(!0),disabled:m,className:"action-button",style:{flex:1,padding:"16px 12px",backgroundColor:"#3b82f6",color:"white",border:"none",borderRadius:"8px",fontSize:"14px",fontWeight:"600",cursor:m?"not-allowed":"pointer",whiteSpace:"nowrap",position:"relative",overflow:"hidden"},children:[m&&n.jsxs(n.Fragment,{children:[n.jsx("div",{style:{position:"absolute",top:0,left:0,height:"100%",width:`${X}%`,backgroundColor:"rgba(59, 130, 246, 0.5)",transition:"width 0.05s linear",borderRadius:"8px"}}),n.jsx("div",{style:{position:"absolute",top:0,left:0,right:0,bottom:0,background:"linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.1) 40%, rgba(255,255,255,0.6) 50%, rgba(255,255,255,0.1) 60%, transparent 100%)",animation:"shimmer 1.2s infinite",width:"150%"}})]}),n.jsxs("span",{style:{position:"relative",zIndex:1,display:"flex",alignItems:"center",justifyContent:"center",gap:"8px"},children:[m&&n.jsxs("svg",{style:{animation:"spin 1s linear infinite"},width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:[n.jsx("circle",{cx:"12",cy:"12",r:"10",opacity:"0.25"}),n.jsx("path",{d:"M12 2a10 10 0 0 1 10 10",strokeLinecap:"round"})]}),m?`도면 생성 중... ${X}%`:"설계 확정하기"]})]})})]}),n.jsxs("div",{style:{width:"100%",height:"fit-content",backgroundColor:"white",borderRadius:"8px",boxShadow:"0 2px 8px rgba(0,0,0,0.1)",display:"flex",flexDirection:"column",overflow:"hidden"},className:"control-panel",children:[n.jsxs("div",{className:"control-panel-header",style:{padding:"20px 20px 0 20px"},children:[n.jsxs("h1",{style:{fontSize:"22px",fontWeight:"bold",marginBottom:"8px",color:"#1f2937",display:"flex",alignItems:"center",gap:"8px"},children:["싱크대 하부장 맞춤 제작",n.jsx("span",{style:{backgroundColor:"#10b981",color:"white",fontSize:"11px",fontWeight:"700",padding:"3px 8px",borderRadius:"4px"},children:"NEW"})]}),n.jsx("p",{style:{fontSize:"13px",color:"#6b7280",marginBottom:"16px"},children:"원하시는 옵션을 선택하면 실시간으로 3D 모델과 가격이 변경됩니다."})]}),n.jsxs("div",{className:"control-panel-content",style:{overflowY:"auto",flex:1,padding:"0 20px 20px 20px"}
12,children:[n.jsxs("div",{style:{marginBottom:"16px"},children:[n.jsx("h3",{style:{fontSize:"14px",fontWeight:"600",marginBottom:"8px",color:"#374151"},children:"1. 상판 소재"}),n.jsx("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"8px"},children:[{value:"artificial-marble-white",label:"인조대리석 화이트",image:"/images/countertop/artificial-marble-white.jpg"},{value:"ceramic-gray",label:"세라믹 그레이",image:"/images/countertop/ceramic-gray.jpg"}].map(r=>n.jsxs("button",{onClick:()=>R({countertopMaterial:r.value}),style:{display:"flex",alignItems:"center",gap:"8px",padding:"8px",border:l.countertopMaterial===r.value?"2px solid #3b82f6":"1px solid #d1d5db",borderRadius:"6px",backgroundColor:l.countertopMaterial===r.value?"#eff6ff":"white",cursor:"pointer",fontSize:"13px",fontWeight:l.countertopMaterial===r.value?"600":"400",color:l.countertopMaterial===r.value?"#1e40af":"#374151"},children:[n.jsx("div",{style:{width:"100px",height:"40px",borderRadius:"4px",border:"1px solid #e5e7eb",overflow:"hidden"},children:n.jsx("img",{src:r.image,alt:r.label,style:{width:"100%",height:"100%",objectFit:"cover",transform:"scale(3)"}})}),n.jsx("span",{children:r.label})]},r.value))})]}),n.jsxs("div",{style:{marginBottom:"16px"},children:[n.jsx("h3",{style:{fontSize:"14px",fontWeight:"600",marginBottom:"8px",color:"#374151"},children:"2. 속장 내부 소재"}),n.jsx("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"8px"},children:[{value:"white",label:"화이트",image:"/images/innerpanel/lx-white.jpg"},{value:"gray",label:"그레이",image:"/images/innerpanel/lx-gray.jpg"},{value:"linen-grayish",label:"린넨 그레이지",image:"/images/innerpanel/lx-linen-grayish.jpg"},{value:"linen-ash",label:"린넨 애쉬",image:"/images/innerpanel/lx-linen-ash.jpg"}].map(r=>n.jsxs("button",{onClick:()=>R({interiorMaterial:r.value}),style:{display:"flex",alignItems:"center",gap:"8px",padding:"8px",border:l.interiorMaterial===r.value?"2px solid #3b82f6":"1px solid #d1d5db",borderRadius:"6px",backgroundColor:l.interiorMaterial===r.value?"#eff6ff":"white",cursor:"pointer",fontSize:"13px",fontWeight:l.interiorMaterial===r.value?"600":"400",color:l.interiorMaterial===r.value?"#1e40af":"#374151"},children:[n.jsx("div",{style:{width:"100px",height:"40px",borderRadius:"4px",border:"1px solid #e5e7eb",overflow:"hidden"},children:n.jsx("img",{src:r.image,alt:r.label,style:{width:"100%",height:"100%",objectFit:"cover",transform:"scale(6)"}})}),n.jsx("span",{children:r.label})]},r.value))})]}),n.jsxs("div",{style:{marginBottom:"16px"},children:[n.jsx("h3",{style:{fontSize:"14px",fontWeight:"600",marginBottom:"8px",color:"#374151"},children:"3. 도어 마감 소재"}),n.jsx("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr 1fr",gap:"6px"},children:[{value:"clean-white",label:"클린화이트",image:"/images/filmpanel/clean-white-matte.jpg"},{value:"pure-gray",label:"퓨어그레이",image:"/images/filmpanel/pure-gray-matte.jpg"},{value:"silky-gray",label:"실키그레이",image:"/images/filmpanel/silky-gray-matte.jpg"},{value:"latte-beige",label:"라떼베이지",image:"/images/filmpanel/latte-beige-matte.jpg"},{value:"cocoa-gray",label:"코코아그레이",image:"/images/filmpanel/cocoa-gray-matte.jpg"},{value:"mighty-gray",label:"마이티그레이",image:"/images/filmpanel/mighty-gray-matte.jpg"},{value:"hazy-green",label:"헤이지그린",image:"/images/filmpanel/hazy-green-matte.jpg"},{value:"deep-blue",label:"딥블루",image:"/images/filmpanel/deep-blue-matte.jpg"}].map(r=>n.jsxs("button",{onClick:()=>R({doorFinish:r.value}),style:{display:"flex",flexDirection:"column",alignItems:"center",gap:"4px",padding:"6px",border:l.doorFinish===r.value?"2px solid #3b82f6":"1px solid #d1d5db",borderRadius:"6px",backgroundColor:l.doorFinish===r.value?"#eff6ff":"white",cursor:"pointer",fontSize:"11px",fontWeight:l.doorFinish===r.value?"600":"400",color:l.doorFinish===r.value?"#1e40af":"#374151"},children:[n.jsx("div",{style:{width:"100%",height:"50px",borderRadius:"4px",border:"1px solid #e5e7eb",overflow:"hidden"},children:n.jsx("img",{src:r.image,alt:r.label,style:{width:"100%",height:"100%",objectFit:"cover"}})}),n.jsx("span",{style:{textAlign:"center"},children:r.label})]},r.value))})]}
12),n.jsxs("div",{style:{marginBottom:"16px"},children:[n.jsx("h3",{style:{fontSize:"14px",fontWeight:"600",marginBottom:"8px",color:"#374151"},children:"4. 하부장 사이즈"}),n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:"8px",marginBottom:"8px"},children:[n.jsx("div",{children:n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"4px"},children:[n.jsx("label",{style:{fontSize:"12px",color:"#6b7280",whiteSpace:"nowrap"},children:"가로"}),n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"4px"},children:[n.jsx("input",{type:"number",min:"200",max:"1200",step:"1",value:l.width,onChange:r=>R({width:Number(r.target.value)}),style:{width:"65px",padding:"6px 8px",border:"1px solid #d1d5db",borderRadius:"4px",fontSize:"13px",textAlign:"right"}}),n.jsx("span",{style:{fontSize:"12px",color:"#6b7280"},className:"size-unit",children:"mm"})]})]})}),n.jsx("div",{children:n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"4px"},children:[n.jsx("label",{style:{fontSize:"12px",color:"#6b7280",whiteSpace:"nowrap"},children:"깊이"}),n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"4px"},children:[n.jsx("input",{type:"number",min:"300",max:"1200",step:"1",value:l.depth,onChange:r=>R({depth:Number(r.target.value)}),style:{width:"65px",padding:"6px 8px",border:"1px solid #d1d5db",borderRadius:"4px",fontSize:"13px",textAlign:"right"}}),n.jsx("span",{style:{fontSize:"12px",color:"#6b7280"},className:"size-unit",children:"mm"})]})]})}),n.jsx("div",{children:n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"4px"},children:[n.jsx("label",{style:{fontSize:"12px",color:"#6b7280",whiteSpace:"nowrap"},children:"높이"}),n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"4px"},children:[n.jsx("input",{type:"number",min:"700",max:"1000",step:"1",value:l.height,onChange:r=>R({height:Number(r.target.value)}),style:{width:"65px",padding:"6px 8px",border:"1px solid #d1d5db",borderRadius:"4px",fontSize:"13px",textAlign:"right"}}),n.jsx("span",{style:{fontSize:"12px",color:"#6b7280"},className:"size-unit",children:"mm"})]})]})})]}),n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:"8px"},children:[n.jsx("input",{type:"range",min:"200",max:"1200",step:"1",value:l.width,onChange:r=>R({width:Number(r.target.value)}),style:{width:"100%"}}),n.jsx("input",{type:"range",min:"300",max:"1200",step:"1",value:l.depth,onChange:r=>R({depth:Number(r.target.value)}),style:{width:"100%"}}),n.jsx("input",{type:"range",min:"700",max:"1000",step:"1",value:l.height,onChange:r=>R({height:Number(r.target.value)}),style:{width:"100%"}})]})]}),n.jsxs("div",{style:{marginBottom:"16px"},children:[n.jsx("h3",{style:{fontSize:"14px",fontWeight:"600",marginBottom:"8px",color:"#374151"},children:"5. 도어 선택"}),n.jsx("div",{style:{display:"flex",gap:"8px"},children:[{value:"double",label:"양문"},{value:"left",label:"왼쪽"},{value:"right",label:"오른쪽"}].map(r=>n.jsx("button",{onClick:()=>R({doorConfig:r.value}),style:{flex:1,padding:"10px",border:l.doorConfig===r.value?"2px solid #3b82f6":"1px solid #d1d5db",borderRadius:"6px",backgroundColor:l.doorConfig===r.value?"#eff6ff":"white",cursor:"pointer",fontSize:"13px",fontWeight:l.doorConfig===r.value?"600":"400",color:l.doorConfig===r.value?"#1e40af":"#374151"},children:r.label},r.value))})]}),n.jsxs("div",{style:{marginBottom:"16px"},children:[n.jsx("h3",{style:{fontSize:"14px",fontWeight:"600",marginBottom:"8px",color:"#374151"},children:"6. 목찬넬 규격"}),n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px"},className:"channel-spec-container",children:[n.jsxs("div",{style:{flex:1,display:"flex",alignItems:"center",gap:"4px"},children:[n.jsx("label",{style:{fontSize:"12px",color:"#6b7280",whiteSpace:"nowrap",minWidth:"26px"},children:"높이"}),n.jsx("input",{type:"range",min:"50",max:"100",step:"1",value:l.channelHeight,onChange:r=>R({channelHeight:Number(r.target.value)}),style:{flex:1}}),n.jsx("input",{type:"number",min:"50",max:"100",step:"1",value:l.channelHeight,onChange:r=>R({channelHeight:Number(r.target.value)}),style:{width:"52px",padding:"6px 6px",border:"1px solid #d1d5db",borderRadius:"4px",fontSize:"13px",textAlign:"right"}}),n.jsx("span",{style:{fontSize:"12px",color:"#6b7280"},className:"spec-unit",children:"mm"})]}),n.jsxs("div",{style:{flex:1,display:"flex",alignItems:"center",gap:"4px"},children:[n.jsx("label",{style:{fontSize:"12px",color:"#6b7280",whiteSpace:"nowrap",minWidth:"26px"},children:"깊이"}),n.jsx("input",{type:"range",min:"40",max:"100",step:"1",value:l.channelDepth,onChange:r=>R({channelDepth:Number(r.target.value)}),style:{flex:1}}),n.jsx("input",{type:"number",min:"40",max:"100",step:"1",value:l.channelDepth,onChange:r=>R({channelDepth:Number(r.target.value)}),style:{width:"52px",padding:"6px 6px",border:"1px solid #d1d5db",borderRadius:"4px",fontSize:"13px",textAlign:"right"}}),n.jsx("span",{style:{fontSize:"12px",color:"#6b7280"},className:"spec-unit",children:"mm"})]})]})]}
12),n.jsxs("div",{style:{marginBottom:"16px"},children:[n.jsx("h3",{style:{fontSize:"14px",fontWeight:"600",marginBottom:"8px",color:"#374151"},children:"7. 선반 보강 방법"}),n.jsx("div",{style:{display:"flex",gap:"8px"},children:[{value:"none",label:"없음"},{value:"vertical",label:"세로 보강대"},{value:"hardware",label:"휨 방지 철물"}].map(r=>n.jsx("button",{onClick:()=>R({shelfReinforcement:r.value}),style:{flex:1,padding:"10px",border:l.shelfReinforcement===r.value?"2px solid #3b82f6":"1px solid #d1d5db",borderRadius:"6px",backgroundColor:l.shelfReinforcement===r.value?"#eff6ff":"white",cursor:"pointer",fontSize:"12px",fontWeight:l.shelfReinforcement===r.value?"600":"400",color:l.shelfReinforcement===r.value?"#1e40af":"#374151"},children:r.label},r.value))})]}),n.jsxs("div",{style:{marginBottom:"0px"},children:[n.jsx("h3",{style:{fontSize:"14px",fontWeight:"600",marginBottom:"8px",color:"#374151"},children:"8. 가구다리"}),n.jsx("div",{style:{display:"flex",gap:"8px",marginBottom:"12px"},children:[{value:"adjustable",label:"싱크 조절다리",defaultHeight:100,min:100,max:150},{value:"base",label:"좌대 프레임",defaultHeight:60,min:60,max:80},{value:"leveler",label:"레벨러",defaultHeight:70,min:45,max:80}].map(r=>n.jsx("button",{onClick:()=>{R({legType:r.value,legHeight:r.defaultHeight})},style:{flex:1,padding:"10px",border:l.legType===r.value?"2px solid #3b82f6":"1px solid #d1d5db",borderRadius:"6px",backgroundColor:l.legType===r.value?"#eff6ff":"white",cursor:"pointer",fontSize:"12px",fontWeight:l.legType===r.value?"600":"400",color:l.legType===r.value?"#1e40af":"#374151"},children:r.label},r.value))}),n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[n.jsx("label",{style:{fontSize:"12px",color:"#6b7280",whiteSpace:"nowrap",minWidth:"80px"},children:"걸레받이 높이"}),n.jsx("input",{type:"range",min:l.legType==="adjustable"?100:l.legType==="base"?60:45,max:l.legType==="adjustable"?150:(l.legType==="base",80),step:"1",value:l.legHeight,onChange:r=>R({legHeight:Number(r.target.value)}),style:{flex:1}}),n.jsx("input",{type:"number",min:l.legType==="adjustable"?100:l.legType==="base"?60:45,max:l.legType==="adjustable"?150:(l.legType==="base",80),step:"1",value:l.legHeight,onChange:r=>R({legHeight:Number(r.target.value)}),style:{width:"65px",padding:"6px 8px",border:"1px solid #d1d5db",borderRadius:"4px",fontSize:"13px",textAlign:"right"}}),n.jsx("span",{style:{fontSize:"12px",color:"#6b7280"},className:"spec-unit",children:"mm"})]})]})]})]})]})}),n.jsx("style",{children:`
13        /* Shimmer 애니메이션 */
14        @keyframes shimmer {
15          0% {
16            transform: translateX(-100%);
17          }
18          100% {
19            transform: translateX(100%);
20          }
21        }
22
23        /* Spin 애니메이션 */
24        @keyframes spin {
25          0% {
26            transform: rotate(0deg);
27          }
28          100% {
29            transform: rotate(360deg);
30          }
31        }
32
33        /* 모바일/태블릿 (~1024px) - 3D 뷰와 금액 영역 고정, 컨트롤 패널만 스크롤 */
34        @media (max-width: 1023px) {
35          .sink-cabinet-container {
36            height: 100vh !important;
37            overflow: hidden !important;
38            display: flex !important;
39            flex-direction: column !important;
40          }
41
42          .sink-cabinet-wrapper {
43            flex: 1 !important;
44            overflow: hidden !important;
45            display: flex !important;
46            flex-direction: column !important;
47          }
48
49          .sink-cabinet-viewer {
50            flex-shrink: 0 !important;
51          }
52
53          .control-panel {
54            flex: 1 !important;
55            overflow: hidden !important;
56            display: flex !important;
57            flex-direction: column !important;
58          }
59
60          .control-panel-content {
61            flex: 1 !important;
62            overflow-y: auto !important;
63          }
64        }
65
66        /* 모바일 (~768px) */
67        @media (max-width: 768px) {
68          .sink-cabinet-container {
69            padding-left: 12px !important;
70            padding-right: 12px !important;
71            padding-top: 70px !important;
72          }
73
74          .canvas-container {
75            height: 400px !important;
76          }
77
78          .control-panel h1 {
79            font-size: 18px !important;
80          }
81
82          .control-panel h3 {
83            font-size: 13px !important;
84          }
85
86          .channel-spec-container {
87            flex-direction: column !important;
88            align-items: stretch !important;
89          }
90
91          .action-button {
92            height: 50px !important;
93            padding: 0 12px !important;
94            display: flex !important;
95            align-items: center !important;
96            justify-content: center !important;
97          }
98        }
99
100        /* 440px 이하 - mm 단위 숨기기 */
101        @media (max-width: 440px) {
102          .size-unit {
103            display: none !important;
104          }
105        }
106
107        /* 390px 이하 - 목찬넬 규격 & 가구다리 mm 단위 숨기기 */
108        @media (max-width: 390px) {
109          .spec-unit {
110            display: none !important;
111          }
112        }
113
114        /* 태블릿 (768px ~ 1024px) */
115        @media (min-width: 768px) and (max-width: 1024px) {
116          .canvas-container {
117            height: 500px !important;
118          }
119        }
120
121        /* 데스크탑 (1024px ~ 1400px) */
122        @media (min-width: 1024px) and (max-width: 1400px) {
123          .sink-cabinet-wrapper {
124            flex-direction: row !important;
125          }
126
127          .sink-cabinet-viewer {
128            flex: 1 !important;
129            min-width: 0 !important;
130          }
131
132          .canvas-container {
133            height: 600px !important;
134          }
135
136          .control-panel {
137            width: 540px !important;
138            flex-shrink: 0 !important;
139          }
140        }
141
142        /* 대형 데스크탑 (1400px ~) */
143        @media (min-width: 1400px) {
144          .sink-cabinet-wrapper {
145            flex-direction: row !important;
146          }
147
148          .sink-cabinet-viewer {
149            flex: 1 !important;
150            min-width: 0 !important;
151          }
152
153          .canvas-container {
154            height: 800px !important;
155          }
156
157          .control-panel {
158            width: 540px !important;
159            flex-shrink: 0 !important;
160          }
161        }
162
163        /* 데스크탑 화면 높이 최적화 (1024px 이상 너비에만 적용) */
164        @media (min-width: 1024px) {
165          /* 컨트롤 패널에 최대 높이 설정 */
166          .control-panel {
167            max-height: calc(100vh - 100px);
168          }
169
170          /* 컨트롤 패널 컨텐츠에 스크롤 추가 */
171          .control-panel-content {
172            max-height: calc(100vh - 200px);
173            overflow-y: auto;
174          }
175
176          /* 화면 높이가 낮을 때 3D 영역 높이 조정 */
177          @media (max-height: 1060px) {
178            .canvas-container {
179              height: 500px !important;
180            }
181          }
182
183          @media (max-height: 900px) {
184            .canvas-container {
185              height: 400px !important;
186            }
187          }
188
189          @media (max-height: 750px) {
190            .canvas-container {
191              height: 350px !important;
192            }
193          }
194        }
195      `})]})}
195export{In as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.