efficient-shell 7.18.0 → 7.19.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 (36) hide show
  1. package/README.md +2 -2
  2. package/dist/{Browser-AYWOX66T.js → Browser-62T2OSLK.js} +13 -13
  3. package/dist/{Calculator-NGSHZWOR.js → Calculator-YSHOGYHB.js} +22 -22
  4. package/dist/{ConfirmDialog-JMQI6CGW.js → ConfirmDialog-AVFQGXKL.js} +1 -1
  5. package/dist/{CurrencyConverter-PICVES6A.js → CurrencyConverter-V6LH7VQP.js} +9 -9
  6. package/dist/{Documents-AOXBUBLH.js → Documents-R6IE64IZ.js} +10 -10
  7. package/dist/{Files-EWRVA6X3.js → Files-RVESLH5D.js} +26 -26
  8. package/dist/{Notepad-NAWSBQ4K.js → Notepad-2QJH5T7B.js} +11 -11
  9. package/dist/{PomodoroTimer-OCAJKGQU.js → PomodoroTimer-M7BLRWTH.js} +4 -4
  10. package/dist/{Preview-NQKURFIP.js → Preview-3ZQ7SSHV.js} +22 -22
  11. package/dist/{Spreadsheet-OJ4TDOP2.js → Spreadsheet-OBFCMT3L.js} +13 -13
  12. package/dist/{Stock-74K5L75A.js → Stock-XDKUT7RW.js} +6 -6
  13. package/dist/{Weather-QTRJYIPS.js → Weather-XGIJGO23.js} +16 -16
  14. package/dist/{WorldClock-L6PSFBLE.js → WorldClock-V6S6QEXK.js} +6 -6
  15. package/dist/apps/index.js +1 -1
  16. package/dist/bin/ui-check.js +1 -1
  17. package/dist/{chunk-LUNVJKAH.js → chunk-3FLFIKAL.js} +1 -1
  18. package/dist/{chunk-EJ54JN6S.js → chunk-3LEHVM4D.js} +4 -4
  19. package/dist/chunk-76VCH7N6.js +29 -0
  20. package/dist/{chunk-QWSVX6OP.js → chunk-7JN73EKI.js} +1 -1
  21. package/dist/{chunk-BIYMQKF3.js → chunk-AJCAZNBF.js} +1 -1
  22. package/dist/chunk-FTZ5WHJM.js +1 -0
  23. package/dist/chunk-NUCPJVKD.js +108 -0
  24. package/dist/chunk-Q2HEVH2C.js +1025 -0
  25. package/dist/{index-Bup5fPMO.d.ts → index-C4iOtAIZ.d.ts} +5 -1
  26. package/dist/index.d.ts +2 -2
  27. package/dist/index.js +24 -24
  28. package/dist/page-tabs/index.js +5 -5
  29. package/dist/telemetry/index.js +1 -1
  30. package/dist/ui/index.d.ts +1 -1
  31. package/dist/ui/index.js +1 -1
  32. package/package.json +1 -1
  33. package/dist/chunk-CWKX752E.js +0 -1025
  34. package/dist/chunk-F5XBJE54.js +0 -1
  35. package/dist/chunk-IBGEW3OA.js +0 -108
  36. package/dist/chunk-QBXX5A7U.js +0 -29
@@ -1,8 +1,8 @@
1
- import{getNumberingConfigs as e}from"./chunk-BIYMQKF3.js";import{SidebarLayout as t}from"./chunk-VFBUDSMF.js";import{AboutApp as r}from"./chunk-EJ54JN6S.js";import{useWindowManager as n,client_default as o}from"./chunk-IBGEW3OA.js";import"./chunk-DSSLOQDW.js";import"./chunk-SCJT2XXU.js";import{toast_default as i}from"./chunk-RUHUTZN4.js";import{useShellPrefs as s}from"./chunk-ZRU5F2XT.js";import"./chunk-5A7MWTXX.js";import"./chunk-WYNQLAKD.js";import"./chunk-QBXX5A7U.js";import"./chunk-IQDY2YFN.js";import"./chunk-UVBK6YSR.js";import"./chunk-JTNKC4CR.js";import"./chunk-7IQ3B77H.js";import"./chunk-FIEA5CGB.js";import"./chunk-D65T4H6J.js";import"./chunk-F5XBJE54.js";import"./chunk-KNUR2UEG.js";import"./chunk-QRCDQPJA.js";import"./chunk-C3QOHMR6.js";import{timeAgo as a}from"./chunk-W32SKK3D.js";import{Icon as l}from"./chunk-ZGUQLVY4.js";import{useRef as c,useEffect as d,useState as p,useCallback as m}from"react";import{useQuery as u}from"@tanstack/react-query";import{jsxs as h,Fragment as y,jsx as g}from"react/jsx-runtime";var x=[{key:"yellow",bg:"bg-yellow-100",border:"border-yellow-300",text:"text-yellow-900",dot:"bg-yellow-400"},{key:"blue",bg:"bg-blue-100",border:"border-blue-300",text:"text-blue-900",dot:"bg-blue-400"},{key:"green",bg:"bg-green-100",border:"border-green-300",text:"text-green-900",dot:"bg-green-400"},{key:"pink",bg:"bg-pink-100",border:"border-pink-300",text:"text-pink-900",dot:"bg-pink-400"},{key:"purple",bg:"bg-purple-100",border:"border-purple-300",text:"text-purple-900",dot:"bg-purple-400"},{key:"orange",bg:"bg-orange-100",border:"border-orange-300",text:"text-orange-900",dot:"bg-orange-400"},{key:"white",bg:"bg-white",border:"border-gray-300",text:"text-gray-900",dot:"bg-gray-300"}];var b={sales_order:{entityType:"order",endpoint:"/orders/sales-orders/"},purchase_order:{entityType:"purchase_order",endpoint:"/purchase-orders/"},invoice:{entityType:"invoice",endpoint:"/invoicing/invoices/"},vendor_invoice:{entityType:"vendor_invoice",endpoint:"/invoicing/vendor-invoices/"},shipment:{entityType:"shipment",endpoint:"/shipments/delivery-notes/"},receipt:{entityType:"payment",endpoint:"/invoicing/payments/"},vendor_payment:{entityType:"vendor_payment",endpoint:"/invoicing/vendor-payments/"},vendor_price_sheet:{entityType:"vendor_price_sheet",endpoint:"/pricing/manufacturer-price-sheets/"},client_price_sheet:{entityType:"price_sheet",endpoint:"/pricing/price-sheets/"},qc_report:{entityType:"qc_report",endpoint:"/qc-reports/"},warranty_claim:{entityType:"warranty_claim",endpoint:"/warranty-claims/claims/"},vendor_shipment:{entityType:"vendor_shipment",endpoint:"/shipments/goods-receipts/"}},f=/\[([ xX]?)\]/g;function k(){const{openEntity:k}=n(),{prefs:v,save:N}=s(),{data:w}=u({queryKey:["numbering-configs"],queryFn:()=>e(),retry:!1}),_=c({});d(()=>{if(!w)return;const e={};for(const t of w){const r=b[t.entity_type];if(!r)continue;const n=(t.prefix||"").replace("#","").toUpperCase();if(n&&(e[n]={...r,prefix:t.prefix}),t.alt_prefix){const n=t.alt_prefix.replace("#","").toUpperCase();n&&(e[n]={...r,prefix:t.alt_prefix})}}_.current=e},[w]);const j=v.notepad_notes||[],[T,C]=p(null),[$,S]=p(""),[X,W]=p(""),[U,D]=p("yellow"),[I,Q]=p(!1),[B,F]=p(!1),K=c(null),O=c(),R=j.find(e=>e.id===T);d(()=>{if(!T&&j.length>0){const e=j[0];C(e.id),S(e.title),W(e.content),D(e.color)}},[j.length]);const E=m(e=>{N({notepad_notes:e})},[N]),A=m(()=>{if(!T||!I)return;const e=j.map(e=>e.id===T?{...e,title:$,content:X,color:U,updated_at:/* @__PURE__ */(new Date).toISOString()}:e);E(e),Q(!1)},[T,I,$,X,U,j,E]);d(()=>{if(I)return O.current&&clearTimeout(O.current),O.current=setTimeout(A,800),()=>{O.current&&clearTimeout(O.current)}},[I,A]),d(()=>()=>{I&&A()},[]);const J=e=>{I&&A(),C(e.id),S(e.title),W(e.content),D(e.color),Q(!1),F(!1)},q=e=>{const t=X.slice(0,e),r=X.slice(e).match(/^\[([ xX]?)\]/);if(!r)return;const n="x"===r[1]||"X"===r[1]?"[ ]":"[x]",o=X.slice(e+r[0].length);W(t+n+o),Q(!0)},Y=async(e,t)=>{const r=_.current[e];if(!r)return;const n=`${e}#${t}`;try{const{data:e}=await o.get(r.endpoint,{params:{search:n,page_size:1}}),t=(e?.results??e??[])[0];t?k(r.entityType,t.id,t,n):i.error(`${n} not found`)}catch{i.error(`Failed to look up ${n}`)}},M="Start writing...\n\nTips:\n [] Type [] for a checkbox, click to toggle\n SO#35001 Type XX#NNNNN to link entities (SO, PO, CI, VI, PL, etc.)",P=/* @__PURE__ */h(y,{children:[
2
- /* @__PURE__ */g("div",{className:"p-2 border-b border-gray-200",children:/* @__PURE__ */h("button",{onClick:()=>{I&&A();const e={id:`note-${Date.now()}-${Math.random().toString(36).slice(2,6)}`,title:"",content:"",color:"yellow",sticky:!1,updated_at:/* @__PURE__ */(new Date).toISOString()},t=[e,...j];E(t),C(e.id),S(""),W(""),D("yellow"),Q(!1),F(!0),setTimeout(()=>K.current?.focus(),50)},className:"w-full flex items-center justify-center gap-2 rounded-lg bg-blue-600 text-white px-3 min-h-8 py-1 text-sm font-medium hover:bg-blue-700 transition-colors",children:[
1
+ import{getNumberingConfigs as e}from"./chunk-AJCAZNBF.js";import{SidebarLayout as t}from"./chunk-VFBUDSMF.js";import{AboutApp as r}from"./chunk-3LEHVM4D.js";import{useWindowManager as n,client_default as o}from"./chunk-NUCPJVKD.js";import"./chunk-DSSLOQDW.js";import"./chunk-SCJT2XXU.js";import{toast_default as i}from"./chunk-RUHUTZN4.js";import{useShellPrefs as s}from"./chunk-ZRU5F2XT.js";import"./chunk-5A7MWTXX.js";import"./chunk-WYNQLAKD.js";import"./chunk-76VCH7N6.js";import"./chunk-IQDY2YFN.js";import"./chunk-UVBK6YSR.js";import"./chunk-JTNKC4CR.js";import"./chunk-7IQ3B77H.js";import"./chunk-FIEA5CGB.js";import"./chunk-D65T4H6J.js";import"./chunk-FTZ5WHJM.js";import"./chunk-KNUR2UEG.js";import{timeAgo as a}from"./chunk-W32SKK3D.js";import"./chunk-QRCDQPJA.js";import"./chunk-C3QOHMR6.js";import{Icon as l}from"./chunk-ZGUQLVY4.js";import{useRef as c,useEffect as d,useState as p,useCallback as m}from"react";import{useQuery as u}from"@tanstack/react-query";import{jsxs as h,Fragment as y,jsx as g}from"react/jsx-runtime";var x=[{key:"yellow",bg:"bg-yellow-100",border:"border-yellow-300",text:"text-yellow-900",dot:"bg-yellow-400"},{key:"blue",bg:"bg-blue-100",border:"border-blue-300",text:"text-blue-900",dot:"bg-blue-400"},{key:"green",bg:"bg-green-100",border:"border-green-300",text:"text-green-900",dot:"bg-green-400"},{key:"pink",bg:"bg-pink-100",border:"border-pink-300",text:"text-pink-900",dot:"bg-pink-400"},{key:"purple",bg:"bg-purple-100",border:"border-purple-300",text:"text-purple-900",dot:"bg-purple-400"},{key:"orange",bg:"bg-orange-100",border:"border-orange-300",text:"text-orange-900",dot:"bg-orange-400"},{key:"white",bg:"bg-white",border:"border-gray-300",text:"text-gray-900",dot:"bg-gray-300"}];var b={sales_order:{entityType:"order",endpoint:"/orders/sales-orders/"},purchase_order:{entityType:"purchase_order",endpoint:"/purchase-orders/"},invoice:{entityType:"invoice",endpoint:"/invoicing/invoices/"},vendor_invoice:{entityType:"vendor_invoice",endpoint:"/invoicing/vendor-invoices/"},shipment:{entityType:"shipment",endpoint:"/shipments/delivery-notes/"},receipt:{entityType:"payment",endpoint:"/invoicing/payments/"},vendor_payment:{entityType:"vendor_payment",endpoint:"/invoicing/vendor-payments/"},vendor_price_sheet:{entityType:"vendor_price_sheet",endpoint:"/pricing/manufacturer-price-sheets/"},client_price_sheet:{entityType:"price_sheet",endpoint:"/pricing/price-sheets/"},qc_report:{entityType:"qc_report",endpoint:"/qc-reports/"},warranty_claim:{entityType:"warranty_claim",endpoint:"/warranty-claims/claims/"},vendor_shipment:{entityType:"vendor_shipment",endpoint:"/shipments/goods-receipts/"}},f=/\[([ xX]?)\]/g;function k(){const{openEntity:k}=n(),{prefs:v,save:N}=s(),{data:w}=u({queryKey:["numbering-configs"],queryFn:()=>e(),retry:!1}),_=c({});d(()=>{if(!w)return;const e={};for(const t of w){const r=b[t.entity_type];if(!r)continue;const n=(t.prefix||"").replace("#","").toUpperCase();if(n&&(e[n]={...r,prefix:t.prefix}),t.alt_prefix){const n=t.alt_prefix.replace("#","").toUpperCase();n&&(e[n]={...r,prefix:t.alt_prefix})}}_.current=e},[w]);const T=v.notepad_notes||[],[j,C]=p(null),[$,S]=p(""),[D,W]=p(""),[U,X]=p("yellow"),[F,K]=p(!1),[R,I]=p(!1),O=c(null),Q=c(),A=T.find(e=>e.id===j);d(()=>{if(!j&&T.length>0){const e=T[0];C(e.id),S(e.title),W(e.content),X(e.color)}},[T.length]);const H=m(e=>{N({notepad_notes:e})},[N]),J=m(()=>{if(!j||!F)return;const e=T.map(e=>e.id===j?{...e,title:$,content:D,color:U,updated_at:/* @__PURE__ */(new Date).toISOString()}:e);H(e),K(!1)},[j,F,$,D,U,T,H]);d(()=>{if(F)return Q.current&&clearTimeout(Q.current),Q.current=setTimeout(J,800),()=>{Q.current&&clearTimeout(Q.current)}},[F,J]),d(()=>()=>{F&&J()},[]);const V=e=>{F&&J(),C(e.id),S(e.title),W(e.content),X(e.color),K(!1),I(!1)},q=e=>{const t=D.slice(0,e),r=D.slice(e).match(/^\[([ xX]?)\]/);if(!r)return;const n="x"===r[1]||"X"===r[1]?"[ ]":"[x]",o=D.slice(e+r[0].length);W(t+n+o),K(!0)},B=async(e,t)=>{const r=_.current[e];if(!r)return;const n=`${e}#${t}`;try{const{data:e}=await o.get(r.endpoint,{params:{search:n,page_size:1}}),t=(e?.results??e??[])[0];t?k(r.entityType,t.id,t,n):i.error(`${n} not found`)}catch{i.error(`Failed to look up ${n}`)}},E="Start writing...\n\nTips:\n [] Type [] for a checkbox, click to toggle\n SO#35001 Type XX#NNNNN to link entities (SO, PO, CI, VI, PL, etc.)",M=/* @__PURE__ */h(y,{children:[
2
+ /* @__PURE__ */g("div",{className:"p-2 border-b border-gray-200",children:/* @__PURE__ */h("button",{onClick:()=>{F&&J();const e={id:`note-${Date.now()}-${Math.random().toString(36).slice(2,6)}`,title:"",content:"",color:"yellow",sticky:!1,updated_at:/* @__PURE__ */(new Date).toISOString()},t=[e,...T];H(t),C(e.id),S(""),W(""),X("yellow"),K(!1),I(!0),setTimeout(()=>O.current?.focus(),50)},className:"w-full flex items-center justify-center gap-2 rounded-lg bg-blue-600 text-white px-3 min-h-8 py-1 text-sm font-medium hover:bg-blue-700 transition-colors",children:[
3
3
  /* @__PURE__ */g(l,{name:"add",className:"h-4 w-4",strokeWidth:2}),"New Note"]})}),
4
- /* @__PURE__ */g("div",{className:"flex-1 overflow-y-auto",children:0===j.length?/* @__PURE__ */g("p",{className:"text-sm text-gray-400 text-center py-8 px-4",children:"No notes yet. Create one to get started."}):j.map(e=>{const t=(r=e.color,x.find(e=>e.key===r)||x[0]);var r;/* @__PURE__ */
5
- return h("button",{onClick:()=>J(e),className:"w-full text-left px-3 py-3 border-b border-gray-100 transition-colors "+(T===e.id?"bg-blue-50":"hover:bg-gray-50"),children:[
4
+ /* @__PURE__ */g("div",{className:"flex-1 overflow-y-auto",children:0===T.length?/* @__PURE__ */g("p",{className:"text-sm text-gray-400 text-center py-8 px-4",children:"No notes yet. Create one to get started."}):T.map(e=>{const t=(r=e.color,x.find(e=>e.key===r)||x[0]);var r;/* @__PURE__ */
5
+ return h("button",{onClick:()=>V(e),className:"w-full text-left px-3 py-3 border-b border-gray-100 transition-colors "+(j===e.id?"bg-blue-50":"hover:bg-gray-50"),children:[
6
6
  /* @__PURE__ */h("div",{className:"flex items-center gap-2",children:[
7
7
  /* @__PURE__ */g("div",{className:`w-3 h-3 rounded-full shrink-0 ${t.dot}`}),
8
8
  /* @__PURE__ */g("span",{className:"text-sm font-medium text-gray-900 truncate flex-1",children:e.title||"Untitled"}),e.sticky&&/* @__PURE__ */g(l,{name:"bookmark",look:"solid",className:"h-3 w-3 text-amber-500 shrink-0"})]}),
@@ -10,16 +10,16 @@ return h("button",{onClick:()=>J(e),className:"w-full text-left px-3 py-3 border
10
10
  /* @__PURE__ */g("p",{className:"text-2xs text-gray-300 mt-0.5 ml-5",children:a(e.updated_at)})]},e.id)})})]});/* @__PURE__ */
11
11
  return h("div",{className:"h-full",children:[
12
12
  /* @__PURE__ */g(r,{app:"notepad"}),
13
- /* @__PURE__ */g(t,{sidebar:P,storageKey:"notepad.sidebarWidth",defaultWidth:224,minWidth:180,maxWidth:360,children:T?/* @__PURE__ */h("div",{className:"flex-1 flex flex-col min-w-0",children:[
13
+ /* @__PURE__ */g(t,{sidebar:M,storageKey:"notepad.sidebarWidth",defaultWidth:224,minWidth:180,maxWidth:360,children:j?/* @__PURE__ */h("div",{className:"flex-1 flex flex-col min-w-0",children:[
14
14
  /* @__PURE__ */h("div",{className:"flex items-center gap-2 px-4 py-2 border-b border-gray-200",children:[
15
- /* @__PURE__ */g("input",{value:$,onChange:e=>{S(e.target.value),Q(!0)},placeholder:"Note title...",className:"flex-1 text-lg font-semibold text-gray-900 outline-none bg-transparent placeholder:text-gray-300"}),
16
- /* @__PURE__ */g("div",{className:"flex gap-1",children:x.map(e=>/* @__PURE__ */g("button",{onClick:()=>{D(e.key),Q(!0)},className:`w-5 h-5 rounded-full border-2 transition-all ${e.dot} ${U===e.key?"border-gray-600 scale-110":"border-transparent hover:border-gray-400"}`,title:e.key},e.key))}),
17
- /* @__PURE__ */g("button",{onClick:()=>(e=>{const t=j.map(t=>t.id===e?{...t,sticky:!t.sticky}:t);E(t);const r=t.find(t=>t.id===e);i.success(r?.sticky?"Pinned to desktop":"Removed from desktop")})(T),title:R?.sticky?"Remove from desktop":"Pin to desktop",className:"p-1 rounded transition-colors "+(R?.sticky?"text-amber-500 hover:text-amber-600":"text-gray-300 hover:text-amber-400"),children:/* @__PURE__ */g(l,{name:"bookmark",className:"h-4 w-4",fill:R?.sticky?"currentColor":"none",strokeWidth:1.5})}),
18
- /* @__PURE__ */g("button",{onClick:()=>(e=>{const t=j.filter(t=>t.id!==e);if(E(t),T===e){const e=t[0];e?J(e):(C(null),S(""),W(""))}})(T),title:"Delete note",className:"p-1 rounded text-gray-300 hover:text-red-500 transition-colors",children:/* @__PURE__ */g(l,{name:"trash",className:"h-4 w-4",strokeWidth:1.5})})]}),B?/* @__PURE__ */g("textarea",{ref:K,value:X,onChange:e=>{W(e.target.value),Q(!0)},onBlur:()=>{F(!1),I&&A()},placeholder:M,className:"flex-1 p-4 text-sm text-gray-700 outline-none resize-none bg-transparent leading-relaxed placeholder:text-gray-300 font-mono"}):/* @__PURE__ */g("div",{onClick:()=>{F(!0),setTimeout(()=>K.current?.focus(),50)},className:"flex-1 p-4 text-sm text-gray-700 overflow-y-auto leading-relaxed cursor-text",children:X?(e=>{if(!e)return[];const t=e.split("\n");return t.map((e,r)=>{const n=[];let o=0;const i=[],s=/([A-Z]{2,4})#(\d{4,6})/g;let a;for(;null!==(a=s.exec(e));){const e=a[1],t=a[2];if(_.current[e]){const n=a.index,o=a[0];i.push({idx:n,len:o.length,render:()=>/* @__PURE__ */g("button",{onClick:()=>Y(e,t),className:"text-blue-600 hover:text-blue-800 hover:underline font-medium cursor-pointer",children:o},`ref-${r}-${n}`)})}}f.lastIndex=0;let c=0;for(let e=0;e<r;e++)c+=t[e].length+1;for(;null!==(a=f.exec(e));){const e="x"===a[1]||"X"===a[1],t=a.index,n=c+t;i.push({idx:t,len:a[0].length,render:()=>/* @__PURE__ */g("button",{onClick:()=>q(n),className:`inline-flex items-center justify-center w-4 h-4 rounded border ${e?"bg-blue-500 border-blue-500 text-white":"border-gray-400 bg-white hover:border-blue-400"} cursor-pointer align-text-bottom mr-0.5`,children:e&&/* @__PURE__ */g(l,{name:"check",className:"w-3 h-3",strokeWidth:3})},`cb-${r}-${t}`)})}i.sort((e,t)=>e.idx-t.idx);for(const t of i)t.idx>o&&n.push(/* @__PURE__ */g("span",{children:e.slice(o,t.idx)},`t-${r}-${o}`)),n.push(t.render()),o=t.idx+t.len;o<e.length&&n.push(/* @__PURE__ */g("span",{children:e.slice(o)},`t-${r}-${o}`)),0===n.length&&n.push(/* @__PURE__ */g("span",{children:"​"},`empty-${r}`));const d=/^\[x\]/i.test(e.trimStart());/* @__PURE__ */
19
- return g("div",{className:d?"line-through text-gray-400":"",children:n},r)})})(X):/* @__PURE__ */g("p",{className:"text-gray-300 whitespace-pre-line",children:M})}),
15
+ /* @__PURE__ */g("input",{value:$,onChange:e=>{S(e.target.value),K(!0)},placeholder:"Note title...",className:"flex-1 text-lg font-semibold text-gray-900 outline-none bg-transparent placeholder:text-gray-300"}),
16
+ /* @__PURE__ */g("div",{className:"flex gap-1",children:x.map(e=>/* @__PURE__ */g("button",{onClick:()=>{X(e.key),K(!0)},className:`w-5 h-5 rounded-full border-2 transition-all ${e.dot} ${U===e.key?"border-gray-600 scale-110":"border-transparent hover:border-gray-400"}`,title:e.key},e.key))}),
17
+ /* @__PURE__ */g("button",{onClick:()=>(e=>{const t=T.map(t=>t.id===e?{...t,sticky:!t.sticky}:t);H(t);const r=t.find(t=>t.id===e);i.success(r?.sticky?"Pinned to desktop":"Removed from desktop")})(j),title:A?.sticky?"Remove from desktop":"Pin to desktop",className:"p-1 rounded transition-colors "+(A?.sticky?"text-amber-500 hover:text-amber-600":"text-gray-300 hover:text-amber-400"),children:/* @__PURE__ */g(l,{name:"bookmark",className:"h-4 w-4",fill:A?.sticky?"currentColor":"none",strokeWidth:1.5})}),
18
+ /* @__PURE__ */g("button",{onClick:()=>(e=>{const t=T.filter(t=>t.id!==e);if(H(t),j===e){const e=t[0];e?V(e):(C(null),S(""),W(""))}})(j),title:"Delete note",className:"p-1 rounded text-gray-300 hover:text-red-500 transition-colors",children:/* @__PURE__ */g(l,{name:"trash",className:"h-4 w-4",strokeWidth:1.5})})]}),R?/* @__PURE__ */g("textarea",{ref:O,value:D,onChange:e=>{W(e.target.value),K(!0)},onBlur:()=>{I(!1),F&&J()},placeholder:E,className:"flex-1 p-4 text-sm text-gray-700 outline-none resize-none bg-transparent leading-relaxed placeholder:text-gray-300 font-mono"}):/* @__PURE__ */g("div",{onClick:()=>{I(!0),setTimeout(()=>O.current?.focus(),50)},className:"flex-1 p-4 text-sm text-gray-700 overflow-y-auto leading-relaxed cursor-text",children:D?(e=>{if(!e)return[];const t=e.split("\n");return t.map((e,r)=>{const n=[];let o=0;const i=[],s=/([A-Z]{2,4})#(\d{4,6})/g;let a;for(;null!==(a=s.exec(e));){const e=a[1],t=a[2];if(_.current[e]){const n=a.index,o=a[0];i.push({idx:n,len:o.length,render:()=>/* @__PURE__ */g("button",{onClick:()=>B(e,t),className:"text-blue-600 hover:text-blue-800 hover:underline font-medium cursor-pointer",children:o},`ref-${r}-${n}`)})}}f.lastIndex=0;let c=0;for(let e=0;e<r;e++)c+=t[e].length+1;for(;null!==(a=f.exec(e));){const e="x"===a[1]||"X"===a[1],t=a.index,n=c+t;i.push({idx:t,len:a[0].length,render:()=>/* @__PURE__ */g("button",{onClick:()=>q(n),className:`inline-flex items-center justify-center w-4 h-4 rounded border ${e?"bg-blue-500 border-blue-500 text-white":"border-gray-400 bg-white hover:border-blue-400"} cursor-pointer align-text-bottom mr-0.5`,children:e&&/* @__PURE__ */g(l,{name:"check",className:"w-3 h-3",strokeWidth:3})},`cb-${r}-${t}`)})}i.sort((e,t)=>e.idx-t.idx);for(const t of i)t.idx>o&&n.push(/* @__PURE__ */g("span",{children:e.slice(o,t.idx)},`t-${r}-${o}`)),n.push(t.render()),o=t.idx+t.len;o<e.length&&n.push(/* @__PURE__ */g("span",{children:e.slice(o)},`t-${r}-${o}`)),0===n.length&&n.push(/* @__PURE__ */g("span",{children:"​"},`empty-${r}`));const d=/^\[x\]/i.test(e.trimStart());/* @__PURE__ */
19
+ return g("div",{className:d?"line-through text-gray-400":"",children:n},r)})})(D):/* @__PURE__ */g("p",{className:"text-gray-300 whitespace-pre-line",children:E})}),
20
20
  /* @__PURE__ */h("div",{className:"px-4 min-h-8 py-1 border-t border-gray-100 flex items-center gap-4 text-2xs text-gray-400",children:[
21
21
  /* @__PURE__ */g("span",{children:"[] checkbox"}),
22
22
  /* @__PURE__ */g("span",{children:"SO#35001 entity link"}),
23
- /* @__PURE__ */g("span",{className:"ml-auto",children:B?"Editing":"Click to edit"})]})]}):/* @__PURE__ */g("div",{className:"flex-1 flex items-center justify-center",children:/* @__PURE__ */h("div",{className:"text-center text-gray-400",children:[
23
+ /* @__PURE__ */g("span",{className:"ml-auto",children:R?"Editing":"Click to edit"})]})]}):/* @__PURE__ */g("div",{className:"flex-1 flex items-center justify-center",children:/* @__PURE__ */h("div",{className:"text-center text-gray-400",children:[
24
24
  /* @__PURE__ */g(l,{name:"page",className:"h-12 w-12 mx-auto mb-3 text-gray-300",strokeWidth:1}),
25
25
  /* @__PURE__ */g("p",{className:"text-sm",children:"Select a note or create a new one"})]})})})]})}export{k as default};
@@ -1,4 +1,4 @@
1
- import{loadAppearance as e,WidgetSettingsModal as t}from"./chunk-QWSVX6OP.js";import{subscribePomo as a,getPomoSnapshot as o,setPomoDurations as n,setPomoAlarm as r,setPomoAlarmConfig as s,setPomoBehaviour as l,setPomoFocusSound as i,useTodoTasks as c,migratePomodoroTasksOnce as d,pomoSwitchMode as u,pomoPause as m,pomoStart as h,ALARM_OPTIONS as g,playAlarm as p,FOCUS_SOUND_OPTIONS as f,previewFocusSound as b}from"./chunk-ITCBLL72.js";import{PLACEHOLDER_INK as k}from"./chunk-HJQAE6SP.js";import{useWidgetSettings as x}from"./chunk-IBGEW3OA.js";import"./chunk-DSSLOQDW.js";import"./chunk-SCJT2XXU.js";import"./chunk-RUHUTZN4.js";import{useShellPrefs as v}from"./chunk-ZRU5F2XT.js";import"./chunk-5A7MWTXX.js";import"./chunk-WYNQLAKD.js";import"./chunk-QBXX5A7U.js";import"./chunk-IQDY2YFN.js";import"./chunk-UVBK6YSR.js";import"./chunk-JTNKC4CR.js";import"./chunk-7IQ3B77H.js";import"./chunk-FIEA5CGB.js";import"./chunk-D65T4H6J.js";import"./chunk-KNUR2UEG.js";import"./chunk-QRCDQPJA.js";import"./chunk-C3QOHMR6.js";import{Icon as y}from"./chunk-ZGUQLVY4.js";import{useSyncExternalStore as N,useEffect as C,useMemo as w,useState as S,useRef as B,useCallback as T}from"react";import{jsxs as M,Fragment as j,jsx as I}from"react/jsx-runtime";var P="pomodoro_appearance",A="pomodoro_active_task_id",$={focus:"Pomodoro",short:"Short Break",long:"Long Break"},L={focus:"#0f172a",short:"#508a52",long:"#5b7898"};var D=25,V=5,R=15,W=!1,_=!1,E=4,Q=!0,U=!0,F="bell",O=100,X=1,H="none",J=50,K=(e,t,a,o)=>"number"==typeof e&&isFinite(e)?Math.max(t,Math.min(a,Math.round(e))):o;function z(){const t=N(a,o,o),{prefs:p,save:b}=v(),k=function(e){const t=e&&"object"==typeof e?e:{};return{focusMinutes:K(t.focusMinutes,1,120,D),shortBreakMinutes:K(t.shortBreakMinutes,1,120,V),longBreakMinutes:K(t.longBreakMinutes,1,120,R),autoStartBreaks:"boolean"==typeof t.autoStartBreaks?t.autoStartBreaks:W,autoStartPomodoros:"boolean"==typeof t.autoStartPomodoros?t.autoStartPomodoros:_,longBreakInterval:K(t.longBreakInterval,1,20,E),autoCheckTasks:"boolean"==typeof t.autoCheckTasks?t.autoCheckTasks:Q,checkToBottom:"boolean"==typeof t.checkToBottom?t.checkToBottom:U,alarmSound:g.some(e=>e.id===t.alarmSound)?t.alarmSound:F,alarmVolume:K(t.alarmVolume,0,100,O),alarmRepeat:K(t.alarmRepeat,1,5,X),focusSound:f.some(e=>e.id===t.focusSound)?t.focusSound:H,focusVolume:K(t.focusVolume,0,100,J)}}(p.pomodoro_settings);C(()=>{n({focus:60*k.focusMinutes,short:60*k.shortBreakMinutes,long:60*k.longBreakMinutes})},[k.focusMinutes,k.shortBreakMinutes,k.longBreakMinutes]),C(()=>{r(k.alarmSound),s(k.alarmVolume,k.alarmRepeat)},[k.alarmSound,k.alarmVolume,k.alarmRepeat]),C(()=>{l({autoStartBreaks:k.autoStartBreaks,autoStartPomodoros:k.autoStartPomodoros,longBreakInterval:k.longBreakInterval})},[k.autoStartBreaks,k.autoStartPomodoros,k.longBreakInterval]),C(()=>{i(k.focusSound,k.focusVolume)},[k.focusSound,k.focusVolume]),C(()=>{if("undefined"!=typeof Notification&&"default"===Notification.permission)try{Notification.requestPermission()}catch{}},[]);const z=c(),G=z.tasks,Z=w(()=>/* @__PURE__ */(new Date).toISOString().slice(0,10),[]),q=function(e,t){return w(()=>t?(e=>{const t=[],a=[];for(const o of e)(o.done?a:t).push(o);return[...t,...a]})(e):e,[e,t])}(w(()=>G.filter(e=>!!e.dueDate&&(e.dueDate===Z||e.dueDate<Z&&!e.done)),[G,Z]),k.checkToBottom),[ee,te]=S(()=>localStorage.getItem(A)),[ae,oe]=S(!1),[ne,re]=S(null),se=B(!1);C(()=>{se.current||(se.current=!0,d(G,z.setAllTasks))},[]),C(()=>{try{ee?localStorage.setItem(A,ee):localStorage.removeItem(A)}catch{}},[ee]),C(()=>{if(!ne)return;const e=()=>re(null),t=setTimeout(()=>document.addEventListener("click",e),0);return()=>{clearTimeout(t),document.removeEventListener("click",e)}},[ne]);const le=B(t.streak);C(()=>{if(t.streak>le.current&&ee){const e=G.find(e=>e.id===ee);if(e){const t=(e.completed??0)+1,a=e.estimated??0,o=k.autoCheckTasks&&a>0&&t>=a;z.updateTask(ee,{completed:t,done:e.done||o})}}le.current=t.streak},[t.streak,ee,k.autoCheckTasks,G,z]);const ce=q.reduce((e,t)=>e+(t.completed??0),0),de=q.reduce((e,t)=>e+Math.max(t.estimated??0,t.completed??0),0),ue=q.reduce((e,t)=>t.done?e:e+Math.max(0,(t.estimated??0)-(t.completed??0)),0),me=t.running&&"focus"===t.mode?t.remaining:0,he=ue*k.focusMinutes*60+me,ge=new Date(Date.now()+1e3*he).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",hour12:!1}),pe=(he/3600).toFixed(1),fe=ee?G.find(e=>e.id===ee)??null:null,be=String(Math.floor(t.remaining/60)).padStart(2,"0"),ke=String(t.remaining%60).padStart(2,"0"),[xe,ve]=S(()=>e(P)),[ye,Ne]=S(!1),[Ce,we]=S(xe),[Se,Be]=S(k);x(T(()=>{we({...xe}),Be({...k}),Ne(!0)},[xe,k]));const Te="focus"!==t.mode,Me=L[t.mode],je=Te?(Ie=Me,Pe=xe.activeOpacity/100,`rgba(${parseInt(Ie.slice(1,3),16)}, ${parseInt(Ie.slice(3,5),16)}, ${parseInt(Ie.slice(5,7),16)}, ${Pe})`):`rgb(var(--taskbar-bg-rgb, 243 244 246) / ${xe.activeOpacity/100})`;var Ie,Pe;const Ae={primary:Te?"text-white":"text-gray-900",secondary:Te?"text-white/85":"text-gray-700",muted:Te?"text-white/65":"text-gray-500",tabActive:Te?"bg-white/15 text-white":"bg-gray-200 text-gray-900",tabInactive:Te?"text-white/75 hover:bg-white/10":"text-gray-500 hover:bg-gray-200",divider:Te?"border-white/30":"border-gray-200",softDivider:Te?"border-white/20":"border-gray-200",iconBtn:Te?"bg-black/15 hover:bg-black/25 text-white/85":"bg-gray-200 hover:bg-gray-300 text-gray-600",addTaskBtn:Te?"border-white/45 text-white/90 hover:bg-white/[0.06]":"border-gray-300 text-gray-500 hover:bg-gray-200/50"},$e=Te?Me:"#0f172a";/* @__PURE__ */
1
+ import{loadAppearance as e,WidgetSettingsModal as t}from"./chunk-7JN73EKI.js";import{subscribePomo as a,getPomoSnapshot as o,setPomoDurations as n,setPomoAlarm as r,setPomoAlarmConfig as s,setPomoBehaviour as l,setPomoFocusSound as i,useTodoTasks as c,migratePomodoroTasksOnce as d,pomoSwitchMode as u,pomoPause as m,pomoStart as h,ALARM_OPTIONS as g,playAlarm as p,FOCUS_SOUND_OPTIONS as f,previewFocusSound as b}from"./chunk-ITCBLL72.js";import{PLACEHOLDER_INK as k}from"./chunk-HJQAE6SP.js";import{useWidgetSettings as x}from"./chunk-NUCPJVKD.js";import"./chunk-DSSLOQDW.js";import"./chunk-SCJT2XXU.js";import"./chunk-RUHUTZN4.js";import{useShellPrefs as v}from"./chunk-ZRU5F2XT.js";import"./chunk-5A7MWTXX.js";import"./chunk-WYNQLAKD.js";import"./chunk-76VCH7N6.js";import"./chunk-IQDY2YFN.js";import"./chunk-UVBK6YSR.js";import"./chunk-JTNKC4CR.js";import"./chunk-7IQ3B77H.js";import"./chunk-FIEA5CGB.js";import"./chunk-D65T4H6J.js";import"./chunk-KNUR2UEG.js";import"./chunk-QRCDQPJA.js";import"./chunk-C3QOHMR6.js";import{Icon as y}from"./chunk-ZGUQLVY4.js";import{useSyncExternalStore as N,useEffect as C,useMemo as w,useState as S,useRef as B,useCallback as T}from"react";import{jsxs as M,Fragment as j,jsx as I}from"react/jsx-runtime";var P="pomodoro_appearance",A="pomodoro_active_task_id",$={focus:"Pomodoro",short:"Short Break",long:"Long Break"},D={focus:"#0f172a",short:"#508a52",long:"#5b7898"};var L=25,V=5,R=15,_=!1,E=!1,U=4,W=!0,F=!0,Q="bell",J=100,K=1,H="none",O=50,z=(e,t,a,o)=>"number"==typeof e&&isFinite(e)?Math.max(t,Math.min(a,Math.round(e))):o;function X(){const t=N(a,o,o),{prefs:p,save:b}=v(),k=function(e){const t=e&&"object"==typeof e?e:{};return{focusMinutes:z(t.focusMinutes,1,120,L),shortBreakMinutes:z(t.shortBreakMinutes,1,120,V),longBreakMinutes:z(t.longBreakMinutes,1,120,R),autoStartBreaks:"boolean"==typeof t.autoStartBreaks?t.autoStartBreaks:_,autoStartPomodoros:"boolean"==typeof t.autoStartPomodoros?t.autoStartPomodoros:E,longBreakInterval:z(t.longBreakInterval,1,20,U),autoCheckTasks:"boolean"==typeof t.autoCheckTasks?t.autoCheckTasks:W,checkToBottom:"boolean"==typeof t.checkToBottom?t.checkToBottom:F,alarmSound:g.some(e=>e.id===t.alarmSound)?t.alarmSound:Q,alarmVolume:z(t.alarmVolume,0,100,J),alarmRepeat:z(t.alarmRepeat,1,5,K),focusSound:f.some(e=>e.id===t.focusSound)?t.focusSound:H,focusVolume:z(t.focusVolume,0,100,O)}}(p.pomodoro_settings);C(()=>{n({focus:60*k.focusMinutes,short:60*k.shortBreakMinutes,long:60*k.longBreakMinutes})},[k.focusMinutes,k.shortBreakMinutes,k.longBreakMinutes]),C(()=>{r(k.alarmSound),s(k.alarmVolume,k.alarmRepeat)},[k.alarmSound,k.alarmVolume,k.alarmRepeat]),C(()=>{l({autoStartBreaks:k.autoStartBreaks,autoStartPomodoros:k.autoStartPomodoros,longBreakInterval:k.longBreakInterval})},[k.autoStartBreaks,k.autoStartPomodoros,k.longBreakInterval]),C(()=>{i(k.focusSound,k.focusVolume)},[k.focusSound,k.focusVolume]),C(()=>{if("undefined"!=typeof Notification&&"default"===Notification.permission)try{Notification.requestPermission()}catch{}},[]);const X=c(),G=X.tasks,Z=w(()=>/* @__PURE__ */(new Date).toISOString().slice(0,10),[]),q=function(e,t){return w(()=>t?(e=>{const t=[],a=[];for(const o of e)(o.done?a:t).push(o);return[...t,...a]})(e):e,[e,t])}(w(()=>G.filter(e=>!!e.dueDate&&(e.dueDate===Z||e.dueDate<Z&&!e.done)),[G,Z]),k.checkToBottom),[ee,te]=S(()=>localStorage.getItem(A)),[ae,oe]=S(!1),[ne,re]=S(null),se=B(!1);C(()=>{se.current||(se.current=!0,d(G,X.setAllTasks))},[]),C(()=>{try{ee?localStorage.setItem(A,ee):localStorage.removeItem(A)}catch{}},[ee]),C(()=>{if(!ne)return;const e=()=>re(null),t=setTimeout(()=>document.addEventListener("click",e),0);return()=>{clearTimeout(t),document.removeEventListener("click",e)}},[ne]);const le=B(t.streak);C(()=>{if(t.streak>le.current&&ee){const e=G.find(e=>e.id===ee);if(e){const t=(e.completed??0)+1,a=e.estimated??0,o=k.autoCheckTasks&&a>0&&t>=a;X.updateTask(ee,{completed:t,done:e.done||o})}}le.current=t.streak},[t.streak,ee,k.autoCheckTasks,G,X]);const ce=q.reduce((e,t)=>e+(t.completed??0),0),de=q.reduce((e,t)=>e+Math.max(t.estimated??0,t.completed??0),0),ue=q.reduce((e,t)=>t.done?e:e+Math.max(0,(t.estimated??0)-(t.completed??0)),0),me=t.running&&"focus"===t.mode?t.remaining:0,he=ue*k.focusMinutes*60+me,ge=new Date(Date.now()+1e3*he).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",hour12:!1}),pe=(he/3600).toFixed(1),fe=ee?G.find(e=>e.id===ee)??null:null,be=String(Math.floor(t.remaining/60)).padStart(2,"0"),ke=String(t.remaining%60).padStart(2,"0"),[xe,ve]=S(()=>e(P)),[ye,Ne]=S(!1),[Ce,we]=S(xe),[Se,Be]=S(k);x(T(()=>{we({...xe}),Be({...k}),Ne(!0)},[xe,k]));const Te="focus"!==t.mode,Me=D[t.mode],je=Te?(Ie=Me,Pe=xe.activeOpacity/100,`rgba(${parseInt(Ie.slice(1,3),16)}, ${parseInt(Ie.slice(3,5),16)}, ${parseInt(Ie.slice(5,7),16)}, ${Pe})`):`rgb(var(--taskbar-bg-rgb, 243 244 246) / ${xe.activeOpacity/100})`;var Ie,Pe;const Ae={primary:Te?"text-white":"text-gray-900",secondary:Te?"text-white/85":"text-gray-700",muted:Te?"text-white/65":"text-gray-500",tabActive:Te?"bg-white/15 text-white":"bg-gray-200 text-gray-900",tabInactive:Te?"text-white/75 hover:bg-white/10":"text-gray-500 hover:bg-gray-200",divider:Te?"border-white/30":"border-gray-200",softDivider:Te?"border-white/20":"border-gray-200",iconBtn:Te?"bg-black/15 hover:bg-black/25 text-white/85":"bg-gray-200 hover:bg-gray-300 text-gray-600",addTaskBtn:Te?"border-white/45 text-white/90 hover:bg-white/[0.06]":"border-gray-300 text-gray-500 hover:bg-gray-200/50"},$e=Te?Me:"#0f172a";/* @__PURE__ */
2
2
  return M(j,{children:[
3
3
  /* @__PURE__ */M("div",{className:`flex flex-col h-full select-none transition-colors duration-300 ${Ae.primary}`,style:{backgroundColor:je,backdropFilter:xe.activeBlur>0?`blur(${xe.activeBlur}px)`:void 0},children:[
4
4
  /* @__PURE__ */I("div",{className:"px-3 pt-3 flex justify-center gap-2",children:["focus","short","long"].map(e=>/* @__PURE__ */I("button",{onClick:()=>u(e),className:`px-3 py-1 text-sm font-bold rounded transition-colors ${t.mode===e?Ae.tabActive:Ae.tabInactive}`,children:$[e]},e))}),
@@ -13,14 +13,14 @@ return M(j,{children:[
13
13
  /* @__PURE__ */I("div",{className:`border-t mx-3 mt-2 ${Ae.divider}`}),
14
14
  /* @__PURE__ */M("div",{className:"flex-1 px-3 py-3 space-y-2 overflow-y-auto",children:[q.map(e=>{const t=e.id===ee;/* @__PURE__ */
15
15
  return M("div",{onClick:()=>te(e.id),className:"bg-white text-gray-800 rounded-md flex items-center pr-2 py-3 shadow-sm cursor-pointer transition-shadow hover:shadow-(--elevation-panel) "+(t?"border-l-4 border-gray-700 pl-2":"pl-3 border-l-4 border-transparent"),children:[
16
- /* @__PURE__ */I("button",{onClick:t=>{var a;t.stopPropagation(),a=e.id,z.toggleDone(a)},className:"shrink-0",children:e.done?/* @__PURE__ */I("svg",{className:"h-5 w-5",fill:"currentColor",viewBox:"0 0 20 20",style:{color:$e},children:/* @__PURE__ */I("path",{d:"M10 0a10 10 0 100 20 10 10 0 000-20zm-1 14.5l-4.5-4.5 1.4-1.4 3.1 3.1 6.1-6.1 1.4 1.4z"})}):/* @__PURE__ */I("svg",{className:"h-5 w-5 text-gray-300",fill:"none",stroke:"currentColor",strokeWidth:2,viewBox:"0 0 24 24",children:/* @__PURE__ */I("circle",{cx:"12",cy:"12",r:"10"})})}),
16
+ /* @__PURE__ */I("button",{onClick:t=>{var a;t.stopPropagation(),a=e.id,X.toggleDone(a)},className:"shrink-0",children:e.done?/* @__PURE__ */I("svg",{className:"h-5 w-5",fill:"currentColor",viewBox:"0 0 20 20",style:{color:$e},children:/* @__PURE__ */I("path",{d:"M10 0a10 10 0 100 20 10 10 0 000-20zm-1 14.5l-4.5-4.5 1.4-1.4 3.1 3.1 6.1-6.1 1.4 1.4z"})}):/* @__PURE__ */I("svg",{className:"h-5 w-5 text-gray-300",fill:"none",stroke:"currentColor",strokeWidth:2,viewBox:"0 0 24 24",children:/* @__PURE__ */I("circle",{cx:"12",cy:"12",r:"10"})})}),
17
17
  /* @__PURE__ */I("span",{className:"ml-3 flex-1 font-semibold truncate "+(e.done?"line-through text-gray-400":"text-gray-800"),children:e.name}),
18
18
  /* @__PURE__ */M("span",{className:"text-sm tabular-nums mr-2 shrink-0",children:[
19
19
  /* @__PURE__ */I("span",{className:"font-bold text-gray-500",children:e.completed??0}),
20
20
  /* @__PURE__ */I("span",{className:"text-gray-400",children:" / "}),
21
21
  /* @__PURE__ */I("span",{className:"text-gray-400",children:e.estimated??"–"})]}),
22
22
  /* @__PURE__ */M("div",{className:"relative",children:[
23
- /* @__PURE__ */I("button",{onClick:t=>{t.stopPropagation(),re(ne===e.id?null:e.id)},className:"rounded p-1 bg-gray-100 hover:bg-gray-200",children:/* @__PURE__ */I(y,{name:"more-vertical",look:"solid",className:"h-4 w-4 text-gray-500"})}),ne===e.id&&/* @__PURE__ */I("div",{className:"absolute right-0 top-full mt-1 bg-white text-gray-800 rounded shadow-lg border border-gray-200 z-10 min-w-[110px] overflow-hidden",onClick:e=>e.stopPropagation(),children:/* @__PURE__ */I("button",{onClick:t=>{var a;t.stopPropagation(),a=e.id,z.removeTask(a),ee===a&&te(null),re(null)},className:"block w-full px-3 h-8 text-sm text-left hover:bg-red-50 text-red-600",children:"Delete"})})]})]},e.id)}),ae?/* @__PURE__ */I(ie,{onSubmit:(e,t)=>{const a=e.trim();if(!a)return;const o=z.addTask({name:a,estimated:t,completed:0,dueDate:Z});ee||te(o),oe(!1)},onCancel:()=>oe(!1),accentColor:$e}):/* @__PURE__ */M("button",{onClick:()=>oe(!0),className:`w-full border-2 border-dashed rounded-md py-3 font-semibold flex items-center justify-center gap-2 transition-colors ${Ae.addTaskBtn}`,children:[
23
+ /* @__PURE__ */I("button",{onClick:t=>{t.stopPropagation(),re(ne===e.id?null:e.id)},className:"rounded p-1 bg-gray-100 hover:bg-gray-200",children:/* @__PURE__ */I(y,{name:"more-vertical",look:"solid",className:"h-4 w-4 text-gray-500"})}),ne===e.id&&/* @__PURE__ */I("div",{className:"absolute right-0 top-full mt-1 bg-white text-gray-800 rounded shadow-lg border border-gray-200 z-10 min-w-[110px] overflow-hidden",onClick:e=>e.stopPropagation(),children:/* @__PURE__ */I("button",{onClick:t=>{var a;t.stopPropagation(),a=e.id,X.removeTask(a),ee===a&&te(null),re(null)},className:"block w-full px-3 h-8 text-sm text-left hover:bg-red-50 text-red-600",children:"Delete"})})]})]},e.id)}),ae?/* @__PURE__ */I(ie,{onSubmit:(e,t)=>{const a=e.trim();if(!a)return;const o=X.addTask({name:a,estimated:t,completed:0,dueDate:Z});ee||te(o),oe(!1)},onCancel:()=>oe(!1),accentColor:$e}):/* @__PURE__ */M("button",{onClick:()=>oe(!0),className:`w-full border-2 border-dashed rounded-md py-3 font-semibold flex items-center justify-center gap-2 transition-colors ${Ae.addTaskBtn}`,children:[
24
24
  /* @__PURE__ */I(y,{name:"add-circle",className:"h-5 w-5",strokeWidth:2}),"Add Task"]})]}),
25
25
  /* @__PURE__ */M("div",{className:`border-t px-3 py-3 flex items-center justify-center gap-5 text-sm ${Ae.softDivider}`,children:[
26
26
  /* @__PURE__ */M("span",{className:Ae.secondary,children:["Pomos: ",
@@ -88,4 +88,4 @@ return M("div",{className:"bg-white text-gray-800 rounded-md p-3 shadow-(--eleva
88
88
  /* @__PURE__ */I("input",{type:"number",min:1,max:20,value:r,onChange:e=>s(Math.max(1,Math.min(20,parseInt(e.target.value,10)||1))),className:"w-16 bg-gray-100 rounded px-2 py-1 text-sm text-right border-0 focus:outline-none focus:ring-2 focus:ring-blue-500"})]}),
89
89
  /* @__PURE__ */M("div",{className:"flex gap-2 mt-3 justify-end",children:[
90
90
  /* @__PURE__ */I("button",{onClick:t,className:"px-3 py-1 text-sm text-gray-500 hover:bg-gray-100 rounded",children:"Cancel"}),
91
- /* @__PURE__ */I("button",{onClick:l,className:"px-4 py-1 text-sm font-semibold text-white rounded shadow-sm",style:{backgroundColor:a},children:"Save"})]})]})}export{z as default};
91
+ /* @__PURE__ */I("button",{onClick:l,className:"px-4 py-1 text-sm font-semibold text-white rounded shadow-sm",style:{backgroundColor:a},children:"Save"})]})]})}export{X as default};
@@ -1,6 +1,6 @@
1
- import{PdfViewer as e,ToolbarSlotContext as t,PanelActions as n}from"./chunk-FTJ2G343.js";import{ImageAnnotator_default as r}from"./chunk-JQRIAZDP.js";import{AboutApp as s}from"./chunk-EJ54JN6S.js";import{peekPdfPreviewStage as i,claimPdfPreviewStage as a,PDF_PREVIEW_UPDATE_EVENT as o}from"./chunk-ESL5TDNA.js";import{WindowTitle as l,getActiveModalId as c}from"./chunk-IBGEW3OA.js";import"./chunk-DSSLOQDW.js";import"./chunk-SCJT2XXU.js";import{toast_default as d}from"./chunk-RUHUTZN4.js";import"./chunk-ZRU5F2XT.js";import"./chunk-5A7MWTXX.js";import"./chunk-WYNQLAKD.js";import"./chunk-QBXX5A7U.js";import"./chunk-IQDY2YFN.js";import"./chunk-UVBK6YSR.js";import"./chunk-JTNKC4CR.js";import"./chunk-7IQ3B77H.js";import{registerModalEscapeInterceptor as u}from"./chunk-FIEA5CGB.js";import"./chunk-D65T4H6J.js";import"./chunk-F5XBJE54.js";import"./chunk-KNUR2UEG.js";import{useShellStrings as p,splitAround as m}from"./chunk-QRCDQPJA.js";import"./chunk-C3QOHMR6.js";import{Icon as h}from"./chunk-ZGUQLVY4.js";import{useRef as y,useState as x,useEffect as f}from"react";import{jsxs as g,jsx as b,Fragment as w}from"react/jsx-runtime";var v=!1;function k(e,t){return e?.url&&e.url!==t.url&&e.url.startsWith("blob:")&&URL.revokeObjectURL(e.url),t}function N(){const n=y(void 0);void 0===n.current&&(n.current=i());const[r,u]=x(n.current?.data??null);f(()=>{const e=n.current;null!=e&&(a(e),u(t=>t===e.data?t:k(t,e.data)))},[]),f(()=>{const e=n.current?.token;if(null==e)return;const t=t=>{const n=t.detail;n&&n.token===e&&u(e=>k(e,n.data))};return window.addEventListener(o,t),()=>window.removeEventListener(o,t)},[]);const v=y(void 0);f(()=>{v.current=r?.url},[r?.url]);const N=y(null);f(()=>(null!==N.current&&(clearTimeout(N.current),N.current=null),()=>{const e=v.current;e?.startsWith("blob:")&&(N.current=setTimeout(()=>URL.revokeObjectURL(e),0))}),[]);const A=p().preview,E=r?.filename?(S=r.filename).length>24?`${S.slice(0,23)}…`:S:A.untitled;var S;const M=y(null),z=y(null),[T,R]=x(null),[F,H]=x(!1),I=y(0),P=()=>M.current?.click(),O=()=>{I.current=0,H(!1)},W=e=>{const t=e.closest("[data-modal-id]");return!t||c()===t.dataset.modalId};f(()=>{const e=()=>O(),t=()=>O(),n=e=>{"Escape"===e.key&&O()};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 B=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?d.error(A.dwgUnsupported):d.error(A.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}))},X=/* @__PURE__ */g("div",{className:"flex items-center gap-2 px-3 py-2 border-b border-gray-200 bg-gray-50 shrink-0",children:[
2
- /* @__PURE__ */b("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&&B(t),M.current&&(M.current.value="")},className:"hidden"}),
3
- /* @__PURE__ */g("button",{onClick:P,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:[
1
+ import{PdfViewer as e,ToolbarSlotContext as t,PanelActions as n}from"./chunk-FTJ2G343.js";import{ImageAnnotator_default as r}from"./chunk-JQRIAZDP.js";import{AboutApp as s}from"./chunk-3LEHVM4D.js";import{peekPdfPreviewStage as i,claimPdfPreviewStage as a,PDF_PREVIEW_UPDATE_EVENT as o}from"./chunk-ESL5TDNA.js";import{WindowTitle as l,getActiveModalId as c}from"./chunk-NUCPJVKD.js";import"./chunk-DSSLOQDW.js";import"./chunk-SCJT2XXU.js";import{toast_default as d}from"./chunk-RUHUTZN4.js";import"./chunk-ZRU5F2XT.js";import"./chunk-5A7MWTXX.js";import"./chunk-WYNQLAKD.js";import"./chunk-76VCH7N6.js";import"./chunk-IQDY2YFN.js";import"./chunk-UVBK6YSR.js";import"./chunk-JTNKC4CR.js";import"./chunk-7IQ3B77H.js";import{registerModalEscapeInterceptor as u}from"./chunk-FIEA5CGB.js";import"./chunk-D65T4H6J.js";import"./chunk-FTZ5WHJM.js";import"./chunk-KNUR2UEG.js";import{useShellStrings as p,splitAround as m}from"./chunk-QRCDQPJA.js";import"./chunk-C3QOHMR6.js";import{Icon as h}from"./chunk-ZGUQLVY4.js";import{useRef as y,useState as x,useEffect as f}from"react";import{jsxs as g,jsx as b,Fragment as w}from"react/jsx-runtime";var v=!1;function k(e,t){return e?.url&&e.url!==t.url&&e.url.startsWith("blob:")&&URL.revokeObjectURL(e.url),t}function N(){const n=y(void 0);void 0===n.current&&(n.current=i());const[r,u]=x(n.current?.data??null);f(()=>{const e=n.current;null!=e&&(a(e),u(t=>t===e.data?t:k(t,e.data)))},[]),f(()=>{const e=n.current?.token;if(null==e)return;const t=t=>{const n=t.detail;n&&n.token===e&&u(e=>k(e,n.data))};return window.addEventListener(o,t),()=>window.removeEventListener(o,t)},[]);const v=y(void 0);f(()=>{v.current=r?.url},[r?.url]);const N=y(null);f(()=>(null!==N.current&&(clearTimeout(N.current),N.current=null),()=>{const e=v.current;e?.startsWith("blob:")&&(N.current=setTimeout(()=>URL.revokeObjectURL(e),0))}),[]);const A=p().preview,E=r?.filename?(M=r.filename).length>24?`${M.slice(0,23)}…`:M:A.untitled;var M;const S=y(null),z=y(null),[T,R]=x(null),[F,H]=x(!1),P=y(0),I=()=>S.current?.click(),O=()=>{P.current=0,H(!1)},W=e=>{const t=e.closest("[data-modal-id]");return!t||c()===t.dataset.modalId};f(()=>{const e=()=>O(),t=()=>O(),n=e=>{"Escape"===e.key&&O()};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 B=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?d.error(A.dwgUnsupported):d.error(A.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}))},X=/* @__PURE__ */g("div",{className:"flex items-center gap-2 px-3 py-2 border-b border-gray-200 bg-gray-50 shrink-0",children:[
2
+ /* @__PURE__ */b("input",{ref:S,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&&B(t),S.current&&(S.current.value="")},className:"hidden"}),
3
+ /* @__PURE__ */g("button",{onClick:I,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__ */b(h,{name:"folder-open",className:"h-3.5 w-3.5",strokeWidth:1.5}),A.open]}),
5
5
  /* @__PURE__ */b("span",{className:"text-2xs text-gray-400 ml-1",children:A.formats}),r?.filename&&/* @__PURE__ */g(w,{children:[
6
6
  /* @__PURE__ */b("div",{className:"h-4 w-px bg-gray-300 mx-1"}),
@@ -8,7 +8,7 @@ import{PdfViewer as e,ToolbarSlotContext as t,PanelActions as n}from"./chunk-FTJ
8
8
  /* @__PURE__ */b("div",{ref:R,className:"ml-auto flex items-center gap-1 text-xs"})]});let U;if(r)U=r.converting||!r.url?/* @__PURE__ */b(C,{filename:r.filename,message:r.convertingMessage}):"dxf"===r.kind?/* @__PURE__ */b(L,{url:r.url,filename:r.filename,onDownload:r.onDownload,onEmail:r.onEmail},r.url):"3d"===r.kind?/* @__PURE__ */b(j,{url:r.url,filename:r.filename,onDownload:r.onDownload,onEmail:r.onEmail},r.url):"image"===r.kind?/* @__PURE__ */b(D,{url:r.url,filename:r.filename,onDownload:r.onDownload,onEmail:r.onEmail},r.url):/* @__PURE__ */b(e,{url:r.url,filename:r.filename,onDownload:r.onDownload,onEmail:r.onEmail},r.url);else{const[e,t]=m(A.dropHere),[n,r]=m(A.formatDxf),[s,i]=m(A.format3d);U=/* @__PURE__ */g("div",{className:"flex flex-1 flex-col items-center justify-center text-gray-500 text-sm gap-3 p-8 text-center",children:[
9
9
  /* @__PURE__ */b(h,{name:"page",className:"h-12 w-12 text-gray-300",strokeWidth:1.5}),
10
10
  /* @__PURE__ */g("p",{className:"font-medium text-gray-700",children:[e,
11
- /* @__PURE__ */b("button",{onClick:P,className:"text-blue-600 hover:underline",children:A.open}),t]}),
11
+ /* @__PURE__ */b("button",{onClick:I,className:"text-blue-600 hover:underline",children:A.open}),t]}),
12
12
  /* @__PURE__ */g("div",{className:"text-xs text-gray-500 max-w-sm",children:[
13
13
  /* @__PURE__ */b("p",{className:"font-semibold uppercase tracking-wide text-3xs text-gray-400 mb-1",children:A.supportedFormats}),
14
14
  /* @__PURE__ */g("ul",{className:"space-y-0.5",children:[
@@ -23,7 +23,7 @@ import{PdfViewer as e,ToolbarSlotContext as t,PanelActions as n}from"./chunk-FTJ
23
23
  /* @__PURE__ */g("li",{children:[
24
24
  /* @__PURE__ */b("span",{className:"font-mono text-gray-700",children:".jpg .jpeg .png .gif .webp .svg .avif .bmp"})," — ",A.formatImage]})]}),
25
25
  /* @__PURE__ */b("p",{className:"mt-2 text-2xs text-gray-400 italic",children:A.dwgNote})]})]})}/* @__PURE__ */
26
- return g("div",{className:"relative flex flex-col h-full",ref:z,onDragEnter:e=>{e.dataTransfer?.types?.includes?.("Files")&&W(e.currentTarget)&&(e.preventDefault(),I.current++,F||H(!0))},onDragOver:e=>{e.dataTransfer?.types?.includes?.("Files")&&W(e.currentTarget)&&e.preventDefault()},onDragLeave:()=>{I.current>0&&I.current--,0===I.current&&H(!1)},onDrop:e=>{W(e.currentTarget)?(e=>{e.preventDefault(),O();const t=e.dataTransfer.files?.[0];t&&B(t)})(e):O()},children:[
26
+ return g("div",{className:"relative flex flex-col h-full",ref:z,onDragEnter:e=>{e.dataTransfer?.types?.includes?.("Files")&&W(e.currentTarget)&&(e.preventDefault(),P.current++,F||H(!0))},onDragOver:e=>{e.dataTransfer?.types?.includes?.("Files")&&W(e.currentTarget)&&e.preventDefault()},onDragLeave:()=>{P.current>0&&P.current--,0===P.current&&H(!1)},onDrop:e=>{W(e.currentTarget)?(e=>{e.preventDefault(),O();const t=e.dataTransfer.files?.[0];t&&B(t)})(e):O()},children:[
27
27
  /* @__PURE__ */b(l,{title:A.windowTitle(E)}),
28
28
  /* @__PURE__ */b(s,{app:"preview"}),X,
29
29
  /* @__PURE__ */b(t.Provider,{value:T,children:/* @__PURE__ */b("div",{className:"flex-1 min-h-0",children:U})}),F&&/* @__PURE__ */b("div",{className:"absolute inset-0 bg-blue-500/15 border-4 border-dashed border-blue-500 pointer-events-none flex items-center justify-center z-20",children:/* @__PURE__ */b("div",{className:"px-4 py-2 rounded-md bg-blue-600 text-white text-sm font-medium shadow-lg",children:A.dropToOpen})})]})}function C({filename:e,message:t}){const n=p().preview;/* @__PURE__ */
@@ -35,22 +35,22 @@ return g("div",{className:"flex flex-col items-center justify-center h-full bg-g
35
35
  /* @__PURE__ */b("div",{className:"text-base font-semibold tracking-wide text-gray-700 uppercase",children:t||n.converting}),
36
36
  /* @__PURE__ */b("div",{className:"text-xs text-gray-400 truncate max-w-md",children:e})]}),
37
37
  /* @__PURE__ */b("div",{className:"w-72 h-1.5 rounded-full bg-gray-200 overflow-hidden",children:/* @__PURE__ */b("div",{className:"h-full w-1/3 bg-blue-500 rounded-full animate-pulse",style:{animation:"preview-bar 1.4s ease-in-out infinite"}})}),
38
- /* @__PURE__ */b("style",{children:"@keyframes preview-bar { 0% { transform: translateX(-110%); } 100% { transform: translateX(310%); } }"})]})}var A=["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"],E={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 L({url:e,filename:t,onDownload:r,onEmail:s}){const i=y(null),a=y(null),[o,l]=x(!0),[d,v]=x(null),[k,N]=x([]),[C,L]=x(!1),[S,M]=x(!0),z=p(),T=z.drawing,j=z.preview,D=y(T);D.current=T;const[F,H]=x(!1),[I,P]=x("auto"),[O,W]=x(null),[B,X]=x(null),[U,_]=x(null),[G,Y]=x(""),V=y(I),$=y(U);f(()=>{V.current=I},[I]),f(()=>{$.current=U},[U]);const q=y(null),Z=y(null),K=y(null),[Q,J]=x(""),[ee,te]=x(null),ne=y(""),re=y(null),se=y(null),ie=y(null);f(()=>{let t=!1,n=null;return l(!0),v(null),N([]),(async()=>{let r;try{r=(await(import("dxf-viewer"))).DxfViewer}catch(e){return void(t||(v(D.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},o=r.DefaultOptions?.clearColor;"function"==typeof o?.clone&&(s.clearColor=o.clone().setHex(16777215)),n=new r(i.current,s),a.current=n;const c="undefined"!=typeof window&&window.__REACT_OS_SHELL_DXF_FONTS__||A;if(await n.Load({url:e,fonts:c,workerFactory:null}),t)return;try{const e=n.GetLayers?.()??[];Array.isArray(e)&&N(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||(v(e?.message||D.current.renderFailed),l(!1))}})(),()=>{t=!0;try{n?.Destroy?.()}catch{}a.current=null}},[e]),f(()=>{if(!S||o)return;const e=setTimeout(()=>M(!1),5e3);return()=>clearTimeout(e)},[S,o]);const ae=k.map(e=>e.visible?"1":"0").join("");f(()=>{const e=a.current;if(o||d||!e)return;const t=e.GetScene?.(),n=e.GetCamera?.(),r=e.GetCanvas?.();if(!(t&&n&&r&&i.current))return;const s=()=>{const e=ie.current;e&&(e.overlay&&e.overlay.parentElement&&e.overlay.parentElement.removeChild(e.overlay),ie.current=null)};if(!F)return s(),W(null),void X(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 u=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),u.appendChild(p),c.appendChild(u),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},y=h(),x=h(),f=document.createElementNS("http://www.w3.org/2000/svg","line");f.setAttribute("stroke","#ff8800"),f.setAttribute("stroke-width","1"),f.setAttribute("opacity","0.85"),f.style.display="none",c.appendChild(f);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)}),S=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)}),M=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),ie.current={picks:[],rawSecondClick:null,overlay:l,svg:c,line:b,fixedLine:w,fixedLabel:null,refLine:y,refLineV:x,extLineA:f,extLineB:g,markers:[],label:null,snap:v,segs:null,nodes:null};const z=n?.position?.constructor??t?.position?.constructor??null;let T=!1;const j=(e,t)=>{if(!z)return{x:0,y:0};const s=new z(e,t,0).project(n),i=r.clientWidth,a=r.clientHeight;return{x:(s.x+1)/2*i,y:(1-s.y)/2*a}};(()=>{try{const e=ie.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]]},a=e=>{const t=!!e?.isLineSegments;if(!t&&!!!e?.isPoints)return;const a=e.geometry,o=a?.attributes?.position;if(!o)return;const l=i(a);if(t){const e=a.index,t=Math.floor((e?e.count:o.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,a=o.getX(t),c=o.getY(t),d=o.getX(i),u=o.getY(i);if(Number.isFinite(a+c+d+u))for(const e of l){if(n.length>=16e5)return void(s=!0);const t=e[0]*a+e[1]*c+e[2],r=e[3]*a+e[4]*c+e[5],i=e[0]*d+e[1]*u+e[2],o=e[3]*d+e[4]*u+e[5];t===i&&r===o||n.push(t,r,i,o)}}}else for(let e=0;e<o.count;e++){const t=o.getX(e),n=o.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(a):t.traverse(a),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."),T=!0}catch{}})();const I=(e,t,n,r,s,i,a,o)=>{const l=(n-e)*(o-i)-(r-t)*(a-s);if(Math.abs(l)<1e-9)return null;const c=((s-e)*(o-i)-(i-t)*(a-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}},P=()=>{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},O=(e,t,n)=>{const r=j(t,n);e.style.left=`${r.x}px`,e.style.top=`${r.y}px`},B=()=>{const e=ie.current;if(!e||!e.rawSecondClick||e.picks.length<2)return;const t=e.picks[0],n=e.rawSecondClick,r=$.current,s=V.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)}}},U=(e,t)=>{const n=V.current;return"auto"!==n?n:e&&t?Math.abs(t.x-e.x)>=Math.abs(t.y-e.y)?"horizontal":"vertical":"horizontal"},_=()=>{const e=ie.current;if(!e)return;B();const t=V.current,n=$.current,s=null!==n&&Number.isFinite(n)&&("horizontal"===t||"vertical"===t);e.markers[0]&&O(e.markers[0],e.picks[0].x,e.picks[0].y),e.markers[1]&&O(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],a=r.clientWidth,o=r.clientHeight,l=4*Math.hypot(a,o),c=j(i.x,i.y),d=j(i.x+n.dx,i.y+n.dy),u=l/(Math.hypot(d.x-c.x,d.y-c.y)||1),p=j(i.x-n.dx*u,i.y-n.dy*u),m=j(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 a="horizontal"===t,o="vertical"===t;if("auto"===t)if(e.picks.length>=2){const t=U(e.picks[0],e.picks[1]);a="horizontal"===t,o="vertical"===t}else a=!0,o=!0;if(i(e.refLine,{dx:1,dy:0},a),i(e.refLineV,{dx:0,dy:1},o),2===e.picks.length){const t=e.picks[0],i=e.picks[1],a=U(t,i),o=(()=>{const e=ie.current,t=e.picks[0],n=e.picks[1],r=U(t,n),s=V.current,i=$.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=j(o.from.x,o.from.y),c=j(o.to.x,o.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"===a?{x:i.x,y:t.y}:{x:t.x,y:i.y},o=j(t.x,t.y),l=j(s.x,s.y);e.fixedLine.setAttribute("x1",String(o.x)),e.fixedLine.setAttribute("y1",String(o.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=G();c.textContent=R(Math.abs(n));const d=(o.x+l.x)/2,u=(o.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"===a&&Math.abs(i.y-t.y)>1e-9){const e=j(i.x,t.y),n=j(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"===a&&Math.abs(i.x-t.x)>1e-9){const e=j(t.x,i.y),n=j(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")},G=()=>{const e=ie.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,Q=0,J=0,ee=!1,ne=!1,re=null;const se=e=>{const t=e?.detail;t&&0===t.domEvent?.button&&(Y=t.canvasCoord.x,Q=t.canvasCoord.y,J=performance.now(),ne=!1,ee=!0)},ae=e=>{const t=r.getBoundingClientRect(),n=e.clientX-t.left,s=e.clientY-t.top;ee&&(n-Y)**2+(s-Q)**2>16&&(ne=!0);const i=ie.current;var a;if(i&&i.snap)if(ee&&ne)i.snap.style.display="none";else if(re=((e,t)=>{const n=ie.current;if(!n||!T||!n.segs)return null;const r=j(0,0),s=j(1,0),i=j(0,1),a=s.x-r.x,o=s.y-r.y,l=i.x-r.x,c=i.y-r.y,d=a*c-l*o;if(!d)return null;const u=((e-r.x)*c-(t-r.y)*l)/d,p=((t-r.y)*a-(e-r.x)*o)/d,m=18/(Math.hypot(a,o)||1),h=18/(Math.hypot(l,c)||1),y=u-m,x=u+m,f=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 S=[],M=n.segs;for(let n=0;n<M.length;n+=4){const s=M[n],i=M[n+1],d=M[n+2],u=M[n+3];if(s<y&&d<y||s>x&&d>x||i<f&&u<f||i>g&&u>g)continue;const p=r.x+a*s+l*i,m=r.y+o*s+c*i,h=r.x+a*d+l*u,E=r.y+o*d+c*u;let L=!1,z=e-p,T=t-m,R=z*z+T*T;R<b&&(L=!0,R<v&&(v=R,w={sx:s,sy:i,type:"endpoint"})),z=e-h,T=t-E,R=z*z+T*T,R<b&&(L=!0,R<v&&(v=R,w={sx:d,sy:u,type:"endpoint"})),z=e-(p+h)/2,T=t-(m+E)/2,R=z*z+T*T,R<b&&(L=!0,R<N&&(N=R,k={sx:(s+d)/2,sy:(i+u)/2,type:"midpoint"}));const j=h-p,D=E-m,F=j*j+D*D;if(F>0){const n=((e-p)*j+(t-m)*D)/F;n>0&&n<1&&(z=e-(p+n*j),T=t-(m+n*D),R=z*z+T*T,R<b&&(L=!0,R<A&&(A=R,C={sx:s+n*(d-s),sy:i+n*(u-i),type:"line"})))}L&&S.push({ax:s,ay:i,bx:d,by:u,apx:p,apy:m,bpx:h,bpy:E})}const z=n.nodes;if(z)for(let n=0;n<z.length;n+=2){const s=z[n],i=z[n+1];if(s<y||s>x||i<f||i>g)continue;const d=e-(r.x+a*s+l*i),u=t-(r.y+o*s+c*i),p=d*d+u*u;p<v&&(v=p,w={sx:s,sy:i,type:"node"})}for(let n=0;n<S.length;n++){const r=S[n];for(let s=n+1;s<S.length;s++){const n=S[s],i=I(r.apx,r.apy,r.bpx,r.bpy,n.apx,n.apy,n.bpx,n.bpy);if(!i)continue;const a=e-i.px,o=t-i.py,l=a*a+o*o;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=j(re.sx,re.sy);i.snap.style.left=`${e.x}px`,i.snap.style.top=`${e.y}px`,i.snap.style.display="",a=re.type,A.style.display="endpoint"===a?"":"none",E.style.display="intersection"===a?"":"none",L.style.display="line"===a?"":"none",S.style.display="midpoint"===a?"":"none",M.style.display="node"===a?"":"none"}else i.snap.style.display="none"},oe=e=>{if(!ee)return;ee=!1;const t=performance.now()-J;if(ne||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=ie.current;if(!e||2!==e.picks.length)return;B();const t=e.picks[0],n=e.picks[1],r=V.current,s=U(t,n),i=$.current,a=null!==i&&Number.isFinite(i)&&("horizontal"===r||"vertical"===r);let o,c,d="",u=s;const p=Math.abs(n.x-t.x),m=Math.abs(n.y-t.y);if(a&&"horizontal"===r?(o=m,d=" ↕",u="vertical",c=D.current.echoLocked("ΔY",R(m),"ΔX",R(Math.abs(i)))):a&&"vertical"===r?(o=p,d=" ↔",u="horizontal",c=D.current.echoLocked("ΔX",R(p),"ΔY",R(Math.abs(i)))):"horizontal"===s?(o=p,d=" ↔",c=D.current.echoLinear(R(p),"ΔX")):"vertical"===s?(o=m,d=" ↕",c=D.current.echoLinear(R(m),"ΔY")):(o=Math.hypot(n.x-t.x,n.y-t.y),c=D.current.echoDistance(R(o),R(p),R(m))),!Number.isFinite(o))return W(null),X(null),void(e.label&&(e.label.style.opacity="0"));W(o),X(u),te(c);const h=(()=>{const e=ie.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=`${R(o)}${d}`};q.current=()=>{le(),_()};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"),W(null),X(null)},de=()=>{const e=ie.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,K.current=()=>{const e=ie.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),_()};const ue=e=>{const t=ie.current;t&&(2===t.picks.length&&de(),0===t.picks.length?(t.picks.push({x:e.x,y:e.y}),t.markers.push(P())):(t.rawSecondClick={x:e.x,y:e.y},t.picks.push({x:e.x,y:e.y}),t.markers.push(P()),le()),_())},pe=e=>{"Escape"===e.key&&H(!1)};r.style.cursor="crosshair";try{e.Subscribe?.("pointerdown",se)}catch{}try{e.Subscribe?.("pointerup",oe)}catch{}try{e.Subscribe?.("viewChanged",_)}catch{}return r.addEventListener("pointermove",ae),window.addEventListener("keydown",pe),()=>{r.style.cursor="";try{e.Unsubscribe?.("pointerdown",se)}catch{}try{e.Unsubscribe?.("pointerup",oe)}catch{}try{e.Unsubscribe?.("viewChanged",_)}catch{}r.removeEventListener("pointermove",ae),window.removeEventListener("keydown",pe),q.current=null,Z.current=null,K.current=null,s(),W(null),X(null)}},[F,o,d,ae]),f(()=>{q.current?.()},[I,U]);const oe=e=>{N(t=>t.map(t=>{if(t.visible===e)return t;try{a.current?.ShowLayer?.(t.name,e)}catch{}return{...t,visible:e}}))},le=()=>{try{const e=a.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{}};f(()=>{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=se.current;if(!n)return;const r=n.closest("[data-modal-id]");r&&c()!==r.dataset.modalId||re.current?.focus()};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[]);const ce=y(Q),de=y(F);f(()=>{ce.current=Q},[Q]),f(()=>{de.current=F},[F]),f(()=>u(()=>{const e=se.current;if(!e)return!1;const t=e.closest("[data-modal-id]");return!(!t||c()!==t.dataset.modalId)&&(ce.current?(J(""),te(D.current.cancelled),!0):!!de.current&&(H(!1),te(D.current.measureOff),!0))}),[]);const ue="px-2 py-1 rounded hover:bg-gray-200 transition-colors text-gray-600 flex items-center gap-1",[pe,me]=m(T.typeToMeasure);/* @__PURE__ */
38
+ /* @__PURE__ */b("style",{children:"@keyframes preview-bar { 0% { transform: translateX(-110%); } 100% { transform: translateX(310%); } }"})]})}var A=["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"],E={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 L({url:e,filename:t,onDownload:r,onEmail:s}){const i=y(null),a=y(null),[o,l]=x(!0),[d,v]=x(null),[k,N]=x([]),[C,L]=x(!1),[M,S]=x(!0),z=p(),T=z.drawing,j=z.preview,D=y(T);D.current=T;const[F,H]=x(!1),[P,I]=x("auto"),[O,W]=x(null),[B,X]=x(null),[U,_]=x(null),[G,V]=x(""),Y=y(P),$=y(U);f(()=>{Y.current=P},[P]),f(()=>{$.current=U},[U]);const Z=y(null),q=y(null),K=y(null),[Q,J]=x(""),[ee,te]=x(null),ne=y(""),re=y(null),se=y(null),ie=y(null);f(()=>{let t=!1,n=null;return l(!0),v(null),N([]),(async()=>{let r;try{r=(await(import("dxf-viewer"))).DxfViewer}catch(e){return void(t||(v(D.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},o=r.DefaultOptions?.clearColor;"function"==typeof o?.clone&&(s.clearColor=o.clone().setHex(16777215)),n=new r(i.current,s),a.current=n;const c="undefined"!=typeof window&&window.__REACT_OS_SHELL_DXF_FONTS__||A;if(await n.Load({url:e,fonts:c,workerFactory:null}),t)return;try{const e=n.GetLayers?.()??[];Array.isArray(e)&&N(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||(v(e?.message||D.current.renderFailed),l(!1))}})(),()=>{t=!0;try{n?.Destroy?.()}catch{}a.current=null}},[e]),f(()=>{if(!M||o)return;const e=setTimeout(()=>S(!1),5e3);return()=>clearTimeout(e)},[M,o]);const ae=k.map(e=>e.visible?"1":"0").join("");f(()=>{const e=a.current;if(o||d||!e)return;const t=e.GetScene?.(),n=e.GetCamera?.(),r=e.GetCanvas?.();if(!(t&&n&&r&&i.current))return;const s=()=>{const e=ie.current;e&&(e.overlay&&e.overlay.parentElement&&e.overlay.parentElement.removeChild(e.overlay),ie.current=null)};if(!F)return s(),W(null),void X(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 u=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),u.appendChild(p),c.appendChild(u),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},y=h(),x=h(),f=document.createElementNS("http://www.w3.org/2000/svg","line");f.setAttribute("stroke","#ff8800"),f.setAttribute("stroke-width","1"),f.setAttribute("opacity","0.85"),f.style.display="none",c.appendChild(f);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),ie.current={picks:[],rawSecondClick:null,overlay:l,svg:c,line:b,fixedLine:w,fixedLabel:null,refLine:y,refLineV:x,extLineA:f,extLineB:g,markers:[],label:null,snap:v,segs:null,nodes:null};const z=n?.position?.constructor??t?.position?.constructor??null;let T=!1;const j=(e,t)=>{if(!z)return{x:0,y:0};const s=new z(e,t,0).project(n),i=r.clientWidth,a=r.clientHeight;return{x:(s.x+1)/2*i,y:(1-s.y)/2*a}};(()=>{try{const e=ie.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]]},a=e=>{const t=!!e?.isLineSegments;if(!t&&!!!e?.isPoints)return;const a=e.geometry,o=a?.attributes?.position;if(!o)return;const l=i(a);if(t){const e=a.index,t=Math.floor((e?e.count:o.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,a=o.getX(t),c=o.getY(t),d=o.getX(i),u=o.getY(i);if(Number.isFinite(a+c+d+u))for(const e of l){if(n.length>=16e5)return void(s=!0);const t=e[0]*a+e[1]*c+e[2],r=e[3]*a+e[4]*c+e[5],i=e[0]*d+e[1]*u+e[2],o=e[3]*d+e[4]*u+e[5];t===i&&r===o||n.push(t,r,i,o)}}}else for(let e=0;e<o.count;e++){const t=o.getX(e),n=o.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(a):t.traverse(a),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."),T=!0}catch{}})();const P=(e,t,n,r,s,i,a,o)=>{const l=(n-e)*(o-i)-(r-t)*(a-s);if(Math.abs(l)<1e-9)return null;const c=((s-e)*(o-i)-(i-t)*(a-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}},I=()=>{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},O=(e,t,n)=>{const r=j(t,n);e.style.left=`${r.x}px`,e.style.top=`${r.y}px`},B=()=>{const e=ie.current;if(!e||!e.rawSecondClick||e.picks.length<2)return;const t=e.picks[0],n=e.rawSecondClick,r=$.current,s=Y.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)}}},U=(e,t)=>{const n=Y.current;return"auto"!==n?n:e&&t?Math.abs(t.x-e.x)>=Math.abs(t.y-e.y)?"horizontal":"vertical":"horizontal"},_=()=>{const e=ie.current;if(!e)return;B();const t=Y.current,n=$.current,s=null!==n&&Number.isFinite(n)&&("horizontal"===t||"vertical"===t);e.markers[0]&&O(e.markers[0],e.picks[0].x,e.picks[0].y),e.markers[1]&&O(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],a=r.clientWidth,o=r.clientHeight,l=4*Math.hypot(a,o),c=j(i.x,i.y),d=j(i.x+n.dx,i.y+n.dy),u=l/(Math.hypot(d.x-c.x,d.y-c.y)||1),p=j(i.x-n.dx*u,i.y-n.dy*u),m=j(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 a="horizontal"===t,o="vertical"===t;if("auto"===t)if(e.picks.length>=2){const t=U(e.picks[0],e.picks[1]);a="horizontal"===t,o="vertical"===t}else a=!0,o=!0;if(i(e.refLine,{dx:1,dy:0},a),i(e.refLineV,{dx:0,dy:1},o),2===e.picks.length){const t=e.picks[0],i=e.picks[1],a=U(t,i),o=(()=>{const e=ie.current,t=e.picks[0],n=e.picks[1],r=U(t,n),s=Y.current,i=$.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=j(o.from.x,o.from.y),c=j(o.to.x,o.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"===a?{x:i.x,y:t.y}:{x:t.x,y:i.y},o=j(t.x,t.y),l=j(s.x,s.y);e.fixedLine.setAttribute("x1",String(o.x)),e.fixedLine.setAttribute("y1",String(o.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=G();c.textContent=R(Math.abs(n));const d=(o.x+l.x)/2,u=(o.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"===a&&Math.abs(i.y-t.y)>1e-9){const e=j(i.x,t.y),n=j(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"===a&&Math.abs(i.x-t.x)>1e-9){const e=j(t.x,i.y),n=j(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")},G=()=>{const e=ie.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,Q=0,J=0,ee=!1,ne=!1,re=null;const se=e=>{const t=e?.detail;t&&0===t.domEvent?.button&&(V=t.canvasCoord.x,Q=t.canvasCoord.y,J=performance.now(),ne=!1,ee=!0)},ae=e=>{const t=r.getBoundingClientRect(),n=e.clientX-t.left,s=e.clientY-t.top;ee&&(n-V)**2+(s-Q)**2>16&&(ne=!0);const i=ie.current;var a;if(i&&i.snap)if(ee&&ne)i.snap.style.display="none";else if(re=((e,t)=>{const n=ie.current;if(!n||!T||!n.segs)return null;const r=j(0,0),s=j(1,0),i=j(0,1),a=s.x-r.x,o=s.y-r.y,l=i.x-r.x,c=i.y-r.y,d=a*c-l*o;if(!d)return null;const u=((e-r.x)*c-(t-r.y)*l)/d,p=((t-r.y)*a-(e-r.x)*o)/d,m=18/(Math.hypot(a,o)||1),h=18/(Math.hypot(l,c)||1),y=u-m,x=u+m,f=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<y&&d<y||s>x&&d>x||i<f&&u<f||i>g&&u>g)continue;const p=r.x+a*s+l*i,m=r.y+o*s+c*i,h=r.x+a*d+l*u,E=r.y+o*d+c*u;let L=!1,z=e-p,T=t-m,R=z*z+T*T;R<b&&(L=!0,R<v&&(v=R,w={sx:s,sy:i,type:"endpoint"})),z=e-h,T=t-E,R=z*z+T*T,R<b&&(L=!0,R<v&&(v=R,w={sx:d,sy:u,type:"endpoint"})),z=e-(p+h)/2,T=t-(m+E)/2,R=z*z+T*T,R<b&&(L=!0,R<N&&(N=R,k={sx:(s+d)/2,sy:(i+u)/2,type:"midpoint"}));const j=h-p,D=E-m,F=j*j+D*D;if(F>0){const n=((e-p)*j+(t-m)*D)/F;n>0&&n<1&&(z=e-(p+n*j),T=t-(m+n*D),R=z*z+T*T,R<b&&(L=!0,R<A&&(A=R,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 z=n.nodes;if(z)for(let n=0;n<z.length;n+=2){const s=z[n],i=z[n+1];if(s<y||s>x||i<f||i>g)continue;const d=e-(r.x+a*s+l*i),u=t-(r.y+o*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=P(r.apx,r.apy,r.bpx,r.bpy,n.apx,n.apy,n.bpx,n.bpy);if(!i)continue;const a=e-i.px,o=t-i.py,l=a*a+o*o;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=j(re.sx,re.sy);i.snap.style.left=`${e.x}px`,i.snap.style.top=`${e.y}px`,i.snap.style.display="",a=re.type,A.style.display="endpoint"===a?"":"none",E.style.display="intersection"===a?"":"none",L.style.display="line"===a?"":"none",M.style.display="midpoint"===a?"":"none",S.style.display="node"===a?"":"none"}else i.snap.style.display="none"},oe=e=>{if(!ee)return;ee=!1;const t=performance.now()-J;if(ne||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=ie.current;if(!e||2!==e.picks.length)return;B();const t=e.picks[0],n=e.picks[1],r=Y.current,s=U(t,n),i=$.current,a=null!==i&&Number.isFinite(i)&&("horizontal"===r||"vertical"===r);let o,c,d="",u=s;const p=Math.abs(n.x-t.x),m=Math.abs(n.y-t.y);if(a&&"horizontal"===r?(o=m,d=" ↕",u="vertical",c=D.current.echoLocked("ΔY",R(m),"ΔX",R(Math.abs(i)))):a&&"vertical"===r?(o=p,d=" ↔",u="horizontal",c=D.current.echoLocked("ΔX",R(p),"ΔY",R(Math.abs(i)))):"horizontal"===s?(o=p,d=" ↔",c=D.current.echoLinear(R(p),"ΔX")):"vertical"===s?(o=m,d=" ↕",c=D.current.echoLinear(R(m),"ΔY")):(o=Math.hypot(n.x-t.x,n.y-t.y),c=D.current.echoDistance(R(o),R(p),R(m))),!Number.isFinite(o))return W(null),X(null),void(e.label&&(e.label.style.opacity="0"));W(o),X(u),te(c);const h=(()=>{const e=ie.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=`${R(o)}${d}`};Z.current=()=>{le(),_()};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"),W(null),X(null)},de=()=>{const e=ie.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)}};q.current=de,K.current=()=>{const e=ie.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),_()};const ue=e=>{const t=ie.current;t&&(2===t.picks.length&&de(),0===t.picks.length?(t.picks.push({x:e.x,y:e.y}),t.markers.push(I())):(t.rawSecondClick={x:e.x,y:e.y},t.picks.push({x:e.x,y:e.y}),t.markers.push(I()),le()),_())},pe=e=>{"Escape"===e.key&&H(!1)};r.style.cursor="crosshair";try{e.Subscribe?.("pointerdown",se)}catch{}try{e.Subscribe?.("pointerup",oe)}catch{}try{e.Subscribe?.("viewChanged",_)}catch{}return r.addEventListener("pointermove",ae),window.addEventListener("keydown",pe),()=>{r.style.cursor="";try{e.Unsubscribe?.("pointerdown",se)}catch{}try{e.Unsubscribe?.("pointerup",oe)}catch{}try{e.Unsubscribe?.("viewChanged",_)}catch{}r.removeEventListener("pointermove",ae),window.removeEventListener("keydown",pe),Z.current=null,q.current=null,K.current=null,s(),W(null),X(null)}},[F,o,d,ae]),f(()=>{Z.current?.()},[P,U]);const oe=e=>{N(t=>t.map(t=>{if(t.visible===e)return t;try{a.current?.ShowLayer?.(t.name,e)}catch{}return{...t,visible:e}}))},le=()=>{try{const e=a.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{}};f(()=>{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=se.current;if(!n)return;const r=n.closest("[data-modal-id]");r&&c()!==r.dataset.modalId||re.current?.focus()};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[]);const ce=y(Q),de=y(F);f(()=>{ce.current=Q},[Q]),f(()=>{de.current=F},[F]),f(()=>u(()=>{const e=se.current;if(!e)return!1;const t=e.closest("[data-modal-id]");return!(!t||c()!==t.dataset.modalId)&&(ce.current?(J(""),te(D.current.cancelled),!0):!!de.current&&(H(!1),te(D.current.measureOff),!0))}),[]);const ue="px-2 py-1 rounded hover:bg-gray-200 transition-colors text-gray-600 flex items-center gap-1",[pe,me]=m(T.typeToMeasure);/* @__PURE__ */
39
39
  return g("div",{ref:se,className:"flex flex-col h-full",children:[
40
40
  /* @__PURE__ */g(n,{children:[
41
41
  /* @__PURE__ */g("button",{onClick:()=>L(e=>!e),className:ue+(C?" bg-gray-200":""),title:T.layersHint,disabled:0===k.length,children:[
42
42
  /* @__PURE__ */b(h,{name:"layers",className:"h-3.5 w-3.5",strokeWidth:1.5}),T.layers," ",k.length>0&&/* @__PURE__ */g("span",{className:"text-gray-400",children:["(",k.filter(e=>e.visible).length,"/",k.length,")"]})]}),
43
- /* @__PURE__ */b("button",{onClick:()=>M(e=>!e),className:ue,title:j.howToNavigate,children:/* @__PURE__ */b(h,{name:"help",className:"h-3.5 w-3.5",strokeWidth:1.5})}),
43
+ /* @__PURE__ */b("button",{onClick:()=>S(e=>!e),className:ue,title:j.howToNavigate,children:/* @__PURE__ */b(h,{name:"help",className:"h-3.5 w-3.5",strokeWidth:1.5})}),
44
44
  /* @__PURE__ */g("button",{onClick:()=>H(e=>!e),className:ue+(F?" bg-gray-200":""),title:F?j.stopMeasuring:T.measureHint,children:[
45
45
  /* @__PURE__ */g("svg",{className:"h-3.5 w-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.5,children:[
46
46
  /* @__PURE__ */b("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3.75 14.25l6-6 6 6 4.5-4.5M9.75 8.25v3M12.75 11.25v3M15.75 14.25v3"}),
47
47
  /* @__PURE__ */b("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M2.25 18.75h19.5"})]}),T.measure]}),F&&/* @__PURE__ */g(w,{children:[
48
48
  /* @__PURE__ */g("div",{className:"flex items-stretch h-7 rounded border border-gray-200 overflow-hidden text-2xs font-semibold",children:[
49
- /* @__PURE__ */b("button",{onClick:()=>P("auto"),className:"px-2 transition-colors "+("auto"===I?"bg-orange-500 text-white":"bg-white text-gray-600 hover:bg-gray-50"),title:T.autoHint,children:T.auto}),
50
- /* @__PURE__ */b("button",{onClick:()=>P("horizontal"),className:"px-2 transition-colors "+("horizontal"===I?"bg-orange-500 text-white":"bg-white text-gray-600 hover:bg-gray-50"),title:T.horizontalHint,children:"H"}),
51
- /* @__PURE__ */b("button",{onClick:()=>P("vertical"),className:"px-2 transition-colors "+("vertical"===I?"bg-orange-500 text-white":"bg-white text-gray-600 hover:bg-gray-50"),title:T.verticalHint,children:"V"}),
52
- /* @__PURE__ */b("button",{onClick:()=>P("point"),className:"px-2 transition-colors "+("point"===I?"bg-orange-500 text-white":"bg-white text-gray-600 hover:bg-gray-50"),title:T.pointHint,children:T.point})]}),("horizontal"===I||"vertical"===I)&&/* @__PURE__ */g("div",{className:"flex items-center gap-1",children:[
53
- /* @__PURE__ */b("input",{type:"number",inputMode:"decimal",step:"any",value:G,placeholder:"horizontal"===I?T.fixX:T.fixY,onChange:e=>{const t=e.target.value;if(Y(t),""===t.trim())_(null);else{const e=parseFloat(t);_(Number.isFinite(e)&&0!==e?e:null)}},className:"h-7 w-20 px-2 text-2xs font-mono rounded border border-gray-200 bg-white text-gray-700 focus:outline-none focus:border-orange-400",title:T.fixHint}),null!==U&&/* @__PURE__ */b("button",{onClick:()=>{_(null),Y("")},className:"text-gray-400 hover:text-gray-600 text-2xs px-1",title:T.clearFixed,children:"×"})]})]}),F&&null!==O&&/* @__PURE__ */g("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"===I):"vertical"===B?T.verticalDistance("auto"===I):T.straightDistance,children:[R(O),"horizontal"===B?" ↔":"vertical"===B?" ↕":""]}),
49
+ /* @__PURE__ */b("button",{onClick:()=>I("auto"),className:"px-2 transition-colors "+("auto"===P?"bg-orange-500 text-white":"bg-white text-gray-600 hover:bg-gray-50"),title:T.autoHint,children:T.auto}),
50
+ /* @__PURE__ */b("button",{onClick:()=>I("horizontal"),className:"px-2 transition-colors "+("horizontal"===P?"bg-orange-500 text-white":"bg-white text-gray-600 hover:bg-gray-50"),title:T.horizontalHint,children:"H"}),
51
+ /* @__PURE__ */b("button",{onClick:()=>I("vertical"),className:"px-2 transition-colors "+("vertical"===P?"bg-orange-500 text-white":"bg-white text-gray-600 hover:bg-gray-50"),title:T.verticalHint,children:"V"}),
52
+ /* @__PURE__ */b("button",{onClick:()=>I("point"),className:"px-2 transition-colors "+("point"===P?"bg-orange-500 text-white":"bg-white text-gray-600 hover:bg-gray-50"),title:T.pointHint,children:T.point})]}),("horizontal"===P||"vertical"===P)&&/* @__PURE__ */g("div",{className:"flex items-center gap-1",children:[
53
+ /* @__PURE__ */b("input",{type:"number",inputMode:"decimal",step:"any",value:G,placeholder:"horizontal"===P?T.fixX:T.fixY,onChange:e=>{const t=e.target.value;if(V(t),""===t.trim())_(null);else{const e=parseFloat(t);_(Number.isFinite(e)&&0!==e?e:null)}},className:"h-7 w-20 px-2 text-2xs font-mono rounded border border-gray-200 bg-white text-gray-700 focus:outline-none focus:border-orange-400",title:T.fixHint}),null!==U&&/* @__PURE__ */b("button",{onClick:()=>{_(null),V("")},className:"text-gray-400 hover:text-gray-600 text-2xs px-1",title:T.clearFixed,children:"×"})]})]}),F&&null!==O&&/* @__PURE__ */g("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"===P):"vertical"===B?T.verticalDistance("auto"===P):T.straightDistance,children:[R(O),"horizontal"===B?" ↔":"vertical"===B?" ↕":""]}),
54
54
  /* @__PURE__ */b("button",{onClick:le,className:ue,title:T.fitHint,children:T.fit}),
55
55
  /* @__PURE__ */g("button",{onClick:r??(()=>{const n=document.createElement("a");n.href=e,n.download=t,n.click()}),className:ue,children:[
56
56
  /* @__PURE__ */b(h,{name:"download",className:"h-3.5 w-3.5",strokeWidth:1.5}),j.download]}),s&&/* @__PURE__ */g("button",{onClick:s,className:ue,children:[
@@ -66,7 +66,7 @@ return g("div",{ref:se,className:"flex flex-col h-full",children:[
66
66
  /* @__PURE__ */b("div",{className:"overflow-y-auto py-1",children:k.map(e=>{/* @__PURE__ */return g("label",{className:"flex items-center gap-2 px-2 py-1 hover:bg-gray-100 cursor-pointer",children:[
67
67
  /* @__PURE__ */b("input",{type:"checkbox",checked:e.visible,onChange:()=>{return t=e.name,void N(e=>e.map(e=>{if(e.name!==t)return e;const n=!e.visible;try{a.current?.ShowLayer?.(t,n)}catch{}return{...e,visible:n}}));var t},className:"h-3.5 w-3.5"}),
68
68
  /* @__PURE__ */b("span",{className:"inline-block h-3 w-3 rounded-sm border border-gray-300 shrink-0",style:{background:(t=e.color,"number"!=typeof t?"#999":"#"+t.toString(16).padStart(6,"0"))}}),
69
- /* @__PURE__ */b("span",{className:"truncate text-gray-700",title:e.displayName,children:e.displayName||e.name})]},e.name);var t})})]}),S&&!o&&!d&&/* @__PURE__ */g("div",{className:"absolute bottom-3 left-1/2 -translate-x-1/2 bg-gray-900/85 text-white text-2xs px-3 min-h-8 py-1 rounded-full shadow-lg flex items-center gap-3 z-10 pointer-events-none",children:[
69
+ /* @__PURE__ */b("span",{className:"truncate text-gray-700",title:e.displayName,children:e.displayName||e.name})]},e.name);var t})})]}),M&&!o&&!d&&/* @__PURE__ */g("div",{className:"absolute bottom-3 left-1/2 -translate-x-1/2 bg-gray-900/85 text-white text-2xs px-3 min-h-8 py-1 rounded-full shadow-lg flex items-center gap-3 z-10 pointer-events-none",children:[
70
70
  /* @__PURE__ */g("span",{className:"flex items-center gap-1",children:[
71
71
  /* @__PURE__ */b("svg",{className:"h-3.5 w-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:/* @__PURE__ */b("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 15l-2 5L9 9l11 4-5 2zm0 0l5 5M7.188 2.239l.777 2.897M5.136 7.965l-2.898-.777M13.95 4.05l-2.122 2.122m-5.657 5.656l-2.12 2.122"})}),T.dragToPan]}),
72
72
  /* @__PURE__ */b("span",{className:"text-white/40",children:"•"}),
@@ -81,7 +81,7 @@ return g("div",{ref:se,className:"flex flex-col h-full",children:[
81
81
  /* @__PURE__ */g("div",{className:"shrink-0 border-t border-gray-200 bg-gray-50",children:[ee&&/* @__PURE__ */b("div",{className:"px-3 pt-1 text-2xs font-mono text-gray-500 truncate",title:ee,children:ee}),
82
82
  /* @__PURE__ */g("div",{className:"flex items-center gap-2 px-3 h-7",children:[
83
83
  /* @__PURE__ */b("span",{className:"text-2xs font-mono font-semibold text-gray-400 select-none",children:">"}),
84
- /* @__PURE__ */b("input",{ref:re,value:Q,onChange:e=>J(e.target.value),onKeyDown:e=>{"Enter"===e.key||" "===e.key?(e.preventDefault(),(e=>{const t=e.trim()||ne.current;if(J(""),!t)return;const n=t.toLowerCase().split(/\s+/)[0],r=()=>{ne.current=t},s=(e,t)=>{H(!0),P(e),Z.current?.(),te(t),r()};if(/^-?(\d+\.?\d*|\.\d+)$/.test(n))if(!F||"horizontal"!==I&&"vertical"!==I)te(T.fixedNeedsAxis);else{const e=parseFloat(n);e?(Y(n),_(e),te(T.axisLocked("horizontal"===I?"ΔX":"ΔY",R(Math.abs(e))))):(Y(""),_(null),te(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":H(!0),P("horizontal"),te(T.echoHorizontal),r();break;case"v":case"ver":case"vertical":H(!0),P("vertical"),te(T.echoVertical),r();break;case"au":case"auto":H(!0),P("auto"),te(T.echoAuto),r();break;case"measure":H(!F),te(F?T.measureOff:T.measureOn),r();break;case"u":case"undo":K.current?.(),te(T.pickRemoved),r();break;case"z":case"ze":case"zoom":case"fit":case"zoomextents":le(),te(T.zoomExtents),r();break;case"la":case"layer":case"layers":L(e=>!e),te(T.layersToggled),r();break;case"off":case"clear":_(null),Y(""),Z.current?.(),te(T.measurementCleared),r();break;case"?":case"help":te(T.commandHelp);break;default:{const e=E[n];te(e?T.readOnly(e):T.unknownCommand(n.toUpperCase()))}}})(Q)):"Escape"===e.key&&(Q?(e.stopPropagation(),J(""),te(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-gray-700 focus:outline-none placeholder:text-gray-300"})]})]})]})}var S="https://cdn.jsdelivr.net/npm/online-3d-viewer@0.18.0/libs/";function M(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=>M(e,t,n+1))}}function z(e,t){t.add(e.id);for(const n of e.children)z(n,t)}function T(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 R(e){return e>=1e3?`${(e/1e3).toFixed(3)} m`:`${e.toFixed(2)} mm`}function j({url:e,filename:t,onDownload:r,onEmail:s}){const i=y(null),a=y(null),o=y(null),[l,c]=x(!0),[d,u]=x(null),[m,w]=x(!0),k=p(),N=k.model,C=k.preview,A=y(N);A.current=N;const[E,L]=x(null),[j,D]=x({}),[F,H]=x(/* @__PURE__ */new Set),[I,P]=x("#f5f6f8"),[O,W]=x(!0),[B,X]=x("#000000"),[U,_]=x(1),[G,Y]=x(!1),[V,$]=x(!1),[q,Z]=x(!1),[K,Q]=x(!1),[J,ee]=x("x"),[te,ne]=x(!1),[re,se]=x(.5),[ie,ae]=x(0),[oe,le]=x(!1),[ce,de]=x("point"),[ue,pe]=x(null),me=y(null),he=y(null);f(()=>{let n=!1,r=null,s=null;return c(!0),u(null),L(null),D({}),H(/* @__PURE__ */new Set),(async()=>{let l;try{l=await(import("online-3d-viewer"))}catch{return void(n||(u(A.current.notInstalled),c(!1)))}if(o.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 o="undefined"!=typeof window&&window.__REACT_OS_SHELL_O3DV_LIBS__||S;l.SetExternalLibLocation?.(o),function(){if(v)return;if("undefined"==typeof HTMLCanvasElement)return;v=!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=M(t,{root:A.current.rootNode,node:A.current.node});L(e);const n={[e.id]:!0};for(const t of e.children)n[t.id]=!0;D(n)}}catch(e){console.warn("[Preview] mesh tree extraction failed",e)}c(!1)}},onModelLoadFailed:()=>{n||(u(A.current.loadFailed),c(!1))}}),a.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=a.current;e?.Resize?e.Resize():e?.viewer?.Resize&&e.viewer.Resize(),e?.viewer?.Render?.()}catch{}}),s.observe(i.current))}catch(e){n||(u(e?.message||A.current.loadFailed),c(!1))}})(),()=>{n=!0;try{s?.disconnect()}catch{}try{r?.Destroy?.()}catch{}a.current=null}},[e,t]),f(()=>{const e=a.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=!F.has(n))};e.viewer.mainModel?.EnumerateMeshesAndLines?.(t),e.viewer.mainModel?.EnumerateEdges?.(t),e.viewer.Render?.()}catch(e){console.warn("[Preview] visibility update failed",e)}},[F,E]),f(()=>{const e=o.current,t=a.current;if(e&&t?.viewer)try{t.viewer.SetEdgeSettings(new e.EdgeSettings(O,T(e,B),U));const n=he.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,U]),f(()=>{const e=o.current,t=a.current;if(e&&t?.viewer)try{const n=T(e,I);t.viewer.SetBackgroundColor(new e.RGBAColor(n.r,n.g,n.b,255)),t.viewer.Render?.()}catch{}},[I]),f(()=>{const e=a.current;if(!e?.viewer||l)return;const t=e.viewer.renderer,n=e.viewer.scene;if(!t||!n)return;if(he.current){const e=he.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?.()),he.current=null}if(!K)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],o=i.constructor,c=i.material?.constructor,d=i.geometry?.constructor,u=i.geometry?.attributes?.position?.constructor;o&&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}},y=[],x=/* @__PURE__ */new Map,f=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)f(e);else f(t);const n=Array.isArray(t)?t[0]:t;if(o&&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 o(e.geometry,s);i.matrixAutoUpdate=!1,i.renderOrder=1,i.userData.__sectionHelper=!0,e.add(i),y.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)f(e);else f(t)});let g=null;const b=s[0]?.material&&(Array.isArray(s[0].material)?s[0].material[0]:s[0].material);if(m&&o&&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,a=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]);a.setAttribute("position",new u(l,3)),a.setAttribute("normal",new u(c,3)),a.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 o(a,m),g.renderOrder=2,g.userData.__sectionHelper=!0,n.add(g)}he.current={plane:h,capMesh:g,helpers:y,materialState:x,bbox:r},console.info("[Preview] section: helpers =",y.length,"cap =",!!g),e.viewer.Render?.()},[K,l,E]),f(()=>{const e=a.current,t=he.current;if(e?.viewer&&t&&K)try{const n=t.bbox,r="x"===J?0:"y"===J?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)*re,a=ie*Math.PI/180,o=Math.cos(a),l=Math.sin(a),c=te?-1:1;let d=0,u=0,p=0;"x"===J?(d=c*o,p=c*l):"y"===J?(u=c*o,d=c*l):(p=c*o,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"===J?i:m.x,y="y"===J?i:m.y,x="z"===J?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*y+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,a=n-u*s,o=r-p*s;t.capMesh.position.set(i,a,o),t.capMesh.lookAt?.(i+d,a+u,o+p)}e.viewer.Render?.()}catch(e){console.warn("[Preview] section update failed",e)}},[K,J,te,re,ie]),f(()=>{const e=a.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,y=null;n.traverse(e=>{if(h&&y)return;if(!e?.isLineSegments)return;h=e.constructor;const t=Array.isArray(e.material)?e.material[0]:e.material;t?.constructor&&(y=t.constructor)});const x=()=>{const t=me.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),me.current=null,e.viewer.Render?.()}};if(!oe)return x(),void pe(null);me.current={points:[],normals:[],markers:[],line:null,label:null,rafId:null};const f=o.current,g=f?.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 a=new d(s,i);return a.position.copy(e),a.renderOrder=9999,a.userData.__measureHelper=!0,n.add(a),a},N=()=>{const t=me.current;t&&((()=>{const t=me.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],a=new c((s.x+i.x)/2,(s.y+i.y)/2,(s.z+i.z)/2).clone();a.project?.(n);const o=r.getBoundingClientRect(),l=(a.x+1)/2*o.width,d=(1-a.y)/2*o.height;t.label.style.left=`${l}px`,t.label.style.top=`${d}px`;const u=l<0||d<0||l>o.width||d>o.height;t.label.style.opacity=a.z>1||u?"0":"1"})(),t.rafId=requestAnimationFrame(N))};me.current.rafId=requestAnimationFrame(N);let C=0,A=0,E=0,L=!1,S=!1;const M=t=>{if(!e.viewer.camera)return;const s=r.getBoundingClientRect(),a={x:t.clientX-s.left,y:t.clientY-s.top},o=e.viewer.GetMeshIntersectionUnderMouse?.(g,a);if(!o)return;const l=me.current,x=new c(o.point.x,o.point.y,o.point.z),f=(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}}})(o);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=[],pe(null)}if(l.points.push(x),l.normals.push(f),"perp"===ce){const e=((e,t)=>{const r=e?.geometry,s=r?.attributes?.position;if(!r||!s||!t?.face?.normal)return null;const i=s.array,a=r.index?r.index.array:null,o=new c(t.point.x,t.point.y,t.point.z);e.worldToLocal?.(o);const l=t.face.normal,h=-(l.x*o.x+l.y*o.y+l.z*o.z);r.computeBoundingBox?.();const y=r.boundingBox,x=y?Math.sqrt((y.max.x-y.min.x)**2+(y.max.y-y.min.y)**2+(y.max.z-y.min.z)**2):100,f=Math.max(.001*x,.005),g=a?a.length/3:s.count/3,b=[],w=new c;for(let t=0;t<g;t++){const n=a?a[3*t]:3*t,r=a?a[3*t+1]:3*t+1,s=a?a[3*t+2]:3*t+2,o=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],y=i[3*s],x=i[3*s+1],g=i[3*s+2],v=u-o,k=p-c,N=m-d,C=y-o,A=x-c,E=g-d;let L=k*E-N*A,S=N*C-v*E,M=v*A-k*C;const z=Math.sqrt(L*L+S*S+M*M);if(0===z)continue;if(L/=z,S/=z,M/=z,L*l.x+S*l.y+M*l.z<.9995)continue;const T=(o+u+y)/3,R=(c+p+x)/3,j=(d+m+g)/3;if(!(Math.abs(l.x*T+l.y*R+l.z*j+h)>f))for(const[t,n,r]of[[o,c,d],[u,p,m],[y,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})(o.object,o);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"===ce){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,a=n.x/i,o=n.y/i,d=n.z/i,u=(r.x-e.x)*a+(r.y-e.y)*o+(r.z-e.z)*d,p=new c(e.x+a*u,e.y+o*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(y??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),pe(t);const a=(()=>{const e=me.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})();a.textContent=`${R(t)}${s}`}e.viewer.Render?.()},z=e=>{0===e.button&&(C=e.clientX,A=e.clientY,E=performance.now(),L=!1,S=!0)},T=e=>{if(!S)return;const t=e.clientX-C,n=e.clientY-A;t*t+n*n>16&&(L=!0)},j=e=>{if(0!==e.button||!S)return;const t=performance.now()-E;S=!1,!L&&t<350&&M(e)},D=e=>{"Escape"===e.key&&le(!1)};return r.style.cursor="crosshair",r.addEventListener("pointerdown",z),r.addEventListener("pointermove",T),r.addEventListener("pointerup",j),r.addEventListener("pointercancel",j),window.addEventListener("keydown",D),()=>{r.style.cursor="",r.removeEventListener("pointerdown",z),r.removeEventListener("pointermove",T),r.removeEventListener("pointerup",j),r.removeEventListener("pointercancel",j),window.removeEventListener("keydown",D),x(),pe(null)}},[oe,ce,l,E]),f(()=>{if(!m||l)return;const e=setTimeout(()=>w(!1),5e3);return()=>clearTimeout(e)},[m,l]);const ye=e=>{const t=/* @__PURE__ */new Set;z(e,t),H(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})},xe=()=>{try{const e=a.current,t=e?.viewer?.GetBoundingSphere?.(()=>!0);t&&e.viewer.FitSphereToWindow(t,!0),e?.viewer?.Render?.()}catch{}};f(()=>{const e=o.current,t=a.current;if(e&&t?.viewer&&!l)try{t.viewer.SetProjectionMode(q?e.ProjectionMode.Perspective:e.ProjectionMode.Orthographic)}catch{}},[q,l]);const fe=e=>{const t=o.current,n=a.current;if(t&&n?.viewer)try{const r=n.viewer.GetBoundingSphere?.(()=>!0);if(!r)return;const s=r.center,i=3*(r.radius||1),a=s.x??0,o=s.y??0,l=s.z??0;let c,d;switch(e){case"top":c=new t.Coord3D(a,o,l+i),d=new t.Coord3D(0,1,0);break;case"front":c=new t.Coord3D(a,o-i,l),d=new t.Coord3D(0,0,1);break;case"side":c=new t.Coord3D(a+i,o,l),d=new t.Coord3D(0,0,1);break;default:{const e=i/Math.sqrt(3);c=new t.Coord3D(a+e,o-e,l+e),d=new t.Coord3D(0,0,1);break}}const u=new t.Coord3D(a,o,l),p=new t.Camera(c,u,d,45);n.viewer.SetCamera(p),n.viewer.AdjustClippingPlanesToSphere?.(r),n.viewer.Render?.()}catch{}},ge=(t.split(".").pop()||"").toUpperCase(),be=(e,t=0)=>{const n=e.children.length>0,r=!1!==j[e.id],s=!F.has(e.id);/* @__PURE__ */
84
+ /* @__PURE__ */b("input",{ref:re,value:Q,onChange:e=>J(e.target.value),onKeyDown:e=>{"Enter"===e.key||" "===e.key?(e.preventDefault(),(e=>{const t=e.trim()||ne.current;if(J(""),!t)return;const n=t.toLowerCase().split(/\s+/)[0],r=()=>{ne.current=t},s=(e,t)=>{H(!0),I(e),q.current?.(),te(t),r()};if(/^-?(\d+\.?\d*|\.\d+)$/.test(n))if(!F||"horizontal"!==P&&"vertical"!==P)te(T.fixedNeedsAxis);else{const e=parseFloat(n);e?(V(n),_(e),te(T.axisLocked("horizontal"===P?"ΔX":"ΔY",R(Math.abs(e))))):(V(""),_(null),te(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":H(!0),I("horizontal"),te(T.echoHorizontal),r();break;case"v":case"ver":case"vertical":H(!0),I("vertical"),te(T.echoVertical),r();break;case"au":case"auto":H(!0),I("auto"),te(T.echoAuto),r();break;case"measure":H(!F),te(F?T.measureOff:T.measureOn),r();break;case"u":case"undo":K.current?.(),te(T.pickRemoved),r();break;case"z":case"ze":case"zoom":case"fit":case"zoomextents":le(),te(T.zoomExtents),r();break;case"la":case"layer":case"layers":L(e=>!e),te(T.layersToggled),r();break;case"off":case"clear":_(null),V(""),q.current?.(),te(T.measurementCleared),r();break;case"?":case"help":te(T.commandHelp);break;default:{const e=E[n];te(e?T.readOnly(e):T.unknownCommand(n.toUpperCase()))}}})(Q)):"Escape"===e.key&&(Q?(e.stopPropagation(),J(""),te(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-gray-700 focus:outline-none placeholder:text-gray-300"})]})]})]})}var M="https://cdn.jsdelivr.net/npm/online-3d-viewer@0.18.0/libs/";function S(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=>S(e,t,n+1))}}function z(e,t){t.add(e.id);for(const n of e.children)z(n,t)}function T(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 R(e){return e>=1e3?`${(e/1e3).toFixed(3)} m`:`${e.toFixed(2)} mm`}function j({url:e,filename:t,onDownload:r,onEmail:s}){const i=y(null),a=y(null),o=y(null),[l,c]=x(!0),[d,u]=x(null),[m,w]=x(!0),k=p(),N=k.model,C=k.preview,A=y(N);A.current=N;const[E,L]=x(null),[j,D]=x({}),[F,H]=x(/* @__PURE__ */new Set),[P,I]=x("#f5f6f8"),[O,W]=x(!0),[B,X]=x("#000000"),[U,_]=x(1),[G,V]=x(!1),[Y,$]=x(!1),[Z,q]=x(!1),[K,Q]=x(!1),[J,ee]=x("x"),[te,ne]=x(!1),[re,se]=x(.5),[ie,ae]=x(0),[oe,le]=x(!1),[ce,de]=x("point"),[ue,pe]=x(null),me=y(null),he=y(null);f(()=>{let n=!1,r=null,s=null;return c(!0),u(null),L(null),D({}),H(/* @__PURE__ */new Set),(async()=>{let l;try{l=await(import("online-3d-viewer"))}catch{return void(n||(u(A.current.notInstalled),c(!1)))}if(o.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 o="undefined"!=typeof window&&window.__REACT_OS_SHELL_O3DV_LIBS__||M;l.SetExternalLibLocation?.(o),function(){if(v)return;if("undefined"==typeof HTMLCanvasElement)return;v=!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=S(t,{root:A.current.rootNode,node:A.current.node});L(e);const n={[e.id]:!0};for(const t of e.children)n[t.id]=!0;D(n)}}catch(e){console.warn("[Preview] mesh tree extraction failed",e)}c(!1)}},onModelLoadFailed:()=>{n||(u(A.current.loadFailed),c(!1))}}),a.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=a.current;e?.Resize?e.Resize():e?.viewer?.Resize&&e.viewer.Resize(),e?.viewer?.Render?.()}catch{}}),s.observe(i.current))}catch(e){n||(u(e?.message||A.current.loadFailed),c(!1))}})(),()=>{n=!0;try{s?.disconnect()}catch{}try{r?.Destroy?.()}catch{}a.current=null}},[e,t]),f(()=>{const e=a.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=!F.has(n))};e.viewer.mainModel?.EnumerateMeshesAndLines?.(t),e.viewer.mainModel?.EnumerateEdges?.(t),e.viewer.Render?.()}catch(e){console.warn("[Preview] visibility update failed",e)}},[F,E]),f(()=>{const e=o.current,t=a.current;if(e&&t?.viewer)try{t.viewer.SetEdgeSettings(new e.EdgeSettings(O,T(e,B),U));const n=he.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,U]),f(()=>{const e=o.current,t=a.current;if(e&&t?.viewer)try{const n=T(e,P);t.viewer.SetBackgroundColor(new e.RGBAColor(n.r,n.g,n.b,255)),t.viewer.Render?.()}catch{}},[P]),f(()=>{const e=a.current;if(!e?.viewer||l)return;const t=e.viewer.renderer,n=e.viewer.scene;if(!t||!n)return;if(he.current){const e=he.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?.()),he.current=null}if(!K)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],o=i.constructor,c=i.material?.constructor,d=i.geometry?.constructor,u=i.geometry?.attributes?.position?.constructor;o&&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}},y=[],x=/* @__PURE__ */new Map,f=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)f(e);else f(t);const n=Array.isArray(t)?t[0]:t;if(o&&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 o(e.geometry,s);i.matrixAutoUpdate=!1,i.renderOrder=1,i.userData.__sectionHelper=!0,e.add(i),y.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)f(e);else f(t)});let g=null;const b=s[0]?.material&&(Array.isArray(s[0].material)?s[0].material[0]:s[0].material);if(m&&o&&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,a=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]);a.setAttribute("position",new u(l,3)),a.setAttribute("normal",new u(c,3)),a.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 o(a,m),g.renderOrder=2,g.userData.__sectionHelper=!0,n.add(g)}he.current={plane:h,capMesh:g,helpers:y,materialState:x,bbox:r},console.info("[Preview] section: helpers =",y.length,"cap =",!!g),e.viewer.Render?.()},[K,l,E]),f(()=>{const e=a.current,t=he.current;if(e?.viewer&&t&&K)try{const n=t.bbox,r="x"===J?0:"y"===J?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)*re,a=ie*Math.PI/180,o=Math.cos(a),l=Math.sin(a),c=te?-1:1;let d=0,u=0,p=0;"x"===J?(d=c*o,p=c*l):"y"===J?(u=c*o,d=c*l):(p=c*o,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"===J?i:m.x,y="y"===J?i:m.y,x="z"===J?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*y+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,a=n-u*s,o=r-p*s;t.capMesh.position.set(i,a,o),t.capMesh.lookAt?.(i+d,a+u,o+p)}e.viewer.Render?.()}catch(e){console.warn("[Preview] section update failed",e)}},[K,J,te,re,ie]),f(()=>{const e=a.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,y=null;n.traverse(e=>{if(h&&y)return;if(!e?.isLineSegments)return;h=e.constructor;const t=Array.isArray(e.material)?e.material[0]:e.material;t?.constructor&&(y=t.constructor)});const x=()=>{const t=me.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),me.current=null,e.viewer.Render?.()}};if(!oe)return x(),void pe(null);me.current={points:[],normals:[],markers:[],line:null,label:null,rafId:null};const f=o.current,g=f?.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 a=new d(s,i);return a.position.copy(e),a.renderOrder=9999,a.userData.__measureHelper=!0,n.add(a),a},N=()=>{const t=me.current;t&&((()=>{const t=me.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],a=new c((s.x+i.x)/2,(s.y+i.y)/2,(s.z+i.z)/2).clone();a.project?.(n);const o=r.getBoundingClientRect(),l=(a.x+1)/2*o.width,d=(1-a.y)/2*o.height;t.label.style.left=`${l}px`,t.label.style.top=`${d}px`;const u=l<0||d<0||l>o.width||d>o.height;t.label.style.opacity=a.z>1||u?"0":"1"})(),t.rafId=requestAnimationFrame(N))};me.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(),a={x:t.clientX-s.left,y:t.clientY-s.top},o=e.viewer.GetMeshIntersectionUnderMouse?.(g,a);if(!o)return;const l=me.current,x=new c(o.point.x,o.point.y,o.point.z),f=(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}}})(o);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=[],pe(null)}if(l.points.push(x),l.normals.push(f),"perp"===ce){const e=((e,t)=>{const r=e?.geometry,s=r?.attributes?.position;if(!r||!s||!t?.face?.normal)return null;const i=s.array,a=r.index?r.index.array:null,o=new c(t.point.x,t.point.y,t.point.z);e.worldToLocal?.(o);const l=t.face.normal,h=-(l.x*o.x+l.y*o.y+l.z*o.z);r.computeBoundingBox?.();const y=r.boundingBox,x=y?Math.sqrt((y.max.x-y.min.x)**2+(y.max.y-y.min.y)**2+(y.max.z-y.min.z)**2):100,f=Math.max(.001*x,.005),g=a?a.length/3:s.count/3,b=[],w=new c;for(let t=0;t<g;t++){const n=a?a[3*t]:3*t,r=a?a[3*t+1]:3*t+1,s=a?a[3*t+2]:3*t+2,o=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],y=i[3*s],x=i[3*s+1],g=i[3*s+2],v=u-o,k=p-c,N=m-d,C=y-o,A=x-c,E=g-d;let L=k*E-N*A,M=N*C-v*E,S=v*A-k*C;const z=Math.sqrt(L*L+M*M+S*S);if(0===z)continue;if(L/=z,M/=z,S/=z,L*l.x+M*l.y+S*l.z<.9995)continue;const T=(o+u+y)/3,R=(c+p+x)/3,j=(d+m+g)/3;if(!(Math.abs(l.x*T+l.y*R+l.z*j+h)>f))for(const[t,n,r]of[[o,c,d],[u,p,m],[y,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})(o.object,o);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"===ce){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,a=n.x/i,o=n.y/i,d=n.z/i,u=(r.x-e.x)*a+(r.y-e.y)*o+(r.z-e.z)*d,p=new c(e.x+a*u,e.y+o*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(y??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),pe(t);const a=(()=>{const e=me.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})();a.textContent=`${R(t)}${s}`}e.viewer.Render?.()},z=e=>{0===e.button&&(C=e.clientX,A=e.clientY,E=performance.now(),L=!1,M=!0)},T=e=>{if(!M)return;const t=e.clientX-C,n=e.clientY-A;t*t+n*n>16&&(L=!0)},j=e=>{if(0!==e.button||!M)return;const t=performance.now()-E;M=!1,!L&&t<350&&S(e)},D=e=>{"Escape"===e.key&&le(!1)};return r.style.cursor="crosshair",r.addEventListener("pointerdown",z),r.addEventListener("pointermove",T),r.addEventListener("pointerup",j),r.addEventListener("pointercancel",j),window.addEventListener("keydown",D),()=>{r.style.cursor="",r.removeEventListener("pointerdown",z),r.removeEventListener("pointermove",T),r.removeEventListener("pointerup",j),r.removeEventListener("pointercancel",j),window.removeEventListener("keydown",D),x(),pe(null)}},[oe,ce,l,E]),f(()=>{if(!m||l)return;const e=setTimeout(()=>w(!1),5e3);return()=>clearTimeout(e)},[m,l]);const ye=e=>{const t=/* @__PURE__ */new Set;z(e,t),H(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})},xe=()=>{try{const e=a.current,t=e?.viewer?.GetBoundingSphere?.(()=>!0);t&&e.viewer.FitSphereToWindow(t,!0),e?.viewer?.Render?.()}catch{}};f(()=>{const e=o.current,t=a.current;if(e&&t?.viewer&&!l)try{t.viewer.SetProjectionMode(Z?e.ProjectionMode.Perspective:e.ProjectionMode.Orthographic)}catch{}},[Z,l]);const fe=e=>{const t=o.current,n=a.current;if(t&&n?.viewer)try{const r=n.viewer.GetBoundingSphere?.(()=>!0);if(!r)return;const s=r.center,i=3*(r.radius||1),a=s.x??0,o=s.y??0,l=s.z??0;let c,d;switch(e){case"top":c=new t.Coord3D(a,o,l+i),d=new t.Coord3D(0,1,0);break;case"front":c=new t.Coord3D(a,o-i,l),d=new t.Coord3D(0,0,1);break;case"side":c=new t.Coord3D(a+i,o,l),d=new t.Coord3D(0,0,1);break;default:{const e=i/Math.sqrt(3);c=new t.Coord3D(a+e,o-e,l+e),d=new t.Coord3D(0,0,1);break}}const u=new t.Coord3D(a,o,l),p=new t.Camera(c,u,d,45);n.viewer.SetCamera(p),n.viewer.AdjustClippingPlanesToSphere?.(r),n.viewer.Render?.()}catch{}},ge=(t.split(".").pop()||"").toUpperCase(),be=(e,t=0)=>{const n=e.children.length>0,r=!1!==j[e.id],s=!F.has(e.id);/* @__PURE__ */
85
85
  return g("div",{children:[
86
86
  /* @__PURE__ */g("div",{className:"group flex items-center gap-1 px-2 py-1 hover:bg-gray-100 cursor-default text-xs text-gray-700",style:{paddingLeft:12*t+6+"px"},children:[n?/* @__PURE__ */b("button",{onClick:()=>{return t=e.id,void D(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?N.collapse:N.expand,children:/* @__PURE__ */b(h,r?{name:"chevron-down",className:"h-3 w-3",strokeWidth:2}:{name:"chevron-right",className:"h-3 w-3",strokeWidth:2})}):/* @__PURE__ */b("span",{className:"h-4 w-4 shrink-0 flex items-center justify-center",children:/* @__PURE__ */b("span",{className:"h-1 w-1 rounded-full bg-gray-400"})}),
87
87
  /* @__PURE__ */b("span",{className:"flex-1 truncate "+(s?"":"opacity-40"),title:e.name,children:e.name}),
@@ -95,7 +95,7 @@ return g("div",{className:"flex flex-col h-full bg-white",children:[
95
95
  /* @__PURE__ */b("button",{onClick:()=>fe("top"),className:we,title:N.topView,children:/* @__PURE__ */b("span",{className:"text-2xs font-semibold",children:N.top})}),
96
96
  /* @__PURE__ */b("button",{onClick:()=>fe("front"),className:we,title:N.frontView,children:/* @__PURE__ */b("span",{className:"text-2xs font-semibold",children:N.front})}),
97
97
  /* @__PURE__ */b("button",{onClick:()=>fe("side"),className:we,title:N.sideView,children:/* @__PURE__ */b("span",{className:"text-2xs font-semibold",children:N.side})}),
98
- /* @__PURE__ */b("button",{onClick:()=>Z(e=>!e),className:q?"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:q?N.toOrthographic:N.toPerspective,children:/* @__PURE__ */b("span",{className:"text-2xs font-semibold whitespace-nowrap",children:q?N.perspective:N.orthographic})}),
98
+ /* @__PURE__ */b("button",{onClick:()=>q(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?N.toOrthographic:N.toPerspective,children:/* @__PURE__ */b("span",{className:"text-2xs font-semibold whitespace-nowrap",children:Z?N.perspective:N.orthographic})}),
99
99
  /* @__PURE__ */b("div",{className:ke}),
100
100
  /* @__PURE__ */b("button",{onClick:()=>{try{const e=a.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:we,title:N.snapshot,children:/* @__PURE__ */b(h,{name:"camera",className:"h-4 w-4",strokeWidth:1.5})}),
101
101
  /* @__PURE__ */b("button",{onClick:()=>w(e=>!e),className:we,title:C.howToNavigate,children:/* @__PURE__ */b(h,{name:"help",className:"h-4 w-4",strokeWidth:1.5})}),
@@ -105,14 +105,14 @@ return g("div",{className:"flex flex-col h-full bg-white",children:[
105
105
  /* @__PURE__ */b("button",{onClick:()=>de("point"),className:"px-2 text-2xs font-semibold transition-colors "+("point"===ce?"bg-orange-500 text-white":"bg-white text-gray-600 hover:bg-gray-50"),title:N.pointHint,children:N.point}),
106
106
  /* @__PURE__ */b("button",{onClick:()=>de("perp"),className:"px-2 text-xs font-semibold transition-colors "+("perp"===ce?"bg-orange-500 text-white":"bg-white text-gray-600 hover:bg-gray-50"),title:N.perpendicularHint,children:"⊥"})]}),oe&&null!==ue&&/* @__PURE__ */g("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"===ce?N.perpendicularDistance:N.straightDistance,children:[R(ue),"perp"===ce?" ⊥":""]}),
107
107
  /* @__PURE__ */b("div",{className:ke}),
108
- /* @__PURE__ */b("button",{onClick:()=>Y(e=>!e),className:G?ve:we,title:N.meshesHint,children:/* @__PURE__ */b(h,{name:"menu",className:"h-4 w-4",strokeWidth:1.5})}),
109
- /* @__PURE__ */b("button",{onClick:()=>$(e=>!e),className:V?ve:we,title:N.displayHint,children:/* @__PURE__ */b(h,{name:"settings",className:"h-4 w-4",strokeWidth:1.5})}),
108
+ /* @__PURE__ */b("button",{onClick:()=>V(e=>!e),className:G?ve:we,title:N.meshesHint,children:/* @__PURE__ */b(h,{name:"menu",className:"h-4 w-4",strokeWidth:1.5})}),
109
+ /* @__PURE__ */b("button",{onClick:()=>$(e=>!e),className:Y?ve:we,title:N.displayHint,children:/* @__PURE__ */b(h,{name:"settings",className:"h-4 w-4",strokeWidth:1.5})}),
110
110
  /* @__PURE__ */b("button",{onClick:r??(()=>{const n=document.createElement("a");n.href=e,n.download=t,n.click()}),className:we,title:N.downloadOriginal,children:/* @__PURE__ */b(h,{name:"download",className:"h-4 w-4",strokeWidth:1.5})}),s&&/* @__PURE__ */b("button",{onClick:s,className:we,title:C.email,children:/* @__PURE__ */b(h,{name:"email",className:"h-4 w-4",strokeWidth:1.5})})]}),
111
- /* @__PURE__ */b("div",{className:"flex-1 flex min-h-0",children:/* @__PURE__ */g("div",{className:"relative flex-1 min-w-0",style:{background:I},children:[
111
+ /* @__PURE__ */b("div",{className:"flex-1 flex min-h-0",children:/* @__PURE__ */g("div",{className:"relative flex-1 min-w-0",style:{background:P},children:[
112
112
  /* @__PURE__ */b("div",{ref:i,style:{width:"100%",height:"100%"}}),G&&/* @__PURE__ */g("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:[
113
113
  /* @__PURE__ */g("div",{className:"flex items-center justify-between px-2 min-h-8 py-1 border-b border-gray-200 bg-gray-50",children:[
114
114
  /* @__PURE__ */b("span",{className:"font-medium text-gray-700",children:N.meshes}),
115
- /* @__PURE__ */b("button",{onClick:()=>Y(!1),className:"px-2 py-0.5 rounded hover:bg-gray-200 text-gray-600",title:C.closePanel,children:"×"})]}),
115
+ /* @__PURE__ */b("button",{onClick:()=>V(!1),className:"px-2 py-0.5 rounded hover:bg-gray-200 text-gray-600",title:C.closePanel,children:"×"})]}),
116
116
  /* @__PURE__ */b("div",{className:"flex-1 overflow-y-auto py-1",children:E?be(E):/* @__PURE__ */b("div",{className:"px-3 py-3 text-2xs text-gray-500 italic",children:l?N.readingModel:N.noStructure})}),E&&/* @__PURE__ */b("div",{className:"px-3 py-2 text-2xs text-gray-500 border-t border-gray-200",children:0===F.size?N.allVisible:N.hiddenCount(F.size)})]}),m&&!l&&!d&&/* @__PURE__ */g("div",{className:"absolute bottom-3 left-1/2 -translate-x-1/2 bg-gray-900/85 text-white text-2xs px-3 min-h-8 py-1 rounded-full shadow-lg flex items-center gap-3 z-10 pointer-events-none",children:[
117
117
  /* @__PURE__ */b("span",{children:N.dragToRotate}),
118
118
  /* @__PURE__ */b("span",{className:"text-white/40",children:"•"}),
@@ -122,14 +122,14 @@ return g("div",{className:"flex flex-col h-full bg-white",children:[
122
122
  /* @__PURE__ */g("svg",{className:"h-6 w-6 text-blue-500 animate-spin",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,children:[
123
123
  /* @__PURE__ */b("circle",{cx:"12",cy:"12",r:"10",strokeOpacity:"0.2"}),
124
124
  /* @__PURE__ */b("path",{d:"M22 12a10 10 0 0 1-10 10",strokeLinecap:"round"})]}),
125
- /* @__PURE__ */b("span",{children:N.loading}),"STP"===ge||"STEP"===ge?/* @__PURE__ */b("span",{className:"text-2xs text-gray-400",children:N.stepNote}):null]}),d&&/* @__PURE__ */b("div",{className:"absolute inset-0 flex items-center justify-center text-sm text-red-600 px-6 text-center bg-white/85",children:d}),V&&/* @__PURE__ */g("div",{className:"absolute top-2 right-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:[
125
+ /* @__PURE__ */b("span",{children:N.loading}),"STP"===ge||"STEP"===ge?/* @__PURE__ */b("span",{className:"text-2xs text-gray-400",children:N.stepNote}):null]}),d&&/* @__PURE__ */b("div",{className:"absolute inset-0 flex items-center justify-center text-sm text-red-600 px-6 text-center bg-white/85",children:d}),Y&&/* @__PURE__ */g("div",{className:"absolute top-2 right-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:[
126
126
  /* @__PURE__ */g("div",{className:"flex items-center justify-between px-2 min-h-8 py-1 border-b border-gray-200 bg-gray-50",children:[
127
127
  /* @__PURE__ */b("span",{className:"font-medium text-gray-700",children:N.display}),
128
128
  /* @__PURE__ */b("button",{onClick:()=>$(!1),className:"px-2 py-0.5 rounded hover:bg-gray-200 text-gray-600",title:C.closePanel,children:"×"})]}),
129
129
  /* @__PURE__ */g("div",{className:"flex-1 overflow-y-auto px-3 py-3 space-y-3 text-xs text-gray-700",children:[
130
130
  /* @__PURE__ */g("label",{className:"flex items-center justify-between gap-2",children:[
131
131
  /* @__PURE__ */b("span",{children:N.backgroundColor}),
132
- /* @__PURE__ */b("input",{type:"color",value:I,onChange:e=>P(e.target.value),className:"h-6 w-10 rounded border border-gray-300 bg-white"})]}),
132
+ /* @__PURE__ */b("input",{type:"color",value:P,onChange:e=>I(e.target.value),className:"h-6 w-10 rounded border border-gray-300 bg-white"})]}),
133
133
  /* @__PURE__ */g("label",{className:"flex items-center justify-between gap-2",children:[
134
134
  /* @__PURE__ */b("span",{children:N.showEdges}),
135
135
  /* @__PURE__ */b("button",{onClick:()=>W(e=>!e),role:"switch","aria-checked":O,className:"relative inline-flex h-5 w-9 shrink-0 items-center rounded-full transition-colors "+(O?"bg-blue-500":"bg-gray-300"),children:/* @__PURE__ */b("span",{className:"inline-block h-4 w-4 rounded-full bg-white shadow-sm transition-transform "+(O?"translate-x-[18px]":"translate-x-0.5")})})]}),
@@ -161,7 +161,7 @@ return g("div",{className:"flex flex-col h-full bg-white",children:[
161
161
  /* @__PURE__ */b("span",{children:N.position}),
162
162
  /* @__PURE__ */g("span",{className:"text-gray-500 tabular-nums",children:[Math.round(100*re),"%"]})]}),
163
163
  /* @__PURE__ */b("input",{type:"range",min:0,max:1,step:.01,value:re,onChange:e=>se(Number(e.target.value)),className:"w-full accent-blue-500"})]})]})]})]}),
164
- /* @__PURE__ */b("div",{className:"px-3 py-2 border-t border-gray-200",children:/* @__PURE__ */b("button",{onClick:()=>{P("#f5f6f8"),W(!0),X("#000000"),_(1),Q(!1),ee("x"),ne(!1),se(.5),ae(0)},className:"w-full text-2xs text-gray-700 bg-gray-100 hover:bg-gray-200 rounded py-2 transition-colors",children:N.resetDisplay})})]})]})})]})}function D({url:e,filename:t,onDownload:s,onEmail:i}){const[a,o]=x(1),[l,c]=x(!1),[u,m]=x(!1),f=y(null),v=p().preview,k="px-2 py-1 rounded hover:bg-gray-200 transition-colors text-gray-600 flex items-center gap-1";/* @__PURE__ */
164
+ /* @__PURE__ */b("div",{className:"px-3 py-2 border-t border-gray-200",children:/* @__PURE__ */b("button",{onClick:()=>{I("#f5f6f8"),W(!0),X("#000000"),_(1),Q(!1),ee("x"),ne(!1),se(.5),ae(0)},className:"w-full text-2xs text-gray-700 bg-gray-100 hover:bg-gray-200 rounded py-2 transition-colors",children:N.resetDisplay})})]})]})})]})}function D({url:e,filename:t,onDownload:s,onEmail:i}){const[a,o]=x(1),[l,c]=x(!1),[u,m]=x(!1),f=y(null),v=p().preview,k="px-2 py-1 rounded hover:bg-gray-200 transition-colors text-gray-600 flex items-center gap-1";/* @__PURE__ */
165
165
  return g("div",{className:"flex flex-col h-full",children:[
166
166
  /* @__PURE__ */g(n,{children:[!u&&/* @__PURE__ */g(w,{children:[
167
167
  /* @__PURE__ */b("button",{onClick:()=>o(e=>Math.max(.1,Math.round(100*(e-.25))/100)),className:k,children:"−"}),