file-viewer3 1.0.7 → 1.0.25

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 (423) hide show
  1. package/LICENSE +160 -0
  2. package/README.en.md +390 -0
  3. package/README.md +306 -87
  4. package/dist/_headers +22 -0
  5. package/dist/assets/3MFLoader--yjh7udp.js +1 -0
  6. package/dist/assets/AMFLoader-C0y7NIAO.js +1 -0
  7. package/dist/assets/ArchiveViewer-6AvBZVl3.js +2 -0
  8. package/dist/assets/ArchiveViewer-B2pHxHFv.css +1 -0
  9. package/dist/assets/AudioViewer-0CSMvCtp.css +1 -0
  10. package/dist/assets/AudioViewer-6a_DDcur.js +1 -0
  11. package/dist/assets/CadViewer-A9PKtCth.css +1 -0
  12. package/dist/assets/CadViewer-D94LUXKO.js +110 -0
  13. package/dist/assets/CodeViewer-BdZGsbFh.js +2 -0
  14. package/dist/assets/CodeViewer-CR2CsPRi.css +1 -0
  15. package/dist/assets/ColladaLoader-DTiuvWJL.js +3 -0
  16. package/dist/assets/DrawingViewer-BplS278E.js +2 -0
  17. package/dist/assets/DrawingViewer-DXiF5YWV.css +1 -0
  18. package/dist/assets/EdaViewer-BXH1Jmwr.js +8 -0
  19. package/dist/assets/EdaViewer-CKf1YQnh.css +1 -0
  20. package/dist/assets/EmailViewer-BsBKZ_A5.js +4 -0
  21. package/dist/assets/EmailViewer-BwvGE4ns.css +1 -0
  22. package/dist/assets/EpubViewer-Cci0l1Vm.css +1 -0
  23. package/dist/assets/EpubViewer-DlGzr8_x.js +2 -0
  24. package/dist/assets/FBXLoader-Bj34Z_uf.js +1 -0
  25. package/dist/assets/GLTFLoader-BNUIXeRP.js +1 -0
  26. package/dist/assets/ImageViewer-BKp7YpMs.css +10 -0
  27. package/dist/assets/ImageViewer-D1Yc0jYg.js +1 -0
  28. package/dist/assets/KMZLoader-DTmXWzX_.js +1 -0
  29. package/dist/assets/MarkdownViewer-CIljbLlu.css +1 -0
  30. package/dist/assets/MarkdownViewer-CRi0rhWw.js +64 -0
  31. package/dist/assets/ModelViewer-C4ir9AyI.css +1 -0
  32. package/dist/assets/ModelViewer-yxcVdLzz.js +2 -0
  33. package/dist/assets/OBJLoader-DW4Mv-mq.js +5 -0
  34. package/dist/assets/OfdViewer-DbkG1-Bp.js +2 -0
  35. package/dist/assets/OfdViewer-Ulv-WZWh.css +1 -0
  36. package/dist/assets/PCDLoader-CHA1g8rk.js +3 -0
  37. package/dist/assets/PLYLoader-DwTzA-Dg.js +2 -0
  38. package/dist/assets/PdfView-_Uu48dkU.js +558 -0
  39. package/dist/assets/PdfView-fKwbB_8j.css +1 -0
  40. package/dist/assets/PptxRender-BNoW_9_0.css +1 -0
  41. package/dist/assets/PptxRender-myCCfHiR.js +32 -0
  42. package/dist/assets/STLLoader-Bt7FMgMu.js +1 -0
  43. package/dist/assets/TDSLoader-D__OhSS9.js +1 -0
  44. package/dist/assets/TypstViewer-4dMAIp9x.js +60 -0
  45. package/dist/assets/TypstViewer-BgYR02wU.css +1 -0
  46. package/dist/assets/USDLoader-BovI5HgZ.js +6 -0
  47. package/dist/assets/UmdViewer-BfIWw5dV.js +3 -0
  48. package/dist/assets/UmdViewer-DpObj56a.css +1 -0
  49. package/dist/assets/VRMLLoader-_VxVXPvX.js +140 -0
  50. package/dist/assets/VTKLoader-BfnzBXsa.js +3 -0
  51. package/dist/assets/XYZLoader-DbQZs-aZ.js +2 -0
  52. package/dist/assets/XlsxTable-CKmWT6Iw.js +5 -0
  53. package/dist/assets/XlsxTable-Ccp_ksQc.css +1 -0
  54. package/dist/assets/__vite-browser-external-j1Zxnfxm.js +1 -0
  55. package/dist/assets/ar-SA-G6X2FPQ2-h0GtAVoD.js +10 -0
  56. package/dist/assets/arc-C_eH0vTw.js +1 -0
  57. package/dist/assets/architecture-7EHR7CIX-nPLvVkG5.js +1 -0
  58. package/dist/assets/architectureDiagram-3BPJPVTR-Cx8fJaC_.js +36 -0
  59. package/dist/assets/archive-D-0w4Z7t.js +2 -0
  60. package/dist/assets/audio-IkwcqgJA.js +2 -0
  61. package/dist/assets/az-AZ-76LH7QW2-D_aQ-6Zd.js +1 -0
  62. package/dist/assets/bash-LmRjUKlR.js +1 -0
  63. package/dist/assets/bg-BG-XCXSNQG7-H7Czia1L.js +5 -0
  64. package/dist/assets/blockDiagram-GPEHLZMM-v3Efy6dm.js +132 -0
  65. package/dist/assets/bn-BD-2XOGV67Q-f6ymEr9g.js +5 -0
  66. package/dist/assets/c4Diagram-AAUBKEIU-BdstYnMv.js +10 -0
  67. package/dist/assets/ca-ES-6MX7JW3Y-DTzyqWmS.js +8 -0
  68. package/dist/assets/cad-DFnQbJJO.js +2 -0
  69. package/dist/assets/cfb-Bv6fOQ4m.js +11 -0
  70. package/dist/assets/channel-C66J400U.js +1 -0
  71. package/dist/assets/chunk-2J33WTMH-BoyKZPbs.js +1 -0
  72. package/dist/assets/chunk-3OPIFGDE-a_QAVzsM.js +62 -0
  73. package/dist/assets/chunk-4BX2VUAB-DZj4_o2K.js +1 -0
  74. package/dist/assets/chunk-55IACEB6-C7hP08Mf.js +1 -0
  75. package/dist/assets/chunk-5ZQYHXKU-DBQ_7Zc2.js +2 -0
  76. package/dist/assets/chunk-6U3AYISY-C6-Mtja1.js +12 -0
  77. package/dist/assets/chunk-727SXJPM-BVNP_kQ-.js +206 -0
  78. package/dist/assets/chunk-AGHRB4JF-DrBKq3qz.js +1 -0
  79. package/dist/assets/chunk-AQP2D5EJ-0N6k4ROT.js +231 -0
  80. package/dist/assets/chunk-BSJP7CBP-b8olRIQO.js +1 -0
  81. package/dist/assets/chunk-CSCIHK7Q-B5j-yHKS.js +124 -0
  82. package/dist/assets/chunk-EIO257PC-C6qii-N9.js +22 -0
  83. package/dist/assets/chunk-FMBD7UC4-CBBZh2UU.js +15 -0
  84. package/dist/assets/chunk-K2UTITRG-Cx4xt2xV.js +35 -0
  85. package/dist/assets/chunk-KSCS5N6A-Dwg0HTxH.js +10 -0
  86. package/dist/assets/chunk-L5ZTLDWV-BPuCpePB.js +1 -0
  87. package/dist/assets/chunk-LZXEDZCA-CvLuVK3G.js +2 -0
  88. package/dist/assets/chunk-ND2GUHAM-CWJPhGEg.js +1 -0
  89. package/dist/assets/chunk-NNHCCRGN-DlpIbxXb.js +159 -0
  90. package/dist/assets/chunk-NZK2D7GU-DuaLWEa1.js +1 -0
  91. package/dist/assets/chunk-O5CBEL6O-dK2KeDfH.js +70 -0
  92. package/dist/assets/chunk-QZHKN3VN-4Bf82riF.js +1 -0
  93. package/dist/assets/chunk-SRAX5OIU-BhbLEiib.js +1 -0
  94. package/dist/assets/chunk-WU5MYG2G-DLkui5D2.js +1 -0
  95. package/dist/assets/chunk-XPW4576I-BvXQTKbm.js +32 -0
  96. package/dist/assets/chunk-Z3N5DIM6-D9TMVU7m.js +1 -0
  97. package/dist/assets/chunk-ZUYEQ4TG-BzFOpW--.js +7 -0
  98. package/dist/assets/classDiagram-4FO5ZUOK-DKj6zlra.js +1 -0
  99. package/dist/assets/classDiagram-v2-Q7XG4LA2-DKj6zlra.js +1 -0
  100. package/dist/assets/compare-BA1y8ff-.css +1 -0
  101. package/dist/assets/compare-QN3IusOj.js +1 -0
  102. package/dist/assets/compiler-qgJWLAtm.js +1 -0
  103. package/dist/assets/core-S5OLGxXP.js +3 -0
  104. package/dist/assets/cose-bilkent-S5V4N54A-CslZOqNN.js +1 -0
  105. package/dist/assets/cpp-V0F2hNk9.js +1 -0
  106. package/dist/assets/cs-CZ-2BRQDIVT-BRw0NNL_.js +11 -0
  107. package/dist/assets/csharp-GZmu99Fo.js +1 -0
  108. package/dist/assets/css-D5l_8KUR.js +1 -0
  109. package/dist/assets/cytoscape.esm-C8YCVR3_.js +321 -0
  110. package/dist/assets/da-DK-5WZEPLOC-q5u_UoZe.js +5 -0
  111. package/dist/assets/dagre-BM42HDAG-D6fpH9H3.js +4 -0
  112. package/dist/assets/dagre-Bx709z4p.js +1 -0
  113. package/dist/assets/de-DE-XR44H4JA-B79lsSt9.js +8 -0
  114. package/dist/assets/defaultLocale-C8Fc0cco.js +1 -0
  115. package/dist/assets/diagram-2AECGRRQ-DGviV3zF.js +43 -0
  116. package/dist/assets/diagram-5GNKFQAL-D8edmK5r.js +10 -0
  117. package/dist/assets/diagram-KO2AKTUF-DonC_-9l.js +3 -0
  118. package/dist/assets/diagram-LMA3HP47-T0-OD5uV.js +24 -0
  119. package/dist/assets/diagram-OG6HWLK6-BsRJiZE3.js +24 -0
  120. package/dist/assets/diff-CJb8JxGC.js +1 -0
  121. package/dist/assets/directory-open-01563666-D4xXyWb_.js +1 -0
  122. package/dist/assets/directory-open-4ed118d0-1i309Asm.js +1 -0
  123. package/dist/assets/dist-ND9DUPs_.js +1 -0
  124. package/dist/assets/dist-S-2Hyh3N.js +1 -0
  125. package/dist/assets/dist-jshluroQ.js +27 -0
  126. package/dist/assets/docx-preview-CAHEyNQy.js +20 -0
  127. package/dist/assets/drawing-B3sCN7BX.js +2 -0
  128. package/dist/assets/ebook-DDycOGR3.js +2 -0
  129. package/dist/assets/eda-JxVOVy9j.js +2 -0
  130. package/dist/assets/el-GR-BZB4AONW-DVV0CNhT.js +10 -0
  131. package/dist/assets/email-D9tCfCzQ.js +2 -0
  132. package/dist/assets/en-B4ZKOASM-CpbJugBW.js +1 -0
  133. package/dist/assets/erDiagram-TEJ5UH35-O-dDoXsU.js +85 -0
  134. package/dist/assets/es-ES-U4NZUMDT-DUvN9FXg.js +9 -0
  135. package/dist/assets/eu-ES-A7QVB2H4-DV6UAZB_.js +11 -0
  136. package/dist/assets/eventmodeling-FCH6USID-BONfeu8r.js +1 -0
  137. package/dist/assets/fa-IR-HGAKTJCU-0ql2xhuq.js +8 -0
  138. package/dist/assets/fflate.module-BIQmJeC9.js +1 -0
  139. package/dist/assets/fi-FI-Z5N7JZ37-CxtRUMtw.js +6 -0
  140. package/dist/assets/file-open-002ab408-BHUWm0Sh.js +1 -0
  141. package/dist/assets/file-open-7c801643-DZtJT5zp.js +1 -0
  142. package/dist/assets/file-save-3189631c-CO9S4HFW.js +1 -0
  143. package/dist/assets/file-save-745eba88-Bwdfz6OZ.js +1 -0
  144. package/dist/assets/flowDiagram-I6XJVG4X-DsWkZiFB.js +162 -0
  145. package/dist/assets/fr-FR-RHASNOE6-CLi1nCBA.js +9 -0
  146. package/dist/assets/ganttDiagram-6RSMTGT7-r5IfYmu1.js +292 -0
  147. package/dist/assets/gitGraph-WXDBUCRP-BPjRwtiT.js +1 -0
  148. package/dist/assets/gitGraphDiagram-PVQCEYII-DGYT-2sl.js +106 -0
  149. package/dist/assets/gl-ES-HMX3MZ6V-NMLOwshd.js +10 -0
  150. package/dist/assets/global-compiler-D1EEBbpA.js +1 -0
  151. package/dist/assets/global-renderer-AKzBLvRw.js +1 -0
  152. package/dist/assets/go-B-PCS5zA.js +1 -0
  153. package/dist/assets/graphlib-B8gBHxth.js +1 -0
  154. package/dist/assets/he-IL-6SHJWFNN-BWPkP_3r.js +10 -0
  155. package/dist/assets/hi-IN-IWLTKZ5I-KNyxys-k.js +4 -0
  156. package/dist/assets/hu-HU-A5ZG7DT2-BjcxkVW9.js +7 -0
  157. package/dist/assets/id-ID-SAP4L64H-B-oUkzcH.js +10 -0
  158. package/dist/assets/image-6zdrB4g6.js +2 -0
  159. package/dist/assets/image-GAAHSSAO-7tK5sChZ.js +1 -0
  160. package/dist/assets/image-blob-reduce.esm-NzmDxm1v.js +2 -0
  161. package/dist/assets/info-J43DQDTF-sQY7EXUc.js +1 -0
  162. package/dist/assets/infoDiagram-5YYISTIA-Dzg1KIdJ.js +2 -0
  163. package/dist/assets/ini-B1CroMsf.js +1 -0
  164. package/dist/assets/init-D6jRqBbL.js +1 -0
  165. package/dist/assets/ishikawaDiagram-YF4QCWOH-C4gAmRlT.js +70 -0
  166. package/dist/assets/it-IT-JPQ66NNP-Bwud0QsX.js +11 -0
  167. package/dist/assets/ja-JP-DBVTYXUO-DgNQ5bjg.js +8 -0
  168. package/dist/assets/java-ChVphriW.js +1 -0
  169. package/dist/assets/javascript-w9aIBC1S.js +1 -0
  170. package/dist/assets/journeyDiagram-JHISSGLW-ofw85AZe.js +139 -0
  171. package/dist/assets/json-DS4EA3dC.js +1 -0
  172. package/dist/assets/jszip.min-C7VJhIfM.js +2 -0
  173. package/dist/assets/kaa-6HZHGXH3-BMz8LTXv.js +1 -0
  174. package/dist/assets/kab-KAB-ZGHBKWFO-B9w0Zir8.js +8 -0
  175. package/dist/assets/kanban-definition-UN3LZRKU-CljG07f4.js +89 -0
  176. package/dist/assets/katex-Vhh-h91d.js +257 -0
  177. package/dist/assets/kk-KZ-P5N5QNE5-2tUcaoKh.js +1 -0
  178. package/dist/assets/km-KH-HSX4SM5Z-_kaSqGhJ.js +11 -0
  179. package/dist/assets/ko-KR-MTYHY66A-CIjaox2B.js +9 -0
  180. package/dist/assets/ku-TR-6OUDTVRD-CkLMAwgC.js +9 -0
  181. package/dist/assets/lib-CxFoY_GP.js +6 -0
  182. package/dist/assets/libarchive-DknIq1tb.js +1 -0
  183. package/dist/assets/libarchive-DxGirPmi.wasm +0 -0
  184. package/dist/assets/linear-DAeDjlp3.js +1 -0
  185. package/dist/assets/logo-DG62cSZK.png +0 -0
  186. package/dist/assets/lt-LT-XHIRWOB4-BsH7UAds.js +3 -0
  187. package/dist/assets/lv-LV-5QDEKY6T-DH8to9BS.js +7 -0
  188. package/dist/assets/main-B8S7RFzE.js +4 -0
  189. package/dist/assets/main-BZ1u3qpM.css +1 -0
  190. package/dist/assets/markdown-C8bVcNXx.js +1 -0
  191. package/dist/assets/md-OHaN-Ra2.js +2 -0
  192. package/dist/assets/mermaid-parser.core-DX-qibXo.js +4 -0
  193. package/dist/assets/mindmap-definition-RKZ34NQL-5NZ4x9hJ.js +96 -0
  194. package/dist/assets/model-B6Ua5SnP.js +2 -0
  195. package/dist/assets/mp4-Dho29Zd7.js +1 -0
  196. package/dist/assets/mr-IN-CRQNXWMA-BrKaFNSo.js +13 -0
  197. package/dist/assets/my-MM-5M5IBNSE-BZSEmctA.js +1 -0
  198. package/dist/assets/nb-NO-T6EIAALU-6a9gavJA.js +10 -0
  199. package/dist/assets/nestedRender-vUCW8qgY.js +3 -0
  200. package/dist/assets/nl-NL-IS3SIHDZ-uxPhLMYz.js +8 -0
  201. package/dist/assets/nn-NO-6E72VCQL-D4PNCwHO.js +8 -0
  202. package/dist/assets/oc-FR-POXYY2M6-C7kpaHdZ.js +8 -0
  203. package/dist/assets/ofd-CM51fmds.js +2 -0
  204. package/dist/assets/ofd-CsX4S_yH.js +6 -0
  205. package/dist/assets/ordinal-hYBb2elL.js +1 -0
  206. package/dist/assets/pa-IN-N4M65BXN-DudflUsb.js +4 -0
  207. package/dist/assets/package-BuR3Qm_h.css +1 -0
  208. package/dist/assets/package-DbhUOWuO.js +296 -0
  209. package/dist/assets/packet-YPE3B663-zJFiRlih.js +1 -0
  210. package/dist/assets/pdf-CZTifdsT.js +2 -0
  211. package/dist/assets/percentages-BXMCSKIN-DuKjcyNK.js +1 -0
  212. package/dist/assets/php-5k5YNuRS.js +2 -0
  213. package/dist/assets/pica-W1nY7k4k.js +2 -0
  214. package/dist/assets/pie-CZr-MxNa.js +1 -0
  215. package/dist/assets/pie-LRSECV5Y-ChrxPon2.js +1 -0
  216. package/dist/assets/pieDiagram-4H26LBE5-rqS9xOI6.js +30 -0
  217. package/dist/assets/pl-PL-T2D74RX3-BjwyDbo2.js +9 -0
  218. package/dist/assets/postal-mime-kkzCFkih.js +29 -0
  219. package/dist/assets/pptx-HCi3sDR0.js +2 -0
  220. package/dist/assets/printLayout-D2pf0W9y.js +24 -0
  221. package/dist/assets/prod-CAexHIHC.js +149 -0
  222. package/dist/assets/pt-BR-5N22H2LF-dhO4g53z.js +9 -0
  223. package/dist/assets/pt-PT-UZXXM6DQ-B0FVw5E6.js +9 -0
  224. package/dist/assets/python-DwhXSSGr.js +1 -0
  225. package/dist/assets/quadrantDiagram-W4KKPZXB-CvbA748i.js +7 -0
  226. package/dist/assets/radar-GUYGQ44K-Ch58tAlJ.js +1 -0
  227. package/dist/assets/reactivity.esm-bundler-Bfmlzvr-.js +1 -0
  228. package/dist/assets/renderer-69XMfifI.js +1 -0
  229. package/dist/assets/requirementDiagram-4Y6WPE33-Ek_Wtky1.js +84 -0
  230. package/dist/assets/ro-RO-JPDTUUEW-CRyQ9zJm.js +11 -0
  231. package/dist/assets/rough.esm-CIepY_sA.js +1 -0
  232. package/dist/assets/roundRect-D01gJrlt.js +1 -0
  233. package/dist/assets/ru-RU-B4JR7IUQ-Ccj6OqLf.js +9 -0
  234. package/dist/assets/runtime-core.esm-bundler-CR6OOEFf.js +1 -0
  235. package/dist/assets/rust-Dk33Kfe-.js +1 -0
  236. package/dist/assets/sankeyDiagram-5OEKKPKP-D3gZ6xE7.js +40 -0
  237. package/dist/assets/sequenceDiagram-3UESZ5HK-C5489xFA.js +162 -0
  238. package/dist/assets/si-LK-N5RQ5JYF-BwS2qaTv.js +1 -0
  239. package/dist/assets/sk-SK-C5VTKIMK-ly1tHoOw.js +6 -0
  240. package/dist/assets/sl-SI-NN7IZMDC-iZiOFm2y.js +6 -0
  241. package/dist/assets/sql-DWRKyvJ-.js +1 -0
  242. package/dist/assets/src-BrOGWJpF.js +1 -0
  243. package/dist/assets/src-D_n3k0l_.js +5 -0
  244. package/dist/assets/stateDiagram-AJRCARHV-1hoVbE34.js +1 -0
  245. package/dist/assets/stateDiagram-v2-BHNVJYJU-CZmypPHd.js +1 -0
  246. package/dist/assets/style-x1XGuNl0.css +1 -0
  247. package/dist/assets/subset-shared.chunk-CK2m59fy.js +1 -0
  248. package/dist/assets/subset-worker.chunk-B5G7hWyg.js +1 -0
  249. package/dist/assets/sv-SE-XGPEYMSR-BNpkY1PO.js +10 -0
  250. package/dist/assets/ta-IN-2NMHFXQM-DsldkrWk.js +9 -0
  251. package/dist/assets/text-CMp0EW11.js +2 -0
  252. package/dist/assets/th-TH-HPSO5L25-AVrKqKOh.js +2 -0
  253. package/dist/assets/three.module-BFsVh7r1.js +4104 -0
  254. package/dist/assets/time-B8nkukJS.js +1 -0
  255. package/dist/assets/timeline-definition-PNZ67QCA-CfMKM_FS.js +120 -0
  256. package/dist/assets/tr-TR-DEFEU3FU-DYarL0Oa.js +7 -0
  257. package/dist/assets/treeView-BLDUP644-CGGdcSoP.js +1 -0
  258. package/dist/assets/treemap-LRROVOQU-C3Zg5qig.js +1 -0
  259. package/dist/assets/typescript-BvteI6YB.js +1 -0
  260. package/dist/assets/typst-DOlgRigg.js +2 -0
  261. package/dist/assets/typst_ts_renderer_bg-DRRWm1TP.wasm +0 -0
  262. package/dist/assets/uk-UA-QMV73CPH-D36-a0jl.js +6 -0
  263. package/dist/assets/umd-r51rBtd2.js +2 -0
  264. package/dist/assets/vennDiagram-CIIHVFJN-GrdHiqIf.js +34 -0
  265. package/dist/assets/vi-VN-M7AON7JQ-zdUBY1Fz.js +5 -0
  266. package/dist/assets/wardley-L42UT6IY-ilBO1QYS.js +1 -0
  267. package/dist/assets/wardleyDiagram-YWT4CUSO-Cgr3uPws.js +78 -0
  268. package/dist/assets/wasm-C3ukMqzA.js +1 -0
  269. package/dist/assets/wasm-pack-shim-BShYmbRf.js +1 -0
  270. package/dist/assets/wasm-pack-shim-BnuNh1z7.js +1 -0
  271. package/dist/assets/word-DQCwLNG7.js +150 -0
  272. package/dist/assets/worker-bundle-Dx5mKZOL.js +6 -0
  273. package/dist/assets/worker-ref-BbTnHTC-.js +1 -0
  274. package/dist/assets/xlsx-B1qUDXfb.js +2 -0
  275. package/dist/assets/xlsx-ff7ER-JZ.png +0 -0
  276. package/dist/assets/xml-DasnpDVC.js +1 -0
  277. package/dist/assets/xychartDiagram-2RQKCTM6-BwoaSxOF.js +7 -0
  278. package/dist/assets/yaml-1XF8XcZB.js +1 -0
  279. package/dist/assets/zh-CN-LNUGB5OW-WQ7J6JkH.js +10 -0
  280. package/dist/assets/zh-HK-E62DVLB3-BoGXaBos.js +1 -0
  281. package/dist/assets/zh-TW-RAJ6MFWO-DZQOFop7.js +9 -0
  282. package/dist/compare.html +21 -0
  283. package/dist/example/README.md +137 -0
  284. package/dist/example/SOURCES.md +49 -0
  285. package/dist/example/app.log +13 -0
  286. package/dist/example/archive.tar.gz +0 -0
  287. package/dist/example/archive.zip +0 -0
  288. package/dist/example/audio.mp3 +0 -0
  289. package/dist/example/audio.ogg +0 -0
  290. package/dist/example/book.epub +0 -0
  291. package/dist/example/book.umd +0 -0
  292. package/dist/example/change.diff +40 -0
  293. package/dist/example/code.cjs +38 -0
  294. package/dist/example/code.css +64 -0
  295. package/dist/example/code.java +55 -0
  296. package/dist/example/code.js +55 -0
  297. package/dist/example/code.jsx +43 -0
  298. package/dist/example/code.mjs +36 -0
  299. package/dist/example/code.py +56 -0
  300. package/dist/example/code.ts +78 -0
  301. package/dist/example/code.tsx +36 -0
  302. package/dist/example/component.vue +68 -0
  303. package/dist/example/config.yaml +48 -0
  304. package/dist/example/config.yml +25 -0
  305. package/dist/example/data.json +50 -0
  306. package/dist/example/data.xml +47 -0
  307. package/dist/example/drawing.dxf +22186 -0
  308. package/dist/example/embedded.html +316 -0
  309. package/dist/example/excel.fods +0 -0
  310. package/dist/example/excel.numbers +0 -0
  311. package/dist/example/excel.ods +0 -0
  312. package/dist/example/excel.xls +0 -0
  313. package/dist/example/excel.xlsb +0 -0
  314. package/dist/example/excel.xlsm +0 -0
  315. package/dist/example/excel.xlsx +0 -0
  316. package/dist/example/flow.excalidraw +1 -0
  317. package/dist/example/index.php +44 -0
  318. package/dist/example/main.c +39 -0
  319. package/dist/example/main.cpp +50 -0
  320. package/dist/example/main.go +55 -0
  321. package/dist/example/main.h +22 -0
  322. package/dist/example/main.hpp +28 -0
  323. package/dist/example/main.rs +36 -0
  324. package/dist/example/markdown.md +84 -0
  325. package/dist/example/model.gltf +66 -0
  326. package/dist/example/model.obj +10 -0
  327. package/dist/example/model.ply +18 -0
  328. package/dist/example/model.step +9 -0
  329. package/dist/example/model.stl +30 -0
  330. package/dist/example/module.cc +36 -0
  331. package/dist/example/notes.markdown +15 -0
  332. package/dist/example/ofd.ofd +0 -0
  333. package/dist/example/page.htm +29 -0
  334. package/dist/example/page.html +33 -0
  335. package/dist/example/pdf.pdf +9125 -3
  336. package/dist/example/pic.bmp +0 -0
  337. package/dist/example/pic.gif +0 -0
  338. package/dist/example/pic.jpeg +0 -0
  339. package/dist/example/pic.jpg +0 -0
  340. package/dist/example/pic.png +0 -0
  341. package/dist/example/pic.tif +0 -0
  342. package/dist/example/pic.tiff +0 -0
  343. package/dist/example/pic.webp +0 -0
  344. package/dist/example/ppt.pptx +0 -0
  345. package/dist/example/process.drawio +249 -0
  346. package/dist/example/program.cs +42 -0
  347. package/dist/example/query.sql +30 -0
  348. package/dist/example/report.typ +90 -0
  349. package/dist/example/sample.dra +0 -0
  350. package/dist/example/sample.dwg +0 -0
  351. package/dist/example/sample.eml +46 -0
  352. package/dist/example/sample.msg +0 -0
  353. package/dist/example/sample.olb +0 -0
  354. package/dist/example/samples/apache/blocks_and_tables.dwf +0 -0
  355. package/dist/example/samples/autodesk/house.dwfx +0 -0
  356. package/dist/example/samples/autodesk/robot-arm.dwfx +0 -0
  357. package/dist/example/script.bash +36 -0
  358. package/dist/example/script.sh +24 -0
  359. package/dist/example/settings.ini +23 -0
  360. package/dist/example/table.csv +4 -0
  361. package/dist/example/template.dot +0 -0
  362. package/dist/example/test.doc +0 -0
  363. package/dist/example/text.txt +3 -0
  364. package/dist/example/vector.svg +6 -0
  365. package/dist/example/video.mp4 +0 -0
  366. package/dist/example/word.docx +0 -0
  367. package/dist/index.html +302 -0
  368. package/dist/vendor/libarchive/libarchive.wasm +0 -0
  369. package/dist/vendor/libarchive/worker-bundle.js +6 -0
  370. package/dist/wasm/cad/dwfv-render.wasm +0 -0
  371. package/dist/wasm/cad/dwg-worker.js +24 -0
  372. package/dist/wasm/cad/libredwg-web.js +15 -0
  373. package/dist/wasm/cad/libredwg-web.wasm +0 -0
  374. package/package.json +118 -41
  375. package/dist/components/ImageViewer.js +0 -1898
  376. package/dist/components/MarkdownViewer.js +0 -1577
  377. package/dist/components/PdfView.js +0 -21660
  378. package/dist/components/PptxRender.js +0 -21165
  379. package/dist/components/XlsxTable.js +0 -69864
  380. package/dist/components/_commonjs-dynamic-modules.js +0 -6
  381. package/dist/components/_commonjsHelpers.js +0 -36
  382. package/dist/components/docx-preview.min.js +0 -5287
  383. package/dist/components/index.js +0 -1711
  384. package/dist/components/worker-ref.js +0 -21
  385. package/dist/index.mjs +0 -6
  386. package/dist/index.umd.js +0 -436
  387. package/dist/src/package/common/type.d.ts +0 -26
  388. package/dist/src/package/common/util.d.ts +0 -5
  389. package/dist/src/package/common/worker-ref.d.ts +0 -12
  390. package/dist/src/package/components/FileViewer/FileViewer.vue.d.ts +0 -25
  391. package/dist/src/package/components/FileViewer/index.d.ts +0 -2
  392. package/dist/src/package/components/FileViewer/util.d.ts +0 -2
  393. package/dist/src/package/index.d.ts +0 -12
  394. package/dist/src/package/vendors/docx/index.d.ts +0 -4
  395. package/dist/src/package/vendors/image/ImageViewer.vue.d.ts +0 -13
  396. package/dist/src/package/vendors/image/index.d.ts +0 -4
  397. package/dist/src/package/vendors/md/MarkdownViewer.vue.d.ts +0 -13
  398. package/dist/src/package/vendors/md/index.d.ts +0 -4
  399. package/dist/src/package/vendors/mp4/index.d.ts +0 -4
  400. package/dist/src/package/vendors/pdf/PdfView.vue.d.ts +0 -13
  401. package/dist/src/package/vendors/pdf/index.d.ts +0 -1
  402. package/dist/src/package/vendors/pdf/worker/index.d.ts +0 -4
  403. package/dist/src/package/vendors/pptx/PptxRender.vue.d.ts +0 -81
  404. package/dist/src/package/vendors/pptx/index.d.ts +0 -6
  405. package/dist/src/package/vendors/pptx/options.d.ts +0 -39
  406. package/dist/src/package/vendors/pptx/support/chart.d.ts +0 -4
  407. package/dist/src/package/vendors/pptx/worker/index.d.ts +0 -4
  408. package/dist/src/package/vendors/renders.d.ts +0 -3
  409. package/dist/src/package/vendors/text/CodeViewer.vue.d.ts +0 -13
  410. package/dist/src/package/vendors/text/index.d.ts +0 -6
  411. package/dist/src/package/vendors/xlsx/XlsxTable.vue.d.ts +0 -13
  412. package/dist/src/package/vendors/xlsx/index.d.ts +0 -5
  413. package/dist/src/package/vendors/xlsx/render.d.ts +0 -6
  414. package/dist/src/package/vendors/xlsx/util.d.ts +0 -8
  415. package/dist/src/package/vendors/xlsx/worker/SheetData.d.ts +0 -51
  416. package/dist/src/package/vendors/xlsx/worker/color.d.ts +0 -2
  417. package/dist/src/package/vendors/xlsx/worker/context.d.ts +0 -6
  418. package/dist/src/package/vendors/xlsx/worker/index.d.ts +0 -4
  419. package/dist/src/package/vendors/xlsx/worker/util.d.ts +0 -10
  420. package/dist/style.css +0 -57
  421. package/dist/worker/pdf.worker.js +0 -66
  422. package/dist/worker/pptx.worker.js +0 -21
  423. package/dist/worker/xlsx.worker.js +0 -65
@@ -0,0 +1,110 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./dist-S-2Hyh3N.js","./package-DbhUOWuO.js","./reactivity.esm-bundler-Bfmlzvr-.js","./runtime-core.esm-bundler-CR6OOEFf.js","./package-BuR3Qm_h.css"])))=>i.map(i=>d[i]);
2
+ import{b as e,d as t,f as n,p as r,r as i}from"./package-DbhUOWuO.js";import{et as a,p as o,rt as s,tt as c}from"./reactivity.esm-bundler-Bfmlzvr-.js";import{_ as l,b as u,f as d,g as f,h as p,i as m,o as h,r as g,s as _,t as v,y}from"./runtime-core.esm-bundler-CR6OOEFf.js";function b(e,t,n,r){return r===void 0?{level:e,code:t,message:n}:{level:e,code:t,message:n,source:r}}function x(e){return(e??[]).filter(e=>e.level!==`info`)}function S(){return globalThis.DecompressionStream}var C=class{async inflateRaw(e){let t=S();if(!t)throw Error(`This browser does not expose DecompressionStream. Provide a custom InflateProvider, or pre-bundle a WASM/JS inflater.`);try{return await w(e,`deflate-raw`,t)}catch(n){try{return await w(e,`deflate`,t)}catch{throw n instanceof Error?n:Error(String(n))}}}};async function w(e,t,n){let r=new Blob([e]).stream().pipeThrough(new n(t)),i=await new Response(r).arrayBuffer();return new Uint8Array(i)}var T=new TextDecoder(`utf-8`);new TextDecoder(`ascii`);function E(e){return T.decode(e)}function D(e){let t=[],n=e.replace(/\\/g,`/`);for(let e of n.split(`/`))!e||e===`.`||(e===`..`?t.pop():t.push(e));return t.join(`/`)}function O(e){let t=D(e),n=t.lastIndexOf(`/`);return n<0?``:t.slice(0,n)}function k(e,t){if(!t)return D(e);if(t.startsWith(`/`))return D(t.slice(1));let n=O(e);return D((n?n+`/`:``)+t)}function ee(e){let t=e.indexOf(`:`);return t>=0?e.slice(t+1):e}function A(e){return ee(e.localName||e.nodeName)}function j(e,t){return e.getAttribute(t)??e.getAttributeNS(null,t)??void 0}function M(e){return Array.from(e.childNodes).filter(e=>e.nodeType===1)}function N(e,t=`document.xml`){let n=P(e);if(n)return n;let r=te(e);if(r!==e){let e=P(r);if(e)return e}try{return ae(r)}catch(e){throw Error(`XML parse error in ${t}: ${String(e)}`)}}function P(e){if(!(typeof DOMParser>`u`))try{let t=new DOMParser().parseFromString(e,`application/xml`);return t.getElementsByTagName(`parsererror`)[0]?void 0:t}catch{return}}function te(e){let t=e;return t=t.replace(/\s+xmlns:(?:schemaLocation|noNamespaceSchemaLocation)\s*=\s*("[^"]*"|'[^']*')/g,``),/\s+xsi:schemaLocation\s*=/.test(t)&&!/\s+xmlns:xsi\s*=/.test(t)&&(t=t.replace(/<([A-Za-z_][\w.:-]*)(?=\s|>|\/)/,`<$1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"`)),t}var ne=class e{constructor(e,t){this.nodeType=1,this.childNodes=[],this.nodeName=e,this.localName=ee(e),this.attributes=t}get textContent(){return this.childNodes.map(e=>e.textContent??``).join(``)}get children(){return this.childNodes.filter(t=>t instanceof e)}getAttribute(e){return this.attributes.find(t=>t.name===e||t.nodeName===e)?.value??null}getAttributeNS(e,t){return this.attributes.find(e=>e.localName===t)?.value??null}getElementsByTagName(t){let n=[],r=i=>{(t===`*`||i.nodeName===t||i.localName===t)&&n.push(i);for(let t of i.childNodes)t instanceof e&&r(t)};for(let t of this.childNodes)t instanceof e&&r(t);return n}},re=class{constructor(e){this.textContent=e,this.nodeType=3}},ie=class{constructor(){this.nodeType=9,this.childNodes=[]}get textContent(){return this.childNodes.map(e=>e.textContent??``).join(``)}get children(){return this.childNodes.filter(e=>e instanceof ne)}get documentElement(){return this.children[0]}getElementsByTagName(e){let t=[],n=r=>{(e===`*`||r.nodeName===e||r.localName===e)&&t.push(r);for(let e of r.childNodes)e instanceof ne&&n(e)};for(let e of this.childNodes)e instanceof ne&&n(e);return t}};function ae(e){let t=new ie,n=[t],r=0;for(;r<e.length;){let i=e.indexOf(`<`,r);if(i<0){oe(n[n.length-1],e.slice(r));break}if(i>r&&oe(n[n.length-1],e.slice(r,i)),e.startsWith(`<!--`,i)){let t=e.indexOf(`-->`,i+4);if(t<0)throw Error(`Unclosed XML comment.`);r=t+3;continue}if(e.startsWith(`<![CDATA[`,i)){let t=e.indexOf(`]]>`,i+9);if(t<0)throw Error(`Unclosed XML CDATA section.`);oe(n[n.length-1],e.slice(i+9,t)),r=t+3;continue}if(e.startsWith(`<?`,i)){let t=e.indexOf(`?>`,i+2);if(t<0)throw Error(`Unclosed XML processing instruction.`);r=t+2;continue}if(e.startsWith(`<!`,i)){let t=e.indexOf(`>`,i+2);if(t<0)throw Error(`Unclosed XML declaration.`);r=t+1;continue}let a=se(e,i+1);if(a<0)throw Error(`Unclosed XML tag.`);let o=e.slice(i+1,a).trim();if(r=a+1,!o)continue;if(o[0]===`/`){let e=o.slice(1).trim().split(/\s+/)[0]??``,r=n.pop();for(;r&&r instanceof ne&&r.nodeName!==e&&r.localName!==ee(e)&&n.length>0;)r=n.pop();n.length===0&&n.push(t);continue}let s=o.endsWith(`/`);s&&(o=o.slice(0,-1).trim());let c=o.search(/\s/),l=new ne(c<0?o:o.slice(0,c),ce(c<0?``:o.slice(c+1))),u=n[n.length-1];l.parentNode=u,u.childNodes.push(l),s||n.push(l)}return t}function oe(e,t){if(!t)return;let n=le(t);n.trim().length!==0&&e.childNodes.push(new re(n))}function se(e,t){let n=``;for(let r=t;r<e.length;r++){let t=e[r];if(n)t===n&&(n=``);else if(t===`"`||t===`'`)n=t;else if(t===`>`)return r}return-1}function ce(e){let t=[],n=/([^\s=]+)\s*=\s*(?:"([^"]*)"|'([^']*)')/g,r;for(;r=n.exec(e);){let e=r[1],n=le(r[2]??r[3]??``);t.push({name:e,nodeName:e,localName:ee(e),value:n})}return t}function le(e){return e.replace(/&(#x[0-9a-fA-F]+|#\d+|amp|lt|gt|quot|apos);/g,(e,t)=>t===`amp`?`&`:t===`lt`?`<`:t===`gt`?`>`:t===`quot`?`"`:t===`apos`?`'`:t.startsWith(`#x`)?String.fromCodePoint(Number.parseInt(t.slice(2),16)):t.startsWith(`#`)?String.fromCodePoint(Number.parseInt(t.slice(1),10)):e)}function ue(e,t=2048){let n=Math.min(t,e.length);if(n===0)return!0;let r=0,i=0;for(let t=0;t<n;t++){let n=e[t];if(n===0)return!1;n===9||n===10||n===13||n>=32&&n<=126||n>=160?r++:i++}return r/n>.85&&i<20}function de(e){let t=e.split(/[?#]/)[0]??e,n=t.lastIndexOf(`/`),r=t.lastIndexOf(`.`);return r>n?t.slice(r+1).toLowerCase():``}function fe(e){switch(de(e)){case`png`:return`image/png`;case`jpg`:case`jpeg`:return`image/jpeg`;case`gif`:return`image/gif`;case`bmp`:return`image/bmp`;case`tif`:case`tiff`:return`image/tiff`;case`w2d`:return`application/x-dwf-w2d`;case`hsf`:return`model/vnd.hsf`;case`fpage`:return`application/vnd.ms-package.xps-fixeddocumentsequence+xml`;case`fdseq`:return`application/vnd.ms-package.xps-fixeddocumentsequence+xml`;case`fdoc`:return`application/vnd.ms-package.xps-fixeddocument+xml`;default:return}}async function pe(e,t){let n=new Blob([e],{type:t});return`createImageBitmap`in globalThis?await createImageBitmap(n):await new Promise((e,t)=>{let r=URL.createObjectURL(n),i=new Image;i.onload=()=>{URL.revokeObjectURL(r),e(i)},i.onerror=()=>{URL.revokeObjectURL(r),t(Error(`Failed to decode image`))},i.src=r})}function F(e){let t=e.match(/[-+]?(?:\d+\.\d*|\.\d+|\d+)(?:[eE][-+]?\d+)?/g);return t?t.map(Number).filter(Number.isFinite):[]}var me=101010256,he=33639248,ge=67324752,_e=class e{constructor(e,t,n,r){this.entryMap=new Map,this.cache=new Map,this.bytes=e,this.entries=t,this.archiveBase=n,this.inflater=r??new C;for(let e of t)this.entryMap.set(D(e.name),e)}static open(t,n){let r=new DataView(t.buffer,t.byteOffset,t.byteLength),i=ye(r);if(i<0)throw Error(`ZIP end-of-central-directory record was not found. This is not a DWF 6+/DWFx ZIP package.`);let a=I(r,i+4),o=I(r,i+6);if(a!==0||o!==0)throw Error(`Multi-disk ZIP archives are not supported.`);let s=I(r,i+10),c=L(r,i+12),l=L(r,i+16),u=0,d=l;if(L(r,d)!==he){let e=Math.max(0,i-c-1024*1024),t=-1;for(let n=i-c;n>=e;n--)if(n>=0&&L(r,n)===he){t=n;break}if(t<0)throw Error(`ZIP central directory could not be located.`);d=t,u=d-l}let f=[],p=d;for(let e=0;e<s;e++){if(L(r,p)!==he)throw Error(`Bad central directory signature at ${p}.`);let e=I(r,p+8),n=I(r,p+10),i=I(r,p+12),a=I(r,p+14),o=L(r,p+16),s=L(r,p+20),c=L(r,p+24),l=I(r,p+28),d=I(r,p+30),m=I(r,p+32),h=L(r,p+42),g=t.subarray(p+46,p+46+l),_=t.subarray(p+46+l+d,p+46+l+d+m),v=D(be(g,e)),y=be(_,e);v.endsWith(`/`)||f.push({name:v,compressedSize:s,uncompressedSize:c,compressionMethod:n,crc32:o,localHeaderOffset:h,centralHeaderOffset:p-u,flags:e,lastModTime:i,lastModDate:a,comment:y}),p+=46+l+d+m}return new e(t,f,u,n)}has(e){return this.entryMap.has(D(e))}get(e){return this.entryMap.get(D(e))}find(e){return this.entries.find(e)}findAll(e){return this.entries.filter(e)}async read(e){let t=typeof e==`string`?this.get(e):e;if(!t)throw Error(`ZIP entry not found: ${e}`);let n=this.cache.get(t.name);if(n)return n;let r=new DataView(this.bytes.buffer,this.bytes.byteOffset,this.bytes.byteLength),i=this.archiveBase+t.localHeaderOffset;if(L(r,i)!==ge)throw Error(`Bad local header signature for ${t.name}.`);let a=I(r,i+26),o=I(r,i+28),s=i+30+a+o,c=this.bytes.subarray(s,s+t.compressedSize),l;if(t.compressionMethod===0)l=c.slice();else if(t.compressionMethod===8)l=await this.inflater.inflateRaw(c);else throw Error(`Unsupported ZIP compression method ${t.compressionMethod} for ${t.name}.`);if(t.uncompressedSize!==0&&l.byteLength!==t.uncompressedSize&&t.uncompressedSize<4294967295)throw Error(`ZIP entry size mismatch for ${t.name}: expected ${t.uncompressedSize}, got ${l.byteLength}.`);return this.cache.set(t.name,l),l}};function ve(e){if(e.byteLength<22)return!1;let t=new DataView(e.buffer,e.byteOffset,e.byteLength);return L(t,0)===ge?!0:ye(t)>=0}function ye(e){let t=Math.max(0,e.byteLength-65535-22);for(let n=e.byteLength-22;n>=t;n--)if(L(e,n)===me)return n;return-1}function be(e,t){return t&2048?E(e):Array.from(e,e=>String.fromCharCode(e)).join(``)}function I(e,t){return e.getUint16(t,!0)}function L(e,t){return e.getUint32(t,!0)}async function xe(e){let t=new Map,n=new Map,r=[];if(e.has(`[Content_Types].xml`)){let i=N(E(await e.read(`[Content_Types].xml`)),`[Content_Types].xml`);for(let e of Array.from(i.documentElement.children)){let i=A(e);if(i===`Default`){let t=e.getAttribute(`Extension`)?.toLowerCase(),r=e.getAttribute(`ContentType`);t&&r&&n.set(t,r)}else if(i===`Override`){let n=D((e.getAttribute(`PartName`)??``).replace(/^\//,``)),i=e.getAttribute(`ContentType`);n&&i&&(t.set(n,i),r.push({partName:n,contentType:i}))}}}let i=new Map;return{zip:e,contentTypes:t,defaults:n,overrides:r,relationships:i,resources:e.entries.map(e=>({path:e.name,mediaType:Ce(t,n,e.name),size:e.uncompressedSize})),readText:async t=>E(await e.read(D(t))),readBytes:async t=>e.read(D(t)),getContentType:e=>Ce(t,n,e),getRelationships:async(t=``)=>{let n=D(t),r=i.get(n);if(r)return r;let a=Se(n);if(!e.has(a))return i.set(n,[]),[];let o=N(E(await e.read(a)),a),s=[];for(let e of Array.from(o.documentElement.children)){if(A(e)!==`Relationship`)continue;let t=e.getAttribute(`Id`)??``,r=e.getAttribute(`Type`)??``,i=e.getAttribute(`Target`)??``,a=e.getAttribute(`TargetMode`)??void 0;!t||!i||s.push({id:t,type:r,target:i,targetMode:a,source:n,resolvedTarget:a===`External`?i:k(n,i)})}return i.set(n,s),s}}}function Se(e){let t=D(e);if(!t)return`_rels/.rels`;let n=t.lastIndexOf(`/`);return n<0?`_rels/${t}.rels`:`${t.slice(0,n)}/_rels/${t.slice(n+1)}.rels`}function Ce(e,t,n){let r=D(n),i=e.get(r);if(i)return i;let a=r.lastIndexOf(`.`);if(a>=0)return t.get(r.slice(a+1).toLowerCase())}function we(e,t,n,r){return{...e,pages:t.map(e=>({id:e.id,name:e.name,kind:e.kind,width:e.width,height:e.height,sourcePath:e.sourcePath,diagnostics:e.diagnostics})),pageData:t,zip:n,opc:r}}var Te=1,Ee=4,De=16,Oe=32,ke=128,Ae=4,je=8,Me=1,Ne=4,Pe=5,Fe=1,Ie=2,Le=4,Re=8,ze=16,Be=32,Ve=64,He=128,Ue=0,We=1,Ge=2,Ke=3,qe=4,Je=5,Ye=6,R=-2139062144,Xe=-2139062145,Ze=-2139062146;async function Qe(e,t={}){let n=[],r=await $e(e,n,t.sourcePath),i=[],a=new Set,o=t.maxMeshes??1e4,s=t.maxTriangles??1e7,c=0,l=0,u=0;for(let e=0;e<r.length&&i.length<o&&u<s;e++)if(r[e]===83)try{let t=tt(r,e,i.length+1);if(!t)continue;let n=`${t.sourceStart}:${t.sourceEnd}`;if(a.has(n))continue;a.add(n),i.push(t),u+=t.triangleCount,e=Math.max(e,t.sourceEnd-1)}catch(e){let t=String(e);/edgebreaker/i.test(t)?c++:l++}c>0&&n.push(b(`warning`,`W3D_EDGEBREAKER_PARTIAL`,`${c} connectivity-compressed shell candidate(s) were skipped.`,t.sourcePath)),i.length===0&&n.push(b(`error`,`W3D_NO_MESHES`,`No renderable W3D shell meshes were decoded.`,t.sourcePath));let d=yt(i);return{kind:`w3d-model`,title:t.title??`3D Model`,meshes:i,bounds:d,diagnostics:n,sourcePath:t.sourcePath,stats:{meshCount:i.length,vertexCount:i.reduce((e,t)=>e+t.vertexCount,0),triangleCount:i.reduce((e,t)=>e+t.triangleCount,0),decodedBytes:r.byteLength,edgeCount:i.reduce((e,t)=>e+Math.floor((t.edgeIndices?.length??0)/2),0),materialCount:0,textureCount:0,pmiCount:0,nodeCount:0}}}async function $e(e,t,n){let r=new C;for(let t=0;t+6<e.length;t++){if(e[t]!==120)continue;let n=e[t+1];if(n!==1&&n!==94&&n!==156&&n!==218)continue;let i=e.subarray(t),a=et(i),o=[];a.length>6&&o.push({label:`raw-deflate-body`,data:a.subarray(2,a.length-4)}),i.length>2&&o.push({label:`raw-deflate-body-with-trailer`,data:i.subarray(2)}),o.push({label:`zlib-trimmed`,data:a}),a.length!==i.length&&o.push({label:`zlib-with-padding`,data:i});for(let e of o)try{return await r.inflateRaw(e.data)}catch{}}return e}function et(e){let t=e.length;for(;t>0&&e[t-1]===0;)t--;return t===e.length?e:e.subarray(0,t)}function tt(e,t,n){let r=Et(e,t+1),i=Dt(r),a=0;if((i&ke)!==0&&(a=Ot(r)),(i&Oe)!==0||((i&De)===0&&z(r),Dt(r),a&3))return;let o=i&65?Dt(r):Ne,s,c,l;if(o===Pe){let t=z(r);if(t<=0||r.pos+t>e.length||t>1e8)throw Error(`Bad edgebreaker block length.`);r.pos;let n=e.subarray(r.pos,r.pos+t);r.pos+=t;let a=nt(n);if((i&Te)===0){let t=a.pointCount*3;if(r.pos+t*4>e.length)throw Error(`Edgebreaker shell has no following full-resolution vertex array.`);s=Ct(e,r.pos,t),r.pos+=t*4}else throw Error(`edgebreaker quantized-point reconstruction is not enabled for this shell.`);if(c=mt(a.faces,a.pointCount),l=`edgebreaker-v${n[0]??0}`,c.length<3)throw Error(`Empty edgebreaker face list.`)}else if(o===Ne){let t=z(r);if(t<=0||t>1e7)throw Error(`Bad uncompressed shell point count.`);s=Ct(e,r.pos,t*3),r.pos+=t*3*4,c=mt(ut(r,t,(i&Ee)!==0,!1).indices,t),l=`uncompressed`}else if(o===Me){let t=z(r);if(t<=0||t>1e7)throw Error(`Bad compressed shell point count.`);let n=(a&je)===0?wt(r,6):[0,0,0,1,1,1],o=Dt(r),u=z(r);if(u<=0||r.pos+u>e.length)throw Error(`Bad compressed shell point payload length.`);s=pt(e.subarray(r.pos,r.pos+u),t,o,n),r.pos+=u,c=mt(ut(r,t,(i&Ee)!==0,(a&Ae)!==0).indices,t),l=`quantized-${o}`}else throw Error(`Unsupported W3D shell compression scheme ${o}.`);if(c.length<3||s.length<9)return;let u=ht(s,c),d=gt(s,c),f=bt(s);return{id:`w3d-mesh-${n}`,name:`Mesh ${n}`,positions:s,normals:u,indices:c,edgeIndices:d,vertexCount:Math.floor(s.length/3),triangleCount:Math.floor(c.length/3),bounds:f,color:xt(n),sourceStart:t,sourceEnd:r.pos,decodeKind:l}}function nt(e){if(e.byteLength<24)throw Error(`Edgebreaker block is too short.`);let t=new DataView(e.buffer,e.byteOffset,e.byteLength),n=e[0],r=e[1],i=e[2],a=e[3],o=t.getInt32(4,!0),s=t.getInt32(8,!0);t.getInt32(12,!0);let c=t.getInt32(16,!0);if(t.getInt32(20,!0),n<0||n>2||r!==0||i<0||i>3||a<0||a>3)throw Error(`Unsupported edgebreaker header.`);if(o<=0||s<0||c<=0)throw Error(`Invalid edgebreaker sizes.`);let l=n>=1?24:20,u=e.subarray(l,l+o);if(l+=o+At(l+o),l+s>e.length)throw Error(`Invalid edgebreaker MTable offset.`);let d=rt(e.subarray(l,l+s));l+=s+At(l+s);let f=it(u,d),p=ot(f.opcodePointCount,d,f.faces),m=[];for(let e of p)m.push(e[1],e[2],e[3]);let h=m.reduce((e,t)=>Math.max(e,t),-1),g=m.reduce((e,t)=>Math.min(e,t),c);if(g<0||h>=c)throw Error(`Edgebreaker face index range ${g}..${h} is outside point count ${c}.`);return{pointCount:c,faces:m,triangleCount:m.length/3,diagnostics:[]}}function rt(e){let t=Et(e,0),n=z(t),r=(n&Fe)===0?0:z(t),i=(n&Ie)===0?0:z(t),a=(n&Le)===0?0:i,o=(n&Re)===0?0:z(t),s=(n&ze)===0?0:z(t),c=Tt(t,r),l=Tt(t,i),u=Tt(t,a),d=[],f=0;for(let e=0;e<o;e++)f+=z(t),d.push(f);let p=[],m=new Map;f=0;for(let e=0;e<s;e+=2){let e=z(t)+f;f=e;let n=z(t);p.push(e,n),m.set(e,n)}return{flags:n,mlengths:c,m2stackoffsets:l,m2gateoffsets:u,dummies:d,patches:p,patchMap:m,bounding:(n&Be)===0?void 0:wt(t,6),quantization:(n&Ve)===0?[11,11,11]:[z(t),z(t),z(t)],normalQuantization:(n&He)===0?[11,11,11]:[z(t),z(t),z(t)]}}function it(e,t){let n=Array.from(e),r=[],i=0,a=0;for(;a<n.length;){let{ecount:e,offsets:o}=at(n,a,t);if(e<=0)throw Error(`Invalid edgebreaker boundary loop length ${e}.`);let s=[],c=[],l=[],u=[],d=[];for(let t=0;t<e;t++)c[t]=t-1,s[t]=t+1,l[t]=i++,u[t]=R;c[0]=e-1,s[e-1]=0;let f=0,p=0,m=e,h=[],g=[];for(;;){for(g.length===0&&g.push(m++);m+2>=s.length;)s.push(0),c.push(0),l.push(0),u.push(R);let e=d.length;d.push({start:0,twin:R},{start:0,twin:R},{start:0,twin:R});let t=[3,l[f],l[s[f]],-1];u[f]!==R&&u[f]>=0&&u[f]<d.length&&(d[u[f]].twin=e),d[e].twin=u[f],d[e].start=l[f],d[e+1].start=l[s[f]];let _=n[a++];if(_===Ue){t[3]=i,d[e+1].twin=R,d[e+2].twin=R,d[e+2].start=i;let n=g.pop();s[c[f]]=n,c[n]=c[f],s[n]=f,c[f]=n,l[n]=l[f],l[f]=i,u[f]=e+1,u[n]=e+2,i++}else if(_===We)t[3]=l[c[f]],d[e+1].twin=R,d[e+2].twin=u[c[f]],u[c[f]]!==R&&u[c[f]]>=0&&u[c[f]]<d.length&&(d[u[c[f]]].twin=e+2),d[e+2].start=l[c[f]],l[f]=l[c[f]],g.push(c[f]),c[f]=c[c[f]],s[c[f]]=f,u[f]=e+1;else if(_===Ge)if(t[3]=l[c[f]],d[e+1].twin=u[s[f]],u[s[f]]!==R&&u[s[f]]>=0&&u[s[f]]<d.length&&(d[u[s[f]]].twin=e+1),d[e+2].twin=u[c[f]],u[c[f]]!==R&&u[c[f]]>=0&&u[c[f]]<d.length&&(d[u[c[f]]].twin=e+2),d[e+2].start=l[c[f]],g.push(f,c[f],s[f]),lt(t)&&r.push(t),h.length>0)f=h.pop();else break;else if(_===Ke)t[3]=l[s[s[f]]],d[e+1].twin=u[s[f]],u[s[f]]!==R&&u[s[f]]>=0&&u[s[f]]<d.length&&(d[u[s[f]]].twin=e+1),d[e+2].twin=R,d[e+2].start=l[s[s[f]]],g.push(s[f]),s[f]=s[s[f]],c[s[f]]=f,u[f]=e+2;else if(_===qe){let n=f,r=(o[p]??0)+1;for(let e=0;e<r;e++)n=s[n];t[3]=l[s[n]],d[e+1].twin=R,d[e+2].twin=R,d[e+2].start=l[s[n]],p++;let i=g.pop();h.push(i),s[c[f]]=i,c[i]=c[f],s[i]=s[n],c[s[n]]=i,u[i]=e+2,l[i]=l[f],l[f]=l[s[n]],u[f]=e+1,c[f]=n,s[n]=f}else throw Error(`Unsupported edgebreaker opcode ${_}.`);if(_!==Ge)if(lt(t))r.push(t);else throw Error(`Invalid edgebreaker triangle.`);if(a>=n.length)break}}return{faces:r,opcodePointCount:i}}function at(e,t,n){let r=0,i=0,a=0,o=0,s=[],c=[],l=[];for(let u=t;u<e.length;u++){let t=e[u];if(t===Ue)--r;else if(t===We)r+=1;else if(t===Ge)if(r+=3,s.length>0){let e=c.pop();l[e]=r-2-s.pop()}else break;else if(t===Ke)r+=1;else if(t===qe)--r,c.push(i),s.push(r),l[i]=0,i++;else if(t===Je){let e=n.mlengths[a++]??0;r-=e+1}else if(t===Ye)n.mlengths[o],--r,o++;else throw Error(`Bad edgebreaker opcode ${t}.`)}return{ecount:r,offsets:l}}function ot(e,t,n){let r=new Int32Array(e);for(let n of t.dummies)n>=0&&n<e&&(r[n]=Xe);for(let n=0;n+1<t.patches.length;n+=2){let i=t.patches[n];i>=0&&i<e&&r[i]!==Xe&&(r[i]=Ze)}let i=0;for(let t=0;t<e;t++)r[t]<0?i++:r[t]=i;let a=[];for(let e of n){let n=e[1],i=e[2],o=e[3];if(ct(n,r)||ct(i,r)||ct(o,r))continue;let s=[3,st(n,r,t),st(i,r,t),st(o,r,t)];lt(s)&&a.push(s)}return a}function st(e,t,n){return t[e]===Ze?n.patchMap.get(e)??e:e-t[e]}function ct(e,t){return e<0||e>=t.length||t[e]===Xe}function lt(e){return e[1]!==e[2]&&e[2]!==e[3]&&e[3]!==e[1]&&e[1]>=0&&e[2]>=0&&e[3]>=0}function ut(e,t,n,r){Dt(e);let i=z(e);if(i<=0||e.pos+i>e.bytes.length)throw Error(`Bad compressed face-list payload length.`);let a=e.bytes.subarray(e.pos,e.pos+i);e.pos+=i;let o=dt(a,r);return{indices:ft(o,t,n),values:o}}function dt(e,t){if(e.length<2)throw Error(`Face payload is too short.`);let n=e[0],r=n/8;if(r!==1&&r!==2&&r!==4)throw Error(`Unsupported face-list sample width ${n}.`);let i=[],a=new DataView(e.buffer,e.byteOffset,e.byteLength);for(let n=1;n+r<=e.length;n+=r)r===1?i.push(t?a.getInt8(n):a.getUint8(n)):r===2?i.push(t?a.getInt16(n,!0):a.getUint16(n,!0)):i.push(t?a.getInt32(n,!0):a.getUint32(n,!0));return i}function ft(e,t,n){let r=[],i=0;for(;i<e.length;){let a=e[i++],o=Math.abs(a);if(o<3||i+o>e.length)throw Error(`Invalid face list run.`);let s=e.slice(i,i+o);if(i+=o,s.some(e=>e<0||e>=t))throw Error(`Face index out of range.`);if(n)if(a>0)for(let e=2;e<s.length;e++)e&1?r.push(s[e-1],s[e-2],s[e]):r.push(s[e-2],s[e-1],s[e]);else for(let e=2;e<s.length;e++)r.push(s[0],s[e-1],s[e]);else if(a>0)for(let e=2;e<s.length;e++)r.push(s[0],s[e-1],s[e])}return r}function pt(e,t,n,r){if(n===8){if(e.length<t*3)throw Error(`Short 8-bit quantized point payload.`);let n=new Float32Array(t*3);for(let i=0;i<t;i++)for(let t=0;t<3;t++){let a=e[i*3+t],o=r[t],s=r[t+3];n[i*3+t]=a===255?s:o+(s-o)*(a/255)}return n}let i=new Float32Array(t*3),a=0,o=(1<<n)-1;for(let s=0;s<t*3;s++){let t=0;for(let r=0;r<n;r++){let n=e[a>>3]??0;t=t<<1|n>>7-(a&7)&1,a++}let c=s%3,l=r[c],u=r[c+3];i[s]=t===o?u:l+(u-l)*(t/o)}return i}function mt(e,t){return t<=65535?new Uint16Array(e):new Uint32Array(e)}function ht(e,t){let n=new Float32Array(e.length);for(let r=0;r+2<t.length;r+=3){let i=t[r]*3,a=t[r+1]*3,o=t[r+2]*3,s=e[i],c=e[i+1],l=e[i+2],u=e[a],d=e[a+1],f=e[a+2],p=e[o],m=e[o+1],h=e[o+2],g=u-s,_=d-c,v=f-l,y=p-s,b=m-c,x=h-l,S=_*x-v*b,C=v*y-g*x,w=g*b-_*y;n[i]=(n[i]??0)+S,n[i+1]=(n[i+1]??0)+C,n[i+2]=(n[i+2]??0)+w,n[a]=(n[a]??0)+S,n[a+1]=(n[a+1]??0)+C,n[a+2]=(n[a+2]??0)+w,n[o]=(n[o]??0)+S,n[o+1]=(n[o+1]??0)+C,n[o+2]=(n[o+2]??0)+w}for(let e=0;e<n.length;e+=3){let t=n[e],r=n[e+1],i=n[e+2],a=Math.hypot(t,r,i)||1;n[e]=t/a,n[e+1]=r/a,n[e+2]=i/a}return n}function gt(e,t,n=Math.PI/5){if(t.length<3)return;let r=[],i=new Map;for(let n=0,a=0;n+2<t.length;n+=3,a++){let o=t[n],s=t[n+1],c=t[n+2],l=_t(e,o,s,c);r.push(l),vt(i,o,s,a),vt(i,s,c,a),vt(i,c,o,a)}let a=Math.cos(n),o=[];for(let e of i.values())if(e.tris.length===1)o.push(e.a,e.b);else if(e.tris.length>=2){let t=!1;for(let n=0;n<e.tris.length&&!t;n++)for(let i=n+1;i<e.tris.length;i++){let o=r[e.tris[n]],s=r[e.tris[i]];if(o[0]*s[0]+o[1]*s[1]+o[2]*s[2]<a){t=!0;break}}t&&o.push(e.a,e.b)}if(o.length!==0)return mt(o,Math.floor(e.length/3))}function _t(e,t,n,r){let i=t*3,a=n*3,o=r*3,s=e[i],c=e[i+1],l=e[i+2],u=e[a],d=e[a+1],f=e[a+2],p=e[o],m=e[o+1],h=e[o+2],g=u-s,_=d-c,v=f-l,y=p-s,b=m-c,x=h-l,S=_*x-v*b,C=v*y-g*x,w=g*b-_*y,T=Math.hypot(S,C,w)||1;return S/=T,C/=T,w/=T,[S,C,w]}function vt(e,t,n,r){let i=Math.min(t,n),a=Math.max(t,n),o=`${i}:${a}`,s=e.get(o);s||(s={a:i,b:a,tris:[]},e.set(o,s)),s.tris.push(r)}function yt(e){if(e.length===0)return{min:[0,0,0],max:[1,1,1],center:[.5,.5,.5],radius:1};let t=[1/0,1/0,1/0],n=[-1/0,-1/0,-1/0];for(let r of e)for(let e=0;e<3;e++)t[e]=Math.min(t[e],r.bounds.min[e]),n[e]=Math.max(n[e],r.bounds.max[e]);let r=[(t[0]+n[0])/2,(t[1]+n[1])/2,(t[2]+n[2])/2];return{min:t,max:n,center:r,radius:Math.max(1e-6,Math.hypot(n[0]-r[0],n[1]-r[1],n[2]-r[2]))}}function bt(e){let t=[1/0,1/0,1/0],n=[-1/0,-1/0,-1/0];for(let r=0;r<e.length;r+=3){let i=e[r],a=e[r+1],o=e[r+2];i<t[0]&&(t[0]=i),a<t[1]&&(t[1]=a),o<t[2]&&(t[2]=o),i>n[0]&&(n[0]=i),a>n[1]&&(n[1]=a),o>n[2]&&(n[2]=o)}return{min:t,max:n}}function xt(e){let t=e*.61803398875%1,n=.62,r=.96-n*.34,i=2*n-r;return[St(i,r,t+1/3),St(i,r,t),St(i,r,t-1/3)]}function St(e,t,n){return n<0&&(n+=1),n>1&&--n,n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function Ct(e,t,n){if(t+n*4>e.length)throw Error(`Float array exceeds W3D stream length.`);let r=new Float32Array(n),i=new DataView(e.buffer,e.byteOffset+t,n*4);for(let e=0;e<n;e++)r[e]=i.getFloat32(e*4,!0);return r}function wt(e,t){let n=[];for(let r=0;r<t;r++)n.push(kt(e));return n}function Tt(e,t){let n=[];for(let r=0;r<t;r++)n.push(z(e));return n}function Et(e,t=0){return{bytes:e,pos:t,view:new DataView(e.buffer,e.byteOffset,e.byteLength)}}function Dt(e){if(e.pos>=e.bytes.length)throw Error(`Unexpected end of W3D stream.`);return e.bytes[e.pos++]}function Ot(e){let t=e.view.getUint16(e.pos,!0);return e.pos+=2,t}function z(e){let t=e.view.getInt32(e.pos,!0);return e.pos+=4,t}function kt(e){let t=e.view.getFloat32(e.pos,!0);return e.pos+=4,t}function At(e){return 3-(e-1)%4}async function jt(e,t,n){let r=e.diagnostics;e.metadata??={},e.materials??=[],e.textures??=[],e.sceneTree??=[],e.pmi??=[],e.views??=[],e.animations??=[],await Mt(e,t,n,r);let i=t.find(e=>/descriptor/i.test(e.role??``)||/descriptor\.xml$/i.test(e.path));if(i&&n.zip.has(i.path))try{Nt(e,E(await n.readBytes(i.path)),i.path)}catch(e){r.push(b(`warning`,`EMODEL_DESCRIPTOR_PARSE_FAILED`,`Failed to parse eModel descriptor: ${String(e)}`,i.path))}let a=t.find(e=>/content\s+definition/i.test(e.role??``)),o=a&&n.zip.has(a.path)?Ft(e,E(await n.readBytes(a.path)),a.path,r):[],s=t.find(e=>/content\s+presentation/i.test(e.role??``)),c=new Map,l=new Map;if(s&&n.zip.has(s.path))try{let{nodes:t,pmi:r,views:i,animations:a,materials:o}=It(E(await n.readBytes(s.path)),s.path,c);l=o,e.sceneTree=t,e.pmi=r,e.views=Zt(e.views??[],i),e.animations=a;let u=new Map((e.materials??[]).map(e=>[e.id,e]));for(let t of o.values())u.set(t.id,Rt(t,e.textures??[]));e.materials=Array.from(u.values())}catch(e){r.push(b(`warning`,`EMODEL_PRESENTATION_PARSE_FAILED`,`Failed to parse eModel presentation: ${String(e)}`,s.path))}Vt(e,o,c,l);let u=$t(e.sceneTree??[]);(e.views?.length??0)>0&&!e.initialView&&(e.initialView=e.views[0]),e.stats.materialCount=e.materials?.length??0,e.stats.textureCount=e.textures?.length??0,e.stats.pmiCount=e.pmi?.length??0,e.stats.nodeCount=u}async function Mt(e,t,n,r){let i=[];for(let e of t.filter(e=>/texture/i.test(e.role??``)||/texture/i.test(e.title??``))){if(!n.zip.has(e.path))continue;let t,a;try{let r=nn(await n.readBytes(e.path));t=r?.width,a=r?.height}catch(t){r.push(b(`warning`,`EMODEL_TEXTURE_SIZE_FAILED`,`Failed to read texture size: ${String(t)}`,e.path))}i.push({id:e.path,name:tn(e.title)??en(e.path),path:e.path,mediaType:e.mediaType,width:t,height:a,role:e.role})}if(e.textures=i,i.length>0){let t=i.find(e=>/thread/i.test(e.name??``))??i.find(e=>!/environment/i.test(e.name??``))??i[0];t&&(e.materials=[{id:`dwfx-default-textured`,name:`DWFx default material`,color:[.72,.74,.78],textureId:t.id,roughness:.6,metalness:.03,doubleSided:!0,source:t.path}])}}function Nt(e,t,n){let r=N(t,n),i=r.documentElement;if(i){let t=Array.from(i.getElementsByTagName(`*`)).find(e=>A(e)===`Units`)?.getAttribute(`type`);t&&(e.metadata.units=t);let n=i.getAttribute(`name`);n&&(e.metadata.spaceName=n)}for(let t of Array.from(r.getElementsByTagName(`*`)).filter(e=>A(e)===`Property`)){let n=t.getAttribute(`name`),r=t.getAttribute(`value`);n&&r&&(e.metadata[n]=r)}let a=Pt(e.metadata);a&&(e.views=Zt(e.views??[],[a]),e.initialView=a)}function Pt(e){let t=Wt(e._ViewCubeHomeCameraPosition),n=Wt(e._ViewCubeHomeCameraTarget),r=Wt(e._ViewCubeHomeCameraUpVector),i=Wt(e._ViewCubeHomeCameraField);if(!(!t&&!n&&!r))return{id:`descriptor-home-view`,label:`Home`,camera:{position:t,target:n,up:r,field:i,projection:e._ViewCubeHomeCameraProjection===`1`?`perspective`:`orthographic`}}}function Ft(e,t,n,r){try{let r=N(t,n),i=[];for(let e of Array.from(r.getElementsByTagName(`*`)).filter(e=>A(e)===`Instance`)){let t=e.getAttribute(`id`)??``;t&&i.push({id:t,renderableRef:e.getAttribute(`renderableRef`)??void 0,node:e.getAttribute(`node`)??void 0,geometricVariation:e.getAttribute(`geometricVariation`)??void 0})}return e.metadata.contentInstanceCount=String(i.length),i}catch(e){return r.push(b(`warning`,`EMODEL_CONTENTDEF_PARSE_FAILED`,`Failed to parse eModel content definition: ${String(e)}`,n)),[]}}function It(e,t,n){let r=N(e,t),i=Array.from(r.getElementsByTagName(`*`)).filter(e=>A(e)===`View`),a=[];for(let e of i){let t=Kt(e);for(let e of t)a.push(Bt(e,n))}if(a.length===0)for(let e of Array.from(r.getElementsByTagName(`*`)).filter(e=>A(e)===`ReferenceNode`&&!qt(e)))a.push(Bt(e,n));let o=[];for(let e of Array.from(r.getElementsByTagName(`*`)).filter(e=>/ModelViewNode|View/i.test(A(e)))){let t=e.getAttribute(`id`)??`view-${o.length+1}`,n=e.getAttribute(`label`)??e.getAttribute(`name`)??t,r=Gt(e).find(e=>A(e)===`Camera`)??Array.from(e.getElementsByTagName(`*`)).find(e=>A(e)===`Camera`),i=r?Ht(r):void 0;(i||/ModelViewNode/i.test(A(e)))&&o.push({id:t,label:n,camera:i})}let s=[];for(let e of Array.from(r.getElementsByTagName(`*`))){let t=A(e);/PMI|Markup|Dimension|Annotation|Callout|Leader|Note/i.test(t)&&s.push({id:e.getAttribute(`id`)??`pmi-${s.length+1}`,type:/Leader/i.test(t)?`leader`:/Text|Note|Dimension/i.test(t)?`text`:`markup`,label:e.getAttribute(`label`)??e.getAttribute(`name`)??t,text:e.getAttribute(`text`)??e.textContent?.trim()??void 0,targetRef:e.getAttribute(`contentElementRefs`)??e.getAttribute(`target`)??void 0,properties:Yt(e)})}let c=[];for(let e of Array.from(r.getElementsByTagName(`*`)).filter(e=>/Animation|Sequence|Timeline/i.test(A(e))))c.push({id:e.getAttribute(`id`)??`animation-${c.length+1}`,name:e.getAttribute(`label`)??e.getAttribute(`name`)??A(e),targetRef:e.getAttribute(`target`)??void 0});let l=Lt(r);return{nodes:a,pmi:s,views:Qt(o),animations:c,materials:l}}function Lt(e){let t=new Map;for(let n of Array.from(e.getElementsByTagName(`*`)).filter(e=>A(e)===`InstanceAttributes`)){let e=n.getAttribute(`id`);if(!e)continue;let r=Gt(n).find(e=>A(e)===`Color`)??Array.from(n.getElementsByTagName(`*`)).find(e=>A(e)===`Color`);if(!r)continue;let i=Array.from(r.getElementsByTagName(`*`)).find(e=>A(e)===`Channel`&&/diffuse/i.test(e.getAttribute(`type`)??``)),a=Array.from(r.getElementsByTagName(`*`)).find(e=>A(e)===`Channel`&&/environment/i.test(e.getAttribute(`type`)??``)),o=Number(i?.getAttribute(`red`)),s=Number(i?.getAttribute(`green`)),c=Number(i?.getAttribute(`blue`));if(![o,s,c].every(Number.isFinite))continue;let l=Number(r.getAttribute(`gloss`)),u=tn(a?.getAttribute(`name`)??void 0);t.set(e,{id:`material-${e}`,name:`Material ${e}`,color:[o,s,c],opacity:1,roughness:Number.isFinite(l)?Math.max(.12,Math.min(.92,1-l/128)):.58,metalness:.03,textureName:u,doubleSided:!0,source:`content-presentation`})}return t}function Rt(e,t){if(e.textureId||!e.textureName)return e;let n=zt(e.textureName),r=t.find(e=>zt(e.name??``).includes(n)||n.includes(zt(e.name??``)));return r?{...e,textureId:r.id}:e}function zt(e){return e.replace(/&quot;/g,``).replace(/["{}]/g,``).toLowerCase()}function Bt(e,t){let n=Xt(e.getAttribute(`contentElementRefs`)??e.getAttribute(`contentRefs`)??``),r={id:e.getAttribute(`id`)??`node-${Math.random().toString(36).slice(2)}`,label:e.getAttribute(`label`)??e.getAttribute(`name`)??A(e),contentRefs:n,meshIds:[],children:[],properties:Yt(e)};for(let e of n)t.set(e,r);for(let n of Kt(e))r.children.push(Bt(n,t));return r}function Vt(e,t,n,r){let i=new Map(n),a=t.length===e.meshes.length;t.forEach((t,n)=>{let o=e.meshes[n];if(!o)return;let s=[t.renderableRef,t.id].filter(Boolean);o.selectionRefs=s,o.nodeId=t.node;let c=r.get(t.id)??(t.renderableRef?r.get(t.renderableRef):void 0);c&&a&&(o.materialId=c.id,o.color=c.color);for(let e of s){let t=i.get(e);if(t){o.name=t.label||o.name,t.meshIds.push(o.id);break}}})}function Ht(e){return{position:Ut(e,`positionX`,`positionY`,`positionZ`),target:Ut(e,`targetX`,`targetY`,`targetZ`),up:Ut(e,`upVectorX`,`upVectorY`,`upVectorZ`),field:Ut(e,`fieldWidth`,`fieldHeight`,`fieldDepth`),projection:e.getAttribute(`projectionType`)??void 0}}function Ut(e,t,n,r){let i=[Number(e.getAttribute(t)),Number(e.getAttribute(n)),Number(e.getAttribute(r))];return i.every(Number.isFinite)?i:void 0}function Wt(e){if(!e)return;let t=e.trim().split(/[\s,]+/).map(Number).filter(Number.isFinite);return t.length>=3?[t[0],t[1],t[2]]:void 0}function Gt(e){return Array.from(e.children)}function Kt(e){let t=[];for(let n of Gt(e)){let e=A(n);if(e.endsWith(`Node`))t.push(n);else if(e===`Nodes`||e===`Views`)for(let e of Gt(n))A(e).endsWith(`Node`)&&t.push(e)}return t}function qt(e){let t=Jt(e);for(;t;){if(A(t)===`ReferenceNode`)return!0;t=Jt(t)}return!1}function Jt(e){return(e.parentElement??e.parentNode)||void 0}function Yt(e){let t={};for(let n of Array.from(e.attributes))t[n.localName||n.name]=n.value;return t}function Xt(e){return e.trim().split(/[\s,]+/).filter(Boolean)}function Zt(e,t){return Qt([...e,...t])}function Qt(e){let t=new Set,n=[];for(let r of e){let e=r.id||r.label;t.has(e)||(t.add(e),n.push(r))}return n}function $t(e){let t=0;for(let n of e)t+=1+$t(n.children);return t}function en(e){let t=e.lastIndexOf(`/`);return t>=0?e.slice(t+1):e}function tn(e){if(e)return e.replace(/^"|"$/g,``).replace(/&quot;/g,`"`)}function nn(e){if(e.length>=24&&e[0]===137&&e[1]===80&&e[2]===78&&e[3]===71)return{width:rn(e,16),height:rn(e,20)};if(e.length>=4&&e[0]===255&&e[1]===216){let t=2;for(;t+9<e.length;){if(e[t]!==255){t++;continue}let n=e[t+1];for(t+=2;e[t]===255;)t++;if(n===217||n===218||t+2>e.length)break;let r=e[t]<<8|e[t+1];if(r<2||t+r>e.length)break;if(n>=192&&n<=195||n>=197&&n<=199||n>=201&&n<=203||n>=205&&n<=207)return{width:e[t+5]<<8|e[t+6],height:e[t+3]<<8|e[t+4]};t+=r}}}function rn(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0}var an=new Set([`http://schemas.microsoft.com/xps/2005/06/fixedrepresentation`,`http://schemas.openxps.org/oxps/v1.0/fixedrepresentation`]);async function on(e){let t=await xe(e),n=[],r=[],i=await cn(t,r,n);if(r.length===0){let e=await un(t,n);for(let i of e)try{let e=N(await t.readText(i),i),a=Array.from(e.getElementsByTagName(`*`)).filter(e=>A(e)===`DocumentReference`);a.length===0&&n.push(b(`warning`,`DWFX_NO_DOCREF`,`No DocumentReference elements found in ${i}.`,i));for(let e of a){let a=e.getAttribute(`Source`);a&&await dn(t,k(i,a),r,n)}}catch(e){n.push(b(`warning`,`DWFX_FDSEQ_READ_FAILED`,`Failed to read fixed document sequence: ${String(e)}`,i))}}if(r.length===0){let i=e.entries.filter(e=>/\.fpage$/i.test(e.name));for(let[e,a]of i.entries()){let i=await fn(t,a.name,n);r.push({id:`page-${e+1}`,name:a.name.split(`/`).pop()??`Page ${e+1}`,kind:`xps-fixed-page`,sourcePath:a.name,width:i.width,height:i.height,diagnostics:[]})}}if(r.length===0){let t=e.entries.some(e=>/\.(w3d|hsf)$/i.test(e.name))||i.some(e=>/emodel/i.test(e.type));r.push({id:`unsupported-1`,name:t?`Unsupported 3D DWFx package`:`Unsupported DWFx package`,kind:`unsupported`,width:1e3,height:1e3,reason:t?`This DWFx package contains 3D eModel/W3D content but no supported 2D FixedPage or preview image resource was found.`:`No XPS FixedPage parts or supported DWF manifest preview resources were found.`,diagnostics:[b(`error`,`DWFX_NO_PAGES`,`No supported renderable page was found in this DWFx package.`)]})}return we({kind:`dwfx`,pages:[],resources:t.resources,diagnostics:n,packageEntries:e.entries.map(e=>e.name)},r,e,t)}function sn(e){return e.has(`[Content_Types].xml`)&&(e.has(`_rels/.rels`)||e.entries.some(e=>/\.(fpage|dwfseq)$/i.test(e.name)))}async function cn(e,t,n){let r=await ln(e,n),i=[];for(let t of r)try{let r=pn(await e.readText(t),t);i.push(...r),n.push(b(`info`,`DWFX_DWF_MANIFEST_FOUND`,`Found DWFx DWF manifest with ${r.length} section(s).`,t))}catch(e){n.push(b(`warning`,`DWFX_DWF_MANIFEST_PARSE_FAILED`,`Failed to parse DWFx DWF manifest: ${String(e)}`,t))}for(let r of i.filter(e=>mn(e))){let i=bn(r,/2d\s+streaming\s+graphics/i)??r.resources.find(e=>/\.fpage$/i.test(e.path));if(!i||!/\.fpage$/i.test(xn(i.path)))continue;let a=xn(i.path);if(!e.zip.has(a))continue;let o=await fn(e,a,n);t.push({id:`page-${t.length+1}`,name:r.title||i.title||Sn(a),kind:`xps-fixed-page`,sourcePath:a,width:Number.isFinite(o.width)&&o.width>0?o.width:1e3,height:Number.isFinite(o.height)&&o.height>0?o.height:1e3,diagnostics:[]})}if(t.length>0)return i;for(let n of i.filter(e=>hn(e))){let r=gn(n,e.zip),i=bn(n,/3d\s+streaming\s+graphics/i)??n.resources.find(e=>/\.(w3d|hsf)$/i.test(e.path));if(i&&e.zip.has(i.path))try{let r=await Qe(await e.zip.read(i.path),{title:n.title||i.title||Sn(i.path),sourcePath:i.path});if(await jt(r,n.resources,e),r.meshes.length>0){t.push({id:`w3d-${t.length+1}`,name:n.title||i.title||Sn(i.path),kind:`w3d-model`,sourcePath:i.path,width:1e3,height:1e3,model:r,diagnostics:r.diagnostics});continue}t.push({id:`unsupported-3d-${t.length+1}`,name:n.title||`Unsupported 3D eModel`,kind:`unsupported`,width:1e3,height:1e3,sourcePath:i.path,reason:`A W3D/HSF 3D stream exists, but no renderable shell geometry was decoded. The package is intentionally not shown as a thumbnail so this failure is visible during production validation.`,diagnostics:[...r.diagnostics,b(`warning`,`DWFX_3D_W3D_UNSUPPORTED`,`Detected a 3D W3D resource, but no renderable shell geometry was decoded.`,i.path)]});continue}catch(e){t.push({id:`unsupported-3d-${t.length+1}`,name:n.title||`Unsupported 3D eModel`,kind:`unsupported`,width:1e3,height:1e3,sourcePath:i.path,reason:`A W3D/HSF 3D stream exists, but geometry parsing failed: ${String(e)}`,diagnostics:[b(`warning`,`DWFX_W3D_PARSE_FAILED`,`Failed to parse W3D geometry: ${String(e)}`,i.path)]});continue}if(r&&e.zip.has(r.path)){let i=Cn(await e.zip.read(r.path))??{width:1e3,height:1e3};t.push({id:`image-${t.length+1}`,name:n.title||r.title||Sn(r.path),kind:`image`,sourcePath:r.path,mediaType:r.mediaType??fe(r.path)??`image/png`,width:i.width,height:i.height,diagnostics:[b(`info`,`DWFX_3D_PREVIEW_ONLY`,`No W3D/HSF geometry stream was declared; showing the embedded section preview image.`,r.path)]})}}return i}async function ln(e,t){let n=new Set,r=e=>{e&&n.add(D(xn(e)))},i=new Set;try{let t=await e.getRelationships(``);for(let e of t)(/documentsequence/i.test(e.type)||/\.dwfseq$/i.test(e.resolvedTarget))&&i.add(D(e.resolvedTarget)),/document$/i.test(e.type)&&/manifest\.xml$/i.test(e.resolvedTarget)&&r(e.resolvedTarget)}catch(e){t.push(b(`warning`,`DWFX_DWFSEQ_RELS_FAILED`,`Failed to inspect DWFx package relationships: ${String(e)}`))}for(let t of e.zip.entries)/\.dwfseq$/i.test(t.name)&&i.add(t.name);for(let n of i)if(e.zip.has(n))try{let t=N(await e.readText(n),n),i=Array.from(t.getElementsByTagName(`*`)).filter(e=>A(e)===`ManifestReference`);for(let e of i)r(e.getAttribute(`Source`)??e.getAttribute(`source`)??void 0);let a=await e.getRelationships(n).catch(()=>[]);for(let e of a)(/document/i.test(e.type)||/manifest\.xml$/i.test(e.resolvedTarget))&&r(e.resolvedTarget)}catch(e){t.push(b(`warning`,`DWFX_DWFSEQ_READ_FAILED`,`Failed to read DWFDocumentSequence ${n}: ${String(e)}`,n))}for(let t of e.zip.entries)/^dwf\/documents\/.*\/manifest\.xml$/i.test(t.name)&&r(t.name);return Array.from(n).filter(t=>e.zip.has(t))}async function un(e,t){let n=new Set;try{let t=await e.getRelationships(``);for(let e of t)(an.has(e.type)||/fixedrepresentation/i.test(e.type)||/\.fdseq$/i.test(e.resolvedTarget))&&n.add(D(e.resolvedTarget))}catch(e){t.push(b(`warning`,`DWFX_ROOT_RELS_FAILED`,`Failed to read package relationships: ${String(e)}`))}for(let t of e.overrides)(/fixeddocumentsequence/i.test(t.contentType)||/\.fdseq$/i.test(t.partName))&&n.add(t.partName);for(let t of e.zip.entries)/\.fdseq$/i.test(t.name)&&n.add(t.name);return Array.from(n)}async function dn(e,t,n,r){let i;try{i=await e.readText(t)}catch(e){r.push(b(`warning`,`DWFX_FDOC_READ_FAILED`,`Failed to read fixed document ${t}: ${String(e)}`,t));return}let a=N(i,t),o=Array.from(a.getElementsByTagName(`*`)).filter(e=>A(e)===`PageContent`);for(let i of o){let a=i.getAttribute(`Source`);if(!a)continue;let o=k(t,xn(a)),s=a.startsWith(`#`)?a.slice(1):void 0;if(s){let n=(await e.getRelationships(t)).find(e=>e.id===s);n&&(o=n.resolvedTarget)}o=xn(o);let c=i.getAttribute(`Width`),l=i.getAttribute(`Height`),u=c&&l?{width:Number(c),height:Number(l)}:await fn(e,o,r),d=n.length+1;n.push({id:`page-${d}`,name:`Page ${d}`,kind:`xps-fixed-page`,sourcePath:o,width:Number.isFinite(u.width)&&u.width>0?u.width:1e3,height:Number.isFinite(u.height)&&u.height>0?u.height:1e3,diagnostics:[]})}}async function fn(e,t,n){try{let n=xn(t),r=N(E(await e.readBytes(n)),n),i=r.documentElement??Array.from(r.getElementsByTagName(`*`))[0];return{width:Number(i?.getAttribute(`Width`)??1e3),height:Number(i?.getAttribute(`Height`)??1e3)}}catch(e){return n.push(b(`warning`,`DWFX_PAGE_SIZE_FAILED`,`Failed to read FixedPage size: ${String(e)}`,t)),{width:1e3,height:1e3}}}function pn(e,t){let n=N(e,t);return Array.from(n.getElementsByTagName(`*`)).filter(e=>A(e)===`Section`).map((e,t)=>{let n=vn(e,`name`)??`section-${t+1}`,r=vn(e,`title`)??n;return{type:vn(e,`type`)??``,name:n,title:r,resources:Array.from(e.getElementsByTagName(`*`)).filter(e=>A(e).endsWith(`Resource`)||A(e)===`Resource`).map(e=>({path:D(xn(vn(e,`href`)??``)),role:vn(e,`role`),mediaType:vn(e,`mime`),title:vn(e,`title`),size:yn(e,`size`)})).filter(e=>e.path.length>0)}}).filter(e=>e.resources.length>0||e.type.length>0)}function mn(e){return/(^|\.)ePlot$/i.test(e.type)||/com\.autodesk\.dwf\.ePlot$/i.test(e.type)}function hn(e){return/(^|\.)eModel$/i.test(e.type)||/com\.autodesk\.dwf\.eModel$/i.test(e.type)}function gn(e,t){let n=e.resources.filter(e=>/^(image\/|application\/octet-stream)/i.test(e.mediaType??``)||/\.(png|jpe?g|gif|bmp)$/i.test(e.path)),r=n.filter(e=>/thumbnail|preview/i.test(e.role??``)||/thumbnail|preview/i.test(e.title??``)),i=r.length>0?r:n.filter(e=>!/texture/i.test(e.role??``));return(i.length>0?i:n).filter(e=>t.has(e.path)).sort((e,t)=>_n(t)-_n(e))[0]}function _n(e){let t=e.size??0;return/thumbnail/i.test(e.role??``)&&(t+=5e6),/preview/i.test(e.role??``)&&(t+=4e6),/icon/i.test(e.role??``)&&(t-=2e6),/texture/i.test(e.role??``)&&(t-=3e6),t}function vn(e,t){return e.getAttribute(t)??e.getAttribute(`dwf:${t}`)??e.getAttribute(`ePlot:${t}`)??e.getAttribute(`eModel:${t}`)??Array.from(e.attributes).find(e=>e.localName===t)?.value??void 0}function yn(e,t){let n=vn(e,t);if(n===void 0)return;let r=Number(n);return Number.isFinite(r)?r:void 0}function bn(e,t){return e.resources.find(e=>t.test(e.role??``))}function xn(e){return D((e.split(/[?#]/)[0]??e).replace(/^\//,``))}function Sn(e){let t=xn(e),n=t.lastIndexOf(`/`);return n>=0?t.slice(n+1):t}function Cn(e){if(e.length>=24&&e[0]===137&&e[1]===80&&e[2]===78&&e[3]===71)return{width:wn(e,16),height:wn(e,20)};if(e.length>=4&&e[0]===255&&e[1]===216){let t=2;for(;t+9<e.length;){if(e[t]!==255){t++;continue}let n=e[t+1];for(t+=2;e[t]===255;)t++;if(n===217||n===218||t+2>e.length)break;let r=e[t]<<8|e[t+1];if(r<2||t+r>e.length)break;if(n>=192&&n<=195||n>=197&&n<=199||n>=201&&n<=203||n>=205&&n<=207)return{width:e[t+5]<<8|e[t+6],height:e[t+3]<<8|e[t+4]};t+=r}}}function wn(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0}function Tn(e){let t=On(e),n=[],r=0,i=``,a=0,o=0,s=0,c=0,l,u,d=()=>r<t.length&&t[r]?.kind===`num`,f=()=>{let e=t[r++];if(!e||e.kind!==`num`)throw Error(`Expected number in path data near token ${r}.`);return e.value},p=()=>f()!==0;for(;r<t.length;){let e=t[r];if(!e)break;if(e.kind===`cmd`){if(i=e.value,r++,i===`F`||i===`f`){d()&&f();continue}}else if(!i){r++;continue}let m=i===i.toLowerCase(),h=i.toUpperCase(),g=e=>m?a+e:e,_=e=>m?o+e:e;if(h===`M`){if(!d())continue;let e=g(f()),t=_(f());for(n.push({type:`M`,x:e,y:t}),a=s=e,o=c=t,l=u=void 0;d();){let e=g(f()),t=_(f());n.push({type:`L`,x:e,y:t}),a=e,o=t}}else if(h===`L`)for(;d();){let e=g(f()),t=_(f());n.push({type:`L`,x:e,y:t}),a=e,o=t,l=u=void 0}else if(h===`H`)for(;d();){let e=g(f());n.push({type:`L`,x:e,y:o}),a=e,l=u=void 0}else if(h===`V`)for(;d();){let e=_(f());n.push({type:`L`,x:a,y:e}),o=e,l=u=void 0}else if(h===`C`)for(;d();){let e=g(f()),t=_(f()),r=g(f()),i=_(f()),s=g(f()),c=_(f());n.push({type:`C`,x1:e,y1:t,x2:r,y2:i,x:s,y:c}),a=s,o=c,l={x:r,y:i},u=void 0}else if(h===`S`)for(;d();){let e=l?{x:2*a-l.x,y:2*o-l.y}:{x:a,y:o},t=g(f()),r=_(f()),i=g(f()),s=_(f());n.push({type:`C`,x1:e.x,y1:e.y,x2:t,y2:r,x:i,y:s}),a=i,o=s,l={x:t,y:r},u=void 0}else if(h===`Q`)for(;d();){let e=g(f()),t=_(f()),r=g(f()),i=_(f());n.push({type:`Q`,x1:e,y1:t,x:r,y:i}),a=r,o=i,u={x:e,y:t},l=void 0}else if(h===`T`)for(;d();){let e=u?{x:2*a-u.x,y:2*o-u.y}:{x:a,y:o},t=g(f()),r=_(f());n.push({type:`Q`,x1:e.x,y1:e.y,x:t,y:r}),a=t,o=r,u=e,l=void 0}else if(h===`A`)for(;d();){let e=Math.abs(f()),t=Math.abs(f()),r=f(),i=p(),s=p(),c=g(f()),d=_(f());n.push({type:`A`,rx:e,ry:t,rotation:r,largeArc:i,sweep:s,x:c,y:d}),a=c,o=d,l=u=void 0}else h===`Z`?(n.push({type:`Z`}),a=s,o=c,l=u=void 0):r++}return n}function En(e,t){let n=0,r=0,i=0,a=0;for(let o of t)switch(o.type){case`M`:e.moveTo(o.x,o.y),n=i=o.x,r=a=o.y;break;case`L`:e.lineTo(o.x,o.y),n=o.x,r=o.y;break;case`C`:e.bezierCurveTo(o.x1,o.y1,o.x2,o.y2,o.x,o.y),n=o.x,r=o.y;break;case`Q`:e.quadraticCurveTo(o.x1,o.y1,o.x,o.y),n=o.x,r=o.y;break;case`A`:{let t=Mn(n,r,o.rx,o.ry,o.rotation,o.largeArc,o.sweep,o.x,o.y,32);for(let[n,r]of t)e.lineTo(n,r);n=o.x,r=o.y;break}case`Z`:e.closePath(),n=i,r=a;break}}function Dn(e,t=.75){let n=[],r,i=0,a=0,o=0,s=0,c=()=>(r||(r={points:[],closed:!1},n.push(r)),r),l=(e,t)=>{let n=c(),r=n.points.length;r>=2&&Math.abs(n.points[r-2]-e)<1e-9&&Math.abs(n.points[r-1]-t)<1e-9||n.points.push(e,t)};for(let c of e)switch(c.type){case`M`:r={points:[c.x,c.y],closed:!1},n.push(r),i=o=c.x,a=s=c.y;break;case`L`:l(c.x,c.y),i=c.x,a=c.y;break;case`C`:{let e=kn(i,a,c.x,c.y,t);for(let t=1;t<=e;t++){let n=t/e;l(An(i,c.x1,c.x2,c.x,n),An(a,c.y1,c.y2,c.y,n))}i=c.x,a=c.y;break}case`Q`:{let e=kn(i,a,c.x,c.y,t);for(let t=1;t<=e;t++){let n=t/e;l(jn(i,c.x1,c.x,n),jn(a,c.y1,c.y,n))}i=c.x,a=c.y;break}case`A`:{let e=Mn(i,a,c.rx,c.ry,c.rotation,c.largeArc,c.sweep,c.x,c.y,Math.max(8,Math.ceil(24/Math.max(t,.1))));for(let[t,n]of e)l(t,n);i=c.x,a=c.y;break}case`Z`:r&&(l(o,s),r.closed=!0),i=o,a=s;break}return n.filter(e=>e.points.length>=2)}function On(e){let t=[],n=/([MmLlHhVvCcSsQqTtAaZzFf])|([-+]?(?:\d+\.\d*|\.\d+|\d+)(?:[eE][-+]?\d+)?)/g,r;for(;(r=n.exec(e))!==null;)r[1]?t.push({kind:`cmd`,value:r[1]}):r[2]&&t.push({kind:`num`,value:Number(r[2])});return t}function kn(e,t,n,r,i){let a=Math.hypot(n-e,r-t);return Math.max(4,Math.min(96,Math.ceil(a/Math.max(1.5,i*6))))}function An(e,t,n,r,i){let a=1-i;return a*a*a*e+3*a*a*i*t+3*a*i*i*n+i*i*i*r}function jn(e,t,n,r){let i=1-r;return i*i*e+2*i*r*t+r*r*n}function Mn(e,t,n,r,i,a,o,s,c,l){if(n===0||r===0||Math.abs(e-s)<1e-9&&Math.abs(t-c)<1e-9)return[[s,c]];let u=i*Math.PI/180,d=Math.cos(u),f=Math.sin(u),p=(e-s)/2,m=(t-c)/2,h=d*p+f*m,g=-f*p+d*m;n=Math.abs(n),r=Math.abs(r);let _=h*h/(n*n)+g*g/(r*r);if(_>1){let e=Math.sqrt(_);n*=e,r*=e}let v=n*n,y=r*r,b=h*h,x=g*g,S=(v*y-v*x-y*b)/(v*x+y*b);S=Math.max(0,S);let C=(a===o?-1:1)*Math.sqrt(S),w=C*(n*g/r),T=C*(-r*h/n),E=d*w-f*T+(e+s)/2,D=f*w+d*T+(t+c)/2,O=(h-w)/n,k=(g-T)/r,ee=(-h-w)/n,A=(-g-T)/r,j=Math.atan2(k,O),M=Math.atan2(O*A-k*ee,O*ee+k*A);!o&&M>0&&(M-=2*Math.PI),o&&M<0&&(M+=2*Math.PI);let N=Math.max(2,Math.min(l,Math.ceil(Math.abs(M)/(Math.PI/16)))),P=[];for(let e=1;e<=N;e++){let t=j+M*e/N,i=d*n*Math.cos(t)-f*r*Math.sin(t)+E,a=f*n*Math.cos(t)+d*r*Math.sin(t)+D;P.push([i,a])}return P}function Nn(e,t){let n=E(e),r=[],i=[],a=`#000000`,o,s=1,c=0;if(/<svg[\s>]/i.test(n)){let e=n.matchAll(/<path\b[^>]*\bd=["']([^"']+)["'][^>]*>/gi);for(let t of e){let e=t[0],n=t[1];i.push({type:`path`,commands:Tn(n),stroke:Fn(e,`stroke`)??a,fill:Fn(e,`fill`)??void 0,lineWidth:Number(Fn(e,`stroke-width`)??s)}),c++}let t=n.matchAll(/<(polyline|polygon)\b[^>]*\bpoints=["']([^"']+)["'][^>]*>/gi);for(let e of t){let t=e[0],n=F(e[2]);n.length>=4&&i.push({type:e[1].toLowerCase()===`polygon`?`polygon`:`polyline`,points:n,stroke:Fn(t,`stroke`)??a,fill:Fn(t,`fill`)??void 0,lineWidth:Number(Fn(t,`stroke-width`)??s)}),c++}}let l=n.split(/\r?\n/);for(let e of l){let t=e.trim();if(!t||t.startsWith(`#`)||t.startsWith(`//`))continue;let n=t.toLowerCase(),r=F(t);if(/^(color|stroke|pen|wt_color)\b/i.test(t)){a=In(t)??a,c++;continue}if(/^(fill|brush|wt_fill)\b/i.test(t)){o=In(t)??o??`#000000`,c++;continue}if(/^(nofill|fillnone)\b/i.test(t)){o=void 0,c++;continue}if(/^(linewidth|lineweight|weight|wt_line_weight)\b/i.test(t)&&r.length>=1){s=Math.max(.2,r[0]),c++;continue}if((/^path\b/i.test(t)||/\bPath\s*Data\b/.test(t))&&/[MmLlCcQqAaZz]/.test(t)){let e=t.replace(/^path\b[:=]?/i,``).replace(/^.*?Data\s*=\s*/i,``).replace(/^['"]|['"]$/g,``);i.push({type:`path`,commands:Tn(e),stroke:a,fill:o,lineWidth:s}),c++;continue}if(/^(line|wt_line)\b/i.test(t)&&r.length>=4){i.push({type:`polyline`,points:r.slice(0,4),stroke:a,lineWidth:s}),c++;continue}if((/^(polyline|wt_polyline|pline)\b/i.test(t)||/\bPolyline\b/i.test(t))&&r.length>=4){i.push({type:`polyline`,points:Pn(r),stroke:a,lineWidth:s}),c++;continue}if((/^(polygon|wt_polygon)\b/i.test(t)||/\bPolygon\b/i.test(t))&&r.length>=6){i.push({type:`polygon`,points:Pn(r),stroke:a,fill:o??`#000000`,lineWidth:s}),c++;continue}if(/^(rect|rectangle|wt_rectangle)\b/i.test(t)&&r.length>=4){i.push({type:`rect`,x:r[0],y:r[1],width:r[2],height:r[3],stroke:a,fill:o,lineWidth:s}),c++;continue}if(/^(circle|ellipse)\b/i.test(t)&&r.length>=3){let[e,t,n]=r,l=[];for(let r=0;r<=72;r++){let i=Math.PI*2*r/72;l.push(e+Math.cos(i)*n,t+Math.sin(i)*n)}i.push({type:`polygon`,points:l,stroke:a,fill:o,lineWidth:s}),c++;continue}if(/^(text|wt_text)\b/i.test(t)&&r.length>=2){let e=r[0],n=r[1],o=r.length>=3?r[2]:12,s=t.match(/["']([^"']+)["']/)?.[1]??t.replace(/^(text|wt_text)\b/i,``).replace(/[-+]?(?:\d+\.\d*|\.\d+|\d+)(?:[eE][-+]?\d+)?/g,``).trim();i.push({type:`text`,x:e,y:n,size:o,text:s||`Text`,fill:a}),c++;continue}(n.includes(`wt_`)||n.includes(`whip`)||n.includes(`dwf`))&&c++}let u=Ln(i);return i.length===0?r.push(b(`warning`,`W2D_TEXT_NO_GEOMETRY`,`Textual W2D parser did not find supported geometry commands in ${t}.`,t)):r.push(b(`info`,`W2D_TEXT_PARSED`,`Parsed ${i.length} supported vector primitives from ${t}.`,t)),c===0&&r.push(b(`warning`,`W2D_TEXT_UNKNOWN_DIALECT`,`The file is textual, but does not look like the supported WHIP/W2D textual subset.`,t)),{primitives:i,diagnostics:r,bounds:u}}function Pn(e){return e.length>=5&&Number.isInteger(e[0])&&e.length-1==e[0]*2?e.slice(1):e}function Fn(e,t){return e.match(RegExp(`${t}=["']([^"']+)["']`,`i`))?.[1]}function In(e){let t=e.match(/#(?:[0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})\b/i)?.[0];if(t)return t;let n=F(e);return n.length>=3?`rgb(${Math.max(0,Math.min(255,n[0]))}, ${Math.max(0,Math.min(255,n[1]))}, ${Math.max(0,Math.min(255,n[2]))})`:e.match(/\b(black|white|red|green|blue|yellow|cyan|magenta|gray|grey)\b/i)?.[1]}function Ln(e){let t=1/0,n=1/0,r=-1/0,i=-1/0,a=(e,a)=>{t=Math.min(t,e),n=Math.min(n,a),r=Math.max(r,e),i=Math.max(i,a)};for(let t of e)if(`points`in t)for(let e=0;e+1<t.points.length;e+=2)a(t.points[e],t.points[e+1]);else if(t.type===`rect`)a(t.x,t.y),a(t.x+t.width,t.y+t.height);else if(t.type===`text`)a(t.x,t.y),a(t.x+t.text.length*(t.size??12)*.6,t.y+(t.size??12));else if(t.type===`path`)for(let e of t.commands)`x`in e&&`y`in e&&a(e.x,e.y),`x1`in e&&`y1`in e&&a(e.x1,e.y1),`x2`in e&&`y2`in e&&a(e.x2,e.y2);return Number.isFinite(t)?{minX:t,minY:n,maxX:r,maxY:i}:void 0}var Rn=1,zn=2,Bn=4,Vn=8,Hn=16,Un=32,Wn=64,Gn=128,Kn=256,qn=512,Jn=1024;function Yn(e,t){return new Xn(e,t).parse()}var Xn=class{constructor(e,t){this.bytes=e,this.sourcePath=t,this.pos=0,this.current={x:0,y:0},this.primitives=[],this.diagnostics=[],this.unsupportedOpcodes=[],this.opcodes=0,this.decimalRevision=600,this.state={stroke:`#000000`,fill:void 0,fillOn:!1,visible:!0,lineWidth:1,fontHeight:120,fontRotation:0,fontName:`sans-serif`},this.view=new DataView(e.buffer,e.byteOffset,e.byteLength)}parse(){for(;this.pos<this.bytes.length&&(this.eatWhitespace(),!(this.pos>=this.bytes.length));){let e=this.pos,t=this.u8();this.opcodes++;try{if(t===40){this.pos=e,this.parseExtendedAscii(e);continue}if(t===123){if(!this.parseExtendedBinary(e))break;continue}if(this.parseSingleByteOpcode(t))continue;this.unsupportedOpcodes.push({offset:e,opcode:t,message:`Unsupported/unknown W2D single-byte opcode 0x${t.toString(16).padStart(2,`0`)}.`});break}catch(n){this.unsupportedOpcodes.push({offset:e,opcode:t,message:`Failed while decoding W2D opcode 0x${t.toString(16)}: ${String(n)}`});break}}if(this.primitives.length>0?this.diagnostics.push(b(`info`,`W2D_BINARY_PARSED`,`Parsed ${this.primitives.length} vector primitives from binary WHIP!/W2D stream (${this.opcodes} opcodes).`,this.sourcePath)):this.diagnostics.push(b(`warning`,`W2D_BINARY_NO_GEOMETRY`,`Binary WHIP!/W2D parser did not emit supported geometry.`,this.sourcePath)),this.unsupportedOpcodes.length>0){let e=this.unsupportedOpcodes[0];this.diagnostics.push(b(`warning`,`W2D_BINARY_PARTIAL`,`${this.unsupportedOpcodes.length} unsupported opcode(s); first at byte ${e.offset}: ${e.message}`,this.sourcePath))}return{primitives:this.primitives,diagnostics:this.diagnostics,bounds:er(this.primitives),opcodes:this.opcodes,unsupportedOpcodes:this.unsupportedOpcodes}}parseSingleByteOpcode(e){switch(e){case 0:return!0;case 3:{let e=this.u8(),t=this.u8(),n=this.u8(),r=this.u8();return this.state.stroke=ir(e,t,n,r),this.state.fillOn&&(this.state.fill=this.state.stroke),!0}case 6:return this.readBinaryFont(),!0;case 12:{let e=[this.point16Relative(),this.point16Relative()];return this.polyline(e),!0}case 16:{let e=this.pointSet16Relative();return this.pointSetPrimitive(e),!0}case 18:{let e=this.point16Relative(),t=this.u16();return this.ellipsePrimitive(e,t,t,0,0,0),!0}case 20:return this.polytriangles(this.pointSet16Relative()),!0;case 23:return this.state.lineWidth=Math.max(.2,Math.abs(this.i32())),!0;case 24:{let e=this.point32Relative(),t=$n(this.readWhipString());return this.text(e,t),this.skipComplexTextOptions(),!0}case 146:{let e=this.point32Relative(),t=this.u32(),n=this.u16(),r=this.u16();return this.ellipsePrimitive(e,t,t,n,r,0,!1),!0}case 172:return this.readCount(),!0;case 204:return this.readCount(),!0;case 228:return this.readCount(),!0}switch(String.fromCharCode(e)){case`B`:return this.polyline(this.pointSet32Relative()),!0;case`C`:return this.state.stroke=sr(this.readAsciiInteger()),this.state.fillOn&&(this.state.fill=this.state.stroke),!0;case`c`:return this.state.stroke=sr(this.u8()),this.state.fillOn&&(this.state.fill=this.state.stroke),!0;case`E`:{let e=this.readAsciiPoint(),t=this.readAsciiPoint();return this.ellipsePrimitive(e,t.x,t.y,0,0,0),!0}case`e`:{let e=this.point32Relative(),t=this.u32(),n=this.u32(),r=this.u16(),i=this.u16(),a=this.u16();return this.ellipsePrimitive(e,t,n,r,i,a),!0}case`F`:return this.state.fillOn=!0,this.state.fill=this.state.stroke,!0;case`f`:return this.state.fillOn=!1,this.state.fill=void 0,!0;case`L`:{let e=[this.readAsciiPoint(),this.readAsciiPoint()];return this.polyline(e),!0}case`l`:{let e=[this.point32Relative(),this.point32Relative()];return this.polyline(e),!0}case`N`:return this.i32(),!0;case`n`:return this.u16(),!0;case`O`:return this.current={x:this.i32(),y:this.i32()},!0;case`P`:return this.pointSetPrimitive(this.pointSetAscii()),!0;case`p`:return this.pointSetPrimitive(this.pointSet32Relative()),!0;case`R`:{let e=this.readAsciiPoint(),t=this.readAsciiInteger();return this.ellipsePrimitive(e,t,t,0,0,0),!0}case`r`:{let e=this.point32Relative(),t=this.u32();return this.ellipsePrimitive(e,t,t,0,0,0),!0}case`T`:return this.polytriangles(this.pointSetAscii()),!0;case`t`:return this.polytriangles(this.pointSet32Relative()),!0;case`V`:return this.state.visible=!0,!0;case`v`:return this.state.visible=!1,!0;case`x`:{let e=this.point32Relative(),t=$n(this.readWhipString());return this.text(e,t),!0}}return!1}parseExtendedAscii(e){let{token:t,expr:n}=this.readBalancedExpression(e);switch(t){case`(W2D`:{let e=n.match(/V(\d+)\.(\d+)/i);e&&(this.decimalRevision=Number(e[1])*100+Number(e[2]));break}case`(Color`:{let e=or(n);e.length>=3&&(this.state.stroke=rr(e[0],e[1],e[2]));break}case`(LineWeight`:{let e=or(n);e.length>=1&&(this.state.lineWidth=Math.max(.2,Math.abs(e[0])));break}case`(Font`:{let e=n.match(/\(Height\s+(-?\d+)/i)?.[1],t=n.match(/\(Rotation\s+(-?\d+)/i)?.[1],r=n.match(/\(Name\s+(['"])(.*?)\1/i)?.[2];e&&(this.state.fontHeight=Math.max(1,Math.abs(Number(e)))),t&&(this.state.fontRotation=Number(t)||0),r&&(this.state.fontName=r);break}case`(EndOfDWF`:this.pos=this.bytes.length;break;default:break}}parseExtendedBinary(e){if(this.remaining()<6)return!1;let t=this.u32(),n=this.u16();return n===17||n===16||n===291?(this.unsupportedOpcodes.push({offset:e,opcode:`{${n.toString(16)}}`,message:`Embedded compressed WHIP block detected. This build renders uncompressed binary W2D streams and manifest markup XML; compressed nested blocks are skipped.`}),this.pos=t>0&&this.pos+t<=this.bytes.length?this.pos+t:this.bytes.length,!0):t>0&&this.pos+t<=this.bytes.length?(this.pos+=t,!0):(this.unsupportedOpcodes.push({offset:e,opcode:`{${n.toString(16)}}`,message:`Unsupported extended binary WHIP object with unknown payload size.`}),!1)}readBinaryFont(){let e=this.u16();e&Rn&&(this.state.fontName=this.readWhipString()||this.state.fontName),e&zn&&this.u8(),e&Bn&&this.u8(),e&Vn&&this.u8(),e&Hn&&this.u8(),e&Un&&(this.state.fontHeight=Math.max(1,Math.abs(this.i32()))),e&Wn&&(this.state.fontRotation=this.u16()),e&Gn&&this.u16(),e&Kn&&this.u16(),e&qn&&this.u16(),e&Jn&&this.i32()}skipComplexTextOptions(){this.skipScoringOption(),this.skipScoringOption();for(let e=0;e<4;e++)this.i32(),this.i32();if(this.decimalRevision>=600&&this.pos<this.bytes.length){let e=Math.max(0,this.readCount()-1);for(let t=0;t<e;t++)this.readCount()}}skipScoringOption(){let e=Math.max(0,this.readCount()-1);for(let t=0;t<e;t++)this.readCount()}pointSetPrimitive(e){this.state.fillOn?this.polygon(e,this.state.fill??this.state.stroke,this.state.stroke):this.polyline(e)}polytriangles(e){if(!(!this.state.visible||e.length<3))for(let t=0;t+2<e.length;t++)this.polygon([e[t],e[t+1],e[t+2]],this.state.stroke,void 0)}polyline(e){!this.state.visible||e.length<2||this.primitives.push({type:`polyline`,points:Zn(e),stroke:this.state.stroke,lineWidth:this.state.lineWidth})}polygon(e,t,n){!this.state.visible||e.length<3||this.primitives.push({type:`polygon`,points:Zn(e),fill:t,stroke:n,lineWidth:this.state.lineWidth})}ellipsePrimitive(e,t,n,r,i,a,o=this.state.fillOn){let s=Qn(e,t,n,r,i,a);o?this.polygon(s,this.state.fill??this.state.stroke,this.state.stroke):this.polyline(s)}text(e,t){!this.state.visible||!t.trim()||this.primitives.push({type:`text`,x:e.x,y:e.y,text:t,size:Math.max(10,Math.abs(this.state.fontHeight)),fill:this.state.stroke})}pointSet32Relative(){let e=this.readCount(),t=[];for(let n=0;n<e;n++)t.push(this.point32Relative());return t}pointSet16Relative(){let e=this.readCount(),t=[];for(let n=0;n<e;n++)t.push(this.point16Relative());return t}pointSetAscii(){let e=this.readAsciiInteger(),t=[];for(let n=0;n<e;n++)t.push(this.readAsciiPoint());return t}point32Relative(){let e=this.i32(),t=this.i32();return this.current={x:this.current.x+e,y:this.current.y+t},{...this.current}}point16Relative(){let e=this.i16(),t=this.i16();return this.current={x:this.current.x+e,y:this.current.y+t},{...this.current}}readAsciiPoint(){let e=this.readAsciiInteger();return this.peek()===44&&this.pos++,{x:e,y:this.readAsciiInteger()}}readAsciiInteger(){this.eatWhitespace();let e=this.pos;for((this.peek()===43||this.peek()===45)&&this.pos++;this.pos<this.bytes.length&&tr(this.bytes[this.pos]);)this.pos++;let t=nr(this.bytes.subarray(e,this.pos)),n=Number.parseInt(t,10);return Number.isFinite(n)?n:0}readWhipString(){this.eatWhitespace();let e=this.peek();if(e===123){this.pos++;let e=this.i32(),t=Math.max(0,e*2);if(this.pos+t>this.bytes.length)throw Error(`Truncated binary WHIP string.`);let n=new TextDecoder(`utf-16le`).decode(this.bytes.subarray(this.pos,this.pos+t));return this.pos+=t,this.peek()===125&&this.pos++,n}if(e===34||e===39){let e=this.u8(),t=[],n=!1;for(;this.pos<this.bytes.length;){let r=this.u8();if(n)t.push(r),n=!1;else if(r===92)t.push(r),n=!0;else if(r===e)break;else t.push(r)}return nr(new Uint8Array(t))}let t=this.pos;for(;this.pos<this.bytes.length;){let e=this.bytes[this.pos];if(e===32||e===9||e===10||e===13||e===41)break;this.pos++}return nr(this.bytes.subarray(t,this.pos))}readBalancedExpression(e){this.pos=e;let t=0,n=0,r=!1;for(;this.pos<this.bytes.length;){let e=this.u8();if(n)r?r=!1:e===92?r=!0:e===n&&(n=0);else if(e===34||e===39)n=e;else if(e===40)t++;else if(e===41&&(t--,t<=0))break}let i=nr(this.bytes.subarray(e,this.pos));return{token:i.match(/^\([^\s()]+/)?.[0]??`(`,expr:i}}readCount(){let e=this.u8();return e===0?256+this.u16():e}eatWhitespace(){for(;this.pos<this.bytes.length;){let e=this.bytes[this.pos];if(e===32||e===9||e===10||e===13)this.pos++;else break}}remaining(){return this.bytes.length-this.pos}peek(){return this.pos<this.bytes.length?this.bytes[this.pos]:void 0}u8(){if(this.remaining()<1)throw Error(`Unexpected EOF`);return this.view.getUint8(this.pos++)}i16(){if(this.remaining()<2)throw Error(`Unexpected EOF`);let e=this.view.getInt16(this.pos,!0);return this.pos+=2,e}u16(){if(this.remaining()<2)throw Error(`Unexpected EOF`);let e=this.view.getUint16(this.pos,!0);return this.pos+=2,e}i32(){if(this.remaining()<4)throw Error(`Unexpected EOF`);let e=this.view.getInt32(this.pos,!0);return this.pos+=4,e}u32(){if(this.remaining()<4)throw Error(`Unexpected EOF`);let e=this.view.getUint32(this.pos,!0);return this.pos+=4,e}};function Zn(e){let t=[];for(let n of e)t.push(n.x,n.y);return t}function Qn(e,t,n,r,i,a){let o=r,s=i;o===0&&s===0?s=65536:s<=o&&(s+=65536);let c=s-o,l=Math.max(16,Math.min(144,Math.ceil(Math.abs(c)/65536*96))),u=a*Math.PI*2/65536,d=Math.cos(u),f=Math.sin(u),p=[];for(let r=0;r<=l;r++){let i=(o+c*r/l)*Math.PI*2/65536,a=Math.cos(i)*t,s=Math.sin(i)*n;p.push({x:e.x+a*d-s*f,y:e.y+a*f+s*d})}return p}function $n(e){return e.replace(/\\P/gi,`
3
+ `).replace(/\\L|\\l/g,``).replace(/\\O|\\o/g,``).replace(/\\H[-+]?\d*\.?\d+x;/gi,``).replace(/\\S([^;]+);/gi,`$1`).replace(/\\[A-Za-z][^;]*;/g,``).replace(/\\~/g,` `).replace(/\\\\/g,`\\`).trim()}function er(e){let t=1/0,n=1/0,r=-1/0,i=-1/0,a=(e,a)=>{t=Math.min(t,e),n=Math.min(n,a),r=Math.max(r,e),i=Math.max(i,a)};for(let t of e)if(`points`in t)for(let e=0;e+1<t.points.length;e+=2)a(t.points[e],t.points[e+1]);else if(t.type===`rect`)a(t.x,t.y),a(t.x+t.width,t.y+t.height);else if(t.type===`text`){let e=t.size??12;a(t.x,t.y),a(t.x,t.y+e)}else if(t.type===`path`)for(let e of t.commands)`x`in e&&`y`in e&&a(e.x,e.y),`x1`in e&&`y1`in e&&a(e.x1,e.y1),`x2`in e&&`y2`in e&&a(e.x2,e.y2);return Number.isFinite(t)?{minX:t,minY:n,maxX:r,maxY:i}:void 0}function tr(e){return e>=48&&e<=57}function nr(e){return Array.from(e,e=>String.fromCharCode(e)).join(``)}function rr(e,t,n){return`rgb(${ar(e)}, ${ar(t)}, ${ar(n)})`}function ir(e,t,n,r){return`rgba(${ar(e)}, ${ar(t)}, ${ar(n)}, ${Math.max(0,Math.min(1,r/255))})`}function ar(e){return Math.max(0,Math.min(255,Math.round(e)))}function or(e){return(e.match(/[-+]?(?:\d+\.\d*|\.\d+|\d+)(?:[eE][-+]?\d+)?/g)??[]).map(Number).filter(Number.isFinite)}function sr(e){return[`#000000`,`#ff0000`,`#ffff00`,`#00ff00`,`#00ffff`,`#0000ff`,`#ff00ff`,`#000000`,`#808080`,`#c0c0c0`][e]??`#000000`}function cr(e){return e.entries.some(e=>/\.w2d$/i.test(e.name)||/manifest\.xml$/i.test(e.name)||/descriptor\.xml$/i.test(e.name)||/\.hsf$/i.test(e.name))}async function lr(e){let t=[],n=[],r=e.entries.map(e=>({path:e.name,mediaType:fe(e.name),size:e.uncompressedSize})),i=e.entries.find(e=>/(^|\/)manifest\.xml$/i.test(e.name)),a=[];if(i)try{a=fr(E(await e.read(i)),i.name),t.push(b(`info`,`DWF_MANIFEST_FOUND`,`Found DWF manifest with ${a.length} section(s).`,i.name))}catch(e){t.push(b(`warning`,`DWF_MANIFEST_PARSE_FAILED`,`Failed to parse DWF manifest: ${String(e)}`,i.name))}else t.push(b(`info`,`DWF_NO_MANIFEST`,`No manifest.xml was found; falling back to resource discovery.`));if(a.length>0)for(let r of a){let i=vr(r,/2d\s+streaming\s+graphics/i)??r.resources.find(e=>/\.w2d$/i.test(e.path));if(!i)continue;let a=vr(r,/^descriptor$/i)??{path:D(r.name+`/descriptor.xml`)},o={};if(a&&e.has(a.path))try{o=pr(E(await e.read(a.path)),i.path)}catch(e){t.push(b(`warning`,`DWF_DESCRIPTOR_PARSE_FAILED`,`Failed to parse descriptor for ${r.title}: ${String(e)}`,a.path))}let s=[],c=[];try{let t=await dr(e,i.path);c.push(...t.primitives),s.push(...t.diagnostics)}catch(e){s.push(b(`warning`,`DWF_W2D_READ_FAILED`,`Failed to read or parse ${i.path}: ${String(e)}`,i.path))}for(let t of r.resources.filter(e=>/markup\s+private/i.test(e.role??``)&&/\.xml$/i.test(e.path)))if(e.has(t.path))try{let n=mr(E(await e.read(t.path)),t.path,o.w2dTransform);c.push(...n.primitives),s.push(...n.diagnostics)}catch(e){s.push(b(`warning`,`DWF_MARKUP_XML_PARSE_FAILED`,`Failed to parse markup private XML: ${String(e)}`,t.path))}if(c.length>0){let e=_r(c),t=e?Math.max(1,e.maxX-e.minX):o.paperWidth??1e3,a=e?Math.max(1,e.maxY-e.minY):o.paperHeight??1e3;n.push({id:`page-${n.length+1}`,name:r.title||i.title||br(i.path),kind:`w2d-text`,sourcePath:i.path,width:t,height:a,primitives:c,bounds:e,diagnostics:s})}else{let t=vr(r,/thumbnail|preview/i)??r.resources.find(e=>/\.(png|jpe?g|gif|bmp)$/i.test(e.path));t&&e.has(t.path)&&n.push({id:`image-${n.length+1}`,name:r.title||br(t.path),kind:`image`,sourcePath:t.path,mediaType:t.mediaType??fe(t.path)??`image/png`,width:1e3,height:1e3,diagnostics:[...s,b(`warning`,`DWF_IMAGE_FALLBACK`,`Vector stream did not produce geometry; using section thumbnail as fallback.`,t.path)]})}}n.length===0&&await ur(e,n,t);let o=e.entries.filter(e=>/\.hsf$/i.test(e.name));if(o.length>0&&(t.push(b(`warning`,`DWF_3D_HSF_DETECTED`,`Detected ${o.length} HSF/3D resource(s). This frontend build reports them but does not render 3D HSF.`,o[0]?.name)),n.length===0&&n.push({id:`unsupported-3d`,name:`Unsupported 3D DWF`,kind:`unsupported`,width:1e3,height:1e3,sourcePath:o[0]?.name,reason:`3D HSF resource detected; not implemented in this pure frontend native renderer build.`,diagnostics:[b(`warning`,`DWF_3D_HSF_UNSUPPORTED`,`3D HSF rendering is not implemented in this build.`,o[0]?.name)]})),n.length===0){let t=xr(e);t&&n.push({id:`image-1`,name:br(t.name),kind:`image`,sourcePath:t.name,mediaType:fe(t.name)??`image/png`,width:1e3,height:1e3,diagnostics:[b(`info`,`DWF_IMAGE_FALLBACK`,`No supported vector page was found; using an embedded preview/image resource.`,t.name)]})}return n.length===0&&n.push({id:`unsupported-1`,name:`Unsupported DWF package`,kind:`unsupported`,width:1e3,height:1e3,reason:`No supported W2D, XPS FixedPage, or preview image resource was found.`,diagnostics:[b(`error`,`DWF_NO_SUPPORTED_PAGE`,`No supported renderable DWF resource was found.`)]}),we({kind:`dwf`,pages:[],resources:r,diagnostics:t,packageEntries:e.entries.map(e=>e.name)},n,e,void 0)}async function ur(e,t,n){let r=e.entries.filter(e=>/\.w2d$/i.test(e.name));for(let i of r)try{let n=await dr(e,i.name),r=n.bounds,a=r?Math.max(1,r.maxX-r.minX):1e3,o=r?Math.max(1,r.maxY-r.minY):1e3;n.primitives.length>0&&t.push({id:`page-${t.length+1}`,name:br(i.name),kind:`w2d-text`,sourcePath:i.name,width:a,height:o,primitives:n.primitives,bounds:r,diagnostics:n.diagnostics})}catch(e){n.push(b(`warning`,`DWF_W2D_READ_FAILED`,`Failed to read ${i.name}: ${String(e)}`,i.name))}}async function dr(e,t){let n=await e.read(t);return ue(n)?Nn(n,t):Yn(n,t)}function fr(e,t){let n=N(e,t);return Array.from(n.getElementsByTagName(`*`)).filter(e=>yr(e)===`Section`).map((e,t)=>{let n=B(e,`name`)??`section-${t+1}`;return{name:n,title:B(e,`title`)??n,resources:Array.from(e.getElementsByTagName(`*`)).filter(e=>yr(e).endsWith(`Resource`)||yr(e)===`Resource`).map(e=>({path:D(B(e,`href`)??``),role:B(e,`role`),mediaType:B(e,`mime`),title:B(e,`title`)})).filter(e=>e.path.length>0)}}).filter(e=>e.resources.length>0)}function pr(e,t){let n=N(e,`descriptor.xml`),r=Array.from(n.getElementsByTagName(`*`)).find(e=>yr(e)===`Paper`),i={};if(r){i.paperWidth=V(r,`width`),i.paperHeight=V(r,`height`);let e=B(r,`clip`);e&&(i.clip=F(e))}let a=Array.from(n.getElementsByTagName(`*`)).filter(e=>/GraphicResource$/i.test(yr(e))||yr(e)===`GraphicResource`),o=a.find(e=>D(B(e,`href`)??``)===D(t))??a.find(e=>/2d\s+streaming\s+graphics/i.test(B(e,`role`)??``)),s=o?F(B(o,`transform`)??``):[];return s.length>=14&&(i.w2dTransform={sx:s[0]||1,sy:s[5]||s[0]||1,tx:s[12]||0,ty:s[13]||0}),i}function mr(e,t,n){let r=N(e,t),i=[],a=(e,t)=>n?{x:(e-n.tx)/n.sx,y:(t-n.ty)/n.sy}:{x:e,y:t},o=e=>F(B(e,`Points`)??B(e,`points`)??``);for(let e of Array.from(r.getElementsByTagName(`*`))){let t=yr(e);if(t===`Polyline2D`||t===`Leader`){let t=o(e);if(t.length>=4){let n=[];for(let e=0;e+1<t.length;e+=2){let r=a(t[e],t[e+1]);n.push(r.x,r.y)}let r=hr(e);i.push({type:`polyline`,points:n,stroke:r.stroke,lineWidth:r.lineWidth})}}else if(t===`Tag`||t===`Target`){let t=V(e,`CenterX`),n=V(e,`CenterY`),r=V(e,`Width`),o=V(e,`Height`);if([t,n,r,o].every(e=>e!==void 0)){let s=a(t-r/2,n-o/2),c=a(t+r/2,n-o/2),l=a(t+r/2,n+o/2),u=a(t-r/2,n+o/2),d=hr(e);i.push({type:`polygon`,points:[s.x,s.y,c.x,c.y,l.x,l.y,u.x,u.y],stroke:d.stroke,fill:d.fill,lineWidth:d.lineWidth})}}else if(t===`Text`){let t=V(e,`X`),r=V(e,`Y`);if(t!==void 0&&r!==void 0){let o=Array.from(e.getElementsByTagName(`*`)).filter(e=>yr(e)===`TextPhrase`),s=o.map(e=>B(e,`String`)??``).filter(Boolean).join(`
4
+ `);if(s){let c=a(t,r),l=V(e,`Height`),u=o.length?V(o[0],`FontHeight`):void 0,d=n&&l?Math.max(10,Math.abs(l/n.sy)):u??12,f=o.length?B(o[0],`Color`):void 0;i.push({type:`text`,x:c.x,y:c.y,text:s,size:d,fill:f?gr(f):hr(e).stroke})}}}}let s=[];return i.length>0&&s.push(b(`info`,`DWF_MARKUP_XML_PARSED`,`Parsed ${i.length} markup primitive(s) from markup private XML.`,t)),{primitives:i,diagnostics:s}}function hr(e){let t=`#0000ff`,n,r=1,i=Array.from(e.getElementsByTagName(`*`)).filter(e=>yr(e)===`FormatProperty`);for(let e of i){let i=(B(e,`Name`)??``).toUpperCase(),a=(B(e,`Enabled`)??`true`).toLowerCase()!==`false`,o=B(e,`ModifierUIntVal`)??B(e,`UIntValue`)??B(e,`DblValue`)??B(e,`IntValue`);!a||o===void 0||(i===`LINECOLOR`&&(t=gr(o)),i===`FILLCOLOR`&&(n=gr(o)),i===`LINEWEIGHT`&&(r=Math.max(1,Number(o)||r)),i===`NOFILL`&&/true/i.test(B(e,`BoolValue`)??``)&&(n=void 0))}return{stroke:t,fill:n,lineWidth:r}}function gr(e){let t=Number(e);if(!Number.isFinite(t))return`#000000`;let n=t>>>0;return`rgb(${n>>>16&255}, ${n>>>8&255}, ${n&255})`}function _r(e){let t=1/0,n=1/0,r=-1/0,i=-1/0,a=(e,a)=>{t=Math.min(t,e),n=Math.min(n,a),r=Math.max(r,e),i=Math.max(i,a)};for(let t of e)if(`points`in t)for(let e=0;e+1<t.points.length;e+=2)a(t.points[e],t.points[e+1]);else if(t.type===`rect`)a(t.x,t.y),a(t.x+t.width,t.y+t.height);else if(t.type===`text`){let e=t.size??12;a(t.x,t.y),a(t.x,t.y+e)}else if(t.type===`path`)for(let e of t.commands)`x`in e&&`y`in e&&a(e.x,e.y),`x1`in e&&`y1`in e&&a(e.x1,e.y1),`x2`in e&&`y2`in e&&a(e.x2,e.y2);return Number.isFinite(t)?{minX:t,minY:n,maxX:r,maxY:i}:void 0}function vr(e,t){return e.resources.find(e=>t.test(e.role??``))}function B(e,t){return e.getAttribute(t)??e.getAttribute(`dwf:${t}`)??e.getAttribute(`ePlot:${t}`)??Array.from(e.attributes).find(e=>e.localName===t)?.value??void 0}function yr(e){let t=e.localName||e.nodeName,n=t.indexOf(`:`);return n>=0?t.slice(n+1):t}function V(e,t){let n=B(e,t);if(n===void 0)return;let r=Number(n);return Number.isFinite(r)?r:void 0}function br(e){let t=e.lastIndexOf(`/`);return t>=0?e.slice(t+1):e}function xr(e){let t=e.entries.filter(e=>/\.(png|jpe?g|gif|bmp)$/i.test(e.name));if(t.length!==0)return t.sort((e,t)=>Sr(t.name,t.uncompressedSize)-Sr(e.name,e.uncompressedSize))[0]}function Sr(e,t){let n=Math.min(t,1e7)/1e3;return/thumbnail|preview/i.test(e)&&(n+=5e3),de(e)===`png`&&(n+=100),n}async function Cr(e,t={}){let n=await wr(e),r=t.fileName??(e instanceof File?e.name:void 0)??`document.dwf`;if(ve(n)){let e=_e.open(n,t.inflater);return sn(e)?await on(e):cr(e)?await lr(e):e.entries.some(e=>/\.fpage$/i.test(e.name))?await on(e):await lr(e)}if(ue(n)){let e=Nn(n,r),t=[{id:`page-1`,name:r,kind:`w2d-text`,width:e.bounds?Math.max(1,e.bounds.maxX-e.bounds.minX):1e3,height:e.bounds?Math.max(1,e.bounds.maxY-e.bounds.minY):1e3,sourcePath:r,primitives:e.primitives,bounds:e.bounds,diagnostics:e.diagnostics}];return we({kind:`unknown`,pages:[],resources:[{path:r,mediaType:`text/plain`,size:n.byteLength}],diagnostics:[b(`warning`,`RAW_TEXT_W2D_MODE`,`Input is not a DWF ZIP package; opened it as a textual W2D-like vector stream.`,r)],packageEntries:[r]},t)}let i={id:`unsupported-raw`,name:r,kind:`unsupported`,width:1e3,height:1e3,sourcePath:r,reason:`Input is neither a ZIP-based DWF/DWFx package nor a supported textual W2D stream.`,diagnostics:[b(`error`,`UNSUPPORTED_RAW_FORMAT`,`Unsupported raw DWF input. DWF 6+/DWFx ZIP packages are required for this build.`,r)]};return we({kind:`unknown`,pages:[],resources:[{path:r,size:n.byteLength}],diagnostics:i.diagnostics,packageEntries:[r]},[i])}async function wr(e){return e instanceof Uint8Array?e:e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(await e.arrayBuffer())}var Tr={a:1,b:0,c:0,d:1,e:0,f:0};function H(e,t){return{a:e.a*t.a+e.c*t.b,b:e.b*t.a+e.d*t.b,c:e.a*t.c+e.c*t.d,d:e.b*t.c+e.d*t.d,e:e.a*t.e+e.c*t.f+e.e,f:e.b*t.e+e.d*t.f+e.f}}function Er(e,t,n){return[e.a*t+e.c*n+e.e,e.b*t+e.d*n+e.f]}function Dr(e){if(!e)return{...Tr};let t=F(e);return t.length>=6?{a:t[0],b:t[1],c:t[2],d:t[3],e:t[4],f:t[5]}:{...Tr}}function U(e,t=1){if(!e||e===`Transparent`||e===`{x:Null}`)return;let n=e.trim();if(n.startsWith(`{`)||n.includes(`Brush`))return;let r=Mr(n);if(r&&(n=r),n.startsWith(`sc#`)){let e=F(n);if(e.length>=3){let n=+(e.length>=4),r=e.length>=4?e[0]:1;return Ar(Math.round((e[n]??0)*255),Math.round((e[n+1]??0)*255),Math.round((e[n+2]??0)*255),r*t)}}if(n.startsWith(`#`)){let e=n.slice(1);if(e.length===3)return Ar(parseInt(e[0]+e[0],16),parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),t);if(e.length===6)return Ar(parseInt(e.slice(0,2),16),parseInt(e.slice(2,4),16),parseInt(e.slice(4,6),16),t);if(e.length===8){let n=parseInt(e.slice(0,2),16)/255;return Ar(parseInt(e.slice(2,4),16),parseInt(e.slice(4,6),16),parseInt(e.slice(6,8),16),n*t)}}return/^rgba?\(/i.test(n),n}function Or(e,t=4278190080){if(!e)return t;let n=e.trim(),r=n.match(/^rgba?\(([^)]+)\)/i);if(r){let e=r[1].split(`,`).map(e=>e.trim()),t=Number(e[0]??0),n=Number(e[1]??0),i=Number(e[2]??0),a=e[3]===void 0?1:Number(e[3]);return kr(t,n,i,Math.round(a*255))}if(n.startsWith(`#`)){let e=n.slice(1);if(e.length===6)return kr(parseInt(e.slice(0,2),16),parseInt(e.slice(2,4),16),parseInt(e.slice(4,6),16),255);if(e.length===8)return kr(parseInt(e.slice(2,4),16),parseInt(e.slice(4,6),16),parseInt(e.slice(6,8),16),parseInt(e.slice(0,2),16))}let i=Mr(n);return i?Or(i,t):t}function kr(e,t,n,r){return e=jr(e),t=jr(t),n=jr(n),r=jr(r),e&255|(t&255)<<8|(n&255)<<16|(r&255)<<24}function Ar(e,t,n,r){return`rgba(${jr(e)}, ${jr(t)}, ${jr(n)}, ${Math.max(0,Math.min(1,r))})`}function jr(e){return Math.max(0,Math.min(255,Math.round(e)))}function Mr(e){switch(e.toLowerCase()){case`black`:return`#000000`;case`white`:return`#ffffff`;case`red`:return`#ff0000`;case`green`:return`#008000`;case`blue`:return`#0000ff`;case`yellow`:return`#ffff00`;case`cyan`:return`#00ffff`;case`magenta`:return`#ff00ff`;case`gray`:case`grey`:return`#808080`;case`transparent`:return`#00000000`;default:return}}function Nr(e){let t=e.margin??24,n=Math.max(1,e.canvasWidth-t*2),r=Math.max(1,e.canvasHeight-t*2),i=Math.min(n/Math.max(1,e.pageWidth),r/Math.max(1,e.pageHeight))*(e.zoom??1);return{a:i,b:0,c:0,d:i,e:(e.canvasWidth-e.pageWidth*i)/2+(e.panX??0)-(e.sourceMinX??0)*i,f:(e.canvasHeight-e.pageHeight*i)/2+(e.panY??0)-(e.sourceMinY??0)*i}}function Pr(e,t,n,r=1,i=0,a=0){let o=e.bounds,s=o?.minX??0;o?.minY;let c=o?.maxY??e.height,l=o?Math.max(1,o.maxX-o.minX):e.width,u=o?Math.max(1,o.maxY-o.minY):e.height,d=Math.max(1,t-48),f=Math.max(1,n-48),p=Math.min(d/Math.max(1,l),f/Math.max(1,u))*r,m=(t-l*p)/2+i,h=(n-u*p)/2+a;return{a:p,b:0,c:0,d:-p,e:m-s*p,f:h+c*p}}function Fr(e){let t=Math.hypot(e.a,e.b),n=Math.hypot(e.c,e.d);return Math.max(1e-12,(t+n)*.5)}function Ir(e){let t=e.getBoundingClientRect?.(),n=t&&t.width>0?t.width:Number(e.style.width?.replace(`px`,``))||e.width;return Math.max(1,e.width/Math.max(1,n))}function Lr(e,t,n={},r){let i=Fr(t),a=Math.max(0,Math.abs(e||0)*i),o=n.lineWeightMode??`adaptive`;if(o===`physical`)return Math.max(1e-6,Math.abs(e||1));let s=Math.max(1,r.dpr||1),c=Math.max(.25,(n.minStrokeCssPx??.55)*s);if(o===`hairline`)return c/i;let l=Math.max(.05,r.zoom??1),u=n.maxOverviewStrokeCssPx??1.15,d=l<=1?u:Math.min(24,u*(1+Math.log2(l)*1.6)),f=Math.max(c,d*s);return Math.max(c,Math.min(a,f))/i}function Rr(e,t,n={},r){if((n.lineWeightMode??`adaptive`)===`physical`)return!0;let i=Math.max(1,r.dpr||1),a=n.minTextCssPx??3.5;return Math.abs(e*Fr(t))>=a*i}function zr(e,t,n={},r){if(!e||(n.lineWeightMode??`adaptive`)===`physical`)return!0;let i=Math.max(1,r.dpr||1),a=Math.max(0,n.minFilledAreaCssPx??.12)*i*i;if(a<=0)return!0;let o=Br(t,e.minX,e.minY),s=Br(t,e.maxX,e.minY),c=Br(t,e.maxX,e.maxY),l=Br(t,e.minX,e.maxY),u=[o[0],s[0],c[0],l[0]],d=[o[1],s[1],c[1],l[1]];return(Math.max(...u)-Math.min(...u))*(Math.max(...d)-Math.min(...d))>=a}function Br(e,t,n){return[e.a*t+e.c*n+e.e,e.b*t+e.d*n+e.f]}var Vr=class{constructor(e={}){this.fbPtr=0,this.fbBytes=0,this.width=0,this.height=0,this.wasmUrl=e.wasmUrl??`./public/dwfv-render.wasm`}async init(){if(this.exports)return;let e=await fetch(this.wasmUrl);if(!e.ok)throw Error(`Failed to load WASM raster backend: ${e.status} ${e.statusText}`);let t=await e.arrayBuffer(),n=await WebAssembly.instantiate(t,{});this.exports=n.instance.exports}begin(e,t,n=`#ffffff`){let r=this.requireExports();this.width=Math.max(1,Math.floor(e)),this.height=Math.max(1,Math.floor(t)),this.fbBytes=this.width*this.height*4,r.dwfv_reset_heap(),this.fbPtr=r.dwfv_alloc(this.fbBytes),this.ensureMemory(this.fbPtr+this.fbBytes),r.dwfv_clear(this.fbPtr,this.width,this.height,Or(n,4294967295))}drawPolyline(e,t,n,r=1){let i=this.requireExports();if(e.length<4||!n)return;let a=Math.floor(e.length/2),o=this.allocF32(a*2),s=new Float32Array(i.memory.buffer,o,a*2);for(let n=0;n<a;n++){let[r,i]=Er(t,e[n*2],e[n*2+1]);s[n*2]=r,s[n*2+1]=i}i.dwfv_draw_polyline(this.fbPtr,this.width,this.height,o,a,Or(n,4278190080),Math.max(1,r))}drawPolygon(e,t,n){let r=this.requireExports();if(e.length<6||!n)return;let i=Math.floor(e.length/2),a=this.allocF32(i*2),o=new Float32Array(r.memory.buffer,a,i*2);for(let n=0;n<i;n++){let[r,i]=Er(t,e[n*2],e[n*2+1]);o[n*2]=r,o[n*2+1]=i}r.dwfv_draw_polygon(this.fbPtr,this.width,this.height,a,i,Or(n,4278190080))}toImageData(){let e=this.requireExports(),t=new Uint8ClampedArray(e.memory.buffer,this.fbPtr,this.fbBytes);return new ImageData(new Uint8ClampedArray(t),this.width,this.height)}allocF32(e){let t=this.requireExports(),n=e*4,r=t.dwfv_alloc(n);return this.ensureMemory(r+n),r}ensureMemory(e){let t=this.requireExports(),n=t.memory.buffer.byteLength;e>n&&t.memory.grow(Math.ceil((e-n)/65536))}requireExports(){if(!this.exports)throw Error(`WASM backend is not initialized. Call init() first.`);return this.exports}},Hr=12,Ur=128*1024*1024,Wr=4,Gr={a:1,b:0,c:0,d:1,e:0,f:0},Kr=class{constructor(e){this.scenes=new Map,this.gpuBytes=0,this.tick=0,this.canvas=e??document.createElement(`canvas`);let t=this.canvas.getContext(`webgl`,{alpha:!1,antialias:!0,depth:!1,stencil:!1,preserveDrawingBuffer:!0,powerPreference:`high-performance`});if(!t)throw Error(`WebGLRenderingContext is not available.`);this.gl=t,this.program=gi(t,vi,yi),this.aPos=t.getAttribLocation(this.program,`a_pos`),this.aColor=t.getAttribLocation(this.program,`a_color`);let n=t.getUniformLocation(this.program,`u_matrix`),r=t.getUniformLocation(this.program,`u_viewport`);if(this.aPos<0||this.aColor<0||!n||!r)throw Error(`Failed to resolve WebGL shader locations.`);this.uMatrix=n,this.uViewport=r}render(e,t,n,r={}){let i=[];if(n.width<=0||n.height<=0)return{commands:0,warnings:i,gpuBytes:this.gpuBytes,vertexCount:0,pathCount:0,cacheHit:!0};this.resize(n.width,n.height);let a=Nr({canvasWidth:this.canvas.width,canvasHeight:this.canvas.height,pageWidth:e.width,pageHeight:e.height,zoom:r.zoom,panX:r.panX,panY:r.panY}),o={dpr:Ir(n),zoom:r.zoom??1},s=ii(e,a,r),c=this.scenes.get(s),l=!!c;if(!c){let n=qr(t);c=this.compileScene(e,s,n,a,r,o),this.scenes.set(s,c),this.gpuBytes+=c.gpuBytes,this.evictIfNeeded(r),c=this.scenes.get(s)??c}c.lastUsed=++this.tick;let u=this.gl,d=mi(r.background??`#ffffff`);if(u.viewport(0,0,this.canvas.width,this.canvas.height),u.disable(u.DEPTH_TEST),u.disable(u.CULL_FACE),u.enable(u.BLEND),u.blendFunc(u.SRC_ALPHA,u.ONE_MINUS_SRC_ALPHA),u.clearColor(d[0],d[1],d[2],d[3]),u.clear(u.COLOR_BUFFER_BIT),u.useProgram(this.program),u.bindBuffer(u.ARRAY_BUFFER,c.buffer),u.enableVertexAttribArray(this.aPos),u.vertexAttribPointer(this.aPos,2,u.FLOAT,!1,Hr,0),u.enableVertexAttribArray(this.aColor),u.vertexAttribPointer(this.aColor,4,u.UNSIGNED_BYTE,!0,Hr,8),u.uniform4f(this.uMatrix,a.a,a.b,a.c,a.d),u.uniform4f(this.uViewport,a.e,a.f,this.canvas.width,this.canvas.height),u.drawArrays(u.TRIANGLES,0,c.vertexCount),r.compositeToTarget??!0){let e=n.getContext(`2d`);if(!e)throw Error(`CanvasRenderingContext2D is not available for WebGL compositing.`);e.save(),e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,n.width,n.height),e.drawImage(this.canvas,0,0),e.restore()}return c.vertexCount===0&&i.push(b(`warning`,`WEBGL_XPS_EMPTY_SCENE`,`WebGL XPS scene contained no drawable vector geometry; Canvas/WASM fallback may be required.`,e.sourcePath)),{commands:c.pathCount,warnings:i,gpuBytes:this.gpuBytes,vertexCount:c.vertexCount,pathCount:c.pathCount,cacheHit:l}}dispose(){for(let e of this.scenes.values())this.gl.deleteBuffer(e.buffer);this.scenes.clear(),this.gpuBytes=0}resize(e,t){(this.canvas.width!==e||this.canvas.height!==t)&&(this.canvas.width=e,this.canvas.height=t)}compileScene(e,t,n,r,i,a){let o=new Xr,s=0;for(let e of n)s++,Yr(o,e,r,i,a);let c=o.byteLength,l=i.maxGpuCacheBytes??Ur;if(c>l)throw Error(`WebGL XPS scene buffer would require ${hi(c)}, exceeding maxGpuCacheBytes=${hi(l)}.`);let u=this.gl,d=u.createBuffer();if(!d)throw Error(`Failed to allocate WebGLBuffer.`);u.bindBuffer(u.ARRAY_BUFFER,d),u.bufferData(u.ARRAY_BUFFER,o.toArrayBuffer(),u.STATIC_DRAW);let f=u.getError();if(f!==u.NO_ERROR)throw u.deleteBuffer(d),Error(`WebGL XPS buffer upload failed: 0x${f.toString(16)} for ${e.sourcePath}.`);return{key:t,buffer:d,vertexCount:o.vertexCount,gpuBytes:c,pathCount:s,lastUsed:++this.tick}}evictIfNeeded(e){let t=e.maxGpuCacheBytes??Ur,n=e.maxCachedScenes??Wr;for(;this.scenes.size>Math.max(1,n)||this.gpuBytes>t;){let e;for(let t of this.scenes.values())(!e||t.lastUsed<e.lastUsed)&&(e=t);if(!e)break;this.scenes.delete(e.key),this.gl.deleteBuffer(e.buffer),this.gpuBytes-=e.gpuBytes}}};function qr(e){let t=[];return Jr(e,Gr,1,t),t}function Jr(e,t,n,r){let i=A(e),a=H(t,ai(e)),o=n*li(j(e,`Opacity`));if(i===`Path`){let t=oi(e);if(t.length>0){let n=si(e,`Fill`,o),i=si(e,`Stroke`,o),s=Number(j(e,`StrokeThickness`)??1);(n||i&&s>0)&&r.push({commands:t,matrix:a,opacity:o,fill:n,stroke:i,thickness:Number.isFinite(s)?s:1,lineStyle:di(e),fillRule:ui(e),bounds:fi(t)})}}for(let t of M(e))A(t).includes(`.`)||Jr(t,a,o,r)}function Yr(e,t,n,r,i){let a=H(n,t.matrix),o=Fr(t.matrix),s=Math.max(1e-6,t.thickness||1),c=Math.max(.01,Lr(s,a,r,i)*o),l=Dn(t.commands,.5),u=t.fill?pi(t.fill):void 0,d=t.stroke?pi(t.stroke):void 0;if(u&&zr(t.bounds,a,r,i))for(let n of l)(n.closed||n.points.length>=6)&&Zr(e,ti(n.points,t.matrix),u);if(d&&t.thickness>0)for(let n of l){let r=ti(n.points,t.matrix),i=n.closed?ni(r):r;t.lineStyle.dash.length>0?$r(e,i,c,t.lineStyle,d):Qr(e,i,c,d)}}var Xr=class{constructor(){this.buffer=new ArrayBuffer(64*1024),this.view=new DataView(this.buffer),this.vertexCount=0}get byteLength(){return this.vertexCount*Hr}push(e,t,n){if(!Number.isFinite(e)||!Number.isFinite(t))return;let r=this.byteLength;this.ensure(Hr),this.view.setFloat32(r,e,!0),this.view.setFloat32(r+4,t,!0),this.view.setUint8(r+8,n.r),this.view.setUint8(r+9,n.g),this.view.setUint8(r+10,n.b),this.view.setUint8(r+11,n.a),this.vertexCount++}toArrayBuffer(){return this.buffer.slice(0,this.byteLength)}ensure(e){let t=this.byteLength+e;if(t<=this.buffer.byteLength)return;let n=this.buffer.byteLength;for(;n<t;)n*=2;let r=new ArrayBuffer(n);new Uint8Array(r).set(new Uint8Array(this.buffer,0,this.byteLength)),this.buffer=r,this.view=new DataView(this.buffer)}};function Zr(e,t,n){if(t.length<3)return;let r=t[0];for(let i=1;i+1<t.length;i++){let a=t[i],o=t[i+1];ri(r,a,o)<1e-6||(e.push(r.x,r.y,n),e.push(a.x,a.y,n),e.push(o.x,o.y,n))}}function Qr(e,t,n,r){if(t.length<2)return;let i=Math.max(.05,n*.5);for(let n=0;n+1<t.length;n++)ei(e,t[n],t[n+1],i,r)}function $r(e,t,n,r,i){if(t.length<2||r.dash.length===0)return;let a=r.dash.map(e=>Math.max(.01,e*n)),o=a.reduce((e,t)=>e+t,0);if(o<=.01){Qr(e,t,n,i);return}let s=0,c=a[0],l=!0,u=(r.dashOffset*n%o+o)%o;for(;u>c;)u-=c,s=(s+1)%a.length,c=a[s],l=!l;c-=u;for(let r=0;r+1<t.length;r++){let o=t[r],u=t[r+1],d=u.x-o.x,f=u.y-o.y,p=Math.hypot(d,f);if(p<=1e-9)continue;let m=0;for(;m<p-1e-9;){let t=Math.min(c,p-m);if(l&&t>1e-9){let r=m/p,a=(m+t)/p;ei(e,{x:o.x+d*r,y:o.y+f*r},{x:o.x+d*a,y:o.y+f*a},Math.max(.05,n*.5),i)}m+=t,c-=t,c<=1e-9&&(s=(s+1)%a.length,c=a[s],l=!l)}}}function ei(e,t,n,r,i){let a=n.x-t.x,o=n.y-t.y,s=Math.hypot(a,o);if(s<=1e-9)return;let c=-o/s*r,l=a/s*r,u=t.x+c,d=t.y+l,f=t.x-c,p=t.y-l,m=n.x-c,h=n.y-l,g=n.x+c,_=n.y+l;e.push(u,d,i),e.push(f,p,i),e.push(m,h,i),e.push(u,d,i),e.push(m,h,i),e.push(g,_,i)}function ti(e,t){let n=[];for(let r=0;r+1<e.length;r+=2){let[i,a]=Er(t,e[r]??0,e[r+1]??0);n.push({x:i,y:a})}return n}function ni(e){if(e.length<2)return e;let t=e[0],n=e[e.length-1];return t.x===n.x&&t.y===n.y?e:[...e,{x:t.x,y:t.y}]}function ri(e,t,n){return Math.abs((t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x))}function ii(e,t,n){let r=n.lineWeightMode??`adaptive`,i=r===`physical`?`physical`:String(Math.round(Math.log2(Math.max(1e-12,Fr(t)))*8));return`${e.id}|${e.sourcePath}|${e.width}x${e.height}|lw:${r}:${i}`}function ai(e){let t=Dr(j(e,`RenderTransform`)??j(e,`Transform`));for(let n of M(e)){let e=A(n);if(e.endsWith(`.RenderTransform`)||e.endsWith(`.Transform`)){let e=M(n).find(e=>A(e)===`MatrixTransform`);e&&(t=H(t,Dr(j(e,`Matrix`))))}}let n=Number(j(e,`Canvas.Left`)??0),r=Number(j(e,`Canvas.Top`)??0);return(n||r)&&(t=H({a:1,b:0,c:0,d:1,e:n,f:r},t)),t}function oi(e){let t=j(e,`Data`);if(t)return Tn(t);for(let t of M(e))if(A(t)===`Path.Data`)for(let e of M(t)){let t=j(e,`Figures`);if(t)return Tn(t)}return[]}function si(e,t,n){let r=j(e,t);if(r)return U(r,n);let i=ci(e,t,`SolidColorBrush`);if(i)return U(j(i,`Color`),n*li(j(i,`Opacity`)))}function ci(e,t,n){let r=`${A(e)}.${t}`;for(let t of M(e))if(A(t)===r)return M(t).find(e=>A(e)===n)}function li(e){if(!e)return 1;let t=Number(e);return Number.isFinite(t)?Math.max(0,Math.min(1,t)):1}function ui(e){let t=j(e,`Data`)??``;return/F0/.test(t)?`nonzero`:`evenodd`}function di(e){let t=(j(e,`StrokeStartLineCap`)??``).toLowerCase(),n=(j(e,`StrokeEndLineCap`)??``).toLowerCase(),r=(j(e,`StrokeDashCap`)??``).toLowerCase(),i=t===`round`||n===`round`||r===`round`?`round`:t===`square`||n===`square`||r===`square`?`square`:`butt`,a=(j(e,`StrokeLineJoin`)??``).toLowerCase(),o=a===`round`?`round`:a===`bevel`?`bevel`:`miter`,s=Number(j(e,`StrokeMiterLimit`)??10);return{cap:i,join:o,miterLimit:Number.isFinite(s)&&s>0?s:10,dash:F(j(e,`StrokeDashArray`)??``).filter(e=>Number.isFinite(e)&&e>0),dashOffset:Number(j(e,`StrokeDashOffset`)??0)||0}}function fi(e){let t=1/0,n=1/0,r=-1/0,i=-1/0,a=(e,a)=>{!Number.isFinite(e)||!Number.isFinite(a)||(t=Math.min(t,e),n=Math.min(n,a),r=Math.max(r,e),i=Math.max(i,a))};for(let t of e)t.type===`M`||t.type===`L`?a(t.x,t.y):t.type===`C`?(a(t.x1,t.y1),a(t.x2,t.y2),a(t.x,t.y)):t.type===`Q`?(a(t.x1,t.y1),a(t.x,t.y)):t.type===`A`&&(a(t.x-t.rx,t.y-t.ry),a(t.x+t.rx,t.y+t.ry));return Number.isFinite(t)?{minX:t,minY:n,maxX:r,maxY:i}:void 0}function pi(e){let t=Or(e,4278190080);return{r:t&255,g:t>>>8&255,b:t>>>16&255,a:t>>>24&255}}function mi(e){let t=pi(e);return[t.r/255,t.g/255,t.b/255,t.a/255]}function hi(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KiB`:`${(e/1024/1024).toFixed(1)} MiB`}function gi(e,t,n){let r=_i(e,e.VERTEX_SHADER,t),i=_i(e,e.FRAGMENT_SHADER,n),a=e.createProgram();if(!a)throw Error(`Failed to create WebGLProgram.`);if(e.attachShader(a,r),e.attachShader(a,i),e.linkProgram(a),e.deleteShader(r),e.deleteShader(i),!e.getProgramParameter(a,e.LINK_STATUS)){let t=e.getProgramInfoLog(a)??`unknown link error`;throw e.deleteProgram(a),Error(`WebGL program link failed: ${t}`)}return a}function _i(e,t,n){let r=e.createShader(t);if(!r)throw Error(`Failed to create WebGLShader.`);if(e.shaderSource(r,n),e.compileShader(r),!e.getShaderParameter(r,e.COMPILE_STATUS)){let t=e.getShaderInfoLog(r)??`unknown shader compile error`;throw e.deleteShader(r),Error(`WebGL shader compile failed: ${t}`)}return r}var vi=`
5
+ attribute vec2 a_pos;
6
+ attribute vec4 a_color;
7
+ uniform vec4 u_matrix;
8
+ uniform vec4 u_viewport;
9
+ varying vec4 v_color;
10
+ void main() {
11
+ float x = u_matrix.x * a_pos.x + u_matrix.z * a_pos.y + u_viewport.x;
12
+ float y = u_matrix.y * a_pos.x + u_matrix.w * a_pos.y + u_viewport.y;
13
+ vec2 clip = vec2((x / u_viewport.z) * 2.0 - 1.0, 1.0 - (y / u_viewport.w) * 2.0);
14
+ gl_Position = vec4(clip, 0.0, 1.0);
15
+ v_color = a_color;
16
+ }
17
+ `,yi=`
18
+ precision mediump float;
19
+ varying vec4 v_color;
20
+ void main() {
21
+ gl_FragColor = v_color;
22
+ }
23
+ `,bi=class{constructor(e){this.document=e,this.fontCache=new Map,this.xmlCache=new Map}async render(e,t,n={}){if(!this.document.opc)throw Error(`XPS page requires an OPC package view.`);let r=x(e.diagnostics),i=(await this.getXmlDocument(e.sourcePath)).documentElement,a=t.getContext(`2d`);if(!a)throw Error(`CanvasRenderingContext2D is not available.`);let o=n.background??`#ffffff`,s={dpr:Ir(t),zoom:n.zoom??1},c=Nr({canvasWidth:t.width,canvasHeight:t.height,pageWidth:e.width,pageHeight:e.height,zoom:n.zoom,panX:n.panX,panY:n.panY}),l=0;if(n.preferWebgl??!0)try{let o=this.getWebGlBackend(n.webglCanvas);n.webglCanvas&&(n.webglCanvas.style.visibility=`visible`);let u=o.render(e,i,t,{...n,compositeToTarget:!n.webglCanvas});return a.save(),a.setTransform(1,0,0,1,0,0),a.clearRect(0,0,t.width,t.height),a.restore(),l+=u.commands,l+=await this.renderElementToCanvas(i,a,e.sourcePath,c,1,r,{vectors:!1,overlays:!0},n,s),r.push(...u.warnings),{backend:`webgl-xps`,commands:l,warnings:r}}catch(t){n.webglCanvas&&(n.webglCanvas.style.visibility=`hidden`),r.push(b(`warning`,`WEBGL_XPS_BACKEND_FALLBACK`,`WebGL XPS vector path failed, falling back to ${n.preferWasm?`WASM raster`:`Canvas2D`}: ${String(t)}`,e.sourcePath))}if(n.webglCanvas&&(n.webglCanvas.style.visibility=`hidden`),n.preferWasm)try{return this.wasm??=new Vr({wasmUrl:n.wasmUrl}),await this.wasm.init(),this.wasm.begin(t.width,t.height,o),l+=this.renderElementToWasm(i,c,1,r,n,s),a.setTransform(1,0,0,1,0,0),a.putImageData(this.wasm.toImageData(),0,0),l+=await this.renderElementToCanvas(i,a,e.sourcePath,c,1,r,{vectors:!1,overlays:!0},n,s),{backend:`wasm-raster`,commands:l,warnings:r}}catch(e){r.push(b(`warning`,`WASM_BACKEND_FALLBACK`,`WASM raster path failed, falling back to Canvas2D: ${String(e)}`))}return a.save(),a.setTransform(1,0,0,1,0,0),a.fillStyle=o,a.fillRect(0,0,t.width,t.height),a.restore(),l+=await this.renderElementToCanvas(i,a,e.sourcePath,c,1,r,{vectors:!0,overlays:!0},n,s),{backend:`canvas2d`,commands:l,warnings:r}}getWebGlBackend(e){return(!this.webgl||this.webglCanvas!==e)&&(this.webgl?.dispose(),this.webgl=new Kr(e),this.webglCanvas=e),this.webgl}getXmlDocument(e){let t=this.xmlCache.get(e);return t||(t=this.document.opc.readText(e).then(t=>N(t,e)),this.xmlCache.set(e,t)),t}dispose(){this.webgl?.dispose(),this.webgl=void 0,this.webglCanvas=void 0,this.xmlCache.clear(),this.fontCache.clear()}async renderElementToCanvas(e,t,n,r,i,a,o,s,c){let l=A(e),u=H(r,Oi(e)),d=i*Ni(j(e,`Opacity`)),f=0;if(l===`Path`&&o.vectors){let n=ki(e);if(n.length>0){t.save(),t.setTransform(u.a,u.b,u.c,u.d,u.e,u.f),t.globalAlpha=d;let r=j(e,`Clip`);r&&(t.beginPath(),En(t,Tn(r)),t.clip()),t.beginPath(),En(t,n);let i=ji(e,`Fill`,d),a=ji(e,`Stroke`,d),o=Number(j(e,`StrokeThickness`)??1),l=Si(n);i&&zr(l,u,s,c)&&(t.fillStyle=i,t.fill(Pi(e))),a&&o>0&&(t.strokeStyle=a,t.lineWidth=Lr(o,u,s,c),xi(t,e,t.lineWidth),t.stroke()),t.restore(),f++}}else if(l===`Glyphs`&&o.overlays)f+=await this.drawGlyphs(t,n,e,u,d,a,s,c);else if(l===`Image`&&o.overlays){let r=j(e,`Source`)??j(e,`ImageSource`);if(r)try{await this.drawImageResource(t,n,r,u,d,e),f++}catch(e){a.push(b(`warning`,`XPS_IMAGE_DRAW_FAILED`,`Failed to draw image ${r}: ${String(e)}`,n))}}else l===`Canvas`||l===`FixedPage`||l.endsWith(`.RenderTransform`)||l.endsWith(`.Resources`);if(l===`Path`&&o.overlays){let r=Mi(e,`Fill`,`ImageBrush`),i=r?j(r,`ImageSource`):void 0;if(r&&i)try{await this.drawImageBrush(t,n,i,u,d,e,r),f++}catch(e){a.push(b(`warning`,`XPS_IMAGEBRUSH_FAILED`,`Failed to draw ImageBrush ${i}: ${String(e)}`,n))}}for(let r of M(e))A(r).includes(`.`)||(f+=await this.renderElementToCanvas(r,t,n,u,d,a,o,s,c));return f}renderElementToWasm(e,t,n,r,i,a){if(!this.wasm)return 0;let o=A(e),s=H(t,Oi(e)),c=n*Ni(j(e,`Opacity`)),l=0;if(o===`Path`){let t=ki(e);if(t.length>0){let n=ji(e,`Fill`,c),r=ji(e,`Stroke`,c),o=Number(j(e,`StrokeThickness`)??1),u=Lr(o,s,i,a)*Math.max(1e-12,Math.hypot(s.a,s.b)),d=Dn(t,.5);if(n)for(let e of d)(e.closed||e.points.length>=6)&&this.wasm.drawPolygon(e.points,s,n);if(r&&o>0)for(let e of d)this.wasm.drawPolyline(e.points,s,r,u);l++}}for(let t of M(e))A(t).includes(`.`)||(l+=this.renderElementToWasm(t,s,c,r,i,a));return l}async drawGlyphs(e,t,n,r,i,a,o,s){let c=j(n,`UnicodeString`)??``;if(!c)return 0;let l=Number(j(n,`OriginX`)??0),u=Number(j(n,`OriginY`)??0),d=Number(j(n,`FontRenderingEmSize`)??12);if(!Rr(d,r,o,s))return 0;let f=ji(n,`Fill`,i)??`#000000`,p=await this.fontFamilyForGlyphs(t,n,a)??`sans-serif`;e.save(),e.setTransform(r.a,r.b,r.c,r.d,r.e,r.f),e.globalAlpha=i,e.fillStyle=f,e.font=`${d}px "${p}"`,e.textBaseline=`alphabetic`;let m=j(n,`Indices`);return m?Ci(e,c,m,l,u,d):e.fillText(c,l,u),e.restore(),1}async fontFamilyForGlyphs(e,t,n){let r=j(t,`FontUri`);if(!r)return;let i=k(e,r.replace(/^\//,``)),a=this.fontCache.get(i);return a||(a=this.loadFontFace(i).catch(t=>{n.push(b(`warning`,`XPS_FONT_LOAD_FAILED`,`Failed to load embedded XPS font ${i}: ${String(t)}`,e))}),this.fontCache.set(i,a)),a}async loadFontFace(e){let t=globalThis.FontFace,n=document.fonts;if(!t||!n)return;let r=await this.document.opc.readBytes(e),i=fe(e)??`font/ttf`;/\.odttf$/i.test(e)&&(r=wi(e,r),i=`font/ttf`);let a=`dwfv_xps_${Di(e)}`,o=new Blob([r],{type:i}),s=URL.createObjectURL(o),c=new t(a,`url("${s}")`);try{return await c.load(),n.add(c),URL.revokeObjectURL(s),a}catch(e){throw URL.revokeObjectURL(s),e}}async drawImageResource(e,t,n,r,i,a){let o=this.document.opc,s=k(t,n.replace(/^\//,``)),c=await pe(await o.readBytes(s),o.getContentType(s)??fe(s)??`image/png`),l=Number(j(a,`Width`)??(`width`in c?c.width:0)),u=Number(j(a,`Height`)??(`height`in c?c.height:0)),d=Number(j(a,`Canvas.Left`)??j(a,`X`)??0),f=Number(j(a,`Canvas.Top`)??j(a,`Y`)??0);e.save(),e.setTransform(r.a,r.b,r.c,r.d,r.e,r.f),e.globalAlpha=i,e.drawImage(c,d,f,l||c.width,u||c.height),e.restore()}async drawImageBrush(e,t,n,r,i,a,o){let s=this.document.opc,c=k(t,n.replace(/^\//,``)),l=await pe(await s.readBytes(c),s.getContentType(c)??fe(c)??`image/png`),u=Fi(j(o,`Viewport`))??Fi(j(o,`Viewbox`))??[0,0,Number(l.width??1),Number(l.height??1)],d=ki(a);e.save(),e.setTransform(r.a,r.b,r.c,r.d,r.e,r.f),e.globalAlpha=i,d.length>0&&(e.beginPath(),En(e,d),e.clip()),e.drawImage(l,u[0],u[1],u[2],u[3]),e.restore()}};function xi(e,t,n){let r=(j(t,`StrokeStartLineCap`)??``).toLowerCase(),i=(j(t,`StrokeEndLineCap`)??``).toLowerCase(),a=(j(t,`StrokeDashCap`)??``).toLowerCase();r===`round`||i===`round`||a===`round`?e.lineCap=`round`:r===`square`||i===`square`||a===`square`?e.lineCap=`square`:e.lineCap=`butt`;let o=(j(t,`StrokeLineJoin`)??``).toLowerCase();e.lineJoin=o===`round`?`round`:o===`bevel`?`bevel`:`miter`;let s=Number(j(t,`StrokeMiterLimit`)??10);Number.isFinite(s)&&s>0&&(e.miterLimit=s);let c=F(j(t,`StrokeDashArray`)??``);if(c.length>0){let r=Number(j(t,`StrokeDashOffset`)??0);e.setLineDash(c.map(e=>Math.max(0,e*n))),e.lineDashOffset=Number.isFinite(r)?r*n:0}else e.setLineDash([]),e.lineDashOffset=0}function Si(e){let t=1/0,n=1/0,r=-1/0,i=-1/0,a=(e,a)=>{!Number.isFinite(e)||!Number.isFinite(a)||(t=Math.min(t,e),n=Math.min(n,a),r=Math.max(r,e),i=Math.max(i,a))};for(let t of e)t.type===`M`||t.type===`L`?a(t.x,t.y):t.type===`C`?(a(t.x1,t.y1),a(t.x2,t.y2),a(t.x,t.y)):t.type===`Q`?(a(t.x1,t.y1),a(t.x,t.y)):t.type===`A`&&(a(t.x-t.rx,t.y-t.ry),a(t.x+t.rx,t.y+t.ry));return Number.isFinite(t)?{minX:t,minY:n,maxX:r,maxY:i}:void 0}function Ci(e,t,n,r,i,a){let o=n.split(`;`),s=r,c=0;for(let n of o){let r=n.trim();if(!r)continue;let o=r.split(`,`),l=Number(o[1]??``),u=Number(o[3]??0),d=Number(o[4]??0),f=t[c++]??``;f&&e.fillText(f,s+(Number.isFinite(u)?u:0),i+(Number.isFinite(d)?d:0)),Number.isFinite(l)&&l>0?s+=l*a/100:s+=e.measureText(f||` `).width}c<t.length&&e.fillText(t.slice(c),s,i)}function wi(e,t){let n=(e.split(`/`).pop()??``).replace(/\.odttf$/i,``).replace(/[^0-9a-fA-F]/g,``);if(n.length!==32||t.length<32)return t;let r=new Uint8Array(16);for(let e=0;e<16;e++)r[e]=parseInt(n.slice(e*2,e*2+2),16);let i=new Uint8Array(t);for(let e=0;e<Math.min(32,i.length);e++)i[e]=(i[e]??0)^r[15-e%16];if(!Ei(i)){let e=Ti(n),r=new Uint8Array(t);for(let t=0;t<Math.min(32,r.length);t++)r[t]=(r[t]??0)^e[15-t%16];if(Ei(r))return r}return i}function Ti(e){let t=new Uint8Array(16),n=new Uint8Array(16);for(let t=0;t<16;t++)n[t]=parseInt(e.slice(t*2,t*2+2),16);t[0]=n[3],t[1]=n[2],t[2]=n[1],t[3]=n[0],t[4]=n[5],t[5]=n[4],t[6]=n[7],t[7]=n[6];for(let e=8;e<16;e++)t[e]=n[e];return t}function Ei(e){if(e.length<4)return!1;let t=String.fromCharCode(e[0],e[1],e[2],e[3]);return t===`OTTO`||t===`true`||t===`typ1`||t===`ttcf`||e[0]===0&&e[1]===1&&e[2]===0&&e[3]===0}function Di(e){let t=2166136261;for(let n=0;n<e.length;n++)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return(t>>>0).toString(36)}function Oi(e){let t=Dr(j(e,`RenderTransform`)??j(e,`Transform`));for(let n of M(e)){let e=A(n);if(e.endsWith(`.RenderTransform`)||e.endsWith(`.Transform`)){let e=M(n).find(e=>A(e)===`MatrixTransform`);e&&(t=H(t,Dr(j(e,`Matrix`))))}}let n=Number(j(e,`Canvas.Left`)??0),r=Number(j(e,`Canvas.Top`)??0);return(n||r)&&(t=H({a:1,b:0,c:0,d:1,e:n,f:r},t)),t}function ki(e){let t=j(e,`Data`);if(t)return Tn(t);for(let t of M(e))if(A(t)===`Path.Data`)for(let e of M(t)){let t=j(e,`Figures`);if(t)return Tn(t);if(A(e)===`PathGeometry`){let t=Ai(e);if(t)return Tn(t)}}return[]}function Ai(e){let t=[];for(let n of M(e).filter(e=>A(e)===`PathFigure`)){let e=F(j(n,`StartPoint`)??``);e.length>=2&&t.push(`M ${e[0]} ${e[1]}`);for(let e of M(n)){let n=A(e);if(n===`LineSegment`){let n=F(j(e,`Point`)??``);n.length>=2&&t.push(`L ${n[0]} ${n[1]}`)}else if(n===`PolyLineSegment`){let n=F(j(e,`Points`)??``);for(let e=0;e+1<n.length;e+=2)t.push(`L ${n[e]} ${n[e+1]}`)}else if(n===`BezierSegment`){let n=F(j(e,`Point1`)+` `+j(e,`Point2`)+` `+j(e,`Point3`));n.length>=6&&t.push(`C ${n.slice(0,6).join(` `)}`)}else if(n===`PolyBezierSegment`){let n=F(j(e,`Points`)??``);for(let e=0;e+5<n.length;e+=6)t.push(`C ${n.slice(e,e+6).join(` `)}`)}}j(n,`IsClosed`)===`true`&&t.push(`Z`)}return t.length?t.join(` `):void 0}function ji(e,t,n){let r=j(e,t);if(r)return U(r,n);let i=Mi(e,t,`SolidColorBrush`);if(i)return U(j(i,`Color`),n*Ni(j(i,`Opacity`)))}function Mi(e,t,n){let r=`${A(e)}.${t}`;for(let t of M(e))if(A(t)===r)return M(t).find(e=>A(e)===n)}function Ni(e){if(!e)return 1;let t=Number(e);return Number.isFinite(t)?Math.max(0,Math.min(1,t)):1}function Pi(e){let t=j(e,`Data`)??``;return/F0/.test(t)?`nonzero`:`evenodd`}function Fi(e){if(!e)return;let t=F(e);if(t.length>=4)return[t[0],t[1],t[2],t[3]]}var Ii=12,Li=96*1024*1024,Ri=3,zi=class{constructor(e){this.scenes=new Map,this.gpuBytes=0,this.tick=0,this.canvas=e??document.createElement(`canvas`);let t=this.canvas.getContext(`webgl`,{alpha:!1,antialias:!0,depth:!1,stencil:!1,preserveDrawingBuffer:!0,powerPreference:`high-performance`});if(!t)throw Error(`WebGLRenderingContext is not available.`);this.gl=t,this.program=ea(t,na,ra),this.aPos=t.getAttribLocation(this.program,`a_pos`),this.aColor=t.getAttribLocation(this.program,`a_color`);let n=t.getUniformLocation(this.program,`u_matrix`),r=t.getUniformLocation(this.program,`u_viewport`);if(this.aPos<0||this.aColor<0||!n||!r)throw Error(`Failed to resolve WebGL shader locations.`);this.uMatrix=n,this.uViewport=r}render(e,t,n={}){let r=[];if(t.width<=0||t.height<=0)return{commands:0,warnings:r,gpuBytes:this.gpuBytes,vertexCount:0,textCount:0,cacheHit:!0};this.resize(t.width,t.height);let i=Pr(e,this.canvas.width,this.canvas.height,n.zoom,n.panX,n.panY),a={dpr:Ir(t),zoom:n.zoom??1},o=Vi(e,i,n),s=this.scenes.get(o),c=!!s;s||=(s=this.compileScene(e,o,n,i,a),this.scenes.set(o,s),this.gpuBytes+=s.gpuBytes,this.evictIfNeeded(n),this.scenes.get(o)??s),s.lastUsed=++this.tick;let l=this.gl,u=Qi(n.background??`#ffffff`);l.viewport(0,0,this.canvas.width,this.canvas.height),l.disable(l.DEPTH_TEST),l.disable(l.CULL_FACE),l.enable(l.BLEND),l.blendFunc(l.SRC_ALPHA,l.ONE_MINUS_SRC_ALPHA),l.clearColor(u[0],u[1],u[2],u[3]),l.clear(l.COLOR_BUFFER_BIT),l.useProgram(this.program),l.bindBuffer(l.ARRAY_BUFFER,s.buffer),l.enableVertexAttribArray(this.aPos),l.vertexAttribPointer(this.aPos,2,l.FLOAT,!1,Ii,0),l.enableVertexAttribArray(this.aColor),l.vertexAttribPointer(this.aColor,4,l.UNSIGNED_BYTE,!0,Ii,8),l.uniform4f(this.uMatrix,i.a,i.b,i.c,i.d),l.uniform4f(this.uViewport,i.e,i.f,this.canvas.width,this.canvas.height),l.drawArrays(l.TRIANGLES,0,s.vertexCount);let d=t.getContext(`2d`);if(!d)throw Error(`CanvasRenderingContext2D is not available for WebGL text overlay.`);return d.save(),d.setTransform(1,0,0,1,0,0),d.clearRect(0,0,t.width,t.height),(n.compositeToTarget??!0)&&d.drawImage(this.canvas,0,0),this.drawTextOverlay(d,e,i),d.restore(),s.vertexCount===0&&e.primitives.some(e=>e.type!==`text`)&&r.push(b(`warning`,`WEBGL_EMPTY_SCENE`,`WebGL scene contained no drawable geometry; Canvas/WASM fallback may be required.`,e.sourcePath)),{commands:s.primitiveCount,warnings:r,gpuBytes:this.gpuBytes,vertexCount:s.vertexCount,textCount:s.textCount,cacheHit:c}}dispose(){for(let e of this.scenes.values())this.gl.deleteBuffer(e.buffer);this.scenes.clear(),this.gpuBytes=0}resize(e,t){(this.canvas.width!==e||this.canvas.height!==t)&&(this.canvas.width=e,this.canvas.height=t)}compileScene(e,t,n,r,i){let a=new Hi,o=0,s=0;for(let t of e.primitives){if(t.type===`text`){s++;continue}o++,Ui(a,t,r,n,i)}let c=a.byteLength,l=n.maxGpuCacheBytes??Li;if(c>l)throw Error(`WebGL scene buffer would require ${$i(c)}, exceeding maxGpuCacheBytes=${$i(l)}.`);let u=this.gl,d=u.createBuffer();if(!d)throw Error(`Failed to allocate WebGLBuffer.`);u.bindBuffer(u.ARRAY_BUFFER,d),u.bufferData(u.ARRAY_BUFFER,a.toArrayBuffer(),u.STATIC_DRAW);let f=u.getError();if(f!==u.NO_ERROR)throw u.deleteBuffer(d),Error(`WebGL buffer upload failed: 0x${f.toString(16)}.`);return{key:t,buffer:d,vertexCount:a.vertexCount,gpuBytes:c,primitiveCount:o,textCount:s,lastUsed:++this.tick}}evictIfNeeded(e){let t=e.maxGpuCacheBytes??Li,n=e.maxCachedScenes??Ri;for(;this.scenes.size>Math.max(1,n)||this.gpuBytes>t;){let e;for(let t of this.scenes.values())(!e||t.lastUsed<e.lastUsed)&&(e=t);if(!e)break;this.scenes.delete(e.key),this.gl.deleteBuffer(e.buffer),this.gpuBytes-=e.gpuBytes}}drawTextOverlay(e,t,n){let r=this.canvas.width,i=this.canvas.height;for(let a of t.primitives){if(a.type!==`text`)continue;let t=H(n,a.matrix??Bi),[o,s]=Er(t,a.x,a.y),c=Xi(t),l=Math.max(2,Math.min(768,Math.abs((a.size??12)*c)));if(l<2.5)continue;let u=a.text.split(/\n/),d=u.reduce((e,t)=>Math.max(e,t.length),0),f=Math.max(24,d*l*.65),p=Math.max(l,u.length*l*1.15);if(!(o+f<-64||o>r+64||s+p<-64||s-p>i+64)){e.save(),e.setTransform(1,0,0,1,0,0),e.fillStyle=a.fill??a.stroke??`#000000`,e.font=`${l}px sans-serif`,e.textBaseline=`alphabetic`;for(let t=0;t<u.length;t++)e.fillText(u[t]??``,o,s+t*l*1.15);e.restore()}}}},Bi={a:1,b:0,c:0,d:1,e:0,f:0};function Vi(e,t,n){let r=n.lineWeightMode??`adaptive`,i=r===`physical`?`physical`:String(Math.round(Math.log2(Math.max(1e-12,Fr(t)))*8));return`${e.id}|${e.sourcePath}|${e.primitives.length}|lw:${r}:${i}`}var Hi=class{constructor(){this.buffer=new ArrayBuffer(64*1024),this.view=new DataView(this.buffer),this.vertexCount=0}get byteLength(){return this.vertexCount*Ii}push(e,t,n){if(!Number.isFinite(e)||!Number.isFinite(t))return;let r=this.byteLength;this.ensure(Ii),this.view.setFloat32(r,e,!0),this.view.setFloat32(r+4,t,!0),this.view.setUint8(r+8,n.r),this.view.setUint8(r+9,n.g),this.view.setUint8(r+10,n.b),this.view.setUint8(r+11,n.a),this.vertexCount++}toArrayBuffer(){return this.buffer.slice(0,this.byteLength)}ensure(e){let t=this.byteLength+e;if(t<=this.buffer.byteLength)return;let n=this.buffer.byteLength;for(;n<t;)n*=2;let r=new ArrayBuffer(n);new Uint8Array(r).set(new Uint8Array(this.buffer,0,this.byteLength)),this.buffer=r,this.view=new DataView(this.buffer)}};function Ui(e,t,n,r,i){let a=t.matrix??Bi,o=Xi(a),s=H(n,a),c=Math.max(.01,Lr(t.lineWidth??1,s,r,i)*o);if(t.type===`polyline`){let n=Zi(t.stroke??`#000000`);Ki(e,Wi(t.points,a),c,n)}else if(t.type===`polygon`){let n=Wi(t.points,a);t.fill&&Gi(e,n,Zi(t.fill)),t.stroke&&Ki(e,Ji(n),c,Zi(t.stroke))}else if(t.type===`rect`){let n=Wi([t.x,t.y,t.x+t.width,t.y,t.x+t.width,t.y+t.height,t.x,t.y+t.height],a);t.fill&&Gi(e,n,Zi(t.fill)),t.stroke&&Ki(e,Ji(n),c,Zi(t.stroke))}else if(t.type===`path`){let n=Dn(t.commands,.5),r=t.fill?Zi(t.fill):void 0,i=t.stroke?Zi(t.stroke):void 0;for(let t of n){let n=Wi(t.points,a);r&&(t.closed||n.length>=6)&&Gi(e,n,r),i&&Ki(e,n,c,i)}}}function Wi(e,t){let n=[];for(let r=0;r+1<e.length;r+=2){let[i,a]=Er(t,e[r]??0,e[r+1]??0);n.push({x:i,y:a})}return n}function Gi(e,t,n){if(t.length<3)return;let r=t[0];for(let i=1;i+1<t.length;i++){let a=t[i],o=t[i+1];Yi(r,a,o)<1e-6||(e.push(r.x,r.y,n),e.push(a.x,a.y,n),e.push(o.x,o.y,n))}}function Ki(e,t,n,r){if(t.length<2)return;let i=Math.max(.05,n*.5);for(let n=0;n+1<t.length;n++)qi(e,t[n],t[n+1],i,r)}function qi(e,t,n,r,i){let a=n.x-t.x,o=n.y-t.y,s=Math.hypot(a,o);if(s<=1e-9)return;let c=-o/s*r,l=a/s*r,u=t.x+c,d=t.y+l,f=t.x-c,p=t.y-l,m=n.x-c,h=n.y-l,g=n.x+c,_=n.y+l;e.push(u,d,i),e.push(f,p,i),e.push(m,h,i),e.push(u,d,i),e.push(m,h,i),e.push(g,_,i)}function Ji(e){if(e.length<2)return e;let t=e[0],n=e[e.length-1];return t.x===n.x&&t.y===n.y?e:[...e,{x:t.x,y:t.y}]}function Yi(e,t,n){return Math.abs((t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x))}function Xi(e){let t=Math.hypot(e.a,e.b),n=Math.hypot(e.c,e.d);return Math.max(1e-9,(t+n)*.5)}function Zi(e){let t=Or(e,4278190080);return{r:t&255,g:t>>>8&255,b:t>>>16&255,a:t>>>24&255}}function Qi(e){let t=Zi(e);return[t.r/255,t.g/255,t.b/255,t.a/255]}function $i(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KiB`:`${(e/1024/1024).toFixed(1)} MiB`}function ea(e,t,n){let r=ta(e,e.VERTEX_SHADER,t),i=ta(e,e.FRAGMENT_SHADER,n),a=e.createProgram();if(!a)throw Error(`Failed to create WebGLProgram.`);if(e.attachShader(a,r),e.attachShader(a,i),e.linkProgram(a),e.deleteShader(r),e.deleteShader(i),!e.getProgramParameter(a,e.LINK_STATUS)){let t=e.getProgramInfoLog(a)??`unknown link error`;throw e.deleteProgram(a),Error(`WebGL program link failed: ${t}`)}return a}function ta(e,t,n){let r=e.createShader(t);if(!r)throw Error(`Failed to create WebGLShader.`);if(e.shaderSource(r,n),e.compileShader(r),!e.getShaderParameter(r,e.COMPILE_STATUS)){let t=e.getShaderInfoLog(r)??`unknown shader compile error`;throw e.deleteShader(r),Error(`WebGL shader compile failed: ${t}`)}return r}var na=`
24
+ attribute vec2 a_pos;
25
+ attribute vec4 a_color;
26
+ uniform vec4 u_matrix;
27
+ uniform vec4 u_viewport;
28
+ varying vec4 v_color;
29
+ void main() {
30
+ float x = u_matrix.x * a_pos.x + u_matrix.z * a_pos.y + u_viewport.x;
31
+ float y = u_matrix.y * a_pos.x + u_matrix.w * a_pos.y + u_viewport.y;
32
+ vec2 clip = vec2((x / u_viewport.z) * 2.0 - 1.0, 1.0 - (y / u_viewport.w) * 2.0);
33
+ gl_Position = vec4(clip, 0.0, 1.0);
34
+ v_color = a_color;
35
+ }
36
+ `,ra=`
37
+ precision mediump float;
38
+ varying vec4 v_color;
39
+ void main() {
40
+ gl_FragColor = v_color;
41
+ }
42
+ `,ia=class{async render(e,t,n={}){let r=x(e.diagnostics),i=n.background??`#ffffff`;if(n.preferWebgl??!0)try{let i=this.getWebGlBackend(n.webglCanvas);n.webglCanvas&&(n.webglCanvas.style.visibility=`visible`);let a=i.render(e,t,{...n,compositeToTarget:!n.webglCanvas}),o=sa(a.gpuBytes),s=a.cacheHit?`cache hit`:`cache upload`;return r.push(b(`info`,`WEBGL_W2D_RENDERED`,`WebGL rendered ${a.vertexCount} vertices, ${a.textCount} text item(s), GPU cache ${o}, ${s}.`,e.sourcePath)),r.push(...a.warnings),{backend:`webgl`,commands:a.commands,warnings:r}}catch(t){r.push(b(`warning`,`WEBGL_BACKEND_FALLBACK`,`WebGL vector path failed, falling back to ${n.preferWasm?`WASM raster`:`Canvas2D`}: ${String(t)}`,e.sourcePath))}n.webglCanvas&&(n.webglCanvas.style.visibility=`hidden`);let a=t.getContext(`2d`);if(!a)throw Error(`CanvasRenderingContext2D is not available.`);let o=Pr(e,t.width,t.height,n.zoom,n.panX,n.panY),s={dpr:Ir(t),zoom:n.zoom??1},c=0;if(n.preferWasm)try{this.wasm??=new Vr({wasmUrl:n.wasmUrl}),await this.wasm.init(),this.wasm.begin(t.width,t.height,i);for(let t of e.primitives)c+=this.drawPrimitiveWasm(t,o,n,s);a.setTransform(1,0,0,1,0,0),a.putImageData(this.wasm.toImageData(),0,0);for(let t of e.primitives.filter(e=>e.type===`text`))c+=this.drawPrimitiveCanvas(a,t,o,n,s);return{backend:`wasm-raster`,commands:c,warnings:r}}catch(t){r.push(b(`warning`,`WASM_BACKEND_FALLBACK`,`WASM raster path failed, falling back to Canvas2D: ${String(t)}`,e.sourcePath))}a.save(),a.setTransform(1,0,0,1,0,0),a.fillStyle=i,a.fillRect(0,0,t.width,t.height),a.restore();for(let t of e.primitives)c+=this.drawPrimitiveCanvas(a,t,o,n,s);return{backend:`canvas2d`,commands:c,warnings:r}}dispose(){this.webgl?.dispose(),this.webgl=void 0,this.webglCanvas=void 0}getWebGlBackend(e){return(!this.webgl||this.webglCanvas!==e)&&(this.webgl?.dispose(),this.webgl=new zi(e),this.webglCanvas=e),this.webgl}drawPrimitiveCanvas(e,t,n,r,i){let a=H(n,t.matrix??{a:1,b:0,c:0,d:1,e:0,f:0}),o=U(t.stroke??`#000000`)??`#000000`,s=U(t.fill);if(t.type===`text`){let[n,c]=Er(a,t.x,t.y),l=Math.max(1,Math.abs((t.size??12)*oa(a)));if(!Rr(t.size??12,a,r,i)||n>e.canvas.width+64||c>e.canvas.height+64||n<-e.canvas.width||c<-e.canvas.height)return 0;e.save(),e.setTransform(1,0,0,1,0,0),e.fillStyle=s??o,e.font=`${Math.min(768,l)}px sans-serif`,e.textBaseline=`alphabetic`;for(let[r,i]of t.text.split(/\n/).entries())e.fillText(i,n,c+r*l*1.15);return e.restore(),1}if(e.save(),e.setTransform(a.a,a.b,a.c,a.d,a.e,a.f),e.lineWidth=Lr(t.lineWidth??1,a,r,i),t.type===`polyline`){if(t.points.length>=4){e.beginPath(),e.moveTo(t.points[0],t.points[1]);for(let n=2;n+1<t.points.length;n+=2)e.lineTo(t.points[n],t.points[n+1]);e.strokeStyle=o,e.stroke()}}else if(t.type===`polygon`){if(t.points.length>=6){e.beginPath(),e.moveTo(t.points[0],t.points[1]);for(let n=2;n+1<t.points.length;n+=2)e.lineTo(t.points[n],t.points[n+1]);e.closePath(),s&&(e.fillStyle=s,e.fill()),t.stroke&&(e.strokeStyle=o,e.stroke())}}else t.type===`rect`?(s&&(e.fillStyle=s,e.fillRect(t.x,t.y,t.width,t.height)),t.stroke&&(e.strokeStyle=o,e.strokeRect(t.x,t.y,t.width,t.height))):t.type===`path`&&(e.beginPath(),En(e,t.commands),s&&(e.fillStyle=s,e.fill()),t.stroke&&(e.strokeStyle=o,e.stroke()));return e.restore(),1}drawPrimitiveWasm(e,t,n,r){if(!this.wasm||e.type===`text`)return 0;let i=H(t,e.matrix??{a:1,b:0,c:0,d:1,e:0,f:0}),a=Fr(i),o=e=>Lr(e??1,i,n,r)*a;if(e.type===`polyline`)this.wasm.drawPolyline(e.points,i,U(e.stroke??`#000000`),o(e.lineWidth));else if(e.type===`polygon`)this.wasm.drawPolygon(e.points,i,U(e.fill)),e.stroke&&this.wasm.drawPolyline(aa(e.points),i,U(e.stroke),o(e.lineWidth));else if(e.type===`rect`){let t=[e.x,e.y,e.x+e.width,e.y,e.x+e.width,e.y+e.height,e.x,e.y+e.height,e.x,e.y];e.fill&&this.wasm.drawPolygon(t,i,U(e.fill)),e.stroke&&this.wasm.drawPolyline(t,i,U(e.stroke),o(e.lineWidth))}else if(e.type===`path`){let t=Dn(e.commands,.5),n=U(e.fill),r=U(e.stroke);if(n)for(let e of t)(e.closed||e.points.length>=6)&&this.wasm.drawPolygon(e.points,i,n);if(r)for(let n of t)this.wasm.drawPolyline(n.points,i,r,o(e.lineWidth))}return 1}};function aa(e){if(e.length<4)return e;let t=e[0],n=e[1],r=e[e.length-2],i=e[e.length-1];return t===r&&n===i?e:[...e,t,n]}function oa(e){return Math.max(1e-9,(Math.hypot(e.a,e.b)+Math.hypot(e.c,e.d))*.5)}function sa(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KiB`:`${(e/1024/1024).toFixed(1)} MiB`}var ca=class{constructor(){this.cache=new Map}async render(e,t,n={}){let r=n.webglCanvas??t;n.webglCanvas&&(n.webglCanvas.style.visibility=`visible`),fa(t);let i=this.ensureContext(r),a=this.ensureProgram(i),o=this.ensureEdgeProgram(i),s=this.ensureScene(i,e);this.evictScenes(i,n.maxCachedScenes??2,n.maxGpuCacheBytes??160*1024*1024),i.viewport(0,0,r.width,r.height),i.enable(i.DEPTH_TEST),i.disable(i.CULL_FACE),i.clearColor(.97,.98,1,1),i.clear(i.COLOR_BUFFER_BIT|i.DEPTH_BUFFER_BIT),i.useProgram(a.program);let c=ga(e,r,n);i.uniformMatrix4fv(a.uMvp,!1,c.mvp),i.uniformMatrix4fv(a.uModel,!1,_a()),i.uniform3f(a.uLight0,.35,.65,.68),i.uniform3f(a.uLight1,-.75,.4,-.5),i.uniform1f(a.uAmbient,.28);let l=0;i.enable(i.POLYGON_OFFSET_FILL),i.polygonOffset(1,1);for(let e of s.meshes){let t=e.mesh.color??[.72,.74,.78];i.uniform3f(a.uColor,t[0],t[1],t[2]),e.vao&&`bindVertexArray`in i?i.bindVertexArray(e.vao):da(i,a,e),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.index),i.drawElements(i.TRIANGLES,e.indexCount,e.indexType,0),l++}i.disable(i.POLYGON_OFFSET_FILL),Sa(i)&&i.bindVertexArray(null),i.useProgram(o.program),i.uniformMatrix4fv(o.uMvp,!1,c.mvp),i.uniform3f(o.uColor,.035,.04,.045),i.enable(i.DEPTH_TEST);for(let e of s.meshes)!e.edgeIndex||!e.edgeIndexCount||(i.bindBuffer(i.ARRAY_BUFFER,e.pos),i.enableVertexAttribArray(o.aPosition),i.vertexAttribPointer(o.aPosition,3,i.FLOAT,!1,0,0),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.edgeIndex),i.drawElements(i.LINES,e.edgeIndexCount,e.edgeIndexType??e.indexType,0),l++);return{backend:`threejs-webgl`,commands:l,warnings:x(e.diagnostics)}}dispose(){if(this.gl)for(let e of this.cache.values())la(this.gl,e);this.cache.clear(),this.program=void 0,this.edgeProgram=void 0}ensureContext(e){if(this.gl&&this.currentCanvas===e)return this.gl;let t=e.getContext(`webgl2`,{antialias:!0,alpha:!1})??e.getContext(`webgl`,{antialias:!0,alpha:!1});if(!t)throw Error(`WebGL is not available for 3D W3D rendering.`);if(this.gl&&this.currentCanvas!==e){for(let e of this.cache.values())la(this.gl,e);this.cache.clear()}return this.gl=t,this.currentCanvas=e,this.program=void 0,this.edgeProgram=void 0,t}ensureProgram(e){if(this.program)return this.program;let t=ma(e,pa(e,e.VERTEX_SHADER,`
43
+ attribute vec3 a_position;
44
+ attribute vec3 a_normal;
45
+ uniform mat4 u_mvp;
46
+ uniform mat4 u_model;
47
+ varying vec3 v_normal;
48
+ void main() {
49
+ v_normal = normalize((u_model * vec4(a_normal, 0.0)).xyz);
50
+ gl_Position = u_mvp * vec4(a_position, 1.0);
51
+ }
52
+ `),pa(e,e.FRAGMENT_SHADER,`
53
+ precision mediump float;
54
+ varying vec3 v_normal;
55
+ uniform vec3 u_color;
56
+ uniform vec3 u_light0;
57
+ uniform vec3 u_light1;
58
+ uniform float u_ambient;
59
+ void main() {
60
+ vec3 n = normalize(v_normal);
61
+ float d0 = max(dot(n, normalize(u_light0)), 0.0);
62
+ float d1 = max(dot(n, normalize(u_light1)), 0.0) * 0.45;
63
+ vec3 color = u_color * (u_ambient + d0 * 0.78 + d1);
64
+ gl_FragColor = vec4(color, 1.0);
65
+ }
66
+ `)),n={program:t,aPosition:e.getAttribLocation(t,`a_position`),aNormal:e.getAttribLocation(t,`a_normal`),uMvp:ha(e,t,`u_mvp`),uModel:ha(e,t,`u_model`),uColor:ha(e,t,`u_color`),uLight0:ha(e,t,`u_light0`),uLight1:ha(e,t,`u_light1`),uAmbient:ha(e,t,`u_ambient`)};return this.program=n,n}ensureEdgeProgram(e){if(this.edgeProgram)return this.edgeProgram;let t=ma(e,pa(e,e.VERTEX_SHADER,`
67
+ attribute vec3 a_position;
68
+ uniform mat4 u_mvp;
69
+ void main() {
70
+ gl_Position = u_mvp * vec4(a_position, 1.0);
71
+ }
72
+ `),pa(e,e.FRAGMENT_SHADER,`
73
+ precision mediump float;
74
+ uniform vec3 u_color;
75
+ void main() {
76
+ gl_FragColor = vec4(u_color, 0.9);
77
+ }
78
+ `));return this.edgeProgram={program:t,aPosition:e.getAttribLocation(t,`a_position`),uMvp:ha(e,t,`u_mvp`),uColor:ha(e,t,`u_color`)},this.edgeProgram}evictScenes(e,t,n){let r=Array.from(this.cache.values()).reduce((e,t)=>e+t.bytes,0);for(;this.cache.size>Math.max(1,t)||r>n;){let t=this.cache.entries().next().value;if(!t)break;this.cache.delete(t[0]),la(e,t[1]),r-=t[1].bytes}}ensureScene(e,t){let n=this.cache.get(t);if(n)return n;let r=[],i=0,a=this.ensureProgram(e),o=typeof e.createVertexArray==`function`;for(let n of t.model.meshes){let t=ua(e,e.ARRAY_BUFFER,n.positions),s=n.normals??new Float32Array(n.positions.length),c={mesh:n,pos:t,normal:ua(e,e.ARRAY_BUFFER,s),index:ua(e,e.ELEMENT_ARRAY_BUFFER,n.indices),edgeIndex:n.edgeIndices?ua(e,e.ELEMENT_ARRAY_BUFFER,n.edgeIndices):void 0,indexType:n.indices instanceof Uint32Array?e.UNSIGNED_INT:e.UNSIGNED_SHORT,edgeIndexType:n.edgeIndices instanceof Uint32Array?e.UNSIGNED_INT:e.UNSIGNED_SHORT,indexCount:n.indices.length,edgeIndexCount:n.edgeIndices?.length,bytes:n.positions.byteLength+s.byteLength+n.indices.byteLength+(n.edgeIndices?.byteLength??0)};if((n.indices instanceof Uint32Array||n.edgeIndices instanceof Uint32Array)&&!Sa(e)&&!e.getExtension(`OES_element_index_uint`))throw Error(`This WebGL implementation does not support 32-bit element indices.`);if(o){let t=e,n=t.createVertexArray();t.bindVertexArray(n),da(e,a,c),t.bindVertexArray(null),c.vao=n}r.push(c),i+=c.bytes}let s={page:t,meshes:r,bytes:i};return this.cache.set(t,s),s}};function la(e,t){for(let n of t.meshes)e.deleteBuffer(n.pos),e.deleteBuffer(n.normal),e.deleteBuffer(n.index),n.edgeIndex&&e.deleteBuffer(n.edgeIndex),n.vao&&Sa(e)&&e.deleteVertexArray(n.vao)}function ua(e,t,n){let r=e.createBuffer();if(!r)throw Error(`Failed to create WebGL buffer.`);return e.bindBuffer(t,r),e.bufferData(t,n,e.STATIC_DRAW),r}function da(e,t,n){e.bindBuffer(e.ARRAY_BUFFER,n.pos),e.enableVertexAttribArray(t.aPosition),e.vertexAttribPointer(t.aPosition,3,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,n.normal),e.enableVertexAttribArray(t.aNormal),e.vertexAttribPointer(t.aNormal,3,e.FLOAT,!1,0,0)}function fa(e){let t=e.getContext(`2d`);t&&(t.setTransform(1,0,0,1,0,0),t.clearRect(0,0,e.width,e.height))}function pa(e,t,n){let r=e.createShader(t);if(!r)throw Error(`Failed to create WebGL shader.`);if(e.shaderSource(r,n),e.compileShader(r),!e.getShaderParameter(r,e.COMPILE_STATUS)){let t=e.getShaderInfoLog(r)??`unknown shader error`;throw e.deleteShader(r),Error(t)}return r}function ma(e,t,n){let r=e.createProgram();if(!r)throw Error(`Failed to create WebGL program.`);if(e.attachShader(r,t),e.attachShader(r,n),e.linkProgram(r),!e.getProgramParameter(r,e.LINK_STATUS)){let t=e.getProgramInfoLog(r)??`unknown program link error`;throw e.deleteProgram(r),Error(t)}return r}function ha(e,t,n){let r=e.getUniformLocation(t,n);if(!r)throw Error(`Missing shader uniform ${n}.`);return r}function ga(e,t,n){let r=e.model.bounds,i=Math.max(1e-6,t.width/Math.max(1,t.height)),a=n.yaw??-.78,o=xa(n.pitch??.55,-1.45,1.45),s=Math.max(.05,Math.min(100,n.zoom??1)),c=Math.max(1e-4,r.radius),l=c*2.55/s,u=Math.cos(o),d=[Math.sin(a)*u,Math.sin(o),Math.cos(a)*u],f=r.center,p=[Math.cos(a),0,-Math.sin(a)],m=[p[1]*d[2]-p[2]*d[1],p[2]*d[0]-p[0]*d[2],p[0]*d[1]-p[1]*d[0]],h=c*2/Math.max(1,Math.min(t.width,t.height))/Math.max(.1,s),g=(n.panX??0)*h,_=(n.panY??0)*h,v=[f[0]-p[0]*g+m[0]*_,f[1]-p[1]*g+m[1]*_,f[2]-p[2]*g+m[2]*_],y=ya([v[0]+d[0]*l,v[1]+d[1]*l,v[2]+d[2]*l],v,[0,1,0]);return{mvp:ba(va(Math.PI/4,i,Math.max(.001,l-c*2.2),l+c*3.2),y)}}function _a(){return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}function va(e,t,n,r){let i=1/Math.tan(e/2),a=1/(n-r);return new Float32Array([i/t,0,0,0,0,i,0,0,0,0,(r+n)*a,-1,0,0,2*r*n*a,0])}function ya(e,t,n){let r=e[0]-t[0],i=e[1]-t[1],a=e[2]-t[2],o=Math.hypot(r,i,a)||1;r/=o,i/=o,a/=o;let s=n[1]*a-n[2]*i,c=n[2]*r-n[0]*a,l=n[0]*i-n[1]*r;o=Math.hypot(s,c,l)||1,s/=o,c/=o,l/=o;let u=i*l-a*c,d=a*s-r*l,f=r*c-i*s;return new Float32Array([s,u,r,0,c,d,i,0,l,f,a,0,-(s*e[0]+c*e[1]+l*e[2]),-(u*e[0]+d*e[1]+f*e[2]),-(r*e[0]+i*e[1]+a*e[2]),1])}function ba(e,t){let n=new Float32Array(16);for(let r=0;r<4;r++)for(let i=0;i<4;i++)n[r*4+i]=e[0+i]*t[r*4+0]+e[4+i]*t[r*4+1]+e[8+i]*t[r*4+2]+e[12+i]*t[r*4+3];return n}function xa(e,t,n){return Math.max(t,Math.min(n,e))}function Sa(e){return typeof WebGL2RenderingContext<`u`&&e instanceof WebGL2RenderingContext}var Ca=class{constructor(e){this.document=e}async render(e,t,n={}){let r=this.document.pageData[e];if(!r)throw Error(`Page index out of range: ${e}`);return r.kind!==`w2d-text`&&r.kind!==`w3d-model`&&n.webglCanvas&&(n.webglCanvas.style.visibility=`hidden`),r.kind===`xps-fixed-page`?(this.xps??=new bi(this.document),await this.xps.render(r,t,n)):r.kind===`w2d-text`?(this.w2d??=new ia,await this.w2d.render(r,t,n)):r.kind===`w3d-model`?(this.w3d??=new ca,await this.w3d.render(r,t,n)):r.kind===`image`?await this.renderImage(r,t,n):this.renderUnsupported(r,t,n)}dispose(){this.xps?.dispose(),this.w2d?.dispose(),this.w3d?.dispose()}async renderImage(e,t,n){let r=this.document.zip;if(!r)throw Error(`Image page requires a ZIP package.`);let i=t.getContext(`2d`);if(!i)throw Error(`CanvasRenderingContext2D is not available.`);i.save(),i.setTransform(1,0,0,1,0,0),i.fillStyle=n.background??`#ffffff`,i.fillRect(0,0,t.width,t.height),i.restore();let a=await pe(await r.read(e.sourcePath),e.mediaType),o=`width`in a?a.width:a.naturalWidth,s=`height`in a?a.height:a.naturalHeight,c=Math.min(t.width/Math.max(1,o),t.height/Math.max(1,s))*(n.zoom??1),l=o*c,u=s*c,d=(t.width-l)/2+(n.panX??0),f=(t.height-u)/2+(n.panY??0);return i.drawImage(a,d,f,l,u),{backend:`image`,commands:1,warnings:x(e.diagnostics)}}renderUnsupported(e,t,n){let r=t.getContext(`2d`);if(!r)throw Error(`CanvasRenderingContext2D is not available.`);return r.save(),r.setTransform(1,0,0,1,0,0),r.fillStyle=n.background??`#ffffff`,r.fillRect(0,0,t.width,t.height),r.fillStyle=`#111827`,r.font=`16px sans-serif`,wa(r,e.name,32,48,t.width-64,24),r.font=`13px sans-serif`,r.fillStyle=`#92400e`,wa(r,e.reason,32,88,t.width-64,20),r.restore(),{backend:`unsupported`,commands:0,warnings:[...e.diagnostics,b(`warning`,`PAGE_UNSUPPORTED`,e.reason,e.sourcePath)]}}};function wa(e,t,n,r,i,a){let o=t.split(/\s+/),s=``;for(let t of o){let o=s?`${s} ${t}`:t;e.measureText(o).width>i&&s?(e.fillText(s,n,r),s=t,r+=a):s=o}s&&e.fillText(s,n,r)}var Ta=class{constructor(e,t={}){this.pageIndex=0,this.zoom=1,this.panX=0,this.panY=0,this.yaw=-.78,this.pitch=.55,this.rendering=!1,this.renderAgain=!1,this.renderRaf=0,this.renderSeq=0,this.currentDpr=1,this.preferWebgl=t.preferWebgl??!0,this.preferWasm=t.preferWasm??!0,this.wasmUrl=t.wasmUrl,this.background=t.background??`#ffffff`,this.maxDevicePixelRatio=t.maxDevicePixelRatio??2,this.maxCanvasPixels=t.maxCanvasPixels??16777216,this.maxGpuCacheBytes=t.maxGpuCacheBytes,this.maxCachedScenes=t.maxCachedScenes,this.lineWeightMode=t.lineWeightMode??`adaptive`,this.minStrokeCssPx=t.minStrokeCssPx,this.maxOverviewStrokeCssPx=t.maxOverviewStrokeCssPx,this.minTextCssPx=t.minTextCssPx,this.minFilledAreaCssPx=t.minFilledAreaCssPx,this.root=document.createElement(`div`),this.root.className=`dwfv-root`;let n=document.createElement(`div`);n.className=`dwfv-toolbar`,this.pageSelect=document.createElement(`select`),this.zoomOutButton=Ea(`−`),this.zoomInButton=Ea(`+`),this.resetButton=Ea(`适应`),this.status=document.createElement(`span`),this.status.className=`dwfv-status`,n.append(`页: `,this.pageSelect,this.zoomOutButton,this.zoomInButton,this.resetButton,this.status);let r=document.createElement(`div`);r.className=`dwfv-workspace`,this.treePanel=document.createElement(`div`),this.treePanel.className=`dwfv-tree`,this.treePanel.style.display=`none`;let i=document.createElement(`div`);i.className=`dwfv-stage`,this.webglCanvas=document.createElement(`canvas`),this.webglCanvas.className=`dwfv-canvas dwfv-webgl-canvas`,this.webglCanvas.style.visibility=`hidden`,this.canvas=document.createElement(`canvas`),this.canvas.className=`dwfv-canvas dwfv-overlay-canvas`,this.canvas.style.touchAction=`none`,i.append(this.webglCanvas,this.canvas),r.append(this.treePanel,i),this.root.append(n,r),e.replaceChildren(this.root),this.pageSelect.addEventListener(`change`,()=>{this.pageIndex=this.pageSelect.selectedIndex,this.resetView(),this.populateModelTree(),this.requestRender()}),this.zoomOutButton.addEventListener(`click`,()=>{this.zoomAtCenter(.8),this.requestRender()}),this.zoomInButton.addEventListener(`click`,()=>{this.zoomAtCenter(1.25),this.requestRender()}),this.resetButton.addEventListener(`click`,()=>{this.resetView(),this.requestRender()}),this.canvas.addEventListener(`wheel`,e=>this.onWheel(e),{passive:!1}),this.canvas.addEventListener(`pointerdown`,e=>this.onPointerDown(e)),window.addEventListener(`pointermove`,e=>this.onPointerMove(e)),window.addEventListener(`pointerup`,()=>{this.drag=void 0}),this.canvas.addEventListener(`contextmenu`,e=>e.preventDefault()),new ResizeObserver(()=>this.requestRender()).observe(i),this.setStatus(`选择 .dwf/.dwfx 文件`)}setPreferWebgl(e){this.preferWebgl=e,this.requestRender()}setPreferWasm(e){this.preferWasm=e,this.requestRender()}setLineWeightMode(e){this.lineWeightMode=e,this.renderer?.dispose(),this.requestRender()}async load(e,t={}){this.setStatus(`解析文件中…`),this.renderer?.dispose(),this.doc=await Cr(e,{fileName:t.fileName}),this.renderer=new Ca(this.doc),this.pageIndex=t.pageIndex??0,this.zoom=1,this.panX=this.panY=0,this.yaw=-.78,this.pitch=.55,this.preferWebgl=t.preferWebgl??this.preferWebgl,this.preferWasm=t.preferWasm??this.preferWasm,this.wasmUrl=t.wasmUrl??this.wasmUrl,this.background=t.background??this.background,this.maxGpuCacheBytes=t.maxGpuCacheBytes??this.maxGpuCacheBytes,this.maxCachedScenes=t.maxCachedScenes??this.maxCachedScenes,this.lineWeightMode=t.lineWeightMode??this.lineWeightMode,this.minStrokeCssPx=t.minStrokeCssPx??this.minStrokeCssPx,this.maxOverviewStrokeCssPx=t.maxOverviewStrokeCssPx??this.maxOverviewStrokeCssPx,this.minTextCssPx=t.minTextCssPx??this.minTextCssPx,this.minFilledAreaCssPx=t.minFilledAreaCssPx??this.minFilledAreaCssPx,this.populatePages(),this.populateModelTree(),await this.render()}async render(){if(!(!this.renderer||!this.doc)){if(this.rendering)return this.renderAgain=!0,this.pendingRender;this.rendering=!0;try{this.resizeCanvasToDisplaySize();let e=this.doc.pageData[this.pageIndex];if(!e)return;let t=++this.renderSeq,n=this.renderer.render(this.pageIndex,this.canvas,{zoom:this.zoom,panX:this.panX,panY:this.panY,preferWebgl:this.preferWebgl,preferWasm:this.preferWasm,wasmUrl:this.wasmUrl,background:this.background,maxGpuCacheBytes:this.maxGpuCacheBytes,maxCachedScenes:this.maxCachedScenes,webglCanvas:this.webglCanvas,yaw:this.yaw,pitch:this.pitch,lineWeightMode:this.lineWeightMode,minStrokeCssPx:this.minStrokeCssPx,maxOverviewStrokeCssPx:this.maxOverviewStrokeCssPx,minTextCssPx:this.minTextCssPx,minFilledAreaCssPx:this.minFilledAreaCssPx});this.pendingRender=n;try{let r=await n;if(this.pendingRender===n&&t===this.renderSeq){let t=r.warnings.filter(e=>e.level!==`info`).length,n=this.currentDpr>1?` · DPR ${this.currentDpr.toFixed(2)}`:``;this.setStatus(`${this.doc.kind.toUpperCase()} · ${e.kind} · ${r.backend} · ${r.commands} ops${n}${t?` · ${t} 警告`:``}`,t>0)}return r}catch(e){throw t===this.renderSeq&&this.setStatus(`渲染失败:${String(e)}`,!0),e}}finally{this.rendering=!1,this.renderAgain&&(this.renderAgain=!1,this.requestRender())}}}getDocument(){return this.doc}fit(){this.resetView(),this.requestRender()}dispose(){this.renderRaf&&cancelAnimationFrame(this.renderRaf),this.renderRaf=0,this.renderer?.dispose(),this.renderer=void 0,this.doc=void 0,this.root.replaceChildren()}requestRender(){this.renderRaf||=requestAnimationFrame(()=>{this.renderRaf=0,this.render()})}populatePages(){this.pageSelect.replaceChildren();let e=this.doc?.pageData??[];for(let[t,n]of e.entries()){let e=document.createElement(`option`);e.value=String(t),e.textContent=`${t+1}. ${n.name} (${n.kind})`,this.pageSelect.append(e)}this.pageSelect.selectedIndex=Math.max(0,Math.min(this.pageIndex,e.length-1))}populateModelTree(){let e=this.doc?.pageData[this.pageIndex];if(!e||e.kind!==`w3d-model`||!e.model.sceneTree?.length){this.treePanel.style.display=`none`,this.treePanel.replaceChildren();return}this.treePanel.style.display=``;let t=document.createElement(`div`);t.className=`dwfv-tree-header`,t.textContent=`模型结构 · ${e.model.stats.nodeCount??0} 节点`;let n=document.createElement(`div`);n.className=`dwfv-tree-stats`,n.textContent=`${e.model.stats.meshCount} meshes · ${e.model.stats.triangleCount} triangles · ${e.model.stats.textureCount??0} textures`;let r=document.createElement(`div`);r.className=`dwfv-tree-content`;for(let t of e.model.sceneTree)r.append(Da(t));this.treePanel.replaceChildren(t,n,r)}resizeCanvasToDisplaySize(){let e=this.canvas.getBoundingClientRect(),t=Math.max(1,e.width),n=Math.max(1,e.height),r=Math.max(1,Math.min(this.maxDevicePixelRatio,window.devicePixelRatio||1)),i=t*n*r*r;i>this.maxCanvasPixels&&(r*=Math.sqrt(this.maxCanvasPixels/i)),this.currentDpr=r;let a=Math.max(1,Math.floor(t*r)),o=Math.max(1,Math.floor(n*r));(this.canvas.width!==a||this.canvas.height!==o)&&(this.canvas.width=a,this.canvas.height=o),(this.webglCanvas.width!==a||this.webglCanvas.height!==o)&&(this.webglCanvas.width=a,this.webglCanvas.height=o)}resetView(){this.zoom=1,this.panX=0,this.panY=0,this.yaw=-.78,this.pitch=.55;let e=this.doc?.pageData[this.pageIndex];if(e?.kind===`w3d-model`){let t=e.model.initialView?.camera,n=t?.position,r=t?.target;if(n&&r){let t=n[0]-r[0],i=n[1]-r[1],a=n[2]-r[2],o=Math.hypot(t,i,a);if(o>1e-6){this.pitch=Math.max(-1.45,Math.min(1.45,Math.asin(i/o))),this.yaw=Math.atan2(t,a);let n=Math.max(1e-6,e.model.bounds.radius);this.zoom=Math.max(.05,Math.min(100,n*2.55/o))}}}}zoomAtCenter(e){if(this.resizeCanvasToDisplaySize(),this.is3dPage()){this.zoom=Math.max(.05,Math.min(100,this.zoom*e));return}let t=this.canvas.width/2,n=this.canvas.height/2;this.zoomAroundPoint(e,t,n)}zoomAroundPoint(e,t,n){let r=this.zoom,i=Math.max(.05,Math.min(64,r*e));if(i===r)return;let a=this.pagePointAtCanvasPoint(t,n,r,this.panX,this.panY);if(a){let e=this.pageMatrixAt(i,0,0);if(e){let[r,o]=Er(e,a.x,a.y);this.panX=t-r,this.panY=n-o,this.zoom=i;return}}let o=i/r;this.panX=t-(t-this.panX)*o,this.panY=n-(n-this.panY)*o,this.zoom=i}onWheel(e){if(!this.doc)return;e.preventDefault(),this.resizeCanvasToDisplaySize();let t=this.canvas.getBoundingClientRect(),n=(e.clientX-t.left)*this.currentDpr,r=(e.clientY-t.top)*this.currentDpr,i=e.deltaMode===WheelEvent.DOM_DELTA_LINE?e.deltaY*16:e.deltaMode===WheelEvent.DOM_DELTA_PAGE?e.deltaY*Math.max(1,t.height):e.deltaY,a=Math.exp(-i*.0015);this.is3dPage()?this.zoom=Math.max(.05,Math.min(100,this.zoom*a)):this.zoomAroundPoint(a,n,r),this.requestRender()}onPointerDown(e){this.canvas.setPointerCapture?.(e.pointerId),this.is3dPage()&&e.preventDefault();let t=this.is3dPage()?e.button===2||e.shiftKey?`pan3d`:`rotate3d`:`pan2d`;this.drag={x:e.clientX,y:e.clientY,panX:this.panX,panY:this.panY,yaw:this.yaw,pitch:this.pitch,mode:t}}onPointerMove(e){if(!this.drag)return;let t=e.clientX-this.drag.x,n=e.clientY-this.drag.y;this.drag.mode===`rotate3d`?(this.yaw=this.drag.yaw+t*.008,this.pitch=Math.max(-1.45,Math.min(1.45,this.drag.pitch+n*.008))):(this.panX=this.drag.panX+t*this.currentDpr,this.panY=this.drag.panY+n*this.currentDpr),this.requestRender()}is3dPage(){return this.doc?.pageData[this.pageIndex]?.kind===`w3d-model`}pagePointAtCanvasPoint(e,t,n,r,i){let a=this.pageMatrixAt(n,r,i);if(!a)return;let o=a.a*a.d-a.b*a.c;if(!Number.isFinite(o)||Math.abs(o)<1e-12)return;let s=e-a.e,c=t-a.f;return{x:(a.d*s-a.c*c)/o,y:(-a.b*s+a.a*c)/o}}pageMatrixAt(e,t,n){let r=this.doc?.pageData[this.pageIndex];if(!r)return;let i=Math.max(1,this.canvas.width),a=Math.max(1,this.canvas.height);if(r.kind===`w2d-text`)return Pr(r,i,a,e,t,n);if(r.kind===`xps-fixed-page`)return Nr({canvasWidth:i,canvasHeight:a,pageWidth:Math.max(1,r.width),pageHeight:Math.max(1,r.height),zoom:e,panX:t,panY:n});if(r.kind===`image`)return Nr({canvasWidth:i,canvasHeight:a,pageWidth:Math.max(1,r.width),pageHeight:Math.max(1,r.height),zoom:e,panX:t,panY:n,margin:0})}setStatus(e,t=!1){this.status.textContent=e,this.status.classList.toggle(`dwfv-warn`,t)}};function Ea(e){let t=document.createElement(`button`);return t.type=`button`,t.textContent=e,t}function Da(e){let t=document.createElement(`details`);t.open=e.children.length>0&&e.children.length<20;let n=document.createElement(`summary`);if(n.textContent=e.label||e.id,e.meshIds.length>0&&(n.title=`${e.meshIds.length} mesh(es)`),t.append(n),e.contentRefs.length>0){let n=document.createElement(`div`);n.className=`dwfv-tree-meta`,n.textContent=e.contentRefs.slice(0,3).join(`, `),t.append(n)}for(let n of e.children)t.append(Da(n));return t}var Oa=Object.defineProperty,ka=(e,t,n)=>t in e?Oa(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,W=(e,t,n)=>ka(e,typeof t==`symbol`?t:t+``,n);async function Aa(e){if(e.buffer instanceof Uint8Array)return e.buffer;if(e.buffer instanceof ArrayBuffer)return new Uint8Array(e.buffer);if(e.file)return new Uint8Array(await e.file.arrayBuffer());throw Error(`CadLoadInput requires a File, ArrayBuffer, or Uint8Array.`)}function ja(e){return e.byteOffset===0&&e.byteLength===e.buffer.byteLength?e.buffer:e.slice().buffer}function Ma(e){let t=e.fileName??e.file?.name??``,n=t.lastIndexOf(`.`);return n>=0?t.slice(n+1).toLowerCase():``}function Na(e,t){let n=Ma(e);if(n===`dwg`)return`dwg`;if(n===`dxf`)return`dxf`;if(n===`dwfx`)return`dwfx`;if(n===`xps`)return`xps`;if(n===`dwf`)return`dwf`;if(t&&t.byteLength>=6){let e=Pa(t.slice(0,6));if(/^AC10/.test(e))return`dwg`;if(t[0]===80&&t[1]===75)return`dwfx`;let n=Pa(t.slice(0,Math.min(t.byteLength,2048))).toUpperCase();if(n.includes(`SECTION`)&&n.includes(`ENTITIES`))return`dxf`;if(n.includes(`DWF`))return`dwf`}return`unknown`}function Pa(e){return Array.from(e,e=>e>=32&&e<=126?String.fromCharCode(e):` `).join(``)}var Fa=class{constructor(e=[]){W(this,`loaders`,[]);for(let t of e)this.register(t)}register(e){let t=this.loaders.findIndex(t=>t.id===e.id);return t>=0?this.loaders.splice(t,1,e):this.loaders.push(e),this}unregister(e){let t=this.loaders.findIndex(t=>t.id===e);return t>=0&&this.loaders.splice(t,1),this}list(){return[...this.loaders]}async detect(e){let t=await Aa(e),n=Na(e,t),r=this.loaders.find(r=>r.formats.includes(n)&&r.accepts(e,t));if(r)return{loader:r,bytes:t,format:n};let i=this.loaders.find(n=>n.accepts(e,t));if(i)return{loader:i,bytes:t,format:n};throw Error(`No CAD loader registered for ${n===`unknown`?`this file`:n.toUpperCase()}.`)}async load(e,t={}){let{loader:n,bytes:r}=await this.detect(e);return n.load({...e,buffer:r},t)}},Ia=`wasm/dwg-worker.js`,La=class{constructor(){W(this,`worker`),W(this,`sequence`,0),W(this,`pending`,new Map)}load(e,t,n={}){var r;if(!Ra())throw Error(`Web Worker is not available in this runtime.`);let i=this.ensureWorker(n),a=++this.sequence,o=Math.max(0,Number(n.workerTimeoutMs??0)),s=n.fileName??t.fileName??t.file?.name,c=Va(e,t,n);return(r=n.onProgress)==null||r.call(n,{phase:`worker-start`,format:`dwg`,message:`Dispatching DWG parse to worker…`,total:e.byteLength}),new Promise((e,t)=>{var r;if((r=n.signal)!=null&&r.aborted){t(Ua());return}let l={resolve:e,reject:t,onProgress:n.onProgress,signal:n.signal};o>0&&(l.timer=setTimeout(()=>{this.pending.delete(a),this.resetWorker(),t(Error(`DWG worker timed out after ${o} ms.`))},o)),n.signal&&(l.abortHandler=()=>{this.pending.delete(a),this.resetWorker(),t(Ua())},n.signal.addEventListener(`abort`,l.abortHandler,{once:!0})),this.pending.set(a,l);try{i.postMessage({type:`load`,requestId:a,bytes:c,fileName:s,options:Ba(n)},[c])}catch(e){this.pending.delete(a),Ha(l),t(e instanceof Error?e:Error(String(e)))}})}preload(e={}){var t;if(!Ra())return Promise.reject(Error(`Web Worker is not available in this runtime.`));let n=this.ensureWorker(e),r=++this.sequence,i=Math.max(0,Number(e.workerTimeoutMs??0));return(t=e.onProgress)==null||t.call(e,{phase:`worker-start`,format:`dwg`,message:`Starting DWG worker warmup…`}),new Promise((t,a)=>{var o;if((o=e.signal)!=null&&o.aborted){a(Ua());return}let s={resolve:()=>t(),reject:a,onProgress:e.onProgress,signal:e.signal};i>0&&(s.timer=setTimeout(()=>{this.pending.delete(r),this.resetWorker(),a(Error(`DWG worker warmup timed out after ${i} ms.`))},i)),e.signal&&(s.abortHandler=()=>{this.pending.delete(r),this.resetWorker(),a(Ua())},e.signal.addEventListener(`abort`,s.abortHandler,{once:!0})),this.pending.set(r,s);try{n.postMessage({type:`warmup`,requestId:r,options:Ba(e)})}catch(e){this.pending.delete(r),Ha(s),a(e instanceof Error?e:Error(String(e)))}})}terminate(){this.resetWorker()}ensureWorker(e){return this.worker||(this.worker=za(e),this.worker.onmessage=e=>this.handleMessage(e.data),this.worker.onerror=e=>{let t=e.message||`DWG worker failed.`;this.rejectAll(Error(t)),this.resetWorker(!1)},this.worker.onmessageerror=()=>{this.rejectAll(Error(`DWG worker returned a message that could not be cloned.`)),this.resetWorker(!1)}),this.worker}handleMessage(e){var t,n;if(e.type===`ready`)return;let r=this.pending.get(e.requestId);if(!r)return;if(e.type===`progress`){(t=r.onProgress)==null||t.call(r,e.progress);return}if(this.pending.delete(e.requestId),Ha(r),e.type===`result`){r.resolve(e.result);return}if(e.type===`warmup-result`){(n=r.onProgress)==null||n.call(r,{phase:`worker-ready`,format:`dwg`,message:`DWG worker warmup complete.`,percent:100,elapsedMs:e.elapsedMs}),r.resolve(void 0);return}let i=Error(e.error.message);i.name=e.error.name||`DwgWorkerError`,e.error.stack&&(i.stack=e.error.stack),r.reject(i)}rejectAll(e){for(let[,t]of this.pending)Ha(t),t.reject(e);this.pending.clear()}resetWorker(e=!0){var t;e&&this.rejectAll(Error(`DWG worker was terminated.`)),(t=this.worker)==null||t.terminate(),this.worker=void 0}};function Ra(){return typeof Worker<`u`&&typeof URL<`u`}function za(e){return e.workerFactory?e.workerFactory():new Worker(Ga(e.workerUrl),{type:`module`,name:`lightweight-cad-dwg-loader`})}function Ba(e){return{wasmPath:Wa(e.wasmPath),includePaperSpace:e.includePaperSpace,maxInsertDepth:e.maxInsertDepth,keepRaw:!!e.keepRaw}}function Va(e,t,n){return t.file||n.transferInputBuffer===!0?ja(e):e.slice().buffer}function Ha(e){e.timer&&clearTimeout(e.timer),e.signal&&e.abortHandler&&e.signal.removeEventListener(`abort`,e.abortHandler)}function Ua(){if(typeof DOMException<`u`)return new DOMException(`DWG loading was aborted.`,`AbortError`);let e=Error(`DWG loading was aborted.`);return e.name=`AbortError`,e}function Wa(e){let t=(e?.trim()||`/wasm`).replace(/\/+$/,``);return t===``?qa():Ja(t)?t:t.startsWith(`/`)?`${qa()}${t}`:new URL(t,Ka()).href.replace(/\/+$/,``)}function Ga(e){if(e instanceof URL)return e;let t=e?.trim()||Ia;return Ja(t)?t:new URL(t,Ka()).href}function Ka(){return typeof document<`u`&&document.baseURI?document.baseURI:typeof location<`u`&&location.href?location.href:`http://localhost/`}function qa(){return typeof location<`u`&&location.origin?location.origin:new URL(Ka()).origin}function Ja(e){return/^[a-z][a-z0-9+.-]*:/i.test(e)}var Ya=class{constructor(e={}){W(this,`id`,`dwg`),W(this,`label`,`DWG / LibreDWG WebAssembly`),W(this,`formats`,[`dwg`]),W(this,`defaults`),W(this,`workerClient`,new La),this.defaults={useWorker:!0,...e}}accepts(e,t){return Ma(e)===`dwg`?!0:Na(e,t)===`dwg`}async load(e,t={}){var n;let r={...this.defaults,...t};(n=r.onProgress)==null||n.call(r,{phase:`read`,format:`dwg`,message:`Reading DWG bytes…`});let i=await Aa(e),a=e.fileName??e.file?.name;if(r.useWorker===!1)throw Error(`DWG main-thread parsing is intentionally not bundled by the default viewer. Keep useWorker enabled, or register a custom DWG loader for non-browser runtimes.`);if(!Ra())throw Error(`DWG loading requires Web Worker support in this build. Provide a custom loader for this runtime.`);try{return await this.workerClient.load(i,e,{...r,fileName:a})}catch(e){throw Xa(e)?e:Za(e)}}terminateWorker(){this.workerClient.terminate()}preload(e={}){let t={...this.defaults,...e};return t.useWorker===!1?Promise.reject(Error(`DWG preload requires worker mode in the default viewer.`)):this.workerClient.preload(t)}};function Xa(e){return e instanceof Error&&e.name===`AbortError`}function Za(e){let t=e instanceof Error?e.message:String(e);return Error(`${t} If the worker asset cannot be resolved by your bundler/CDN, pass workerUrl or workerFactory to CadViewer.`)}function Qa(e){return{format:e.format,sourceName:e.sourceName,units:e.units,header:e.header??{},layers:e.layers??{},blocks:e.blocks??{},entities:e.entities??[],pages:e.pages,metadata:e.metadata??{},warnings:e.warnings??[],raw:e.raw}}function $a(e){switch(String(e??``).toUpperCase()){case`LINE`:return`line`;case`CIRCLE`:return`circle`;case`ARC`:return`arc`;case`LWPOLYLINE`:case`POLYLINE`:case`POLYLINE_2D`:case`POLYLINE2D`:case`POLYLINE_3D`:case`POLYLINE3D`:case`LEADER`:case`MULTILEADER`:return`polyline`;case`ELLIPSE`:return`ellipse`;case`TEXT`:case`MTEXT`:case`ATTRIB`:case`ATTDEF`:case`DIMENSION`:return`text`;case`POINT`:return`point`;case`INSERT`:return`insert`;case`SOLID`:case`TRACE`:case`3DFACE`:return`solid`;case`HATCH`:return`hatch`;case`SPLINE`:return`spline`;case`PATH`:case`XPS_PATH`:case`DWF_PATH`:return`path`;case`IMAGE`:case`RASTER_IMAGE`:case`DWF_IMAGE`:return`image`;case`VIEWPORT`:return`viewport`;default:return`unsupported`}}function eo(e,t,n={}){let r=t??String(e.type??e.entityType??e.objectName??`UNKNOWN`).toUpperCase(),i=n.includeUnknownProperties===!1?{type:r,kind:$a(r)}:{...e,type:r,kind:$a(r)};n.keepRaw&&(i.raw=e),i.handle=q(e.handle??e.id),i.layer=q(e.layer??e.layerName),i.lineType=q(e.lineType??e.linetype);let a=n.numericColorMode??`auto`,o=K(e.color);i.colorIndex=K(e.colorIndex??e.colorNumber??e.aci??e.aciColor??e.color_index)??(a!==`rgb`&&o!==void 0&&Math.abs(o)<=257?o:void 0),i.trueColor=e.trueColor??e.true_color??e.truecolor??e.colorRGB??e.colorRgb??e.rgbColor??e.rgb??(o!==void 0&&o>=0&&o<=16777215&&(a===`rgb`||a===`auto`&&Math.abs(o)>257)?o:void 0),(typeof e.color==`string`||typeof e.color==`number`)&&(i.color=e.color),i.colorNumber=K(e.colorNumber)??i.colorNumber,i.colorName=q(e.colorName??e.color_name)??i.colorName,i.fillColor=e.fillColor??e.fill_color,i.fillColorIndex=K(e.fillColorIndex??e.fill_color_index??e.fillColorNumber)??i.fillColorIndex,i.opacity=K(e.opacity??e.alpha)??i.opacity,i.lineweight=K(e.lineweight??e.lineWeight),i.isVisible=!(e.isVisible===!1||e.visible===!1),i.startPoint=G(e.startPoint??e.start??e.p0??e.from)??i.startPoint,i.endPoint=G(e.endPoint??e.end??e.p1??e.to)??i.endPoint,i.center=G(e.center??e.centerPoint)??i.center,i.insertionPoint=G(e.insertionPoint??e.position??e.location??e.point??e.basePoint)??i.insertionPoint,i.radius=K(e.radius)??i.radius,i.startAngle=K(e.startAngle??e.start_angle)??i.startAngle,i.endAngle=K(e.endAngle??e.end_angle)??i.endAngle,i.majorAxisEndPoint=G(e.majorAxisEndPoint??e.majorAxis??e.major)??i.majorAxisEndPoint,i.axisRatio=K(e.axisRatio??e.ratio)??i.axisRatio,i.height=K(e.height??e.textHeight)??i.height,i.textHeight=K(e.textHeight??e.height)??i.textHeight,i.rotation=K(e.rotation??e.angle)??i.rotation,i.text=q(e.text??e.value??e.string??e.contents)??i.text,i.name=q(e.name??e.blockName)??i.name,i.blockName=q(e.blockName??e.name)??i.blockName;let s=to(e.vertices??e.points);s.length>0&&(i.vertices=s);let c=to(e.controlPoints??e.control_points);c.length>0&&(i.controlPoints=c);let l=to(e.fitPoints??e.fit_points);return l.length>0&&(i.fitPoints=l),i}function G(e){if(!e||typeof e!=`object`)return;let t=e,n=Number(t.x??t.X??t[0]),r=Number(t.y??t.Y??t[1]),i=t.z??t.Z??t[2],a=i===void 0?void 0:Number(i);if(!(!Number.isFinite(n)||!Number.isFinite(r)))return Number.isFinite(a)?{x:n,y:r,z:a}:{x:n,y:r}}function to(e){if(!Array.isArray(e))return[];let t=[];for(let n of e){let e=G(n);if(!e)continue;let r=n,i=e,a=K(r.bulge);a!==void 0&&(i.bulge=a);let o=K(r.startWidth??r.start_width);o!==void 0&&(i.startWidth=o);let s=K(r.endWidth??r.end_width);s!==void 0&&(i.endWidth=s),t.push(i)}return t}function no(e){let t={};for(let n of e.entities){let e=String(n.type??`UNKNOWN`).toUpperCase();t[e]=(t[e]??0)+1}return{format:e.format,sourceName:e.sourceName,entityCount:e.entities.length,layerCount:Object.keys(e.layers).length,blockCount:Object.keys(e.blocks).length,pageCount:e.pages?.length??0,byType:t,warnings:[...e.warnings]}}function ro(e,t){t.name&&(e[t.name]=t,e[t.name.toLowerCase()]=t)}function io(e,t){t.name&&(e[t.name]=t,e[t.name.toLowerCase()]=t)}function ao(e){return e!=null&&e.length?e.flatMap(e=>e.entities.map(t=>({...t,pageIndex:e.index}))):[]}function K(e){let t=Number(e);return Number.isFinite(t)?t:void 0}function q(e){if(typeof e!=`string`&&typeof e!=`number`)return;let t=String(e);return t.length>0?t:void 0}function oo(){return{minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function so(e){return Number.isFinite(e.minX)&&Number.isFinite(e.minY)&&Number.isFinite(e.maxX)&&Number.isFinite(e.maxY)&&e.maxX>=e.minX&&e.maxY>=e.minY}function J(e,t){Y(t)&&(e.minX=Math.min(e.minX,t.x),e.minY=Math.min(e.minY,t.y),e.maxX=Math.max(e.maxX,t.x),e.maxY=Math.max(e.maxY,t.y))}function co(e,t,n){if(!Y(t)||!Number.isFinite(n))return;let r=Math.abs(n);J(e,{x:t.x-r,y:t.y-r}),J(e,{x:t.x+r,y:t.y+r})}function lo(e,t=.02,n=1e-6){if(!so(e))return{minX:-10,minY:-10,maxX:10,maxY:10};let r=Math.max((e.maxX-e.minX)*t,n),i=Math.max((e.maxY-e.minY)*t,n);return{minX:e.minX-r,minY:e.minY-i,maxX:e.maxX+r,maxY:e.maxY+i}}function Y(e){return!!e&&typeof e==`object`&&Number.isFinite(e.x)&&Number.isFinite(e.y)}function X(e){return{x:e.x,y:e.y}}function uo(e){return e*Math.PI/180}function fo(e,t,n,r,i=!0,a=64){if(!Y(e)||!Number.isFinite(t))return[];let o=n,s=r;if(!Number.isFinite(o)||!Number.isFinite(s))return[];(Math.abs(o)>Math.PI*2+1e-6||Math.abs(s)>Math.PI*2+1e-6)&&(o=uo(o),s=uo(s)),i&&s<o&&(s+=Math.PI*2),!i&&o<s&&(o+=Math.PI*2);let c=s-o,l=Math.max(8,Math.min(256,Math.ceil(Math.abs(c)/(Math.PI*2)*a))),u=[];for(let n=0;n<=l;n++){let r=o+n/l*c;u.push({x:e.x+Math.cos(r)*t,y:e.y+Math.sin(r)*t})}return u}function po(e,t,n=1,r=0,i=Math.PI*2,a=96){if(!Y(e)||!Y(t))return[];let o=Math.hypot(t.x,t.y);if(!Number.isFinite(o)||o<=0)return[];let s=o*(Number.isFinite(n)&&n>0?n:1),c=Math.atan2(t.y,t.x),l=Number.isFinite(r)?r:0,u=Number.isFinite(i)?i:Math.PI*2;(Math.abs(l)>Math.PI*2+1e-6||Math.abs(u)>Math.PI*2+1e-6)&&(l=uo(l),u=uo(u)),u<l&&(u+=Math.PI*2);let d=Math.max(12,Math.min(256,Math.ceil(Math.abs(u-l)/(Math.PI*2)*a))),f=[],p=Math.cos(c),m=Math.sin(c);for(let t=0;t<=d;t++){let n=l+(u-l)*(t/d),r=Math.cos(n)*o,i=Math.sin(n)*s;f.push({x:e.x+r*p-i*m,y:e.y+r*m+i*p})}return f}function mo(e,t,n=0,r=16){if(!Number.isFinite(n)||Math.abs(n)<1e-12)return[X(e),X(t)];let i=Math.hypot(t.x-e.x,t.y-e.y);if(i<=1e-12)return[X(e),X(t)];let a=4*Math.atan(n),o=Math.abs(i/(2*Math.sin(a/2))),s={x:(e.x+t.x)/2,y:(e.y+t.y)/2},c=(t.x-e.x)/i,l=(t.y-e.y)/i,u=n>=0?1:-1,d=Math.sqrt(Math.max(o*o-(i/2)**2,0)),f={x:s.x-u*l*d,y:s.y+u*c*d};return fo(f,o,Math.atan2(e.y-f.y,e.x-f.x),Math.atan2(t.y-f.y,t.x-f.x),n>=0,r)}function ho(e){return e.replace(/\\P/g,`
79
+ `).replace(/\\~|\\ /g,` `).replace(/\\[A-Za-z][^;]*;/g,``).replace(/[{}]/g,``).replace(/\\[A-Za-z]/g,``).trim()}function go(e,t,n){return Math.min(n,Math.max(t,e))}var _o=class{constructor(e={}){W(this,`id`,`dxf`),W(this,`label`,`DXF / JavaScript parser`),W(this,`formats`,[`dxf`]),W(this,`defaults`),this.defaults=e}accepts(e,t){return Ma(e)===`dxf`||Na(e,t)===`dxf`}async load(e,t={}){let n={...this.defaults,...t},r=performance.now(),i=await Aa(e),a=Ao(i,n.dxfEncoding),o=[],s;try{s=await vo(a)}catch(e){o.push(`dxf-parser failed, using built-in fallback parser: ${e instanceof Error?e.message:String(e)}`),s=Bo(a)}let c=yo(s,e.fileName??e.file?.name,o),l=performance.now()-r;return{document:c,raw:s,bytes:i.byteLength,elapsedMs:l,format:`dxf`,warnings:c.warnings}}};async function vo(e){let t=await i(()=>import(`./dist-S-2Hyh3N.js`),__vite__mapDeps([0,1,2,3,4]),import.meta.url),n=t.default??t.DxfParser;if(!n)throw Error(`dxf-parser did not expose a parser constructor.`);return new n().parseSync(e)}function yo(e,t,n=[]){let r=e&&typeof e==`object`?e:{},i=xo(r),a=So(r),o=(Array.isArray(r.entities)?r.entities:[]).filter(e=>!!e&&typeof e==`object`).map(e=>bo(e)),s=Qa({format:`dxf`,sourceName:t,header:r.header&&typeof r.header==`object`?r.header:{},layers:i,blocks:a,entities:o,metadata:{parser:`dxf-parser + cad-viewer normalizer`},warnings:n,raw:e});return o.length===0&&s.warnings.push(`DXF file did not expose any ENTITIES.`),s}function bo(e){let t=String(e.type??e.entityType??`UNKNOWN`).toUpperCase(),n=eo(e,t),r=K(e.colorIndex??e.colorNumber??e.aci),i=K(e.color);if(n.colorIndex=r??(i!==void 0&&Math.abs(i)<=257?i:void 0),n.trueColor=e.trueColor??e.true_color??e.colorRGB??e.trueColorValue??(i!==void 0&&Math.abs(i)>257?i:void 0),n.layer=q(e.layer??e.layerName)??`0`,n.isClosed=!!(e.shape??e.closed??e.isClosed)||(Number(e.flag??e.flags??0)&1)==1,t===`LINE`&&(n.startPoint=G(e.startPoint??{x:e.x1??e.x,y:e.y1??e.y,z:e.z1??e.z})??n.startPoint,n.endPoint=G(e.endPoint??{x:e.x2,y:e.y2,z:e.z2})??n.endPoint),(t===`TEXT`||t===`MTEXT`||t===`ATTRIB`||t===`ATTDEF`)&&(n.insertionPoint=G(e.startPoint??e.position??e.insertionPoint)??n.insertionPoint,n.text=zo(e.text??e.string??e.value)??n.text,n.textHeight=K(e.textHeight??e.height)??n.textHeight,n.rotation=Oo(e.rotation??e.angle)),(t===`ARC`||t===`ELLIPSE`)&&(n.startAngle=ko(e.startAngle??e.start_angle),n.endAngle=ko(e.endAngle??e.end_angle)),t===`INSERT`){n.blockName=q(e.name??e.blockName)??n.blockName,n.insertionPoint=G(e.position??e.insertionPoint??e.point)??n.insertionPoint;let t=K(e.xScale??e.scaleX??e.xscale),r=K(e.yScale??e.scaleY??e.yscale),i=K(e.zScale??e.scaleZ??e.zscale);(t!==void 0||r!==void 0||i!==void 0)&&(n.scale={x:t??1,y:r??t??1,z:i??1}),n.rotation=Oo(e.rotation??e.angle)}if(t===`SPLINE`){let t=To(e.controlPoints??e.control_points??e.points);t.length&&(n.controlPoints=t);let r=To(e.fitPoints??e.fit_points);r.length&&(n.fitPoints=r)}return t===`HATCH`&&(n.loops=Do(e),n.fillColorIndex=n.colorIndex),(t===`SOLID`||t===`TRACE`||t===`3DFACE`)&&(n.vertices=Eo(e),n.fillColorIndex=n.colorIndex),n}function xo(e){let t={},n=e.tables,r=wo(e.layers??n?.layer??n?.LAYER??n?.layers);for(let e of r){let n=e,r=q(n.name??n.layerName);r&&ro(t,{name:r,color:n.color??n.colorNumber??n.colorIndex,colorIndex:K(n.colorNumber??n.colorIndex??n.color),lineType:q(n.lineType??n.linetype),isVisible:Number(n.colorNumber??n.colorIndex??n.color??1)>=0,isFrozen:!!n.frozen,isLocked:!!n.locked,raw:n})}return t[0]||ro(t,{name:`0`,colorIndex:7,isVisible:!0}),t}function So(e){let t={},n=e.blocks;if(!n||typeof n!=`object`)return t;if(Array.isArray(n))for(let e of n)Co(t,e);else for(let[e,r]of Object.entries(n))Co(t,r,e);return t}function Co(e,t,n){if(!t||typeof t!=`object`)return;let r=t,i=q(r.name??r.blockName??n);if(!i)return;let a=(Array.isArray(r.entities)?r.entities:[]).filter(e=>!!e&&typeof e==`object`).map(e=>bo(e));io(e,{name:i,basePoint:G(r.basePoint??r.position)??{x:0,y:0},entities:a,raw:r})}function wo(e){if(!e)return[];if(Array.isArray(e))return e;if(typeof e!=`object`)return[];let t=e;return Array.isArray(t.entries)?t.entries:Array.isArray(t.records)?t.records:Array.isArray(t.layers)?t.layers:Object.values(t).filter(e=>e&&typeof e==`object`)}function To(e){return Array.isArray(e)?e.map(G).filter(e=>!!e):[]}function Eo(e){let t=To(e.vertices??e.points);if(t.length)return t;let n=[];for(let t=0;t<4;t++){let r=G({x:e[`x${t}`]??e[`x${t+1}`],y:e[`y${t}`]??e[`y${t+1}`],z:e[`z${t}`]??e[`z${t+1}`]});r&&n.push(r)}return n}function Do(e){let t=e.boundaryLoops??e.loops??e.paths;if(Array.isArray(t))return t.map(e=>{let t=e;return{vertices:To(t.vertices??t.points),isClosed:!0}}).filter(e=>e.vertices&&e.vertices.length>0)}function Oo(e){let t=K(e);if(t!==void 0)return Math.abs(t)>Math.PI*2+1e-6?uo(t):t}function ko(e){let t=K(e);if(t!==void 0)return Math.abs(t)>Math.PI*2+1e-6?uo(t):t}function Ao(e,t){let n=Po(t);if(n)return Fo(e,n);let r=Mo(e);if(r)return Fo(e,r);let i=Po(No(e));if(i)return Fo(e,i);let a=Fo(e,`utf-8`);return a.includes(`�`)?Io(e):a}var jo={ANSI_874:`windows-874`,ANSI_932:`shift_jis`,ANSI_936:`gb18030`,ANSI_949:`euc-kr`,ANSI_950:`big5`,ANSI_1250:`windows-1250`,ANSI_1251:`windows-1251`,ANSI_1252:`windows-1252`,ANSI_1253:`windows-1253`,ANSI_1254:`windows-1254`,ANSI_1255:`windows-1255`,ANSI_1256:`windows-1256`,ANSI_1257:`windows-1257`,ANSI_1258:`windows-1258`,BIG5:`big5`,CP874:`windows-874`,CP932:`shift_jis`,CP936:`gb18030`,CP949:`euc-kr`,CP950:`big5`,CP1250:`windows-1250`,CP1251:`windows-1251`,CP1252:`windows-1252`,CP1253:`windows-1253`,CP1254:`windows-1254`,CP1255:`windows-1255`,CP1256:`windows-1256`,CP1257:`windows-1257`,CP1258:`windows-1258`,GB18030:`gb18030`,GB2312:`gb18030`,GBK:`gb18030`,SHIFT_JIS:`shift_jis`,SHIFTJIS:`shift_jis`,SJIS:`shift_jis`,UTF8:`utf-8`,UTF_8:`utf-8`,UTF16:`utf-16le`,UTF_16:`utf-16le`,UTF16LE:`utf-16le`,UTF_16LE:`utf-16le`,UTF16BE:`utf-16be`,UTF_16BE:`utf-16be`};function Mo(e){if(e.length>=3&&e[0]===239&&e[1]===187&&e[2]===191)return`utf-8`;if(e.length>=2&&e[0]===255&&e[1]===254)return`utf-16le`;if(e.length>=2&&e[0]===254&&e[1]===255)return`utf-16be`}function No(e){let t=Fo(e.subarray(0,Math.min(e.byteLength,131072)),`iso-8859-1`).replace(/\r\n/g,`
80
+ `).replace(/\r/g,`
81
+ `).split(`
82
+ `);for(let e=0;e<t.length-3;e++)if(!(t[e]?.trim()!==`9`||t[e+1]?.trim().toUpperCase()!==`$DWGCODEPAGE`))for(let n=e+2;n<Math.min(e+10,t.length-1);n+=2){let e=t[n]?.trim(),r=t[n+1]?.trim();if(e===`3`&&r)return r}}function Po(e){let t=e?.trim();if(!t)return;let n=t.replace(/[-\s]+/g,`_`).toUpperCase();if(jo[n])return jo[n];let r=/^ANSI_(\d{3,4})$/.exec(n);if(r)return Po(`cp${r[1]}`);let i=/^CP(\d{3,4})$/.exec(n);return i?i[1]===`936`?`gb18030`:i[1]===`950`?`big5`:i[1]===`932`?`shift_jis`:i[1]===`949`?`euc-kr`:`windows-${i[1]}`:t}function Fo(e,t){try{return new TextDecoder(t,{fatal:!1}).decode(e)}catch{return new TextDecoder(`utf-8`,{fatal:!1}).decode(e)}}function Io(e){let t=[`windows-1252`,`gb18030`,`big5`,`shift_jis`,`euc-kr`,`iso-8859-1`],n=``,r=1/0;for(let i of t){let t=Fo(e,i),a=Lo(t,i);a<r&&(r=a,n=t)}return n||Fo(e,`utf-8`)}function Lo(e,t){let n=Ro(e,/\uFFFD/g),r=Ro(e,/[\u0000-\u0008\u000B\u000C\u000E-\u001F]/g),i=Ro(e,/[\u3400-\u9FFF\uF900-\uFAFF]/g),a=e.includes(`SECTION`)&&(e.includes(`ENTITIES`)||e.includes(`HEADER`)),o=n*1e4+r*1e3;return a&&(o-=500),t===`windows-1252`&&(o-=2),t===`gb18030`&&i>=2&&(o-=50+Math.min(i,200)*2),o}function Ro(e,t){return e.match(t)?.length??0}function zo(e){let t=q(e);if(t!==void 0)return t.replace(/\\U\+([0-9a-fA-F]{4,6})/g,(e,t)=>{let n=Number.parseInt(t,16);return Number.isFinite(n)&&n>=0&&n<=1114111?String.fromCodePoint(n):e}).replace(/%%[cC]/g,`∅`).replace(/%%[dD]/g,`°`).replace(/%%[pP]/g,`±`).replace(/\\P/g,`
83
+ `)}function Bo(e){let t=e.replace(/\r\n/g,`
84
+ `).replace(/\r/g,`
85
+ `).split(`
86
+ `),n=[];for(let e=0;e<t.length-1;e+=2){let r=Number(t[e]?.trim()),i=t[e+1]??``;Number.isFinite(r)&&n.push({code:r,value:i.trimEnd()})}let r=[],i={},a=``,o=[],s;for(let e=0;e<n.length;e++){let t=n[e];if(t.code===0&&t.value===`SECTION`){a=n[e+1]?.code===2?n[e+1].value.toUpperCase():``,e++;continue}if(t.code===0&&t.value===`ENDSEC`){c(),a=``;continue}a===`ENTITIES`&&(t.code===0?(c(),o=[t]):o.push(t))}return c(),{header:{},tables:{},entities:r,blocks:i};function c(){if(!o.length)return;let e=o[0]?.value.toUpperCase();if(e===`VERTEX`&&s){let e=Q(o,10,20,30);e&&(s.vertices??=[]).push({...e,bulge:Z(o,42)}),o=[];return}if(e===`SEQEND`){s&&r.push(s),s=void 0,o=[];return}if(s&&=(r.push(s),void 0),!e||e===`EOF`){o=[];return}let t=Vo(e,o);e===`POLYLINE`?s=t:r.push(t),o=[]}}function Vo(e,t){let n={type:e,handle:Ho(t,5),layer:Ho(t,8)??`0`,colorIndex:Z(t,62),trueColor:Z(t,420),lineType:Ho(t,6),lineweight:Z(t,370)};switch(e){case`LINE`:Object.assign(n,{startPoint:Q(t,10,20,30),endPoint:Q(t,11,21,31)});break;case`CIRCLE`:Object.assign(n,{center:Q(t,10,20,30),radius:Z(t,40)});break;case`ARC`:Object.assign(n,{center:Q(t,10,20,30),radius:Z(t,40),startAngle:Ko(Z(t,50)),endAngle:Ko(Z(t,51))});break;case`POINT`:Object.assign(n,{point:Q(t,10,20,30)});break;case`TEXT`:case`MTEXT`:Object.assign(n,{insertionPoint:Q(t,10,20,30),text:Go(t),textHeight:Z(t,40),rotation:Ko(Z(t,50))});break;case`LWPOLYLINE`:Object.assign(n,{vertices:Wo(t),flag:Z(t,70),isClosed:(Number(Z(t,70)??0)&1)==1});break;case`POLYLINE`:Object.assign(n,{vertices:[],flag:Z(t,70),isClosed:(Number(Z(t,70)??0)&1)==1});break;case`ELLIPSE`:Object.assign(n,{center:Q(t,10,20,30),majorAxisEndPoint:Q(t,11,21,31),axisRatio:Z(t,40),startAngle:Z(t,41),endAngle:Z(t,42)});break;case`SPLINE`:Object.assign(n,{controlPoints:Uo(t,10,20,30),degree:Z(t,71),isClosed:(Number(Z(t,70)??0)&1)==1});break;case`INSERT`:Object.assign(n,{name:Ho(t,2),blockName:Ho(t,2),insertionPoint:Q(t,10,20,30),rotation:Ko(Z(t,50)),scale:{x:Z(t,41)??1,y:Z(t,42)??Z(t,41)??1,z:Z(t,43)??1}});break;case`SOLID`:case`TRACE`:case`3DFACE`:Object.assign(n,{vertices:[Q(t,10,20,30),Q(t,11,21,31),Q(t,12,22,32),Q(t,13,23,33)].filter(Boolean)});break}return bo(n)}function Z(e,t){let n=e.find(e=>e.code===t)?.value,r=Number(n);return Number.isFinite(r)?r:void 0}function Ho(e,t){let n=e.find(e=>e.code===t)?.value;return n&&n.length>0?n:void 0}function Q(e,t,n,r){let i=Z(e,t),a=Z(e,n),o=Z(e,r);if(!(i===void 0||a===void 0))return o===void 0?{x:i,y:a}:{x:i,y:a,z:o}}function Uo(e,t,n,r){let i=[];for(let a=0;a<e.length;a++){if(e[a].code!==t)continue;let o=Number(e[a].value),s=e.slice(a+1).find(e=>e.code===n),c=e.slice(a+1).find(e=>e.code===r),l=Number(s?.value),u=Number(c?.value);Number.isFinite(o)&&Number.isFinite(l)&&i.push(Number.isFinite(u)?{x:o,y:l,z:u}:{x:o,y:l})}return i}function Wo(e){let t=[];for(let n=0;n<e.length;n++){if(e[n].code!==10)continue;let r=Number(e[n].value),i,a;for(let t=n+1;t<e.length&&e[t].code!==10;t++)e[t].code===20&&(i=Number(e[t].value)),e[t].code===42&&(a=Number(e[t].value));Number.isFinite(r)&&Number.isFinite(i)&&t.push({x:r,y:i,bulge:Number.isFinite(a)?a:void 0})}return t}function Go(e){let t=e.filter(e=>e.code===1||e.code===3).map(e=>e.value);return t.length?t.join(``):void 0}function Ko(e){return typeof e==`number`&&Number.isFinite(e)?uo(e):void 0}var qo=class{constructor(e={}){W(this,`id`,`dwf`),W(this,`label`,`DWF/DWFx native viewer powered by dwf-viewer`),W(this,`formats`,[`dwf`,`dwfx`,`xps`]),W(this,`nativeRenderer`,!0),W(this,`defaults`),W(this,`native`),W(this,`host`),W(this,`lastStats`),this.defaults=e}accepts(e,t){let n=Ma(e);if(n===`dwf`||n===`dwfx`||n===`xps`)return!0;let r=Na(e,t);return r===`dwf`||r===`dwfx`||r===`xps`}async load(e,t={}){var n,r,i;let a={...this.defaults,...t},o=performance.now(),s=e.fileName??e.file?.name,c=await Aa(e),l=es(Na(e,c),Ma(e));(n=a.onProgress)==null||n.call(a,{phase:`parse`,format:l,message:`Opening DWF/DWFx with dwf-viewer…`,percent:48});let u=await Cr(c,{fileName:s});(r=a.onProgress)==null||r.call(a,{phase:`normalize`,format:l,message:`Reading DWF pages, sheets and model metadata…`,percent:76});let d=Jo(u,s,l,a.keepRaw===!0),f=performance.now()-o;return(i=a.onProgress)==null||i.call(a,{phase:`done`,format:d.format,message:`DWF/DWFx document ready.`,percent:100,elapsedMs:f}),{document:d,raw:a.keepRaw?u:void 0,bytes:c.byteLength,elapsedMs:f,format:d.format,warnings:d.warnings}}async mount(e,t,n={}){var r,i,a,o;let s={...this.defaults,...n},c=performance.now(),l=e.fileName??e.file?.name,u=await Aa(e),d=es(Na(e,u),Ma(e)),f=ts(s),p=ns(s),m=rs(s,f,p),h=is(s,f,p);(r=s.onProgress)==null||r.call(s,{phase:`native-render`,format:d,message:`Mounting native DWF renderer…`,percent:28}),this.unmount(),this.host=t,t.replaceChildren(),this.native=new Ta(t,m),(i=s.onProgress)==null||i.call(s,{phase:`parse`,format:d,message:`Parsing DWF package and page streams…`,percent:58}),await this.native.load(u,{fileName:l,...h}),(a=s.onProgress)==null||a.call(s,{phase:`render`,format:d,message:`Rendering DWF/DWFx with dwf-viewer…`,percent:88}),this.lastStats=await this.native.render();let g=this.native.getDocument(),_=Jo(g,l,d,s.keepRaw===!0);_.metadata.loaderMode=`Native DWF`,_.metadata.nativeRenderer=`dwf-viewer`,_.metadata.nativeRenderStats=this.lastStats?{...this.lastStats,warnings:this.lastStats.warnings.length}:void 0;let v=performance.now()-c;return(o=s.onProgress)==null||o.call(s,{phase:`done`,format:_.format,message:`DWF/DWFx rendered.`,percent:100,elapsedMs:v}),{document:_,raw:s.keepRaw?g:void 0,bytes:u.byteLength,elapsedMs:v,format:_.format,warnings:_.warnings}}unmount(){var e;(e=this.native)==null||e.dispose(),this.native=void 0,this.lastStats=void 0,this.host&&this.host.replaceChildren()}fit(){var e;(e=this.native)==null||e.fit()}zoomIn(){(this.native?.zoomInButton)?.click()}zoomOut(){(this.native?.zoomOutButton)?.click()}resize(){var e;(e=this.native)==null||e.render()}setNativeOptions(e){var t,n,r,i;let a=this.native;if(a){if(typeof e.dwfBackground==`string`)a.background=e.dwfBackground;else{let t=ns(e);t&&(a.background=t)}typeof e.dwfPreferWebgl==`boolean`&&((t=a.setPreferWebgl)==null||t.call(a,e.dwfPreferWebgl)),typeof e.dwfPreferWasm==`boolean`&&((n=a.setPreferWasm)==null||n.call(a,e.dwfPreferWasm)),e.dwfLineWeightMode&&((r=a.setLineWeightMode)==null||r.call(a,e.dwfLineWeightMode)),as(a,`minStrokeCssPx`,e.dwfMinStrokeCssPx),as(a,`maxOverviewStrokeCssPx`,e.dwfMaxOverviewStrokeCssPx),as(a,`minTextCssPx`,e.dwfMinTextCssPx),as(a,`minFilledAreaCssPx`,e.dwfMinFilledAreaCssPx),(i=a.render)==null||i.call(a)}}getLastNativeStats(){return this.lastStats}};function Jo(e,t,n,r){let i=$o(e?.diagnostics??[]),a=(e?.pageData??[]).map((e,t)=>Yo(e,t));for(let t of e?.pageData??[])i.push(...$o(t.diagnostics));let o={parser:`dwf-viewer`,nativeRenderer:`dwf-viewer`,dwfKind:e?.kind,packageEntries:e?.packageEntries?.length??0,resources:e?.resources?.length??0,pageKinds:ls((e?.pageData??[]).map(e=>e.kind)),pageNames:(e?.pages??[]).map(e=>e.name)};return Qa({format:n,sourceName:t,layers:{},blocks:{},pages:a,entities:ao(a),metadata:o,warnings:us(i),raw:r?e:void 0})}function Yo(e,t){let n=Xo(e,t);return{index:t,name:e.name||e.sourcePath||`${t+1}`,width:e.width||1e3,height:e.height||1e3,entities:n}}function Xo(e,t){return e.kind===`w2d-text`?e.primitives.flatMap((e,n)=>Zo(e,t,n)):e.kind===`image`?[{type:`DWF_IMAGE_PAGE`,kind:`image`,pageIndex:t,width:e.width,height:e.height,imageSource:e.sourcePath}]:e.kind===`w3d-model`?e.model.meshes.map((e,n)=>({id:e.id,type:`W3D_MESH`,kind:`solid`,pageIndex:t,color:e.color?ss(e.color):void 0,name:e.name||`mesh-${n+1}`,raw:{vertexCount:e.vertexCount,triangleCount:e.triangleCount,materialId:e.materialId}})):e.kind===`xps-fixed-page`?[{type:`XPS_FIXED_PAGE`,kind:`viewport`,pageIndex:t,width:e.width,height:e.height,raw:{sourcePath:e.sourcePath}}]:[{type:`DWF_PAGE`,kind:`viewport`,pageIndex:t,width:e.width,height:e.height,raw:{sourcePath:e.sourcePath}}]}function Zo(e,t,n){let r={id:`dwf-${t}-${n}`,pageIndex:t,color:e.stroke,fillColor:e.fill,lineweight:e.lineWidth,raw:{matrix:e.matrix}};if(e.type===`polyline`||e.type===`polygon`)return[{...r,type:e.type===`polygon`?`DWF_POLYGON`:`DWF_POLYLINE`,kind:`polyline`,vertices:Qo(e.points),isClosed:e.type===`polygon`}];if(e.type===`path`)return[{...r,type:`DWF_PATH`,kind:`path`,commands:e.commands}];if(e.type===`text`)return[{...r,type:`DWF_TEXT`,kind:`text`,insertionPoint:{x:e.x,y:e.y,z:0},text:e.text,textHeight:e.size}];if(e.type===`rect`){let t=e.x,n=e.y,i=e.width,a=e.height;return[{...r,type:`DWF_RECT`,kind:`polyline`,isClosed:!0,vertices:[{x:t,y:n,z:0},{x:t+i,y:n,z:0},{x:t+i,y:n+a,z:0},{x:t,y:n+a,z:0}]}]}return[]}function Qo(e){let t=[];for(let n=0;n+1<e.length;n+=2)t.push({x:e[n],y:e[n+1],z:0});return t}function $o(e){return e.filter(e=>e.level!==`info`).map(e=>`${e.code}: ${e.message}${e.source?` (${e.source})`:``}`)}function es(e,t){return t===`dwf`||t===`dwfx`||t===`xps`?t:e===`dwf`||e===`dwfx`||e===`xps`?e:`dwf`}function ts(e){if(e.dwfWasmUrl)return e.dwfWasmUrl;if(typeof document>`u`)return;let t=e.wasmPath?new URL(os(e.wasmPath),document.baseURI).href:new URL(`wasm/`,document.baseURI).href;return new URL(`dwfv-render.wasm`,t).href}function ns(e){return e.dwfBackground?e.dwfBackground:e.canvasOptions?.background??`#05070d`}function rs(e,t,n){return{...is(e,t,n),maxDevicePixelRatio:e.dwfMaxDevicePixelRatio??2,maxCanvasPixels:e.dwfMaxCanvasPixels??16777216}}function is(e,t,n){return{wasmUrl:t,preferWebgl:e.dwfPreferWebgl??!0,preferWasm:e.dwfPreferWasm??!0,background:n,maxGpuCacheBytes:e.dwfMaxGpuCacheBytes??160*1024*1024,maxCachedScenes:e.dwfMaxCachedScenes??2,lineWeightMode:e.dwfLineWeightMode??`adaptive`,minStrokeCssPx:e.dwfMinStrokeCssPx,maxOverviewStrokeCssPx:e.dwfMaxOverviewStrokeCssPx,minTextCssPx:e.dwfMinTextCssPx,minFilledAreaCssPx:e.dwfMinFilledAreaCssPx}}function as(e,t,n){typeof n==`number`&&Number.isFinite(n)&&(e[t]=n)}function os(e){return e.endsWith(`/`)?e:`${e}/`}function ss(e){let[t,n,r]=e.map(e=>Math.max(0,Math.min(255,Math.round(e*255))));return`#${cs(t)}${cs(n)}${cs(r)}`}function cs(e){return e.toString(16).padStart(2,`0`)}function ls(e){let t={};for(let n of e)t[n]=(t[n]??0)+1;return t}function us(e){return Array.from(new Set(e))}function ds(e={}){return new Fa([new Ya(e),new _o(e),new qo(e)])}function fs(e){let t=e;return t.nativeRenderer===!0&&typeof t.mount==`function`}var ps={1:`#ff0000`,2:`#ffff00`,3:`#00ff00`,4:`#00ffff`,5:`#0000ff`,6:`#ff00ff`,8:`#808080`,9:`#c0c0c0`,10:`#ff0000`,11:`#ff7f7f`,12:`#a50000`,13:`#a55252`,14:`#7f0000`,15:`#7f3f3f`,16:`#4c0000`,17:`#4c2626`,18:`#260000`,19:`#261313`,20:`#ff3f00`,21:`#ff9f7f`,22:`#a52900`,23:`#a56752`,24:`#7f1f00`,25:`#7f4f3f`,26:`#4c1300`,27:`#4c2f26`,28:`#260900`,29:`#261713`,30:`#ff7f00`,31:`#ffbf7f`,32:`#a55200`,33:`#a57c52`,34:`#7f3f00`,35:`#7f5f3f`,36:`#4c2600`,37:`#4c3926`,38:`#261300`,39:`#261c13`,40:`#ffbf00`,41:`#ffdf7f`,42:`#a57c00`,43:`#a59152`,44:`#7f5f00`,45:`#7f6f3f`,46:`#4c3900`,47:`#4c4226`,48:`#261c00`,49:`#262113`,50:`#ffff00`,51:`#ffff7f`,52:`#a5a500`,53:`#a5a552`,54:`#7f7f00`,55:`#7f7f3f`,56:`#4c4c00`,57:`#4c4c26`,58:`#262600`,59:`#262613`,60:`#bfff00`,61:`#dfff7f`,62:`#7ca500`,63:`#91a552`,64:`#5f7f00`,65:`#6f7f3f`,66:`#394c00`,67:`#424c26`,68:`#1c2600`,69:`#212613`,70:`#7fff00`,71:`#bfff7f`,72:`#52a500`,73:`#7ca552`,74:`#3f7f00`,75:`#5f7f3f`,76:`#264c00`,77:`#394c26`,78:`#132600`,79:`#1c2613`,80:`#3fff00`,81:`#9fff7f`,82:`#29a500`,83:`#67a552`,84:`#1f7f00`,85:`#4f7f3f`,86:`#134c00`,87:`#2f4c26`,88:`#092600`,89:`#172613`,90:`#00ff00`,91:`#7fff7f`,92:`#00a500`,93:`#52a552`,94:`#007f00`,95:`#3f7f3f`,96:`#004c00`,97:`#264c26`,98:`#002600`,99:`#132613`,100:`#00ff3f`,101:`#7fff9f`,102:`#00a529`,103:`#52a567`,104:`#007f1f`,105:`#3f7f4f`,106:`#004c13`,107:`#264c2f`,108:`#002609`,109:`#132617`,110:`#00ff7f`,111:`#7fffbf`,112:`#00a552`,113:`#52a57c`,114:`#007f3f`,115:`#3f7f5f`,116:`#004c26`,117:`#264c39`,118:`#002613`,119:`#13261c`,120:`#00ffbf`,121:`#7fffdf`,122:`#00a57c`,123:`#52a591`,124:`#007f5f`,125:`#3f7f6f`,126:`#004c39`,127:`#264c42`,128:`#00261c`,129:`#132621`,130:`#00ffff`,131:`#7fffff`,132:`#00a5a5`,133:`#52a5a5`,134:`#007f7f`,135:`#3f7f7f`,136:`#004c4c`,137:`#264c4c`,138:`#002626`,139:`#132626`,140:`#00bfff`,141:`#7fdfff`,142:`#007ca5`,143:`#5291a5`,144:`#005f7f`,145:`#3f6f7f`,146:`#00394c`,147:`#26424c`,148:`#001c26`,149:`#132126`,150:`#007fff`,151:`#7fbfff`,152:`#0052a5`,153:`#527ca5`,154:`#003f7f`,155:`#3f5f7f`,156:`#00264c`,157:`#26394c`,158:`#001326`,159:`#131c26`,160:`#003fff`,161:`#7f9fff`,162:`#0029a5`,163:`#5267a5`,164:`#001f7f`,165:`#3f4f7f`,166:`#00134c`,167:`#262f4c`,168:`#000926`,169:`#131726`,170:`#0000ff`,171:`#7f7fff`,172:`#0000a5`,173:`#5252a5`,174:`#00007f`,175:`#3f3f7f`,176:`#00004c`,177:`#26264c`,178:`#000026`,179:`#131326`,180:`#3f00ff`,181:`#9f7fff`,182:`#2900a5`,183:`#6752a5`,184:`#1f007f`,185:`#4f3f7f`,186:`#13004c`,187:`#2f264c`,188:`#090026`,189:`#171326`,190:`#7f00ff`,191:`#bf7fff`,192:`#5200a5`,193:`#7c52a5`,194:`#3f007f`,195:`#5f3f7f`,196:`#26004c`,197:`#39264c`,198:`#130026`,199:`#1c1326`,200:`#bf00ff`,201:`#df7fff`,202:`#7c00a5`,203:`#9152a5`,204:`#5f007f`,205:`#6f3f7f`,206:`#39004c`,207:`#42264c`,208:`#1c0026`,209:`#211326`,210:`#ff00ff`,211:`#ff7fff`,212:`#a500a5`,213:`#a552a5`,214:`#7f007f`,215:`#7f3f7f`,216:`#4c004c`,217:`#4c264c`,218:`#260026`,219:`#261326`,220:`#ff00bf`,221:`#ff7fdf`,222:`#a5007c`,223:`#a55291`,224:`#7f005f`,225:`#7f3f6f`,226:`#4c0039`,227:`#4c2642`,228:`#26001c`,229:`#261321`,230:`#ff007f`,231:`#ff7fbf`,232:`#a50052`,233:`#a5527c`,234:`#7f003f`,235:`#7f3f5f`,236:`#4c0026`,237:`#4c2639`,238:`#260013`,239:`#26131c`,240:`#ff003f`,241:`#ff7f9f`,242:`#a50029`,243:`#a55267`,244:`#7f001f`,245:`#7f3f4f`,246:`#4c0013`,247:`#4c262f`,248:`#260009`,249:`#261317`,250:`#333333`,251:`#505050`,252:`#696969`,253:`#828282`,254:`#bebebe`,255:`#ffffff`};function ms(e,t=`#ffffff`,n=t){if(typeof e!=`number`||Number.isNaN(e))return t;let r=Math.abs(Math.trunc(e));return r===0||r===256||r===257?t:r===7?n:ps[r]??t}function hs(e,t=`rgb`){let n=Math.max(0,Math.trunc(e))&16777215,r=n>>16&255,i=n>>8&255,a=n&255;return`rgb(${t===`rgb`?r:a}, ${i}, ${t===`rgb`?a:r})`}function gs(e){if(typeof e==`string`){let t=e.trim();return t?/^(#|rgb\(|rgba\(|hsl\(|hsla\()/i.test(t)?_s(t)??t:{red:`#ff0000`,yellow:`#ffff00`,green:`#00ff00`,cyan:`#00ffff`,blue:`#0000ff`,magenta:`#ff00ff`,white:`#ffffff`,black:`#000000`,grey:`#808080`,gray:`#808080`}[t.toLowerCase()]:void 0}if(e&&typeof e==`object`){let t=e,n=Number(t.r??t.red),r=Number(t.g??t.green),i=Number(t.b??t.blue),a=Number(t.a??t.alpha??1);if([n,r,i].every(Number.isFinite))return Number.isFinite(a)&&a>=0&&a<1?`rgba(${n}, ${r}, ${i}, ${a})`:`rgb(${n}, ${r}, ${i})`}}function _s(e){if(!e)return;let t=e.trim();if(/^#[0-9a-f]{8}$/i.test(t)){let e=parseInt(t.slice(1,3),16)/255,n=parseInt(t.slice(3,5),16),r=parseInt(t.slice(5,7),16),i=parseInt(t.slice(7,9),16);return e>=.999?`rgb(${n}, ${r}, ${i})`:`rgba(${n}, ${r}, ${i}, ${Ls(e)})`}if(/^#[0-9a-f]{6}$/i.test(t)||/^#[0-9a-f]{3}$/i.test(t))return t;if(/^sc#/i.test(t)){let e=t.slice(3).split(`,`).map(e=>Number(e.trim())),[n,r,i,a]=e.length===4?e:[1,...e];if([n,r,i,a].every(Number.isFinite))return`rgba(${Math.round(r*255)}, ${Math.round(i*255)}, ${Math.round(a*255)}, ${Ls(n)})`}}function vs(e,t,n={}){let r=n.foreground??`#ffffff`,i=r,a,o=gs(e.trueColor)??gs(e.color)??gs(e.colorName);if(o&&(a=o),!a){let t=ks(e,[`trueColor`,`true_color`,`truecolor`,`colorRGB`,`colorRgb`,`rgbColor`,`rgb`]);typeof t==`number`&&t>=0&&t<=16777215&&(a=hs(t,n.trueColorByteOrder??`rgb`))}if(!a){let t=Os(e.colorIndex,e.colorNumber,e.aci);typeof t==`number`&&Math.abs(t)<=257&&t!==256&&t!==0&&t!==257&&(a=ms(t,i,r))}if(!a&&typeof e.color==`number`){let t=Number(e.color);Math.abs(t)<=257?t!==0&&t!==256&&t!==257&&(a=ms(t,i,r)):a=hs(t,n.trueColorByteOrder??`rgb`)}return a||=Cs(Ds(t,e.layer),n),bs(a??i,n)}function ys(e,t,n={}){let r,i=gs(e.fillColor);if(i&&(r=i),!r&&typeof e.fillColor==`number`){let t=e.fillColor;r=Math.abs(t)<=257?ms(t,n.foreground??`#ffffff`,n.foreground??`#ffffff`):hs(t,n.trueColorByteOrder??`rgb`)}return!r&&typeof e.fillColorIndex==`number`&&(r=ms(e.fillColorIndex,n.foreground??`#ffffff`,n.foreground??`#ffffff`)),r?bs(r,n):void 0}function bs(e,t={}){return t.contrastMode===`adaptive`?xs(e,t.background??`#0b1020`,t.foreground??`#ffffff`,t.minColorContrast??2.4):e}function xs(e,t,n,r=2.4){let i=As(n)??{r:255,g:255,b:255,a:1},a=As(t)??{r:11,g:16,b:32,a:1},o=As(e);if(!o||Ps(js(o,a),a)>=r)return e;let s=Ns(a),c=s<.5?{r:255,g:255,b:255,a:o.a}:{r:0,g:0,b:0,a:o.a};for(let e of[.25,.4,.55,.7,.85,1]){let t=Ms(o,c,e);if(Ps(js(t,a),a)>=r)return Fs(t)}return Ps(i,a)>=r?Fs(i):s<.5?`#ffffff`:`#000000`}function Ss(e){return e?e.isVisible!==!1&&e.isFrozen!==!0:!0}function Cs(e,t){if(!e)return;let n=t.foreground??`#ffffff`,r=gs(e.trueColor);if(r)return r;if(typeof e.trueColor==`number`&&e.trueColor>=0&&e.trueColor<=16777215)return hs(e.trueColor,t.trueColorByteOrder??`rgb`);let i=gs(e.color);if(i)return i;if(Es(e.colorIndex))return ms(e.colorIndex,n,n);if(typeof e.color==`number`){let r=Number(e.color);return Math.abs(r)<=257?ms(r,n,n):hs(r,t.trueColorByteOrder??`rgb`)}if(typeof e.colorIndex==`number`)return ms(e.colorIndex,n,n)}function ws(e){return Os(e.colorIndex,e.colorNumber,e.aci)===0?!0:e.trueColor===void 0&&e.color===0}function Ts(e,t,n,r={}){if(!ws(e))return e;let i=vs(t,n,r);return{...e,color:i,trueColor:void 0,colorIndex:void 0,colorNumber:void 0}}function Es(e){return typeof e==`number`&&Number.isFinite(e)&&Math.abs(Math.trunc(e))>=1&&Math.abs(Math.trunc(e))<=255}function Ds(e,t){if(!(!e||!t))return e.layers[t]??e.layers[t.toLowerCase()]??Object.values(e.layers).find(e=>e.name.toLowerCase()===t.toLowerCase())}function Os(...e){for(let t of e)if(typeof t==`number`&&Number.isFinite(t))return t}function ks(e,t){let n=e;for(let e of t){let t=n[e];if(typeof t==`number`&&Number.isFinite(t))return t}}function As(e){let t=e.trim().toLowerCase();if(/^#[0-9a-f]{3}$/i.test(t))return{r:parseInt(t[1]+t[1],16),g:parseInt(t[2]+t[2],16),b:parseInt(t[3]+t[3],16),a:1};if(/^#[0-9a-f]{6}$/i.test(t))return{r:parseInt(t.slice(1,3),16),g:parseInt(t.slice(3,5),16),b:parseInt(t.slice(5,7),16),a:1};let n=t.match(/^rgba?\(([^)]+)\)$/i);if(n){let e=n[1].split(/[,\s/]+/).filter(Boolean).map(e=>Number(e.replace(`%`,``)));if(e.length>=3&&e.slice(0,3).every(Number.isFinite)){let t=/%/.test(n[1]);return{r:Is(t?e[0]*2.55:e[0]),g:Is(t?e[1]*2.55:e[1]),b:Is(t?e[2]*2.55:e[2]),a:Number.isFinite(e[3])?Math.max(0,Math.min(1,e[3])):1}}}}function js(e,t){let n=e.a+t.a*(1-e.a);return n<=0?{r:0,g:0,b:0,a:0}:{r:(e.r*e.a+t.r*t.a*(1-e.a))/n,g:(e.g*e.a+t.g*t.a*(1-e.a))/n,b:(e.b*e.a+t.b*t.a*(1-e.a))/n,a:n}}function Ms(e,t,n){let r=Math.max(0,Math.min(1,n));return{r:e.r+(t.r-e.r)*r,g:e.g+(t.g-e.g)*r,b:e.b+(t.b-e.b)*r,a:e.a}}function Ns(e){let t=[e.r,e.g,e.b].map(e=>{let t=e/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4});return .2126*t[0]+.7152*t[1]+.0722*t[2]}function Ps(e,t){let n=Ns(e),r=Ns(t),i=Math.max(n,r),a=Math.min(n,r);return(i+.05)/(a+.05)}function Fs(e){let t=Is(e.r),n=Is(e.g),r=Is(e.b);return e.a<.999?`rgba(${t}, ${n}, ${r}, ${Ls(e.a)})`:`rgb(${t}, ${n}, ${r})`}function Is(e){return Math.max(0,Math.min(255,Math.round(e)))}function Ls(e){return Math.round(e*1e3)/1e3}function Rs(e,t){return{a:e.a*t.a+e.c*t.b,b:e.b*t.a+e.d*t.b,c:e.a*t.c+e.c*t.d,d:e.b*t.c+e.d*t.d,e:e.a*t.e+e.c*t.f+e.e,f:e.b*t.e+e.d*t.f+e.f}}function zs(e,t){return{a:1,b:0,c:0,d:1,e,f:t}}function Bs(e){let t=Math.cos(e),n=Math.sin(e);return{a:t,b:n,c:-n,d:t,e:0,f:0}}function Vs(e,t=e){return{a:e,b:0,c:0,d:t,e:0,f:0}}function $(e,t){return{x:e.x*t.a+e.y*t.c+t.e,y:e.x*t.b+e.y*t.d+t.f,z:`z`in e?e.z:void 0}}function Hs(e,t){if(e)return e.map(e=>({cmd:e.cmd,points:e.points.map(e=>$(e,t))}))}function Us(e,t={x:0,y:0}){let n=e.insertionPoint??{x:0,y:0},r=e.scale,i=Number(typeof r==`object`&&r?r.x??1:e.scaleX??1),a=Number(typeof r==`object`&&r?r.y??i:e.scaleY??i),o=Number(e.rotation??0),s=zs(n.x,n.y);return s=Rs(s,Bs(Number.isFinite(o)?o:0)),s=Rs(s,Vs(Number.isFinite(i)?i:1,Number.isFinite(a)?a:1)),s=Rs(s,zs(-t.x,-t.y)),s}function Ws(e,t){let n={...e,raw:e.raw??e};if(e.startPoint&&(n.startPoint=$(e.startPoint,t)),e.endPoint&&(n.endPoint=$(e.endPoint,t)),e.center&&(n.center=$(e.center,t)),e.insertionPoint&&(n.insertionPoint=$(e.insertionPoint,t)),e.majorAxisEndPoint){let r=$({x:0,y:0},t),i=$(e.majorAxisEndPoint,t);n.majorAxisEndPoint={x:i.x-r.x,y:i.y-r.y,z:i.z}}e.vertices&&(n.vertices=e.vertices.map(e=>({...$(e,t),bulge:e.bulge,startWidth:e.startWidth,endWidth:e.endWidth}))),e.points&&(n.points=e.points.map(e=>$(e,t))),e.controlPoints&&(n.controlPoints=e.controlPoints.map(e=>$(e,t))),e.fitPoints&&(n.fitPoints=e.fitPoints.map(e=>$(e,t))),e.commands&&(n.commands=Hs(e.commands,t)),e.loops&&(n.loops=e.loops.map(e=>({...e,vertices:e.vertices?.map(e=>$(e,t)),commands:Hs(e.commands,t)})));let r=Math.sqrt(Math.abs(t.a*t.d-t.b*t.c));return typeof e.radius==`number`&&Number.isFinite(r)&&(n.radius=e.radius*r),n}var Gs={background:`#0b1020`,foreground:`#ffffff`,showUnsupportedMarkers:!1,showImagePlaceholders:!0,showPageBounds:!0,minScale:1e-9,maxScale:1e9,wheelZoomFactor:1.14,trueColorByteOrder:`rgb`,maxInsertDepth:16,contrastMode:`adaptive`,minColorContrast:2.4,maxCurveSegments:96,spatialIndexCellCount:72,maxVerticesPerBatch:65536,textMinPixelHeight:4,maxVisibleTextLabels:2500,powerPreference:`high-performance`,antialias:!0,preserveDrawingBuffer:!1,enableSpatialIndex:!0},Ks=class{constructor(e,t={}){W(this,`canvas`),W(this,`ctx`),W(this,`opts`),W(this,`document`),W(this,`bounds`,oo()),W(this,`view`,{centerX:0,centerY:0,scale:1}),W(this,`fitScale`,1),W(this,`dpr`,1),W(this,`isDragging`,!1),W(this,`lastPointer`),W(this,`resizeObserver`),W(this,`imageCache`,new Map),W(this,`stats`,{total:0,drawn:0,skipped:0,byType:{},unsupported:{},renderElapsedMs:0,backend:`canvas2d`}),W(this,`onStats`),W(this,`onViewChange`);let n=e.getContext(`2d`);if(!n)throw Error(`Canvas 2D context is not available.`);this.canvas=e,this.ctx=n,this.opts={...Gs,...t},this.canvas.classList.add(`cad-viewer-canvas`),this.bindEvents(),typeof ResizeObserver<`u`&&(this.resizeObserver=new ResizeObserver(()=>this.resize()),this.resizeObserver.observe(e)),this.resize()}destroy(){var e;(e=this.resizeObserver)==null||e.disconnect()}clear(){this.document=void 0,this.bounds=oo(),this.view={centerX:0,centerY:0,scale:1},this.fitScale=1,this.render(),this.emitViewChange()}setDocument(e){this.document=e,this.bounds=this.computeBounds(e),this.fitToView()}getDocument(){return this.document}setOptions(e){Object.assign(this.opts,e),this.render(),this.emitViewChange()}getOptions(){return{...this.opts}}fitToView(e=.92){if(!so(this.bounds)){this.view={centerX:0,centerY:0,scale:1},this.fitScale=1,this.render(),this.emitViewChange();return}let t=Math.max(1,this.cssWidth),n=Math.max(1,this.cssHeight),r=Math.max(this.bounds.maxX-this.bounds.minX,1e-9),i=Math.max(this.bounds.maxY-this.bounds.minY,1e-9),a=this.clampScale(Math.min(t/r,n/i)*e);this.fitScale=a,this.view={centerX:(this.bounds.minX+this.bounds.maxX)/2,centerY:(this.bounds.minY+this.bounds.maxY)/2,scale:a},this.render(),this.emitViewChange()}resize(){this.dpr=Math.max(1,window.devicePixelRatio||1);let e=Math.max(1,Math.floor(this.cssWidth*this.dpr)),t=Math.max(1,Math.floor(this.cssHeight*this.dpr));(this.canvas.width!==e||this.canvas.height!==t)&&(this.canvas.width=e,this.canvas.height=t),this.render(),this.emitViewChange()}zoom(e,t){if(!Number.isFinite(e)||e<=0)return;let n=t??{x:this.cssWidth/2,y:this.cssHeight/2},r=this.screenToWorld(n);this.view.scale=this.clampScale(this.view.scale*e);let i=this.screenToWorld(n);this.view.centerX+=r.x-i.x,this.view.centerY+=r.y-i.y,this.render(),this.emitViewChange()}zoomIn(){this.zoom(this.opts.wheelZoomFactor)}zoomOut(){this.zoom(1/this.opts.wheelZoomFactor)}panByScreenDelta(e,t){!Number.isFinite(e)||!Number.isFinite(t)||(this.view.centerX-=e/this.view.scale,this.view.centerY+=t/this.view.scale,this.render(),this.emitViewChange())}setViewState(e){if(![e.centerX,e.centerY,e.scale].every(Number.isFinite))throw Error(`Invalid view state.`);this.view={...e,scale:this.clampScale(e.scale)},this.render(),this.emitViewChange()}getViewState(){return{...this.view}}getBounds(){return{...this.bounds}}getStats(){return qs(this.stats)}getZoomRatio(){return Math.abs(this.fitScale)<1e-12?1:this.view.scale/this.fitScale}getZoomPercent(){return this.getZoomRatio()*100}worldToScreen(e){return{x:this.cssWidth/2+(e.x-this.view.centerX)*this.view.scale,y:this.cssHeight/2-(e.y-this.view.centerY)*this.view.scale}}screenToWorld(e){return{x:this.view.centerX+(e.x-this.cssWidth/2)/this.view.scale,y:this.view.centerY-(e.y-this.cssHeight/2)/this.view.scale}}render(){var e,t;let n=performance.now();if(this.stats={total:0,drawn:0,skipped:0,byType:{},unsupported:{},renderElapsedMs:0,backend:`canvas2d`},this.clearCanvas(),this.document){this.opts.showPageBounds&&(e=this.document.pages)!=null&&e.length&&this.drawPageBounds(this.document);for(let e of this.document.entities)this.drawEntityTracked(e,0)}return this.stats.renderElapsedMs=performance.now()-n,(t=this.onStats)==null||t.call(this,this.getStats()),this.getStats()}get cssWidth(){return this.canvas.clientWidth||1}get cssHeight(){return this.canvas.clientHeight||1}bindEvents(){this.canvas.addEventListener(`wheel`,e=>{e.preventDefault();let t=e.deltaY<0?this.opts.wheelZoomFactor:1/this.opts.wheelZoomFactor;this.zoom(t,{x:e.offsetX,y:e.offsetY})},{passive:!1}),this.canvas.addEventListener(`pointerdown`,e=>{this.canvas.setPointerCapture(e.pointerId),this.isDragging=!0,this.lastPointer={x:e.clientX,y:e.clientY},this.canvas.classList.add(`is-dragging`)}),this.canvas.addEventListener(`pointermove`,e=>{!this.isDragging||!this.lastPointer||(this.panByScreenDelta(e.clientX-this.lastPointer.x,e.clientY-this.lastPointer.y),this.lastPointer={x:e.clientX,y:e.clientY})});let e=e=>{e&&this.canvas.hasPointerCapture(e.pointerId)&&this.canvas.releasePointerCapture(e.pointerId),this.isDragging=!1,this.lastPointer=void 0,this.canvas.classList.remove(`is-dragging`)};this.canvas.addEventListener(`pointerup`,e),this.canvas.addEventListener(`pointercancel`,()=>e())}clearCanvas(){let e=this.ctx;e.save(),e.setTransform(this.dpr,0,0,this.dpr,0,0),e.clearRect(0,0,this.cssWidth,this.cssHeight),e.fillStyle=this.opts.background,e.fillRect(0,0,this.cssWidth,this.cssHeight),e.restore()}drawPageBounds(e){let t=this.ctx;t.save(),t.setTransform(this.dpr,0,0,this.dpr,0,0),t.strokeStyle=`rgba(148, 163, 184, 0.35)`,t.lineWidth=1,t.setLineDash([8,6]);for(let n of e.pages??[]){let e=this.worldToScreen({x:0,y:0}),r=this.worldToScreen({x:n.width,y:n.height});t.strokeRect(Math.min(e.x,r.x),Math.min(e.y,r.y),Math.abs(r.x-e.x),Math.abs(r.y-e.y))}t.restore()}drawEntityTracked(e,t){this.stats.total++;let n=String(e.type??`UNKNOWN`).toUpperCase();this.stats.byType[n]=(this.stats.byType[n]??0)+1;let r=this.lookupLayer(e.layer);if(e.isVisible===!1||!Ss(r)){this.stats.skipped++;return}this.drawEntity(e,n,t)}drawEntity(e,t,n){switch(e.kind??$a(t)){case`line`:return this.drawLine(e);case`circle`:return this.drawCircle(e);case`arc`:return this.drawArc(e);case`polyline`:return this.drawPolyline(e);case`ellipse`:return this.drawEllipse(e);case`text`:return this.drawText(e);case`point`:return this.drawPoint(e);case`insert`:return this.drawInsert(e,n);case`solid`:return this.drawSolid(e);case`hatch`:return this.drawHatch(e);case`spline`:return this.drawSpline(e);case`path`:return this.drawPath(e);case`image`:return this.drawImage(e);case`viewport`:return this.markSkipped(t);default:this.stats.unsupported[t]=(this.stats.unsupported[t]??0)+1,this.stats.skipped++,this.opts.showUnsupportedMarkers&&this.drawUnsupportedMarker(e)}}beginStyledPath(e,t=!1){let n=this.ctx;n.save(),n.setTransform(this.dpr,0,0,this.dpr,0,0);let r=vs(e,this.document,{foreground:this.opts.foreground,background:this.opts.background,trueColorByteOrder:this.opts.trueColorByteOrder,contrastMode:this.opts.contrastMode,minColorContrast:this.opts.minColorContrast}),i=ys(e,this.document,{foreground:this.opts.foreground,background:this.opts.background,trueColorByteOrder:this.opts.trueColorByteOrder,contrastMode:this.opts.contrastMode,minColorContrast:this.opts.minColorContrast})??r;n.strokeStyle=r,n.fillStyle=t?i:r,n.globalAlpha=go(Number(e.opacity??1),0,1),n.lineCap=`round`,n.lineJoin=`round`;let a=typeof e.lineweight==`number`&&e.lineweight>0?e.lineweight:0;n.lineWidth=Math.max(1,Math.min(12,a>0?a/30:1)),n.beginPath()}finishStroke(){this.ctx.stroke(),this.ctx.restore(),this.stats.drawn++}finishFillStroke(e=!1){e&&this.ctx.fill(),this.ctx.stroke(),this.ctx.restore(),this.stats.drawn++}drawLine(e){let t=e.startPoint,n=e.endPoint;if(!Y(t)||!Y(n))return this.markSkipped(`LINE`);let r=this.worldToScreen(t),i=this.worldToScreen(n);this.beginStyledPath(e),this.ctx.moveTo(r.x,r.y),this.ctx.lineTo(i.x,i.y),this.finishStroke()}drawCircle(e){let t=e.center,n=Number(e.radius);if(!Y(t)||!Number.isFinite(n))return this.markSkipped(`CIRCLE`);let r=this.worldToScreen(t);this.beginStyledPath(e),this.ctx.arc(r.x,r.y,Math.abs(n)*this.view.scale,0,Math.PI*2),this.finishStroke()}drawArc(e){let t=e.center,n=Number(e.radius),r=Number(e.startAngle),i=Number(e.endAngle);if(!Y(t)||!Number.isFinite(n)||!Number.isFinite(r)||!Number.isFinite(i))return this.markSkipped(`ARC`);this.strokeWorldPolyline(e,fo(X(t),n,r,i,!0),!1)}drawPolyline(e){let t=e.vertices??e.points;if(!Array.isArray(t)||t.length<2)return this.markSkipped(String(e.type));let n=!!e.isClosed||(Number(e.flag)&1)==1,r=[],i=n?t.length:t.length-1;for(let e=0;e<i;e++){let n=t[e],i=t[(e+1)%t.length];if(!Y(n)||!Y(i))continue;let a=mo(n,i,Number(n.bulge??0));r.length>0&&a.shift(),r.push(...a)}this.strokeWorldPolyline(e,r,n)}drawEllipse(e){let t=e.center,n=e.majorAxisEndPoint,r=Number(e.axisRatio??1);if(!Y(t)||!Y(n))return this.markSkipped(`ELLIPSE`);let i=po(t,n,r,Number(e.startAngle??0),Number(e.endAngle??Math.PI*2)),a=Math.abs(Number(e.endAngle??Math.PI*2)-Number(e.startAngle??0))>=Math.PI*2-1e-6;this.strokeWorldPolyline(e,i,a)}drawPoint(e){let t=e.point??e.location??e.center??e.insertionPoint;if(!Y(t))return this.markSkipped(`POINT`);let n=this.worldToScreen(t);this.beginStyledPath(e),this.ctx.moveTo(n.x-3,n.y),this.ctx.lineTo(n.x+3,n.y),this.ctx.moveTo(n.x,n.y-3),this.ctx.lineTo(n.x,n.y+3),this.finishStroke()}drawText(e){let t=e.insertionPoint??e.startPoint??e.center,n=ho(String(e.text??e.value??``)),r=Number(e.textHeight??e.height??1);if(!Y(t)||!n)return this.markSkipped(String(e.type));this.drawTextAt(e,t,n,r,Number(e.rotation??0))}drawInsert(e,t){let n=this.lookupBlock(e.blockName??e.name);if(n&&t<this.opts.maxInsertDepth){let r=Us(e,n.basePoint??{x:0,y:0});for(let i of n.entities){let n=Ts(i,e,this.document,{foreground:this.opts.foreground,background:this.opts.background,trueColorByteOrder:this.opts.trueColorByteOrder,contrastMode:this.opts.contrastMode,minColorContrast:this.opts.minColorContrast});this.drawEntityTracked(Ws(n,r),t+1)}return}let r=e.insertionPoint;if(!Y(r))return this.markSkipped(`INSERT`);let i=this.worldToScreen(r);if(this.beginStyledPath(e),this.ctx.rect(i.x-5,i.y-5,10,10),this.finishStroke(),Array.isArray(e.attribs))for(let t of e.attribs)this.drawText(t)}drawSolid(e){let t=e.vertices??e.points;if(!Array.isArray(t)||t.length<3)return this.markSkipped(String(e.type));this.beginStyledPath(e,!0);let n=this.worldToScreen(t[0]);this.ctx.moveTo(n.x,n.y);for(let e of t.slice(1)){if(!Y(e))continue;let t=this.worldToScreen(e);this.ctx.lineTo(t.x,t.y)}this.ctx.closePath(),this.finishFillStroke(!0)}drawHatch(e){var t,n;let r=e.loops;if(!Array.isArray(r)||r.length===0)return this.markSkipped(`HATCH`);this.beginStyledPath(e,!0);for(let e of r)if((t=e.commands)!=null&&t.length)this.addPathCommands(e.commands);else if((n=e.vertices)!=null&&n.length){let t=this.worldToScreen(e.vertices[0]);this.ctx.moveTo(t.x,t.y);for(let t of e.vertices.slice(1)){let e=this.worldToScreen(t);this.ctx.lineTo(e.x,e.y)}this.ctx.closePath()}this.finishFillStroke(!!ys(e,this.document,{foreground:this.opts.foreground,background:this.opts.background,trueColorByteOrder:this.opts.trueColorByteOrder,contrastMode:this.opts.contrastMode,minColorContrast:this.opts.minColorContrast}))}drawSpline(e){var t;let n=(t=e.fitPoints)!=null&&t.length?e.fitPoints:e.controlPoints;if(!n||n.length<2)return this.markSkipped(`SPLINE`);this.strokeWorldPolyline(e,n,!!e.isClosed)}drawPath(e){var t;if(!((t=e.commands)!=null&&t.length))return this.markSkipped(String(e.type));this.beginStyledPath(e,!!e.fillColor),this.addPathCommands(e.commands),this.finishFillStroke(!!e.fillColor)}addPathCommands(e){for(let t of e)if(t.cmd===`M`){let e=this.worldToScreen(t.points[0]);this.ctx.moveTo(e.x,e.y)}else if(t.cmd===`L`){let e=this.worldToScreen(t.points[0]);this.ctx.lineTo(e.x,e.y)}else if(t.cmd===`C`){let[e,n,r]=t.points.map(e=>this.worldToScreen(e));this.ctx.bezierCurveTo(e.x,e.y,n.x,n.y,r.x,r.y)}else if(t.cmd===`Q`){let[e,n]=t.points.map(e=>this.worldToScreen(e));this.ctx.quadraticCurveTo(e.x,e.y,n.x,n.y)}else t.cmd===`Z`&&this.ctx.closePath()}drawImage(e){let t=e.insertionPoint;if(!Y(t))return this.markSkipped(String(e.type));let n=Number(e.width??32),r=Number(e.height??32),i=this.worldToScreen(t),a=this.worldToScreen({x:t.x+n,y:t.y-r}),o=Math.min(i.x,a.x),s=Math.min(i.y,a.y),c=Math.abs(a.x-i.x),l=Math.abs(a.y-i.y),u=e.imageDataUrl;if(u){let e=this.getImage(u);if(e.complete&&e.naturalWidth>0){this.ctx.save(),this.ctx.setTransform(this.dpr,0,0,this.dpr,0,0),this.ctx.drawImage(e,o,s,c,l),this.ctx.restore(),this.stats.drawn++;return}e.onload=()=>this.render()}if(!this.opts.showImagePlaceholders)return this.markSkipped(String(e.type));this.beginStyledPath(e),this.ctx.rect(o,s,c,l),this.ctx.moveTo(o,s),this.ctx.lineTo(o+c,s+l),this.ctx.moveTo(o+c,s),this.ctx.lineTo(o,s+l),this.finishStroke()}getImage(e){let t=this.imageCache.get(e);return t||(t=new Image,t.src=e,this.imageCache.set(e,t)),t}drawUnsupportedMarker(e){let t=this.entityAnchor(e);if(!t)return;let n=this.worldToScreen(t);this.beginStyledPath(e),this.ctx.moveTo(n.x-4,n.y-4),this.ctx.lineTo(n.x+4,n.y+4),this.ctx.moveTo(n.x+4,n.y-4),this.ctx.lineTo(n.x-4,n.y+4),this.finishStroke()}drawTextAt(e,t,n,r,i){let a=this.ctx,o=this.worldToScreen(t);a.save(),a.setTransform(this.dpr,0,0,this.dpr,0,0),a.translate(o.x,o.y),a.rotate(-i);let s=Math.max(4,Math.min(256,Math.abs(r)*this.view.scale));a.font=`${s}px ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif`,a.fillStyle=vs(e,this.document,{foreground:this.opts.foreground,background:this.opts.background,trueColorByteOrder:this.opts.trueColorByteOrder,contrastMode:this.opts.contrastMode,minColorContrast:this.opts.minColorContrast}),a.globalAlpha=go(Number(e.opacity??1),0,1),a.textBaseline=`alphabetic`;for(let[e,t]of n.split(/\r?\n/g).entries())a.fillText(t,0,e*s*1.22);a.restore(),this.stats.drawn++}strokeWorldPolyline(e,t,n){let r=t.filter(Y);if(r.length<2)return this.markSkipped(String(e.type));this.beginStyledPath(e);let i=this.worldToScreen(r[0]);this.ctx.moveTo(i.x,i.y);for(let e of r.slice(1)){let t=this.worldToScreen(e);this.ctx.lineTo(t.x,t.y)}n&&this.ctx.closePath(),this.finishStroke()}markSkipped(e){this.stats.skipped++,this.stats.unsupported[e]=this.stats.unsupported[e]??0}entityAnchor(e){for(let t of[`startPoint`,`insertionPoint`,`center`,`point`,`location`]){let n=e[t];if(Y(n))return X(n)}if(Array.isArray(e.vertices)&&Y(e.vertices[0]))return X(e.vertices[0]);if(Array.isArray(e.commands)&&e.commands.length){let t=e.commands.find(e=>e.points.length>0);if(t)return X(t.points[0])}}computeBounds(e){var t;let n=oo();if((t=e.pages)!=null&&t.length)for(let t of e.pages)J(n,{x:0,y:0}),J(n,{x:t.width,y:t.height});for(let t of e.entities)this.includeEntityBounds(n,t,0);return lo(n)}includeEntityBounds(e,t,n){let r=String(t.type??``).toUpperCase(),i=t.kind??$a(r);if(i===`insert`){let r=this.lookupBlock(t.blockName??t.name);if(r&&n<this.opts.maxInsertDepth){let i=Us(t,r.basePoint??{x:0,y:0});for(let t of r.entities)this.includeEntityBounds(e,Ws(t,i),n+1);return}}if(i===`line`)Y(t.startPoint)&&J(e,t.startPoint),Y(t.endPoint)&&J(e,t.endPoint);else if(i===`circle`||i===`arc`)Y(t.center)&&Number.isFinite(t.radius)&&co(e,t.center,Number(t.radius));else if(i===`polyline`||i===`solid`||i===`spline`)for(let n of[...t.vertices??[],...t.points??[],...t.controlPoints??[],...t.fitPoints??[]])Y(n)&&J(e,n);else if(i===`ellipse`)Y(t.center)&&Y(t.majorAxisEndPoint)&&po(t.center,t.majorAxisEndPoint,Number(t.axisRatio??1),Number(t.startAngle??0),Number(t.endAngle??Math.PI*2)).forEach(t=>J(e,t));else if(i===`path`)for(let n of t.commands??[])for(let t of n.points)J(e,t);else if(i===`hatch`)for(let n of t.loops??[]){for(let t of n.vertices??[])J(e,t);for(let t of n.commands??[])for(let n of t.points)J(e,n)}else{let n=this.entityAnchor(t);n&&J(e,n)}}lookupLayer(e){if(!(!this.document||!e))return this.document.layers[e]??this.document.layers[e.toLowerCase()]??Object.values(this.document.layers).find(t=>t.name.toLowerCase()===e.toLowerCase())}lookupBlock(e){if(!(!this.document||!e))return this.document.blocks[e]??this.document.blocks[e.toLowerCase()]??Object.values(this.document.blocks).find(t=>t.name.toLowerCase()===e.toLowerCase())}clampScale(e){return Math.min(this.opts.maxScale,Math.max(this.opts.minScale,e))}emitViewChange(){var e;(e=this.onViewChange)==null||e.call(this,{view:this.getViewState(),fitScale:this.fitScale,zoomRatio:this.getZoomRatio(),zoomPercent:this.getZoomPercent(),bounds:this.getBounds()})}};function qs(e){return{total:e.total,drawn:e.drawn,skipped:e.skipped,byType:{...e.byType},unsupported:{...e.unsupported},renderElapsedMs:e.renderElapsedMs,backend:e.backend,primitiveCount:e.primitiveCount,visiblePrimitiveCount:e.visiblePrimitiveCount,culledPrimitiveCount:e.culledPrimitiveCount,gpuMemoryBytes:e.gpuMemoryBytes,buildElapsedMs:e.buildElapsedMs}}var Js={background:`#0b1020`,foreground:`#ffffff`,showUnsupportedMarkers:!1,showImagePlaceholders:!0,showPageBounds:!0,minScale:1e-9,maxScale:1e9,wheelZoomFactor:1.14,trueColorByteOrder:`rgb`,maxInsertDepth:16,contrastMode:`adaptive`,minColorContrast:2.4,maxCurveSegments:96,spatialIndexCellCount:72,maxVerticesPerBatch:65536,textMinPixelHeight:4,maxVisibleTextLabels:2500,powerPreference:`high-performance`,antialias:!0,preserveDrawingBuffer:!1,enableSpatialIndex:!0},Ys=class{constructor(e,t={}){W(this,`canvas`),W(this,`backend`,`webgl`),W(this,`gl`),W(this,`program`),W(this,`eventController`,new AbortController),W(this,`imageCache`,new Map),W(this,`opts`),W(this,`document`),W(this,`bounds`,oo()),W(this,`view`,{centerX:0,centerY:0,scale:1}),W(this,`fitScale`,1),W(this,`dpr`,1),W(this,`isDragging`,!1),W(this,`lastPointer`),W(this,`resizeObserver`),W(this,`overlayCanvas`),W(this,`overlayCtx`),W(this,`scene`),W(this,`stats`,{total:0,drawn:0,skipped:0,byType:{},unsupported:{},renderElapsedMs:0,backend:`webgl`,primitiveCount:0,visiblePrimitiveCount:0,culledPrimitiveCount:0,gpuMemoryBytes:0,buildElapsedMs:0}),W(this,`rafHandle`,0),W(this,`onStats`),W(this,`onViewChange`);let n=Zs(e,t);if(!n)throw Error(`WebGL is not available. Use renderer: "canvas2d" to force the Canvas2D fallback.`);this.canvas=e,this.gl=n,this.program=Qs(n),this.opts={...Js,...t},this.canvas.classList.add(`cad-viewer-canvas`,`cad-viewer-webgl-canvas`),this.createOverlayCanvas(),this.bindEvents(),typeof ResizeObserver<`u`&&(this.resizeObserver=new ResizeObserver(()=>this.resize()),this.resizeObserver.observe(e)),this.resize()}static isSupported(){return Xs()}destroy(){var e,t;this.eventController.abort(),(e=this.resizeObserver)==null||e.disconnect(),this.cancelScheduledRender(),this.disposeScene(),(t=this.overlayCanvas)==null||t.remove()}clear(){this.document=void 0,this.bounds=oo(),this.view={centerX:0,centerY:0,scale:1},this.fitScale=1,this.disposeScene(),this.render(),this.emitViewChange()}setDocument(e){this.document=e,this.bounds=cc(e,this.opts),this.disposeScene();let t=nc(e,this.opts,this.bounds);this.scene=ec(this.gl,t),this.stats=hc(this.scene,0),this.fitToView()}getDocument(){return this.document}setOptions(e){let t=mc(this.opts,e);if(this.opts={...this.opts,...e},t&&this.document){this.setDocument(this.document);return}this.render(),this.emitViewChange()}getOptions(){return{...this.opts}}fitToView(e=.92){if(!so(this.bounds)){this.view={centerX:0,centerY:0,scale:1},this.fitScale=1,this.render(),this.emitViewChange();return}let t=Math.max(1,this.cssWidth),n=Math.max(1,this.cssHeight),r=Math.max(this.bounds.maxX-this.bounds.minX,1e-9),i=Math.max(this.bounds.maxY-this.bounds.minY,1e-9),a=this.clampScale(Math.min(t/r,n/i)*e);this.fitScale=a,this.view={centerX:(this.bounds.minX+this.bounds.maxX)/2,centerY:(this.bounds.minY+this.bounds.maxY)/2,scale:a},this.render(),this.emitViewChange()}resize(){this.dpr=Math.max(1,window.devicePixelRatio||1);let e=Math.max(1,Math.floor(this.cssWidth*this.dpr)),t=Math.max(1,Math.floor(this.cssHeight*this.dpr));(this.canvas.width!==e||this.canvas.height!==t)&&(this.canvas.width=e,this.canvas.height=t),this.resizeOverlay(e,t),this.render(),this.emitViewChange()}zoom(e,t){if(!Number.isFinite(e)||e<=0)return;let n=t??{x:this.cssWidth/2,y:this.cssHeight/2},r=this.screenToWorld(n);this.view.scale=this.clampScale(this.view.scale*e);let i=this.screenToWorld(n);this.view.centerX+=r.x-i.x,this.view.centerY+=r.y-i.y,this.scheduleRender(),this.emitViewChange()}zoomIn(){this.zoom(this.opts.wheelZoomFactor)}zoomOut(){this.zoom(1/this.opts.wheelZoomFactor)}panByScreenDelta(e,t){!Number.isFinite(e)||!Number.isFinite(t)||(this.view.centerX-=e/this.view.scale,this.view.centerY+=t/this.view.scale,this.scheduleRender(),this.emitViewChange())}setViewState(e){if(![e.centerX,e.centerY,e.scale].every(Number.isFinite))throw Error(`Invalid view state.`);this.view={...e,scale:this.clampScale(e.scale)},this.render(),this.emitViewChange()}getViewState(){return{...this.view}}getBounds(){return{...this.bounds}}getStats(){return gc(this.stats)}getZoomRatio(){return Math.abs(this.fitScale)<1e-12?1:this.view.scale/this.fitScale}getZoomPercent(){return this.getZoomRatio()*100}worldToScreen(e){return{x:this.cssWidth/2+(e.x-this.view.centerX)*this.view.scale,y:this.cssHeight/2-(e.y-this.view.centerY)*this.view.scale}}screenToWorld(e){return{x:this.view.centerX+(e.x-this.cssWidth/2)/this.view.scale,y:this.view.centerY-(e.y-this.cssHeight/2)/this.view.scale}}render(){return this.cancelScheduledRender(),this.renderNow()}renderNow(){var e;let t=performance.now(),n=this.gl;n.viewport(0,0,this.canvas.width,this.canvas.height);let r=_c(this.opts.background,[11,16,32,255]);n.clearColor(r[0]/255,r[1]/255,r[2]/255,r[3]/255),n.clear(n.COLOR_BUFFER_BIT),n.disable(n.DEPTH_TEST),n.enable(n.BLEND),n.blendFunc(n.SRC_ALPHA,n.ONE_MINUS_SRC_ALPHA);let i=0,a=0,o=this.scene,s=this.visibleWorldBounds();if(o){n.useProgram(this.program.program),n.uniform2f(this.program.uViewCenter,this.view.centerX-o.origin.x,this.view.centerY-o.origin.y),n.uniform1f(this.program.uScale,this.view.scale*this.dpr),n.uniform2f(this.program.uViewport,this.canvas.width,this.canvas.height),n.uniform1f(this.program.uPointSize,Math.max(2,Math.min(12,4*this.dpr)));let e=this.drawBatches(o.lineBatches,n.LINES,s);i+=e.visible,a+=e.culled;let t=this.drawBatches(o.triangleBatches,n.TRIANGLES,s);i+=t.visible,a+=t.culled;let r=this.drawBatches(o.pointBatches,n.POINTS,s);i+=r.visible,a+=r.culled}this.renderOverlay(s);let c=performance.now()-t;return this.stats=o?{...o.stats,renderElapsedMs:c,backend:`webgl`,primitiveCount:o.primitiveCount,visiblePrimitiveCount:i,culledPrimitiveCount:a,gpuMemoryBytes:o.gpuMemoryBytes,buildElapsedMs:o.buildElapsedMs}:{total:0,drawn:0,skipped:0,byType:{},unsupported:{},renderElapsedMs:c,backend:`webgl`,primitiveCount:0,visiblePrimitiveCount:0,culledPrimitiveCount:0,gpuMemoryBytes:0,buildElapsedMs:0},(e=this.onStats)==null||e.call(this,this.getStats()),this.getStats()}drawBatches(e,t,n){let r=this.gl,i=0,a=0;for(let o of e){if(!pc(o.bounds,n)){a+=o.primitiveCount;continue}r.bindBuffer(r.ARRAY_BUFFER,o.positionBuffer),r.enableVertexAttribArray(this.program.aPosition),r.vertexAttribPointer(this.program.aPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,o.colorBuffer),r.enableVertexAttribArray(this.program.aColor),r.vertexAttribPointer(this.program.aColor,4,r.UNSIGNED_BYTE,!0,0,0),r.drawArrays(t,0,o.vertexCount),i+=o.primitiveCount}return{visible:i,culled:a}}scheduleRender(){this.rafHandle||=window.requestAnimationFrame(()=>{this.rafHandle=0,this.renderNow()})}cancelScheduledRender(){this.rafHandle&&=(window.cancelAnimationFrame(this.rafHandle),0)}renderOverlay(e){var t;let n=this.overlayCtx,r=this.overlayCanvas;!n||!r||(n.save(),n.setTransform(this.dpr,0,0,this.dpr,0,0),n.clearRect(0,0,this.cssWidth,this.cssHeight),this.opts.showPageBounds&&(t=this.document?.pages)!=null&&t.length&&this.drawPageBoundsOverlay(n),this.scene&&(this.drawImagesOverlay(n,this.scene.imageItems,e),this.drawTextOverlay(n,this.scene.textItems,e)),n.restore())}drawPageBoundsOverlay(e){var t;if((t=this.document?.pages)!=null&&t.length){e.save(),e.strokeStyle=`rgba(148, 163, 184, 0.34)`,e.lineWidth=1,e.setLineDash([8,6]);for(let t of this.document.pages){let n=this.worldToScreen({x:0,y:0}),r=this.worldToScreen({x:t.width,y:t.height});e.strokeRect(Math.min(n.x,r.x),Math.min(n.y,r.y),Math.abs(r.x-n.x),Math.abs(r.y-n.y))}e.restore()}}drawTextOverlay(e,t,n){let r=this.opts.maxVisibleTextLabels,i=0;for(let a of t){if(i>=r)break;if(!pc(a.bounds,n))continue;let t=Math.abs(a.height)*this.view.scale;if(t<this.opts.textMinPixelHeight)continue;let o=this.worldToScreen(a.point);if(o.x<-512||o.y<-512||o.x>this.cssWidth+512||o.y>this.cssHeight+512)continue;e.save(),e.translate(o.x,o.y),e.rotate(-a.rotation);let s=Math.max(4,Math.min(256,t));e.font=`${s}px ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif`,e.fillStyle=a.color,e.globalAlpha=a.opacity,e.textBaseline=`alphabetic`;for(let[t,n]of a.text.split(/\r?\n/g).entries())e.fillText(n,0,t*s*1.22);e.restore(),i++}}drawImagesOverlay(e,t,n){for(let r of t){if(!pc(r.bounds,n))continue;let t=this.worldToScreen(r.point),i=this.worldToScreen({x:r.point.x+r.width,y:r.point.y-r.height}),a=Math.min(t.x,i.x),o=Math.min(t.y,i.y),s=Math.abs(i.x-t.x),c=Math.abs(i.y-t.y);if(!(s<1||c<1)){if(r.source){let t=this.getImage(r.source);if(t.complete&&t.naturalWidth>0){e.save(),e.globalAlpha=r.opacity,e.drawImage(t,a,o,s,c),e.restore();continue}t.onload=()=>this.scheduleRender()}this.opts.showImagePlaceholders&&(e.save(),e.strokeStyle=r.color,e.globalAlpha=r.opacity,e.lineWidth=1,e.strokeRect(a,o,s,c),e.beginPath(),e.moveTo(a,o),e.lineTo(a+s,o+c),e.moveTo(a+s,o),e.lineTo(a,o+c),e.stroke(),e.restore())}}}getImage(e){let t=this.imageCache.get(e);return t||(t=new Image,t.src=e,this.imageCache.set(e,t)),t}createOverlayCanvas(){let e=this.canvas.parentElement;if(!e||typeof document>`u`)return;window.getComputedStyle(e).position===`static`&&(e.style.position=`relative`);let t=document.createElement(`canvas`);t.className=`cad-viewer-text-overlay`,t.setAttribute(`aria-hidden`,`true`),t.style.position=`absolute`,t.style.inset=`0`,t.style.width=`100%`,t.style.height=`100%`,t.style.pointerEvents=`none`,t.style.zIndex=`1`;let n=t.getContext(`2d`);n&&(e.appendChild(t),this.overlayCanvas=t,this.overlayCtx=n)}resizeOverlay(e,t){this.overlayCanvas&&(this.overlayCanvas.width!==e||this.overlayCanvas.height!==t)&&(this.overlayCanvas.width=e,this.overlayCanvas.height=t)}bindEvents(){let e=this.eventController.signal;this.canvas.addEventListener(`wheel`,e=>{e.preventDefault();let t=e.deltaY<0?this.opts.wheelZoomFactor:1/this.opts.wheelZoomFactor;this.zoom(t,{x:e.offsetX,y:e.offsetY})},{passive:!1,signal:e}),this.canvas.addEventListener(`pointerdown`,e=>{this.canvas.setPointerCapture(e.pointerId),this.isDragging=!0,this.lastPointer={x:e.clientX,y:e.clientY},this.canvas.classList.add(`is-dragging`)},{signal:e}),this.canvas.addEventListener(`pointermove`,e=>{!this.isDragging||!this.lastPointer||(this.panByScreenDelta(e.clientX-this.lastPointer.x,e.clientY-this.lastPointer.y),this.lastPointer={x:e.clientX,y:e.clientY})},{signal:e});let t=e=>{e&&this.canvas.hasPointerCapture(e.pointerId)&&this.canvas.releasePointerCapture(e.pointerId),this.isDragging=!1,this.lastPointer=void 0,this.canvas.classList.remove(`is-dragging`)};this.canvas.addEventListener(`pointerup`,t,{signal:e}),this.canvas.addEventListener(`pointercancel`,()=>t(),{signal:e}),this.canvas.addEventListener(`webglcontextlost`,e=>{e.preventDefault(),this.cancelScheduledRender()},{signal:e})}visibleWorldBounds(){let e=this.cssWidth/Math.max(this.view.scale,1e-12)/2,t=this.cssHeight/Math.max(this.view.scale,1e-12)/2;return{minX:this.view.centerX-e,maxX:this.view.centerX+e,minY:this.view.centerY-t,maxY:this.view.centerY+t}}get cssWidth(){return this.canvas.clientWidth||1}get cssHeight(){return this.canvas.clientHeight||1}clampScale(e){return Math.min(this.opts.maxScale,Math.max(this.opts.minScale,e))}disposeScene(){if(!this.scene)return;let e=this.gl;for(let t of[...this.scene.lineBatches,...this.scene.triangleBatches,...this.scene.pointBatches])e.deleteBuffer(t.positionBuffer),e.deleteBuffer(t.colorBuffer);this.scene=void 0}emitViewChange(){var e;(e=this.onViewChange)==null||e.call(this,{view:this.getViewState(),fitScale:this.fitScale,zoomRatio:this.getZoomRatio(),zoomPercent:this.getZoomPercent(),bounds:this.getBounds()})}};function Xs(){if(typeof document>`u`)return!1;let e=document.createElement(`canvas`);return!!(e.getContext(`webgl2`)??e.getContext(`webgl`)??e.getContext(`experimental-webgl`))}function Zs(e,t){let n={alpha:!1,antialias:t.antialias??!0,depth:!1,stencil:!1,preserveDrawingBuffer:t.preserveDrawingBuffer??!1,powerPreference:t.powerPreference??`high-performance`};return e.getContext(`webgl2`,n)??e.getContext(`webgl`,n)??e.getContext(`experimental-webgl`,n)??void 0}function Qs(e){let t=$s(e,e.VERTEX_SHADER,`
87
+ attribute vec2 a_position;
88
+ attribute vec4 a_color;
89
+ uniform vec2 u_viewCenter;
90
+ uniform float u_scale;
91
+ uniform vec2 u_viewport;
92
+ uniform float u_pointSize;
93
+ varying vec4 v_color;
94
+ void main() {
95
+ vec2 screen = vec2(
96
+ u_viewport.x * 0.5 + (a_position.x - u_viewCenter.x) * u_scale,
97
+ u_viewport.y * 0.5 - (a_position.y - u_viewCenter.y) * u_scale
98
+ );
99
+ vec2 clip = vec2(screen.x / u_viewport.x * 2.0 - 1.0, 1.0 - screen.y / u_viewport.y * 2.0);
100
+ gl_Position = vec4(clip, 0.0, 1.0);
101
+ gl_PointSize = u_pointSize;
102
+ v_color = a_color;
103
+ }
104
+ `),n=$s(e,e.FRAGMENT_SHADER,`
105
+ precision mediump float;
106
+ varying vec4 v_color;
107
+ void main() {
108
+ gl_FragColor = v_color;
109
+ }
110
+ `),r=e.createProgram();if(!r)throw Error(`Failed to create WebGL program.`);if(e.attachShader(r,t),e.attachShader(r,n),e.linkProgram(r),!e.getProgramParameter(r,e.LINK_STATUS)){let t=e.getProgramInfoLog(r)??`Unknown WebGL program link error.`;throw e.deleteProgram(r),Error(t)}e.deleteShader(t),e.deleteShader(n);let i=e.getUniformLocation(r,`u_viewCenter`),a=e.getUniformLocation(r,`u_scale`),o=e.getUniformLocation(r,`u_viewport`),s=e.getUniformLocation(r,`u_pointSize`);if(!i||!a||!o||!s)throw Error(`Failed to resolve WebGL shader uniforms.`);return{program:r,aPosition:e.getAttribLocation(r,`a_position`),aColor:e.getAttribLocation(r,`a_color`),uViewCenter:i,uScale:a,uViewport:o,uPointSize:s}}function $s(e,t,n){let r=e.createShader(t);if(!r)throw Error(`Failed to create WebGL shader.`);if(e.shaderSource(r,n),e.compileShader(r),!e.getShaderParameter(r,e.COMPILE_STATUS)){let t=e.getShaderInfoLog(r)??`Unknown WebGL shader compile error.`;throw e.deleteShader(r),Error(t)}return r}function ec(e,t){let n=0,r=t=>t.map(t=>{let r=tc(e,t.positions),i=tc(e,t.colors),a=t.positions.byteLength+t.colors.byteLength;return n+=a,{positionBuffer:r,colorBuffer:i,vertexCount:t.positions.length/2,primitiveCount:t.primitiveCount,bounds:t.bounds,gpuBytes:a}}),i=r(t.lineBatches),a=r(t.triangleBatches),o=r(t.pointBatches);return{origin:t.origin,lineBatches:i,triangleBatches:a,pointBatches:o,textItems:t.textItems,imageItems:t.imageItems,stats:t.stats,primitiveCount:t.primitiveCount,gpuMemoryBytes:n,buildElapsedMs:t.buildElapsedMs}}function tc(e,t){let n=e.createBuffer();if(!n)throw Error(`Failed to create WebGL buffer.`);return e.bindBuffer(e.ARRAY_BUFFER,n),e.bufferData(e.ARRAY_BUFFER,t,e.STATIC_DRAW),n}function nc(e,t,n){let r=performance.now(),i=new rc(e,t,n,so(n)?{x:(n.minX+n.maxX)/2,y:(n.minY+n.maxY)/2}:{x:0,y:0});for(let t of e.entities)i.addEntityTracked(t,0);let a=i.finalize();return a.buildElapsedMs=performance.now()-r,a}var rc=class{constructor(e,t,n,r){W(this,`lineBuckets`,new Map),W(this,`triangleBuckets`,new Map),W(this,`pointBuckets`,new Map),W(this,`textItems`,[]),W(this,`imageItems`,[]),W(this,`stats`,{total:0,drawn:0,skipped:0,byType:{},unsupported:{},backend:`webgl`,primitiveCount:0,visiblePrimitiveCount:0,culledPrimitiveCount:0,gpuMemoryBytes:0,buildElapsedMs:0}),W(this,`tileSize`),W(this,`maxVerticesPerBatch`),W(this,`primitiveCount`,0),this.document=e,this.opts=t,this.bounds=n,this.origin=r;let i=so(n)?Math.max(n.maxX-n.minX,n.maxY-n.minY,1e-9):1;this.tileSize=t.enableSpatialIndex?i/Math.max(8,t.spatialIndexCellCount):1/0,this.maxVerticesPerBatch=Math.max(4096,Math.floor(t.maxVerticesPerBatch))}addEntityTracked(e,t){this.stats.total++;let n=String(e.type??`UNKNOWN`).toUpperCase();this.stats.byType[n]=(this.stats.byType[n]??0)+1;let r=this.lookupLayer(e.layer);if(e.isVisible===!1||!Ss(r)){this.stats.skipped++;return}this.addEntity(e,n,t)}finalize(){let e=oc(this.lineBuckets,this.maxVerticesPerBatch),t=oc(this.triangleBuckets,this.maxVerticesPerBatch),n=oc(this.pointBuckets,this.maxVerticesPerBatch);return this.stats.primitiveCount=this.primitiveCount,{origin:this.origin,lineBatches:e,triangleBatches:t,pointBatches:n,textItems:this.textItems,imageItems:this.imageItems,stats:this.stats,primitiveCount:this.primitiveCount,buildElapsedMs:0}}addEntity(e,t,n){switch(e.kind??$a(t)){case`line`:return this.addLineEntity(e);case`circle`:return this.addCircleEntity(e);case`arc`:return this.addArcEntity(e);case`polyline`:return this.addPolylineEntity(e);case`ellipse`:return this.addEllipseEntity(e);case`text`:return this.addTextEntity(e);case`point`:return this.addPointEntity(e);case`insert`:return this.addInsertEntity(e,n);case`solid`:return this.addSolidEntity(e);case`hatch`:return this.addHatchEntity(e);case`spline`:return this.addSplineEntity(e);case`path`:return this.addPathEntity(e);case`image`:return this.addImageEntity(e);case`viewport`:return this.markSkipped(t);default:this.stats.unsupported[t]=(this.stats.unsupported[t]??0)+1,this.stats.skipped++,this.opts.showUnsupportedMarkers&&this.addUnsupportedMarker(e)}}addLineEntity(e){if(!Y(e.startPoint)||!Y(e.endPoint))return this.markSkipped(`LINE`);this.addSegment(e.startPoint,e.endPoint,this.strokeBytes(e)),this.stats.drawn++}addCircleEntity(e){let t=e.center,n=Number(e.radius);if(!Y(t)||!Number.isFinite(n))return this.markSkipped(`CIRCLE`);let r=Math.max(16,Math.min(this.opts.maxCurveSegments,Math.ceil(Math.sqrt(Math.abs(n))*12))),i=fo(t,n,0,Math.PI*2,!0,r);this.addPolyline(i,!0,this.strokeBytes(e)),this.stats.drawn++}addArcEntity(e){let t=e.center,n=Number(e.radius),r=Number(e.startAngle),i=Number(e.endAngle);if(!Y(t)||!Number.isFinite(n)||!Number.isFinite(r)||!Number.isFinite(i))return this.markSkipped(`ARC`);this.addPolyline(fo(t,n,r,i,!0,this.opts.maxCurveSegments),!1,this.strokeBytes(e)),this.stats.drawn++}addPolylineEntity(e){let t=e.vertices??e.points;if(!Array.isArray(t)||t.length<2)return this.markSkipped(String(e.type));let n=!!e.isClosed||(Number(e.flag)&1)==1,r=[],i=n?t.length:t.length-1;for(let e=0;e<i;e++){let n=t[e],i=t[(e+1)%t.length];if(!Y(n)||!Y(i))continue;let a=mo(n,i,Number(n.bulge??0),Math.max(4,Math.min(24,this.opts.maxCurveSegments/4)));r.length>0&&a.shift(),r.push(...a)}if(r.length<2)return this.markSkipped(String(e.type));this.addPolyline(r,n,this.strokeBytes(e)),this.stats.drawn++}addEllipseEntity(e){if(!Y(e.center)||!Y(e.majorAxisEndPoint))return this.markSkipped(`ELLIPSE`);let t=po(e.center,e.majorAxisEndPoint,Number(e.axisRatio??1),Number(e.startAngle??0),Number(e.endAngle??Math.PI*2),this.opts.maxCurveSegments),n=Math.abs(Number(e.endAngle??Math.PI*2)-Number(e.startAngle??0))>=Math.PI*2-1e-6;this.addPolyline(t,n,this.strokeBytes(e)),this.stats.drawn++}addTextEntity(e){let t=e.insertionPoint??e.startPoint??e.center,n=ho(String(e.text??e.value??``)),r=Number(e.textHeight??e.height??1);if(!Y(t)||!n||!Number.isFinite(r))return this.markSkipped(String(e.type));let i=X(t),a=Math.max(1,n.split(/\r?\n/g).reduce((e,t)=>Math.max(e,t.length),0))*Math.abs(r)*.62,o=Math.max(1,n.split(/\r?\n/g).length)*Math.abs(r)*1.22;this.textItems.push({point:i,text:n,height:r,rotation:Number(e.rotation??0),color:vs(e,this.document,this.colorOptions()),opacity:go(Number(e.opacity??1),0,1),bounds:{minX:i.x-a*.1,minY:i.y-o,maxX:i.x+a,maxY:i.y+o}}),this.stats.drawn++}addPointEntity(e){let t=e.point??e.location??e.center??e.insertionPoint;if(!Y(t))return this.markSkipped(`POINT`);this.addPoint(t,this.strokeBytes(e)),this.stats.drawn++}addInsertEntity(e,t){let n=this.lookupBlock(e.blockName??e.name);if(n&&t<this.opts.maxInsertDepth){let r=Us(e,n.basePoint??{x:0,y:0});for(let i of n.entities){let n=Ts(i,e,this.document,this.colorOptions());this.addEntityTracked(Ws(n,r),t+1)}return}let r=e.insertionPoint;if(!Y(r))return this.markSkipped(`INSERT`);if(this.addPoint(r,this.strokeBytes(e)),Array.isArray(e.attribs))for(let t of e.attribs)this.addTextEntity(t);this.stats.drawn++}addSolidEntity(e){let t=e.vertices??e.points;if(!Array.isArray(t)||t.length<3)return this.markSkipped(String(e.type));let n=t.filter(Y).map(X);if(n.length<3)return this.markSkipped(String(e.type));let r=this.fillBytes(e)??this.strokeBytes(e);this.addTriangleFan(n,r),this.addPolyline(n,!0,this.strokeBytes(e)),this.stats.drawn++}addHatchEntity(e){var t;let n=e.loops;if(!Array.isArray(n)||n.length===0)return this.markSkipped(`HATCH`);let r=this.strokeBytes(e),i=this.fillBytes(e),a=!1;for(let e of n){let n=(t=e.commands)!=null&&t.length?lc(e.commands,this.opts.maxCurveSegments):(e.vertices??[]).filter(Y).map(X);n.length<2||(this.addPolyline(n,!0,r),i&&n.length>=3&&this.addTriangleFan(n,i),a=!0)}if(!a)return this.markSkipped(`HATCH`);this.stats.drawn++}addSplineEntity(e){var t;let n=(t=e.fitPoints)!=null&&t.length?e.fitPoints:e.controlPoints;if(!n||n.length<2)return this.markSkipped(`SPLINE`);this.addPolyline(n.filter(Y).map(X),!!e.isClosed,this.strokeBytes(e)),this.stats.drawn++}addPathEntity(e){var t;if(!((t=e.commands)!=null&&t.length))return this.markSkipped(String(e.type));let n=lc(e.commands,this.opts.maxCurveSegments);if(n.length<2)return this.markSkipped(String(e.type));this.addPolyline(n,!1,this.strokeBytes(e));let r=this.fillBytes(e);r&&n.length>=3&&this.addTriangleFan(n,r),this.stats.drawn++}addImageEntity(e){let t=e.insertionPoint;if(!Y(t))return this.markSkipped(String(e.type));let n=Number(e.width??32),r=Number(e.height??32);if(!Number.isFinite(n)||!Number.isFinite(r))return this.markSkipped(String(e.type));let i=X(t),a=dc([i,{x:i.x+n,y:i.y-r}]);this.imageItems.push({point:i,width:n,height:r,source:e.imageDataUrl??e.imageSource,color:vs(e,this.document,this.colorOptions()),opacity:go(Number(e.opacity??1),0,1),bounds:a}),this.stats.drawn++}addUnsupportedMarker(e){let t=uc(e);t&&this.addPoint(t,this.strokeBytes(e))}addPolyline(e,t,n){let r=e.filter(Y).map(X);if(!(r.length<2)){for(let e=0;e<r.length-1;e++)this.addSegment(r[e],r[e+1],n);t&&this.addSegment(r[r.length-1],r[0],n)}}addSegment(e,t,n){if(!Y(e)||!Y(t)||Math.hypot(e.x-t.x,e.y-t.y)<=1e-14)return;let r=this.batchFor(this.lineBuckets,dc([e,t]));ac(r,e,n,this.origin),ac(r,t,n,this.origin),r.primitiveCount++,this.primitiveCount++}addPoint(e,t){let n=this.batchFor(this.pointBuckets,fc(e));ac(n,e,t,this.origin),n.primitiveCount++,this.primitiveCount++}addTriangleFan(e,t){let n=e.filter(Y).map(X);if(n.length<3)return;let r=dc(n),i=this.batchFor(this.triangleBuckets,r);for(let e=1;e<n.length-1;e++)ac(i,n[0],t,this.origin),ac(i,n[e],t,this.origin),ac(i,n[e+1],t,this.origin),i.primitiveCount++,this.primitiveCount++}batchFor(e,t){let n=this.bucketKey(t),r=e.get(n);return r||(r=ic(),e.set(n,r)),J(r.bounds,{x:t.minX,y:t.minY}),J(r.bounds,{x:t.maxX,y:t.maxY}),r}bucketKey(e){if(!Number.isFinite(this.tileSize))return`all`;let t=(e.minX+e.maxX)/2,n=(e.minY+e.maxY)/2;return`${Math.floor((t-this.bounds.minX)/this.tileSize)}:${Math.floor((n-this.bounds.minY)/this.tileSize)}`}strokeBytes(e){return _c(vs(e,this.document,this.colorOptions()),[255,255,255,255],go(Number(e.opacity??1),0,1))}fillBytes(e){let t=ys(e,this.document,this.colorOptions());return t?_c(t,[255,255,255,255],go(Number(e.opacity??1),0,1)):void 0}colorOptions(){return{foreground:this.opts.foreground,background:this.opts.background,trueColorByteOrder:this.opts.trueColorByteOrder,contrastMode:this.opts.contrastMode,minColorContrast:this.opts.minColorContrast}}markSkipped(e){this.stats.skipped++,this.stats.unsupported[e]=this.stats.unsupported[e]??0}lookupLayer(e){if(e)return this.document.layers[e]??this.document.layers[e.toLowerCase()]??Object.values(this.document.layers).find(t=>t.name.toLowerCase()===e.toLowerCase())}lookupBlock(e){if(e)return this.document.blocks[e]??this.document.blocks[e.toLowerCase()]??Object.values(this.document.blocks).find(t=>t.name.toLowerCase()===e.toLowerCase())}};function ic(){return{positions:[],colors:[],bounds:oo(),primitiveCount:0}}function ac(e,t,n,r){e.positions.push(t.x-r.x,t.y-r.y),e.colors.push(n[0],n[1],n[2],n[3])}function oc(e,t){let n=[];for(let r of e.values()){let e=r.positions.length/2;if(e<=0||!so(r.bounds))continue;if(e<=t){n.push({positions:new Float32Array(r.positions),colors:new Uint8Array(r.colors),bounds:{...r.bounds},primitiveCount:r.primitiveCount});continue}let i=sc(r),a=Math.max(i,Math.floor(t/i)*i);for(let t=0;t<e;t+=a){let o=Math.min(e,t+a),s=r.positions.slice(t*2,o*2),c=r.colors.slice(t*4,o*4),l=oo();for(let e=0;e<s.length;e+=2)J(l,{x:s[e],y:s[e+1]});n.push({positions:new Float32Array(s),colors:new Uint8Array(c),bounds:{...r.bounds},primitiveCount:Math.floor((o-t)/i)})}}return n}function sc(e){let t=e.positions.length/2;return t===e.primitiveCount?1:t===e.primitiveCount*3?3:2}function cc(e,t){var n;let r=oo();if((n=e.pages)!=null&&n.length)for(let t of e.pages)J(r,{x:0,y:0}),J(r,{x:t.width,y:t.height});let i=t=>{if(t)return e.blocks[t]??e.blocks[t.toLowerCase()]??Object.values(e.blocks).find(e=>e.name.toLowerCase()===t.toLowerCase())},a=(e,n)=>{let o=String(e.type??``).toUpperCase(),s=e.kind??$a(o);if(s===`insert`){let r=i(e.blockName??e.name);if(r&&n<t.maxInsertDepth){let t=Us(e,r.basePoint??{x:0,y:0});for(let e of r.entities)a(Ws(e,t),n+1);return}}if(s===`line`)Y(e.startPoint)&&J(r,e.startPoint),Y(e.endPoint)&&J(r,e.endPoint);else if(s===`circle`||s===`arc`)Y(e.center)&&Number.isFinite(e.radius)&&co(r,e.center,Number(e.radius));else if(s===`polyline`||s===`solid`||s===`spline`)for(let t of[...e.vertices??[],...e.points??[],...e.controlPoints??[],...e.fitPoints??[]])Y(t)&&J(r,t);else if(s===`ellipse`)Y(e.center)&&Y(e.majorAxisEndPoint)&&po(e.center,e.majorAxisEndPoint,Number(e.axisRatio??1),Number(e.startAngle??0),Number(e.endAngle??Math.PI*2),t.maxCurveSegments).forEach(e=>J(r,e));else if(s===`path`)for(let t of e.commands??[])for(let e of t.points)J(r,e);else if(s===`hatch`)for(let t of e.loops??[]){for(let e of t.vertices??[])J(r,e);for(let e of t.commands??[])for(let t of e.points)J(r,t)}else{let t=uc(e);t&&J(r,t)}};for(let t of e.entities)a(t,0);return lo(r)}function lc(e,t){let n=[],r,i,a=e=>{(!n.length||Math.hypot(n[n.length-1].x-e.x,n[n.length-1].y-e.y)>1e-12)&&n.push(X(e)),r=X(e)};for(let n of e)if(n.cmd===`M`)r=X(n.points[0]),i=r,a(r);else if(n.cmd===`L`)a(n.points[0]);else if(n.cmd===`Q`&&r&&n.points.length>=2){let e=r,[i,o]=n.points,s=Math.max(4,Math.min(t,24));for(let t=1;t<=s;t++){let n=t/s,r=1-n;a({x:r*r*e.x+2*r*n*i.x+n*n*o.x,y:r*r*e.y+2*r*n*i.y+n*n*o.y})}}else if(n.cmd===`C`&&r&&n.points.length>=3){let e=r,[i,o,s]=n.points,c=Math.max(6,Math.min(t,32));for(let t=1;t<=c;t++){let n=t/c,r=1-n;a({x:r**3*e.x+3*r*r*n*i.x+3*r*n*n*o.x+n**3*s.x,y:r**3*e.y+3*r*r*n*i.y+3*r*n*n*o.y+n**3*s.y})}}else n.cmd===`Z`&&i&&a(i);return n}function uc(e){for(let t of[`startPoint`,`insertionPoint`,`center`,`point`,`location`]){let n=e[t];if(Y(n))return X(n)}if(Array.isArray(e.vertices)&&Y(e.vertices[0]))return X(e.vertices[0]);if(Array.isArray(e.commands)&&e.commands.length){let t=e.commands.find(e=>e.points.length>0);if(t)return X(t.points[0])}}function dc(e){let t=oo();for(let n of e)J(t,n);return t}function fc(e){return{minX:e.x,minY:e.y,maxX:e.x,maxY:e.y}}function pc(e,t){return e.minX<=t.maxX&&e.maxX>=t.minX&&e.minY<=t.maxY&&e.maxY>=t.minY}function mc(e,t){return t.trueColorByteOrder!==void 0&&t.trueColorByteOrder!==e.trueColorByteOrder||t.contrastMode!==void 0&&t.contrastMode!==e.contrastMode||t.minColorContrast!==void 0&&t.minColorContrast!==e.minColorContrast||t.foreground!==void 0&&t.foreground!==e.foreground||t.background!==void 0&&t.background!==e.background||t.maxInsertDepth!==void 0&&t.maxInsertDepth!==e.maxInsertDepth||t.maxCurveSegments!==void 0&&t.maxCurveSegments!==e.maxCurveSegments||t.spatialIndexCellCount!==void 0&&t.spatialIndexCellCount!==e.spatialIndexCellCount||t.maxVerticesPerBatch!==void 0&&t.maxVerticesPerBatch!==e.maxVerticesPerBatch||t.enableSpatialIndex!==void 0&&t.enableSpatialIndex!==e.enableSpatialIndex}function hc(e,t){return{...e.stats,renderElapsedMs:t,backend:`webgl`,primitiveCount:e.primitiveCount,visiblePrimitiveCount:0,culledPrimitiveCount:0,gpuMemoryBytes:e.gpuMemoryBytes,buildElapsedMs:e.buildElapsedMs}}function gc(e){return{total:e.total,drawn:e.drawn,skipped:e.skipped,byType:{...e.byType},unsupported:{...e.unsupported},renderElapsedMs:e.renderElapsedMs,backend:e.backend,primitiveCount:e.primitiveCount,visiblePrimitiveCount:e.visiblePrimitiveCount,culledPrimitiveCount:e.culledPrimitiveCount,gpuMemoryBytes:e.gpuMemoryBytes,buildElapsedMs:e.buildElapsedMs}}function _c(e,t,n=1){let r=e.trim().toLowerCase(),i;if(/^#[0-9a-f]{3}$/i.test(r))i=[parseInt(r[1]+r[1],16),parseInt(r[2]+r[2],16),parseInt(r[3]+r[3],16),255];else if(/^#[0-9a-f]{6}$/i.test(r))i=[parseInt(r.slice(1,3),16),parseInt(r.slice(3,5),16),parseInt(r.slice(5,7),16),255];else{let e=r.match(/^rgba?\(([^)]+)\)$/i);if(e){let t=e[1].split(/[\s,\/]+/).filter(Boolean),n=t.slice(0,3).some(e=>e.includes(`%`)),r=t.map(e=>Number(e.replace(`%`,``)));r.length>=3&&r.slice(0,3).every(Number.isFinite)&&(i=[vc(n?r[0]*2.55:r[0]),vc(n?r[1]*2.55:r[1]),vc(n?r[2]*2.55:r[2]),vc((Number.isFinite(r[3])?r[3]:1)*255)])}}let a=i??t;return[a[0],a[1],a[2],vc(a[3]*n)]}function vc(e){return Math.max(0,Math.min(255,Math.round(e)))}var yc=class{constructor(e={}){W(this,`canvas`),W(this,`renderer`),W(this,`registry`),W(this,`nativeHost`),W(this,`options`),W(this,`lastResult`),W(this,`activeNativeLoader`);var t;if(this.options={autoFit:!0,...e},this.registry=e.registry??ds(e),e.loaders)for(let t of e.loaders)this.registry.register(t);if(this.canvas=e.canvas??document.createElement(`canvas`),this.canvas.classList.add(`cad-viewer-canvas`),e.container)e.container.classList.add(`cad-viewer-container`),e.canvas||(this.canvas.style.width=`100%`,this.canvas.style.height=`100%`,this.canvas.style.display=`block`,e.container.appendChild(this.canvas)),this.nativeHost=e.nativeHost??document.createElement(`div`),this.nativeHost.classList.add(`cad-viewer-native-host`),e.nativeHost||e.container.appendChild(this.nativeHost);else if(e.nativeHost)this.nativeHost=e.nativeHost,this.nativeHost.classList.add(`cad-viewer-native-host`);else if((t=e.canvas)!=null&&t.parentElement){e.canvas.parentElement.classList.add(`cad-viewer-container`);let t=document.createElement(`div`);t.classList.add(`cad-viewer-native-host`),e.canvas.parentElement.appendChild(t),this.nativeHost=t}this.renderer=Sc(e.renderer??`auto`,this.canvas,e.canvasOptions),this.renderer.onStats=e=>{var t;return(t=this.options).onRenderStats?.call(t,e)},this.renderer.onViewChange=e=>{var t;return(t=this.options).onViewChange?.call(t,e)}}registerLoader(e){return this.registry.register(e),this}async loadFile(e,t={}){var n,r;return(r=(n=this.options).onLoadStart)==null||r.call(n,e),this.loadThroughRegistry({file:e,fileName:e.name},t,e.name)}async loadBuffer(e,t,n={}){var r,i;return(i=(r=this.options).onLoadStart)==null||i.call(r,e),this.loadThroughRegistry({buffer:e,fileName:t},n,t)}async load(e,t={}){var n,r;return(r=(n=this.options).onLoadStart)==null||r.call(n,e),this.loadThroughRegistry(e,t,e.fileName??e.file?.name)}setDocument(e,t){var n,r;this.deactivateNativeRenderer();let i={document:e,raw:e.raw,bytes:0,elapsedMs:0,format:e.format,warnings:e.warnings,summary:no(e),fileName:t};return this.renderer.setDocument(e),this.options.autoFit||this.renderer.render(),this.lastResult=i,(r=(n=this.options).onLoad)==null||r.call(n,i),i}fit(){var e,t;this.activeNativeLoader?(t=(e=this.activeNativeLoader).fit)==null||t.call(e):this.renderer.fitToView()}zoomIn(){var e,t;this.activeNativeLoader?(t=(e=this.activeNativeLoader).zoomIn)==null||t.call(e):this.renderer.zoomIn()}zoomOut(){var e,t;this.activeNativeLoader?(t=(e=this.activeNativeLoader).zoomOut)==null||t.call(e):this.renderer.zoomOut()}resize(){var e,t;this.activeNativeLoader?(t=(e=this.activeNativeLoader).resize)==null||t.call(e):this.renderer.resize()}setCanvasOptions(e){var t,n;this.options.canvasOptions={...this.options.canvasOptions??{},...e},this.renderer.setOptions(e),this.activeNativeLoader&&((n=(t=this.activeNativeLoader).setNativeOptions)==null||n.call(t,{...this.mergeLoadOptions({}),dwfBackground:e.background??this.options.dwfBackground}))}async preloadDwg(e={}){let t=this.registry.list().find(e=>e.id===`dwg`);if(!(t!=null&&t.preload))throw Error(`The registered DWG loader does not support preload().`);return t.preload(this.mergeLoadOptions(e))}clear(){this.lastResult=void 0,this.deactivateNativeRenderer(),this.renderer.clear()}destroy(){var e,t,n;this.deactivateNativeRenderer();for(let r of this.registry.list()){let i=r;(e=i.terminateWorker)==null||e.call(i),(t=i.unmount)==null||t.call(i),(n=i.destroy)==null||n.call(i)}this.renderer.destroy()}getLoadResult(){return this.lastResult}getDocument(){return this.activeNativeLoader?this.lastResult?.document:this.renderer.getDocument()}getZoomPercent(){return this.activeNativeLoader?100:this.renderer.getZoomPercent()}isNativeRendererActive(){return!!this.activeNativeLoader}async loadThroughRegistry(e,t,n){var r,i;try{let r=this.mergeLoadOptions(t);xc(r.signal);let i=await this.registry.detect(e),a={...e,buffer:i.bytes};if(fs(i.loader))return await this.applyNativeLoadResult(i.loader,a,r,n);let o=await i.loader.load(a,r);return this.applyLoadResult(o,n)}catch(e){let t=bc(e);throw(i=(r=this.options).onError)==null||i.call(r,t),t}}applyLoadResult(e,t){var n,r,i,a;this.deactivateNativeRenderer(),(r=(n=this.options).onLoadProgress)==null||r.call(n,{phase:`render`,format:e.format,message:`Rendering normalized CAD scene…`,percent:96}),this.renderer.setDocument(e.document),this.options.autoFit||this.renderer.render();let o={...e,fileName:t,summary:no(e.document)};return this.lastResult=o,(a=(i=this.options).onLoad)==null||a.call(i,o),o}async applyNativeLoadResult(e,t,n,r){var i,a,o;if(!this.nativeHost)throw Error(`Native DWF rendering requires CadViewerOptions.container, nativeHost, or a canvas parent element.`);xc(n.signal),this.renderer.clear(),(i=this.activeNativeLoader)==null||i.unmount(),this.activeNativeLoader=e,this.canvas.style.display=`none`,this.nativeHost.classList.add(`is-active`);try{let i=await e.mount(t,this.nativeHost,n);xc(n.signal);let s={...i,fileName:r,summary:no(i.document)};return this.lastResult=s,this.emitNativeRenderStats(i),(o=(a=this.options).onLoad)==null||o.call(a,s),s}catch(e){throw this.deactivateNativeRenderer(),e}}deactivateNativeRenderer(){var e,t;if(!this.activeNativeLoader&&!((e=this.nativeHost)!=null&&e.classList.contains(`is-active`))){this.canvas.style.display=``;return}(t=this.activeNativeLoader)==null||t.unmount(),this.activeNativeLoader=void 0,this.nativeHost&&(this.nativeHost.classList.remove(`is-active`),this.nativeHost.replaceChildren()),this.canvas.style.display=``}emitNativeRenderStats(e){var t,n;let r=e.document.metadata,i=Number(r.nativeRenderStats?.commands??e.document.entities.length??0),a=String(r.nativeRenderStats?.backend??`webgl`).includes(`webgl`)?`webgl`:`canvas2d`;(n=(t=this.options).onRenderStats)==null||n.call(t,{total:i,drawn:i,skipped:0,byType:no(e.document).byType,unsupported:{},renderElapsedMs:e.elapsedMs,backend:a,primitiveCount:i,visiblePrimitiveCount:i,culledPrimitiveCount:0,gpuMemoryBytes:void 0,buildElapsedMs:e.elapsedMs})}mergeLoadOptions(e){let t=this.options.onProgress,n=e.onProgress;return{...this.options,...e,onProgress:e=>{var r,i;(i=(r=this.options).onLoadProgress)==null||i.call(r,e),t?.(e),n&&n!==t&&n(e)}}}};function bc(e){return e instanceof Error?e:Error(String(e))}function xc(e){if(e!=null&&e.aborted)throw new DOMException(`Loading cancelled.`,`AbortError`)}function Sc(e,t,n={}){if(e===`canvas2d`)return new Ks(t,n);if(e===`webgl`)return new Ys(t,n);if(Xs())try{return new Ys(t,n)}catch{}return new Ks(t,n)}var Cc={class:`cad-toolbar`},wc={class:`cad-tools`},Tc={class:`cad-zoom`},Ec={class:`cad-meta`},Dc={key:0,class:`cad-layers`},Oc={class:`cad-layers-head`},kc=[`onClick`],Ac={class:`cad-canvas-wrap`},jc={key:0,class:`cad-state`},Mc={key:1,class:`cad-state error`},Nc={class:`cad-inspector`},Pc={key:0,class:`cad-warning`},Fc=`wasm/cad/`,Ic=`wasm/cad/dwg-worker.js`,Lc=`wasm/cad/dwfv-render.wasm`,Rc=12e4,zc=e(d({__name:`CadViewer`,props:{data:{},type:{},options:{}},setup(e){let i=e,d=o(null),b=o(null),x=o(null),S=o(`loading`),C=o(`正在加载 CAD 预览器...`),w=o(``),T=o(null),E=o(null),D=o(null),O=o([]),k=g(()=>T.value?.warnings||T.value?.document.warnings||[]),ee=g(()=>T.value?.summary),A=g(()=>E.value?.backend||`auto`),j=g(()=>{let e=D.value?.zoomPercent??M?.getZoomPercent?.()??100;return Number.isFinite(e)?Math.round(e):100}),M=null,N=null,P=null,te=t(),ne=()=>i.type.toLowerCase()||`dxf`,re=(e,t,n=!1)=>{let r=new URL(e?String(e):t,document.baseURI).href;return n?r.replace(/\/+$/,``):r},ie=()=>`drawing.${ne()}`,ae=e=>e?Object.entries(e.document.layers).map(([e,t])=>({...t,name:e})).sort((e,t)=>e.name.localeCompare(t.name)):[],oe=e=>Number.isFinite(e)?new Intl.NumberFormat(`zh-CN`).format(Math.round(e||0)):`0`,se=e=>{let t=e.format?`${e.format.toUpperCase()} `:``,n=Number.isFinite(e.percent)?` ${Math.round(e.percent||0)}%`:``;C.value=`${t}${e.message}${n}`},ce=()=>{M?.fit(),te.emit()},le=()=>{M?.zoomIn(),te.emit()},ue=()=>{M?.zoomOut(),te.emit()},de=()=>{let e=S.value===`ready`&&!!M;return{scale:j.value/100,label:`${j.value}%`,canZoomIn:e,canZoomOut:e,canReset:e,minScale:.05,maxScale:16}},fe=()=>{let e=b.value;e&&n(e,{zoomIn:()=>(le(),de()),zoomOut:()=>(ue(),de()),resetZoom:()=>(ce(),de()),getState:de,subscribe:te.subscribe})},pe=e=>{let t=M?.getDocument();if(!t?.layers[e.name])return;let n=t.layers[e.name];n.isVisible=n.isVisible===!1;let r=M?.setDocument(t,ie())||null;T.value=r,O.value=ae(r),p(()=>M?.fit())},F=async()=>{let e=d.value,t=x.value;if(!e)return null;let n=i.options||{},r=re(n.wasmPath,Fc,!0),a=re(n.workerUrl,Ic),o=re(n.dwfWasmUrl,Lc),s=new yc({container:e,nativeHost:t||void 0,renderer:n.renderer||`auto`,wasmPath:r,workerUrl:a,dwfWasmUrl:o,dxfEncoding:n.dxfEncoding,useWorker:n.useWorker??!0,workerTimeoutMs:n.workerTimeoutMs??Rc,preferDwgWasm:n.preferDwgWasm??!0,includePaperSpace:n.includePaperSpace??!0,maxInsertDepth:n.maxInsertDepth,keepRaw:n.keepRaw??!1,dwfPreferWebgl:n.dwfPreferWebgl??!0,dwfPreferWasm:n.dwfPreferWasm??!0,dwfBackground:n.dwfBackground||`#f8fafc`,dwfMaxDevicePixelRatio:n.dwfMaxDevicePixelRatio,dwfMaxCanvasPixels:n.dwfMaxCanvasPixels,dwfMaxGpuCacheBytes:n.dwfMaxGpuCacheBytes,dwfMaxCachedScenes:n.dwfMaxCachedScenes,dwfLineWeightMode:n.dwfLineWeightMode,dwfMinStrokeCssPx:n.dwfMinStrokeCssPx,dwfMaxOverviewStrokeCssPx:n.dwfMaxOverviewStrokeCssPx,dwfMinTextCssPx:n.dwfMinTextCssPx,dwfMinFilledAreaCssPx:n.dwfMinFilledAreaCssPx,autoFit:!0,canvasOptions:{background:`#f8fafc`,foreground:`#0f172a`,contrastMode:`adaptive`,minColorContrast:2.4,showPageBounds:!0,showUnsupportedMarkers:!0,enableSpatialIndex:!0,maxVisibleTextLabels:2400,...n.canvasOptions||{}},onLoadProgress:se,onRenderStats:e=>{E.value=e},onViewChange:e=>{D.value=e,te.emit()},onLoad:e=>{T.value=e,O.value=ae(e)},onError:e=>{w.value=e.message||`CAD 文件解析失败`}});return n.preloadDwg!==!1&&ne()===`dwg`&&s.preloadDwg({wasmPath:r,workerUrl:a}).catch(()=>{}),s},me=async()=>{S.value=`loading`,C.value=`正在解析 CAD...`,w.value=``,T.value=null,E.value=null,D.value=null,O.value=[],P?.abort(),P=new AbortController;try{if(M?.destroy(),M=await F(),!M)return;let e=i.options||{},t=await M.loadBuffer(i.data.slice(0),ie(),{signal:P.signal,transferInputBuffer:!1,dxfEncoding:e.dxfEncoding,wasmPath:re(e.wasmPath,Fc,!0),workerUrl:re(e.workerUrl,Ic),dwfWasmUrl:re(e.dwfWasmUrl,Lc)});T.value=t,O.value=ae(t),S.value=`ready`,await p(),M.fit(),te.emit()}catch(e){if(P.signal.aborted)return;console.error(e),S.value=`error`,w.value=e instanceof Error?e.message:`CAD 文件解析失败`}};return l(()=>{fe(),me(),d.value&&(N=new ResizeObserver(()=>{M?.resize()}),N.observe(d.value))}),f(()=>{r(b.value),P?.abort(),P=null,N?.disconnect(),N=null,M?.destroy(),M=null}),(e,t)=>(y(),_(`div`,{ref_key:`shell`,ref:b,class:`cad-shell`,"data-viewer-zoom-provider":`cad`},[m(`div`,Cc,[m(`div`,wc,[m(`button`,{type:`button`,onClick:ce},`适配`),m(`button`,{type:`button`,title:`缩小`,onClick:ue},`-`),m(`span`,Tc,s(j.value)+`%`,1),m(`button`,{type:`button`,title:`放大`,onClick:le},`+`)]),m(`div`,Ec,[m(`span`,null,s(ne().toUpperCase()),1),m(`span`,null,s(A.value.toUpperCase()),1)])]),m(`div`,{class:a([`cad-body`,{"without-layers":!O.value.length}])},[O.value.length?(y(),_(`aside`,Dc,[m(`div`,Oc,[t[0]||=m(`strong`,null,`图层`,-1),m(`span`,null,s(O.value.length)+` 项`,1)]),(y(!0),_(v,null,u(O.value,e=>(y(),_(`button`,{key:e.name,type:`button`,class:a({muted:e.isVisible===!1||e.isFrozen}),onClick:t=>pe(e)},[m(`span`,{class:`cad-layer-color`,style:c({background:typeof e.color==`string`?e.color:void 0})},null,4),m(`span`,null,s(e.name),1)],10,kc))),128))])):h(``,!0),m(`div`,Ac,[m(`div`,{ref_key:`root`,ref:d,class:`cad-stage`},[m(`div`,{ref_key:`nativeHost`,ref:x,class:`cad-native-stage`},null,512)],512),S.value===`loading`?(y(),_(`div`,jc,s(C.value),1)):S.value===`error`?(y(),_(`div`,Mc,s(w.value),1)):h(``,!0)]),m(`aside`,Nc,[t[5]||=m(`strong`,null,`结构`,-1),m(`dl`,null,[m(`div`,null,[t[1]||=m(`dt`,null,`实体`,-1),m(`dd`,null,s(oe(ee.value?.entityCount)),1)]),m(`div`,null,[t[2]||=m(`dt`,null,`块`,-1),m(`dd`,null,s(oe(ee.value?.blockCount)),1)]),m(`div`,null,[t[3]||=m(`dt`,null,`页面`,-1),m(`dd`,null,s(oe(ee.value?.pageCount)),1)]),m(`div`,null,[t[4]||=m(`dt`,null,`绘制`,-1),m(`dd`,null,s(oe(E.value?.drawn)),1)])]),k.value.length?(y(),_(`p`,Pc,s(k.value[0]),1)):h(``,!0)])],2)],512))}}),[[`__scopeId`,`data-v-7693332c`]]);export{zc as default};