efficient-shell 12.4.0 → 12.5.0

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.
Files changed (38) hide show
  1. package/dist/{Browser-Z4Q2NDFT.js → Browser-FQUSLYYL.js} +16 -16
  2. package/dist/{Files-EX6JA4CJ.js → Files-A5ULCW3Q.js} +107 -107
  3. package/dist/{Notepad-U4OSPCX3.js → Notepad-7FEHOFEE.js} +9 -9
  4. package/dist/{Preview-JGRBT3EM.js → Preview-XJ3PGGRE.js} +9 -9
  5. package/dist/apps/index.js +1 -1
  6. package/dist/bin/media-host-check.js +1 -1
  7. package/dist/bin/ui-check.js +1 -1
  8. package/dist/{chunk-LCC3NXQX.js → chunk-34SPT4I6.js} +6 -6
  9. package/dist/chunk-4XSE5PV2.js +1 -0
  10. package/dist/{chunk-KQDSAN75.js → chunk-5FDS6KVH.js} +1 -1
  11. package/dist/{chunk-WUGQAZMC.js → chunk-EZPSNUYR.js} +4 -4
  12. package/dist/{chunk-6C4T3HRB.js → chunk-J4KYZGHQ.js} +2 -2
  13. package/dist/{chunk-I5CSYOOZ.js → chunk-JI756ABJ.js} +6 -6
  14. package/dist/{chunk-BQ5CRQYR.js → chunk-KSOMKQ5U.js} +1 -1
  15. package/dist/{chunk-ZB2H2JJ2.js → chunk-NC36LJCA.js} +4 -4
  16. package/dist/{chunk-CURXYF2R.js → chunk-PM4Y2FMQ.js} +3 -3
  17. package/dist/chunk-TX5FZBPQ.js +4 -0
  18. package/dist/chunk-UVGEOQI4.js +13 -0
  19. package/dist/data/EntityList.d.ts +4 -0
  20. package/dist/data/EntityList.js +1 -1
  21. package/dist/data/ListFooter.d.ts +7 -12
  22. package/dist/data/ListFooter.js +1 -1
  23. package/dist/format/index.js +1 -1
  24. package/dist/forms/BrandAssetEditor.js +1 -1
  25. package/dist/forms/LinkPicker.js +1 -1
  26. package/dist/forms/MediaLibrary.js +1 -1
  27. package/dist/forms/MediaUploadField.js +1 -1
  28. package/dist/index.js +91 -91
  29. package/dist/page-tabs/index.js +5 -5
  30. package/dist/shell/LanguageSelect.js +1 -1
  31. package/dist/shell/SettingRow.js +1 -1
  32. package/dist/telemetry/index.js +1 -1
  33. package/dist/ui/index.js +1 -1
  34. package/dist/version.js +1 -1
  35. package/package.json +1 -1
  36. package/dist/chunk-4H5NTMOF.js +0 -4
  37. package/dist/chunk-RJ3J4BLH.js +0 -1
  38. package/dist/chunk-VIOILTE4.js +0 -13
@@ -1,4 +1,4 @@
1
- import{PdfViewer as e,ToolbarSlotContext as t,PanelActions as n}from"./chunk-EUUCNDIS.js";import{ImageAnnotator_default as r}from"./chunk-FPYABAOX.js";import{AboutApp as s}from"./chunk-BQ5CRQYR.js";import{peekPdfPreviewStage as i,claimPdfPreviewStage as o,PDF_PREVIEW_UPDATE_EVENT as a}from"./chunk-ESL5TDNA.js";import{WindowTitle as l}from"./chunk-UWF45S5L.js";import"./chunk-4LXCCZDM.js";import"./chunk-AW7TOB6N.js";import"./chunk-KNUR2UEG.js";import"./chunk-JDCM2VHG.js";import"./chunk-Y4RERPFN.js";import"./chunk-5A7MWTXX.js";import"./chunk-ZDMZM7HD.js";import"./chunk-HE767CVB.js";import"./chunk-CAXOKGMB.js";import"./chunk-PMJMYH5O.js";import"./chunk-N7JX27JE.js";import"./chunk-3DVNXNTF.js";import"./chunk-2762IAB7.js";import"./chunk-VWGWZY7A.js";import"./chunk-7QSDPSXP.js";import"./chunk-5JUG74UR.js";import"./chunk-SCGBCBXP.js";import{getActiveModalId as c}from"./chunk-F3ZOO23R.js";import"./chunk-2QY5BJLA.js";import"./chunk-UGTRSRIW.js";import"./chunk-KC3EX26K.js";import"./chunk-RJ3J4BLH.js";import"./chunk-CDAJKLGL.js";import"./chunk-JPNAEN53.js";import"./chunk-IFQXTIMY.js";import"./chunk-URHGHXDN.js";import"./chunk-5QFPTDQF.js";import"./chunk-UJJXWLHE.js";import"./chunk-XWFLIGDQ.js";import{Icon as d}from"./chunk-UIWGVOFH.js";import"./chunk-J75ZT2JQ.js";import{SpinnerRing as u,LoadingSpinner as p}from"./chunk-R2VKEMZH.js";import"./chunk-CJH2BGXY.js";import"./chunk-QQ2LDC6C.js";import"./chunk-PGN5ME7B.js";import"./chunk-62LW225J.js";import"./chunk-GLUJS42B.js";import"./chunk-D65T4H6J.js";import"./chunk-STKJA4PV.js";import{toast_default as m}from"./chunk-TRWHVG3A.js";import"./chunk-UQYNPYF4.js";import"./chunk-MRJKZWWV.js";import{registerModalEscapeInterceptor as h}from"./chunk-TWVUQUUD.js";import"./chunk-5FYDNH4Y.js";import"./chunk-LNXBTK7Q.js";import{useShellStrings as f,splitAround as x}from"./chunk-43MCNASD.js";import"./chunk-C3QOHMR6.js";import{useRef as y,useState as g,useEffect as b}from"react";import{jsxs as w,jsx as v,Fragment as k}from"react/jsx-runtime";var N=!1;function C(e,t){return e?.url&&e.url!==t.url&&e.url.startsWith("blob:")&&URL.revokeObjectURL(e.url),t}function A(){const n=y(void 0);void 0===n.current&&(n.current=i());const[r,u]=g(n.current?.data??null);b(()=>{const e=n.current;null!=e&&(o(e),u(t=>t===e.data?t:C(t,e.data)))},[]),b(()=>{const e=n.current?.token;if(null==e)return;const t=t=>{const n=t.detail;n&&n.token===e&&u(e=>C(e,n.data))};return window.addEventListener(a,t),()=>window.removeEventListener(a,t)},[]);const p=y(void 0);b(()=>{p.current=r?.url},[r?.url]);const h=y(null);b(()=>(null!==h.current&&(clearTimeout(h.current),h.current=null),()=>{const e=p.current;e?.startsWith("blob:")&&(h.current=setTimeout(()=>URL.revokeObjectURL(e),0))}),[]);const N=f().preview,A=r?.filename?(L=r.filename).length>24?`${L.slice(0,23)}…`:L:N.untitled;var L;const M=y(null),j=y(null),[z,T]=g(null),[R,D]=g(!1),P=y(0),W=()=>M.current?.click(),I=()=>{P.current=0,D(!1)},O=e=>{const t=e.closest("[data-modal-id]");return!t||c()===t.dataset.modalId};b(()=>{const e=()=>I(),t=()=>I(),n=e=>{"Escape"===e.key&&I()};return window.addEventListener("dragend",e),window.addEventListener("drop",t),window.addEventListener("keydown",n),()=>{window.removeEventListener("dragend",e),window.removeEventListener("drop",t),window.removeEventListener("keydown",n)}},[]);const X=e=>{const t=(e.name.split(".").pop()||"").toLowerCase(),n="pdf"===t?"pdf":"dxf"===t?"dxf":["jpg","jpeg","png","gif","webp","svg","avif","bmp"].includes(t)?"image":["stp","step","stl","obj","gltf","glb","3mf","iges","igs","ply","fbx"].includes(t)?"3d":void 0;if(!n)return void("dwg"===t?m.error(N.dwgUnsupported):m.error(N.unsupportedType(t)));const r=URL.createObjectURL(e);u(t=>(t?.url?.startsWith("blob:")&&t.url!==r&&URL.revokeObjectURL(t.url),{url:r,filename:e.name,kind:n}))},B=/* @__PURE__ */w("div",{className:"flex items-center gap-2 px-3 py-2 border-b border-gray-200 bg-gray-50 shrink-0",children:[
1
+ import{PdfViewer as e,ToolbarSlotContext as t,PanelActions as n}from"./chunk-EUUCNDIS.js";import{ImageAnnotator_default as r}from"./chunk-FPYABAOX.js";import{AboutApp as s}from"./chunk-KSOMKQ5U.js";import{peekPdfPreviewStage as i,claimPdfPreviewStage as o,PDF_PREVIEW_UPDATE_EVENT as a}from"./chunk-ESL5TDNA.js";import{WindowTitle as l}from"./chunk-UWF45S5L.js";import"./chunk-4LXCCZDM.js";import"./chunk-AW7TOB6N.js";import"./chunk-KNUR2UEG.js";import"./chunk-JDCM2VHG.js";import"./chunk-Y4RERPFN.js";import"./chunk-5A7MWTXX.js";import"./chunk-ZDMZM7HD.js";import"./chunk-HE767CVB.js";import"./chunk-CAXOKGMB.js";import"./chunk-PMJMYH5O.js";import"./chunk-N7JX27JE.js";import"./chunk-3DVNXNTF.js";import"./chunk-2762IAB7.js";import"./chunk-VWGWZY7A.js";import"./chunk-7QSDPSXP.js";import"./chunk-5JUG74UR.js";import"./chunk-SCGBCBXP.js";import{getActiveModalId as c}from"./chunk-F3ZOO23R.js";import"./chunk-2QY5BJLA.js";import"./chunk-UGTRSRIW.js";import"./chunk-KC3EX26K.js";import"./chunk-4XSE5PV2.js";import"./chunk-CDAJKLGL.js";import"./chunk-JPNAEN53.js";import"./chunk-IFQXTIMY.js";import"./chunk-URHGHXDN.js";import"./chunk-5QFPTDQF.js";import"./chunk-UJJXWLHE.js";import"./chunk-XWFLIGDQ.js";import{Icon as d}from"./chunk-UIWGVOFH.js";import"./chunk-J75ZT2JQ.js";import{SpinnerRing as u,LoadingSpinner as p}from"./chunk-R2VKEMZH.js";import"./chunk-CJH2BGXY.js";import"./chunk-QQ2LDC6C.js";import"./chunk-PGN5ME7B.js";import"./chunk-62LW225J.js";import"./chunk-GLUJS42B.js";import"./chunk-D65T4H6J.js";import"./chunk-STKJA4PV.js";import{toast_default as m}from"./chunk-TRWHVG3A.js";import"./chunk-UQYNPYF4.js";import"./chunk-MRJKZWWV.js";import{registerModalEscapeInterceptor as h}from"./chunk-TWVUQUUD.js";import"./chunk-5FYDNH4Y.js";import"./chunk-LNXBTK7Q.js";import{useShellStrings as f,splitAround as x}from"./chunk-43MCNASD.js";import"./chunk-C3QOHMR6.js";import{useRef as y,useState as g,useEffect as b}from"react";import{jsxs as w,jsx as v,Fragment as k}from"react/jsx-runtime";var N=!1;function C(e,t){return e?.url&&e.url!==t.url&&e.url.startsWith("blob:")&&URL.revokeObjectURL(e.url),t}function A(){const n=y(void 0);void 0===n.current&&(n.current=i());const[r,u]=g(n.current?.data??null);b(()=>{const e=n.current;null!=e&&(o(e),u(t=>t===e.data?t:C(t,e.data)))},[]),b(()=>{const e=n.current?.token;if(null==e)return;const t=t=>{const n=t.detail;n&&n.token===e&&u(e=>C(e,n.data))};return window.addEventListener(a,t),()=>window.removeEventListener(a,t)},[]);const p=y(void 0);b(()=>{p.current=r?.url},[r?.url]);const h=y(null);b(()=>(null!==h.current&&(clearTimeout(h.current),h.current=null),()=>{const e=p.current;e?.startsWith("blob:")&&(h.current=setTimeout(()=>URL.revokeObjectURL(e),0))}),[]);const N=f().preview,A=r?.filename?(L=r.filename).length>24?`${L.slice(0,23)}…`:L:N.untitled;var L;const M=y(null),j=y(null),[z,T]=g(null),[R,D]=g(!1),P=y(0),W=()=>M.current?.click(),I=()=>{P.current=0,D(!1)},O=e=>{const t=e.closest("[data-modal-id]");return!t||c()===t.dataset.modalId};b(()=>{const e=()=>I(),t=()=>I(),n=e=>{"Escape"===e.key&&I()};return window.addEventListener("dragend",e),window.addEventListener("drop",t),window.addEventListener("keydown",n),()=>{window.removeEventListener("dragend",e),window.removeEventListener("drop",t),window.removeEventListener("keydown",n)}},[]);const X=e=>{const t=(e.name.split(".").pop()||"").toLowerCase(),n="pdf"===t?"pdf":"dxf"===t?"dxf":["jpg","jpeg","png","gif","webp","svg","avif","bmp"].includes(t)?"image":["stp","step","stl","obj","gltf","glb","3mf","iges","igs","ply","fbx"].includes(t)?"3d":void 0;if(!n)return void("dwg"===t?m.error(N.dwgUnsupported):m.error(N.unsupportedType(t)));const r=URL.createObjectURL(e);u(t=>(t?.url?.startsWith("blob:")&&t.url!==r&&URL.revokeObjectURL(t.url),{url:r,filename:e.name,kind:n}))},B=/* @__PURE__ */w("div",{className:"flex items-center gap-2 px-3 py-2 border-b border-gray-200 bg-gray-50 shrink-0",children:[
2
2
  /* @__PURE__ */v("input",{ref:M,type:"file",accept:".pdf,.dxf,.jpg,.jpeg,.png,.gif,.webp,.svg,.avif,.bmp,.stp,.step,.stl,.obj,.gltf,.glb,.3mf,.iges,.igs,.ply,.fbx",onChange:e=>{const t=e.target.files?.[0];t&&X(t),M.current&&(M.current.value="")},className:"hidden"}),
3
3
  /* @__PURE__ */w("button",{onClick:W,className:"text-xs text-gray-700 hover:text-gray-900 px-2 py-1 rounded hover:bg-gray-200 transition-colors flex items-center gap-1",children:[
4
4
  /* @__PURE__ */v(d,{name:"folder-open",className:"h-3.5 w-3.5",strokeWidth:1.5}),N.open]}),
@@ -33,7 +33,7 @@ return w("div",{className:"flex flex-col items-center justify-center h-full bg-g
33
33
  /* @__PURE__ */v("div",{className:"text-base font-semibold tracking-wide text-gray-700 uppercase",children:t||n.converting}),
34
34
  /* @__PURE__ */v("div",{className:"text-xs text-gray-400 truncate max-w-md",children:e})]}),
35
35
  /* @__PURE__ */v("div",{className:"w-72 h-1.5 rounded-full bg-gray-200 overflow-hidden",children:/* @__PURE__ */v("div",{className:"h-full w-1/3 bg-blue-500 rounded-full animate-pulse",style:{animation:"preview-bar 1.4s ease-in-out infinite"}})}),
36
- /* @__PURE__ */v("style",{children:"@keyframes preview-bar { 0% { transform: translateX(-110%); } 100% { transform: translateX(310%); } }"})]})}var L=["https://cdn.jsdelivr.net/gh/vagran/dxf-viewer-example-src@master/src/assets/fonts/Roboto-LightItalic.ttf","https://cdn.jsdelivr.net/gh/vagran/dxf-viewer-example-src@master/src/assets/fonts/NotoSansDisplay-SemiCondensedLightItalic.ttf","https://cdn.jsdelivr.net/gh/vagran/dxf-viewer-example-src@master/src/assets/fonts/NanumGothic-Regular.ttf"],M={l:"LINE",line:"LINE",pl:"PLINE",pline:"PLINE",ex:"EXTEND",extend:"EXTEND",tr:"TRIM",trim:"TRIM",e:"ERASE",erase:"ERASE",m:"MOVE",move:"MOVE",co:"COPY",cp:"COPY",copy:"COPY",o:"OFFSET",offset:"OFFSET",f:"FILLET",fillet:"FILLET",cha:"CHAMFER",chamfer:"CHAMFER",x:"EXPLODE",explode:"EXPLODE",mi:"MIRROR",mirror:"MIRROR",ro:"ROTATE",rotate:"ROTATE",sc:"SCALE",scale:"SCALE",s:"STRETCH",stretch:"STRETCH",ar:"ARRAY",array:"ARRAY",rec:"RECTANG",rectang:"RECTANG",rectangle:"RECTANG",c:"CIRCLE",circle:"CIRCLE",a:"ARC",arc:"ARC",el:"ELLIPSE",ellipse:"ELLIPSE",t:"MTEXT",mt:"MTEXT",mtext:"MTEXT",text:"TEXT",b:"BLOCK",block:"BLOCK",i:"INSERT",insert:"INSERT",ha:"HATCH",hatch:"HATCH"};function S({url:e,filename:t,onDownload:r,onEmail:s}){const i=y(null),o=y(null),[a,l]=g(!0),[u,m]=g(null),[N,C]=g([]),[A,E]=g(!1),[S,j]=g(!0),z=f(),T=z.drawing,R=z.preview,F=y(T);F.current=T;const[H,P]=g(!1),[W,I]=g("auto"),[O,X]=g(null),[B,U]=g(null),[G,Y]=g(null),[V,_]=g(""),$=y(W),J=y(G);b(()=>{$.current=W},[W]),b(()=>{J.current=G},[G]);const Z=y(null),K=y(null),Q=y(null),[q,ee]=g(""),[te,ne]=g(null),re=y(""),se=y(null),ie=y(null),oe=y(null);b(()=>{let t=!1,n=null;return l(!0),m(null),C([]),(async()=>{let r;try{r=(await(import("dxf-viewer"))).DxfViewer}catch(e){return void(t||(m(F.current.notInstalled),l(!1)))}if(!t&&i.current)try{if(await new Promise(e=>{const t=()=>{const n=i.current?.getBoundingClientRect();n&&n.width>4&&n.height>4?e():requestAnimationFrame(t)};t()}),t||!i.current)return;const s={autoResize:!0},a=r.DefaultOptions?.clearColor;"function"==typeof a?.clone&&(s.clearColor=a.clone().setHex(16777215)),n=new r(i.current,s),o.current=n;const c="undefined"!=typeof window&&window.__REACT_OS_SHELL_DXF_FONTS__||L;if(await n.Load({url:e,fonts:c,workerFactory:null}),t)return;try{const e=n.GetLayers?.()??[];Array.isArray(e)&&C(e.map(e=>({name:e.name,displayName:e.displayName??e.name,color:"number"==typeof e.color?e.color:void 0,visible:!0})))}catch{}const d=()=>{try{const e=i.current?.getBoundingClientRect();e&&e.width>0&&e.height>0&&n.SetSize?.(Math.round(e.width),Math.round(e.height));const t=n.GetBounds?.(),r=n.GetOrigin?.();t&&r&&n.FitView(t.minX-r.x,t.maxX-r.x,t.minY-r.y,t.maxY-r.y),n.Render?.()}catch(e){console.warn("[Preview] DXF refit failed",e)}};d(),requestAnimationFrame(d),l(!1)}catch(e){t||(m(e?.message||F.current.renderFailed),l(!1))}})(),()=>{t=!0;try{n?.Destroy?.()}catch{}o.current=null}},[e]),b(()=>{if(!S||a)return;const e=setTimeout(()=>j(!1),5e3);return()=>clearTimeout(e)},[S,a]);const ae=N.map(e=>e.visible?"1":"0").join("");b(()=>{const e=o.current;if(a||u||!e)return;const t=e.GetScene?.(),n=e.GetCamera?.(),r=e.GetCanvas?.();if(!(t&&n&&r&&i.current))return;const s=()=>{const e=oe.current;e&&(e.overlay&&e.overlay.parentElement&&e.overlay.parentElement.removeChild(e.overlay),oe.current=null)};if(!H)return s(),X(null),void U(null);const l=document.createElement("div");l.style.cssText="position:absolute;inset:0;pointer-events:none;z-index:5;",i.current.appendChild(l);const c=document.createElementNS("http://www.w3.org/2000/svg","svg");c.setAttribute("style","position:absolute;inset:0;width:100%;height:100%;pointer-events:none;");const d=document.createElementNS("http://www.w3.org/2000/svg","defs"),p=document.createElementNS("http://www.w3.org/2000/svg","marker");p.setAttribute("id","dxf-measure-arrow"),p.setAttribute("viewBox","0 0 10 10"),p.setAttribute("refX","9"),p.setAttribute("refY","5"),p.setAttribute("markerWidth","6"),p.setAttribute("markerHeight","6"),p.setAttribute("orient","auto-start-reverse");const m=document.createElementNS("http://www.w3.org/2000/svg","path");m.setAttribute("d","M 0 0 L 10 5 L 0 10 z"),m.setAttribute("fill","#ff8800"),p.appendChild(m),d.appendChild(p),c.appendChild(d),l.appendChild(c);const h=()=>{const e=document.createElementNS("http://www.w3.org/2000/svg","line");return e.setAttribute("stroke","#ff8800"),e.setAttribute("stroke-width","1"),e.setAttribute("stroke-dasharray","6,4"),e.setAttribute("opacity","0.55"),e.style.display="none",c.appendChild(e),e},f=h(),x=h(),y=document.createElementNS("http://www.w3.org/2000/svg","line");y.setAttribute("stroke","#ff8800"),y.setAttribute("stroke-width","1"),y.setAttribute("opacity","0.85"),y.style.display="none",c.appendChild(y);const g=document.createElementNS("http://www.w3.org/2000/svg","line");g.setAttribute("stroke","#ff8800"),g.setAttribute("stroke-width","1"),g.setAttribute("opacity","0.85"),g.style.display="none",c.appendChild(g);const b=document.createElementNS("http://www.w3.org/2000/svg","line");b.setAttribute("stroke","#ff8800"),b.setAttribute("stroke-width","1.5"),b.setAttribute("stroke-linecap","round"),b.style.display="none",c.appendChild(b);const w=document.createElementNS("http://www.w3.org/2000/svg","line");w.setAttribute("stroke","#ff8800"),w.setAttribute("stroke-width","1.5"),w.setAttribute("stroke-linecap","round"),w.style.display="none",c.appendChild(w);const v=document.createElement("div");v.style.cssText="position:absolute;transform:translate(-50%,-50%);pointer-events:none;display:none;";const k="http://www.w3.org/2000/svg",N=document.createElementNS(k,"svg");N.setAttribute("width","22"),N.setAttribute("height","22"),N.setAttribute("viewBox","0 0 22 22"),N.setAttribute("style","overflow:visible;display:block"),v.appendChild(N);const C=e=>{const t=document.createElementNS(k,"g");return e(t),t.style.display="none",N.appendChild(t),t},A=C(e=>{const t=document.createElementNS(k,"rect");t.setAttribute("x","4"),t.setAttribute("y","4"),t.setAttribute("width","14"),t.setAttribute("height","14"),t.setAttribute("fill","rgba(255,255,255,0.9)"),t.setAttribute("stroke","#ff8800"),t.setAttribute("stroke-width","1.8"),e.appendChild(t)}),E=C(e=>{const t=(e,t,n,r)=>{const s=document.createElementNS(k,"line");return s.setAttribute("x1",String(e)),s.setAttribute("y1",String(t)),s.setAttribute("x2",String(n)),s.setAttribute("y2",String(r)),s.setAttribute("stroke","#ff8800"),s.setAttribute("stroke-width","2.2"),s.setAttribute("stroke-linecap","round"),s};e.appendChild(t(4,4,18,18)),e.appendChild(t(18,4,4,18))}),L=C(e=>{const t=document.createElementNS(k,"polygon");t.setAttribute("points","4,4 18,4 4,18 18,18"),t.setAttribute("fill","rgba(255,255,255,0.9)"),t.setAttribute("stroke","#ff8800"),t.setAttribute("stroke-width","1.8"),t.setAttribute("stroke-linejoin","round"),e.appendChild(t)}),M=C(e=>{const t=document.createElementNS(k,"polygon");t.setAttribute("points","11,3 19,18 3,18"),t.setAttribute("fill","rgba(255,255,255,0.9)"),t.setAttribute("stroke","#ff8800"),t.setAttribute("stroke-width","1.8"),t.setAttribute("stroke-linejoin","round"),e.appendChild(t)}),S=C(e=>{const t=document.createElementNS(k,"circle");t.setAttribute("cx","11"),t.setAttribute("cy","11"),t.setAttribute("r","7"),t.setAttribute("fill","rgba(255,255,255,0.9)"),t.setAttribute("stroke","#ff8800"),t.setAttribute("stroke-width","1.8"),e.appendChild(t);const n=(e,t,n,r)=>{const s=document.createElementNS(k,"line");return s.setAttribute("x1",String(e)),s.setAttribute("y1",String(t)),s.setAttribute("x2",String(n)),s.setAttribute("y2",String(r)),s.setAttribute("stroke","#ff8800"),s.setAttribute("stroke-width","1.6"),s.setAttribute("stroke-linecap","round"),s};e.appendChild(n(6.5,6.5,15.5,15.5)),e.appendChild(n(15.5,6.5,6.5,15.5))});l.appendChild(v),oe.current={picks:[],rawSecondClick:null,overlay:l,svg:c,line:b,fixedLine:w,fixedLabel:null,refLine:f,refLineV:x,extLineA:y,extLineB:g,markers:[],label:null,snap:v,segs:null,nodes:null};const j=n?.position?.constructor??t?.position?.constructor??null;let z=!1;const T=(e,t)=>{if(!j)return{x:0,y:0};const s=new j(e,t,0).project(n),i=r.clientWidth,o=r.clientHeight;return{x:(s.x+1)/2*i,y:(1-s.y)/2*o}};(()=>{try{const e=oe.current;if(!e)return;const n=[],r=[];let s=!1;const i=e=>{const t=e?.attributes?.instanceTransform0,n=e?.attributes?.instanceTransform1;if(t&&n){const e=[],r=Math.min(t.count,n.count);for(let s=0;s<r;s++)e.push([t.getX(s),t.getY(s),t.getZ(s),n.getX(s),n.getY(s),n.getZ(s)]);return e}const r=e?.attributes?.instanceTransform;if(r){const e=[];for(let t=0;t<r.count;t++)e.push([1,0,r.getX(t),0,1,r.getY(t)]);return e}return[[1,0,0,0,1,0]]},o=e=>{const t=!!e?.isLineSegments;if(!t&&!!!e?.isPoints)return;const o=e.geometry,a=o?.attributes?.position;if(!a)return;const l=i(o);if(t){const e=o.index,t=Math.floor((e?e.count:a.count)/2);for(let r=0;r<t;r++){const t=e?e.getX(2*r):2*r,i=e?e.getX(2*r+1):2*r+1,o=a.getX(t),c=a.getY(t),d=a.getX(i),u=a.getY(i);if(Number.isFinite(o+c+d+u))for(const e of l){if(n.length>=16e5)return void(s=!0);const t=e[0]*o+e[1]*c+e[2],r=e[3]*o+e[4]*c+e[5],i=e[0]*d+e[1]*u+e[2],a=e[3]*d+e[4]*u+e[5];t===i&&r===a||n.push(t,r,i,a)}}}else for(let e=0;e<a.count;e++){const t=a.getX(e),n=a.getY(e);if(Number.isFinite(t+n))for(const e of l)r.push(e[0]*t+e[1]*n+e[2],e[3]*t+e[4]*n+e[5])}};"function"==typeof t.traverseVisible?t.traverseVisible(o):t.traverse(o),e.segs=new Float64Array(n),e.nodes=new Float64Array(r),s&&console.warn("[Preview] DXF snap cache truncated at 400000 segments — snapping may miss some geometry."),z=!0}catch{}})();const R=(e,t,n,r,s,i,o,a)=>{const l=(n-e)*(a-i)-(r-t)*(o-s);if(Math.abs(l)<1e-9)return null;const c=((s-e)*(a-i)-(i-t)*(o-s))/l,d=((s-e)*(r-t)-(i-t)*(n-e))/l,u=1e-4;return c<-u||c>1+u||d<-u||d>1+u?null:{px:e+c*(n-e),py:t+c*(r-t),t:c}},W=()=>{const e=document.createElement("div");return e.style.cssText="position:absolute;width:10px;height:10px;border-radius:50%;background:#ff8800;border:2px solid #fff;box-shadow:0 0 0 1px rgba(0,0,0,0.25);transform:translate(-50%,-50%);pointer-events:none;",l.appendChild(e),e},I=(e,t,n)=>{const r=T(t,n);e.style.left=`${r.x}px`,e.style.top=`${r.y}px`},O=()=>{const e=oe.current;if(!e||!e.rawSecondClick||e.picks.length<2)return;const t=e.picks[0],n=e.rawSecondClick,r=J.current,s=$.current;if(null===r||!Number.isFinite(r)||"horizontal"!==s&&"vertical"!==s)e.picks[1]={x:n.x,y:n.y};else if("horizontal"===s){const s=n.x>=t.x?1:-1;e.picks[1]={x:t.x+s*Math.abs(r),y:n.y}}else{const s=n.y>=t.y?1:-1;e.picks[1]={x:n.x,y:t.y+s*Math.abs(r)}}},B=(e,t)=>{const n=$.current;return"auto"!==n?n:e&&t?Math.abs(t.x-e.x)>=Math.abs(t.y-e.y)?"horizontal":"vertical":"horizontal"},G=()=>{const e=oe.current;if(!e)return;O();const t=$.current,n=J.current,s=null!==n&&Number.isFinite(n)&&("horizontal"===t||"vertical"===t);e.markers[0]&&I(e.markers[0],e.picks[0].x,e.picks[0].y),e.markers[1]&&I(e.markers[1],e.picks[1].x,e.picks[1].y);const i=(t,n,s)=>{if(!t)return;if(!s||e.picks.length<1)return void(t.style.display="none");const i=e.picks[0],o=r.clientWidth,a=r.clientHeight,l=4*Math.hypot(o,a),c=T(i.x,i.y),d=T(i.x+n.dx,i.y+n.dy),u=l/(Math.hypot(d.x-c.x,d.y-c.y)||1),p=T(i.x-n.dx*u,i.y-n.dy*u),m=T(i.x+n.dx*u,i.y+n.dy*u);t.setAttribute("x1",String(p.x)),t.setAttribute("y1",String(p.y)),t.setAttribute("x2",String(m.x)),t.setAttribute("y2",String(m.y)),t.style.display=""};let o="horizontal"===t,a="vertical"===t;if("auto"===t)if(e.picks.length>=2){const t=B(e.picks[0],e.picks[1]);o="horizontal"===t,a="vertical"===t}else o=!0,a=!0;if(i(e.refLine,{dx:1,dy:0},o),i(e.refLineV,{dx:0,dy:1},a),2===e.picks.length){const t=e.picks[0],i=e.picks[1],o=B(t,i),a=(()=>{const e=oe.current,t=e.picks[0],n=e.picks[1],r=B(t,n),s=$.current,i=J.current;return null!==i&&Number.isFinite(i)&&"horizontal"===s?{from:{x:n.x,y:t.y},to:{x:n.x,y:n.y}}:null!==i&&Number.isFinite(i)&&"vertical"===s?{from:{x:t.x,y:n.y},to:{x:n.x,y:n.y}}:"horizontal"===r?{from:t,to:{x:n.x,y:t.y}}:"vertical"===r?{from:t,to:{x:t.x,y:n.y}}:{from:t,to:n}})(),l=T(a.from.x,a.from.y),c=T(a.to.x,a.to.y);e.line.setAttribute("x1",String(l.x)),e.line.setAttribute("y1",String(l.y)),e.line.setAttribute("x2",String(c.x)),e.line.setAttribute("y2",String(c.y)),e.line.setAttribute("marker-start","url(#dxf-measure-arrow)"),e.line.setAttribute("marker-end","url(#dxf-measure-arrow)");const d=Math.hypot(c.x-l.x,c.y-l.y);if(e.line.style.display=d>.5?"":"none",s&&e.fixedLine){const s="horizontal"===o?{x:i.x,y:t.y}:{x:t.x,y:i.y},a=T(t.x,t.y),l=T(s.x,s.y);e.fixedLine.setAttribute("x1",String(a.x)),e.fixedLine.setAttribute("y1",String(a.y)),e.fixedLine.setAttribute("x2",String(l.x)),e.fixedLine.setAttribute("y2",String(l.y)),e.fixedLine.setAttribute("marker-start","url(#dxf-measure-arrow)"),e.fixedLine.setAttribute("marker-end","url(#dxf-measure-arrow)"),e.fixedLine.style.display="";const c=Y();c.textContent=D(Math.abs(n));const d=(a.x+l.x)/2,u=(a.y+l.y)/2;c.style.left=`${d}px`,c.style.top=`${u}px`;const p=r.clientWidth,m=r.clientHeight;c.style.display=d<0||u<0||d>p||u>m?"none":""}else e.fixedLine&&(e.fixedLine.style.display="none"),e.fixedLabel&&(e.fixedLabel.style.display="none");const u=e.extLineA,p=e.extLineB;if(!s&&"horizontal"===o&&Math.abs(i.y-t.y)>1e-9){const e=T(i.x,t.y),n=T(i.x,i.y);p.setAttribute("x1",String(e.x)),p.setAttribute("y1",String(e.y)),p.setAttribute("x2",String(n.x)),p.setAttribute("y2",String(n.y)),p.style.display="",u.style.display="none"}else if(!s&&"vertical"===o&&Math.abs(i.x-t.x)>1e-9){const e=T(t.x,i.y),n=T(i.x,i.y);p.setAttribute("x1",String(e.x)),p.setAttribute("y1",String(e.y)),p.setAttribute("x2",String(n.x)),p.setAttribute("y2",String(n.y)),p.style.display="",u.style.display="none"}else u.style.display="none",p.style.display="none";if(e.label){const t=(l.x+c.x)/2,n=(l.y+c.y)/2;e.label.style.left=`${t}px`,e.label.style.top=`${n}px`;const s=r.clientWidth,i=r.clientHeight;e.label.style.display=t<0||n<0||t>s||n>i?"none":"",d<=.5&&(e.label.style.display="none")}}else e.line.style.display="none",e.fixedLine&&(e.fixedLine.style.display="none"),e.fixedLabel&&(e.fixedLabel.style.display="none"),e.extLineA&&(e.extLineA.style.display="none"),e.extLineB&&(e.extLineB.style.display="none")},Y=()=>{const e=oe.current;if(e.fixedLabel)return e.fixedLabel;const t=document.createElement("div");return t.style.cssText="position:absolute;left:-9999px;top:-9999px;transform:translate(-50%,-50%);padding:2px 6px;font-size:var(--text-2xs);font-weight:600;font-family:system-ui,-apple-system,sans-serif;background:rgba(255,136,0,0.75);color:#fff;border-radius:4px;white-space:nowrap;box-shadow:0 1px 4px rgba(0,0,0,0.25);pointer-events:none;",l.appendChild(t),e.fixedLabel=t,t};let V=0,_=0,q=0,ee=!1,te=!1,re=null;const se=e=>{const t=e?.detail;t&&0===t.domEvent?.button&&(V=t.canvasCoord.x,_=t.canvasCoord.y,q=performance.now(),te=!1,ee=!0)},ie=e=>{const t=r.getBoundingClientRect(),n=e.clientX-t.left,s=e.clientY-t.top;ee&&(n-V)**2+(s-_)**2>16&&(te=!0);const i=oe.current;var o;if(i&&i.snap)if(ee&&te)i.snap.style.display="none";else if(re=((e,t)=>{const n=oe.current;if(!n||!z||!n.segs)return null;const r=T(0,0),s=T(1,0),i=T(0,1),o=s.x-r.x,a=s.y-r.y,l=i.x-r.x,c=i.y-r.y,d=o*c-l*a;if(!d)return null;const u=((e-r.x)*c-(t-r.y)*l)/d,p=((t-r.y)*o-(e-r.x)*a)/d,m=18/(Math.hypot(o,a)||1),h=18/(Math.hypot(l,c)||1),f=u-m,x=u+m,y=p-h,g=p+h,b=324;let w=null,v=b,k=null,N=b,C=null,A=b,E=null,L=b;const M=[],S=n.segs;for(let n=0;n<S.length;n+=4){const s=S[n],i=S[n+1],d=S[n+2],u=S[n+3];if(s<f&&d<f||s>x&&d>x||i<y&&u<y||i>g&&u>g)continue;const p=r.x+o*s+l*i,m=r.y+a*s+c*i,h=r.x+o*d+l*u,E=r.y+a*d+c*u;let L=!1,j=e-p,z=t-m,T=j*j+z*z;T<b&&(L=!0,T<v&&(v=T,w={sx:s,sy:i,type:"endpoint"})),j=e-h,z=t-E,T=j*j+z*z,T<b&&(L=!0,T<v&&(v=T,w={sx:d,sy:u,type:"endpoint"})),j=e-(p+h)/2,z=t-(m+E)/2,T=j*j+z*z,T<b&&(L=!0,T<N&&(N=T,k={sx:(s+d)/2,sy:(i+u)/2,type:"midpoint"}));const R=h-p,D=E-m,F=R*R+D*D;if(F>0){const n=((e-p)*R+(t-m)*D)/F;n>0&&n<1&&(j=e-(p+n*R),z=t-(m+n*D),T=j*j+z*z,T<b&&(L=!0,T<A&&(A=T,C={sx:s+n*(d-s),sy:i+n*(u-i),type:"line"})))}L&&M.push({ax:s,ay:i,bx:d,by:u,apx:p,apy:m,bpx:h,bpy:E})}const j=n.nodes;if(j)for(let n=0;n<j.length;n+=2){const s=j[n],i=j[n+1];if(s<f||s>x||i<y||i>g)continue;const d=e-(r.x+o*s+l*i),u=t-(r.y+a*s+c*i),p=d*d+u*u;p<v&&(v=p,w={sx:s,sy:i,type:"node"})}for(let n=0;n<M.length;n++){const r=M[n];for(let s=n+1;s<M.length;s++){const n=M[s],i=R(r.apx,r.apy,r.bpx,r.bpy,n.apx,n.apy,n.bpx,n.bpy);if(!i)continue;const o=e-i.px,a=t-i.py,l=o*o+a*a;l>=b||l>=L||(L=l,E={sx:r.ax+i.t*(r.bx-r.ax),sy:r.ay+i.t*(r.by-r.ay),type:"intersection"})}}return(E&&w?L<v-1?E:w:E??w)??k??C})(n,s),re){const e=T(re.sx,re.sy);i.snap.style.left=`${e.x}px`,i.snap.style.top=`${e.y}px`,i.snap.style.display="",o=re.type,A.style.display="endpoint"===o?"":"none",E.style.display="intersection"===o?"":"none",L.style.display="line"===o?"":"none",M.style.display="midpoint"===o?"":"none",S.style.display="node"===o?"":"none"}else i.snap.style.display="none"},ae=e=>{if(!ee)return;ee=!1;const t=performance.now()-q;if(te||t>350)return;const n=e?.detail?.position;if(!n)return;const r=re?{x:re.sx,y:re.sy}:{x:n.x,y:n.y};ue(r)},le=()=>{const e=oe.current;if(!e||2!==e.picks.length)return;O();const t=e.picks[0],n=e.picks[1],r=$.current,s=B(t,n),i=J.current,o=null!==i&&Number.isFinite(i)&&("horizontal"===r||"vertical"===r);let a,c,d="",u=s;const p=Math.abs(n.x-t.x),m=Math.abs(n.y-t.y);if(o&&"horizontal"===r?(a=m,d=" ↕",u="vertical",c=F.current.echoLocked("ΔY",D(m),"ΔX",D(Math.abs(i)))):o&&"vertical"===r?(a=p,d=" ↔",u="horizontal",c=F.current.echoLocked("ΔX",D(p),"ΔY",D(Math.abs(i)))):"horizontal"===s?(a=p,d=" ↔",c=F.current.echoLinear(D(p),"ΔX")):"vertical"===s?(a=m,d=" ↕",c=F.current.echoLinear(D(m),"ΔY")):(a=Math.hypot(n.x-t.x,n.y-t.y),c=F.current.echoDistance(D(a),D(p),D(m))),!Number.isFinite(a))return X(null),U(null),void(e.label&&(e.label.style.opacity="0"));X(a),U(u),ne(c);const h=(()=>{const e=oe.current;if(e.label)return e.label;const t=document.createElement("div");return t.style.cssText="position:absolute;left:-9999px;top:-9999px;transform:translate(-50%,-50%);padding:2px 6px;font-size:var(--text-2xs);font-weight:600;font-family:system-ui,-apple-system,sans-serif;background:rgba(255,136,0,0.95);color:#fff;border-radius:4px;white-space:nowrap;box-shadow:0 1px 4px rgba(0,0,0,0.25);pointer-events:none;",l.appendChild(t),e.label=t,t})();h.style.opacity="1",h.textContent=`${D(a)}${d}`};Z.current=()=>{le(),G()};const ce=e=>{e.line.style.display="none",e.fixedLine&&(e.fixedLine.style.display="none"),e.fixedLabel&&(e.fixedLabel.style.display="none"),e.extLineA&&(e.extLineA.style.display="none"),e.extLineB&&(e.extLineB.style.display="none"),e.label&&(e.label.style.opacity="0"),X(null),U(null)},de=()=>{const e=oe.current;if(e){for(const t of e.markers)t.parentElement?.removeChild(t);e.markers=[],e.picks=[],e.rawSecondClick=null,e.refLine&&(e.refLine.style.display="none"),e.refLineV&&(e.refLineV.style.display="none"),ce(e)}};K.current=de,Q.current=()=>{const e=oe.current;if(!e||0===e.picks.length)return;e.picks.pop();const t=e.markers.pop();t?.parentElement?.removeChild(t),e.rawSecondClick=null,ce(e),G()};const ue=e=>{const t=oe.current;t&&(2===t.picks.length&&de(),0===t.picks.length?(t.picks.push({x:e.x,y:e.y}),t.markers.push(W())):(t.rawSecondClick={x:e.x,y:e.y},t.picks.push({x:e.x,y:e.y}),t.markers.push(W()),le()),G())},pe=e=>{"Escape"===e.key&&P(!1)};r.style.cursor="crosshair";try{e.Subscribe?.("pointerdown",se)}catch{}try{e.Subscribe?.("pointerup",ae)}catch{}try{e.Subscribe?.("viewChanged",G)}catch{}return r.addEventListener("pointermove",ie),window.addEventListener("keydown",pe),()=>{r.style.cursor="";try{e.Unsubscribe?.("pointerdown",se)}catch{}try{e.Unsubscribe?.("pointerup",ae)}catch{}try{e.Unsubscribe?.("viewChanged",G)}catch{}r.removeEventListener("pointermove",ie),window.removeEventListener("keydown",pe),Z.current=null,K.current=null,Q.current=null,s(),X(null),U(null)}},[H,a,u,ae]),b(()=>{Z.current?.()},[W,G]);const le=e=>{C(t=>t.map(t=>{if(t.visible===e)return t;try{o.current?.ShowLayer?.(t.name,e)}catch{}return{...t,visible:e}}))},ce=()=>{try{const e=o.current,t=e?.GetBounds?.(),n=e?.GetOrigin?.();t&&n?e.FitView(t.minX-n.x,t.maxX-n.x,t.minY-n.y,t.maxY-n.y):e?.FitView?.(),e?.Render?.()}catch{}};b(()=>{const e=e=>{if(e.defaultPrevented||e.metaKey||e.ctrlKey||e.altKey)return;if(1!==e.key.length||" "===e.key)return;const t=e.target;if(t&&("INPUT"===t.tagName||"TEXTAREA"===t.tagName||t.isContentEditable))return;const n=ie.current;if(!n)return;const r=n.closest("[data-modal-id]");r&&c()!==r.dataset.modalId||se.current?.focus()};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[]);const de=y(q),ue=y(H);b(()=>{de.current=q},[q]),b(()=>{ue.current=H},[H]),b(()=>h(()=>{const e=ie.current;if(!e)return!1;const t=e.closest("[data-modal-id]");return!(!t||c()!==t.dataset.modalId)&&(de.current?(ee(""),ne(F.current.cancelled),!0):!!ue.current&&(P(!1),ne(F.current.measureOff),!0))}),[]);const pe="px-2 py-1 rounded hover:bg-gray-200 transition-colors text-gray-600 flex items-center gap-1",[me,he]=x(T.typeToMeasure);/* @__PURE__ */
36
+ /* @__PURE__ */v("style",{children:"@keyframes preview-bar { 0% { transform: translateX(-110%); } 100% { transform: translateX(310%); } }"})]})}var L=["https://cdn.jsdelivr.net/gh/vagran/dxf-viewer-example-src@master/src/assets/fonts/Roboto-LightItalic.ttf","https://cdn.jsdelivr.net/gh/vagran/dxf-viewer-example-src@master/src/assets/fonts/NotoSansDisplay-SemiCondensedLightItalic.ttf","https://cdn.jsdelivr.net/gh/vagran/dxf-viewer-example-src@master/src/assets/fonts/NanumGothic-Regular.ttf"],M={l:"LINE",line:"LINE",pl:"PLINE",pline:"PLINE",ex:"EXTEND",extend:"EXTEND",tr:"TRIM",trim:"TRIM",e:"ERASE",erase:"ERASE",m:"MOVE",move:"MOVE",co:"COPY",cp:"COPY",copy:"COPY",o:"OFFSET",offset:"OFFSET",f:"FILLET",fillet:"FILLET",cha:"CHAMFER",chamfer:"CHAMFER",x:"EXPLODE",explode:"EXPLODE",mi:"MIRROR",mirror:"MIRROR",ro:"ROTATE",rotate:"ROTATE",sc:"SCALE",scale:"SCALE",s:"STRETCH",stretch:"STRETCH",ar:"ARRAY",array:"ARRAY",rec:"RECTANG",rectang:"RECTANG",rectangle:"RECTANG",c:"CIRCLE",circle:"CIRCLE",a:"ARC",arc:"ARC",el:"ELLIPSE",ellipse:"ELLIPSE",t:"MTEXT",mt:"MTEXT",mtext:"MTEXT",text:"TEXT",b:"BLOCK",block:"BLOCK",i:"INSERT",insert:"INSERT",ha:"HATCH",hatch:"HATCH"};function S({url:e,filename:t,onDownload:r,onEmail:s}){const i=y(null),o=y(null),[a,l]=g(!0),[u,m]=g(null),[N,C]=g([]),[A,E]=g(!1),[S,j]=g(!0),z=f(),T=z.drawing,R=z.preview,F=y(T);F.current=T;const[H,P]=g(!1),[W,I]=g("auto"),[O,X]=g(null),[B,U]=g(null),[G,V]=g(null),[Y,_]=g(""),$=y(W),J=y(G);b(()=>{$.current=W},[W]),b(()=>{J.current=G},[G]);const K=y(null),Z=y(null),Q=y(null),[q,ee]=g(""),[te,ne]=g(null),re=y(""),se=y(null),ie=y(null),oe=y(null);b(()=>{let t=!1,n=null;return l(!0),m(null),C([]),(async()=>{let r;try{r=(await(import("dxf-viewer"))).DxfViewer}catch(e){return void(t||(m(F.current.notInstalled),l(!1)))}if(!t&&i.current)try{if(await new Promise(e=>{const t=()=>{const n=i.current?.getBoundingClientRect();n&&n.width>4&&n.height>4?e():requestAnimationFrame(t)};t()}),t||!i.current)return;const s={autoResize:!0},a=r.DefaultOptions?.clearColor;"function"==typeof a?.clone&&(s.clearColor=a.clone().setHex(16777215)),n=new r(i.current,s),o.current=n;const c="undefined"!=typeof window&&window.__REACT_OS_SHELL_DXF_FONTS__||L;if(await n.Load({url:e,fonts:c,workerFactory:null}),t)return;try{const e=n.GetLayers?.()??[];Array.isArray(e)&&C(e.map(e=>({name:e.name,displayName:e.displayName??e.name,color:"number"==typeof e.color?e.color:void 0,visible:!0})))}catch{}const d=()=>{try{const e=i.current?.getBoundingClientRect();e&&e.width>0&&e.height>0&&n.SetSize?.(Math.round(e.width),Math.round(e.height));const t=n.GetBounds?.(),r=n.GetOrigin?.();t&&r&&n.FitView(t.minX-r.x,t.maxX-r.x,t.minY-r.y,t.maxY-r.y),n.Render?.()}catch(e){console.warn("[Preview] DXF refit failed",e)}};d(),requestAnimationFrame(d),l(!1)}catch(e){t||(m(e?.message||F.current.renderFailed),l(!1))}})(),()=>{t=!0;try{n?.Destroy?.()}catch{}o.current=null}},[e]),b(()=>{if(!S||a)return;const e=setTimeout(()=>j(!1),5e3);return()=>clearTimeout(e)},[S,a]);const ae=N.map(e=>e.visible?"1":"0").join("");b(()=>{const e=o.current;if(a||u||!e)return;const t=e.GetScene?.(),n=e.GetCamera?.(),r=e.GetCanvas?.();if(!(t&&n&&r&&i.current))return;const s=()=>{const e=oe.current;e&&(e.overlay&&e.overlay.parentElement&&e.overlay.parentElement.removeChild(e.overlay),oe.current=null)};if(!H)return s(),X(null),void U(null);const l=document.createElement("div");l.style.cssText="position:absolute;inset:0;pointer-events:none;z-index:5;",i.current.appendChild(l);const c=document.createElementNS("http://www.w3.org/2000/svg","svg");c.setAttribute("style","position:absolute;inset:0;width:100%;height:100%;pointer-events:none;");const d=document.createElementNS("http://www.w3.org/2000/svg","defs"),p=document.createElementNS("http://www.w3.org/2000/svg","marker");p.setAttribute("id","dxf-measure-arrow"),p.setAttribute("viewBox","0 0 10 10"),p.setAttribute("refX","9"),p.setAttribute("refY","5"),p.setAttribute("markerWidth","6"),p.setAttribute("markerHeight","6"),p.setAttribute("orient","auto-start-reverse");const m=document.createElementNS("http://www.w3.org/2000/svg","path");m.setAttribute("d","M 0 0 L 10 5 L 0 10 z"),m.setAttribute("fill","#ff8800"),p.appendChild(m),d.appendChild(p),c.appendChild(d),l.appendChild(c);const h=()=>{const e=document.createElementNS("http://www.w3.org/2000/svg","line");return e.setAttribute("stroke","#ff8800"),e.setAttribute("stroke-width","1"),e.setAttribute("stroke-dasharray","6,4"),e.setAttribute("opacity","0.55"),e.style.display="none",c.appendChild(e),e},f=h(),x=h(),y=document.createElementNS("http://www.w3.org/2000/svg","line");y.setAttribute("stroke","#ff8800"),y.setAttribute("stroke-width","1"),y.setAttribute("opacity","0.85"),y.style.display="none",c.appendChild(y);const g=document.createElementNS("http://www.w3.org/2000/svg","line");g.setAttribute("stroke","#ff8800"),g.setAttribute("stroke-width","1"),g.setAttribute("opacity","0.85"),g.style.display="none",c.appendChild(g);const b=document.createElementNS("http://www.w3.org/2000/svg","line");b.setAttribute("stroke","#ff8800"),b.setAttribute("stroke-width","1.5"),b.setAttribute("stroke-linecap","round"),b.style.display="none",c.appendChild(b);const w=document.createElementNS("http://www.w3.org/2000/svg","line");w.setAttribute("stroke","#ff8800"),w.setAttribute("stroke-width","1.5"),w.setAttribute("stroke-linecap","round"),w.style.display="none",c.appendChild(w);const v=document.createElement("div");v.style.cssText="position:absolute;transform:translate(-50%,-50%);pointer-events:none;display:none;";const k="http://www.w3.org/2000/svg",N=document.createElementNS(k,"svg");N.setAttribute("width","22"),N.setAttribute("height","22"),N.setAttribute("viewBox","0 0 22 22"),N.setAttribute("style","overflow:visible;display:block"),v.appendChild(N);const C=e=>{const t=document.createElementNS(k,"g");return e(t),t.style.display="none",N.appendChild(t),t},A=C(e=>{const t=document.createElementNS(k,"rect");t.setAttribute("x","4"),t.setAttribute("y","4"),t.setAttribute("width","14"),t.setAttribute("height","14"),t.setAttribute("fill","rgba(255,255,255,0.9)"),t.setAttribute("stroke","#ff8800"),t.setAttribute("stroke-width","1.8"),e.appendChild(t)}),E=C(e=>{const t=(e,t,n,r)=>{const s=document.createElementNS(k,"line");return s.setAttribute("x1",String(e)),s.setAttribute("y1",String(t)),s.setAttribute("x2",String(n)),s.setAttribute("y2",String(r)),s.setAttribute("stroke","#ff8800"),s.setAttribute("stroke-width","2.2"),s.setAttribute("stroke-linecap","round"),s};e.appendChild(t(4,4,18,18)),e.appendChild(t(18,4,4,18))}),L=C(e=>{const t=document.createElementNS(k,"polygon");t.setAttribute("points","4,4 18,4 4,18 18,18"),t.setAttribute("fill","rgba(255,255,255,0.9)"),t.setAttribute("stroke","#ff8800"),t.setAttribute("stroke-width","1.8"),t.setAttribute("stroke-linejoin","round"),e.appendChild(t)}),M=C(e=>{const t=document.createElementNS(k,"polygon");t.setAttribute("points","11,3 19,18 3,18"),t.setAttribute("fill","rgba(255,255,255,0.9)"),t.setAttribute("stroke","#ff8800"),t.setAttribute("stroke-width","1.8"),t.setAttribute("stroke-linejoin","round"),e.appendChild(t)}),S=C(e=>{const t=document.createElementNS(k,"circle");t.setAttribute("cx","11"),t.setAttribute("cy","11"),t.setAttribute("r","7"),t.setAttribute("fill","rgba(255,255,255,0.9)"),t.setAttribute("stroke","#ff8800"),t.setAttribute("stroke-width","1.8"),e.appendChild(t);const n=(e,t,n,r)=>{const s=document.createElementNS(k,"line");return s.setAttribute("x1",String(e)),s.setAttribute("y1",String(t)),s.setAttribute("x2",String(n)),s.setAttribute("y2",String(r)),s.setAttribute("stroke","#ff8800"),s.setAttribute("stroke-width","1.6"),s.setAttribute("stroke-linecap","round"),s};e.appendChild(n(6.5,6.5,15.5,15.5)),e.appendChild(n(15.5,6.5,6.5,15.5))});l.appendChild(v),oe.current={picks:[],rawSecondClick:null,overlay:l,svg:c,line:b,fixedLine:w,fixedLabel:null,refLine:f,refLineV:x,extLineA:y,extLineB:g,markers:[],label:null,snap:v,segs:null,nodes:null};const j=n?.position?.constructor??t?.position?.constructor??null;let z=!1;const T=(e,t)=>{if(!j)return{x:0,y:0};const s=new j(e,t,0).project(n),i=r.clientWidth,o=r.clientHeight;return{x:(s.x+1)/2*i,y:(1-s.y)/2*o}};(()=>{try{const e=oe.current;if(!e)return;const n=[],r=[];let s=!1;const i=e=>{const t=e?.attributes?.instanceTransform0,n=e?.attributes?.instanceTransform1;if(t&&n){const e=[],r=Math.min(t.count,n.count);for(let s=0;s<r;s++)e.push([t.getX(s),t.getY(s),t.getZ(s),n.getX(s),n.getY(s),n.getZ(s)]);return e}const r=e?.attributes?.instanceTransform;if(r){const e=[];for(let t=0;t<r.count;t++)e.push([1,0,r.getX(t),0,1,r.getY(t)]);return e}return[[1,0,0,0,1,0]]},o=e=>{const t=!!e?.isLineSegments;if(!t&&!!!e?.isPoints)return;const o=e.geometry,a=o?.attributes?.position;if(!a)return;const l=i(o);if(t){const e=o.index,t=Math.floor((e?e.count:a.count)/2);for(let r=0;r<t;r++){const t=e?e.getX(2*r):2*r,i=e?e.getX(2*r+1):2*r+1,o=a.getX(t),c=a.getY(t),d=a.getX(i),u=a.getY(i);if(Number.isFinite(o+c+d+u))for(const e of l){if(n.length>=16e5)return void(s=!0);const t=e[0]*o+e[1]*c+e[2],r=e[3]*o+e[4]*c+e[5],i=e[0]*d+e[1]*u+e[2],a=e[3]*d+e[4]*u+e[5];t===i&&r===a||n.push(t,r,i,a)}}}else for(let e=0;e<a.count;e++){const t=a.getX(e),n=a.getY(e);if(Number.isFinite(t+n))for(const e of l)r.push(e[0]*t+e[1]*n+e[2],e[3]*t+e[4]*n+e[5])}};"function"==typeof t.traverseVisible?t.traverseVisible(o):t.traverse(o),e.segs=new Float64Array(n),e.nodes=new Float64Array(r),s&&console.warn("[Preview] DXF snap cache truncated at 400000 segments — snapping may miss some geometry."),z=!0}catch{}})();const R=(e,t,n,r,s,i,o,a)=>{const l=(n-e)*(a-i)-(r-t)*(o-s);if(Math.abs(l)<1e-9)return null;const c=((s-e)*(a-i)-(i-t)*(o-s))/l,d=((s-e)*(r-t)-(i-t)*(n-e))/l,u=1e-4;return c<-u||c>1+u||d<-u||d>1+u?null:{px:e+c*(n-e),py:t+c*(r-t),t:c}},W=()=>{const e=document.createElement("div");return e.style.cssText="position:absolute;width:10px;height:10px;border-radius:50%;background:#ff8800;border:2px solid #fff;box-shadow:0 0 0 1px rgba(0,0,0,0.25);transform:translate(-50%,-50%);pointer-events:none;",l.appendChild(e),e},I=(e,t,n)=>{const r=T(t,n);e.style.left=`${r.x}px`,e.style.top=`${r.y}px`},O=()=>{const e=oe.current;if(!e||!e.rawSecondClick||e.picks.length<2)return;const t=e.picks[0],n=e.rawSecondClick,r=J.current,s=$.current;if(null===r||!Number.isFinite(r)||"horizontal"!==s&&"vertical"!==s)e.picks[1]={x:n.x,y:n.y};else if("horizontal"===s){const s=n.x>=t.x?1:-1;e.picks[1]={x:t.x+s*Math.abs(r),y:n.y}}else{const s=n.y>=t.y?1:-1;e.picks[1]={x:n.x,y:t.y+s*Math.abs(r)}}},B=(e,t)=>{const n=$.current;return"auto"!==n?n:e&&t?Math.abs(t.x-e.x)>=Math.abs(t.y-e.y)?"horizontal":"vertical":"horizontal"},G=()=>{const e=oe.current;if(!e)return;O();const t=$.current,n=J.current,s=null!==n&&Number.isFinite(n)&&("horizontal"===t||"vertical"===t);e.markers[0]&&I(e.markers[0],e.picks[0].x,e.picks[0].y),e.markers[1]&&I(e.markers[1],e.picks[1].x,e.picks[1].y);const i=(t,n,s)=>{if(!t)return;if(!s||e.picks.length<1)return void(t.style.display="none");const i=e.picks[0],o=r.clientWidth,a=r.clientHeight,l=4*Math.hypot(o,a),c=T(i.x,i.y),d=T(i.x+n.dx,i.y+n.dy),u=l/(Math.hypot(d.x-c.x,d.y-c.y)||1),p=T(i.x-n.dx*u,i.y-n.dy*u),m=T(i.x+n.dx*u,i.y+n.dy*u);t.setAttribute("x1",String(p.x)),t.setAttribute("y1",String(p.y)),t.setAttribute("x2",String(m.x)),t.setAttribute("y2",String(m.y)),t.style.display=""};let o="horizontal"===t,a="vertical"===t;if("auto"===t)if(e.picks.length>=2){const t=B(e.picks[0],e.picks[1]);o="horizontal"===t,a="vertical"===t}else o=!0,a=!0;if(i(e.refLine,{dx:1,dy:0},o),i(e.refLineV,{dx:0,dy:1},a),2===e.picks.length){const t=e.picks[0],i=e.picks[1],o=B(t,i),a=(()=>{const e=oe.current,t=e.picks[0],n=e.picks[1],r=B(t,n),s=$.current,i=J.current;return null!==i&&Number.isFinite(i)&&"horizontal"===s?{from:{x:n.x,y:t.y},to:{x:n.x,y:n.y}}:null!==i&&Number.isFinite(i)&&"vertical"===s?{from:{x:t.x,y:n.y},to:{x:n.x,y:n.y}}:"horizontal"===r?{from:t,to:{x:n.x,y:t.y}}:"vertical"===r?{from:t,to:{x:t.x,y:n.y}}:{from:t,to:n}})(),l=T(a.from.x,a.from.y),c=T(a.to.x,a.to.y);e.line.setAttribute("x1",String(l.x)),e.line.setAttribute("y1",String(l.y)),e.line.setAttribute("x2",String(c.x)),e.line.setAttribute("y2",String(c.y)),e.line.setAttribute("marker-start","url(#dxf-measure-arrow)"),e.line.setAttribute("marker-end","url(#dxf-measure-arrow)");const d=Math.hypot(c.x-l.x,c.y-l.y);if(e.line.style.display=d>.5?"":"none",s&&e.fixedLine){const s="horizontal"===o?{x:i.x,y:t.y}:{x:t.x,y:i.y},a=T(t.x,t.y),l=T(s.x,s.y);e.fixedLine.setAttribute("x1",String(a.x)),e.fixedLine.setAttribute("y1",String(a.y)),e.fixedLine.setAttribute("x2",String(l.x)),e.fixedLine.setAttribute("y2",String(l.y)),e.fixedLine.setAttribute("marker-start","url(#dxf-measure-arrow)"),e.fixedLine.setAttribute("marker-end","url(#dxf-measure-arrow)"),e.fixedLine.style.display="";const c=V();c.textContent=D(Math.abs(n));const d=(a.x+l.x)/2,u=(a.y+l.y)/2;c.style.left=`${d}px`,c.style.top=`${u}px`;const p=r.clientWidth,m=r.clientHeight;c.style.display=d<0||u<0||d>p||u>m?"none":""}else e.fixedLine&&(e.fixedLine.style.display="none"),e.fixedLabel&&(e.fixedLabel.style.display="none");const u=e.extLineA,p=e.extLineB;if(!s&&"horizontal"===o&&Math.abs(i.y-t.y)>1e-9){const e=T(i.x,t.y),n=T(i.x,i.y);p.setAttribute("x1",String(e.x)),p.setAttribute("y1",String(e.y)),p.setAttribute("x2",String(n.x)),p.setAttribute("y2",String(n.y)),p.style.display="",u.style.display="none"}else if(!s&&"vertical"===o&&Math.abs(i.x-t.x)>1e-9){const e=T(t.x,i.y),n=T(i.x,i.y);p.setAttribute("x1",String(e.x)),p.setAttribute("y1",String(e.y)),p.setAttribute("x2",String(n.x)),p.setAttribute("y2",String(n.y)),p.style.display="",u.style.display="none"}else u.style.display="none",p.style.display="none";if(e.label){const t=(l.x+c.x)/2,n=(l.y+c.y)/2;e.label.style.left=`${t}px`,e.label.style.top=`${n}px`;const s=r.clientWidth,i=r.clientHeight;e.label.style.display=t<0||n<0||t>s||n>i?"none":"",d<=.5&&(e.label.style.display="none")}}else e.line.style.display="none",e.fixedLine&&(e.fixedLine.style.display="none"),e.fixedLabel&&(e.fixedLabel.style.display="none"),e.extLineA&&(e.extLineA.style.display="none"),e.extLineB&&(e.extLineB.style.display="none")},V=()=>{const e=oe.current;if(e.fixedLabel)return e.fixedLabel;const t=document.createElement("div");return t.style.cssText="position:absolute;left:-9999px;top:-9999px;transform:translate(-50%,-50%);padding:2px 6px;font-size:var(--text-2xs);font-weight:600;font-family:system-ui,-apple-system,sans-serif;background:rgba(255,136,0,0.75);color:#fff;border-radius:4px;white-space:nowrap;box-shadow:0 1px 4px rgba(0,0,0,0.25);pointer-events:none;",l.appendChild(t),e.fixedLabel=t,t};let Y=0,_=0,q=0,ee=!1,te=!1,re=null;const se=e=>{const t=e?.detail;t&&0===t.domEvent?.button&&(Y=t.canvasCoord.x,_=t.canvasCoord.y,q=performance.now(),te=!1,ee=!0)},ie=e=>{const t=r.getBoundingClientRect(),n=e.clientX-t.left,s=e.clientY-t.top;ee&&(n-Y)**2+(s-_)**2>16&&(te=!0);const i=oe.current;var o;if(i&&i.snap)if(ee&&te)i.snap.style.display="none";else if(re=((e,t)=>{const n=oe.current;if(!n||!z||!n.segs)return null;const r=T(0,0),s=T(1,0),i=T(0,1),o=s.x-r.x,a=s.y-r.y,l=i.x-r.x,c=i.y-r.y,d=o*c-l*a;if(!d)return null;const u=((e-r.x)*c-(t-r.y)*l)/d,p=((t-r.y)*o-(e-r.x)*a)/d,m=18/(Math.hypot(o,a)||1),h=18/(Math.hypot(l,c)||1),f=u-m,x=u+m,y=p-h,g=p+h,b=324;let w=null,v=b,k=null,N=b,C=null,A=b,E=null,L=b;const M=[],S=n.segs;for(let n=0;n<S.length;n+=4){const s=S[n],i=S[n+1],d=S[n+2],u=S[n+3];if(s<f&&d<f||s>x&&d>x||i<y&&u<y||i>g&&u>g)continue;const p=r.x+o*s+l*i,m=r.y+a*s+c*i,h=r.x+o*d+l*u,E=r.y+a*d+c*u;let L=!1,j=e-p,z=t-m,T=j*j+z*z;T<b&&(L=!0,T<v&&(v=T,w={sx:s,sy:i,type:"endpoint"})),j=e-h,z=t-E,T=j*j+z*z,T<b&&(L=!0,T<v&&(v=T,w={sx:d,sy:u,type:"endpoint"})),j=e-(p+h)/2,z=t-(m+E)/2,T=j*j+z*z,T<b&&(L=!0,T<N&&(N=T,k={sx:(s+d)/2,sy:(i+u)/2,type:"midpoint"}));const R=h-p,D=E-m,F=R*R+D*D;if(F>0){const n=((e-p)*R+(t-m)*D)/F;n>0&&n<1&&(j=e-(p+n*R),z=t-(m+n*D),T=j*j+z*z,T<b&&(L=!0,T<A&&(A=T,C={sx:s+n*(d-s),sy:i+n*(u-i),type:"line"})))}L&&M.push({ax:s,ay:i,bx:d,by:u,apx:p,apy:m,bpx:h,bpy:E})}const j=n.nodes;if(j)for(let n=0;n<j.length;n+=2){const s=j[n],i=j[n+1];if(s<f||s>x||i<y||i>g)continue;const d=e-(r.x+o*s+l*i),u=t-(r.y+a*s+c*i),p=d*d+u*u;p<v&&(v=p,w={sx:s,sy:i,type:"node"})}for(let n=0;n<M.length;n++){const r=M[n];for(let s=n+1;s<M.length;s++){const n=M[s],i=R(r.apx,r.apy,r.bpx,r.bpy,n.apx,n.apy,n.bpx,n.bpy);if(!i)continue;const o=e-i.px,a=t-i.py,l=o*o+a*a;l>=b||l>=L||(L=l,E={sx:r.ax+i.t*(r.bx-r.ax),sy:r.ay+i.t*(r.by-r.ay),type:"intersection"})}}return(E&&w?L<v-1?E:w:E??w)??k??C})(n,s),re){const e=T(re.sx,re.sy);i.snap.style.left=`${e.x}px`,i.snap.style.top=`${e.y}px`,i.snap.style.display="",o=re.type,A.style.display="endpoint"===o?"":"none",E.style.display="intersection"===o?"":"none",L.style.display="line"===o?"":"none",M.style.display="midpoint"===o?"":"none",S.style.display="node"===o?"":"none"}else i.snap.style.display="none"},ae=e=>{if(!ee)return;ee=!1;const t=performance.now()-q;if(te||t>350)return;const n=e?.detail?.position;if(!n)return;const r=re?{x:re.sx,y:re.sy}:{x:n.x,y:n.y};ue(r)},le=()=>{const e=oe.current;if(!e||2!==e.picks.length)return;O();const t=e.picks[0],n=e.picks[1],r=$.current,s=B(t,n),i=J.current,o=null!==i&&Number.isFinite(i)&&("horizontal"===r||"vertical"===r);let a,c,d="",u=s;const p=Math.abs(n.x-t.x),m=Math.abs(n.y-t.y);if(o&&"horizontal"===r?(a=m,d=" ↕",u="vertical",c=F.current.echoLocked("ΔY",D(m),"ΔX",D(Math.abs(i)))):o&&"vertical"===r?(a=p,d=" ↔",u="horizontal",c=F.current.echoLocked("ΔX",D(p),"ΔY",D(Math.abs(i)))):"horizontal"===s?(a=p,d=" ↔",c=F.current.echoLinear(D(p),"ΔX")):"vertical"===s?(a=m,d=" ↕",c=F.current.echoLinear(D(m),"ΔY")):(a=Math.hypot(n.x-t.x,n.y-t.y),c=F.current.echoDistance(D(a),D(p),D(m))),!Number.isFinite(a))return X(null),U(null),void(e.label&&(e.label.style.opacity="0"));X(a),U(u),ne(c);const h=(()=>{const e=oe.current;if(e.label)return e.label;const t=document.createElement("div");return t.style.cssText="position:absolute;left:-9999px;top:-9999px;transform:translate(-50%,-50%);padding:2px 6px;font-size:var(--text-2xs);font-weight:600;font-family:system-ui,-apple-system,sans-serif;background:rgba(255,136,0,0.95);color:#fff;border-radius:4px;white-space:nowrap;box-shadow:0 1px 4px rgba(0,0,0,0.25);pointer-events:none;",l.appendChild(t),e.label=t,t})();h.style.opacity="1",h.textContent=`${D(a)}${d}`};K.current=()=>{le(),G()};const ce=e=>{e.line.style.display="none",e.fixedLine&&(e.fixedLine.style.display="none"),e.fixedLabel&&(e.fixedLabel.style.display="none"),e.extLineA&&(e.extLineA.style.display="none"),e.extLineB&&(e.extLineB.style.display="none"),e.label&&(e.label.style.opacity="0"),X(null),U(null)},de=()=>{const e=oe.current;if(e){for(const t of e.markers)t.parentElement?.removeChild(t);e.markers=[],e.picks=[],e.rawSecondClick=null,e.refLine&&(e.refLine.style.display="none"),e.refLineV&&(e.refLineV.style.display="none"),ce(e)}};Z.current=de,Q.current=()=>{const e=oe.current;if(!e||0===e.picks.length)return;e.picks.pop();const t=e.markers.pop();t?.parentElement?.removeChild(t),e.rawSecondClick=null,ce(e),G()};const ue=e=>{const t=oe.current;t&&(2===t.picks.length&&de(),0===t.picks.length?(t.picks.push({x:e.x,y:e.y}),t.markers.push(W())):(t.rawSecondClick={x:e.x,y:e.y},t.picks.push({x:e.x,y:e.y}),t.markers.push(W()),le()),G())},pe=e=>{"Escape"===e.key&&P(!1)};r.style.cursor="crosshair";try{e.Subscribe?.("pointerdown",se)}catch{}try{e.Subscribe?.("pointerup",ae)}catch{}try{e.Subscribe?.("viewChanged",G)}catch{}return r.addEventListener("pointermove",ie),window.addEventListener("keydown",pe),()=>{r.style.cursor="";try{e.Unsubscribe?.("pointerdown",se)}catch{}try{e.Unsubscribe?.("pointerup",ae)}catch{}try{e.Unsubscribe?.("viewChanged",G)}catch{}r.removeEventListener("pointermove",ie),window.removeEventListener("keydown",pe),K.current=null,Z.current=null,Q.current=null,s(),X(null),U(null)}},[H,a,u,ae]),b(()=>{K.current?.()},[W,G]);const le=e=>{C(t=>t.map(t=>{if(t.visible===e)return t;try{o.current?.ShowLayer?.(t.name,e)}catch{}return{...t,visible:e}}))},ce=()=>{try{const e=o.current,t=e?.GetBounds?.(),n=e?.GetOrigin?.();t&&n?e.FitView(t.minX-n.x,t.maxX-n.x,t.minY-n.y,t.maxY-n.y):e?.FitView?.(),e?.Render?.()}catch{}};b(()=>{const e=e=>{if(e.defaultPrevented||e.metaKey||e.ctrlKey||e.altKey)return;if(1!==e.key.length||" "===e.key)return;const t=e.target;if(t&&("INPUT"===t.tagName||"TEXTAREA"===t.tagName||t.isContentEditable))return;const n=ie.current;if(!n)return;const r=n.closest("[data-modal-id]");r&&c()!==r.dataset.modalId||se.current?.focus()};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[]);const de=y(q),ue=y(H);b(()=>{de.current=q},[q]),b(()=>{ue.current=H},[H]),b(()=>h(()=>{const e=ie.current;if(!e)return!1;const t=e.closest("[data-modal-id]");return!(!t||c()!==t.dataset.modalId)&&(de.current?(ee(""),ne(F.current.cancelled),!0):!!ue.current&&(P(!1),ne(F.current.measureOff),!0))}),[]);const pe="px-2 py-1 rounded hover:bg-gray-200 transition-colors text-gray-600 flex items-center gap-1",[me,he]=x(T.typeToMeasure);/* @__PURE__ */
37
37
  return w("div",{ref:ie,className:"flex flex-col h-full",children:[
38
38
  /* @__PURE__ */w(n,{children:[
39
39
  /* @__PURE__ */w("button",{onClick:()=>E(e=>!e),className:pe+(A?" bg-gray-200":""),title:T.layersHint,disabled:0===N.length,children:[
@@ -48,7 +48,7 @@ return w("div",{ref:ie,className:"flex flex-col h-full",children:[
48
48
  /* @__PURE__ */v("button",{onClick:()=>I("horizontal"),className:"px-2 transition-colors "+("horizontal"===W?"bg-orange-500 text-white":"bg-white text-gray-600 hover:bg-gray-50"),title:T.horizontalHint,children:"H"}),
49
49
  /* @__PURE__ */v("button",{onClick:()=>I("vertical"),className:"px-2 transition-colors "+("vertical"===W?"bg-orange-500 text-white":"bg-white text-gray-600 hover:bg-gray-50"),title:T.verticalHint,children:"V"}),
50
50
  /* @__PURE__ */v("button",{onClick:()=>I("point"),className:"px-2 transition-colors "+("point"===W?"bg-orange-500 text-white":"bg-white text-gray-600 hover:bg-gray-50"),title:T.pointHint,children:T.point})]}),("horizontal"===W||"vertical"===W)&&/* @__PURE__ */w("div",{className:"flex items-center gap-1",children:[
51
- /* @__PURE__ */v("input",{type:"number",inputMode:"decimal",step:"any",value:V,placeholder:"horizontal"===W?T.fixX:T.fixY,onChange:e=>{const t=e.target.value;if(_(t),""===t.trim())Y(null);else{const e=parseFloat(t);Y(Number.isFinite(e)&&0!==e?e:null)}},className:"h-7 w-20 px-2 text-2xs font-mono rounded border border-line bg-surface text-ink focus:outline-none focus:border-orange-400",title:T.fixHint}),null!==G&&/* @__PURE__ */v("button",{onClick:()=>{Y(null),_("")},className:"text-ink-faintest hover:text-gray-600 text-2xs px-1",title:T.clearFixed,children:"×"})]})]}),H&&null!==O&&/* @__PURE__ */w("div",{className:"px-2 py-1 text-2xs font-mono font-semibold text-orange-600 bg-orange-50 border border-orange-200 rounded whitespace-nowrap",title:"horizontal"===B?T.horizontalDistance("auto"===W):"vertical"===B?T.verticalDistance("auto"===W):T.straightDistance,children:[D(O),"horizontal"===B?" ↔":"vertical"===B?" ↕":""]}),
51
+ /* @__PURE__ */v("input",{type:"number",inputMode:"decimal",step:"any",value:Y,placeholder:"horizontal"===W?T.fixX:T.fixY,onChange:e=>{const t=e.target.value;if(_(t),""===t.trim())V(null);else{const e=parseFloat(t);V(Number.isFinite(e)&&0!==e?e:null)}},className:"h-7 w-20 px-2 text-2xs font-mono rounded border border-line bg-surface text-ink focus:outline-none focus:border-orange-400",title:T.fixHint}),null!==G&&/* @__PURE__ */v("button",{onClick:()=>{V(null),_("")},className:"text-ink-faintest hover:text-gray-600 text-2xs px-1",title:T.clearFixed,children:"×"})]})]}),H&&null!==O&&/* @__PURE__ */w("div",{className:"px-2 py-1 text-2xs font-mono font-semibold text-orange-600 bg-orange-50 border border-orange-200 rounded whitespace-nowrap",title:"horizontal"===B?T.horizontalDistance("auto"===W):"vertical"===B?T.verticalDistance("auto"===W):T.straightDistance,children:[D(O),"horizontal"===B?" ↔":"vertical"===B?" ↕":""]}),
52
52
  /* @__PURE__ */v("button",{onClick:ce,className:pe,title:T.fitHint,children:T.fit}),
53
53
  /* @__PURE__ */w("button",{onClick:r??(()=>{const n=document.createElement("a");n.href=e,n.download=t,n.click()}),className:pe,children:[
54
54
  /* @__PURE__ */v(d,{name:"download",className:"h-3.5 w-3.5",strokeWidth:1.5}),R.download]}),s&&/* @__PURE__ */w("button",{onClick:s,className:pe,children:[
@@ -79,7 +79,7 @@ return w("div",{ref:ie,className:"flex flex-col h-full",children:[
79
79
  /* @__PURE__ */w("div",{className:"shrink-0 border-t border-gray-200 bg-gray-50",children:[te&&/* @__PURE__ */v("div",{className:"px-3 pt-1 text-2xs font-mono text-ink-faint truncate",title:te,children:te}),
80
80
  /* @__PURE__ */w("div",{className:"flex items-center gap-2 px-3 h-7",children:[
81
81
  /* @__PURE__ */v("span",{className:"text-2xs font-mono font-semibold text-ink-faintest select-none",children:">"}),
82
- /* @__PURE__ */v("input",{ref:se,value:q,onChange:e=>ee(e.target.value),onKeyDown:e=>{"Enter"===e.key||" "===e.key?(e.preventDefault(),(e=>{const t=e.trim()||re.current;if(ee(""),!t)return;const n=t.toLowerCase().split(/\s+/)[0],r=()=>{re.current=t},s=(e,t)=>{P(!0),I(e),K.current?.(),ne(t),r()};if(/^-?(\d+\.?\d*|\.\d+)$/.test(n))if(!H||"horizontal"!==W&&"vertical"!==W)ne(T.fixedNeedsAxis);else{const e=parseFloat(n);e?(_(n),Y(e),ne(T.axisLocked("horizontal"===W?"ΔX":"ΔY",D(Math.abs(e))))):(_(""),Y(null),ne(T.fixedCleared))}else switch(n){case"di":case"dist":case"mea":case"measuregeom":s("point",T.echoDist);break;case"dim":case"dli":case"dimlin":case"dimlinear":s("auto",T.echoDimLinear);break;case"h":case"hor":case"horizontal":P(!0),I("horizontal"),ne(T.echoHorizontal),r();break;case"v":case"ver":case"vertical":P(!0),I("vertical"),ne(T.echoVertical),r();break;case"au":case"auto":P(!0),I("auto"),ne(T.echoAuto),r();break;case"measure":P(!H),ne(H?T.measureOff:T.measureOn),r();break;case"u":case"undo":Q.current?.(),ne(T.pickRemoved),r();break;case"z":case"ze":case"zoom":case"fit":case"zoomextents":ce(),ne(T.zoomExtents),r();break;case"la":case"layer":case"layers":E(e=>!e),ne(T.layersToggled),r();break;case"off":case"clear":Y(null),_(""),K.current?.(),ne(T.measurementCleared),r();break;case"?":case"help":ne(T.commandHelp);break;default:{const e=M[n];ne(e?T.readOnly(e):T.unknownCommand(n.toUpperCase()))}}})(q)):"Escape"===e.key&&(q?(e.stopPropagation(),ee(""),ne(T.cancelled)):e.target.blur())},placeholder:T.commandPlaceholder,spellCheck:!1,autoComplete:"off",className:"flex-1 min-w-0 bg-transparent text-2xs font-mono text-ink focus:outline-none placeholder:text-gray-300"})]})]})]})}var j="https://cdn.jsdelivr.net/npm/online-3d-viewer@0.18.0/libs/";function z(e,t,n=0){return{id:e.GetId?.()??0,name:e.GetName?.()||(0===n?t.root:t.node),isMeshNode:!!e.IsMeshNode?.(),meshIndices:e.GetMeshIndices?.()??[],children:(e.GetChildNodes?.()??[]).map(e=>z(e,t,n+1))}}function T(e,t){t.add(e.id);for(const n of e.children)T(n,t)}function R(e,t){const n=/^#?([0-9a-f]{6})$/i.exec(t),r=n?parseInt(n[1],16):0;return new e.RGBColor(r>>16&255,r>>8&255,255&r)}function D(e){return e>=1e3?`${(e/1e3).toFixed(3)} m`:`${e.toFixed(2)} mm`}function F({url:e,filename:t,onDownload:r,onEmail:s}){const i=y(null),o=y(null),a=y(null),[l,c]=g(!0),[u,m]=g(null),[h,x]=g(!0),k=f(),C=k.model,A=k.preview,E=y(C);E.current=C;const[L,M]=g(null),[S,F]=g({}),[H,P]=g(/* @__PURE__ */new Set),[W,I]=g("#f5f6f8"),[O,X]=g(!0),[B,U]=g("#000000"),[G,Y]=g(1),[V,_]=g(!1),[$,J]=g(!1),[Z,K]=g(!1),[Q,q]=g(!1),[ee,te]=g("x"),[ne,re]=g(!1),[se,ie]=g(.5),[oe,ae]=g(0),[le,ce]=g(!1),[de,ue]=g("point"),[pe,me]=g(null),he=y(null),fe=y(null);b(()=>{let n=!1,r=null,s=null;return c(!0),m(null),M(null),F({}),P(/* @__PURE__ */new Set),(async()=>{let l;try{l=await(import("online-3d-viewer"))}catch{return void(n||(m(E.current.notInstalled),c(!1)))}if(a.current=l,!n&&i.current&&(await new Promise(e=>{const t=()=>{const n=i.current?.getBoundingClientRect();n&&n.width>4&&n.height>4?e():requestAnimationFrame(t)};t()}),!n&&i.current))try{const a="undefined"!=typeof window&&window.__REACT_OS_SHELL_O3DV_LIBS__||j;l.SetExternalLibLocation?.(a),function(){if(N)return;if("undefined"==typeof HTMLCanvasElement)return;N=!0;const e=HTMLCanvasElement.prototype.getContext;HTMLCanvasElement.prototype.getContext=function(t,n){return"webgl"!==t&&"webgl2"!==t&&"experimental-webgl"!==t||(n={...n||{},stencil:!0}),e.call(this,t,n)},console.info("[Preview] section: canvas getContext patched (force stencil=true)")}(),r=new l.EmbeddedViewer(i.current,{backgroundColor:new l.RGBAColor(245,246,248,255),defaultColor:new l.RGBColor(180,188,200),edgeSettings:new l.EdgeSettings(!0,new l.RGBColor(0,0,0),1),onModelLoaded:()=>{if(!n){try{const e=r.GetModel?.(),t=e?.GetRootNode?.();if(t){const e=z(t,{root:E.current.rootNode,node:E.current.node});M(e);const n={[e.id]:!0};for(const t of e.children)n[t.id]=!0;F(n)}}catch(e){console.warn("[Preview] mesh tree extraction failed",e)}c(!1)}},onModelLoadFailed:()=>{n||(m(E.current.loadFailed),c(!1))}}),o.current=r;const d=new l.InputFile(t,l.FileSource.Url,e);r.LoadModelFromInputFiles([d]),i.current&&"undefined"!=typeof ResizeObserver&&(s=new ResizeObserver(()=>{try{const e=o.current;e?.Resize?e.Resize():e?.viewer?.Resize&&e.viewer.Resize(),e?.viewer?.Render?.()}catch{}}),s.observe(i.current))}catch(e){n||(m(e?.message||E.current.loadFailed),c(!1))}})(),()=>{n=!0;try{s?.disconnect()}catch{}try{r?.Destroy?.()}catch{}o.current=null}},[e,t]),b(()=>{const e=o.current;if(e?.viewer)try{const t=e=>{if(e.userData?.__sectionHelper)return;const t=e.userData?.originalMeshInstance??e.userData,n=t?.id?.nodeId??t?.nodeId;"number"==typeof n&&(e.visible=!H.has(n))};e.viewer.mainModel?.EnumerateMeshesAndLines?.(t),e.viewer.mainModel?.EnumerateEdges?.(t),e.viewer.Render?.()}catch(e){console.warn("[Preview] visibility update failed",e)}},[H,L]),b(()=>{const e=a.current,t=o.current;if(e&&t?.viewer)try{t.viewer.SetEdgeSettings(new e.EdgeSettings(O,R(e,B),G));const n=fe.current;if(n){const e=[];t.viewer.mainModel?.EnumerateEdges?.(t=>{t.userData?.__sectionHelper&&e.push(t)});for(const t of e)t.parent?.remove(t),t.geometry?.dispose?.(),t.material?.dispose?.();const r=n.plane,s=e=>{e&&!n.materialState.has(e)&&(n.materialState.set(e,{clippingPlanes:e.clippingPlanes,clipShadows:e.clipShadows}),e.clippingPlanes=[r],e.clipShadows=!0,e.needsUpdate=!0)};t.viewer.mainModel?.EnumerateEdges?.(e=>{const t=e.material;if(Array.isArray(t))for(const e of t)s(e);else s(t)})}t.viewer.Render?.()}catch{}},[O,B,G]),b(()=>{const e=a.current,t=o.current;if(e&&t?.viewer)try{const n=R(e,W);t.viewer.SetBackgroundColor(new e.RGBAColor(n.r,n.g,n.b,255)),t.viewer.Render?.()}catch{}},[W]),b(()=>{const e=o.current;if(!e?.viewer||l)return;const t=e.viewer.renderer,n=e.viewer.scene;if(!t||!n)return;if(fe.current){const e=fe.current;for(const[t,n]of e.materialState.entries())t.clippingPlanes=n.clippingPlanes,t.clipShadows=n.clipShadows,t.needsUpdate=!0;for(const t of e.helpers)t.parent?.remove(t),t.material?.dispose?.();e.capMesh&&(n.remove(e.capMesh),e.capMesh.geometry?.dispose?.(),e.capMesh.material?.dispose?.()),fe.current=null}if(!Q)return t.localClippingEnabled=!1,void e.viewer.Render?.();const r=e.viewer.GetBoundingBox?.(()=>!0);if(!r)return;const s=[];if(e.viewer.mainModel?.EnumerateMeshes?.(e=>{e.userData?.__sectionHelper||s.push(e)}),!s.length)return t.localClippingEnabled=!1,void e.viewer.Render?.();const i=s[0],a=i.constructor,c=i.material?.constructor,d=i.geometry?.constructor,u=i.geometry?.attributes?.position?.constructor;a&&c&&d&&u||console.warn("[Preview] section: missing THREE constructors, falling back to no cap");const p=7681;let m=!0;try{const e=t.getContext?.(),n=e?.getContextAttributes?.();m=!1!==n?.stencil,t.autoClearStencil=!0,console.info("[Preview] section: stencil buffer =",m,"targets =",s.length)}catch{}t.localClippingEnabled=!0;const h={normal:{x:0,y:0,z:-1},constant:0,clone:function e(){const t={normal:{x:this.normal.x,y:this.normal.y,z:this.normal.z},constant:this.constant};return t.clone=e,t}},f=[],x=/* @__PURE__ */new Map,y=e=>{e&&!x.has(e)&&(x.set(e,{clippingPlanes:e.clippingPlanes,clipShadows:e.clipShadows}),e.clippingPlanes=[h],e.clipShadows=!0,e.needsUpdate=!0)};for(const e of s){const t=e.material;if(Array.isArray(t))for(const e of t)y(e);else y(t);const n=Array.isArray(t)?t[0]:t;if(a&&m&&n?.clone){const t=(t,r)=>{const s=n.clone();s.depthWrite=!1,s.depthTest=!1,s.colorWrite=!1,s.stencilWrite=!0,s.stencilFunc=519,s.stencilFail=r,s.stencilZFail=r,s.stencilZPass=r,s.side=t,s.transparent=!1,s.clippingPlanes=[h],s.clipShadows=!0,s.needsUpdate=!0;const i=new a(e.geometry,s);i.matrixAutoUpdate=!1,i.renderOrder=1,i.userData.__sectionHelper=!0,e.add(i),f.push(i)};t(1,7682),t(0,7683)}}e.viewer.mainModel?.EnumerateEdges?.(e=>{const t=e.material;if(Array.isArray(t))for(const e of t)y(e);else y(t)});let g=null;const b=s[0]?.material&&(Array.isArray(s[0].material)?s[0].material[0]:s[0].material);if(m&&a&&d&&u&&b?.clone){const e=r.max.x-r.min.x,t=r.max.y-r.min.y,s=r.max.z-r.min.z,i=2*Math.max(e,t,s,1)/2,o=new d,l=new Float32Array([-i,-i,0,i,-i,0,i,i,0,-i,i,0]),c=new Float32Array([0,0,1,0,0,1,0,0,1,0,0,1]);o.setAttribute("position",new u(l,3)),o.setAttribute("normal",new u(c,3)),o.setIndex([0,1,2,0,2,3]);const m=b.clone(),h=b.color?.getHex?.()??11844808;m.emissive?.setHex?.(h),"emissiveIntensity"in m&&(m.emissiveIntensity=.25),m.side=2,m.transparent=!1,m.opacity=1,m.stencilWrite=!0,m.stencilRef=0,m.stencilFunc=517,m.stencilFail=p,m.stencilZFail=p,m.stencilZPass=p,m.clippingPlanes=[],m.polygonOffset=!0,m.polygonOffsetFactor=-1,m.polygonOffsetUnits=-1,m.needsUpdate=!0,g=new a(o,m),g.renderOrder=2,g.userData.__sectionHelper=!0,n.add(g)}fe.current={plane:h,capMesh:g,helpers:f,materialState:x,bbox:r},console.info("[Preview] section: helpers =",f.length,"cap =",!!g),e.viewer.Render?.()},[Q,l,L]),b(()=>{const e=o.current,t=fe.current;if(e?.viewer&&t&&Q)try{const n=t.bbox,r="x"===ee?0:"y"===ee?1:2,s=[n.min.x,n.min.y,n.min.z][r],i=s+([n.max.x,n.max.y,n.max.z][r]-s)*se,o=oe*Math.PI/180,a=Math.cos(o),l=Math.sin(o),c=ne?-1:1;let d=0,u=0,p=0;"x"===ee?(d=c*a,p=c*l):"y"===ee?(u=c*a,d=c*l):(p=c*a,u=c*l);const m={x:(n.min.x+n.max.x)/2,y:(n.min.y+n.max.y)/2,z:(n.min.z+n.max.z)/2},h="x"===ee?i:m.x,f="y"===ee?i:m.y,x="z"===ee?i:m.z;if(t.plane.normal.x=d,t.plane.normal.y=u,t.plane.normal.z=p,t.plane.constant=-(d*h+u*f+p*x),t.capMesh){const e=m.x,n=m.y,r=m.z,s=d*e+u*n+p*r+t.plane.constant,i=e-d*s,o=n-u*s,a=r-p*s;t.capMesh.position.set(i,o,a),t.capMesh.lookAt?.(i+d,o+u,a+p)}e.viewer.Render?.()}catch(e){console.warn("[Preview] section update failed",e)}},[Q,ee,ne,se,oe]),b(()=>{const e=o.current;if(!e?.viewer||l||!i.current)return;const t=e.viewer.renderer,n=e.viewer.scene,r=t?.domElement;if(!t||!n||!r)return;let s=null;if(e.viewer.mainModel?.EnumerateMeshes?.(e=>{s||e.userData?.__sectionHelper||e.userData?.__measureHelper||(s=e)}),!s)return;const c=s.position.constructor,d=s.constructor,u=(Array.isArray(s.material)?s.material[0]:s.material)?.constructor,p=s.geometry.constructor,m=s.geometry.attributes?.position?.constructor;if(!(c&&d&&u&&p&&m))return;let h=null,f=null;n.traverse(e=>{if(h&&f)return;if(!e?.isLineSegments)return;h=e.constructor;const t=Array.isArray(e.material)?e.material[0]:e.material;t?.constructor&&(f=t.constructor)});const x=()=>{const t=he.current;if(t){null!==t.rafId&&cancelAnimationFrame(t.rafId);for(const e of t.markers)n.remove(e),e.geometry?.dispose?.(),e.material?.dispose?.();t.line&&(n.remove(t.line),t.line.geometry?.dispose?.(),t.line.material?.dispose?.()),t.label&&t.label.parentElement&&t.label.parentElement.removeChild(t.label),he.current=null,e.viewer.Render?.()}};if(!le)return x(),void me(null);he.current={points:[],normals:[],markers:[],line:null,label:null,rafId:null};const y=a.current,g=y?.IntersectionMode?.MeshOnly??1,b=e.viewer.GetBoundingBox?.(()=>!0),w=b?Math.sqrt((b.max.x-b.min.x)**2+(b.max.y-b.min.y)**2+(b.max.z-b.min.z)**2):100,v=Math.max(.005*w,.2),k=e=>{const t=[],r=[];for(let e=0;e<=12;e++){const n=e/12*Math.PI;for(let e=0;e<=16;e++){const r=e/16*Math.PI*2;t.push(v*Math.sin(n)*Math.cos(r),v*Math.cos(n),v*Math.sin(n)*Math.sin(r))}}for(let e=0;e<12;e++)for(let t=0;t<16;t++){const n=17*e+t,s=n+16+1;r.push(n,s,n+1,s,s+1,n+1)}const s=new p;s.setAttribute("position",new m(new Float32Array(t),3)),s.setIndex(r),s.computeVertexNormals?.();const i=new u;i.color?.setHex?.(16746496),i.depthTest=!1,i.depthWrite=!1,i.transparent=!0,i.opacity=.95;const o=new d(s,i);return o.position.copy(e),o.renderOrder=9999,o.userData.__measureHelper=!0,n.add(o),o},N=()=>{const t=he.current;t&&((()=>{const t=he.current;if(!t||t.points.length<2||!t.label)return;const n=e.viewer.camera;if(!n)return;const s=t.points[0],i=t.points[1],o=new c((s.x+i.x)/2,(s.y+i.y)/2,(s.z+i.z)/2).clone();o.project?.(n);const a=r.getBoundingClientRect(),l=(o.x+1)/2*a.width,d=(1-o.y)/2*a.height;t.label.style.left=`${l}px`,t.label.style.top=`${d}px`;const u=l<0||d<0||l>a.width||d>a.height;t.label.style.opacity=o.z>1||u?"0":"1"})(),t.rafId=requestAnimationFrame(N))};he.current.rafId=requestAnimationFrame(N);let C=0,A=0,E=0,L=!1,M=!1;const S=t=>{if(!e.viewer.camera)return;const s=r.getBoundingClientRect(),o={x:t.clientX-s.left,y:t.clientY-s.top},a=e.viewer.GetMeshIntersectionUnderMouse?.(g,o);if(!a)return;const l=he.current,x=new c(a.point.x,a.point.y,a.point.z),y=(e=>{const t=e?.face?.normal,n=e?.object;if(!t||!n)return null;try{const e=new c(t.x,t.y,t.z);return e.transformDirection?.(n.matrixWorld),{x:e.x,y:e.y,z:e.z}}catch{return{x:t.x,y:t.y,z:t.z}}})(a);if(2===l.points.length){for(const e of l.markers)n.remove(e),e.geometry?.dispose?.(),e.material?.dispose?.();l.line&&(n.remove(l.line),l.line.geometry?.dispose?.(),l.line.material?.dispose?.()),l.label&&(l.label.style.opacity="0"),l.points=[],l.markers=[],l.line=null,l.normals=[],me(null)}if(l.points.push(x),l.normals.push(y),"perp"===de){const e=((e,t)=>{const r=e?.geometry,s=r?.attributes?.position;if(!r||!s||!t?.face?.normal)return null;const i=s.array,o=r.index?r.index.array:null,a=new c(t.point.x,t.point.y,t.point.z);e.worldToLocal?.(a);const l=t.face.normal,h=-(l.x*a.x+l.y*a.y+l.z*a.z);r.computeBoundingBox?.();const f=r.boundingBox,x=f?Math.sqrt((f.max.x-f.min.x)**2+(f.max.y-f.min.y)**2+(f.max.z-f.min.z)**2):100,y=Math.max(.001*x,.005),g=o?o.length/3:s.count/3,b=[],w=new c;for(let t=0;t<g;t++){const n=o?o[3*t]:3*t,r=o?o[3*t+1]:3*t+1,s=o?o[3*t+2]:3*t+2,a=i[3*n],c=i[3*n+1],d=i[3*n+2],u=i[3*r],p=i[3*r+1],m=i[3*r+2],f=i[3*s],x=i[3*s+1],g=i[3*s+2],v=u-a,k=p-c,N=m-d,C=f-a,A=x-c,E=g-d;let L=k*E-N*A,M=N*C-v*E,S=v*A-k*C;const j=Math.sqrt(L*L+M*M+S*S);if(0===j)continue;if(L/=j,M/=j,S/=j,L*l.x+M*l.y+S*l.z<.9995)continue;const z=(a+u+f)/3,T=(c+p+x)/3,R=(d+m+g)/3;if(!(Math.abs(l.x*z+l.y*T+l.z*R+h)>y))for(const[t,n,r]of[[a,c,d],[u,p,m],[f,x,g]])w.set?.(t,n,r),e.localToWorld?.(w),b.push(w.x,w.y,w.z)}if(0===b.length)return null;const v=new p;v.setAttribute("position",new m(new Float32Array(b),3)),v.computeVertexNormals?.();const k=new u;k.color?.setHex?.(16746496),k.transparent=!0,k.opacity=.45,k.depthWrite=!1,k.polygonOffset=!0,k.polygonOffsetFactor=-2,k.polygonOffsetUnits=-2;const N=new d(v,k);return N.renderOrder=9998,N.userData.__measureHelper=!0,n.add(N),N})(a.object,a);l.markers.push(e??k(x))}else l.markers.push(k(x));if(2===l.points.length){const e=l.points[0];let t,r=l.points[1],s="";if("perp"===de){const n=l.normals[0]??l.normals[1];if(n){const i=Math.sqrt(n.x*n.x+n.y*n.y+n.z*n.z)||1,o=n.x/i,a=n.y/i,d=n.z/i,u=(r.x-e.x)*o+(r.y-e.y)*a+(r.z-e.z)*d,p=new c(e.x+o*u,e.y+a*u,e.z+d*u);l.points[1]=p,r=p,t=Math.abs(u),s=" ⊥"}else{const n=r.x-e.x,s=r.y-e.y,i=r.z-e.z;t=Math.sqrt(n*n+s*s+i*i)}}else{const n=r.x-e.x,s=r.y-e.y,i=r.z-e.z;t=Math.sqrt(n*n+s*s+i*i)}l.line=((e,t)=>{const r=new p;r.setAttribute("position",new m(new Float32Array([e.x,e.y,e.z,t.x,t.y,t.z]),3));const s=new(h??d)(r,new(f??u)({color:16746496,depthTest:!1,depthWrite:!1,transparent:!0,opacity:.95}));return s.renderOrder=9998,s.userData.__measureHelper=!0,n.add(s),s})(e,r),me(t);const o=(()=>{const e=he.current;if(e.label)return e.label;const t=document.createElement("div");return t.style.position="absolute",t.style.left="-9999px",t.style.top="-9999px",t.style.transform="translate(-50%, -50%)",t.style.padding="2px 6px",t.style.fontSize="11px",t.style.fontWeight="600",t.style.fontFamily="system-ui, -apple-system, sans-serif",t.style.background="rgba(255, 136, 0, 0.95)",t.style.color="#fff",t.style.borderRadius="4px",t.style.pointerEvents="none",t.style.whiteSpace="nowrap",t.style.boxShadow="0 1px 4px rgba(0,0,0,0.25)",t.style.zIndex="5",i.current.appendChild(t),e.label=t,t})();o.textContent=`${D(t)}${s}`}e.viewer.Render?.()},j=e=>{0===e.button&&(C=e.clientX,A=e.clientY,E=performance.now(),L=!1,M=!0)},z=e=>{if(!M)return;const t=e.clientX-C,n=e.clientY-A;t*t+n*n>16&&(L=!0)},T=e=>{if(0!==e.button||!M)return;const t=performance.now()-E;M=!1,!L&&t<350&&S(e)},R=e=>{"Escape"===e.key&&ce(!1)};return r.style.cursor="crosshair",r.addEventListener("pointerdown",j),r.addEventListener("pointermove",z),r.addEventListener("pointerup",T),r.addEventListener("pointercancel",T),window.addEventListener("keydown",R),()=>{r.style.cursor="",r.removeEventListener("pointerdown",j),r.removeEventListener("pointermove",z),r.removeEventListener("pointerup",T),r.removeEventListener("pointercancel",T),window.removeEventListener("keydown",R),x(),me(null)}},[le,de,l,L]),b(()=>{if(!h||l)return;const e=setTimeout(()=>x(!1),5e3);return()=>clearTimeout(e)},[h,l]);const xe=e=>{const t=/* @__PURE__ */new Set;T(e,t),P(e=>{const n=new Set(e),r=[...t].some(e=>!n.has(e));for(const e of t)r?n.add(e):n.delete(e);return n})},ye=()=>{try{const e=o.current,t=e?.viewer?.GetBoundingSphere?.(()=>!0);t&&e.viewer.FitSphereToWindow(t,!0),e?.viewer?.Render?.()}catch{}};b(()=>{const e=a.current,t=o.current;if(e&&t?.viewer&&!l)try{t.viewer.SetProjectionMode(Z?e.ProjectionMode.Perspective:e.ProjectionMode.Orthographic)}catch{}},[Z,l]);const ge=e=>{const t=a.current,n=o.current;if(t&&n?.viewer)try{const r=n.viewer.GetBoundingSphere?.(()=>!0);if(!r)return;const s=r.center,i=3*(r.radius||1),o=s.x??0,a=s.y??0,l=s.z??0;let c,d;switch(e){case"top":c=new t.Coord3D(o,a,l+i),d=new t.Coord3D(0,1,0);break;case"front":c=new t.Coord3D(o,a-i,l),d=new t.Coord3D(0,0,1);break;case"side":c=new t.Coord3D(o+i,a,l),d=new t.Coord3D(0,0,1);break;default:{const e=i/Math.sqrt(3);c=new t.Coord3D(o+e,a-e,l+e),d=new t.Coord3D(0,0,1);break}}const u=new t.Coord3D(o,a,l),p=new t.Camera(c,u,d,45);n.viewer.SetCamera(p),n.viewer.AdjustClippingPlanesToSphere?.(r),n.viewer.Render?.()}catch{}},be=(t.split(".").pop()||"").toUpperCase(),we=(e,t=0)=>{const n=e.children.length>0,r=!1!==S[e.id],s=!H.has(e.id);/* @__PURE__ */
82
+ /* @__PURE__ */v("input",{ref:se,value:q,onChange:e=>ee(e.target.value),onKeyDown:e=>{"Enter"===e.key||" "===e.key?(e.preventDefault(),(e=>{const t=e.trim()||re.current;if(ee(""),!t)return;const n=t.toLowerCase().split(/\s+/)[0],r=()=>{re.current=t},s=(e,t)=>{P(!0),I(e),Z.current?.(),ne(t),r()};if(/^-?(\d+\.?\d*|\.\d+)$/.test(n))if(!H||"horizontal"!==W&&"vertical"!==W)ne(T.fixedNeedsAxis);else{const e=parseFloat(n);e?(_(n),V(e),ne(T.axisLocked("horizontal"===W?"ΔX":"ΔY",D(Math.abs(e))))):(_(""),V(null),ne(T.fixedCleared))}else switch(n){case"di":case"dist":case"mea":case"measuregeom":s("point",T.echoDist);break;case"dim":case"dli":case"dimlin":case"dimlinear":s("auto",T.echoDimLinear);break;case"h":case"hor":case"horizontal":P(!0),I("horizontal"),ne(T.echoHorizontal),r();break;case"v":case"ver":case"vertical":P(!0),I("vertical"),ne(T.echoVertical),r();break;case"au":case"auto":P(!0),I("auto"),ne(T.echoAuto),r();break;case"measure":P(!H),ne(H?T.measureOff:T.measureOn),r();break;case"u":case"undo":Q.current?.(),ne(T.pickRemoved),r();break;case"z":case"ze":case"zoom":case"fit":case"zoomextents":ce(),ne(T.zoomExtents),r();break;case"la":case"layer":case"layers":E(e=>!e),ne(T.layersToggled),r();break;case"off":case"clear":V(null),_(""),Z.current?.(),ne(T.measurementCleared),r();break;case"?":case"help":ne(T.commandHelp);break;default:{const e=M[n];ne(e?T.readOnly(e):T.unknownCommand(n.toUpperCase()))}}})(q)):"Escape"===e.key&&(q?(e.stopPropagation(),ee(""),ne(T.cancelled)):e.target.blur())},placeholder:T.commandPlaceholder,spellCheck:!1,autoComplete:"off",className:"flex-1 min-w-0 bg-transparent text-2xs font-mono text-ink focus:outline-none placeholder:text-gray-300"})]})]})]})}var j="https://cdn.jsdelivr.net/npm/online-3d-viewer@0.18.0/libs/";function z(e,t,n=0){return{id:e.GetId?.()??0,name:e.GetName?.()||(0===n?t.root:t.node),isMeshNode:!!e.IsMeshNode?.(),meshIndices:e.GetMeshIndices?.()??[],children:(e.GetChildNodes?.()??[]).map(e=>z(e,t,n+1))}}function T(e,t){t.add(e.id);for(const n of e.children)T(n,t)}function R(e,t){const n=/^#?([0-9a-f]{6})$/i.exec(t),r=n?parseInt(n[1],16):0;return new e.RGBColor(r>>16&255,r>>8&255,255&r)}function D(e){return e>=1e3?`${(e/1e3).toFixed(3)} m`:`${e.toFixed(2)} mm`}function F({url:e,filename:t,onDownload:r,onEmail:s}){const i=y(null),o=y(null),a=y(null),[l,c]=g(!0),[u,m]=g(null),[h,x]=g(!0),k=f(),C=k.model,A=k.preview,E=y(C);E.current=C;const[L,M]=g(null),[S,F]=g({}),[H,P]=g(/* @__PURE__ */new Set),[W,I]=g("#f5f6f8"),[O,X]=g(!0),[B,U]=g("#000000"),[G,V]=g(1),[Y,_]=g(!1),[$,J]=g(!1),[K,Z]=g(!1),[Q,q]=g(!1),[ee,te]=g("x"),[ne,re]=g(!1),[se,ie]=g(.5),[oe,ae]=g(0),[le,ce]=g(!1),[de,ue]=g("point"),[pe,me]=g(null),he=y(null),fe=y(null);b(()=>{let n=!1,r=null,s=null;return c(!0),m(null),M(null),F({}),P(/* @__PURE__ */new Set),(async()=>{let l;try{l=await(import("online-3d-viewer"))}catch{return void(n||(m(E.current.notInstalled),c(!1)))}if(a.current=l,!n&&i.current&&(await new Promise(e=>{const t=()=>{const n=i.current?.getBoundingClientRect();n&&n.width>4&&n.height>4?e():requestAnimationFrame(t)};t()}),!n&&i.current))try{const a="undefined"!=typeof window&&window.__REACT_OS_SHELL_O3DV_LIBS__||j;l.SetExternalLibLocation?.(a),function(){if(N)return;if("undefined"==typeof HTMLCanvasElement)return;N=!0;const e=HTMLCanvasElement.prototype.getContext;HTMLCanvasElement.prototype.getContext=function(t,n){return"webgl"!==t&&"webgl2"!==t&&"experimental-webgl"!==t||(n={...n||{},stencil:!0}),e.call(this,t,n)},console.info("[Preview] section: canvas getContext patched (force stencil=true)")}(),r=new l.EmbeddedViewer(i.current,{backgroundColor:new l.RGBAColor(245,246,248,255),defaultColor:new l.RGBColor(180,188,200),edgeSettings:new l.EdgeSettings(!0,new l.RGBColor(0,0,0),1),onModelLoaded:()=>{if(!n){try{const e=r.GetModel?.(),t=e?.GetRootNode?.();if(t){const e=z(t,{root:E.current.rootNode,node:E.current.node});M(e);const n={[e.id]:!0};for(const t of e.children)n[t.id]=!0;F(n)}}catch(e){console.warn("[Preview] mesh tree extraction failed",e)}c(!1)}},onModelLoadFailed:()=>{n||(m(E.current.loadFailed),c(!1))}}),o.current=r;const d=new l.InputFile(t,l.FileSource.Url,e);r.LoadModelFromInputFiles([d]),i.current&&"undefined"!=typeof ResizeObserver&&(s=new ResizeObserver(()=>{try{const e=o.current;e?.Resize?e.Resize():e?.viewer?.Resize&&e.viewer.Resize(),e?.viewer?.Render?.()}catch{}}),s.observe(i.current))}catch(e){n||(m(e?.message||E.current.loadFailed),c(!1))}})(),()=>{n=!0;try{s?.disconnect()}catch{}try{r?.Destroy?.()}catch{}o.current=null}},[e,t]),b(()=>{const e=o.current;if(e?.viewer)try{const t=e=>{if(e.userData?.__sectionHelper)return;const t=e.userData?.originalMeshInstance??e.userData,n=t?.id?.nodeId??t?.nodeId;"number"==typeof n&&(e.visible=!H.has(n))};e.viewer.mainModel?.EnumerateMeshesAndLines?.(t),e.viewer.mainModel?.EnumerateEdges?.(t),e.viewer.Render?.()}catch(e){console.warn("[Preview] visibility update failed",e)}},[H,L]),b(()=>{const e=a.current,t=o.current;if(e&&t?.viewer)try{t.viewer.SetEdgeSettings(new e.EdgeSettings(O,R(e,B),G));const n=fe.current;if(n){const e=[];t.viewer.mainModel?.EnumerateEdges?.(t=>{t.userData?.__sectionHelper&&e.push(t)});for(const t of e)t.parent?.remove(t),t.geometry?.dispose?.(),t.material?.dispose?.();const r=n.plane,s=e=>{e&&!n.materialState.has(e)&&(n.materialState.set(e,{clippingPlanes:e.clippingPlanes,clipShadows:e.clipShadows}),e.clippingPlanes=[r],e.clipShadows=!0,e.needsUpdate=!0)};t.viewer.mainModel?.EnumerateEdges?.(e=>{const t=e.material;if(Array.isArray(t))for(const e of t)s(e);else s(t)})}t.viewer.Render?.()}catch{}},[O,B,G]),b(()=>{const e=a.current,t=o.current;if(e&&t?.viewer)try{const n=R(e,W);t.viewer.SetBackgroundColor(new e.RGBAColor(n.r,n.g,n.b,255)),t.viewer.Render?.()}catch{}},[W]),b(()=>{const e=o.current;if(!e?.viewer||l)return;const t=e.viewer.renderer,n=e.viewer.scene;if(!t||!n)return;if(fe.current){const e=fe.current;for(const[t,n]of e.materialState.entries())t.clippingPlanes=n.clippingPlanes,t.clipShadows=n.clipShadows,t.needsUpdate=!0;for(const t of e.helpers)t.parent?.remove(t),t.material?.dispose?.();e.capMesh&&(n.remove(e.capMesh),e.capMesh.geometry?.dispose?.(),e.capMesh.material?.dispose?.()),fe.current=null}if(!Q)return t.localClippingEnabled=!1,void e.viewer.Render?.();const r=e.viewer.GetBoundingBox?.(()=>!0);if(!r)return;const s=[];if(e.viewer.mainModel?.EnumerateMeshes?.(e=>{e.userData?.__sectionHelper||s.push(e)}),!s.length)return t.localClippingEnabled=!1,void e.viewer.Render?.();const i=s[0],a=i.constructor,c=i.material?.constructor,d=i.geometry?.constructor,u=i.geometry?.attributes?.position?.constructor;a&&c&&d&&u||console.warn("[Preview] section: missing THREE constructors, falling back to no cap");const p=7681;let m=!0;try{const e=t.getContext?.(),n=e?.getContextAttributes?.();m=!1!==n?.stencil,t.autoClearStencil=!0,console.info("[Preview] section: stencil buffer =",m,"targets =",s.length)}catch{}t.localClippingEnabled=!0;const h={normal:{x:0,y:0,z:-1},constant:0,clone:function e(){const t={normal:{x:this.normal.x,y:this.normal.y,z:this.normal.z},constant:this.constant};return t.clone=e,t}},f=[],x=/* @__PURE__ */new Map,y=e=>{e&&!x.has(e)&&(x.set(e,{clippingPlanes:e.clippingPlanes,clipShadows:e.clipShadows}),e.clippingPlanes=[h],e.clipShadows=!0,e.needsUpdate=!0)};for(const e of s){const t=e.material;if(Array.isArray(t))for(const e of t)y(e);else y(t);const n=Array.isArray(t)?t[0]:t;if(a&&m&&n?.clone){const t=(t,r)=>{const s=n.clone();s.depthWrite=!1,s.depthTest=!1,s.colorWrite=!1,s.stencilWrite=!0,s.stencilFunc=519,s.stencilFail=r,s.stencilZFail=r,s.stencilZPass=r,s.side=t,s.transparent=!1,s.clippingPlanes=[h],s.clipShadows=!0,s.needsUpdate=!0;const i=new a(e.geometry,s);i.matrixAutoUpdate=!1,i.renderOrder=1,i.userData.__sectionHelper=!0,e.add(i),f.push(i)};t(1,7682),t(0,7683)}}e.viewer.mainModel?.EnumerateEdges?.(e=>{const t=e.material;if(Array.isArray(t))for(const e of t)y(e);else y(t)});let g=null;const b=s[0]?.material&&(Array.isArray(s[0].material)?s[0].material[0]:s[0].material);if(m&&a&&d&&u&&b?.clone){const e=r.max.x-r.min.x,t=r.max.y-r.min.y,s=r.max.z-r.min.z,i=2*Math.max(e,t,s,1)/2,o=new d,l=new Float32Array([-i,-i,0,i,-i,0,i,i,0,-i,i,0]),c=new Float32Array([0,0,1,0,0,1,0,0,1,0,0,1]);o.setAttribute("position",new u(l,3)),o.setAttribute("normal",new u(c,3)),o.setIndex([0,1,2,0,2,3]);const m=b.clone(),h=b.color?.getHex?.()??11844808;m.emissive?.setHex?.(h),"emissiveIntensity"in m&&(m.emissiveIntensity=.25),m.side=2,m.transparent=!1,m.opacity=1,m.stencilWrite=!0,m.stencilRef=0,m.stencilFunc=517,m.stencilFail=p,m.stencilZFail=p,m.stencilZPass=p,m.clippingPlanes=[],m.polygonOffset=!0,m.polygonOffsetFactor=-1,m.polygonOffsetUnits=-1,m.needsUpdate=!0,g=new a(o,m),g.renderOrder=2,g.userData.__sectionHelper=!0,n.add(g)}fe.current={plane:h,capMesh:g,helpers:f,materialState:x,bbox:r},console.info("[Preview] section: helpers =",f.length,"cap =",!!g),e.viewer.Render?.()},[Q,l,L]),b(()=>{const e=o.current,t=fe.current;if(e?.viewer&&t&&Q)try{const n=t.bbox,r="x"===ee?0:"y"===ee?1:2,s=[n.min.x,n.min.y,n.min.z][r],i=s+([n.max.x,n.max.y,n.max.z][r]-s)*se,o=oe*Math.PI/180,a=Math.cos(o),l=Math.sin(o),c=ne?-1:1;let d=0,u=0,p=0;"x"===ee?(d=c*a,p=c*l):"y"===ee?(u=c*a,d=c*l):(p=c*a,u=c*l);const m={x:(n.min.x+n.max.x)/2,y:(n.min.y+n.max.y)/2,z:(n.min.z+n.max.z)/2},h="x"===ee?i:m.x,f="y"===ee?i:m.y,x="z"===ee?i:m.z;if(t.plane.normal.x=d,t.plane.normal.y=u,t.plane.normal.z=p,t.plane.constant=-(d*h+u*f+p*x),t.capMesh){const e=m.x,n=m.y,r=m.z,s=d*e+u*n+p*r+t.plane.constant,i=e-d*s,o=n-u*s,a=r-p*s;t.capMesh.position.set(i,o,a),t.capMesh.lookAt?.(i+d,o+u,a+p)}e.viewer.Render?.()}catch(e){console.warn("[Preview] section update failed",e)}},[Q,ee,ne,se,oe]),b(()=>{const e=o.current;if(!e?.viewer||l||!i.current)return;const t=e.viewer.renderer,n=e.viewer.scene,r=t?.domElement;if(!t||!n||!r)return;let s=null;if(e.viewer.mainModel?.EnumerateMeshes?.(e=>{s||e.userData?.__sectionHelper||e.userData?.__measureHelper||(s=e)}),!s)return;const c=s.position.constructor,d=s.constructor,u=(Array.isArray(s.material)?s.material[0]:s.material)?.constructor,p=s.geometry.constructor,m=s.geometry.attributes?.position?.constructor;if(!(c&&d&&u&&p&&m))return;let h=null,f=null;n.traverse(e=>{if(h&&f)return;if(!e?.isLineSegments)return;h=e.constructor;const t=Array.isArray(e.material)?e.material[0]:e.material;t?.constructor&&(f=t.constructor)});const x=()=>{const t=he.current;if(t){null!==t.rafId&&cancelAnimationFrame(t.rafId);for(const e of t.markers)n.remove(e),e.geometry?.dispose?.(),e.material?.dispose?.();t.line&&(n.remove(t.line),t.line.geometry?.dispose?.(),t.line.material?.dispose?.()),t.label&&t.label.parentElement&&t.label.parentElement.removeChild(t.label),he.current=null,e.viewer.Render?.()}};if(!le)return x(),void me(null);he.current={points:[],normals:[],markers:[],line:null,label:null,rafId:null};const y=a.current,g=y?.IntersectionMode?.MeshOnly??1,b=e.viewer.GetBoundingBox?.(()=>!0),w=b?Math.sqrt((b.max.x-b.min.x)**2+(b.max.y-b.min.y)**2+(b.max.z-b.min.z)**2):100,v=Math.max(.005*w,.2),k=e=>{const t=[],r=[];for(let e=0;e<=12;e++){const n=e/12*Math.PI;for(let e=0;e<=16;e++){const r=e/16*Math.PI*2;t.push(v*Math.sin(n)*Math.cos(r),v*Math.cos(n),v*Math.sin(n)*Math.sin(r))}}for(let e=0;e<12;e++)for(let t=0;t<16;t++){const n=17*e+t,s=n+16+1;r.push(n,s,n+1,s,s+1,n+1)}const s=new p;s.setAttribute("position",new m(new Float32Array(t),3)),s.setIndex(r),s.computeVertexNormals?.();const i=new u;i.color?.setHex?.(16746496),i.depthTest=!1,i.depthWrite=!1,i.transparent=!0,i.opacity=.95;const o=new d(s,i);return o.position.copy(e),o.renderOrder=9999,o.userData.__measureHelper=!0,n.add(o),o},N=()=>{const t=he.current;t&&((()=>{const t=he.current;if(!t||t.points.length<2||!t.label)return;const n=e.viewer.camera;if(!n)return;const s=t.points[0],i=t.points[1],o=new c((s.x+i.x)/2,(s.y+i.y)/2,(s.z+i.z)/2).clone();o.project?.(n);const a=r.getBoundingClientRect(),l=(o.x+1)/2*a.width,d=(1-o.y)/2*a.height;t.label.style.left=`${l}px`,t.label.style.top=`${d}px`;const u=l<0||d<0||l>a.width||d>a.height;t.label.style.opacity=o.z>1||u?"0":"1"})(),t.rafId=requestAnimationFrame(N))};he.current.rafId=requestAnimationFrame(N);let C=0,A=0,E=0,L=!1,M=!1;const S=t=>{if(!e.viewer.camera)return;const s=r.getBoundingClientRect(),o={x:t.clientX-s.left,y:t.clientY-s.top},a=e.viewer.GetMeshIntersectionUnderMouse?.(g,o);if(!a)return;const l=he.current,x=new c(a.point.x,a.point.y,a.point.z),y=(e=>{const t=e?.face?.normal,n=e?.object;if(!t||!n)return null;try{const e=new c(t.x,t.y,t.z);return e.transformDirection?.(n.matrixWorld),{x:e.x,y:e.y,z:e.z}}catch{return{x:t.x,y:t.y,z:t.z}}})(a);if(2===l.points.length){for(const e of l.markers)n.remove(e),e.geometry?.dispose?.(),e.material?.dispose?.();l.line&&(n.remove(l.line),l.line.geometry?.dispose?.(),l.line.material?.dispose?.()),l.label&&(l.label.style.opacity="0"),l.points=[],l.markers=[],l.line=null,l.normals=[],me(null)}if(l.points.push(x),l.normals.push(y),"perp"===de){const e=((e,t)=>{const r=e?.geometry,s=r?.attributes?.position;if(!r||!s||!t?.face?.normal)return null;const i=s.array,o=r.index?r.index.array:null,a=new c(t.point.x,t.point.y,t.point.z);e.worldToLocal?.(a);const l=t.face.normal,h=-(l.x*a.x+l.y*a.y+l.z*a.z);r.computeBoundingBox?.();const f=r.boundingBox,x=f?Math.sqrt((f.max.x-f.min.x)**2+(f.max.y-f.min.y)**2+(f.max.z-f.min.z)**2):100,y=Math.max(.001*x,.005),g=o?o.length/3:s.count/3,b=[],w=new c;for(let t=0;t<g;t++){const n=o?o[3*t]:3*t,r=o?o[3*t+1]:3*t+1,s=o?o[3*t+2]:3*t+2,a=i[3*n],c=i[3*n+1],d=i[3*n+2],u=i[3*r],p=i[3*r+1],m=i[3*r+2],f=i[3*s],x=i[3*s+1],g=i[3*s+2],v=u-a,k=p-c,N=m-d,C=f-a,A=x-c,E=g-d;let L=k*E-N*A,M=N*C-v*E,S=v*A-k*C;const j=Math.sqrt(L*L+M*M+S*S);if(0===j)continue;if(L/=j,M/=j,S/=j,L*l.x+M*l.y+S*l.z<.9995)continue;const z=(a+u+f)/3,T=(c+p+x)/3,R=(d+m+g)/3;if(!(Math.abs(l.x*z+l.y*T+l.z*R+h)>y))for(const[t,n,r]of[[a,c,d],[u,p,m],[f,x,g]])w.set?.(t,n,r),e.localToWorld?.(w),b.push(w.x,w.y,w.z)}if(0===b.length)return null;const v=new p;v.setAttribute("position",new m(new Float32Array(b),3)),v.computeVertexNormals?.();const k=new u;k.color?.setHex?.(16746496),k.transparent=!0,k.opacity=.45,k.depthWrite=!1,k.polygonOffset=!0,k.polygonOffsetFactor=-2,k.polygonOffsetUnits=-2;const N=new d(v,k);return N.renderOrder=9998,N.userData.__measureHelper=!0,n.add(N),N})(a.object,a);l.markers.push(e??k(x))}else l.markers.push(k(x));if(2===l.points.length){const e=l.points[0];let t,r=l.points[1],s="";if("perp"===de){const n=l.normals[0]??l.normals[1];if(n){const i=Math.sqrt(n.x*n.x+n.y*n.y+n.z*n.z)||1,o=n.x/i,a=n.y/i,d=n.z/i,u=(r.x-e.x)*o+(r.y-e.y)*a+(r.z-e.z)*d,p=new c(e.x+o*u,e.y+a*u,e.z+d*u);l.points[1]=p,r=p,t=Math.abs(u),s=" ⊥"}else{const n=r.x-e.x,s=r.y-e.y,i=r.z-e.z;t=Math.sqrt(n*n+s*s+i*i)}}else{const n=r.x-e.x,s=r.y-e.y,i=r.z-e.z;t=Math.sqrt(n*n+s*s+i*i)}l.line=((e,t)=>{const r=new p;r.setAttribute("position",new m(new Float32Array([e.x,e.y,e.z,t.x,t.y,t.z]),3));const s=new(h??d)(r,new(f??u)({color:16746496,depthTest:!1,depthWrite:!1,transparent:!0,opacity:.95}));return s.renderOrder=9998,s.userData.__measureHelper=!0,n.add(s),s})(e,r),me(t);const o=(()=>{const e=he.current;if(e.label)return e.label;const t=document.createElement("div");return t.style.position="absolute",t.style.left="-9999px",t.style.top="-9999px",t.style.transform="translate(-50%, -50%)",t.style.padding="2px 6px",t.style.fontSize="11px",t.style.fontWeight="600",t.style.fontFamily="system-ui, -apple-system, sans-serif",t.style.background="rgba(255, 136, 0, 0.95)",t.style.color="#fff",t.style.borderRadius="4px",t.style.pointerEvents="none",t.style.whiteSpace="nowrap",t.style.boxShadow="0 1px 4px rgba(0,0,0,0.25)",t.style.zIndex="5",i.current.appendChild(t),e.label=t,t})();o.textContent=`${D(t)}${s}`}e.viewer.Render?.()},j=e=>{0===e.button&&(C=e.clientX,A=e.clientY,E=performance.now(),L=!1,M=!0)},z=e=>{if(!M)return;const t=e.clientX-C,n=e.clientY-A;t*t+n*n>16&&(L=!0)},T=e=>{if(0!==e.button||!M)return;const t=performance.now()-E;M=!1,!L&&t<350&&S(e)},R=e=>{"Escape"===e.key&&ce(!1)};return r.style.cursor="crosshair",r.addEventListener("pointerdown",j),r.addEventListener("pointermove",z),r.addEventListener("pointerup",T),r.addEventListener("pointercancel",T),window.addEventListener("keydown",R),()=>{r.style.cursor="",r.removeEventListener("pointerdown",j),r.removeEventListener("pointermove",z),r.removeEventListener("pointerup",T),r.removeEventListener("pointercancel",T),window.removeEventListener("keydown",R),x(),me(null)}},[le,de,l,L]),b(()=>{if(!h||l)return;const e=setTimeout(()=>x(!1),5e3);return()=>clearTimeout(e)},[h,l]);const xe=e=>{const t=/* @__PURE__ */new Set;T(e,t),P(e=>{const n=new Set(e),r=[...t].some(e=>!n.has(e));for(const e of t)r?n.add(e):n.delete(e);return n})},ye=()=>{try{const e=o.current,t=e?.viewer?.GetBoundingSphere?.(()=>!0);t&&e.viewer.FitSphereToWindow(t,!0),e?.viewer?.Render?.()}catch{}};b(()=>{const e=a.current,t=o.current;if(e&&t?.viewer&&!l)try{t.viewer.SetProjectionMode(K?e.ProjectionMode.Perspective:e.ProjectionMode.Orthographic)}catch{}},[K,l]);const ge=e=>{const t=a.current,n=o.current;if(t&&n?.viewer)try{const r=n.viewer.GetBoundingSphere?.(()=>!0);if(!r)return;const s=r.center,i=3*(r.radius||1),o=s.x??0,a=s.y??0,l=s.z??0;let c,d;switch(e){case"top":c=new t.Coord3D(o,a,l+i),d=new t.Coord3D(0,1,0);break;case"front":c=new t.Coord3D(o,a-i,l),d=new t.Coord3D(0,0,1);break;case"side":c=new t.Coord3D(o+i,a,l),d=new t.Coord3D(0,0,1);break;default:{const e=i/Math.sqrt(3);c=new t.Coord3D(o+e,a-e,l+e),d=new t.Coord3D(0,0,1);break}}const u=new t.Coord3D(o,a,l),p=new t.Camera(c,u,d,45);n.viewer.SetCamera(p),n.viewer.AdjustClippingPlanesToSphere?.(r),n.viewer.Render?.()}catch{}},be=(t.split(".").pop()||"").toUpperCase(),we=(e,t=0)=>{const n=e.children.length>0,r=!1!==S[e.id],s=!H.has(e.id);/* @__PURE__ */
83
83
  return w("div",{children:[
84
84
  /* @__PURE__ */w("div",{className:"group flex items-center gap-1 px-2 py-1 hover:bg-gray-100 cursor-default text-xs text-ink",style:{paddingLeft:12*t+6+"px"},children:[n?/* @__PURE__ */v("button",{onClick:()=>{return t=e.id,void F(e=>({...e,[t]:!e[t]}));var t},className:"h-4 w-4 shrink-0 flex items-center justify-center text-gray-500 hover:text-gray-900",title:r?C.collapse:C.expand,children:/* @__PURE__ */v(d,r?{name:"chevron-down",className:"h-3 w-3",strokeWidth:2}:{name:"chevron-right",className:"h-3 w-3",strokeWidth:2})}):/* @__PURE__ */v("span",{className:"h-4 w-4 shrink-0 flex items-center justify-center",children:/* @__PURE__ */v("span",{className:"h-1 w-1 rounded-full bg-gray-400"})}),
85
85
  /* @__PURE__ */v("span",{className:"flex-1 truncate "+(s?"":"opacity-40"),title:e.name,children:e.name}),
@@ -93,7 +93,7 @@ return w("div",{className:"flex flex-col h-full bg-white",children:[
93
93
  /* @__PURE__ */v("button",{onClick:()=>ge("top"),className:ve,title:C.topView,children:/* @__PURE__ */v("span",{className:"text-2xs font-semibold",children:C.top})}),
94
94
  /* @__PURE__ */v("button",{onClick:()=>ge("front"),className:ve,title:C.frontView,children:/* @__PURE__ */v("span",{className:"text-2xs font-semibold",children:C.front})}),
95
95
  /* @__PURE__ */v("button",{onClick:()=>ge("side"),className:ve,title:C.sideView,children:/* @__PURE__ */v("span",{className:"text-2xs font-semibold",children:C.side})}),
96
- /* @__PURE__ */v("button",{onClick:()=>K(e=>!e),className:Z?"h-8 shrink-0 flex items-center justify-center px-2 rounded bg-gray-200 text-gray-900":"h-8 shrink-0 flex items-center justify-center px-2 rounded text-gray-600 hover:bg-gray-200 hover:text-gray-900 transition-colors",title:Z?C.toOrthographic:C.toPerspective,children:/* @__PURE__ */v("span",{className:"text-2xs font-semibold whitespace-nowrap",children:Z?C.perspective:C.orthographic})}),
96
+ /* @__PURE__ */v("button",{onClick:()=>Z(e=>!e),className:K?"h-8 shrink-0 flex items-center justify-center px-2 rounded bg-gray-200 text-gray-900":"h-8 shrink-0 flex items-center justify-center px-2 rounded text-gray-600 hover:bg-gray-200 hover:text-gray-900 transition-colors",title:K?C.toOrthographic:C.toPerspective,children:/* @__PURE__ */v("span",{className:"text-2xs font-semibold whitespace-nowrap",children:K?C.perspective:C.orthographic})}),
97
97
  /* @__PURE__ */v("div",{className:Ne}),
98
98
  /* @__PURE__ */v("button",{onClick:()=>{try{const e=o.current,n=e?.viewer?.GetCanvasSize?.()??{width:1280,height:720},r=e?.viewer?.GetImageAsDataUrl?.(n.width,n.height,!1);if(!r)return;const s=document.createElement("a");s.href=r,s.download=`${t.replace(/\.[^.]+$/,"")}-snapshot.png`,s.click()}catch{}},className:ve,title:C.snapshot,children:/* @__PURE__ */v(d,{name:"camera",className:"h-4 w-4",strokeWidth:1.5})}),
99
99
  /* @__PURE__ */v("button",{onClick:()=>x(e=>!e),className:ve,title:A.howToNavigate,children:/* @__PURE__ */v(d,{name:"help",className:"h-4 w-4",strokeWidth:1.5})}),
@@ -103,11 +103,11 @@ return w("div",{className:"flex flex-col h-full bg-white",children:[
103
103
  /* @__PURE__ */v("button",{onClick:()=>ue("point"),className:"px-2 text-2xs font-semibold transition-colors "+("point"===de?"bg-orange-500 text-on-accent":"bg-surface text-gray-600 hover:bg-row-hover"),title:C.pointHint,children:C.point}),
104
104
  /* @__PURE__ */v("button",{onClick:()=>ue("perp"),className:"px-2 text-xs font-semibold transition-colors "+("perp"===de?"bg-orange-500 text-on-accent":"bg-surface text-gray-600 hover:bg-row-hover"),title:C.perpendicularHint,children:"⊥"})]}),le&&null!==pe&&/* @__PURE__ */w("div",{className:"px-2 py-1 text-2xs font-mono font-semibold text-orange-600 bg-orange-50 border border-orange-200 rounded whitespace-nowrap",title:"perp"===de?C.perpendicularDistance:C.straightDistance,children:[D(pe),"perp"===de?" ⊥":""]}),
105
105
  /* @__PURE__ */v("div",{className:Ne}),
106
- /* @__PURE__ */v("button",{onClick:()=>_(e=>!e),className:V?ke:ve,title:C.meshesHint,children:/* @__PURE__ */v(d,{name:"menu",className:"h-4 w-4",strokeWidth:1.5})}),
106
+ /* @__PURE__ */v("button",{onClick:()=>_(e=>!e),className:Y?ke:ve,title:C.meshesHint,children:/* @__PURE__ */v(d,{name:"menu",className:"h-4 w-4",strokeWidth:1.5})}),
107
107
  /* @__PURE__ */v("button",{onClick:()=>J(e=>!e),className:$?ke:ve,title:C.displayHint,children:/* @__PURE__ */v(d,{name:"settings",className:"h-4 w-4",strokeWidth:1.5})}),
108
108
  /* @__PURE__ */v("button",{onClick:r??(()=>{const n=document.createElement("a");n.href=e,n.download=t,n.click()}),className:ve,title:C.downloadOriginal,children:/* @__PURE__ */v(d,{name:"download",className:"h-4 w-4",strokeWidth:1.5})}),s&&/* @__PURE__ */v("button",{onClick:s,className:ve,title:A.email,children:/* @__PURE__ */v(d,{name:"email",className:"h-4 w-4",strokeWidth:1.5})})]}),
109
109
  /* @__PURE__ */v("div",{className:"flex-1 flex min-h-0",children:/* @__PURE__ */w("div",{className:"relative flex-1 min-w-0",style:{background:W},children:[
110
- /* @__PURE__ */v("div",{ref:i,style:{width:"100%",height:"100%"}}),V&&/* @__PURE__ */w("div",{className:"absolute top-2 left-2 w-64 max-h-[80%] flex flex-col bg-white/95 backdrop-blur border border-gray-200 rounded-md shadow-xl z-10 text-xs",children:[
110
+ /* @__PURE__ */v("div",{ref:i,style:{width:"100%",height:"100%"}}),Y&&/* @__PURE__ */w("div",{className:"absolute top-2 left-2 w-64 max-h-[80%] flex flex-col bg-white/95 backdrop-blur border border-gray-200 rounded-md shadow-xl z-10 text-xs",children:[
111
111
  /* @__PURE__ */w("div",{className:"flex items-center justify-between px-2 min-h-8 py-1 border-b border-line bg-surface-sunken",children:[
112
112
  /* @__PURE__ */v("span",{className:"font-medium text-gray-700",children:C.meshes}),
113
113
  /* @__PURE__ */v("button",{onClick:()=>_(!1),className:"px-2 py-0.5 rounded hover:bg-gray-200 text-gray-600",title:A.closePanel,children:"×"})]}),
@@ -135,7 +135,7 @@ return w("div",{className:"flex flex-col h-full bg-white",children:[
135
135
  /* @__PURE__ */w("div",{className:"flex items-center justify-between gap-2 mb-1",children:[
136
136
  /* @__PURE__ */v("span",{children:C.edgeThreshold}),
137
137
  /* @__PURE__ */w("span",{className:"text-gray-500 tabular-nums",children:[G,"°"]})]}),
138
- /* @__PURE__ */v("input",{type:"range",min:0,max:45,step:1,value:G,onChange:e=>Y(Number(e.target.value)),className:"w-full accent-blue-500"})]}),
138
+ /* @__PURE__ */v("input",{type:"range",min:0,max:45,step:1,value:G,onChange:e=>V(Number(e.target.value)),className:"w-full accent-blue-500"})]}),
139
139
  /* @__PURE__ */w("div",{className:"border-t border-gray-200 -mx-3 px-3 pt-3 mt-1",children:[
140
140
  /* @__PURE__ */w("label",{className:"flex items-center justify-between gap-2",children:[
141
141
  /* @__PURE__ */v("span",{className:"font-medium",children:C.sectionView}),
@@ -156,7 +156,7 @@ return w("div",{className:"flex flex-col h-full bg-white",children:[
156
156
  /* @__PURE__ */v("span",{children:C.position}),
157
157
  /* @__PURE__ */w("span",{className:"text-gray-500 tabular-nums",children:[Math.round(100*se),"%"]})]}),
158
158
  /* @__PURE__ */v("input",{type:"range",min:0,max:1,step:.01,value:se,onChange:e=>ie(Number(e.target.value)),className:"w-full accent-blue-500"})]})]})]})]}),
159
- /* @__PURE__ */v("div",{className:"px-3 py-2 border-t border-gray-200",children:/* @__PURE__ */v("button",{onClick:()=>{I("#f5f6f8"),X(!0),U("#000000"),Y(1),q(!1),te("x"),re(!1),ie(.5),ae(0)},className:"w-full text-2xs text-ink bg-gray-100 hover:bg-gray-200 rounded py-2 transition-colors",children:C.resetDisplay})})]})]})})]})}function H({url:e,filename:t,onDownload:s,onEmail:i}){const[o,a]=g(1),[l,c]=g(!1),[u,p]=g(!1),h=y(null),x=f().preview,b="px-2 py-1 rounded hover:bg-gray-200 transition-colors text-gray-600 flex items-center gap-1";/* @__PURE__ */
159
+ /* @__PURE__ */v("div",{className:"px-3 py-2 border-t border-gray-200",children:/* @__PURE__ */v("button",{onClick:()=>{I("#f5f6f8"),X(!0),U("#000000"),V(1),q(!1),te("x"),re(!1),ie(.5),ae(0)},className:"w-full text-2xs text-ink bg-gray-100 hover:bg-gray-200 rounded py-2 transition-colors",children:C.resetDisplay})})]})]})})]})}function H({url:e,filename:t,onDownload:s,onEmail:i}){const[o,a]=g(1),[l,c]=g(!1),[u,p]=g(!1),h=y(null),x=f().preview,b="px-2 py-1 rounded hover:bg-gray-200 transition-colors text-gray-600 flex items-center gap-1";/* @__PURE__ */
160
160
  return w("div",{className:"flex flex-col h-full",children:[
161
161
  /* @__PURE__ */w(n,{children:[!u&&/* @__PURE__ */w(k,{children:[
162
162
  /* @__PURE__ */v("button",{onClick:()=>a(e=>Math.max(.1,Math.round(100*(e-.25))/100)),className:b,children:"−"}),
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{openFilesInTrashMode,setFilesDemoTree}from"../chunk-6DZGOGB2.js";export{setBrowserStartUrl}from"../chunk-LWLCNQY7.js";export{BUILTIN_APP_INFO}from"../chunk-BQ5CRQYR.js";import{setSpreadsheetPreview as e}from"../chunk-OY3JH66O.js";export{FilesQuotaError,SPREADSHEET_PREVIEW_UPDATE_EVENT,claimSpreadsheetPreviewStage,createFileServerStore,peekSpreadsheetPreviewStage,setFilesStore,setSpreadsheetPreview}from"../chunk-OY3JH66O.js";import{setPdfPreview as t}from"../chunk-ESL5TDNA.js";export{setPdfPreview}from"../chunk-ESL5TDNA.js";import"../chunk-UWF45S5L.js";import"../chunk-4LXCCZDM.js";import"../chunk-AW7TOB6N.js";import"../chunk-KNUR2UEG.js";import"../chunk-JDCM2VHG.js";import"../chunk-Y4RERPFN.js";import"../chunk-5A7MWTXX.js";import"../chunk-ZDMZM7HD.js";import"../chunk-HE767CVB.js";import"../chunk-CAXOKGMB.js";import"../chunk-PMJMYH5O.js";import"../chunk-N7JX27JE.js";import"../chunk-3DVNXNTF.js";import"../chunk-2762IAB7.js";import"../chunk-VWGWZY7A.js";import"../chunk-7QSDPSXP.js";import"../chunk-5JUG74UR.js";import"../chunk-SCGBCBXP.js";import"../chunk-F3ZOO23R.js";import"../chunk-2QY5BJLA.js";import"../chunk-UGTRSRIW.js";import"../chunk-KC3EX26K.js";import"../chunk-RJ3J4BLH.js";import"../chunk-CDAJKLGL.js";import"../chunk-JPNAEN53.js";import"../chunk-IFQXTIMY.js";import"../chunk-URHGHXDN.js";import"../chunk-5QFPTDQF.js";import"../chunk-UJJXWLHE.js";import"../chunk-XWFLIGDQ.js";import"../chunk-UIWGVOFH.js";import"../chunk-J75ZT2JQ.js";import"../chunk-R2VKEMZH.js";import"../chunk-CJH2BGXY.js";import"../chunk-QQ2LDC6C.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-STKJA4PV.js";import{toast_default as o}from"../chunk-TRWHVG3A.js";import"../chunk-UQYNPYF4.js";import"../chunk-MRJKZWWV.js";import"../chunk-TWVUQUUD.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import{currentShellStrings as r}from"../chunk-43MCNASD.js";import"../chunk-C3QOHMR6.js";import{lazy as i}from"react";function n(e){const t=/\.([a-z0-9]+)(?:[?#].*)?$/i.exec((e||"").trim());return t?t[1].toLowerCase():""}var s=/* @__PURE__ */new Set(["csv","tsv"]),c=/* @__PURE__ */new Set(["xlsx","xls","xlsm","ods"]),m=/* @__PURE__ */new Set(["png","jpg","jpeg","gif","webp","bmp","svg","avif"]),p=/* @__PURE__ */new Set(["step","stp","stl","obj","gltf","glb","3mf","iges","igs"]);function a(e){const t=n(e);return"pdf"===t?"pdf":"dxf"===t?"dxf":s.has(t)?"csv":m.has(t)?"image":p.has(t)?"3d":null}function u(e){window.open(e,"_blank","noopener,noreferrer")}async function l(e,t,o){if(t.fetchBlob)return(await t.fetchBlob(o)).text();const r=await fetch(e);if(!r.ok)throw new Error(`fetch failed: ${r.status}`);return r.text()}function h(e,t){return(e instanceof Error?e.message:"")||t}async function k(i,s,m={}){const p=r().attachment,k=i?.url||"",j=i?.filename||p.fallbackName;if(!k&&!m.fetchBlob)return void o.error(p.noLink);const d=a(j)??a(k);if("csv"===d){try{e({csv:await l(k,m,i),filename:j}),s("/spreadsheet")}catch{o.error(p.spreadsheetFailed),k&&u(k)}return}if(c.has(n(j)||n(k)))return o.error(p.workbookUnavailable),void(k&&u(k));if(!d)return k?(o.info(p.noViewer),void u(k)):void o.error(p.noLink);if(!m.fetchBlob)return t({url:k,filename:j,kind:d}),void s("/preview");const f=t({filename:j,kind:d,converting:!0,convertingMessage:m.loadingMessage||p.loading});s("/preview");try{const e=await m.fetchBlob(i);f.update({url:URL.createObjectURL(e),filename:j,kind:d})}catch(e){f.update({filename:j,kind:d,converting:!1,convertingMessage:h(e,p.loadFailed)})}}var j=i(()=>import("../Calculator-AHBFZ4EN.js")),d=i(()=>import("../Weather-WMQQXWHH.js")),f=i(()=>import("../CurrencyConverter-PZYRBADV.js")),w=i(()=>import("../PomodoroTimer-WGN2KNSB.js")),g=i(()=>import("../Notepad-U4OSPCX3.js")),S=i(()=>import("../WorldClock-IK3WTHVW.js")),v=i(()=>import("../Stock-5GEEDQVT.js")),P=i(()=>import("../Preview-JGRBT3EM.js")),B=i(()=>import("../PdfViewer-GUXUWGMG.js")),T=i(()=>import("../Files-EX6JA4CJ.js")),C=i(()=>import("../Browser-Z4Q2NDFT.js")),E={"/calculator":{component:j,label:"Calculator",size:"sm",allowPinOnTop:!0,utility:!0,widget:!0,dimensions:[280,420]},"/notepad":{component:g,label:"Notepad",size:"lg",allowPinOnTop:!0,flushBody:!0},"/weather":{component:d,label:"Weather",size:"sm",utility:!0,widget:!0,autoHeight:!0,dimensions:[320,400]},"/currency":{component:f,label:"Currency Converter",size:"sm",utility:!0,widget:!0,autoHeight:!0,dimensions:[320,480]},"/pomodoro":{component:w,label:"Pomodoro Timer",size:"sm",utility:!0,widget:!0,dimensions:[320,600]},"/world-clock":{component:S,label:"World Clock",size:"sm",utility:!0,widget:!0,autoHeight:!0,dimensions:[320,480]},"/stock":{component:v,label:"Stocks",size:"sm",utility:!0,widget:!0,autoHeight:!0,dimensions:[320,360]}},N={"/preview":{component:P,label:"Preview",size:"2xl",appStyle:!0,multiInstance:!0},"/files":{component:T,label:"Files",size:"xl",appStyle:!0}},H={"/browser":{component:C,label:"Browser",size:"2xl",appStyle:!0,multiInstance:!0}},W={...E,...N,...H};export{C as Browser,j as Calculator,f as CurrencyConverter,T as Files,g as Notepad,B as PdfViewer,w as PomodoroTimer,P as Preview,v as Stock,d as Weather,S as WorldClock,a as attachmentKind,W as bundledApps,N as documentApps,k as openAttachment,E as utilityApps,H as webApps};
2
+ export{openFilesInTrashMode,setFilesDemoTree}from"../chunk-6DZGOGB2.js";export{setBrowserStartUrl}from"../chunk-LWLCNQY7.js";export{BUILTIN_APP_INFO}from"../chunk-KSOMKQ5U.js";import{setSpreadsheetPreview as e}from"../chunk-OY3JH66O.js";export{FilesQuotaError,SPREADSHEET_PREVIEW_UPDATE_EVENT,claimSpreadsheetPreviewStage,createFileServerStore,peekSpreadsheetPreviewStage,setFilesStore,setSpreadsheetPreview}from"../chunk-OY3JH66O.js";import{setPdfPreview as t}from"../chunk-ESL5TDNA.js";export{setPdfPreview}from"../chunk-ESL5TDNA.js";import"../chunk-UWF45S5L.js";import"../chunk-4LXCCZDM.js";import"../chunk-AW7TOB6N.js";import"../chunk-KNUR2UEG.js";import"../chunk-JDCM2VHG.js";import"../chunk-Y4RERPFN.js";import"../chunk-5A7MWTXX.js";import"../chunk-ZDMZM7HD.js";import"../chunk-HE767CVB.js";import"../chunk-CAXOKGMB.js";import"../chunk-PMJMYH5O.js";import"../chunk-N7JX27JE.js";import"../chunk-3DVNXNTF.js";import"../chunk-2762IAB7.js";import"../chunk-VWGWZY7A.js";import"../chunk-7QSDPSXP.js";import"../chunk-5JUG74UR.js";import"../chunk-SCGBCBXP.js";import"../chunk-F3ZOO23R.js";import"../chunk-2QY5BJLA.js";import"../chunk-UGTRSRIW.js";import"../chunk-KC3EX26K.js";import"../chunk-4XSE5PV2.js";import"../chunk-CDAJKLGL.js";import"../chunk-JPNAEN53.js";import"../chunk-IFQXTIMY.js";import"../chunk-URHGHXDN.js";import"../chunk-5QFPTDQF.js";import"../chunk-UJJXWLHE.js";import"../chunk-XWFLIGDQ.js";import"../chunk-UIWGVOFH.js";import"../chunk-J75ZT2JQ.js";import"../chunk-R2VKEMZH.js";import"../chunk-CJH2BGXY.js";import"../chunk-QQ2LDC6C.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-STKJA4PV.js";import{toast_default as o}from"../chunk-TRWHVG3A.js";import"../chunk-UQYNPYF4.js";import"../chunk-MRJKZWWV.js";import"../chunk-TWVUQUUD.js";import"../chunk-5FYDNH4Y.js";import"../chunk-LNXBTK7Q.js";import{currentShellStrings as r}from"../chunk-43MCNASD.js";import"../chunk-C3QOHMR6.js";import{lazy as i}from"react";function n(e){const t=/\.([a-z0-9]+)(?:[?#].*)?$/i.exec((e||"").trim());return t?t[1].toLowerCase():""}var s=/* @__PURE__ */new Set(["csv","tsv"]),c=/* @__PURE__ */new Set(["xlsx","xls","xlsm","ods"]),m=/* @__PURE__ */new Set(["png","jpg","jpeg","gif","webp","bmp","svg","avif"]),p=/* @__PURE__ */new Set(["step","stp","stl","obj","gltf","glb","3mf","iges","igs"]);function a(e){const t=n(e);return"pdf"===t?"pdf":"dxf"===t?"dxf":s.has(t)?"csv":m.has(t)?"image":p.has(t)?"3d":null}function u(e){window.open(e,"_blank","noopener,noreferrer")}async function l(e,t,o){if(t.fetchBlob)return(await t.fetchBlob(o)).text();const r=await fetch(e);if(!r.ok)throw new Error(`fetch failed: ${r.status}`);return r.text()}function h(e,t){return(e instanceof Error?e.message:"")||t}async function k(i,s,m={}){const p=r().attachment,k=i?.url||"",j=i?.filename||p.fallbackName;if(!k&&!m.fetchBlob)return void o.error(p.noLink);const d=a(j)??a(k);if("csv"===d){try{e({csv:await l(k,m,i),filename:j}),s("/spreadsheet")}catch{o.error(p.spreadsheetFailed),k&&u(k)}return}if(c.has(n(j)||n(k)))return o.error(p.workbookUnavailable),void(k&&u(k));if(!d)return k?(o.info(p.noViewer),void u(k)):void o.error(p.noLink);if(!m.fetchBlob)return t({url:k,filename:j,kind:d}),void s("/preview");const f=t({filename:j,kind:d,converting:!0,convertingMessage:m.loadingMessage||p.loading});s("/preview");try{const e=await m.fetchBlob(i);f.update({url:URL.createObjectURL(e),filename:j,kind:d})}catch(e){f.update({filename:j,kind:d,converting:!1,convertingMessage:h(e,p.loadFailed)})}}var j=i(()=>import("../Calculator-AHBFZ4EN.js")),d=i(()=>import("../Weather-WMQQXWHH.js")),f=i(()=>import("../CurrencyConverter-PZYRBADV.js")),w=i(()=>import("../PomodoroTimer-WGN2KNSB.js")),S=i(()=>import("../Notepad-7FEHOFEE.js")),g=i(()=>import("../WorldClock-IK3WTHVW.js")),v=i(()=>import("../Stock-5GEEDQVT.js")),E=i(()=>import("../Preview-XJ3PGGRE.js")),P=i(()=>import("../PdfViewer-GUXUWGMG.js")),W=i(()=>import("../Files-A5ULCW3Q.js")),H=i(()=>import("../Browser-FQUSLYYL.js")),N={"/calculator":{component:j,label:"Calculator",size:"sm",allowPinOnTop:!0,utility:!0,widget:!0,dimensions:[280,420]},"/notepad":{component:S,label:"Notepad",size:"lg",allowPinOnTop:!0,flushBody:!0},"/weather":{component:d,label:"Weather",size:"sm",utility:!0,widget:!0,autoHeight:!0,dimensions:[320,400]},"/currency":{component:f,label:"Currency Converter",size:"sm",utility:!0,widget:!0,autoHeight:!0,dimensions:[320,480]},"/pomodoro":{component:w,label:"Pomodoro Timer",size:"sm",utility:!0,widget:!0,dimensions:[320,600]},"/world-clock":{component:g,label:"World Clock",size:"sm",utility:!0,widget:!0,autoHeight:!0,dimensions:[320,480]},"/stock":{component:v,label:"Stocks",size:"sm",utility:!0,widget:!0,autoHeight:!0,dimensions:[320,360]}},T={"/preview":{component:E,label:"Preview",size:"2xl",appStyle:!0,multiInstance:!0},"/files":{component:W,label:"Files",size:"xl",appStyle:!0}},b={"/browser":{component:H,label:"Browser",size:"2xl",appStyle:!0,multiInstance:!0}},B={...N,...T,...b};export{H as Browser,j as Calculator,f as CurrencyConverter,W as Files,S as Notepad,P as PdfViewer,w as PomodoroTimer,E as Preview,v as Stock,d as Weather,g as WorldClock,a as attachmentKind,B as bundledApps,T as documentApps,k as openAttachment,N as utilityApps,b as webApps};
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import{createRequire as e}from"module";import{join as n}from"path";import{existsSync as t,readFileSync as i,readdirSync as r}from"fs";var o=/[.+^$()|[\]\\]/g;function s(e){let n="",t=0;for(let i=0;i<e.length;i++){const r=e[i];"*"===r?"*"===e[i+1]?"/"===e[i+2]?(n+="(?:[^/]+/)*",i+=2):(n+=".*",i+=1):n+="[^/]*":"?"===r?n+="[^/]":"{"===r?(n+="(?:",t+=1):"}"===r&&t>0?(n+=")",t-=1):n+=","===r&&t>0?"|":r.replace(o,"\\$&")}if(0!==t)throw new Error(`unbalanced { in glob "${e}"`);return new RegExp(`^${n}$`)}function a(e){const n=e.map(s);return e=>n.some(n=>n.test(e))}var c=new Set(["node_modules",".git"]),g=new Set(["dist","coverage",".next",".turbo"]);function l(e){const n=e.search(/[*?{]/),t=-1===n?e:e.slice(0,n),i=t.lastIndexOf("/");return-1===i?"":t.slice(0,i)}function u(e,t){const i=a(t),o=[...new Set(t.map(l))].sort(),s=o.filter(e=>!o.some(n=>n!==e&&(""===n||e.startsWith(`${n}/`)))),u=new Set,d=t=>{let o;try{o=r(n(e,t),{withFileTypes:!0})}catch{return}for(const e of o){const n=t?`${t}/${e.name}`:e.name;e.isDirectory()?c.has(e.name)||""===t&&g.has(e.name)||d(n):e.isFile()&&i(n)&&u.add(n)}};for(const e of s)d(e);return[...u].sort(h)}var h=(e,n)=>e<n?-1:e>n?1:0,d={busy:{words:["Accepting","Adding","Applying","Approving","Arranging","Asking","Assigning","Booking","Building","Calculating","Cancelling","Capturing","Changing","Checking","Choosing","Closing","Combining","Comparing","Completing","Confirming","Connecting","Converting","Copying","Correcting","Counting","Creating","Deleting","Detaching","Downloading","Drawing","Duplicating","Emailing","Ending","Exporting","Fetching","Filing","Finding","Flushing","Generating","Grouping","Importing","Linking","Loading","Locating","Looking","Making","Marking","Matching","Measuring","Merging","Moving","Opening","Ordering","Paying","Pending","Posting","Preparing","Previewing","Pricing","Processing","Provisioning","Publishing","Purging","Pushing","Queued","Queuing","Quoting","Re-booking","Re-importing","Re-opening","Reading","Rebooting","Rebuilding","Receiving","Reconciling","Reconnecting","Recording","Refreshing","Refunding","Regenerating","Registering","Reinstating","Rejecting","Removing","Reopening","Requesting","Resending","Resetting","Resolving","Restarting","Restoring","Resuming","Retrying","Reversing","Reverting","Running","Saving","Searching","Sending","Setting","Settling","Sharing","Signing","Splitting","Starting","Submitting","Suggesting","Switching","Syncing","Taking","Testing","Transferring","Typing","Updating","Uploading","Verifying","Waiting","Withdrawing","Working"]}};new Set((d.busy?.words??[]).map(e=>e.toLowerCase()));var f=class extends Error{},m=new Set(["$schema","schema","include","exclude","allow"]),p=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),w=e=>"string"==typeof e&&""!==e.trim();var y="d3as2htf4hwbtr.cloudfront.net",S={dealer:{bucket:"inovit-dealer-portal-assets",hosts:["d201q0i87q901p.cloudfront.net"],key_pattern:"^marketing/"},media:{bucket:"regis-media-production",hosts:["media.regis.design","d21nnr9ivf9hcc.cloudfront.net"],key_pattern:"^[a-z0-9_]+/storefront/(?!uploads/thumbs/)"},site:{bucket:"inovit-ecommerce-media",hosts:["cdn.inovit.com","dhxlibd8r3td0.cloudfront.net"],key_pattern:"^images/"}},$=Object.values(S),R=Object.freeze([...new Set([...$.flatMap(e=>e.hosts),y,...$.map(e=>e.bucket)])].sort()),b=new RegExp([...R.map(e=>{return`(?<![\\w-])${n=e,n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}(?![\\w-])`;var n}),"(?<![\\w-])[a-z0-9]+\\.cloudfront\\.net(?![\\w-])","(?<![\\w-])(?:[a-z0-9-]+\\.)*s3(?:[.-][a-z0-9-]+)*\\.amazonaws\\.com(?![\\w-])","s3://"].join("|"),"gi");function k(e,n,t){const i=e.createSourceFile(n,t,e.ScriptTarget.Latest,!0,function(e,n){return n.endsWith(".tsx")?e.ScriptKind.TSX:n.endsWith(".jsx")?e.ScriptKind.JSX:/\.[cm]?js$/.test(n)?e.ScriptKind.JS:e.ScriptKind.TS}(e,n)),r=[],o=(e,n)=>{const t=i.getLineAndCharacterOfPosition(e.getStart(i)).line+1;for(const e of function(e){return[...e.matchAll(b)].map(e=>({match:e[0],index:e.index??0}))}(n)){const i=n.slice(0,e.index);r.push({line:t+(i.match(/\n/g)?.length??0),match:e.match})}},s=n=>{e.isStringLiteral(n)||e.isNoSubstitutionTemplateLiteral(n)||e.isTemplateHead(n)||e.isTemplateMiddle(n)||e.isTemplateTail(n)?o(n,n.text):e.isRegularExpressionLiteral(n)&&o(n,n.text.replace(/\\(.)/g,"$1")),e.forEachChild(n,s)};return s(i),r}var v="media-host-check.config.json",x="efficient-shell-media-host-check",C=`${x}: no code writes a media origin; files are reached through the storage backend, the API's URL, media() or imageCopyUrl() (harness API-15, SSOT-2).\n\n ${x} check this repository; exits 1 on a finding\n ${x} --json print the result as JSON\n\nRefused in any string, template or regular expression: every host and bucket in\nthe image-copies contract, any *.cloudfront.net host, any S3 endpoint, and s3://.\nReads ${v} in the current directory.`;function A(e,t,r){const o=[],s=a(r.exclude);for(const e of r.include)0===u(t,[e]).length&&o.push(`include "${e}" matches no file; delete it`);const c=u(t,r.include).filter(e=>(e=>/\.(?:[cm]?[jt]s|[jt]sx)$/.test(e)&&!e.endsWith(".d.ts"))(e)&&!s(e)),g=[];for(const r of c)for(const o of k(e,r,i(n(t,r),"utf8")))g.push({file:r,...o});const l=(e,n)=>e.toLowerCase()===n.toLowerCase();for(const e of r.allow)g.some(n=>n.file===e.file&&l(e.match,n.match))||o.push(`allow ${e.file} "${e.match}" matches nothing any more; delete it`);return{files:c.length,findings:g.filter(e=>!(e=>r.allow.some(n=>n.file===e.file&&l(n.match,e.match)))(e)),problems:o}}process.exitCode=function(e,r){let o=!1;for(const n of e){if("--help"===n||"-h"===n)return r.out(C),0;if("--version"===n||"-v"===n)return r.out(r.version),0;if("--json"!==n)return r.err(`${x}: unknown argument "${n}"\n\n${C}`),2;o=!0}const s=n(r.cwd,v);if(!t(s))return r.err(`${x}: no ${v} in ${r.cwd}. Run it from the repository root.`),2;let a;try{const e=function(e,n="media-host-check.config.json"){const t=[];if(!p(e))throw new f(`${n}: expected an object`);for(const n of Object.keys(e))m.has(n)||t.push(`unknown key "${n}"`);1!==e.schema&&t.push('"schema" must be 1');const i=(n,i)=>{const r=e[n];return void 0!==r||i?!Array.isArray(r)||!r.every(w)||i&&0===r.length?(t.push(`"${n}" must be ${i?"a non-empty":"an"} array of globs`),[]):r:[]},r=i("include",!0),o=i("exclude",!1),s=[];void 0===e.allow||Array.isArray(e.allow)||t.push('"allow" must be an array');for(const[n,i]of(Array.isArray(e.allow)?e.allow:[]).entries()){if(!(p(i)&&w(i.file)&&w(i.match)&&w(i.reason))){t.push(`allow[${n}] needs "file", "match" and "reason", each a non-empty string`);continue}const e=Object.keys(i).filter(e=>!["file","match","reason"].includes(e));e.length&&t.push(`allow[${n}] has unknown keys: ${e.join(", ")}`),s.push({file:i.file,match:i.match,reason:i.reason})}if(t.length)throw new f(`${n}:\n ${t.join("\n ")}`);return{schema:1,include:r,exclude:o,allow:s}}(JSON.parse(i(s,"utf8")),v);a=A(r.loadTypeScript(),r.cwd,e)}catch(e){return r.err(`${x}: ${e instanceof f||e instanceof SyntaxError?e.message:String(e)}`),2}const c=a.findings.length>0||a.problems.length>0;if(o)return r.out(JSON.stringify({ok:!c,...a},null,2)),c?1:0;if(!c)return r.out(`${x}: ${a.files} files, no media origin written in code (harness API-15, SSOT-2).`),0;for(const e of a.findings)r.err(`${e.file}:${e.line} "${e.match}" is a media origin written in code.`);for(const e of a.problems)r.err(`${v}: ${e}`);return a.findings.length&&r.err(`\nReach the file through the storage backend, the URL the API returns, media() or imageCopyUrl() (harness API-15, SSOT-2). An origin that must stay goes in "allow" in ${v}, with its reason.`),1}(process.argv.slice(2),{cwd:process.cwd(),out:e=>console.log(e),err:e=>console.error(e),loadTypeScript:()=>function(t){for(const i of[n(process.cwd(),"package.json"),t])try{return e(i)("typescript")}catch{}throw new Error("typescript is not installed")}(import.meta.url),version:"12.4.0"});
2
+ import{createRequire as e}from"module";import{join as n}from"path";import{existsSync as t,readFileSync as i,readdirSync as r}from"fs";var o=/[.+^$()|[\]\\]/g;function s(e){let n="",t=0;for(let i=0;i<e.length;i++){const r=e[i];"*"===r?"*"===e[i+1]?"/"===e[i+2]?(n+="(?:[^/]+/)*",i+=2):(n+=".*",i+=1):n+="[^/]*":"?"===r?n+="[^/]":"{"===r?(n+="(?:",t+=1):"}"===r&&t>0?(n+=")",t-=1):n+=","===r&&t>0?"|":r.replace(o,"\\$&")}if(0!==t)throw new Error(`unbalanced { in glob "${e}"`);return new RegExp(`^${n}$`)}function a(e){const n=e.map(s);return e=>n.some(n=>n.test(e))}var c=new Set(["node_modules",".git"]),g=new Set(["dist","coverage",".next",".turbo"]);function l(e){const n=e.search(/[*?{]/),t=-1===n?e:e.slice(0,n),i=t.lastIndexOf("/");return-1===i?"":t.slice(0,i)}function u(e,t){const i=a(t),o=[...new Set(t.map(l))].sort(),s=o.filter(e=>!o.some(n=>n!==e&&(""===n||e.startsWith(`${n}/`)))),u=new Set,d=t=>{let o;try{o=r(n(e,t),{withFileTypes:!0})}catch{return}for(const e of o){const n=t?`${t}/${e.name}`:e.name;e.isDirectory()?c.has(e.name)||""===t&&g.has(e.name)||d(n):e.isFile()&&i(n)&&u.add(n)}};for(const e of s)d(e);return[...u].sort(h)}var h=(e,n)=>e<n?-1:e>n?1:0,d={busy:{words:["Accepting","Adding","Applying","Approving","Arranging","Asking","Assigning","Booking","Building","Calculating","Cancelling","Capturing","Changing","Checking","Choosing","Closing","Combining","Comparing","Completing","Confirming","Connecting","Converting","Copying","Correcting","Counting","Creating","Deleting","Detaching","Downloading","Drawing","Duplicating","Emailing","Ending","Exporting","Fetching","Filing","Finding","Flushing","Generating","Grouping","Importing","Linking","Loading","Locating","Looking","Making","Marking","Matching","Measuring","Merging","Moving","Opening","Ordering","Paying","Pending","Posting","Preparing","Previewing","Pricing","Processing","Provisioning","Publishing","Purging","Pushing","Queued","Queuing","Quoting","Re-booking","Re-importing","Re-opening","Reading","Rebooting","Rebuilding","Receiving","Reconciling","Reconnecting","Recording","Refreshing","Refunding","Regenerating","Registering","Reinstating","Rejecting","Removing","Reopening","Requesting","Resending","Resetting","Resolving","Restarting","Restoring","Resuming","Retrying","Reversing","Reverting","Running","Saving","Searching","Sending","Setting","Settling","Sharing","Signing","Splitting","Starting","Submitting","Suggesting","Switching","Syncing","Taking","Testing","Transferring","Typing","Updating","Uploading","Verifying","Waiting","Withdrawing","Working"]}};new Set((d.busy?.words??[]).map(e=>e.toLowerCase()));var f=class extends Error{},m=new Set(["$schema","schema","include","exclude","allow"]),p=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),w=e=>"string"==typeof e&&""!==e.trim();var y="d3as2htf4hwbtr.cloudfront.net",S={dealer:{bucket:"inovit-dealer-portal-assets",hosts:["d201q0i87q901p.cloudfront.net"],key_pattern:"^marketing/"},media:{bucket:"regis-media-production",hosts:["media.regis.design","d21nnr9ivf9hcc.cloudfront.net"],key_pattern:"^[a-z0-9_]+/storefront/(?!uploads/thumbs/)"},site:{bucket:"inovit-ecommerce-media",hosts:["cdn.inovit.com","dhxlibd8r3td0.cloudfront.net"],key_pattern:"^images/"}},$=Object.values(S),R=Object.freeze([...new Set([...$.flatMap(e=>e.hosts),y,...$.map(e=>e.bucket)])].sort()),b=new RegExp([...R.map(e=>{return`(?<![\\w-])${n=e,n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}(?![\\w-])`;var n}),"(?<![\\w-])[a-z0-9]+\\.cloudfront\\.net(?![\\w-])","(?<![\\w-])(?:[a-z0-9-]+\\.)*s3(?:[.-][a-z0-9-]+)*\\.amazonaws\\.com(?![\\w-])","s3://"].join("|"),"gi");function k(e,n,t){const i=e.createSourceFile(n,t,e.ScriptTarget.Latest,!0,function(e,n){return n.endsWith(".tsx")?e.ScriptKind.TSX:n.endsWith(".jsx")?e.ScriptKind.JSX:/\.[cm]?js$/.test(n)?e.ScriptKind.JS:e.ScriptKind.TS}(e,n)),r=[],o=(e,n)=>{const t=i.getLineAndCharacterOfPosition(e.getStart(i)).line+1;for(const e of function(e){return[...e.matchAll(b)].map(e=>({match:e[0],index:e.index??0}))}(n)){const i=n.slice(0,e.index);r.push({line:t+(i.match(/\n/g)?.length??0),match:e.match})}},s=n=>{e.isStringLiteral(n)||e.isNoSubstitutionTemplateLiteral(n)||e.isTemplateHead(n)||e.isTemplateMiddle(n)||e.isTemplateTail(n)?o(n,n.text):e.isRegularExpressionLiteral(n)&&o(n,n.text.replace(/\\(.)/g,"$1")),e.forEachChild(n,s)};return s(i),r}var v="media-host-check.config.json",x="efficient-shell-media-host-check",C=`${x}: no code writes a media origin; files are reached through the storage backend, the API's URL, media() or imageCopyUrl() (harness API-15, SSOT-2).\n\n ${x} check this repository; exits 1 on a finding\n ${x} --json print the result as JSON\n\nRefused in any string, template or regular expression: every host and bucket in\nthe image-copies contract, any *.cloudfront.net host, any S3 endpoint, and s3://.\nReads ${v} in the current directory.`;function A(e,t,r){const o=[],s=a(r.exclude);for(const e of r.include)0===u(t,[e]).length&&o.push(`include "${e}" matches no file; delete it`);const c=u(t,r.include).filter(e=>(e=>/\.(?:[cm]?[jt]s|[jt]sx)$/.test(e)&&!e.endsWith(".d.ts"))(e)&&!s(e)),g=[];for(const r of c)for(const o of k(e,r,i(n(t,r),"utf8")))g.push({file:r,...o});const l=(e,n)=>e.toLowerCase()===n.toLowerCase();for(const e of r.allow)g.some(n=>n.file===e.file&&l(e.match,n.match))||o.push(`allow ${e.file} "${e.match}" matches nothing any more; delete it`);return{files:c.length,findings:g.filter(e=>!(e=>r.allow.some(n=>n.file===e.file&&l(n.match,e.match)))(e)),problems:o}}process.exitCode=function(e,r){let o=!1;for(const n of e){if("--help"===n||"-h"===n)return r.out(C),0;if("--version"===n||"-v"===n)return r.out(r.version),0;if("--json"!==n)return r.err(`${x}: unknown argument "${n}"\n\n${C}`),2;o=!0}const s=n(r.cwd,v);if(!t(s))return r.err(`${x}: no ${v} in ${r.cwd}. Run it from the repository root.`),2;let a;try{const e=function(e,n="media-host-check.config.json"){const t=[];if(!p(e))throw new f(`${n}: expected an object`);for(const n of Object.keys(e))m.has(n)||t.push(`unknown key "${n}"`);1!==e.schema&&t.push('"schema" must be 1');const i=(n,i)=>{const r=e[n];return void 0!==r||i?!Array.isArray(r)||!r.every(w)||i&&0===r.length?(t.push(`"${n}" must be ${i?"a non-empty":"an"} array of globs`),[]):r:[]},r=i("include",!0),o=i("exclude",!1),s=[];void 0===e.allow||Array.isArray(e.allow)||t.push('"allow" must be an array');for(const[n,i]of(Array.isArray(e.allow)?e.allow:[]).entries()){if(!(p(i)&&w(i.file)&&w(i.match)&&w(i.reason))){t.push(`allow[${n}] needs "file", "match" and "reason", each a non-empty string`);continue}const e=Object.keys(i).filter(e=>!["file","match","reason"].includes(e));e.length&&t.push(`allow[${n}] has unknown keys: ${e.join(", ")}`),s.push({file:i.file,match:i.match,reason:i.reason})}if(t.length)throw new f(`${n}:\n ${t.join("\n ")}`);return{schema:1,include:r,exclude:o,allow:s}}(JSON.parse(i(s,"utf8")),v);a=A(r.loadTypeScript(),r.cwd,e)}catch(e){return r.err(`${x}: ${e instanceof f||e instanceof SyntaxError?e.message:String(e)}`),2}const c=a.findings.length>0||a.problems.length>0;if(o)return r.out(JSON.stringify({ok:!c,...a},null,2)),c?1:0;if(!c)return r.out(`${x}: ${a.files} files, no media origin written in code (harness API-15, SSOT-2).`),0;for(const e of a.findings)r.err(`${e.file}:${e.line} "${e.match}" is a media origin written in code.`);for(const e of a.problems)r.err(`${v}: ${e}`);return a.findings.length&&r.err(`\nReach the file through the storage backend, the URL the API returns, media() or imageCopyUrl() (harness API-15, SSOT-2). An origin that must stay goes in "allow" in ${v}, with its reason.`),1}(process.argv.slice(2),{cwd:process.cwd(),out:e=>console.log(e),err:e=>console.error(e),loadTypeScript:()=>function(t){for(const i of[n(process.cwd(),"package.json"),t])try{return e(i)("typescript")}catch{}throw new Error("typescript is not installed")}(import.meta.url),version:"12.5.0"});