@flyfish-group/file-viewer-web 1.0.23 → 1.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -0
- package/package.json +1 -1
- package/viewer/assets/{ArchiveViewer-CZ4MDsrb.js → ArchiveViewer-DVFt9C9C.js} +1 -1
- package/viewer/assets/{AudioViewer-DjyDsudI.js → AudioViewer-BulivPxn.js} +1 -1
- package/viewer/assets/{CadViewer-BInkfPwZ.css → CadViewer-D8GvQQr1.css} +1 -1
- package/viewer/assets/{CadViewer-BdTvIAMP.js → CadViewer-_KighJFR.js} +16 -16
- package/viewer/assets/{CodeViewer-57pZ6W1s.js → CodeViewer-BhkUWNKW.js} +2 -2
- package/viewer/assets/{DrawingViewer-NO4nzeA1.js → DrawingViewer-DV-fZze_.js} +2 -2
- package/viewer/assets/{EdaViewer-B296bd4C.js → EdaViewer-7B-4NYgk.js} +3 -3
- package/viewer/assets/{EmailViewer-CPSeSuYo.js → EmailViewer-DzWhwNVa.js} +3 -3
- package/viewer/assets/{EpubViewer-BCSRMeWe.js → EpubViewer-BEFiCAHj.js} +2 -2
- package/viewer/assets/{ImageViewer-DnZM9hve.js → ImageViewer-Dw0Q_L3O.js} +1 -1
- package/viewer/assets/{MarkdownViewer-CmNTA_kD.js → MarkdownViewer-CIQTBKMU.js} +1 -1
- package/viewer/assets/{ModelViewer-D9x3ivqk.js → ModelViewer-CuBVhnGa.js} +1 -1
- package/viewer/assets/{OfdViewer-IhXBAdUl.js → OfdViewer-DrhUZ8K7.js} +2 -2
- package/viewer/assets/{PdfView-E1iujAnQ.js → PdfView-DQJTSDKM.js} +1 -1
- package/viewer/assets/{PptxRender-Dad6hvcj.js → PptxRender-gJDg276O.js} +1 -1
- package/viewer/assets/{TypstViewer-gzZvcE-4.js → TypstViewer-Dm2KyEFW.js} +1 -1
- package/viewer/assets/{UmdViewer-YzLD0vlj.js → UmdViewer-DaVp1kyn.js} +1 -1
- package/viewer/assets/{XlsxTable-CZSQVOJ0.js → XlsxTable-BwYOmyJ1.js} +1 -1
- package/viewer/assets/__vite-browser-external-t8MuORTf.js +1 -0
- package/viewer/assets/{ar-SA-G6X2FPQ2-DIej4228.js → ar-SA-G6X2FPQ2-B5sNIcs2.js} +1 -1
- package/viewer/assets/architecture-7EHR7CIX-Duq6XYGl.js +1 -0
- package/viewer/assets/{architectureDiagram-3BPJPVTR-aQ-MRDKN.js → architectureDiagram-3BPJPVTR-ewLbySqv.js} +1 -1
- package/viewer/assets/{archive-CRrvkqZk.js → archive-DldaL6u9.js} +2 -2
- package/viewer/assets/{audio-DWT9z9tK.js → audio-B3P6Xkdn.js} +2 -2
- package/viewer/assets/{az-AZ-76LH7QW2-CS2qXUFa.js → az-AZ-76LH7QW2-B6R6TLFe.js} +1 -1
- package/viewer/assets/{bg-BG-XCXSNQG7-9ujIdMwb.js → bg-BG-XCXSNQG7-B92FLJx1.js} +1 -1
- package/viewer/assets/{blockDiagram-GPEHLZMM-DkVCZJHC.js → blockDiagram-GPEHLZMM-R9sdF9YY.js} +1 -1
- package/viewer/assets/{bn-BD-2XOGV67Q-Bz4MKzNd.js → bn-BD-2XOGV67Q-DyLimFtx.js} +1 -1
- package/viewer/assets/{c4Diagram-AAUBKEIU-BhUtgtBE.js → c4Diagram-AAUBKEIU-D4cIyN3b.js} +1 -1
- package/viewer/assets/{ca-ES-6MX7JW3Y-CQ0i-M2m.js → ca-ES-6MX7JW3Y-ZQAYnW04.js} +1 -1
- package/viewer/assets/cad-BlvOit0r.js +2 -0
- package/viewer/assets/{cfb-DgjGJYYS.js → cfb-D97WBGAx.js} +1 -1
- package/viewer/assets/channel-C56rZQS8.js +1 -0
- package/viewer/assets/{chunk-2J33WTMH-CruGLWY_.js → chunk-2J33WTMH-CH4DhXJ6.js} +1 -1
- package/viewer/assets/{chunk-3OPIFGDE-BBTvqaNI.js → chunk-3OPIFGDE-CeQyPc2S.js} +1 -1
- package/viewer/assets/{chunk-4BX2VUAB-DnDF0gw2.js → chunk-4BX2VUAB-C9f3cCY_.js} +1 -1
- package/viewer/assets/{chunk-55IACEB6-BXXbpqd4.js → chunk-55IACEB6-BfXxlLZE.js} +1 -1
- package/viewer/assets/{chunk-5ZQYHXKU-D-OgLpMs.js → chunk-5ZQYHXKU-BAalwFs3.js} +1 -1
- package/viewer/assets/{chunk-727SXJPM-DF6e3Zgf.js → chunk-727SXJPM-BJ5pHoLj.js} +1 -1
- package/viewer/assets/{chunk-AGHRB4JF-Fz9kp2Fp.js → chunk-AGHRB4JF-BPQIPtb6.js} +1 -1
- package/viewer/assets/{chunk-AQP2D5EJ-B3sX7UtP.js → chunk-AQP2D5EJ-DmmEzEga.js} +1 -1
- package/viewer/assets/{chunk-BSJP7CBP-BkJdmh17.js → chunk-BSJP7CBP-sjN6Abjx.js} +1 -1
- package/viewer/assets/{chunk-CSCIHK7Q-VDPd5eNJ.js → chunk-CSCIHK7Q-CSgWUfWx.js} +1 -1
- package/viewer/assets/{chunk-EIO257PC-Dq8JiXSZ.js → chunk-EIO257PC-CNTUsg0Z.js} +1 -1
- package/viewer/assets/{chunk-FMBD7UC4-CKA5OKZ8.js → chunk-FMBD7UC4-CRTOw4OX.js} +1 -1
- package/viewer/assets/{chunk-K2UTITRG-BEkZoneJ.js → chunk-K2UTITRG--3tR5fTd.js} +4 -4
- package/viewer/assets/{chunk-KSCS5N6A-BuXf0YOu.js → chunk-KSCS5N6A-CbD8pl9X.js} +1 -1
- package/viewer/assets/{chunk-L5ZTLDWV-CzNJ_8is.js → chunk-L5ZTLDWV-ycDBW8N9.js} +1 -1
- package/viewer/assets/{chunk-LZXEDZCA-n9zJSIw5.js → chunk-LZXEDZCA-CF9KGL7w.js} +2 -2
- package/viewer/assets/{chunk-ND2GUHAM-zGgwlxna.js → chunk-ND2GUHAM-CM8l7Cas.js} +1 -1
- package/viewer/assets/{chunk-NZK2D7GU-Cte2JwiA.js → chunk-NZK2D7GU-DdJsXIOi.js} +1 -1
- package/viewer/assets/{chunk-O5CBEL6O-Bu7jDUJy.js → chunk-O5CBEL6O-Clj0ulVd.js} +1 -1
- package/viewer/assets/chunk-QZHKN3VN-C4akJhtC.js +1 -0
- package/viewer/assets/{chunk-SRAX5OIU-w1svEpmY.js → chunk-SRAX5OIU-huS9oUCj.js} +1 -1
- package/viewer/assets/{chunk-WU5MYG2G-h67ucwKy.js → chunk-WU5MYG2G-B_jreI7e.js} +1 -1
- package/viewer/assets/{chunk-XPW4576I-SsWL9gHk.js → chunk-XPW4576I-DAt-kMFp.js} +1 -1
- package/viewer/assets/classDiagram-4FO5ZUOK-ZY-Or3iU.js +1 -0
- package/viewer/assets/classDiagram-v2-Q7XG4LA2-ZY-Or3iU.js +1 -0
- package/viewer/assets/{compare-CYFnIciQ.js → compare-CxX7rqpx.js} +1 -1
- package/viewer/assets/{compiler-Doo7uL6g.js → compiler-CSKahift.js} +1 -1
- package/viewer/assets/{core-DHC7JJ3v.js → core-ClJ33Pz6.js} +1 -1
- package/viewer/assets/{cose-bilkent-S5V4N54A-BbY9gLB6.js → cose-bilkent-S5V4N54A-DgluOF8o.js} +1 -1
- package/viewer/assets/{cs-CZ-2BRQDIVT-CNJY03Br.js → cs-CZ-2BRQDIVT-CjVmJN9s.js} +1 -1
- package/viewer/assets/{da-DK-5WZEPLOC-kycNORr2.js → da-DK-5WZEPLOC-DuO_boTF.js} +1 -1
- package/viewer/assets/{dagre-BM42HDAG-CtFkfSMu.js → dagre-BM42HDAG-DM5mE2Zd.js} +1 -1
- package/viewer/assets/{de-DE-XR44H4JA-DgEFBHUE.js → de-DE-XR44H4JA-EPlX57Pp.js} +1 -1
- package/viewer/assets/{diagram-2AECGRRQ-OITOieDL.js → diagram-2AECGRRQ-3nu9YN-3.js} +1 -1
- package/viewer/assets/{diagram-5GNKFQAL-CkpmTcRT.js → diagram-5GNKFQAL-Bgu27v2R.js} +1 -1
- package/viewer/assets/{diagram-KO2AKTUF-Q-LQjcLw.js → diagram-KO2AKTUF-D1MNRJyI.js} +1 -1
- package/viewer/assets/{diagram-LMA3HP47-BlbmzDQ6.js → diagram-LMA3HP47-DCtnTV7h.js} +1 -1
- package/viewer/assets/{diagram-OG6HWLK6-CcX1M4RU.js → diagram-OG6HWLK6-s6SSdQMs.js} +1 -1
- package/viewer/assets/{dist-idVqPIzq.js → dist-CuHfIJfC.js} +1 -1
- package/viewer/assets/{dist-Bgk0P6Wx.js → dist-DDjNLAL2.js} +4 -4
- package/viewer/assets/{dist-BzZSLV34.js → dist-DXasMrKe.js} +1 -1
- package/viewer/assets/{docx-preview-CbKtHvXt.js → docx-preview-DvcqvOJx.js} +1 -1
- package/viewer/assets/{drawing-Cg8yKw0a.js → drawing-BfpKVc9g.js} +2 -2
- package/viewer/assets/{ebook-B0xdVki1.js → ebook-DgiEZLdI.js} +2 -2
- package/viewer/assets/{eda-DB_j3--n.js → eda-CLifR9E1.js} +2 -2
- package/viewer/assets/{el-GR-BZB4AONW-DQbI2D0z.js → el-GR-BZB4AONW-D219qMkP.js} +1 -1
- package/viewer/assets/email-COTzP9LC.js +2 -0
- package/viewer/assets/{en-B4ZKOASM-gYELMyZ6.js → en-B4ZKOASM-7Or2cbEH.js} +1 -1
- package/viewer/assets/{erDiagram-TEJ5UH35-DEgxv-IW.js → erDiagram-TEJ5UH35-DeDvft1t.js} +1 -1
- package/viewer/assets/{es-ES-U4NZUMDT-e1S39Ti1.js → es-ES-U4NZUMDT-DjqS5A0E.js} +1 -1
- package/viewer/assets/{eu-ES-A7QVB2H4-BFR4rl79.js → eu-ES-A7QVB2H4-DQpymFaA.js} +1 -1
- package/viewer/assets/eventmodeling-FCH6USID-BCi1wRM-.js +1 -0
- package/viewer/assets/{fa-IR-HGAKTJCU-D9rZqekR.js → fa-IR-HGAKTJCU-B41S19qI.js} +1 -1
- package/viewer/assets/{fi-FI-Z5N7JZ37-LaYcmFdb.js → fi-FI-Z5N7JZ37-BKcNMsLi.js} +1 -1
- package/viewer/assets/{flowDiagram-I6XJVG4X-nqVkey0o.js → flowDiagram-I6XJVG4X-ScaL7pBV.js} +1 -1
- package/viewer/assets/{fr-FR-RHASNOE6-DaN_dVyx.js → fr-FR-RHASNOE6-DgvAxhWu.js} +1 -1
- package/viewer/assets/{ganttDiagram-6RSMTGT7-B5XdNYHP.js → ganttDiagram-6RSMTGT7-GBpi2uOc.js} +1 -1
- package/viewer/assets/{gitGraph-WXDBUCRP-CcEeprvc.js → gitGraph-WXDBUCRP-B_SAjRqW.js} +1 -1
- package/viewer/assets/{gitGraphDiagram-PVQCEYII-DoyI3hWK.js → gitGraphDiagram-PVQCEYII-CMv-8uuw.js} +1 -1
- package/viewer/assets/{gl-ES-HMX3MZ6V-Dw-96yV4.js → gl-ES-HMX3MZ6V-B7hAkp9B.js} +1 -1
- package/viewer/assets/{he-IL-6SHJWFNN-DSze4qOo.js → he-IL-6SHJWFNN-Ds9DqAkn.js} +1 -1
- package/viewer/assets/{hi-IN-IWLTKZ5I-BrDOKcx0.js → hi-IN-IWLTKZ5I-DxQ8dbv4.js} +1 -1
- package/viewer/assets/{hu-HU-A5ZG7DT2-B5MZHRE0.js → hu-HU-A5ZG7DT2-LGuwPxm0.js} +1 -1
- package/viewer/assets/{id-ID-SAP4L64H-CLeuopyl.js → id-ID-SAP4L64H-BwQGGLKg.js} +1 -1
- package/viewer/assets/{image-0vZMjp0Z.js → image-Dh0u7Y4X.js} +2 -2
- package/viewer/assets/image-GAAHSSAO-Bwjd-iIt.js +1 -0
- package/viewer/assets/{info-J43DQDTF-ECAOGDME.js → info-J43DQDTF-E7o0QiTK.js} +1 -1
- package/viewer/assets/{infoDiagram-5YYISTIA-C0vYc3h2.js → infoDiagram-5YYISTIA-DAS5lDYe.js} +1 -1
- package/viewer/assets/{ishikawaDiagram-YF4QCWOH-CG_Ph_lH.js → ishikawaDiagram-YF4QCWOH-BmQKRt9o.js} +1 -1
- package/viewer/assets/{it-IT-JPQ66NNP-CU1apqHk.js → it-IT-JPQ66NNP-B8z-5nF9.js} +1 -1
- package/viewer/assets/{ja-JP-DBVTYXUO-B39Q-cJE.js → ja-JP-DBVTYXUO-l_v70Hxd.js} +1 -1
- package/viewer/assets/{journeyDiagram-JHISSGLW-Bls8b6p5.js → journeyDiagram-JHISSGLW-fYNPiKeD.js} +1 -1
- package/viewer/assets/{jszip.min-CoyCHGS6.js → jszip.min-DRj_sfDb.js} +1 -1
- package/viewer/assets/{kaa-6HZHGXH3-DNr0Hbws.js → kaa-6HZHGXH3-BLR3dPbe.js} +1 -1
- package/viewer/assets/{kab-KAB-ZGHBKWFO-DUqxtUd5.js → kab-KAB-ZGHBKWFO-mpC7RdPF.js} +1 -1
- package/viewer/assets/{kanban-definition-UN3LZRKU-D7NWNdGb.js → kanban-definition-UN3LZRKU-DoH0A4N_.js} +1 -1
- package/viewer/assets/{kk-KZ-P5N5QNE5-oAQRY--4.js → kk-KZ-P5N5QNE5-CUrIpqDm.js} +1 -1
- package/viewer/assets/{km-KH-HSX4SM5Z-aIsalLJg.js → km-KH-HSX4SM5Z-BFFisFt-.js} +1 -1
- package/viewer/assets/{ko-KR-MTYHY66A-Dxxq4OHv.js → ko-KR-MTYHY66A-B0ugAj2Q.js} +1 -1
- package/viewer/assets/{ku-TR-6OUDTVRD-cGosJj47.js → ku-TR-6OUDTVRD-wel_K1om.js} +1 -1
- package/viewer/assets/{lib-DVPOsS0g.js → lib-CMUL44Cx.js} +1 -1
- package/viewer/assets/{lt-LT-XHIRWOB4-BrbcDiBa.js → lt-LT-XHIRWOB4-B2tSNKsB.js} +1 -1
- package/viewer/assets/{lv-LV-5QDEKY6T-BJB3sRF-.js → lv-LV-5QDEKY6T-C1h5AGbC.js} +1 -1
- package/viewer/assets/{main-BmxokhSj.js → main-C4AGnt2Q.js} +1 -1
- package/viewer/assets/{md-GXqo3xMM.js → md-NQ108YdD.js} +2 -2
- package/viewer/assets/{mermaid-parser.core-919mtcVP.js → mermaid-parser.core-CYYXW64c.js} +2 -2
- package/viewer/assets/{mindmap-definition-RKZ34NQL-jpsqOaHj.js → mindmap-definition-RKZ34NQL-Cy7__Nsg.js} +1 -1
- package/viewer/assets/{model-DNiDRYMH.js → model-C_NcDjBv.js} +2 -2
- package/viewer/assets/{mr-IN-CRQNXWMA-DYl82JZe.js → mr-IN-CRQNXWMA-Z0HZgwHA.js} +1 -1
- package/viewer/assets/{my-MM-5M5IBNSE-CdnDB-54.js → my-MM-5M5IBNSE-CaUD4d0k.js} +1 -1
- package/viewer/assets/{nb-NO-T6EIAALU-T-ly9gG2.js → nb-NO-T6EIAALU-XJxe52fB.js} +1 -1
- package/viewer/assets/{nestedRender-BAYFA7cb.js → nestedRender-CmOO-RsN.js} +3 -3
- package/viewer/assets/{nl-NL-IS3SIHDZ-CZqPZnHj.js → nl-NL-IS3SIHDZ-D27HZd7H.js} +1 -1
- package/viewer/assets/{nn-NO-6E72VCQL-CvMupQbc.js → nn-NO-6E72VCQL-BLxm3A8-.js} +1 -1
- package/viewer/assets/{oc-FR-POXYY2M6-BRlPd_BR.js → oc-FR-POXYY2M6-LR8bPn4N.js} +1 -1
- package/viewer/assets/{ofd-roCNaEHA.js → ofd-B3Svbpw-.js} +1 -1
- package/viewer/assets/{ofd-BJzyd_Eq.js → ofd-Cg5wG4Wd.js} +2 -2
- package/viewer/assets/{pa-IN-N4M65BXN-BfVUAlRi.js → pa-IN-N4M65BXN-CYdFmoV0.js} +1 -1
- package/viewer/assets/{package-Bop5TfAT.js → package-CykH2Y1v.js} +2 -2
- package/viewer/assets/{packet-YPE3B663-BLIVl-jG.js → packet-YPE3B663-D_NADg35.js} +1 -1
- package/viewer/assets/{pdf-CDtYB0WY.js → pdf-8WqUNSMi.js} +2 -2
- package/viewer/assets/percentages-BXMCSKIN-Ci_Exl4Q.js +1 -0
- package/viewer/assets/{pica-Dfy4NaK_.js → pica-yzoh_AWA.js} +1 -1
- package/viewer/assets/{pie-LRSECV5Y-DcYPzp1c.js → pie-LRSECV5Y-M88xBHjg.js} +1 -1
- package/viewer/assets/{pieDiagram-4H26LBE5-CMzoHPw-.js → pieDiagram-4H26LBE5-COTBWyRX.js} +1 -1
- package/viewer/assets/{pl-PL-T2D74RX3-CXvOHlyd.js → pl-PL-T2D74RX3-Doqck8dA.js} +1 -1
- package/viewer/assets/{pptx-CI2NrkhY.js → pptx-eMO7Ols-.js} +2 -2
- package/viewer/assets/{prod-B0HxyDM0.js → prod-CN44joQ1.js} +6 -6
- package/viewer/assets/{pt-BR-5N22H2LF-CAHMJIN0.js → pt-BR-5N22H2LF-CsKHA8If.js} +1 -1
- package/viewer/assets/{pt-PT-UZXXM6DQ-9stw3O1j.js → pt-PT-UZXXM6DQ-B7JNfKKr.js} +1 -1
- package/viewer/assets/{quadrantDiagram-W4KKPZXB-BS8uQ6E6.js → quadrantDiagram-W4KKPZXB-C1l_QsjJ.js} +1 -1
- package/viewer/assets/{radar-GUYGQ44K-Bqokr2eR.js → radar-GUYGQ44K-CnJe616e.js} +1 -1
- package/viewer/assets/renderer-CoE6m0-R.js +1 -0
- package/viewer/assets/{requirementDiagram-4Y6WPE33-pyX-Egau.js → requirementDiagram-4Y6WPE33-DTRSWSlu.js} +1 -1
- package/viewer/assets/{ro-RO-JPDTUUEW-_Ym6U2of.js → ro-RO-JPDTUUEW-DC6XZZcW.js} +1 -1
- package/viewer/assets/{rough.esm-DjrMDdlL.js → rough.esm-svAaowEF.js} +1 -1
- package/viewer/assets/{ru-RU-B4JR7IUQ-DWUO9__j.js → ru-RU-B4JR7IUQ-CmDtpYxp.js} +1 -1
- package/viewer/assets/{sankeyDiagram-5OEKKPKP-BIl0S1dQ.js → sankeyDiagram-5OEKKPKP-BtefGBSW.js} +1 -1
- package/viewer/assets/{sequenceDiagram-3UESZ5HK-EhMFCxNn.js → sequenceDiagram-3UESZ5HK-CTe7knxV.js} +1 -1
- package/viewer/assets/{si-LK-N5RQ5JYF-DOuaKjIP.js → si-LK-N5RQ5JYF-B5CINft7.js} +1 -1
- package/viewer/assets/{sk-SK-C5VTKIMK-D04wnRn8.js → sk-SK-C5VTKIMK-Bi81XvTL.js} +1 -1
- package/viewer/assets/{sl-SI-NN7IZMDC-DlSoyI38.js → sl-SI-NN7IZMDC-D8ROoVv3.js} +1 -1
- package/viewer/assets/{src-CmLfrMFg.js → src-Dphh0QTK.js} +1 -1
- package/viewer/assets/{stateDiagram-AJRCARHV-CBylKBpj.js → stateDiagram-AJRCARHV-NX5oY0W5.js} +1 -1
- package/viewer/assets/stateDiagram-v2-BHNVJYJU-D5m-Zx8u.js +1 -0
- package/viewer/assets/subset-shared.chunk-6PC5HXUZ.js +1 -0
- package/viewer/assets/{subset-worker.chunk-CXi44O4x.js → subset-worker.chunk-BPqA_yn_.js} +1 -1
- package/viewer/assets/{sv-SE-XGPEYMSR-y8nUmsTq.js → sv-SE-XGPEYMSR-DLlz6Jon.js} +1 -1
- package/viewer/assets/{ta-IN-2NMHFXQM-BTlY1MOo.js → ta-IN-2NMHFXQM-TGPzaQJc.js} +1 -1
- package/viewer/assets/{text-BTWcQTKM.js → text-CqI8IQeR.js} +2 -2
- package/viewer/assets/{th-TH-HPSO5L25-B0-Jm0dR.js → th-TH-HPSO5L25-BReRyzwS.js} +1 -1
- package/viewer/assets/{timeline-definition-PNZ67QCA-BrR0Lwj6.js → timeline-definition-PNZ67QCA-CX3iZTVi.js} +1 -1
- package/viewer/assets/{tr-TR-DEFEU3FU-CuiTnA8n.js → tr-TR-DEFEU3FU-CEyJ4P5k.js} +1 -1
- package/viewer/assets/{treeView-BLDUP644-B3NDovtS.js → treeView-BLDUP644-ZFFTCRbS.js} +1 -1
- package/viewer/assets/{treemap-LRROVOQU-CNBN28UV.js → treemap-LRROVOQU-DZj91ZHX.js} +1 -1
- package/viewer/assets/{typst-BlzZcMe5.js → typst-Dm_gO0kQ.js} +2 -2
- package/viewer/assets/{uk-UA-QMV73CPH-za143PJQ.js → uk-UA-QMV73CPH-C-i8uzJn.js} +1 -1
- package/viewer/assets/{umd-CaNdxjcL.js → umd-8CYCKt7Q.js} +2 -2
- package/viewer/assets/{vennDiagram-CIIHVFJN-BkqtdITb.js → vennDiagram-CIIHVFJN-CeK9u7mG.js} +1 -1
- package/viewer/assets/{vi-VN-M7AON7JQ-BkwUlhW4.js → vi-VN-M7AON7JQ-BkrdvRL4.js} +1 -1
- package/viewer/assets/{wardley-L42UT6IY-B82Hng0D.js → wardley-L42UT6IY-O3XhHMtH.js} +1 -1
- package/viewer/assets/{wardleyDiagram-YWT4CUSO-d1SlYFch.js → wardleyDiagram-YWT4CUSO-C9JP8sFv.js} +1 -1
- package/viewer/assets/{word-CbznmAOT.js → word-DjZhCKgE.js} +2 -2
- package/viewer/assets/{xlsx-B70Tzp_0.js → xlsx-B8FHPOo9.js} +2 -2
- package/viewer/assets/{xychartDiagram-2RQKCTM6-AETQ-2hJ.js → xychartDiagram-2RQKCTM6-VR6KMEMT.js} +1 -1
- package/viewer/assets/{zh-CN-LNUGB5OW-CLMN5wFH.js → zh-CN-LNUGB5OW-Bptre2EX.js} +1 -1
- package/viewer/assets/{zh-HK-E62DVLB3-BQAhIarC.js → zh-HK-E62DVLB3-BlKHI9Gv.js} +1 -1
- package/viewer/assets/{zh-TW-RAJ6MFWO-D3o6FRFS.js → zh-TW-RAJ6MFWO-DlDxzUxo.js} +1 -1
- package/viewer/compare.html +2 -2
- package/viewer/flyfish-viewer-manifest.json +1 -1
- package/viewer/index.html +3 -3
- package/viewer/assets/__vite-browser-external-BZdVR8v7.js +0 -1
- package/viewer/assets/architecture-7EHR7CIX-sRujR5WN.js +0 -1
- package/viewer/assets/cad-B78pKw7N.js +0 -2
- package/viewer/assets/channel-Dz5mnghj.js +0 -1
- package/viewer/assets/chunk-QZHKN3VN-DmWvf513.js +0 -1
- package/viewer/assets/classDiagram-4FO5ZUOK-B-NZYxkE.js +0 -1
- package/viewer/assets/classDiagram-v2-Q7XG4LA2-B-NZYxkE.js +0 -1
- package/viewer/assets/email-ZYgs8alH.js +0 -2
- package/viewer/assets/eventmodeling-FCH6USID-BtBKHIsk.js +0 -1
- package/viewer/assets/image-GAAHSSAO-Di-5eHoS.js +0 -1
- package/viewer/assets/percentages-BXMCSKIN-C5NgCvxl.js +0 -1
- package/viewer/assets/renderer-BMLnfeSl.js +0 -1
- package/viewer/assets/stateDiagram-v2-BHNVJYJU-f7X6eKbo.js +0 -1
- package/viewer/assets/subset-shared.chunk-WzaeClRm.js +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./dist-
|
|
2
|
-
import{h as e,r as t}from"./package-Bop5TfAT.js";import{D as n,J as r,X as i,Y as a,_ as o,b as s,f as c,g as l,h as u,i as d,o as f,r as p,s as m,t as h,y as g}from"./runtime-core.esm-bundler-DO-WTVbd.js";function _(e,t,n,r){return r===void 0?{level:e,code:t,message:n}:{level:e,code:t,message:n,source:r}}function v(e){return(e??[]).filter(e=>e.level!==`info`)}function y(){return globalThis.DecompressionStream}var b=class{async inflateRaw(e){let t=y();if(!t)throw Error(`This browser does not expose DecompressionStream. Provide a custom InflateProvider, or pre-bundle a WASM/JS inflater.`);try{return await x(e,`deflate-raw`,t)}catch(n){try{return await x(e,`deflate`,t)}catch{throw n instanceof Error?n:Error(String(n))}}}};async function x(e,t,n){let r=new Blob([e]).stream().pipeThrough(new n(t)),i=await new Response(r).arrayBuffer();return new Uint8Array(i)}var S=new TextDecoder(`utf-8`);new TextDecoder(`ascii`);function C(e){return S.decode(e)}function w(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 T(e){let t=w(e),n=t.lastIndexOf(`/`);return n<0?``:t.slice(0,n)}function E(e,t){if(!t)return w(e);if(t.startsWith(`/`))return w(t.slice(1));let n=T(e);return w((n?n+`/`:``)+t)}function ee(e){let t=e.indexOf(`:`);return t>=0?e.slice(t+1):e}function D(e){return ee(e.localName||e.nodeName)}function O(e,t){return e.getAttribute(t)??e.getAttributeNS(null,t)??void 0}function k(e){return Array.from(e.childNodes).filter(e=>e.nodeType===1)}function A(e,t=`document.xml`){if(typeof DOMParser<`u`){let n=new DOMParser().parseFromString(e,`application/xml`),r=n.getElementsByTagName(`parsererror`)[0];if(r)throw Error(`XML parse error in ${t}: ${r.textContent?.slice(0,180)??`unknown error`}`);return n}try{return ne(e)}catch(e){throw Error(`XML parse error in ${t}: ${String(e)}`)}}var j=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}},M=class{constructor(e){this.textContent=e,this.nodeType=3}},te=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 j)}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 j&&n(e)};for(let e of this.childNodes)e instanceof j&&n(e);return t}};function ne(e){let t=new te,n=[t],r=0;for(;r<e.length;){let i=e.indexOf(`<`,r);if(i<0){re(n[n.length-1],e.slice(r));break}if(i>r&&re(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.`);re(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=ie(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 j&&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 j(c<0?o:o.slice(0,c),ae(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 re(e,t){if(!t)return;let n=oe(t);n.trim().length!==0&&e.childNodes.push(new M(n))}function ie(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 ae(e){let t=[],n=/([^\s=]+)\s*=\s*(?:"([^"]*)"|'([^']*)')/g,r;for(;r=n.exec(e);){let e=r[1],n=oe(r[2]??r[3]??``);t.push({name:e,nodeName:e,localName:ee(e),value:n})}return t}function oe(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 se(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 ce(e){let t=e.split(/[?#]/)[0]??e,n=t.lastIndexOf(`/`),r=t.lastIndexOf(`.`);return r>n?t.slice(r+1).toLowerCase():``}function le(e){switch(ce(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 ue(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 N(e){let t=e.match(/[-+]?(?:\d+\.\d*|\.\d+|\d+)(?:[eE][-+]?\d+)?/g);return t?t.map(Number).filter(Number.isFinite):[]}var de=101010256,fe=33639248,pe=67324752,me=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 b;for(let e of t)this.entryMap.set(w(e.name),e)}static open(t,n){let r=new DataView(t.buffer,t.byteOffset,t.byteLength),i=ge(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=P(r,i+4),o=P(r,i+6);if(a!==0||o!==0)throw Error(`Multi-disk ZIP archives are not supported.`);let s=P(r,i+10),c=F(r,i+12),l=F(r,i+16),u=0,d=l;if(F(r,d)!==fe){let e=Math.max(0,i-c-1024*1024),t=-1;for(let n=i-c;n>=e;n--)if(n>=0&&F(r,n)===fe){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(F(r,p)!==fe)throw Error(`Bad central directory signature at ${p}.`);let e=P(r,p+8),n=P(r,p+10),i=P(r,p+12),a=P(r,p+14),o=F(r,p+16),s=F(r,p+20),c=F(r,p+24),l=P(r,p+28),d=P(r,p+30),m=P(r,p+32),h=F(r,p+42),g=t.subarray(p+46,p+46+l),_=t.subarray(p+46+l+d,p+46+l+d+m),v=w(_e(g,e)),y=_e(_,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(w(e))}get(e){return this.entryMap.get(w(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(F(r,i)!==pe)throw Error(`Bad local header signature for ${t.name}.`);let a=P(r,i+26),o=P(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 he(e){if(e.byteLength<22)return!1;let t=new DataView(e.buffer,e.byteOffset,e.byteLength);return F(t,0)===pe?!0:ge(t)>=0}function ge(e){let t=Math.max(0,e.byteLength-65535-22);for(let n=e.byteLength-22;n>=t;n--)if(F(e,n)===de)return n;return-1}function _e(e,t){return t&2048?C(e):Array.from(e,e=>String.fromCharCode(e)).join(``)}function P(e,t){return e.getUint16(t,!0)}function F(e,t){return e.getUint32(t,!0)}async function ve(e){let t=new Map,n=new Map,r=[];if(e.has(`[Content_Types].xml`)){let i=A(C(await e.read(`[Content_Types].xml`)),`[Content_Types].xml`);for(let e of Array.from(i.documentElement.children)){let i=D(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=w((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:be(t,n,e.name),size:e.uncompressedSize})),readText:async t=>C(await e.read(w(t))),readBytes:async t=>e.read(w(t)),getContentType:e=>be(t,n,e),getRelationships:async(t=``)=>{let n=w(t),r=i.get(n);if(r)return r;let a=ye(n);if(!e.has(a))return i.set(n,[]),[];let o=A(C(await e.read(a)),a),s=[];for(let e of Array.from(o.documentElement.children)){if(D(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:E(n,i)})}return i.set(n,s),s}}}function ye(e){let t=w(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 be(e,t,n){let r=w(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 xe(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 Se=1,Ce=4,we=16,Te=32,Ee=128,De=4,Oe=8,ke=1,Ae=4,je=5,Me=1,Ne=2,Pe=4,Fe=8,Ie=16,Le=32,Re=64,ze=128,Be=0,Ve=1,He=2,Ue=3,We=4,Ge=5,Ke=6,I=-2139062144,qe=-2139062145,Je=-2139062146;async function Ye(e,t={}){let n=[],r=await Xe(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=Qe(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(_(`warning`,`W3D_EDGEBREAKER_PARTIAL`,`${c} connectivity-compressed shell candidate(s) were skipped.`,t.sourcePath)),i.length===0&&n.push(_(`error`,`W3D_NO_MESHES`,`No renderable W3D shell meshes were decoded.`,t.sourcePath));let d=gt(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 Xe(e,t,n){let r=new b;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=Ze(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 Ze(e){let t=e.length;for(;t>0&&e[t-1]===0;)t--;return t===e.length?e:e.subarray(0,t)}function Qe(e,t,n){let r=Ct(e,t+1),i=wt(r),a=0;if((i&Ee)!==0&&(a=Tt(r)),(i&Te)!==0||((i&we)===0&&L(r),wt(r),a&3))return;let o=i&65?wt(r):Ae,s,c,l;if(o===je){let t=L(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=$e(n);if((i&Se)===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=bt(e,r.pos,t),r.pos+=t*4}else throw Error(`edgebreaker quantized-point reconstruction is not enabled for this shell.`);if(c=dt(a.faces,a.pointCount),l=`edgebreaker-v${n[0]??0}`,c.length<3)throw Error(`Empty edgebreaker face list.`)}else if(o===Ae){let t=L(r);if(t<=0||t>1e7)throw Error(`Bad uncompressed shell point count.`);s=bt(e,r.pos,t*3),r.pos+=t*3*4,c=dt(st(r,t,(i&Ce)!==0,!1).indices,t),l=`uncompressed`}else if(o===ke){let t=L(r);if(t<=0||t>1e7)throw Error(`Bad compressed shell point count.`);let n=(a&Oe)===0?xt(r,6):[0,0,0,1,1,1],o=wt(r),u=L(r);if(u<=0||r.pos+u>e.length)throw Error(`Bad compressed shell point payload length.`);s=ut(e.subarray(r.pos,r.pos+u),t,o,n),r.pos+=u,c=dt(st(r,t,(i&Ce)!==0,(a&De)!==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=ft(s,c),d=pt(s,c),f=_t(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:vt(n),sourceStart:t,sourceEnd:r.pos,decodeKind:l}}function $e(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+Dt(l+o),l+s>e.length)throw Error(`Invalid edgebreaker MTable offset.`);let d=et(e.subarray(l,l+s));l+=s+Dt(l+s);let f=tt(u,d),p=rt(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 et(e){let t=Ct(e,0),n=L(t),r=(n&Me)===0?0:L(t),i=(n&Ne)===0?0:L(t),a=(n&Pe)===0?0:i,o=(n&Fe)===0?0:L(t),s=(n&Ie)===0?0:L(t),c=St(t,r),l=St(t,i),u=St(t,a),d=[],f=0;for(let e=0;e<o;e++)f+=L(t),d.push(f);let p=[],m=new Map;f=0;for(let e=0;e<s;e+=2){let e=L(t)+f;f=e;let n=L(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&Le)===0?void 0:xt(t,6),quantization:(n&Re)===0?[11,11,11]:[L(t),L(t),L(t)],normalQuantization:(n&ze)===0?[11,11,11]:[L(t),L(t),L(t)]}}function tt(e,t){let n=Array.from(e),r=[],i=0,a=0;for(;a<n.length;){let{ecount:e,offsets:o}=nt(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]=I;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(I);let e=d.length;d.push({start:0,twin:I},{start:0,twin:I},{start:0,twin:I});let t=[3,l[f],l[s[f]],-1];u[f]!==I&&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(_===Be){t[3]=i,d[e+1].twin=I,d[e+2].twin=I,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(_===Ve)t[3]=l[c[f]],d[e+1].twin=I,d[e+2].twin=u[c[f]],u[c[f]]!==I&&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(_===He)if(t[3]=l[c[f]],d[e+1].twin=u[s[f]],u[s[f]]!==I&&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]]!==I&&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]),ot(t)&&r.push(t),h.length>0)f=h.pop();else break;else if(_===Ue)t[3]=l[s[s[f]]],d[e+1].twin=u[s[f]],u[s[f]]!==I&&u[s[f]]>=0&&u[s[f]]<d.length&&(d[u[s[f]]].twin=e+1),d[e+2].twin=I,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(_===We){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=I,d[e+2].twin=I,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(_!==He)if(ot(t))r.push(t);else throw Error(`Invalid edgebreaker triangle.`);if(a>=n.length)break}}return{faces:r,opcodePointCount:i}}function nt(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===Be)--r;else if(t===Ve)r+=1;else if(t===He)if(r+=3,s.length>0){let e=c.pop();l[e]=r-2-s.pop()}else break;else if(t===Ue)r+=1;else if(t===We)--r,c.push(i),s.push(r),l[i]=0,i++;else if(t===Ge){let e=n.mlengths[a++]??0;r-=e+1}else if(t===Ke)n.mlengths[o],--r,o++;else throw Error(`Bad edgebreaker opcode ${t}.`)}return{ecount:r,offsets:l}}function rt(e,t,n){let r=new Int32Array(e);for(let n of t.dummies)n>=0&&n<e&&(r[n]=qe);for(let n=0;n+1<t.patches.length;n+=2){let i=t.patches[n];i>=0&&i<e&&r[i]!==qe&&(r[i]=Je)}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(at(n,r)||at(i,r)||at(o,r))continue;let s=[3,it(n,r,t),it(i,r,t),it(o,r,t)];ot(s)&&a.push(s)}return a}function it(e,t,n){return t[e]===Je?n.patchMap.get(e)??e:e-t[e]}function at(e,t){return e<0||e>=t.length||t[e]===qe}function ot(e){return e[1]!==e[2]&&e[2]!==e[3]&&e[3]!==e[1]&&e[1]>=0&&e[2]>=0&&e[3]>=0}function st(e,t,n,r){wt(e);let i=L(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=ct(a,r);return{indices:lt(o,t,n),values:o}}function ct(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 lt(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 ut(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 dt(e,t){return t<=65535?new Uint16Array(e):new Uint32Array(e)}function ft(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 pt(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=mt(e,o,s,c);r.push(l),ht(i,o,s,a),ht(i,s,c,a),ht(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 dt(o,Math.floor(e.length/3))}function mt(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 ht(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 gt(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 _t(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 vt(e){let t=e*.61803398875%1,n=.62,r=.96-n*.34,i=2*n-r;return[yt(i,r,t+1/3),yt(i,r,t),yt(i,r,t-1/3)]}function yt(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 bt(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 xt(e,t){let n=[];for(let r=0;r<t;r++)n.push(Et(e));return n}function St(e,t){let n=[];for(let r=0;r<t;r++)n.push(L(e));return n}function Ct(e,t=0){return{bytes:e,pos:t,view:new DataView(e.buffer,e.byteOffset,e.byteLength)}}function wt(e){if(e.pos>=e.bytes.length)throw Error(`Unexpected end of W3D stream.`);return e.bytes[e.pos++]}function Tt(e){let t=e.view.getUint16(e.pos,!0);return e.pos+=2,t}function L(e){let t=e.view.getInt32(e.pos,!0);return e.pos+=4,t}function Et(e){let t=e.view.getFloat32(e.pos,!0);return e.pos+=4,t}function Dt(e){return 3-(e-1)%4}async function Ot(e,t,n){let r=e.diagnostics;e.metadata??={},e.materials??=[],e.textures??=[],e.sceneTree??=[],e.pmi??=[],e.views??=[],e.animations??=[],await kt(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{At(e,C(await n.readBytes(i.path)),i.path)}catch(e){r.push(_(`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)?Mt(e,C(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}=Nt(C(await n.readBytes(s.path)),s.path,c);l=o,e.sceneTree=t,e.pmi=r,e.views=Jt(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,Ft(t,e.textures??[]));e.materials=Array.from(u.values())}catch(e){r.push(_(`warning`,`EMODEL_PRESENTATION_PARSE_FAILED`,`Failed to parse eModel presentation: ${String(e)}`,s.path))}Rt(e,o,c,l);let u=Xt(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 kt(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=$t(await n.readBytes(e.path));t=r?.width,a=r?.height}catch(t){r.push(_(`warning`,`EMODEL_TEXTURE_SIZE_FAILED`,`Failed to read texture size: ${String(t)}`,e.path))}i.push({id:e.path,name:Qt(e.title)??Zt(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 At(e,t,n){let r=A(t,n),i=r.documentElement;if(i){let t=Array.from(i.getElementsByTagName(`*`)).find(e=>D(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=>D(e)===`Property`)){let n=t.getAttribute(`name`),r=t.getAttribute(`value`);n&&r&&(e.metadata[n]=r)}let a=jt(e.metadata);a&&(e.views=Jt(e.views??[],[a]),e.initialView=a)}function jt(e){let t=Vt(e._ViewCubeHomeCameraPosition),n=Vt(e._ViewCubeHomeCameraTarget),r=Vt(e._ViewCubeHomeCameraUpVector),i=Vt(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 Mt(e,t,n,r){try{let r=A(t,n),i=[];for(let e of Array.from(r.getElementsByTagName(`*`)).filter(e=>D(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(_(`warning`,`EMODEL_CONTENTDEF_PARSE_FAILED`,`Failed to parse eModel content definition: ${String(e)}`,n)),[]}}function Nt(e,t,n){let r=A(e,t),i=Array.from(r.getElementsByTagName(`*`)).filter(e=>D(e)===`View`),a=[];for(let e of i){let t=Ut(e);for(let e of t)a.push(Lt(e,n))}if(a.length===0)for(let e of Array.from(r.getElementsByTagName(`*`)).filter(e=>D(e)===`ReferenceNode`&&!Wt(e)))a.push(Lt(e,n));let o=[];for(let e of Array.from(r.getElementsByTagName(`*`)).filter(e=>/ModelViewNode|View/i.test(D(e)))){let t=e.getAttribute(`id`)??`view-${o.length+1}`,n=e.getAttribute(`label`)??e.getAttribute(`name`)??t,r=Ht(e).find(e=>D(e)===`Camera`)??Array.from(e.getElementsByTagName(`*`)).find(e=>D(e)===`Camera`),i=r?zt(r):void 0;(i||/ModelViewNode/i.test(D(e)))&&o.push({id:t,label:n,camera:i})}let s=[];for(let e of Array.from(r.getElementsByTagName(`*`))){let t=D(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:Kt(e)})}let c=[];for(let e of Array.from(r.getElementsByTagName(`*`)).filter(e=>/Animation|Sequence|Timeline/i.test(D(e))))c.push({id:e.getAttribute(`id`)??`animation-${c.length+1}`,name:e.getAttribute(`label`)??e.getAttribute(`name`)??D(e),targetRef:e.getAttribute(`target`)??void 0});let l=Pt(r);return{nodes:a,pmi:s,views:Yt(o),animations:c,materials:l}}function Pt(e){let t=new Map;for(let n of Array.from(e.getElementsByTagName(`*`)).filter(e=>D(e)===`InstanceAttributes`)){let e=n.getAttribute(`id`);if(!e)continue;let r=Ht(n).find(e=>D(e)===`Color`)??Array.from(n.getElementsByTagName(`*`)).find(e=>D(e)===`Color`);if(!r)continue;let i=Array.from(r.getElementsByTagName(`*`)).find(e=>D(e)===`Channel`&&/diffuse/i.test(e.getAttribute(`type`)??``)),a=Array.from(r.getElementsByTagName(`*`)).find(e=>D(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=Qt(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 Ft(e,t){if(e.textureId||!e.textureName)return e;let n=It(e.textureName),r=t.find(e=>It(e.name??``).includes(n)||n.includes(It(e.name??``)));return r?{...e,textureId:r.id}:e}function It(e){return e.replace(/"/g,``).replace(/["{}]/g,``).toLowerCase()}function Lt(e,t){let n=qt(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`)??D(e),contentRefs:n,meshIds:[],children:[],properties:Kt(e)};for(let e of n)t.set(e,r);for(let n of Ut(e))r.children.push(Lt(n,t));return r}function Rt(e,t,n,r){let i=new Map(n);t.forEach((t,n)=>{let a=e.meshes[n];if(!a)return;let o=[t.renderableRef,t.id].filter(Boolean);a.selectionRefs=o,a.nodeId=t.node;let s=r.get(t.id)??(t.renderableRef?r.get(t.renderableRef):void 0);s&&(a.materialId=s.id,a.color=s.color);for(let e of o){let t=i.get(e);if(t){a.name=t.label||a.name,t.meshIds.push(a.id);break}}})}function zt(e){return{position:Bt(e,`positionX`,`positionY`,`positionZ`),target:Bt(e,`targetX`,`targetY`,`targetZ`),up:Bt(e,`upVectorX`,`upVectorY`,`upVectorZ`),field:Bt(e,`fieldWidth`,`fieldHeight`,`fieldDepth`),projection:e.getAttribute(`projectionType`)??void 0}}function Bt(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 Vt(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 Ht(e){return Array.from(e.children)}function Ut(e){let t=[];for(let n of Ht(e)){let e=D(n);if(e.endsWith(`Node`))t.push(n);else if(e===`Nodes`||e===`Views`)for(let e of Ht(n))D(e).endsWith(`Node`)&&t.push(e)}return t}function Wt(e){let t=Gt(e);for(;t;){if(D(t)===`ReferenceNode`)return!0;t=Gt(t)}return!1}function Gt(e){return(e.parentElement??e.parentNode)||void 0}function Kt(e){let t={};for(let n of Array.from(e.attributes))t[n.localName||n.name]=n.value;return t}function qt(e){return e.trim().split(/[\s,]+/).filter(Boolean)}function Jt(e,t){return Yt([...e,...t])}function Yt(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 Xt(e){let t=0;for(let n of e)t+=1+Xt(n.children);return t}function Zt(e){let t=e.lastIndexOf(`/`);return t>=0?e.slice(t+1):e}function Qt(e){if(e)return e.replace(/^"|"$/g,``).replace(/"/g,`"`)}function $t(e){if(e.length>=24&&e[0]===137&&e[1]===80&&e[2]===78&&e[3]===71)return{width:en(e,16),height:en(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 en(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0}var tn=new Set([`http://schemas.microsoft.com/xps/2005/06/fixedrepresentation`,`http://schemas.openxps.org/oxps/v1.0/fixedrepresentation`]);async function nn(e){let t=await ve(e),n=[],r=[],i=await an(t,r,n);if(r.length===0){let e=await sn(t,n);for(let i of e)try{let e=A(await t.readText(i),i),a=Array.from(e.getElementsByTagName(`*`)).filter(e=>D(e)===`DocumentReference`);a.length===0&&n.push(_(`warning`,`DWFX_NO_DOCREF`,`No DocumentReference elements found in ${i}.`,i));for(let e of a){let a=e.getAttribute(`Source`);a&&await cn(t,E(i,a),r,n)}}catch(e){n.push(_(`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 ln(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:[_(`error`,`DWFX_NO_PAGES`,`No supported renderable page was found in this DWFx package.`)]})}return xe({kind:`dwfx`,pages:[],resources:t.resources,diagnostics:n,packageEntries:e.entries.map(e=>e.name)},r,e,t)}function rn(e){return e.has(`[Content_Types].xml`)&&(e.has(`_rels/.rels`)||e.entries.some(e=>/\.(fpage|dwfseq)$/i.test(e.name)))}async function an(e,t,n){let r=await on(e,n),i=[];for(let t of r)try{let r=un(await e.readText(t),t);i.push(...r),n.push(_(`info`,`DWFX_DWF_MANIFEST_FOUND`,`Found DWFx DWF manifest with ${r.length} section(s).`,t))}catch(e){n.push(_(`warning`,`DWFX_DWF_MANIFEST_PARSE_FAILED`,`Failed to parse DWFx DWF manifest: ${String(e)}`,t))}for(let r of i.filter(e=>dn(e))){let i=_n(r,/2d\s+streaming\s+graphics/i)??r.resources.find(e=>/\.fpage$/i.test(e.path));if(!i||!/\.fpage$/i.test(vn(i.path)))continue;let a=vn(i.path);if(!e.zip.has(a))continue;let o=await ln(e,a,n);t.push({id:`page-${t.length+1}`,name:r.title||i.title||yn(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=>fn(e))){let r=pn(n,e.zip),i=_n(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 Ye(await e.zip.read(i.path),{title:n.title||i.title||yn(i.path),sourcePath:i.path});if(await Ot(r,n.resources,e),r.meshes.length>0){t.push({id:`w3d-${t.length+1}`,name:n.title||i.title||yn(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,_(`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:[_(`warning`,`DWFX_W3D_PARSE_FAILED`,`Failed to parse W3D geometry: ${String(e)}`,i.path)]});continue}if(r&&e.zip.has(r.path)){let i=bn(await e.zip.read(r.path))??{width:1e3,height:1e3};t.push({id:`image-${t.length+1}`,name:n.title||r.title||yn(r.path),kind:`image`,sourcePath:r.path,mediaType:r.mediaType??le(r.path)??`image/png`,width:i.width,height:i.height,diagnostics:[_(`info`,`DWFX_3D_PREVIEW_ONLY`,`No W3D/HSF geometry stream was declared; showing the embedded section preview image.`,r.path)]})}}return i}async function on(e,t){let n=new Set,r=e=>{e&&n.add(w(vn(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(w(e.resolvedTarget)),/document$/i.test(e.type)&&/manifest\.xml$/i.test(e.resolvedTarget)&&r(e.resolvedTarget)}catch(e){t.push(_(`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=A(await e.readText(n),n),i=Array.from(t.getElementsByTagName(`*`)).filter(e=>D(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(_(`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 sn(e,t){let n=new Set;try{let t=await e.getRelationships(``);for(let e of t)(tn.has(e.type)||/fixedrepresentation/i.test(e.type)||/\.fdseq$/i.test(e.resolvedTarget))&&n.add(w(e.resolvedTarget))}catch(e){t.push(_(`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 cn(e,t,n,r){let i;try{i=await e.readText(t)}catch(e){r.push(_(`warning`,`DWFX_FDOC_READ_FAILED`,`Failed to read fixed document ${t}: ${String(e)}`,t));return}let a=A(i,t),o=Array.from(a.getElementsByTagName(`*`)).filter(e=>D(e)===`PageContent`);for(let i of o){let a=i.getAttribute(`Source`);if(!a)continue;let o=E(t,vn(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=vn(o);let c=i.getAttribute(`Width`),l=i.getAttribute(`Height`),u=c&&l?{width:Number(c),height:Number(l)}:await ln(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 ln(e,t,n){try{let n=vn(t),r=A(C(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(_(`warning`,`DWFX_PAGE_SIZE_FAILED`,`Failed to read FixedPage size: ${String(e)}`,t)),{width:1e3,height:1e3}}}function un(e,t){let n=A(e,t);return Array.from(n.getElementsByTagName(`*`)).filter(e=>D(e)===`Section`).map((e,t)=>{let n=hn(e,`name`)??`section-${t+1}`,r=hn(e,`title`)??n;return{type:hn(e,`type`)??``,name:n,title:r,resources:Array.from(e.getElementsByTagName(`*`)).filter(e=>D(e).endsWith(`Resource`)||D(e)===`Resource`).map(e=>({path:w(vn(hn(e,`href`)??``)),role:hn(e,`role`),mediaType:hn(e,`mime`),title:hn(e,`title`),size:gn(e,`size`)})).filter(e=>e.path.length>0)}}).filter(e=>e.resources.length>0||e.type.length>0)}function dn(e){return/(^|\.)ePlot$/i.test(e.type)||/com\.autodesk\.dwf\.ePlot$/i.test(e.type)}function fn(e){return/(^|\.)eModel$/i.test(e.type)||/com\.autodesk\.dwf\.eModel$/i.test(e.type)}function pn(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)=>mn(t)-mn(e))[0]}function mn(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 hn(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 gn(e,t){let n=hn(e,t);if(n===void 0)return;let r=Number(n);return Number.isFinite(r)?r:void 0}function _n(e,t){return e.resources.find(e=>t.test(e.role??``))}function vn(e){return w((e.split(/[?#]/)[0]??e).replace(/^\//,``))}function yn(e){let t=vn(e),n=t.lastIndexOf(`/`);return n>=0?t.slice(n+1):t}function bn(e){if(e.length>=24&&e[0]===137&&e[1]===80&&e[2]===78&&e[3]===71)return{width:xn(e,16),height:xn(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 xn(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0}function Sn(e){let t=Tn(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 Cn(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=kn(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 wn(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=En(i,a,c.x,c.y,t);for(let t=1;t<=e;t++){let n=t/e;l(Dn(i,c.x1,c.x2,c.x,n),Dn(a,c.y1,c.y2,c.y,n))}i=c.x,a=c.y;break}case`Q`:{let e=En(i,a,c.x,c.y,t);for(let t=1;t<=e;t++){let n=t/e;l(On(i,c.x1,c.x,n),On(a,c.y1,c.y,n))}i=c.x,a=c.y;break}case`A`:{let e=kn(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 Tn(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 En(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 Dn(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 On(e,t,n,r){let i=1-r;return i*i*e+2*i*r*t+r*r*n}function kn(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,ee=f*w+d*T+(t+c)/2,D=(h-w)/n,O=(g-T)/r,k=(-h-w)/n,A=(-g-T)/r,j=Math.atan2(O,D),M=Math.atan2(D*A-O*k,D*k+O*A);!o&&M>0&&(M-=2*Math.PI),o&&M<0&&(M+=2*Math.PI);let te=Math.max(2,Math.min(l,Math.ceil(Math.abs(M)/(Math.PI/16)))),ne=[];for(let e=1;e<=te;e++){let t=j+M*e/te,i=d*n*Math.cos(t)-f*r*Math.sin(t)+E,a=f*n*Math.cos(t)+d*r*Math.sin(t)+ee;ne.push([i,a])}return ne}function An(e,t){let n=C(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:Sn(n),stroke:Mn(e,`stroke`)??a,fill:Mn(e,`fill`)??void 0,lineWidth:Number(Mn(e,`stroke-width`)??s)}),c++}let t=n.matchAll(/<(polyline|polygon)\b[^>]*\bpoints=["']([^"']+)["'][^>]*>/gi);for(let e of t){let t=e[0],n=N(e[2]);n.length>=4&&i.push({type:e[1].toLowerCase()===`polygon`?`polygon`:`polyline`,points:n,stroke:Mn(t,`stroke`)??a,fill:Mn(t,`fill`)??void 0,lineWidth:Number(Mn(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=N(t);if(/^(color|stroke|pen|wt_color)\b/i.test(t)){a=Nn(t)??a,c++;continue}if(/^(fill|brush|wt_fill)\b/i.test(t)){o=Nn(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:Sn(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:jn(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:jn(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=Pn(i);return i.length===0?r.push(_(`warning`,`W2D_TEXT_NO_GEOMETRY`,`Textual W2D parser did not find supported geometry commands in ${t}.`,t)):r.push(_(`info`,`W2D_TEXT_PARSED`,`Parsed ${i.length} supported vector primitives from ${t}.`,t)),c===0&&r.push(_(`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 jn(e){return e.length>=5&&Number.isInteger(e[0])&&e.length-1==e[0]*2?e.slice(1):e}function Mn(e,t){return e.match(RegExp(`${t}=["']([^"']+)["']`,`i`))?.[1]}function Nn(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=N(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 Pn(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 Fn=1,In=2,Ln=4,Rn=8,zn=16,Bn=32,Vn=64,Hn=128,Un=256,Wn=512,Gn=1024;function Kn(e,t){return new qn(e,t).parse()}var qn=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(_(`info`,`W2D_BINARY_PARSED`,`Parsed ${this.primitives.length} vector primitives from binary WHIP!/W2D stream (${this.opcodes} opcodes).`,this.sourcePath)):this.diagnostics.push(_(`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(_(`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:Zn(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=tr(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=Xn(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=ir(this.readAsciiInteger()),this.state.fillOn&&(this.state.fill=this.state.stroke),!0;case`c`:return this.state.stroke=ir(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=Xn(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=rr(n);e.length>=3&&(this.state.stroke=er(e[0],e[1],e[2]));break}case`(LineWeight`:{let e=rr(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&Fn&&(this.state.fontName=this.readWhipString()||this.state.fontName),e&In&&this.u8(),e&Ln&&this.u8(),e&Rn&&this.u8(),e&zn&&this.u8(),e&Bn&&(this.state.fontHeight=Math.max(1,Math.abs(this.i32()))),e&Vn&&(this.state.fontRotation=this.u16()),e&Hn&&this.u16(),e&Un&&this.u16(),e&Wn&&this.u16(),e&Gn&&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:Jn(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:Jn(e),fill:t,stroke:n,lineWidth:this.state.lineWidth})}ellipsePrimitive(e,t,n,r,i,a,o=this.state.fillOn){let s=Yn(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&&Qn(this.bytes[this.pos]);)this.pos++;let t=$n(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 $n(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 $n(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=$n(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 Jn(e){let t=[];for(let n of e)t.push(n.x,n.y);return t}function Yn(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 Xn(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
|
|
4
|
-
`);if(s){let c=a(t,r),l=B(e,`Height`),u=o.length?B(o[0],`FontHeight`):void 0,d=n&&l?Math.max(10,Math.abs(l/n.sy)):u??12,f=o.length?R(o[0],`Color`):void 0;i.push({type:`text`,x:c.x,y:c.y,text:s,size:d,fill:f?pr(f):fr(e).stroke})}}}}let s=[];return i.length>0&&s.push(_(`info`,`DWF_MARKUP_XML_PARSED`,`Parsed ${i.length} markup primitive(s) from markup private XML.`,t)),{primitives:i,diagnostics:s}}function fr(e){let t=`#0000ff`,n,r=1,i=Array.from(e.getElementsByTagName(`*`)).filter(e=>z(e)===`FormatProperty`);for(let e of i){let i=(R(e,`Name`)??``).toUpperCase(),a=(R(e,`Enabled`)??`true`).toLowerCase()!==`false`,o=R(e,`ModifierUIntVal`)??R(e,`UIntValue`)??R(e,`DblValue`)??R(e,`IntValue`);!a||o===void 0||(i===`LINECOLOR`&&(t=pr(o)),i===`FILLCOLOR`&&(n=pr(o)),i===`LINEWEIGHT`&&(r=Math.max(1,Number(o)||r)),i===`NOFILL`&&/true/i.test(R(e,`BoolValue`)??``)&&(n=void 0))}return{stroke:t,fill:n,lineWidth:r}}function pr(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 mr(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 hr(e,t){return e.resources.find(e=>t.test(e.role??``))}function R(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 z(e){let t=e.localName||e.nodeName,n=t.indexOf(`:`);return n>=0?t.slice(n+1):t}function B(e,t){let n=R(e,t);if(n===void 0)return;let r=Number(n);return Number.isFinite(r)?r:void 0}function gr(e){let t=e.lastIndexOf(`/`);return t>=0?e.slice(t+1):e}function _r(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)=>vr(t.name,t.uncompressedSize)-vr(e.name,e.uncompressedSize))[0]}function vr(e,t){let n=Math.min(t,1e7)/1e3;return/thumbnail|preview/i.test(e)&&(n+=5e3),ce(e)===`png`&&(n+=100),n}async function yr(e,t={}){let n=await br(e),r=t.fileName??(e instanceof File?e.name:void 0)??`document.dwf`;if(he(n)){let e=me.open(n,t.inflater);return rn(e)?await nn(e):ar(e)?await or(e):e.entries.some(e=>/\.fpage$/i.test(e.name))?await nn(e):await or(e)}if(se(n)){let e=An(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 xe({kind:`unknown`,pages:[],resources:[{path:r,mediaType:`text/plain`,size:n.byteLength}],diagnostics:[_(`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:[_(`error`,`UNSUPPORTED_RAW_FORMAT`,`Unsupported raw DWF input. DWF 6+/DWFx ZIP packages are required for this build.`,r)]};return xe({kind:`unknown`,pages:[],resources:[{path:r,size:n.byteLength}],diagnostics:i.diagnostics,packageEntries:[r]},[i])}async function br(e){return e instanceof Uint8Array?e:e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(await e.arrayBuffer())}var xr={a:1,b:0,c:0,d:1,e:0,f:0};function V(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 Sr(e,t,n){return[e.a*t+e.c*n+e.e,e.b*t+e.d*n+e.f]}function Cr(e){if(!e)return{...xr};let t=N(e);return t.length>=6?{a:t[0],b:t[1],c:t[2],d:t[3],e:t[4],f:t[5]}:{...xr}}function H(e,t=1){if(!e||e===`Transparent`||e===`{x:Null}`)return;let n=e.trim();if(n.startsWith(`{`)||n.includes(`Brush`))return;let r=Or(n);if(r&&(n=r),n.startsWith(`sc#`)){let e=N(n);if(e.length>=3){let n=+(e.length>=4),r=e.length>=4?e[0]:1;return Er(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 Er(parseInt(e[0]+e[0],16),parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),t);if(e.length===6)return Er(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 Er(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 wr(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 Tr(t,n,i,Math.round(a*255))}if(n.startsWith(`#`)){let e=n.slice(1);if(e.length===6)return Tr(parseInt(e.slice(0,2),16),parseInt(e.slice(2,4),16),parseInt(e.slice(4,6),16),255);if(e.length===8)return Tr(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=Or(n);return i?wr(i,t):t}function Tr(e,t,n,r){return e=Dr(e),t=Dr(t),n=Dr(n),r=Dr(r),e&255|(t&255)<<8|(n&255)<<16|(r&255)<<24}function Er(e,t,n,r){return`rgba(${Dr(e)}, ${Dr(t)}, ${Dr(n)}, ${Math.max(0,Math.min(1,r))})`}function Dr(e){return Math.max(0,Math.min(255,Math.round(e)))}function Or(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 kr(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 Ar(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 jr(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 Mr(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 Nr(e,t,n={},r){let i=jr(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 Pr(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*jr(t))>=a*i}function Fr(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=Ir(t,e.minX,e.minY),s=Ir(t,e.maxX,e.minY),c=Ir(t,e.maxX,e.maxY),l=Ir(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 Ir(e,t,n){return[e.a*t+e.c*n+e.e,e.b*t+e.d*n+e.f]}var Lr=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,wr(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]=Sr(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,wr(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]=Sr(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,wr(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}},Rr=12,zr=128*1024*1024,Br=4,Vr={a:1,b:0,c:0,d:1,e:0,f:0},Hr=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=fi(t,mi,hi),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=kr({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:Mr(n),zoom:r.zoom??1},s=ei(e,a,r),c=this.scenes.get(s),l=!!c;if(!c){let n=Ur(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=ui(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,Rr,0),u.enableVertexAttribArray(this.aColor),u.vertexAttribPointer(this.aColor,4,u.UNSIGNED_BYTE,!0,Rr,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(_(`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 Kr,s=0;for(let e of n)s++,Gr(o,e,r,i,a);let c=o.byteLength,l=i.maxGpuCacheBytes??zr;if(c>l)throw Error(`WebGL XPS scene buffer would require ${di(c)}, exceeding maxGpuCacheBytes=${di(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??zr,n=e.maxCachedScenes??Br;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 Ur(e){let t=[];return Wr(e,Vr,1,t),t}function Wr(e,t,n,r){let i=D(e),a=V(t,ti(e)),o=n*ai(O(e,`Opacity`));if(i===`Path`){let t=ni(e);if(t.length>0){let n=ri(e,`Fill`,o),i=ri(e,`Stroke`,o),s=Number(O(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:si(e),fillRule:oi(e),bounds:ci(t)})}}for(let t of k(e))D(t).includes(`.`)||Wr(t,a,o,r)}function Gr(e,t,n,r,i){let a=V(n,t.matrix),o=jr(t.matrix),s=Math.max(1e-6,t.thickness||1),c=Math.max(.01,Nr(s,a,r,i)*o),l=wn(t.commands,.5),u=t.fill?li(t.fill):void 0,d=t.stroke?li(t.stroke):void 0;if(u&&Fr(t.bounds,a,r,i))for(let n of l)(n.closed||n.points.length>=6)&&qr(e,Zr(n.points,t.matrix),u);if(d&&t.thickness>0)for(let n of l){let r=Zr(n.points,t.matrix),i=n.closed?Qr(r):r;t.lineStyle.dash.length>0?Yr(e,i,c,t.lineStyle,d):Jr(e,i,c,d)}}var Kr=class{constructor(){this.buffer=new ArrayBuffer(64*1024),this.view=new DataView(this.buffer),this.vertexCount=0}get byteLength(){return this.vertexCount*Rr}push(e,t,n){if(!Number.isFinite(e)||!Number.isFinite(t))return;let r=this.byteLength;this.ensure(Rr),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 qr(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];$r(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 Jr(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++)Xr(e,t[n],t[n+1],i,r)}function Yr(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){Jr(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;Xr(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 Xr(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 Zr(e,t){let n=[];for(let r=0;r+1<e.length;r+=2){let[i,a]=Sr(t,e[r]??0,e[r+1]??0);n.push({x:i,y:a})}return n}function Qr(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 $r(e,t,n){return Math.abs((t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x))}function ei(e,t,n){let r=n.lineWeightMode??`adaptive`,i=r===`physical`?`physical`:String(Math.round(Math.log2(Math.max(1e-12,jr(t)))*8));return`${e.id}|${e.sourcePath}|${e.width}x${e.height}|lw:${r}:${i}`}function ti(e){let t=Cr(O(e,`RenderTransform`)??O(e,`Transform`));for(let n of k(e)){let e=D(n);if(e.endsWith(`.RenderTransform`)||e.endsWith(`.Transform`)){let e=k(n).find(e=>D(e)===`MatrixTransform`);e&&(t=V(t,Cr(O(e,`Matrix`))))}}let n=Number(O(e,`Canvas.Left`)??0),r=Number(O(e,`Canvas.Top`)??0);return(n||r)&&(t=V({a:1,b:0,c:0,d:1,e:n,f:r},t)),t}function ni(e){let t=O(e,`Data`);if(t)return Sn(t);for(let t of k(e))if(D(t)===`Path.Data`)for(let e of k(t)){let t=O(e,`Figures`);if(t)return Sn(t)}return[]}function ri(e,t,n){let r=O(e,t);if(r)return H(r,n);let i=ii(e,t,`SolidColorBrush`);if(i)return H(O(i,`Color`),n*ai(O(i,`Opacity`)))}function ii(e,t,n){let r=`${D(e)}.${t}`;for(let t of k(e))if(D(t)===r)return k(t).find(e=>D(e)===n)}function ai(e){if(!e)return 1;let t=Number(e);return Number.isFinite(t)?Math.max(0,Math.min(1,t)):1}function oi(e){let t=O(e,`Data`)??``;return/F0/.test(t)?`nonzero`:`evenodd`}function si(e){let t=(O(e,`StrokeStartLineCap`)??``).toLowerCase(),n=(O(e,`StrokeEndLineCap`)??``).toLowerCase(),r=(O(e,`StrokeDashCap`)??``).toLowerCase(),i=t===`round`||n===`round`||r===`round`?`round`:t===`square`||n===`square`||r===`square`?`square`:`butt`,a=(O(e,`StrokeLineJoin`)??``).toLowerCase(),o=a===`round`?`round`:a===`bevel`?`bevel`:`miter`,s=Number(O(e,`StrokeMiterLimit`)??10);return{cap:i,join:o,miterLimit:Number.isFinite(s)&&s>0?s:10,dash:N(O(e,`StrokeDashArray`)??``).filter(e=>Number.isFinite(e)&&e>0),dashOffset:Number(O(e,`StrokeDashOffset`)??0)||0}}function ci(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 li(e){let t=wr(e,4278190080);return{r:t&255,g:t>>>8&255,b:t>>>16&255,a:t>>>24&255}}function ui(e){let t=li(e);return[t.r/255,t.g/255,t.b/255,t.a/255]}function di(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KiB`:`${(e/1024/1024).toFixed(1)} MiB`}function fi(e,t,n){let r=pi(e,e.VERTEX_SHADER,t),i=pi(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 pi(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 mi=`
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./dist-DXasMrKe.js","./package-CykH2Y1v.js","./runtime-core.esm-bundler-DO-WTVbd.js","./package-OvxnQO7z.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{h as e,r as t}from"./package-CykH2Y1v.js";import{D as n,J as r,X as i,Y as a,_ as o,b as s,f as c,g as l,h as u,i as d,o as f,r as p,s as m,t as h,y as g}from"./runtime-core.esm-bundler-DO-WTVbd.js";function _(e,t,n,r){return r===void 0?{level:e,code:t,message:n}:{level:e,code:t,message:n,source:r}}function v(e){return(e??[]).filter(e=>e.level!==`info`)}function y(){return globalThis.DecompressionStream}var b=class{async inflateRaw(e){let t=y();if(!t)throw Error(`This browser does not expose DecompressionStream. Provide a custom InflateProvider, or pre-bundle a WASM/JS inflater.`);try{return await x(e,`deflate-raw`,t)}catch(n){try{return await x(e,`deflate`,t)}catch{throw n instanceof Error?n:Error(String(n))}}}};async function x(e,t,n){let r=new Blob([e]).stream().pipeThrough(new n(t)),i=await new Response(r).arrayBuffer();return new Uint8Array(i)}var S=new TextDecoder(`utf-8`);new TextDecoder(`ascii`);function C(e){return S.decode(e)}function w(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 T(e){let t=w(e),n=t.lastIndexOf(`/`);return n<0?``:t.slice(0,n)}function E(e,t){if(!t)return w(e);if(t.startsWith(`/`))return w(t.slice(1));let n=T(e);return w((n?n+`/`:``)+t)}function ee(e){let t=e.indexOf(`:`);return t>=0?e.slice(t+1):e}function D(e){return ee(e.localName||e.nodeName)}function O(e,t){return e.getAttribute(t)??e.getAttributeNS(null,t)??void 0}function k(e){return Array.from(e.childNodes).filter(e=>e.nodeType===1)}function A(e,t=`document.xml`){let n=te(e);if(n)return n;let r=j(e);if(r!==e){let e=te(r);if(e)return e}try{return ie(r)}catch(e){throw Error(`XML parse error in ${t}: ${String(e)}`)}}function te(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 j(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 M=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}},ne=class{constructor(e){this.textContent=e,this.nodeType=3}},re=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 M)}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 M&&n(e)};for(let e of this.childNodes)e instanceof M&&n(e);return t}};function ie(e){let t=new re,n=[t],r=0;for(;r<e.length;){let i=e.indexOf(`<`,r);if(i<0){ae(n[n.length-1],e.slice(r));break}if(i>r&&ae(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.`);ae(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=oe(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 M&&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 M(c<0?o:o.slice(0,c),se(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 ae(e,t){if(!t)return;let n=ce(t);n.trim().length!==0&&e.childNodes.push(new ne(n))}function oe(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 se(e){let t=[],n=/([^\s=]+)\s*=\s*(?:"([^"]*)"|'([^']*)')/g,r;for(;r=n.exec(e);){let e=r[1],n=ce(r[2]??r[3]??``);t.push({name:e,nodeName:e,localName:ee(e),value:n})}return t}function ce(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 le(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 ue(e){let t=e.split(/[?#]/)[0]??e,n=t.lastIndexOf(`/`),r=t.lastIndexOf(`.`);return r>n?t.slice(r+1).toLowerCase():``}function de(e){switch(ue(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 fe(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 N(e){let t=e.match(/[-+]?(?:\d+\.\d*|\.\d+|\d+)(?:[eE][-+]?\d+)?/g);return t?t.map(Number).filter(Number.isFinite):[]}var pe=101010256,me=33639248,he=67324752,ge=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 b;for(let e of t)this.entryMap.set(w(e.name),e)}static open(t,n){let r=new DataView(t.buffer,t.byteOffset,t.byteLength),i=ve(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=P(r,i+4),o=P(r,i+6);if(a!==0||o!==0)throw Error(`Multi-disk ZIP archives are not supported.`);let s=P(r,i+10),c=F(r,i+12),l=F(r,i+16),u=0,d=l;if(F(r,d)!==me){let e=Math.max(0,i-c-1024*1024),t=-1;for(let n=i-c;n>=e;n--)if(n>=0&&F(r,n)===me){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(F(r,p)!==me)throw Error(`Bad central directory signature at ${p}.`);let e=P(r,p+8),n=P(r,p+10),i=P(r,p+12),a=P(r,p+14),o=F(r,p+16),s=F(r,p+20),c=F(r,p+24),l=P(r,p+28),d=P(r,p+30),m=P(r,p+32),h=F(r,p+42),g=t.subarray(p+46,p+46+l),_=t.subarray(p+46+l+d,p+46+l+d+m),v=w(ye(g,e)),y=ye(_,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(w(e))}get(e){return this.entryMap.get(w(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(F(r,i)!==he)throw Error(`Bad local header signature for ${t.name}.`);let a=P(r,i+26),o=P(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 _e(e){if(e.byteLength<22)return!1;let t=new DataView(e.buffer,e.byteOffset,e.byteLength);return F(t,0)===he?!0:ve(t)>=0}function ve(e){let t=Math.max(0,e.byteLength-65535-22);for(let n=e.byteLength-22;n>=t;n--)if(F(e,n)===pe)return n;return-1}function ye(e,t){return t&2048?C(e):Array.from(e,e=>String.fromCharCode(e)).join(``)}function P(e,t){return e.getUint16(t,!0)}function F(e,t){return e.getUint32(t,!0)}async function be(e){let t=new Map,n=new Map,r=[];if(e.has(`[Content_Types].xml`)){let i=A(C(await e.read(`[Content_Types].xml`)),`[Content_Types].xml`);for(let e of Array.from(i.documentElement.children)){let i=D(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=w((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:Se(t,n,e.name),size:e.uncompressedSize})),readText:async t=>C(await e.read(w(t))),readBytes:async t=>e.read(w(t)),getContentType:e=>Se(t,n,e),getRelationships:async(t=``)=>{let n=w(t),r=i.get(n);if(r)return r;let a=xe(n);if(!e.has(a))return i.set(n,[]),[];let o=A(C(await e.read(a)),a),s=[];for(let e of Array.from(o.documentElement.children)){if(D(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:E(n,i)})}return i.set(n,s),s}}}function xe(e){let t=w(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 Se(e,t,n){let r=w(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 Ce(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 we=1,Te=4,Ee=16,De=32,Oe=128,ke=4,Ae=8,je=1,Me=4,Ne=5,Pe=1,Fe=2,Ie=4,Le=8,Re=16,ze=32,Be=64,Ve=128,He=0,Ue=1,We=2,Ge=3,Ke=4,qe=5,Je=6,I=-2139062144,Ye=-2139062145,Xe=-2139062146;async function Ze(e,t={}){let n=[],r=await Qe(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=et(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(_(`warning`,`W3D_EDGEBREAKER_PARTIAL`,`${c} connectivity-compressed shell candidate(s) were skipped.`,t.sourcePath)),i.length===0&&n.push(_(`error`,`W3D_NO_MESHES`,`No renderable W3D shell meshes were decoded.`,t.sourcePath));let d=vt(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 Qe(e,t,n){let r=new b;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=$e(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 $e(e){let t=e.length;for(;t>0&&e[t-1]===0;)t--;return t===e.length?e:e.subarray(0,t)}function et(e,t,n){let r=Tt(e,t+1),i=Et(r),a=0;if((i&Oe)!==0&&(a=Dt(r)),(i&De)!==0||((i&Ee)===0&&L(r),Et(r),a&3))return;let o=i&65?Et(r):Me,s,c,l;if(o===Ne){let t=L(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=tt(n);if((i&we)===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=St(e,r.pos,t),r.pos+=t*4}else throw Error(`edgebreaker quantized-point reconstruction is not enabled for this shell.`);if(c=pt(a.faces,a.pointCount),l=`edgebreaker-v${n[0]??0}`,c.length<3)throw Error(`Empty edgebreaker face list.`)}else if(o===Me){let t=L(r);if(t<=0||t>1e7)throw Error(`Bad uncompressed shell point count.`);s=St(e,r.pos,t*3),r.pos+=t*3*4,c=pt(lt(r,t,(i&Te)!==0,!1).indices,t),l=`uncompressed`}else if(o===je){let t=L(r);if(t<=0||t>1e7)throw Error(`Bad compressed shell point count.`);let n=(a&Ae)===0?Ct(r,6):[0,0,0,1,1,1],o=Et(r),u=L(r);if(u<=0||r.pos+u>e.length)throw Error(`Bad compressed shell point payload length.`);s=ft(e.subarray(r.pos,r.pos+u),t,o,n),r.pos+=u,c=pt(lt(r,t,(i&Te)!==0,(a&ke)!==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=mt(s,c),d=ht(s,c),f=yt(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:bt(n),sourceStart:t,sourceEnd:r.pos,decodeKind:l}}function tt(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+kt(l+o),l+s>e.length)throw Error(`Invalid edgebreaker MTable offset.`);let d=nt(e.subarray(l,l+s));l+=s+kt(l+s);let f=rt(u,d),p=at(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 nt(e){let t=Tt(e,0),n=L(t),r=(n&Pe)===0?0:L(t),i=(n&Fe)===0?0:L(t),a=(n&Ie)===0?0:i,o=(n&Le)===0?0:L(t),s=(n&Re)===0?0:L(t),c=wt(t,r),l=wt(t,i),u=wt(t,a),d=[],f=0;for(let e=0;e<o;e++)f+=L(t),d.push(f);let p=[],m=new Map;f=0;for(let e=0;e<s;e+=2){let e=L(t)+f;f=e;let n=L(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&ze)===0?void 0:Ct(t,6),quantization:(n&Be)===0?[11,11,11]:[L(t),L(t),L(t)],normalQuantization:(n&Ve)===0?[11,11,11]:[L(t),L(t),L(t)]}}function rt(e,t){let n=Array.from(e),r=[],i=0,a=0;for(;a<n.length;){let{ecount:e,offsets:o}=it(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]=I;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(I);let e=d.length;d.push({start:0,twin:I},{start:0,twin:I},{start:0,twin:I});let t=[3,l[f],l[s[f]],-1];u[f]!==I&&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(_===He){t[3]=i,d[e+1].twin=I,d[e+2].twin=I,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(_===Ue)t[3]=l[c[f]],d[e+1].twin=I,d[e+2].twin=u[c[f]],u[c[f]]!==I&&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(_===We)if(t[3]=l[c[f]],d[e+1].twin=u[s[f]],u[s[f]]!==I&&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]]!==I&&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]),ct(t)&&r.push(t),h.length>0)f=h.pop();else break;else if(_===Ge)t[3]=l[s[s[f]]],d[e+1].twin=u[s[f]],u[s[f]]!==I&&u[s[f]]>=0&&u[s[f]]<d.length&&(d[u[s[f]]].twin=e+1),d[e+2].twin=I,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(_===Ke){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=I,d[e+2].twin=I,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(_!==We)if(ct(t))r.push(t);else throw Error(`Invalid edgebreaker triangle.`);if(a>=n.length)break}}return{faces:r,opcodePointCount:i}}function it(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===He)--r;else if(t===Ue)r+=1;else if(t===We)if(r+=3,s.length>0){let e=c.pop();l[e]=r-2-s.pop()}else break;else if(t===Ge)r+=1;else if(t===Ke)--r,c.push(i),s.push(r),l[i]=0,i++;else if(t===qe){let e=n.mlengths[a++]??0;r-=e+1}else if(t===Je)n.mlengths[o],--r,o++;else throw Error(`Bad edgebreaker opcode ${t}.`)}return{ecount:r,offsets:l}}function at(e,t,n){let r=new Int32Array(e);for(let n of t.dummies)n>=0&&n<e&&(r[n]=Ye);for(let n=0;n+1<t.patches.length;n+=2){let i=t.patches[n];i>=0&&i<e&&r[i]!==Ye&&(r[i]=Xe)}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(st(n,r)||st(i,r)||st(o,r))continue;let s=[3,ot(n,r,t),ot(i,r,t),ot(o,r,t)];ct(s)&&a.push(s)}return a}function ot(e,t,n){return t[e]===Xe?n.patchMap.get(e)??e:e-t[e]}function st(e,t){return e<0||e>=t.length||t[e]===Ye}function ct(e){return e[1]!==e[2]&&e[2]!==e[3]&&e[3]!==e[1]&&e[1]>=0&&e[2]>=0&&e[3]>=0}function lt(e,t,n,r){Et(e);let i=L(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=ut(a,r);return{indices:dt(o,t,n),values:o}}function ut(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 dt(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 ft(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 pt(e,t){return t<=65535?new Uint16Array(e):new Uint32Array(e)}function mt(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 ht(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=gt(e,o,s,c);r.push(l),_t(i,o,s,a),_t(i,s,c,a),_t(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 pt(o,Math.floor(e.length/3))}function gt(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 _t(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 vt(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 yt(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 bt(e){let t=e*.61803398875%1,n=.62,r=.96-n*.34,i=2*n-r;return[xt(i,r,t+1/3),xt(i,r,t),xt(i,r,t-1/3)]}function xt(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 St(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 Ct(e,t){let n=[];for(let r=0;r<t;r++)n.push(Ot(e));return n}function wt(e,t){let n=[];for(let r=0;r<t;r++)n.push(L(e));return n}function Tt(e,t=0){return{bytes:e,pos:t,view:new DataView(e.buffer,e.byteOffset,e.byteLength)}}function Et(e){if(e.pos>=e.bytes.length)throw Error(`Unexpected end of W3D stream.`);return e.bytes[e.pos++]}function Dt(e){let t=e.view.getUint16(e.pos,!0);return e.pos+=2,t}function L(e){let t=e.view.getInt32(e.pos,!0);return e.pos+=4,t}function Ot(e){let t=e.view.getFloat32(e.pos,!0);return e.pos+=4,t}function kt(e){return 3-(e-1)%4}async function At(e,t,n){let r=e.diagnostics;e.metadata??={},e.materials??=[],e.textures??=[],e.sceneTree??=[],e.pmi??=[],e.views??=[],e.animations??=[],await jt(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{Mt(e,C(await n.readBytes(i.path)),i.path)}catch(e){r.push(_(`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)?Pt(e,C(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}=Ft(C(await n.readBytes(s.path)),s.path,c);l=o,e.sceneTree=t,e.pmi=r,e.views=Xt(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,Lt(t,e.textures??[]));e.materials=Array.from(u.values())}catch(e){r.push(_(`warning`,`EMODEL_PRESENTATION_PARSE_FAILED`,`Failed to parse eModel presentation: ${String(e)}`,s.path))}Bt(e,o,c,l);let u=Qt(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 jt(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=tn(await n.readBytes(e.path));t=r?.width,a=r?.height}catch(t){r.push(_(`warning`,`EMODEL_TEXTURE_SIZE_FAILED`,`Failed to read texture size: ${String(t)}`,e.path))}i.push({id:e.path,name:en(e.title)??$t(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 Mt(e,t,n){let r=A(t,n),i=r.documentElement;if(i){let t=Array.from(i.getElementsByTagName(`*`)).find(e=>D(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=>D(e)===`Property`)){let n=t.getAttribute(`name`),r=t.getAttribute(`value`);n&&r&&(e.metadata[n]=r)}let a=Nt(e.metadata);a&&(e.views=Xt(e.views??[],[a]),e.initialView=a)}function Nt(e){let t=Ut(e._ViewCubeHomeCameraPosition),n=Ut(e._ViewCubeHomeCameraTarget),r=Ut(e._ViewCubeHomeCameraUpVector),i=Ut(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 Pt(e,t,n,r){try{let r=A(t,n),i=[];for(let e of Array.from(r.getElementsByTagName(`*`)).filter(e=>D(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(_(`warning`,`EMODEL_CONTENTDEF_PARSE_FAILED`,`Failed to parse eModel content definition: ${String(e)}`,n)),[]}}function Ft(e,t,n){let r=A(e,t),i=Array.from(r.getElementsByTagName(`*`)).filter(e=>D(e)===`View`),a=[];for(let e of i){let t=Gt(e);for(let e of t)a.push(zt(e,n))}if(a.length===0)for(let e of Array.from(r.getElementsByTagName(`*`)).filter(e=>D(e)===`ReferenceNode`&&!Kt(e)))a.push(zt(e,n));let o=[];for(let e of Array.from(r.getElementsByTagName(`*`)).filter(e=>/ModelViewNode|View/i.test(D(e)))){let t=e.getAttribute(`id`)??`view-${o.length+1}`,n=e.getAttribute(`label`)??e.getAttribute(`name`)??t,r=Wt(e).find(e=>D(e)===`Camera`)??Array.from(e.getElementsByTagName(`*`)).find(e=>D(e)===`Camera`),i=r?Vt(r):void 0;(i||/ModelViewNode/i.test(D(e)))&&o.push({id:t,label:n,camera:i})}let s=[];for(let e of Array.from(r.getElementsByTagName(`*`))){let t=D(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:Jt(e)})}let c=[];for(let e of Array.from(r.getElementsByTagName(`*`)).filter(e=>/Animation|Sequence|Timeline/i.test(D(e))))c.push({id:e.getAttribute(`id`)??`animation-${c.length+1}`,name:e.getAttribute(`label`)??e.getAttribute(`name`)??D(e),targetRef:e.getAttribute(`target`)??void 0});let l=It(r);return{nodes:a,pmi:s,views:Zt(o),animations:c,materials:l}}function It(e){let t=new Map;for(let n of Array.from(e.getElementsByTagName(`*`)).filter(e=>D(e)===`InstanceAttributes`)){let e=n.getAttribute(`id`);if(!e)continue;let r=Wt(n).find(e=>D(e)===`Color`)??Array.from(n.getElementsByTagName(`*`)).find(e=>D(e)===`Color`);if(!r)continue;let i=Array.from(r.getElementsByTagName(`*`)).find(e=>D(e)===`Channel`&&/diffuse/i.test(e.getAttribute(`type`)??``)),a=Array.from(r.getElementsByTagName(`*`)).find(e=>D(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=en(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 Lt(e,t){if(e.textureId||!e.textureName)return e;let n=Rt(e.textureName),r=t.find(e=>Rt(e.name??``).includes(n)||n.includes(Rt(e.name??``)));return r?{...e,textureId:r.id}:e}function Rt(e){return e.replace(/"/g,``).replace(/["{}]/g,``).toLowerCase()}function zt(e,t){let n=Yt(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`)??D(e),contentRefs:n,meshIds:[],children:[],properties:Jt(e)};for(let e of n)t.set(e,r);for(let n of Gt(e))r.children.push(zt(n,t));return r}function Bt(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 Vt(e){return{position:Ht(e,`positionX`,`positionY`,`positionZ`),target:Ht(e,`targetX`,`targetY`,`targetZ`),up:Ht(e,`upVectorX`,`upVectorY`,`upVectorZ`),field:Ht(e,`fieldWidth`,`fieldHeight`,`fieldDepth`),projection:e.getAttribute(`projectionType`)??void 0}}function Ht(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 Ut(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 Wt(e){return Array.from(e.children)}function Gt(e){let t=[];for(let n of Wt(e)){let e=D(n);if(e.endsWith(`Node`))t.push(n);else if(e===`Nodes`||e===`Views`)for(let e of Wt(n))D(e).endsWith(`Node`)&&t.push(e)}return t}function Kt(e){let t=qt(e);for(;t;){if(D(t)===`ReferenceNode`)return!0;t=qt(t)}return!1}function qt(e){return(e.parentElement??e.parentNode)||void 0}function Jt(e){let t={};for(let n of Array.from(e.attributes))t[n.localName||n.name]=n.value;return t}function Yt(e){return e.trim().split(/[\s,]+/).filter(Boolean)}function Xt(e,t){return Zt([...e,...t])}function Zt(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 Qt(e){let t=0;for(let n of e)t+=1+Qt(n.children);return t}function $t(e){let t=e.lastIndexOf(`/`);return t>=0?e.slice(t+1):e}function en(e){if(e)return e.replace(/^"|"$/g,``).replace(/"/g,`"`)}function tn(e){if(e.length>=24&&e[0]===137&&e[1]===80&&e[2]===78&&e[3]===71)return{width:nn(e,16),height:nn(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 nn(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0}var rn=new Set([`http://schemas.microsoft.com/xps/2005/06/fixedrepresentation`,`http://schemas.openxps.org/oxps/v1.0/fixedrepresentation`]);async function an(e){let t=await be(e),n=[],r=[],i=await sn(t,r,n);if(r.length===0){let e=await ln(t,n);for(let i of e)try{let e=A(await t.readText(i),i),a=Array.from(e.getElementsByTagName(`*`)).filter(e=>D(e)===`DocumentReference`);a.length===0&&n.push(_(`warning`,`DWFX_NO_DOCREF`,`No DocumentReference elements found in ${i}.`,i));for(let e of a){let a=e.getAttribute(`Source`);a&&await un(t,E(i,a),r,n)}}catch(e){n.push(_(`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 dn(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:[_(`error`,`DWFX_NO_PAGES`,`No supported renderable page was found in this DWFx package.`)]})}return Ce({kind:`dwfx`,pages:[],resources:t.resources,diagnostics:n,packageEntries:e.entries.map(e=>e.name)},r,e,t)}function on(e){return e.has(`[Content_Types].xml`)&&(e.has(`_rels/.rels`)||e.entries.some(e=>/\.(fpage|dwfseq)$/i.test(e.name)))}async function sn(e,t,n){let r=await cn(e,n),i=[];for(let t of r)try{let r=fn(await e.readText(t),t);i.push(...r),n.push(_(`info`,`DWFX_DWF_MANIFEST_FOUND`,`Found DWFx DWF manifest with ${r.length} section(s).`,t))}catch(e){n.push(_(`warning`,`DWFX_DWF_MANIFEST_PARSE_FAILED`,`Failed to parse DWFx DWF manifest: ${String(e)}`,t))}for(let r of i.filter(e=>pn(e))){let i=yn(r,/2d\s+streaming\s+graphics/i)??r.resources.find(e=>/\.fpage$/i.test(e.path));if(!i||!/\.fpage$/i.test(bn(i.path)))continue;let a=bn(i.path);if(!e.zip.has(a))continue;let o=await dn(e,a,n);t.push({id:`page-${t.length+1}`,name:r.title||i.title||xn(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=>mn(e))){let r=hn(n,e.zip),i=yn(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 Ze(await e.zip.read(i.path),{title:n.title||i.title||xn(i.path),sourcePath:i.path});if(await At(r,n.resources,e),r.meshes.length>0){t.push({id:`w3d-${t.length+1}`,name:n.title||i.title||xn(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,_(`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:[_(`warning`,`DWFX_W3D_PARSE_FAILED`,`Failed to parse W3D geometry: ${String(e)}`,i.path)]});continue}if(r&&e.zip.has(r.path)){let i=Sn(await e.zip.read(r.path))??{width:1e3,height:1e3};t.push({id:`image-${t.length+1}`,name:n.title||r.title||xn(r.path),kind:`image`,sourcePath:r.path,mediaType:r.mediaType??de(r.path)??`image/png`,width:i.width,height:i.height,diagnostics:[_(`info`,`DWFX_3D_PREVIEW_ONLY`,`No W3D/HSF geometry stream was declared; showing the embedded section preview image.`,r.path)]})}}return i}async function cn(e,t){let n=new Set,r=e=>{e&&n.add(w(bn(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(w(e.resolvedTarget)),/document$/i.test(e.type)&&/manifest\.xml$/i.test(e.resolvedTarget)&&r(e.resolvedTarget)}catch(e){t.push(_(`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=A(await e.readText(n),n),i=Array.from(t.getElementsByTagName(`*`)).filter(e=>D(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(_(`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 ln(e,t){let n=new Set;try{let t=await e.getRelationships(``);for(let e of t)(rn.has(e.type)||/fixedrepresentation/i.test(e.type)||/\.fdseq$/i.test(e.resolvedTarget))&&n.add(w(e.resolvedTarget))}catch(e){t.push(_(`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 un(e,t,n,r){let i;try{i=await e.readText(t)}catch(e){r.push(_(`warning`,`DWFX_FDOC_READ_FAILED`,`Failed to read fixed document ${t}: ${String(e)}`,t));return}let a=A(i,t),o=Array.from(a.getElementsByTagName(`*`)).filter(e=>D(e)===`PageContent`);for(let i of o){let a=i.getAttribute(`Source`);if(!a)continue;let o=E(t,bn(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=bn(o);let c=i.getAttribute(`Width`),l=i.getAttribute(`Height`),u=c&&l?{width:Number(c),height:Number(l)}:await dn(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 dn(e,t,n){try{let n=bn(t),r=A(C(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(_(`warning`,`DWFX_PAGE_SIZE_FAILED`,`Failed to read FixedPage size: ${String(e)}`,t)),{width:1e3,height:1e3}}}function fn(e,t){let n=A(e,t);return Array.from(n.getElementsByTagName(`*`)).filter(e=>D(e)===`Section`).map((e,t)=>{let n=_n(e,`name`)??`section-${t+1}`,r=_n(e,`title`)??n;return{type:_n(e,`type`)??``,name:n,title:r,resources:Array.from(e.getElementsByTagName(`*`)).filter(e=>D(e).endsWith(`Resource`)||D(e)===`Resource`).map(e=>({path:w(bn(_n(e,`href`)??``)),role:_n(e,`role`),mediaType:_n(e,`mime`),title:_n(e,`title`),size:vn(e,`size`)})).filter(e=>e.path.length>0)}}).filter(e=>e.resources.length>0||e.type.length>0)}function pn(e){return/(^|\.)ePlot$/i.test(e.type)||/com\.autodesk\.dwf\.ePlot$/i.test(e.type)}function mn(e){return/(^|\.)eModel$/i.test(e.type)||/com\.autodesk\.dwf\.eModel$/i.test(e.type)}function hn(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)=>gn(t)-gn(e))[0]}function gn(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 _n(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 vn(e,t){let n=_n(e,t);if(n===void 0)return;let r=Number(n);return Number.isFinite(r)?r:void 0}function yn(e,t){return e.resources.find(e=>t.test(e.role??``))}function bn(e){return w((e.split(/[?#]/)[0]??e).replace(/^\//,``))}function xn(e){let t=bn(e),n=t.lastIndexOf(`/`);return n>=0?t.slice(n+1):t}function Sn(e){if(e.length>=24&&e[0]===137&&e[1]===80&&e[2]===78&&e[3]===71)return{width:Cn(e,16),height:Cn(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 Cn(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0}function wn(e){let t=Dn(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 Tn(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=jn(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 En(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=On(i,a,c.x,c.y,t);for(let t=1;t<=e;t++){let n=t/e;l(kn(i,c.x1,c.x2,c.x,n),kn(a,c.y1,c.y2,c.y,n))}i=c.x,a=c.y;break}case`Q`:{let e=On(i,a,c.x,c.y,t);for(let t=1;t<=e;t++){let n=t/e;l(An(i,c.x1,c.x,n),An(a,c.y1,c.y,n))}i=c.x,a=c.y;break}case`A`:{let e=jn(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 Dn(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 On(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 kn(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 An(e,t,n,r){let i=1-r;return i*i*e+2*i*r*t+r*r*n}function jn(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,ee=f*w+d*T+(t+c)/2,D=(h-w)/n,O=(g-T)/r,k=(-h-w)/n,A=(-g-T)/r,te=Math.atan2(O,D),j=Math.atan2(D*A-O*k,D*k+O*A);!o&&j>0&&(j-=2*Math.PI),o&&j<0&&(j+=2*Math.PI);let M=Math.max(2,Math.min(l,Math.ceil(Math.abs(j)/(Math.PI/16)))),ne=[];for(let e=1;e<=M;e++){let t=te+j*e/M,i=d*n*Math.cos(t)-f*r*Math.sin(t)+E,a=f*n*Math.cos(t)+d*r*Math.sin(t)+ee;ne.push([i,a])}return ne}function Mn(e,t){let n=C(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:wn(n),stroke:Pn(e,`stroke`)??a,fill:Pn(e,`fill`)??void 0,lineWidth:Number(Pn(e,`stroke-width`)??s)}),c++}let t=n.matchAll(/<(polyline|polygon)\b[^>]*\bpoints=["']([^"']+)["'][^>]*>/gi);for(let e of t){let t=e[0],n=N(e[2]);n.length>=4&&i.push({type:e[1].toLowerCase()===`polygon`?`polygon`:`polyline`,points:n,stroke:Pn(t,`stroke`)??a,fill:Pn(t,`fill`)??void 0,lineWidth:Number(Pn(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=N(t);if(/^(color|stroke|pen|wt_color)\b/i.test(t)){a=Fn(t)??a,c++;continue}if(/^(fill|brush|wt_fill)\b/i.test(t)){o=Fn(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:wn(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:Nn(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:Nn(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=In(i);return i.length===0?r.push(_(`warning`,`W2D_TEXT_NO_GEOMETRY`,`Textual W2D parser did not find supported geometry commands in ${t}.`,t)):r.push(_(`info`,`W2D_TEXT_PARSED`,`Parsed ${i.length} supported vector primitives from ${t}.`,t)),c===0&&r.push(_(`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 Nn(e){return e.length>=5&&Number.isInteger(e[0])&&e.length-1==e[0]*2?e.slice(1):e}function Pn(e,t){return e.match(RegExp(`${t}=["']([^"']+)["']`,`i`))?.[1]}function Fn(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=N(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 In(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 Ln=1,Rn=2,zn=4,Bn=8,Vn=16,Hn=32,Un=64,Wn=128,Gn=256,Kn=512,qn=1024;function Jn(e,t){return new Yn(e,t).parse()}var Yn=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(_(`info`,`W2D_BINARY_PARSED`,`Parsed ${this.primitives.length} vector primitives from binary WHIP!/W2D stream (${this.opcodes} opcodes).`,this.sourcePath)):this.diagnostics.push(_(`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(_(`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:$n(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=rr(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=Qn(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=or(this.readAsciiInteger()),this.state.fillOn&&(this.state.fill=this.state.stroke),!0;case`c`:return this.state.stroke=or(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=Qn(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=ar(n);e.length>=3&&(this.state.stroke=nr(e[0],e[1],e[2]));break}case`(LineWeight`:{let e=ar(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&Ln&&(this.state.fontName=this.readWhipString()||this.state.fontName),e&Rn&&this.u8(),e&zn&&this.u8(),e&Bn&&this.u8(),e&Vn&&this.u8(),e&Hn&&(this.state.fontHeight=Math.max(1,Math.abs(this.i32()))),e&Un&&(this.state.fontRotation=this.u16()),e&Wn&&this.u16(),e&Gn&&this.u16(),e&Kn&&this.u16(),e&qn&&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:Xn(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:Xn(e),fill:t,stroke:n,lineWidth:this.state.lineWidth})}ellipsePrimitive(e,t,n,r,i,a,o=this.state.fillOn){let s=Zn(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&&er(this.bytes[this.pos]);)this.pos++;let t=tr(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 tr(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 tr(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=tr(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 Xn(e){let t=[];for(let n of e)t.push(n.x,n.y);return t}function Zn(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 Qn(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 $n(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 er(e){return e>=48&&e<=57}function tr(e){return Array.from(e,e=>String.fromCharCode(e)).join(``)}function nr(e,t,n){return`rgb(${ir(e)}, ${ir(t)}, ${ir(n)})`}function rr(e,t,n,r){return`rgba(${ir(e)}, ${ir(t)}, ${ir(n)}, ${Math.max(0,Math.min(1,r/255))})`}function ir(e){return Math.max(0,Math.min(255,Math.round(e)))}function ar(e){return(e.match(/[-+]?(?:\d+\.\d*|\.\d+|\d+)(?:[eE][-+]?\d+)?/g)??[]).map(Number).filter(Number.isFinite)}function or(e){return[`#000000`,`#ff0000`,`#ffff00`,`#00ff00`,`#00ffff`,`#0000ff`,`#ff00ff`,`#000000`,`#808080`,`#c0c0c0`][e]??`#000000`}function sr(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 cr(e){let t=[],n=[],r=e.entries.map(e=>({path:e.name,mediaType:de(e.name),size:e.uncompressedSize})),i=e.entries.find(e=>/(^|\/)manifest\.xml$/i.test(e.name)),a=[];if(i)try{a=dr(C(await e.read(i)),i.name),t.push(_(`info`,`DWF_MANIFEST_FOUND`,`Found DWF manifest with ${a.length} section(s).`,i.name))}catch(e){t.push(_(`warning`,`DWF_MANIFEST_PARSE_FAILED`,`Failed to parse DWF manifest: ${String(e)}`,i.name))}else t.push(_(`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=_r(r,/2d\s+streaming\s+graphics/i)??r.resources.find(e=>/\.w2d$/i.test(e.path));if(!i)continue;let a=_r(r,/^descriptor$/i)??{path:w(r.name+`/descriptor.xml`)},o={};if(a&&e.has(a.path))try{o=fr(C(await e.read(a.path)),i.path)}catch(e){t.push(_(`warning`,`DWF_DESCRIPTOR_PARSE_FAILED`,`Failed to parse descriptor for ${r.title}: ${String(e)}`,a.path))}let s=[],c=[];try{let t=await ur(e,i.path);c.push(...t.primitives),s.push(...t.diagnostics)}catch(e){s.push(_(`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=pr(C(await e.read(t.path)),t.path,o.w2dTransform);c.push(...n.primitives),s.push(...n.diagnostics)}catch(e){s.push(_(`warning`,`DWF_MARKUP_XML_PARSE_FAILED`,`Failed to parse markup private XML: ${String(e)}`,t.path))}if(c.length>0){let e=gr(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||vr(i.path),kind:`w2d-text`,sourcePath:i.path,width:t,height:a,primitives:c,bounds:e,diagnostics:s})}else{let t=_r(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||vr(t.path),kind:`image`,sourcePath:t.path,mediaType:t.mediaType??de(t.path)??`image/png`,width:1e3,height:1e3,diagnostics:[...s,_(`warning`,`DWF_IMAGE_FALLBACK`,`Vector stream did not produce geometry; using section thumbnail as fallback.`,t.path)]})}}n.length===0&&await lr(e,n,t);let o=e.entries.filter(e=>/\.hsf$/i.test(e.name));if(o.length>0&&(t.push(_(`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:[_(`warning`,`DWF_3D_HSF_UNSUPPORTED`,`3D HSF rendering is not implemented in this build.`,o[0]?.name)]})),n.length===0){let t=yr(e);t&&n.push({id:`image-1`,name:vr(t.name),kind:`image`,sourcePath:t.name,mediaType:de(t.name)??`image/png`,width:1e3,height:1e3,diagnostics:[_(`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:[_(`error`,`DWF_NO_SUPPORTED_PAGE`,`No supported renderable DWF resource was found.`)]}),Ce({kind:`dwf`,pages:[],resources:r,diagnostics:t,packageEntries:e.entries.map(e=>e.name)},n,e,void 0)}async function lr(e,t,n){let r=e.entries.filter(e=>/\.w2d$/i.test(e.name));for(let i of r)try{let n=await ur(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:vr(i.name),kind:`w2d-text`,sourcePath:i.name,width:a,height:o,primitives:n.primitives,bounds:r,diagnostics:n.diagnostics})}catch(e){n.push(_(`warning`,`DWF_W2D_READ_FAILED`,`Failed to read ${i.name}: ${String(e)}`,i.name))}}async function ur(e,t){let n=await e.read(t);return le(n)?Mn(n,t):Jn(n,t)}function dr(e,t){let n=A(e,t);return Array.from(n.getElementsByTagName(`*`)).filter(e=>z(e)===`Section`).map((e,t)=>{let n=R(e,`name`)??`section-${t+1}`;return{name:n,title:R(e,`title`)??n,resources:Array.from(e.getElementsByTagName(`*`)).filter(e=>z(e).endsWith(`Resource`)||z(e)===`Resource`).map(e=>({path:w(R(e,`href`)??``),role:R(e,`role`),mediaType:R(e,`mime`),title:R(e,`title`)})).filter(e=>e.path.length>0)}}).filter(e=>e.resources.length>0)}function fr(e,t){let n=A(e,`descriptor.xml`),r=Array.from(n.getElementsByTagName(`*`)).find(e=>z(e)===`Paper`),i={};if(r){i.paperWidth=B(r,`width`),i.paperHeight=B(r,`height`);let e=R(r,`clip`);e&&(i.clip=N(e))}let a=Array.from(n.getElementsByTagName(`*`)).filter(e=>/GraphicResource$/i.test(z(e))||z(e)===`GraphicResource`),o=a.find(e=>w(R(e,`href`)??``)===w(t))??a.find(e=>/2d\s+streaming\s+graphics/i.test(R(e,`role`)??``)),s=o?N(R(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 pr(e,t,n){let r=A(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=>N(R(e,`Points`)??R(e,`points`)??``);for(let e of Array.from(r.getElementsByTagName(`*`))){let t=z(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=mr(e);i.push({type:`polyline`,points:n,stroke:r.stroke,lineWidth:r.lineWidth})}}else if(t===`Tag`||t===`Target`){let t=B(e,`CenterX`),n=B(e,`CenterY`),r=B(e,`Width`),o=B(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=mr(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=B(e,`X`),r=B(e,`Y`);if(t!==void 0&&r!==void 0){let o=Array.from(e.getElementsByTagName(`*`)).filter(e=>z(e)===`TextPhrase`),s=o.map(e=>R(e,`String`)??``).filter(Boolean).join(`
|
|
4
|
+
`);if(s){let c=a(t,r),l=B(e,`Height`),u=o.length?B(o[0],`FontHeight`):void 0,d=n&&l?Math.max(10,Math.abs(l/n.sy)):u??12,f=o.length?R(o[0],`Color`):void 0;i.push({type:`text`,x:c.x,y:c.y,text:s,size:d,fill:f?hr(f):mr(e).stroke})}}}}let s=[];return i.length>0&&s.push(_(`info`,`DWF_MARKUP_XML_PARSED`,`Parsed ${i.length} markup primitive(s) from markup private XML.`,t)),{primitives:i,diagnostics:s}}function mr(e){let t=`#0000ff`,n,r=1,i=Array.from(e.getElementsByTagName(`*`)).filter(e=>z(e)===`FormatProperty`);for(let e of i){let i=(R(e,`Name`)??``).toUpperCase(),a=(R(e,`Enabled`)??`true`).toLowerCase()!==`false`,o=R(e,`ModifierUIntVal`)??R(e,`UIntValue`)??R(e,`DblValue`)??R(e,`IntValue`);!a||o===void 0||(i===`LINECOLOR`&&(t=hr(o)),i===`FILLCOLOR`&&(n=hr(o)),i===`LINEWEIGHT`&&(r=Math.max(1,Number(o)||r)),i===`NOFILL`&&/true/i.test(R(e,`BoolValue`)??``)&&(n=void 0))}return{stroke:t,fill:n,lineWidth:r}}function hr(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 gr(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 _r(e,t){return e.resources.find(e=>t.test(e.role??``))}function R(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 z(e){let t=e.localName||e.nodeName,n=t.indexOf(`:`);return n>=0?t.slice(n+1):t}function B(e,t){let n=R(e,t);if(n===void 0)return;let r=Number(n);return Number.isFinite(r)?r:void 0}function vr(e){let t=e.lastIndexOf(`/`);return t>=0?e.slice(t+1):e}function yr(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)=>br(t.name,t.uncompressedSize)-br(e.name,e.uncompressedSize))[0]}function br(e,t){let n=Math.min(t,1e7)/1e3;return/thumbnail|preview/i.test(e)&&(n+=5e3),ue(e)===`png`&&(n+=100),n}async function xr(e,t={}){let n=await Sr(e),r=t.fileName??(e instanceof File?e.name:void 0)??`document.dwf`;if(_e(n)){let e=ge.open(n,t.inflater);return on(e)?await an(e):sr(e)?await cr(e):e.entries.some(e=>/\.fpage$/i.test(e.name))?await an(e):await cr(e)}if(le(n)){let e=Mn(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 Ce({kind:`unknown`,pages:[],resources:[{path:r,mediaType:`text/plain`,size:n.byteLength}],diagnostics:[_(`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:[_(`error`,`UNSUPPORTED_RAW_FORMAT`,`Unsupported raw DWF input. DWF 6+/DWFx ZIP packages are required for this build.`,r)]};return Ce({kind:`unknown`,pages:[],resources:[{path:r,size:n.byteLength}],diagnostics:i.diagnostics,packageEntries:[r]},[i])}async function Sr(e){return e instanceof Uint8Array?e:e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(await e.arrayBuffer())}var Cr={a:1,b:0,c:0,d:1,e:0,f:0};function V(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 wr(e,t,n){return[e.a*t+e.c*n+e.e,e.b*t+e.d*n+e.f]}function Tr(e){if(!e)return{...Cr};let t=N(e);return t.length>=6?{a:t[0],b:t[1],c:t[2],d:t[3],e:t[4],f:t[5]}:{...Cr}}function H(e,t=1){if(!e||e===`Transparent`||e===`{x:Null}`)return;let n=e.trim();if(n.startsWith(`{`)||n.includes(`Brush`))return;let r=Ar(n);if(r&&(n=r),n.startsWith(`sc#`)){let e=N(n);if(e.length>=3){let n=+(e.length>=4),r=e.length>=4?e[0]:1;return Or(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 Or(parseInt(e[0]+e[0],16),parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),t);if(e.length===6)return Or(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 Or(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 Er(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 Dr(t,n,i,Math.round(a*255))}if(n.startsWith(`#`)){let e=n.slice(1);if(e.length===6)return Dr(parseInt(e.slice(0,2),16),parseInt(e.slice(2,4),16),parseInt(e.slice(4,6),16),255);if(e.length===8)return Dr(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=Ar(n);return i?Er(i,t):t}function Dr(e,t,n,r){return e=kr(e),t=kr(t),n=kr(n),r=kr(r),e&255|(t&255)<<8|(n&255)<<16|(r&255)<<24}function Or(e,t,n,r){return`rgba(${kr(e)}, ${kr(t)}, ${kr(n)}, ${Math.max(0,Math.min(1,r))})`}function kr(e){return Math.max(0,Math.min(255,Math.round(e)))}function Ar(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 jr(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 Mr(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 Nr(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 Pr(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 Fr(e,t,n={},r){let i=Nr(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 Ir(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*Nr(t))>=a*i}function Lr(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=Rr(t,e.minX,e.minY),s=Rr(t,e.maxX,e.minY),c=Rr(t,e.maxX,e.maxY),l=Rr(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 Rr(e,t,n){return[e.a*t+e.c*n+e.e,e.b*t+e.d*n+e.f]}var zr=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,Er(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]=wr(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,Er(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]=wr(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,Er(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}},Br=12,Vr=128*1024*1024,Hr=4,Ur={a:1,b:0,c:0,d:1,e:0,f:0},Wr=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=mi(t,gi,_i),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=jr({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:Pr(n),zoom:r.zoom??1},s=ni(e,a,r),c=this.scenes.get(s),l=!!c;if(!c){let n=Gr(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=fi(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,Br,0),u.enableVertexAttribArray(this.aColor),u.vertexAttribPointer(this.aColor,4,u.UNSIGNED_BYTE,!0,Br,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(_(`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 Jr,s=0;for(let e of n)s++,qr(o,e,r,i,a);let c=o.byteLength,l=i.maxGpuCacheBytes??Vr;if(c>l)throw Error(`WebGL XPS scene buffer would require ${pi(c)}, exceeding maxGpuCacheBytes=${pi(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??Vr,n=e.maxCachedScenes??Hr;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 Gr(e){let t=[];return Kr(e,Ur,1,t),t}function Kr(e,t,n,r){let i=D(e),a=V(t,ri(e)),o=n*si(O(e,`Opacity`));if(i===`Path`){let t=ii(e);if(t.length>0){let n=ai(e,`Fill`,o),i=ai(e,`Stroke`,o),s=Number(O(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:li(e),fillRule:ci(e),bounds:ui(t)})}}for(let t of k(e))D(t).includes(`.`)||Kr(t,a,o,r)}function qr(e,t,n,r,i){let a=V(n,t.matrix),o=Nr(t.matrix),s=Math.max(1e-6,t.thickness||1),c=Math.max(.01,Fr(s,a,r,i)*o),l=En(t.commands,.5),u=t.fill?di(t.fill):void 0,d=t.stroke?di(t.stroke):void 0;if(u&&Lr(t.bounds,a,r,i))for(let n of l)(n.closed||n.points.length>=6)&&Yr(e,$r(n.points,t.matrix),u);if(d&&t.thickness>0)for(let n of l){let r=$r(n.points,t.matrix),i=n.closed?ei(r):r;t.lineStyle.dash.length>0?Zr(e,i,c,t.lineStyle,d):Xr(e,i,c,d)}}var Jr=class{constructor(){this.buffer=new ArrayBuffer(64*1024),this.view=new DataView(this.buffer),this.vertexCount=0}get byteLength(){return this.vertexCount*Br}push(e,t,n){if(!Number.isFinite(e)||!Number.isFinite(t))return;let r=this.byteLength;this.ensure(Br),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 Yr(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];ti(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 Xr(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++)Qr(e,t[n],t[n+1],i,r)}function Zr(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){Xr(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;Qr(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 Qr(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 $r(e,t){let n=[];for(let r=0;r+1<e.length;r+=2){let[i,a]=wr(t,e[r]??0,e[r+1]??0);n.push({x:i,y:a})}return n}function ei(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 ti(e,t,n){return Math.abs((t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x))}function ni(e,t,n){let r=n.lineWeightMode??`adaptive`,i=r===`physical`?`physical`:String(Math.round(Math.log2(Math.max(1e-12,Nr(t)))*8));return`${e.id}|${e.sourcePath}|${e.width}x${e.height}|lw:${r}:${i}`}function ri(e){let t=Tr(O(e,`RenderTransform`)??O(e,`Transform`));for(let n of k(e)){let e=D(n);if(e.endsWith(`.RenderTransform`)||e.endsWith(`.Transform`)){let e=k(n).find(e=>D(e)===`MatrixTransform`);e&&(t=V(t,Tr(O(e,`Matrix`))))}}let n=Number(O(e,`Canvas.Left`)??0),r=Number(O(e,`Canvas.Top`)??0);return(n||r)&&(t=V({a:1,b:0,c:0,d:1,e:n,f:r},t)),t}function ii(e){let t=O(e,`Data`);if(t)return wn(t);for(let t of k(e))if(D(t)===`Path.Data`)for(let e of k(t)){let t=O(e,`Figures`);if(t)return wn(t)}return[]}function ai(e,t,n){let r=O(e,t);if(r)return H(r,n);let i=oi(e,t,`SolidColorBrush`);if(i)return H(O(i,`Color`),n*si(O(i,`Opacity`)))}function oi(e,t,n){let r=`${D(e)}.${t}`;for(let t of k(e))if(D(t)===r)return k(t).find(e=>D(e)===n)}function si(e){if(!e)return 1;let t=Number(e);return Number.isFinite(t)?Math.max(0,Math.min(1,t)):1}function ci(e){let t=O(e,`Data`)??``;return/F0/.test(t)?`nonzero`:`evenodd`}function li(e){let t=(O(e,`StrokeStartLineCap`)??``).toLowerCase(),n=(O(e,`StrokeEndLineCap`)??``).toLowerCase(),r=(O(e,`StrokeDashCap`)??``).toLowerCase(),i=t===`round`||n===`round`||r===`round`?`round`:t===`square`||n===`square`||r===`square`?`square`:`butt`,a=(O(e,`StrokeLineJoin`)??``).toLowerCase(),o=a===`round`?`round`:a===`bevel`?`bevel`:`miter`,s=Number(O(e,`StrokeMiterLimit`)??10);return{cap:i,join:o,miterLimit:Number.isFinite(s)&&s>0?s:10,dash:N(O(e,`StrokeDashArray`)??``).filter(e=>Number.isFinite(e)&&e>0),dashOffset:Number(O(e,`StrokeDashOffset`)??0)||0}}function ui(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 di(e){let t=Er(e,4278190080);return{r:t&255,g:t>>>8&255,b:t>>>16&255,a:t>>>24&255}}function fi(e){let t=di(e);return[t.r/255,t.g/255,t.b/255,t.a/255]}function pi(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KiB`:`${(e/1024/1024).toFixed(1)} MiB`}function mi(e,t,n){let r=hi(e,e.VERTEX_SHADER,t),i=hi(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 hi(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 gi=`
|
|
5
5
|
attribute vec2 a_pos;
|
|
6
6
|
attribute vec4 a_color;
|
|
7
7
|
uniform vec4 u_matrix;
|
|
@@ -14,13 +14,13 @@ void main() {
|
|
|
14
14
|
gl_Position = vec4(clip, 0.0, 1.0);
|
|
15
15
|
v_color = a_color;
|
|
16
16
|
}
|
|
17
|
-
`,
|
|
17
|
+
`,_i=`
|
|
18
18
|
precision mediump float;
|
|
19
19
|
varying vec4 v_color;
|
|
20
20
|
void main() {
|
|
21
21
|
gl_FragColor = v_color;
|
|
22
22
|
}
|
|
23
|
-
`,gi=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=v(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:Mr(t),zoom:n.zoom??1},c=kr({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(_(`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 Lr({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(_(`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 Hr(e),this.webglCanvas=e),this.webgl}getXmlDocument(e){let t=this.xmlCache.get(e);return t||(t=this.document.opc.readText(e).then(t=>A(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=D(e),u=V(r,wi(e)),d=i*ki(O(e,`Opacity`)),f=0;if(l===`Path`&&o.vectors){let n=Ti(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=O(e,`Clip`);r&&(t.beginPath(),Cn(t,Sn(r)),t.clip()),t.beginPath(),Cn(t,n);let i=Di(e,`Fill`,d),a=Di(e,`Stroke`,d),o=Number(O(e,`StrokeThickness`)??1),l=vi(n);i&&Fr(l,u,s,c)&&(t.fillStyle=i,t.fill(Ai(e))),a&&o>0&&(t.strokeStyle=a,t.lineWidth=Nr(o,u,s,c),_i(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=O(e,`Source`)??O(e,`ImageSource`);if(r)try{await this.drawImageResource(t,n,r,u,d,e),f++}catch(e){a.push(_(`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=Oi(e,`Fill`,`ImageBrush`),i=r?O(r,`ImageSource`):void 0;if(r&&i)try{await this.drawImageBrush(t,n,i,u,d,e,r),f++}catch(e){a.push(_(`warning`,`XPS_IMAGEBRUSH_FAILED`,`Failed to draw ImageBrush ${i}: ${String(e)}`,n))}}for(let r of k(e))D(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=D(e),s=V(t,wi(e)),c=n*ki(O(e,`Opacity`)),l=0;if(o===`Path`){let t=Ti(e);if(t.length>0){let n=Di(e,`Fill`,c),r=Di(e,`Stroke`,c),o=Number(O(e,`StrokeThickness`)??1),u=Nr(o,s,i,a)*Math.max(1e-12,Math.hypot(s.a,s.b)),d=wn(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 k(e))D(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=O(n,`UnicodeString`)??``;if(!c)return 0;let l=Number(O(n,`OriginX`)??0),u=Number(O(n,`OriginY`)??0),d=Number(O(n,`FontRenderingEmSize`)??12);if(!Pr(d,r,o,s))return 0;let f=Di(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=O(n,`Indices`);return m?yi(e,c,m,l,u,d):e.fillText(c,l,u),e.restore(),1}async fontFamilyForGlyphs(e,t,n){let r=O(t,`FontUri`);if(!r)return;let i=E(e,r.replace(/^\//,``)),a=this.fontCache.get(i);return a||(a=this.loadFontFace(i).catch(t=>{n.push(_(`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=le(e)??`font/ttf`;/\.odttf$/i.test(e)&&(r=bi(e,r),i=`font/ttf`);let a=`dwfv_xps_${Ci(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=E(t,n.replace(/^\//,``)),c=await ue(await o.readBytes(s),o.getContentType(s)??le(s)??`image/png`),l=Number(O(a,`Width`)??(`width`in c?c.width:0)),u=Number(O(a,`Height`)??(`height`in c?c.height:0)),d=Number(O(a,`Canvas.Left`)??O(a,`X`)??0),f=Number(O(a,`Canvas.Top`)??O(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=E(t,n.replace(/^\//,``)),l=await ue(await s.readBytes(c),s.getContentType(c)??le(c)??`image/png`),u=ji(O(o,`Viewport`))??ji(O(o,`Viewbox`))??[0,0,Number(l.width??1),Number(l.height??1)],d=Ti(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(),Cn(e,d),e.clip()),e.drawImage(l,u[0],u[1],u[2],u[3]),e.restore()}};function _i(e,t,n){let r=(O(t,`StrokeStartLineCap`)??``).toLowerCase(),i=(O(t,`StrokeEndLineCap`)??``).toLowerCase(),a=(O(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=(O(t,`StrokeLineJoin`)??``).toLowerCase();e.lineJoin=o===`round`?`round`:o===`bevel`?`bevel`:`miter`;let s=Number(O(t,`StrokeMiterLimit`)??10);Number.isFinite(s)&&s>0&&(e.miterLimit=s);let c=N(O(t,`StrokeDashArray`)??``);if(c.length>0){let r=Number(O(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 vi(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 yi(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 bi(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(!Si(i)){let e=xi(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(Si(r))return r}return i}function xi(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 Si(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 Ci(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 wi(e){let t=Cr(O(e,`RenderTransform`)??O(e,`Transform`));for(let n of k(e)){let e=D(n);if(e.endsWith(`.RenderTransform`)||e.endsWith(`.Transform`)){let e=k(n).find(e=>D(e)===`MatrixTransform`);e&&(t=V(t,Cr(O(e,`Matrix`))))}}let n=Number(O(e,`Canvas.Left`)??0),r=Number(O(e,`Canvas.Top`)??0);return(n||r)&&(t=V({a:1,b:0,c:0,d:1,e:n,f:r},t)),t}function Ti(e){let t=O(e,`Data`);if(t)return Sn(t);for(let t of k(e))if(D(t)===`Path.Data`)for(let e of k(t)){let t=O(e,`Figures`);if(t)return Sn(t);if(D(e)===`PathGeometry`){let t=Ei(e);if(t)return Sn(t)}}return[]}function Ei(e){let t=[];for(let n of k(e).filter(e=>D(e)===`PathFigure`)){let e=N(O(n,`StartPoint`)??``);e.length>=2&&t.push(`M ${e[0]} ${e[1]}`);for(let e of k(n)){let n=D(e);if(n===`LineSegment`){let n=N(O(e,`Point`)??``);n.length>=2&&t.push(`L ${n[0]} ${n[1]}`)}else if(n===`PolyLineSegment`){let n=N(O(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=N(O(e,`Point1`)+` `+O(e,`Point2`)+` `+O(e,`Point3`));n.length>=6&&t.push(`C ${n.slice(0,6).join(` `)}`)}else if(n===`PolyBezierSegment`){let n=N(O(e,`Points`)??``);for(let e=0;e+5<n.length;e+=6)t.push(`C ${n.slice(e,e+6).join(` `)}`)}}O(n,`IsClosed`)===`true`&&t.push(`Z`)}return t.length?t.join(` `):void 0}function Di(e,t,n){let r=O(e,t);if(r)return H(r,n);let i=Oi(e,t,`SolidColorBrush`);if(i)return H(O(i,`Color`),n*ki(O(i,`Opacity`)))}function Oi(e,t,n){let r=`${D(e)}.${t}`;for(let t of k(e))if(D(t)===r)return k(t).find(e=>D(e)===n)}function ki(e){if(!e)return 1;let t=Number(e);return Number.isFinite(t)?Math.max(0,Math.min(1,t)):1}function Ai(e){let t=O(e,`Data`)??``;return/F0/.test(t)?`nonzero`:`evenodd`}function ji(e){if(!e)return;let t=N(e);if(t.length>=4)return[t[0],t[1],t[2],t[3]]}var Mi=12,Ni=96*1024*1024,Pi=3,Fi=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=Xi(t,Qi,$i),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=Ar(e,this.canvas.width,this.canvas.height,n.zoom,n.panX,n.panY),a={dpr:Mr(t),zoom:n.zoom??1},o=Li(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=Ji(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,Mi,0),l.enableVertexAttribArray(this.aColor),l.vertexAttribPointer(this.aColor,4,l.UNSIGNED_BYTE,!0,Mi,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(_(`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 Ri,o=0,s=0;for(let t of e.primitives){if(t.type===`text`){s++;continue}o++,zi(a,t,r,n,i)}let c=a.byteLength,l=n.maxGpuCacheBytes??Ni;if(c>l)throw Error(`WebGL scene buffer would require ${Yi(c)}, exceeding maxGpuCacheBytes=${Yi(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??Ni,n=e.maxCachedScenes??Pi;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=V(n,a.matrix??Ii),[o,s]=Sr(t,a.x,a.y),c=Ki(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()}}}},Ii={a:1,b:0,c:0,d:1,e:0,f:0};function Li(e,t,n){let r=n.lineWeightMode??`adaptive`,i=r===`physical`?`physical`:String(Math.round(Math.log2(Math.max(1e-12,jr(t)))*8));return`${e.id}|${e.sourcePath}|${e.primitives.length}|lw:${r}:${i}`}var Ri=class{constructor(){this.buffer=new ArrayBuffer(64*1024),this.view=new DataView(this.buffer),this.vertexCount=0}get byteLength(){return this.vertexCount*Mi}push(e,t,n){if(!Number.isFinite(e)||!Number.isFinite(t))return;let r=this.byteLength;this.ensure(Mi),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 zi(e,t,n,r,i){let a=t.matrix??Ii,o=Ki(a),s=V(n,a),c=Math.max(.01,Nr(t.lineWidth??1,s,r,i)*o);if(t.type===`polyline`){let n=qi(t.stroke??`#000000`);Hi(e,Bi(t.points,a),c,n)}else if(t.type===`polygon`){let n=Bi(t.points,a);t.fill&&Vi(e,n,qi(t.fill)),t.stroke&&Hi(e,Wi(n),c,qi(t.stroke))}else if(t.type===`rect`){let n=Bi([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&&Vi(e,n,qi(t.fill)),t.stroke&&Hi(e,Wi(n),c,qi(t.stroke))}else if(t.type===`path`){let n=wn(t.commands,.5),r=t.fill?qi(t.fill):void 0,i=t.stroke?qi(t.stroke):void 0;for(let t of n){let n=Bi(t.points,a);r&&(t.closed||n.length>=6)&&Vi(e,n,r),i&&Hi(e,n,c,i)}}}function Bi(e,t){let n=[];for(let r=0;r+1<e.length;r+=2){let[i,a]=Sr(t,e[r]??0,e[r+1]??0);n.push({x:i,y:a})}return n}function Vi(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];Gi(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 Hi(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++)Ui(e,t[n],t[n+1],i,r)}function Ui(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 Wi(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 Gi(e,t,n){return Math.abs((t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x))}function Ki(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 qi(e){let t=wr(e,4278190080);return{r:t&255,g:t>>>8&255,b:t>>>16&255,a:t>>>24&255}}function Ji(e){let t=qi(e);return[t.r/255,t.g/255,t.b/255,t.a/255]}function Yi(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KiB`:`${(e/1024/1024).toFixed(1)} MiB`}function Xi(e,t,n){let r=Zi(e,e.VERTEX_SHADER,t),i=Zi(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 Zi(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 Qi=`
|
|
23
|
+
`,vi=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=v(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:Pr(t),zoom:n.zoom??1},c=jr({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(_(`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 zr({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(_(`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 Wr(e),this.webglCanvas=e),this.webgl}getXmlDocument(e){let t=this.xmlCache.get(e);return t||(t=this.document.opc.readText(e).then(t=>A(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=D(e),u=V(r,Ei(e)),d=i*ji(O(e,`Opacity`)),f=0;if(l===`Path`&&o.vectors){let n=Di(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=O(e,`Clip`);r&&(t.beginPath(),Tn(t,wn(r)),t.clip()),t.beginPath(),Tn(t,n);let i=ki(e,`Fill`,d),a=ki(e,`Stroke`,d),o=Number(O(e,`StrokeThickness`)??1),l=bi(n);i&&Lr(l,u,s,c)&&(t.fillStyle=i,t.fill(Mi(e))),a&&o>0&&(t.strokeStyle=a,t.lineWidth=Fr(o,u,s,c),yi(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=O(e,`Source`)??O(e,`ImageSource`);if(r)try{await this.drawImageResource(t,n,r,u,d,e),f++}catch(e){a.push(_(`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=Ai(e,`Fill`,`ImageBrush`),i=r?O(r,`ImageSource`):void 0;if(r&&i)try{await this.drawImageBrush(t,n,i,u,d,e,r),f++}catch(e){a.push(_(`warning`,`XPS_IMAGEBRUSH_FAILED`,`Failed to draw ImageBrush ${i}: ${String(e)}`,n))}}for(let r of k(e))D(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=D(e),s=V(t,Ei(e)),c=n*ji(O(e,`Opacity`)),l=0;if(o===`Path`){let t=Di(e);if(t.length>0){let n=ki(e,`Fill`,c),r=ki(e,`Stroke`,c),o=Number(O(e,`StrokeThickness`)??1),u=Fr(o,s,i,a)*Math.max(1e-12,Math.hypot(s.a,s.b)),d=En(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 k(e))D(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=O(n,`UnicodeString`)??``;if(!c)return 0;let l=Number(O(n,`OriginX`)??0),u=Number(O(n,`OriginY`)??0),d=Number(O(n,`FontRenderingEmSize`)??12);if(!Ir(d,r,o,s))return 0;let f=ki(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=O(n,`Indices`);return m?xi(e,c,m,l,u,d):e.fillText(c,l,u),e.restore(),1}async fontFamilyForGlyphs(e,t,n){let r=O(t,`FontUri`);if(!r)return;let i=E(e,r.replace(/^\//,``)),a=this.fontCache.get(i);return a||(a=this.loadFontFace(i).catch(t=>{n.push(_(`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=de(e)??`font/ttf`;/\.odttf$/i.test(e)&&(r=Si(e,r),i=`font/ttf`);let a=`dwfv_xps_${Ti(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=E(t,n.replace(/^\//,``)),c=await fe(await o.readBytes(s),o.getContentType(s)??de(s)??`image/png`),l=Number(O(a,`Width`)??(`width`in c?c.width:0)),u=Number(O(a,`Height`)??(`height`in c?c.height:0)),d=Number(O(a,`Canvas.Left`)??O(a,`X`)??0),f=Number(O(a,`Canvas.Top`)??O(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=E(t,n.replace(/^\//,``)),l=await fe(await s.readBytes(c),s.getContentType(c)??de(c)??`image/png`),u=Ni(O(o,`Viewport`))??Ni(O(o,`Viewbox`))??[0,0,Number(l.width??1),Number(l.height??1)],d=Di(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(),Tn(e,d),e.clip()),e.drawImage(l,u[0],u[1],u[2],u[3]),e.restore()}};function yi(e,t,n){let r=(O(t,`StrokeStartLineCap`)??``).toLowerCase(),i=(O(t,`StrokeEndLineCap`)??``).toLowerCase(),a=(O(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=(O(t,`StrokeLineJoin`)??``).toLowerCase();e.lineJoin=o===`round`?`round`:o===`bevel`?`bevel`:`miter`;let s=Number(O(t,`StrokeMiterLimit`)??10);Number.isFinite(s)&&s>0&&(e.miterLimit=s);let c=N(O(t,`StrokeDashArray`)??``);if(c.length>0){let r=Number(O(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 bi(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 xi(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 Si(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(!wi(i)){let e=Ci(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(wi(r))return r}return i}function Ci(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 wi(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 Ti(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 Ei(e){let t=Tr(O(e,`RenderTransform`)??O(e,`Transform`));for(let n of k(e)){let e=D(n);if(e.endsWith(`.RenderTransform`)||e.endsWith(`.Transform`)){let e=k(n).find(e=>D(e)===`MatrixTransform`);e&&(t=V(t,Tr(O(e,`Matrix`))))}}let n=Number(O(e,`Canvas.Left`)??0),r=Number(O(e,`Canvas.Top`)??0);return(n||r)&&(t=V({a:1,b:0,c:0,d:1,e:n,f:r},t)),t}function Di(e){let t=O(e,`Data`);if(t)return wn(t);for(let t of k(e))if(D(t)===`Path.Data`)for(let e of k(t)){let t=O(e,`Figures`);if(t)return wn(t);if(D(e)===`PathGeometry`){let t=Oi(e);if(t)return wn(t)}}return[]}function Oi(e){let t=[];for(let n of k(e).filter(e=>D(e)===`PathFigure`)){let e=N(O(n,`StartPoint`)??``);e.length>=2&&t.push(`M ${e[0]} ${e[1]}`);for(let e of k(n)){let n=D(e);if(n===`LineSegment`){let n=N(O(e,`Point`)??``);n.length>=2&&t.push(`L ${n[0]} ${n[1]}`)}else if(n===`PolyLineSegment`){let n=N(O(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=N(O(e,`Point1`)+` `+O(e,`Point2`)+` `+O(e,`Point3`));n.length>=6&&t.push(`C ${n.slice(0,6).join(` `)}`)}else if(n===`PolyBezierSegment`){let n=N(O(e,`Points`)??``);for(let e=0;e+5<n.length;e+=6)t.push(`C ${n.slice(e,e+6).join(` `)}`)}}O(n,`IsClosed`)===`true`&&t.push(`Z`)}return t.length?t.join(` `):void 0}function ki(e,t,n){let r=O(e,t);if(r)return H(r,n);let i=Ai(e,t,`SolidColorBrush`);if(i)return H(O(i,`Color`),n*ji(O(i,`Opacity`)))}function Ai(e,t,n){let r=`${D(e)}.${t}`;for(let t of k(e))if(D(t)===r)return k(t).find(e=>D(e)===n)}function ji(e){if(!e)return 1;let t=Number(e);return Number.isFinite(t)?Math.max(0,Math.min(1,t)):1}function Mi(e){let t=O(e,`Data`)??``;return/F0/.test(t)?`nonzero`:`evenodd`}function Ni(e){if(!e)return;let t=N(e);if(t.length>=4)return[t[0],t[1],t[2],t[3]]}var Pi=12,Fi=96*1024*1024,Ii=3,Li=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=Qi(t,ea,ta),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=Mr(e,this.canvas.width,this.canvas.height,n.zoom,n.panX,n.panY),a={dpr:Pr(t),zoom:n.zoom??1},o=zi(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=Xi(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,Pi,0),l.enableVertexAttribArray(this.aColor),l.vertexAttribPointer(this.aColor,4,l.UNSIGNED_BYTE,!0,Pi,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(_(`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 Bi,o=0,s=0;for(let t of e.primitives){if(t.type===`text`){s++;continue}o++,Vi(a,t,r,n,i)}let c=a.byteLength,l=n.maxGpuCacheBytes??Fi;if(c>l)throw Error(`WebGL scene buffer would require ${Zi(c)}, exceeding maxGpuCacheBytes=${Zi(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??Fi,n=e.maxCachedScenes??Ii;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=V(n,a.matrix??Ri),[o,s]=wr(t,a.x,a.y),c=Ji(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()}}}},Ri={a:1,b:0,c:0,d:1,e:0,f:0};function zi(e,t,n){let r=n.lineWeightMode??`adaptive`,i=r===`physical`?`physical`:String(Math.round(Math.log2(Math.max(1e-12,Nr(t)))*8));return`${e.id}|${e.sourcePath}|${e.primitives.length}|lw:${r}:${i}`}var Bi=class{constructor(){this.buffer=new ArrayBuffer(64*1024),this.view=new DataView(this.buffer),this.vertexCount=0}get byteLength(){return this.vertexCount*Pi}push(e,t,n){if(!Number.isFinite(e)||!Number.isFinite(t))return;let r=this.byteLength;this.ensure(Pi),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 Vi(e,t,n,r,i){let a=t.matrix??Ri,o=Ji(a),s=V(n,a),c=Math.max(.01,Fr(t.lineWidth??1,s,r,i)*o);if(t.type===`polyline`){let n=Yi(t.stroke??`#000000`);Wi(e,Hi(t.points,a),c,n)}else if(t.type===`polygon`){let n=Hi(t.points,a);t.fill&&Ui(e,n,Yi(t.fill)),t.stroke&&Wi(e,Ki(n),c,Yi(t.stroke))}else if(t.type===`rect`){let n=Hi([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&&Ui(e,n,Yi(t.fill)),t.stroke&&Wi(e,Ki(n),c,Yi(t.stroke))}else if(t.type===`path`){let n=En(t.commands,.5),r=t.fill?Yi(t.fill):void 0,i=t.stroke?Yi(t.stroke):void 0;for(let t of n){let n=Hi(t.points,a);r&&(t.closed||n.length>=6)&&Ui(e,n,r),i&&Wi(e,n,c,i)}}}function Hi(e,t){let n=[];for(let r=0;r+1<e.length;r+=2){let[i,a]=wr(t,e[r]??0,e[r+1]??0);n.push({x:i,y:a})}return n}function Ui(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];qi(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 Wi(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++)Gi(e,t[n],t[n+1],i,r)}function Gi(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 Ki(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 qi(e,t,n){return Math.abs((t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x))}function Ji(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 Yi(e){let t=Er(e,4278190080);return{r:t&255,g:t>>>8&255,b:t>>>16&255,a:t>>>24&255}}function Xi(e){let t=Yi(e);return[t.r/255,t.g/255,t.b/255,t.a/255]}function Zi(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KiB`:`${(e/1024/1024).toFixed(1)} MiB`}function Qi(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 ea=`
|
|
24
24
|
attribute vec2 a_pos;
|
|
25
25
|
attribute vec4 a_color;
|
|
26
26
|
uniform vec4 u_matrix;
|
|
@@ -33,13 +33,13 @@ void main() {
|
|
|
33
33
|
gl_Position = vec4(clip, 0.0, 1.0);
|
|
34
34
|
v_color = a_color;
|
|
35
35
|
}
|
|
36
|
-
|
|
36
|
+
`,ta=`
|
|
37
37
|
precision mediump float;
|
|
38
38
|
varying vec4 v_color;
|
|
39
39
|
void main() {
|
|
40
40
|
gl_FragColor = v_color;
|
|
41
41
|
}
|
|
42
|
-
`,
|
|
42
|
+
`,na=class{async render(e,t,n={}){let r=v(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=aa(a.gpuBytes),s=a.cacheHit?`cache hit`:`cache upload`;return r.push(_(`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(_(`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=Mr(e,t.width,t.height,n.zoom,n.panX,n.panY),s={dpr:Pr(t),zoom:n.zoom??1},c=0;if(n.preferWasm)try{this.wasm??=new zr({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(_(`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 Li(e),this.webglCanvas=e),this.webgl}drawPrimitiveCanvas(e,t,n,r,i){let a=V(n,t.matrix??{a:1,b:0,c:0,d:1,e:0,f:0}),o=H(t.stroke??`#000000`)??`#000000`,s=H(t.fill);if(t.type===`text`){let[n,c]=wr(a,t.x,t.y),l=Math.max(1,Math.abs((t.size??12)*ia(a)));if(!Ir(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=Fr(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(),Tn(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=V(t,e.matrix??{a:1,b:0,c:0,d:1,e:0,f:0}),a=Nr(i),o=e=>Fr(e??1,i,n,r)*a;if(e.type===`polyline`)this.wasm.drawPolyline(e.points,i,H(e.stroke??`#000000`),o(e.lineWidth));else if(e.type===`polygon`)this.wasm.drawPolygon(e.points,i,H(e.fill)),e.stroke&&this.wasm.drawPolyline(ra(e.points),i,H(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,H(e.fill)),e.stroke&&this.wasm.drawPolyline(t,i,H(e.stroke),o(e.lineWidth))}else if(e.type===`path`){let t=En(e.commands,.5),n=H(e.fill),r=H(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 ra(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 ia(e){return Math.max(1e-9,(Math.hypot(e.a,e.b)+Math.hypot(e.c,e.d))*.5)}function aa(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KiB`:`${(e/1024/1024).toFixed(1)} MiB`}var oa=class{constructor(){this.cache=new Map}async render(e,t,n={}){let r=n.webglCanvas??t;n.webglCanvas&&(n.webglCanvas.style.visibility=`visible`),ua(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=ma(e,r,n);i.uniformMatrix4fv(a.uMvp,!1,c.mvp),i.uniformMatrix4fv(a.uModel,!1,ha()),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):la(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),ba(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:v(e.diagnostics)}}dispose(){if(this.gl)for(let e of this.cache.values())sa(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())sa(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=fa(e,da(e,e.VERTEX_SHADER,`
|
|
43
43
|
attribute vec3 a_position;
|
|
44
44
|
attribute vec3 a_normal;
|
|
45
45
|
uniform mat4 u_mvp;
|
|
@@ -49,7 +49,7 @@ void main() {
|
|
|
49
49
|
v_normal = normalize((u_model * vec4(a_normal, 0.0)).xyz);
|
|
50
50
|
gl_Position = u_mvp * vec4(a_position, 1.0);
|
|
51
51
|
}
|
|
52
|
-
`),
|
|
52
|
+
`),da(e,e.FRAGMENT_SHADER,`
|
|
53
53
|
precision mediump float;
|
|
54
54
|
varying vec3 v_normal;
|
|
55
55
|
uniform vec3 u_color;
|
|
@@ -63,23 +63,23 @@ void main() {
|
|
|
63
63
|
vec3 color = u_color * (u_ambient + d0 * 0.78 + d1);
|
|
64
64
|
gl_FragColor = vec4(color, 1.0);
|
|
65
65
|
}
|
|
66
|
-
`)),n={program:t,aPosition:e.getAttribLocation(t,`a_position`),aNormal:e.getAttribLocation(t,`a_normal`),uMvp:
|
|
66
|
+
`)),n={program:t,aPosition:e.getAttribLocation(t,`a_position`),aNormal:e.getAttribLocation(t,`a_normal`),uMvp:pa(e,t,`u_mvp`),uModel:pa(e,t,`u_model`),uColor:pa(e,t,`u_color`),uLight0:pa(e,t,`u_light0`),uLight1:pa(e,t,`u_light1`),uAmbient:pa(e,t,`u_ambient`)};return this.program=n,n}ensureEdgeProgram(e){if(this.edgeProgram)return this.edgeProgram;let t=fa(e,da(e,e.VERTEX_SHADER,`
|
|
67
67
|
attribute vec3 a_position;
|
|
68
68
|
uniform mat4 u_mvp;
|
|
69
69
|
void main() {
|
|
70
70
|
gl_Position = u_mvp * vec4(a_position, 1.0);
|
|
71
71
|
}
|
|
72
|
-
`),
|
|
72
|
+
`),da(e,e.FRAGMENT_SHADER,`
|
|
73
73
|
precision mediump float;
|
|
74
74
|
uniform vec3 u_color;
|
|
75
75
|
void main() {
|
|
76
76
|
gl_FragColor = vec4(u_color, 0.9);
|
|
77
77
|
}
|
|
78
|
-
`));return this.edgeProgram={program:t,aPosition:e.getAttribLocation(t,`a_position`),uMvp:da(e,t,`u_mvp`),uColor:da(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]),aa(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=oa(e,e.ARRAY_BUFFER,n.positions),s=n.normals??new Float32Array(n.positions.length),c={mesh:n,pos:t,normal:oa(e,e.ARRAY_BUFFER,s),index:oa(e,e.ELEMENT_ARRAY_BUFFER,n.indices),edgeIndex:n.edgeIndices?oa(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)&&!va(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),sa(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 aa(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&&va(e)&&e.deleteVertexArray(n.vao)}function oa(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 sa(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 ca(e){let t=e.getContext(`2d`);t&&(t.setTransform(1,0,0,1,0,0),t.clearRect(0,0,e.width,e.height))}function la(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 ua(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 da(e,t,n){let r=e.getUniformLocation(t,n);if(!r)throw Error(`Missing shader uniform ${n}.`);return r}function fa(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=_a(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=ha([v[0]+d[0]*l,v[1]+d[1]*l,v[2]+d[2]*l],v,[0,1,0]);return{mvp:ga(ma(Math.PI/4,i,Math.max(.001,l-c*2.2),l+c*3.2),y)}}function pa(){return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}function ma(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 ha(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 ga(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 _a(e,t,n){return Math.max(t,Math.min(n,e))}function va(e){return typeof WebGL2RenderingContext<`u`&&e instanceof WebGL2RenderingContext}var ya=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 gi(this.document),await this.xps.render(r,t,n)):r.kind===`w2d-text`?(this.w2d??=new ea,await this.w2d.render(r,t,n)):r.kind===`w3d-model`?(this.w3d??=new ia,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 ue(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:v(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`,ba(r,e.name,32,48,t.width-64,24),r.font=`13px sans-serif`,r.fillStyle=`#92400e`,ba(r,e.reason,32,88,t.width-64,20),r.restore(),{backend:`unsupported`,commands:0,warnings:[...e.diagnostics,_(`warning`,`PAGE_UNSUPPORTED`,e.reason,e.sourcePath)]}}};function ba(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 xa=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=Sa(`−`),this.zoomInButton=Sa(`+`),this.resetButton=Sa(`适应`),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 yr(e,{fileName:t.fileName}),this.renderer=new ya(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(Ca(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]=Sr(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 Ar(r,i,a,e,t,n);if(r.kind===`xps-fixed-page`)return kr({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 kr({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 Sa(e){let t=document.createElement(`button`);return t.type=`button`,t.textContent=e,t}function Ca(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(Ca(n));return t}var wa=Object.defineProperty,Ta=(e,t,n)=>t in e?wa(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,U=(e,t,n)=>Ta(e,typeof t==`symbol`?t:t+``,n);async function Ea(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 Da(e){return e.byteOffset===0&&e.byteLength===e.buffer.byteLength?e.buffer:e.slice().buffer}function Oa(e){let t=e.fileName??e.file?.name??``,n=t.lastIndexOf(`.`);return n>=0?t.slice(n+1).toLowerCase():``}function ka(e,t){let n=Oa(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=Aa(t.slice(0,6));if(/^AC10/.test(e))return`dwg`;if(t[0]===80&&t[1]===75)return`dwfx`;let n=Aa(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 Aa(e){return Array.from(e,e=>e>=32&&e<=126?String.fromCharCode(e):` `).join(``)}var ja=class{constructor(e=[]){U(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 Ea(e),n=ka(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)}},Ma=class{constructor(){U(this,`worker`),U(this,`sequence`,0),U(this,`pending`,new Map)}load(e,t,n={}){var r;if(!Na())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=Ia(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(Ra());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(Ra())},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:Fa(n)},[c])}catch(e){this.pending.delete(a),La(l),t(e instanceof Error?e:Error(String(e)))}})}preload(e={}){var t;if(!Na())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(Ra());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(Ra())},e.signal.addEventListener(`abort`,s.abortHandler,{once:!0})),this.pending.set(r,s);try{n.postMessage({type:`warmup`,requestId:r,options:Fa(e)})}catch(e){this.pending.delete(r),La(s),a(e instanceof Error?e:Error(String(e)))}})}terminate(){this.resetWorker()}ensureWorker(e){return this.worker||(this.worker=Pa(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),La(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)La(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 Na(){return typeof Worker<`u`&&typeof URL<`u`}function Pa(e){return e.workerFactory?e.workerFactory():e.workerUrl?new Worker(e.workerUrl,{type:`module`,name:`lightweight-cad-dwg-loader`}):new Worker(new URL(`/assets/DwgWorker-CuZJ5EUe.js`,import.meta.url),{type:`module`,name:`lightweight-cad-dwg-loader`})}function Fa(e){return{wasmPath:za(e.wasmPath),includePaperSpace:e.includePaperSpace,maxInsertDepth:e.maxInsertDepth,keepRaw:!!e.keepRaw}}function Ia(e,t,n){return t.file||n.transferInputBuffer===!0?Da(e):e.slice().buffer}function La(e){e.timer&&clearTimeout(e.timer),e.signal&&e.abortHandler&&e.signal.removeEventListener(`abort`,e.abortHandler)}function Ra(){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 za(e){let t=(e?.trim()||`/wasm`).replace(/\/+$/,``);return t===``?Va():Ha(t)?t:t.startsWith(`/`)?`${Va()}${t}`:new URL(t,Ba()).href.replace(/\/+$/,``)}function Ba(){return typeof document<`u`&&document.baseURI?document.baseURI:typeof location<`u`&&location.href?location.href:`http://localhost/`}function Va(){return typeof location<`u`&&location.origin?location.origin:new URL(Ba()).origin}function Ha(e){return/^[a-z][a-z0-9+.-]*:/i.test(e)}var Ua=class{constructor(e={}){U(this,`id`,`dwg`),U(this,`label`,`DWG / LibreDWG WebAssembly`),U(this,`formats`,[`dwg`]),U(this,`defaults`),U(this,`workerClient`,new Ma),this.defaults={useWorker:!0,...e}}accepts(e,t){return Oa(e)===`dwg`?!0:ka(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 Ea(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(!Na())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 Wa(e)?e:Ga(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 Wa(e){return e instanceof Error&&e.name===`AbortError`}function Ga(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 Ka(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 qa(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 Ja(e,t,n={}){let r=t??String(e.type??e.entityType??e.objectName??`UNKNOWN`).toUpperCase(),i=n.includeUnknownProperties===!1?{type:r,kind:qa(r)}:{...e,type:r,kind:qa(r)};n.keepRaw&&(i.raw=e),i.handle=K(e.handle??e.id),i.layer=K(e.layer??e.layerName),i.lineType=K(e.lineType??e.linetype);let a=n.numericColorMode??`auto`,o=G(e.color);i.colorIndex=G(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=G(e.colorNumber)??i.colorNumber,i.colorName=K(e.colorName??e.color_name)??i.colorName,i.fillColor=e.fillColor??e.fill_color,i.fillColorIndex=G(e.fillColorIndex??e.fill_color_index??e.fillColorNumber)??i.fillColorIndex,i.opacity=G(e.opacity??e.alpha)??i.opacity,i.lineweight=G(e.lineweight??e.lineWeight),i.isVisible=!(e.isVisible===!1||e.visible===!1),i.startPoint=W(e.startPoint??e.start??e.p0??e.from)??i.startPoint,i.endPoint=W(e.endPoint??e.end??e.p1??e.to)??i.endPoint,i.center=W(e.center??e.centerPoint)??i.center,i.insertionPoint=W(e.insertionPoint??e.position??e.location??e.point??e.basePoint)??i.insertionPoint,i.radius=G(e.radius)??i.radius,i.startAngle=G(e.startAngle??e.start_angle)??i.startAngle,i.endAngle=G(e.endAngle??e.end_angle)??i.endAngle,i.majorAxisEndPoint=W(e.majorAxisEndPoint??e.majorAxis??e.major)??i.majorAxisEndPoint,i.axisRatio=G(e.axisRatio??e.ratio)??i.axisRatio,i.height=G(e.height??e.textHeight)??i.height,i.textHeight=G(e.textHeight??e.height)??i.textHeight,i.rotation=G(e.rotation??e.angle)??i.rotation,i.text=K(e.text??e.value??e.string??e.contents)??i.text,i.name=K(e.name??e.blockName)??i.name,i.blockName=K(e.blockName??e.name)??i.blockName;let s=Ya(e.vertices??e.points);s.length>0&&(i.vertices=s);let c=Ya(e.controlPoints??e.control_points);c.length>0&&(i.controlPoints=c);let l=Ya(e.fitPoints??e.fit_points);return l.length>0&&(i.fitPoints=l),i}function W(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 Ya(e){if(!Array.isArray(e))return[];let t=[];for(let n of e){let e=W(n);if(!e)continue;let r=n,i=e,a=G(r.bulge);a!==void 0&&(i.bulge=a);let o=G(r.startWidth??r.start_width);o!==void 0&&(i.startWidth=o);let s=G(r.endWidth??r.end_width);s!==void 0&&(i.endWidth=s),t.push(i)}return t}function Xa(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 Za(e,t){t.name&&(e[t.name]=t,e[t.name.toLowerCase()]=t)}function Qa(e,t){t.name&&(e[t.name]=t,e[t.name.toLowerCase()]=t)}function $a(e){return e!=null&&e.length?e.flatMap(e=>e.entities.map(t=>({...t,pageIndex:e.index}))):[]}function G(e){let t=Number(e);return Number.isFinite(t)?t:void 0}function K(e){if(typeof e!=`string`&&typeof e!=`number`)return;let t=String(e);return t.length>0?t:void 0}function q(){return{minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function eo(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 to(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 no(e,t=.02,n=1e-6){if(!eo(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 ro(e){return e*Math.PI/180}function io(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=ro(o),s=ro(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 ao(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=ro(l),u=ro(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 oo(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 io(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 so(e){return e.replace(/\\P/g,`
|
|
79
|
-
`).replace(/\\~|\\ /g,` `).replace(/\\[A-Za-z][^;]*;/g,``).replace(/[{}]/g,``).replace(/\\[A-Za-z]/g,``).trim()}function
|
|
78
|
+
`));return this.edgeProgram={program:t,aPosition:e.getAttribLocation(t,`a_position`),uMvp:pa(e,t,`u_mvp`),uColor:pa(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]),sa(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=ca(e,e.ARRAY_BUFFER,n.positions),s=n.normals??new Float32Array(n.positions.length),c={mesh:n,pos:t,normal:ca(e,e.ARRAY_BUFFER,s),index:ca(e,e.ELEMENT_ARRAY_BUFFER,n.indices),edgeIndex:n.edgeIndices?ca(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)&&!ba(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),la(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 sa(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&&ba(e)&&e.deleteVertexArray(n.vao)}function ca(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 la(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 ua(e){let t=e.getContext(`2d`);t&&(t.setTransform(1,0,0,1,0,0),t.clearRect(0,0,e.width,e.height))}function da(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 fa(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 pa(e,t,n){let r=e.getUniformLocation(t,n);if(!r)throw Error(`Missing shader uniform ${n}.`);return r}function ma(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=ya(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=_a([v[0]+d[0]*l,v[1]+d[1]*l,v[2]+d[2]*l],v,[0,1,0]);return{mvp:va(ga(Math.PI/4,i,Math.max(.001,l-c*2.2),l+c*3.2),y)}}function ha(){return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}function ga(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 _a(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 va(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 ya(e,t,n){return Math.max(t,Math.min(n,e))}function ba(e){return typeof WebGL2RenderingContext<`u`&&e instanceof WebGL2RenderingContext}var xa=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 vi(this.document),await this.xps.render(r,t,n)):r.kind===`w2d-text`?(this.w2d??=new na,await this.w2d.render(r,t,n)):r.kind===`w3d-model`?(this.w3d??=new oa,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 fe(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:v(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`,Sa(r,e.name,32,48,t.width-64,24),r.font=`13px sans-serif`,r.fillStyle=`#92400e`,Sa(r,e.reason,32,88,t.width-64,20),r.restore(),{backend:`unsupported`,commands:0,warnings:[...e.diagnostics,_(`warning`,`PAGE_UNSUPPORTED`,e.reason,e.sourcePath)]}}};function Sa(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 Ca=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=wa(`−`),this.zoomInButton=wa(`+`),this.resetButton=wa(`适应`),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 xr(e,{fileName:t.fileName}),this.renderer=new xa(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(Ta(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]=wr(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 Mr(r,i,a,e,t,n);if(r.kind===`xps-fixed-page`)return jr({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 jr({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 wa(e){let t=document.createElement(`button`);return t.type=`button`,t.textContent=e,t}function Ta(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(Ta(n));return t}var Ea=Object.defineProperty,Da=(e,t,n)=>t in e?Ea(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,U=(e,t,n)=>Da(e,typeof t==`symbol`?t:t+``,n);async function Oa(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 ka(e){return e.byteOffset===0&&e.byteLength===e.buffer.byteLength?e.buffer:e.slice().buffer}function Aa(e){let t=e.fileName??e.file?.name??``,n=t.lastIndexOf(`.`);return n>=0?t.slice(n+1).toLowerCase():``}function ja(e,t){let n=Aa(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=Ma(t.slice(0,6));if(/^AC10/.test(e))return`dwg`;if(t[0]===80&&t[1]===75)return`dwfx`;let n=Ma(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 Ma(e){return Array.from(e,e=>e>=32&&e<=126?String.fromCharCode(e):` `).join(``)}var Na=class{constructor(e=[]){U(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 Oa(e),n=ja(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)}},Pa=class{constructor(){U(this,`worker`),U(this,`sequence`,0),U(this,`pending`,new Map)}load(e,t,n={}){var r;if(!Fa())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=Ra(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(Ba());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(Ba())},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:La(n)},[c])}catch(e){this.pending.delete(a),za(l),t(e instanceof Error?e:Error(String(e)))}})}preload(e={}){var t;if(!Fa())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(Ba());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(Ba())},e.signal.addEventListener(`abort`,s.abortHandler,{once:!0})),this.pending.set(r,s);try{n.postMessage({type:`warmup`,requestId:r,options:La(e)})}catch(e){this.pending.delete(r),za(s),a(e instanceof Error?e:Error(String(e)))}})}terminate(){this.resetWorker()}ensureWorker(e){return this.worker||(this.worker=Ia(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),za(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)za(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 Fa(){return typeof Worker<`u`&&typeof URL<`u`}function Ia(e){return e.workerFactory?e.workerFactory():e.workerUrl?new Worker(e.workerUrl,{type:`module`,name:`lightweight-cad-dwg-loader`}):new Worker(new URL(`/assets/DwgWorker-CuZJ5EUe.js`,import.meta.url),{type:`module`,name:`lightweight-cad-dwg-loader`})}function La(e){return{wasmPath:Va(e.wasmPath),includePaperSpace:e.includePaperSpace,maxInsertDepth:e.maxInsertDepth,keepRaw:!!e.keepRaw}}function Ra(e,t,n){return t.file||n.transferInputBuffer===!0?ka(e):e.slice().buffer}function za(e){e.timer&&clearTimeout(e.timer),e.signal&&e.abortHandler&&e.signal.removeEventListener(`abort`,e.abortHandler)}function Ba(){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 Va(e){let t=(e?.trim()||`/wasm`).replace(/\/+$/,``);return t===``?Ua():Wa(t)?t:t.startsWith(`/`)?`${Ua()}${t}`:new URL(t,Ha()).href.replace(/\/+$/,``)}function Ha(){return typeof document<`u`&&document.baseURI?document.baseURI:typeof location<`u`&&location.href?location.href:`http://localhost/`}function Ua(){return typeof location<`u`&&location.origin?location.origin:new URL(Ha()).origin}function Wa(e){return/^[a-z][a-z0-9+.-]*:/i.test(e)}var Ga=class{constructor(e={}){U(this,`id`,`dwg`),U(this,`label`,`DWG / LibreDWG WebAssembly`),U(this,`formats`,[`dwg`]),U(this,`defaults`),U(this,`workerClient`,new Pa),this.defaults={useWorker:!0,...e}}accepts(e,t){return Aa(e)===`dwg`?!0:ja(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 Oa(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(!Fa())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 Ka(e)?e:qa(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 Ka(e){return e instanceof Error&&e.name===`AbortError`}function qa(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 Ja(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 Ya(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 Xa(e,t,n={}){let r=t??String(e.type??e.entityType??e.objectName??`UNKNOWN`).toUpperCase(),i=n.includeUnknownProperties===!1?{type:r,kind:Ya(r)}:{...e,type:r,kind:Ya(r)};n.keepRaw&&(i.raw=e),i.handle=K(e.handle??e.id),i.layer=K(e.layer??e.layerName),i.lineType=K(e.lineType??e.linetype);let a=n.numericColorMode??`auto`,o=G(e.color);i.colorIndex=G(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=G(e.colorNumber)??i.colorNumber,i.colorName=K(e.colorName??e.color_name)??i.colorName,i.fillColor=e.fillColor??e.fill_color,i.fillColorIndex=G(e.fillColorIndex??e.fill_color_index??e.fillColorNumber)??i.fillColorIndex,i.opacity=G(e.opacity??e.alpha)??i.opacity,i.lineweight=G(e.lineweight??e.lineWeight),i.isVisible=!(e.isVisible===!1||e.visible===!1),i.startPoint=W(e.startPoint??e.start??e.p0??e.from)??i.startPoint,i.endPoint=W(e.endPoint??e.end??e.p1??e.to)??i.endPoint,i.center=W(e.center??e.centerPoint)??i.center,i.insertionPoint=W(e.insertionPoint??e.position??e.location??e.point??e.basePoint)??i.insertionPoint,i.radius=G(e.radius)??i.radius,i.startAngle=G(e.startAngle??e.start_angle)??i.startAngle,i.endAngle=G(e.endAngle??e.end_angle)??i.endAngle,i.majorAxisEndPoint=W(e.majorAxisEndPoint??e.majorAxis??e.major)??i.majorAxisEndPoint,i.axisRatio=G(e.axisRatio??e.ratio)??i.axisRatio,i.height=G(e.height??e.textHeight)??i.height,i.textHeight=G(e.textHeight??e.height)??i.textHeight,i.rotation=G(e.rotation??e.angle)??i.rotation,i.text=K(e.text??e.value??e.string??e.contents)??i.text,i.name=K(e.name??e.blockName)??i.name,i.blockName=K(e.blockName??e.name)??i.blockName;let s=Za(e.vertices??e.points);s.length>0&&(i.vertices=s);let c=Za(e.controlPoints??e.control_points);c.length>0&&(i.controlPoints=c);let l=Za(e.fitPoints??e.fit_points);return l.length>0&&(i.fitPoints=l),i}function W(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 Za(e){if(!Array.isArray(e))return[];let t=[];for(let n of e){let e=W(n);if(!e)continue;let r=n,i=e,a=G(r.bulge);a!==void 0&&(i.bulge=a);let o=G(r.startWidth??r.start_width);o!==void 0&&(i.startWidth=o);let s=G(r.endWidth??r.end_width);s!==void 0&&(i.endWidth=s),t.push(i)}return t}function Qa(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 $a(e,t){t.name&&(e[t.name]=t,e[t.name.toLowerCase()]=t)}function eo(e,t){t.name&&(e[t.name]=t,e[t.name.toLowerCase()]=t)}function to(e){return e!=null&&e.length?e.flatMap(e=>e.entities.map(t=>({...t,pageIndex:e.index}))):[]}function G(e){let t=Number(e);return Number.isFinite(t)?t:void 0}function K(e){if(typeof e!=`string`&&typeof e!=`number`)return;let t=String(e);return t.length>0?t:void 0}function q(){return{minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function no(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 ro(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 io(e,t=.02,n=1e-6){if(!no(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 ao(e){return e*Math.PI/180}function oo(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=ao(o),s=ao(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 so(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=ao(l),u=ao(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 co(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 oo(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 lo(e){return e.replace(/\\P/g,`
|
|
79
|
+
`).replace(/\\~|\\ /g,` `).replace(/\\[A-Za-z][^;]*;/g,``).replace(/[{}]/g,``).replace(/\\[A-Za-z]/g,``).trim()}function uo(e,t,n){return Math.min(n,Math.max(t,e))}var fo=class{constructor(e={}){U(this,`id`,`dxf`),U(this,`label`,`DXF / JavaScript parser`),U(this,`formats`,[`dxf`]),U(this,`defaults`),this.defaults=e}accepts(e,t){return Aa(e)===`dxf`||ja(e,t)===`dxf`}async load(e,t={}){({...this.defaults,...t});let n=performance.now(),r=await Oa(e),i=To(r),a=[],o;try{o=await po(i)}catch(e){a.push(`dxf-parser failed, using built-in fallback parser: ${e instanceof Error?e.message:String(e)}`),o=Eo(i)}let s=mo(o,e.fileName??e.file?.name,a),c=performance.now()-n;return{document:s,raw:o,bytes:r.byteLength,elapsedMs:c,format:`dxf`,warnings:s.warnings}}};async function po(e){let n=await t(()=>import(`./dist-DXasMrKe.js`),__vite__mapDeps([0,1,2,3]),import.meta.url),r=n.default??n.DxfParser;if(!r)throw Error(`dxf-parser did not expose a parser constructor.`);return new r().parseSync(e)}function mo(e,t,n=[]){let r=e&&typeof e==`object`?e:{},i=go(r),a=_o(r),o=(Array.isArray(r.entities)?r.entities:[]).filter(e=>!!e&&typeof e==`object`).map(e=>ho(e)),s=Ja({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 ho(e){let t=String(e.type??e.entityType??`UNKNOWN`).toUpperCase(),n=Xa(e,t),r=G(e.colorIndex??e.colorNumber??e.aci),i=G(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=K(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=W(e.startPoint??{x:e.x1??e.x,y:e.y1??e.y,z:e.z1??e.z})??n.startPoint,n.endPoint=W(e.endPoint??{x:e.x2,y:e.y2,z:e.z2})??n.endPoint),(t===`TEXT`||t===`MTEXT`||t===`ATTRIB`||t===`ATTDEF`)&&(n.insertionPoint=W(e.startPoint??e.position??e.insertionPoint)??n.insertionPoint,n.text=K(e.text??e.string??e.value)??n.text,n.textHeight=G(e.textHeight??e.height)??n.textHeight,n.rotation=Co(e.rotation??e.angle)),(t===`ARC`||t===`ELLIPSE`)&&(n.startAngle=wo(e.startAngle??e.start_angle),n.endAngle=wo(e.endAngle??e.end_angle)),t===`INSERT`){n.blockName=K(e.name??e.blockName)??n.blockName,n.insertionPoint=W(e.position??e.insertionPoint??e.point)??n.insertionPoint;let t=G(e.xScale??e.scaleX??e.xscale),r=G(e.yScale??e.scaleY??e.yscale),i=G(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=Co(e.rotation??e.angle)}if(t===`SPLINE`){let t=bo(e.controlPoints??e.control_points??e.points);t.length&&(n.controlPoints=t);let r=bo(e.fitPoints??e.fit_points);r.length&&(n.fitPoints=r)}return t===`HATCH`&&(n.loops=So(e),n.fillColorIndex=n.colorIndex),(t===`SOLID`||t===`TRACE`||t===`3DFACE`)&&(n.vertices=xo(e),n.fillColorIndex=n.colorIndex),n}function go(e){let t={},n=e.tables,r=yo(e.layers??n?.layer??n?.LAYER??n?.layers);for(let e of r){let n=e,r=K(n.name??n.layerName);r&&$a(t,{name:r,color:n.color??n.colorNumber??n.colorIndex,colorIndex:G(n.colorNumber??n.colorIndex??n.color),lineType:K(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]||$a(t,{name:`0`,colorIndex:7,isVisible:!0}),t}function _o(e){let t={},n=e.blocks;if(!n||typeof n!=`object`)return t;if(Array.isArray(n))for(let e of n)vo(t,e);else for(let[e,r]of Object.entries(n))vo(t,r,e);return t}function vo(e,t,n){if(!t||typeof t!=`object`)return;let r=t,i=K(r.name??r.blockName??n);if(!i)return;let a=(Array.isArray(r.entities)?r.entities:[]).filter(e=>!!e&&typeof e==`object`).map(e=>ho(e));eo(e,{name:i,basePoint:W(r.basePoint??r.position)??{x:0,y:0},entities:a,raw:r})}function yo(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 bo(e){return Array.isArray(e)?e.map(W).filter(e=>!!e):[]}function xo(e){let t=bo(e.vertices??e.points);if(t.length)return t;let n=[];for(let t=0;t<4;t++){let r=W({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 So(e){let t=e.boundaryLoops??e.loops??e.paths;if(Array.isArray(t))return t.map(e=>{let t=e;return{vertices:bo(t.vertices??t.points),isClosed:!0}}).filter(e=>e.vertices&&e.vertices.length>0)}function Co(e){let t=G(e);if(t!==void 0)return Math.abs(t)>Math.PI*2+1e-6?ao(t):t}function wo(e){let t=G(e);if(t!==void 0)return Math.abs(t)>Math.PI*2+1e-6?ao(t):t}function To(e){let t=new TextDecoder(`utf-8`,{fatal:!1}).decode(e);return t.includes(`SECTION`)?t:new TextDecoder(`iso-8859-1`,{fatal:!1}).decode(e)}function Eo(e){let t=e.replace(/\r\n/g,`
|
|
80
80
|
`).replace(/\r/g,`
|
|
81
81
|
`).split(`
|
|
82
|
-
`),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=To(e,o);e===`POLYLINE`?s=t:r.push(t),o=[]}}function To(e,t){let n={type:e,handle:Eo(t,5),layer:Eo(t,8)??`0`,colorIndex:Z(t,62),trueColor:Z(t,420),lineType:Eo(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:Ao(Z(t,50)),endAngle:Ao(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:ko(t),textHeight:Z(t,40),rotation:Ao(Z(t,50))});break;case`LWPOLYLINE`:Object.assign(n,{vertices:Oo(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:Do(t,10,20,30),degree:Z(t,71),isClosed:(Number(Z(t,70)??0)&1)==1});break;case`INSERT`:Object.assign(n,{name:Eo(t,2),blockName:Eo(t,2),insertionPoint:Q(t,10,20,30),rotation:Ao(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 po(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 Eo(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 Do(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 Oo(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 ko(e){let t=e.filter(e=>e.code===1||e.code===3).map(e=>e.value);return t.length?t.join(``):void 0}function Ao(e){return typeof e==`number`&&Number.isFinite(e)?ro(e):void 0}var jo=class{constructor(e={}){U(this,`id`,`dwf`),U(this,`label`,`DWF/DWFx native viewer powered by dwf-viewer`),U(this,`formats`,[`dwf`,`dwfx`,`xps`]),U(this,`nativeRenderer`,!0),U(this,`defaults`),U(this,`native`),U(this,`host`),U(this,`lastStats`),this.defaults=e}accepts(e,t){let n=Oa(e);if(n===`dwf`||n===`dwfx`||n===`xps`)return!0;let r=ka(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 Ea(e),l=Ro(ka(e,c),Oa(e));(n=a.onProgress)==null||n.call(a,{phase:`parse`,format:l,message:`Opening DWF/DWFx with dwf-viewer…`,percent:48});let u=await yr(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=Mo(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 Ea(e),d=Ro(ka(e,u),Oa(e)),f=zo(s),p=Bo(s),m=Vo(s,f,p),h=Ho(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 xa(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(),_=Mo(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=Bo(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)),Uo(a,`minStrokeCssPx`,e.dwfMinStrokeCssPx),Uo(a,`maxOverviewStrokeCssPx`,e.dwfMaxOverviewStrokeCssPx),Uo(a,`minTextCssPx`,e.dwfMinTextCssPx),Uo(a,`minFilledAreaCssPx`,e.dwfMinFilledAreaCssPx),(i=a.render)==null||i.call(a)}}getLastNativeStats(){return this.lastStats}};function Mo(e,t,n,r){let i=Lo(e?.diagnostics??[]),a=(e?.pageData??[]).map((e,t)=>No(e,t));for(let t of e?.pageData??[])i.push(...Lo(t.diagnostics));let o={parser:`dwf-viewer`,nativeRenderer:`dwf-viewer`,dwfKind:e?.kind,packageEntries:e?.packageEntries?.length??0,resources:e?.resources?.length??0,pageKinds:qo((e?.pageData??[]).map(e=>e.kind)),pageNames:(e?.pages??[]).map(e=>e.name)};return Ka({format:n,sourceName:t,layers:{},blocks:{},pages:a,entities:$a(a),metadata:o,warnings:Jo(i),raw:r?e:void 0})}function No(e,t){let n=Po(e,t);return{index:t,name:e.name||e.sourcePath||`${t+1}`,width:e.width||1e3,height:e.height||1e3,entities:n}}function Po(e,t){return e.kind===`w2d-text`?e.primitives.flatMap((e,n)=>Fo(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?Go(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 Fo(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:Io(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 Io(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 Lo(e){return e.filter(e=>e.level!==`info`).map(e=>`${e.code}: ${e.message}${e.source?` (${e.source})`:``}`)}function Ro(e,t){return t===`dwf`||t===`dwfx`||t===`xps`?t:e===`dwf`||e===`dwfx`||e===`xps`?e:`dwf`}function zo(e){if(e.dwfWasmUrl)return e.dwfWasmUrl;if(typeof document>`u`)return;let t=e.wasmPath?new URL(Wo(e.wasmPath),document.baseURI).href:new URL(`wasm/`,document.baseURI).href;return new URL(`dwfv-render.wasm`,t).href}function Bo(e){return e.dwfBackground?e.dwfBackground:e.canvasOptions?.background??`#05070d`}function Vo(e,t,n){return{...Ho(e,t,n),maxDevicePixelRatio:e.dwfMaxDevicePixelRatio??2,maxCanvasPixels:e.dwfMaxCanvasPixels??16777216}}function Ho(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 Uo(e,t,n){typeof n==`number`&&Number.isFinite(n)&&(e[t]=n)}function Wo(e){return e.endsWith(`/`)?e:`${e}/`}function Go(e){let[t,n,r]=e.map(e=>Math.max(0,Math.min(255,Math.round(e*255))));return`#${Ko(t)}${Ko(n)}${Ko(r)}`}function Ko(e){return e.toString(16).padStart(2,`0`)}function qo(e){let t={};for(let n of e)t[n]=(t[n]??0)+1;return t}function Jo(e){return Array.from(new Set(e))}function Yo(e={}){return new ja([new Ua(e),new lo(e),new jo(e)])}function Xo(e){let t=e;return t.nativeRenderer===!0&&typeof t.mount==`function`}var Zo={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 Qo(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:Zo[r]??t}function $o(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 es(e){if(typeof e==`string`){let t=e.trim();return t?/^(#|rgb\(|rgba\(|hsl\(|hsla\()/i.test(t)?ts(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 ts(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}, ${xs(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)}, ${xs(n)})`}}function ns(e,t,n={}){let r=n.foreground??`#ffffff`,i=r,a,o=es(e.trueColor)??es(e.color)??es(e.colorName);if(o&&(a=o),!a){let t=ps(e,[`trueColor`,`true_color`,`truecolor`,`colorRGB`,`colorRgb`,`rgbColor`,`rgb`]);typeof t==`number`&&t>=0&&t<=16777215&&(a=$o(t,n.trueColorByteOrder??`rgb`))}if(!a){let t=fs(e.colorIndex,e.colorNumber,e.aci);typeof t==`number`&&Math.abs(t)<=257&&t!==256&&t!==0&&t!==257&&(a=Qo(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=Qo(t,i,r)):a=$o(t,n.trueColorByteOrder??`rgb`)}return a||=ss(ds(t,e.layer),n),is(a??i,n)}function rs(e,t,n={}){let r,i=es(e.fillColor);if(i&&(r=i),!r&&typeof e.fillColor==`number`){let t=e.fillColor;r=Math.abs(t)<=257?Qo(t,n.foreground??`#ffffff`,n.foreground??`#ffffff`):$o(t,n.trueColorByteOrder??`rgb`)}return!r&&typeof e.fillColorIndex==`number`&&(r=Qo(e.fillColorIndex,n.foreground??`#ffffff`,n.foreground??`#ffffff`)),r?is(r,n):void 0}function is(e,t={}){return t.contrastMode===`adaptive`?as(e,t.background??`#0b1020`,t.foreground??`#ffffff`,t.minColorContrast??2.4):e}function as(e,t,n,r=2.4){let i=ms(n)??{r:255,g:255,b:255,a:1},a=ms(t)??{r:11,g:16,b:32,a:1},o=ms(e);if(!o||vs(hs(o,a),a)>=r)return e;let s=_s(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=gs(o,c,e);if(vs(hs(t,a),a)>=r)return ys(t)}return vs(i,a)>=r?ys(i):s<.5?`#ffffff`:`#000000`}function os(e){return e?e.isVisible!==!1&&e.isFrozen!==!0:!0}function ss(e,t){if(!e)return;let n=t.foreground??`#ffffff`,r=es(e.trueColor);if(r)return r;if(typeof e.trueColor==`number`&&e.trueColor>=0&&e.trueColor<=16777215)return $o(e.trueColor,t.trueColorByteOrder??`rgb`);let i=es(e.color);if(i)return i;if(us(e.colorIndex))return Qo(e.colorIndex,n,n);if(typeof e.color==`number`){let r=Number(e.color);return Math.abs(r)<=257?Qo(r,n,n):$o(r,t.trueColorByteOrder??`rgb`)}if(typeof e.colorIndex==`number`)return Qo(e.colorIndex,n,n)}function cs(e){return fs(e.colorIndex,e.colorNumber,e.aci)===0?!0:e.trueColor===void 0&&e.color===0}function ls(e,t,n,r={}){if(!cs(e))return e;let i=ns(t,n,r);return{...e,color:i,trueColor:void 0,colorIndex:void 0,colorNumber:void 0}}function us(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 fs(...e){for(let t of e)if(typeof t==`number`&&Number.isFinite(t))return t}function ps(e,t){let n=e;for(let e of t){let t=n[e];if(typeof t==`number`&&Number.isFinite(t))return t}}function ms(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:bs(t?e[0]*2.55:e[0]),g:bs(t?e[1]*2.55:e[1]),b:bs(t?e[2]*2.55:e[2]),a:Number.isFinite(e[3])?Math.max(0,Math.min(1,e[3])):1}}}}function hs(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 gs(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 _s(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 vs(e,t){let n=_s(e),r=_s(t),i=Math.max(n,r),a=Math.min(n,r);return(i+.05)/(a+.05)}function ys(e){let t=bs(e.r),n=bs(e.g),r=bs(e.b);return e.a<.999?`rgba(${t}, ${n}, ${r}, ${xs(e.a)})`:`rgb(${t}, ${n}, ${r})`}function bs(e){return Math.max(0,Math.min(255,Math.round(e)))}function xs(e){return Math.round(e*1e3)/1e3}function Ss(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 Cs(e,t){return{a:1,b:0,c:0,d:1,e,f:t}}function ws(e){let t=Math.cos(e),n=Math.sin(e);return{a:t,b:n,c:-n,d:t,e:0,f:0}}function Ts(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 Es(e,t){if(e)return e.map(e=>({cmd:e.cmd,points:e.points.map(e=>$(e,t))}))}function Ds(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=Cs(n.x,n.y);return s=Ss(s,ws(Number.isFinite(o)?o:0)),s=Ss(s,Ts(Number.isFinite(i)?i:1,Number.isFinite(a)?a:1)),s=Ss(s,Cs(-t.x,-t.y)),s}function Os(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=Es(e.commands,t)),e.loops&&(n.loops=e.loops.map(e=>({...e,vertices:e.vertices?.map(e=>$(e,t)),commands:Es(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 ks={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},As=class{constructor(e,t={}){U(this,`canvas`),U(this,`ctx`),U(this,`opts`),U(this,`document`),U(this,`bounds`,q()),U(this,`view`,{centerX:0,centerY:0,scale:1}),U(this,`fitScale`,1),U(this,`dpr`,1),U(this,`isDragging`,!1),U(this,`lastPointer`),U(this,`resizeObserver`),U(this,`imageCache`,new Map),U(this,`stats`,{total:0,drawn:0,skipped:0,byType:{},unsupported:{},renderElapsedMs:0,backend:`canvas2d`}),U(this,`onStats`),U(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={...ks,...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=q(),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(!eo(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 js(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||!os(r)){this.stats.skipped++;return}this.drawEntity(e,n,t)}drawEntity(e,t,n){switch(e.kind??qa(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=ns(e,this.document,{foreground:this.opts.foreground,background:this.opts.background,trueColorByteOrder:this.opts.trueColorByteOrder,contrastMode:this.opts.contrastMode,minColorContrast:this.opts.minColorContrast}),i=rs(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=co(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,io(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=oo(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=ao(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=so(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=Ds(e,n.basePoint??{x:0,y:0});for(let i of n.entities){let n=ls(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(Os(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(!!rs(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=ns(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=co(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=q();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 no(n)}includeEntityBounds(e,t,n){let r=String(t.type??``).toUpperCase(),i=t.kind??qa(r);if(i===`insert`){let r=this.lookupBlock(t.blockName??t.name);if(r&&n<this.opts.maxInsertDepth){let i=Ds(t,r.basePoint??{x:0,y:0});for(let t of r.entities)this.includeEntityBounds(e,Os(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)&&to(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)&&ao(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 js(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 Ms={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},Ns=class{constructor(e,t={}){U(this,`canvas`),U(this,`backend`,`webgl`),U(this,`gl`),U(this,`program`),U(this,`eventController`,new AbortController),U(this,`imageCache`,new Map),U(this,`opts`),U(this,`document`),U(this,`bounds`,q()),U(this,`view`,{centerX:0,centerY:0,scale:1}),U(this,`fitScale`,1),U(this,`dpr`,1),U(this,`isDragging`,!1),U(this,`lastPointer`),U(this,`resizeObserver`),U(this,`overlayCanvas`),U(this,`overlayCtx`),U(this,`scene`),U(this,`stats`,{total:0,drawn:0,skipped:0,byType:{},unsupported:{},renderElapsedMs:0,backend:`webgl`,primitiveCount:0,visiblePrimitiveCount:0,culledPrimitiveCount:0,gpuMemoryBytes:0,buildElapsedMs:0}),U(this,`rafHandle`,0),U(this,`onStats`),U(this,`onViewChange`);let n=Fs(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=Is(n),this.opts={...Ms,...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 Ps()}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=q(),this.view={centerX:0,centerY:0,scale:1},this.fitScale=1,this.disposeScene(),this.render(),this.emitViewChange()}setDocument(e){this.document=e,this.bounds=Ks(e,this.opts),this.disposeScene();let t=Bs(e,this.opts,this.bounds);this.scene=Rs(this.gl,t),this.stats=$s(this.scene,0),this.fitToView()}getDocument(){return this.document}setOptions(e){let t=Qs(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(!eo(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 ec(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=tc(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(!Zs(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(!Zs(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(!Zs(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 Ps(){if(typeof document>`u`)return!1;let e=document.createElement(`canvas`);return!!(e.getContext(`webgl2`)??e.getContext(`webgl`)??e.getContext(`experimental-webgl`))}function Fs(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 Is(e){let t=Ls(e,e.VERTEX_SHADER,`
|
|
82
|
+
`),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=Do(e,o);e===`POLYLINE`?s=t:r.push(t),o=[]}}function Do(e,t){let n={type:e,handle:Oo(t,5),layer:Oo(t,8)??`0`,colorIndex:Z(t,62),trueColor:Z(t,420),lineType:Oo(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:Mo(Z(t,50)),endAngle:Mo(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:jo(t),textHeight:Z(t,40),rotation:Mo(Z(t,50))});break;case`LWPOLYLINE`:Object.assign(n,{vertices:Ao(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:ko(t,10,20,30),degree:Z(t,71),isClosed:(Number(Z(t,70)??0)&1)==1});break;case`INSERT`:Object.assign(n,{name:Oo(t,2),blockName:Oo(t,2),insertionPoint:Q(t,10,20,30),rotation:Mo(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 ho(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 Oo(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 ko(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 Ao(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 jo(e){let t=e.filter(e=>e.code===1||e.code===3).map(e=>e.value);return t.length?t.join(``):void 0}function Mo(e){return typeof e==`number`&&Number.isFinite(e)?ao(e):void 0}var No=class{constructor(e={}){U(this,`id`,`dwf`),U(this,`label`,`DWF/DWFx native viewer powered by dwf-viewer`),U(this,`formats`,[`dwf`,`dwfx`,`xps`]),U(this,`nativeRenderer`,!0),U(this,`defaults`),U(this,`native`),U(this,`host`),U(this,`lastStats`),this.defaults=e}accepts(e,t){let n=Aa(e);if(n===`dwf`||n===`dwfx`||n===`xps`)return!0;let r=ja(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 Oa(e),l=Bo(ja(e,c),Aa(e));(n=a.onProgress)==null||n.call(a,{phase:`parse`,format:l,message:`Opening DWF/DWFx with dwf-viewer…`,percent:48});let u=await xr(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=Po(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 Oa(e),d=Bo(ja(e,u),Aa(e)),f=Vo(s),p=Ho(s),m=Uo(s,f,p),h=Wo(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 Ca(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(),_=Po(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=Ho(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)),Go(a,`minStrokeCssPx`,e.dwfMinStrokeCssPx),Go(a,`maxOverviewStrokeCssPx`,e.dwfMaxOverviewStrokeCssPx),Go(a,`minTextCssPx`,e.dwfMinTextCssPx),Go(a,`minFilledAreaCssPx`,e.dwfMinFilledAreaCssPx),(i=a.render)==null||i.call(a)}}getLastNativeStats(){return this.lastStats}};function Po(e,t,n,r){let i=zo(e?.diagnostics??[]),a=(e?.pageData??[]).map((e,t)=>Fo(e,t));for(let t of e?.pageData??[])i.push(...zo(t.diagnostics));let o={parser:`dwf-viewer`,nativeRenderer:`dwf-viewer`,dwfKind:e?.kind,packageEntries:e?.packageEntries?.length??0,resources:e?.resources?.length??0,pageKinds:Yo((e?.pageData??[]).map(e=>e.kind)),pageNames:(e?.pages??[]).map(e=>e.name)};return Ja({format:n,sourceName:t,layers:{},blocks:{},pages:a,entities:to(a),metadata:o,warnings:Xo(i),raw:r?e:void 0})}function Fo(e,t){let n=Io(e,t);return{index:t,name:e.name||e.sourcePath||`${t+1}`,width:e.width||1e3,height:e.height||1e3,entities:n}}function Io(e,t){return e.kind===`w2d-text`?e.primitives.flatMap((e,n)=>Lo(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?qo(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 Lo(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:Ro(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 Ro(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 zo(e){return e.filter(e=>e.level!==`info`).map(e=>`${e.code}: ${e.message}${e.source?` (${e.source})`:``}`)}function Bo(e,t){return t===`dwf`||t===`dwfx`||t===`xps`?t:e===`dwf`||e===`dwfx`||e===`xps`?e:`dwf`}function Vo(e){if(e.dwfWasmUrl)return e.dwfWasmUrl;if(typeof document>`u`)return;let t=e.wasmPath?new URL(Ko(e.wasmPath),document.baseURI).href:new URL(`wasm/`,document.baseURI).href;return new URL(`dwfv-render.wasm`,t).href}function Ho(e){return e.dwfBackground?e.dwfBackground:e.canvasOptions?.background??`#05070d`}function Uo(e,t,n){return{...Wo(e,t,n),maxDevicePixelRatio:e.dwfMaxDevicePixelRatio??2,maxCanvasPixels:e.dwfMaxCanvasPixels??16777216}}function Wo(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 Go(e,t,n){typeof n==`number`&&Number.isFinite(n)&&(e[t]=n)}function Ko(e){return e.endsWith(`/`)?e:`${e}/`}function qo(e){let[t,n,r]=e.map(e=>Math.max(0,Math.min(255,Math.round(e*255))));return`#${Jo(t)}${Jo(n)}${Jo(r)}`}function Jo(e){return e.toString(16).padStart(2,`0`)}function Yo(e){let t={};for(let n of e)t[n]=(t[n]??0)+1;return t}function Xo(e){return Array.from(new Set(e))}function Zo(e={}){return new Na([new Ga(e),new fo(e),new No(e)])}function Qo(e){let t=e;return t.nativeRenderer===!0&&typeof t.mount==`function`}var $o={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 es(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:$o[r]??t}function ts(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 ns(e){if(typeof e==`string`){let t=e.trim();return t?/^(#|rgb\(|rgba\(|hsl\(|hsla\()/i.test(t)?rs(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 rs(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}, ${Cs(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)}, ${Cs(n)})`}}function is(e,t,n={}){let r=n.foreground??`#ffffff`,i=r,a,o=ns(e.trueColor)??ns(e.color)??ns(e.colorName);if(o&&(a=o),!a){let t=hs(e,[`trueColor`,`true_color`,`truecolor`,`colorRGB`,`colorRgb`,`rgbColor`,`rgb`]);typeof t==`number`&&t>=0&&t<=16777215&&(a=ts(t,n.trueColorByteOrder??`rgb`))}if(!a){let t=ms(e.colorIndex,e.colorNumber,e.aci);typeof t==`number`&&Math.abs(t)<=257&&t!==256&&t!==0&&t!==257&&(a=es(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=es(t,i,r)):a=ts(t,n.trueColorByteOrder??`rgb`)}return a||=ls(ps(t,e.layer),n),os(a??i,n)}function as(e,t,n={}){let r,i=ns(e.fillColor);if(i&&(r=i),!r&&typeof e.fillColor==`number`){let t=e.fillColor;r=Math.abs(t)<=257?es(t,n.foreground??`#ffffff`,n.foreground??`#ffffff`):ts(t,n.trueColorByteOrder??`rgb`)}return!r&&typeof e.fillColorIndex==`number`&&(r=es(e.fillColorIndex,n.foreground??`#ffffff`,n.foreground??`#ffffff`)),r?os(r,n):void 0}function os(e,t={}){return t.contrastMode===`adaptive`?ss(e,t.background??`#0b1020`,t.foreground??`#ffffff`,t.minColorContrast??2.4):e}function ss(e,t,n,r=2.4){let i=gs(n)??{r:255,g:255,b:255,a:1},a=gs(t)??{r:11,g:16,b:32,a:1},o=gs(e);if(!o||bs(_s(o,a),a)>=r)return e;let s=ys(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=vs(o,c,e);if(bs(_s(t,a),a)>=r)return xs(t)}return bs(i,a)>=r?xs(i):s<.5?`#ffffff`:`#000000`}function cs(e){return e?e.isVisible!==!1&&e.isFrozen!==!0:!0}function ls(e,t){if(!e)return;let n=t.foreground??`#ffffff`,r=ns(e.trueColor);if(r)return r;if(typeof e.trueColor==`number`&&e.trueColor>=0&&e.trueColor<=16777215)return ts(e.trueColor,t.trueColorByteOrder??`rgb`);let i=ns(e.color);if(i)return i;if(fs(e.colorIndex))return es(e.colorIndex,n,n);if(typeof e.color==`number`){let r=Number(e.color);return Math.abs(r)<=257?es(r,n,n):ts(r,t.trueColorByteOrder??`rgb`)}if(typeof e.colorIndex==`number`)return es(e.colorIndex,n,n)}function us(e){return ms(e.colorIndex,e.colorNumber,e.aci)===0?!0:e.trueColor===void 0&&e.color===0}function ds(e,t,n,r={}){if(!us(e))return e;let i=is(t,n,r);return{...e,color:i,trueColor:void 0,colorIndex:void 0,colorNumber:void 0}}function fs(e){return typeof e==`number`&&Number.isFinite(e)&&Math.abs(Math.trunc(e))>=1&&Math.abs(Math.trunc(e))<=255}function ps(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 ms(...e){for(let t of e)if(typeof t==`number`&&Number.isFinite(t))return t}function hs(e,t){let n=e;for(let e of t){let t=n[e];if(typeof t==`number`&&Number.isFinite(t))return t}}function gs(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:Ss(t?e[0]*2.55:e[0]),g:Ss(t?e[1]*2.55:e[1]),b:Ss(t?e[2]*2.55:e[2]),a:Number.isFinite(e[3])?Math.max(0,Math.min(1,e[3])):1}}}}function _s(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 vs(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 ys(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 bs(e,t){let n=ys(e),r=ys(t),i=Math.max(n,r),a=Math.min(n,r);return(i+.05)/(a+.05)}function xs(e){let t=Ss(e.r),n=Ss(e.g),r=Ss(e.b);return e.a<.999?`rgba(${t}, ${n}, ${r}, ${Cs(e.a)})`:`rgb(${t}, ${n}, ${r})`}function Ss(e){return Math.max(0,Math.min(255,Math.round(e)))}function Cs(e){return Math.round(e*1e3)/1e3}function ws(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 Ts(e,t){return{a:1,b:0,c:0,d:1,e,f:t}}function Es(e){let t=Math.cos(e),n=Math.sin(e);return{a:t,b:n,c:-n,d:t,e:0,f:0}}function Ds(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 Os(e,t){if(e)return e.map(e=>({cmd:e.cmd,points:e.points.map(e=>$(e,t))}))}function ks(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=Ts(n.x,n.y);return s=ws(s,Es(Number.isFinite(o)?o:0)),s=ws(s,Ds(Number.isFinite(i)?i:1,Number.isFinite(a)?a:1)),s=ws(s,Ts(-t.x,-t.y)),s}function As(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=Os(e.commands,t)),e.loops&&(n.loops=e.loops.map(e=>({...e,vertices:e.vertices?.map(e=>$(e,t)),commands:Os(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 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},Ms=class{constructor(e,t={}){U(this,`canvas`),U(this,`ctx`),U(this,`opts`),U(this,`document`),U(this,`bounds`,q()),U(this,`view`,{centerX:0,centerY:0,scale:1}),U(this,`fitScale`,1),U(this,`dpr`,1),U(this,`isDragging`,!1),U(this,`lastPointer`),U(this,`resizeObserver`),U(this,`imageCache`,new Map),U(this,`stats`,{total:0,drawn:0,skipped:0,byType:{},unsupported:{},renderElapsedMs:0,backend:`canvas2d`}),U(this,`onStats`),U(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={...js,...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=q(),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(!no(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 Ns(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||!cs(r)){this.stats.skipped++;return}this.drawEntity(e,n,t)}drawEntity(e,t,n){switch(e.kind??Ya(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=is(e,this.document,{foreground:this.opts.foreground,background:this.opts.background,trueColorByteOrder:this.opts.trueColorByteOrder,contrastMode:this.opts.contrastMode,minColorContrast:this.opts.minColorContrast}),i=as(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=uo(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,oo(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=co(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=so(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=lo(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=ks(e,n.basePoint??{x:0,y:0});for(let i of n.entities){let n=ds(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(As(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(!!as(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=is(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=uo(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=q();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 io(n)}includeEntityBounds(e,t,n){let r=String(t.type??``).toUpperCase(),i=t.kind??Ya(r);if(i===`insert`){let r=this.lookupBlock(t.blockName??t.name);if(r&&n<this.opts.maxInsertDepth){let i=ks(t,r.basePoint??{x:0,y:0});for(let t of r.entities)this.includeEntityBounds(e,As(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)&&ro(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)&&so(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 Ns(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 Ps={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},Fs=class{constructor(e,t={}){U(this,`canvas`),U(this,`backend`,`webgl`),U(this,`gl`),U(this,`program`),U(this,`eventController`,new AbortController),U(this,`imageCache`,new Map),U(this,`opts`),U(this,`document`),U(this,`bounds`,q()),U(this,`view`,{centerX:0,centerY:0,scale:1}),U(this,`fitScale`,1),U(this,`dpr`,1),U(this,`isDragging`,!1),U(this,`lastPointer`),U(this,`resizeObserver`),U(this,`overlayCanvas`),U(this,`overlayCtx`),U(this,`scene`),U(this,`stats`,{total:0,drawn:0,skipped:0,byType:{},unsupported:{},renderElapsedMs:0,backend:`webgl`,primitiveCount:0,visiblePrimitiveCount:0,culledPrimitiveCount:0,gpuMemoryBytes:0,buildElapsedMs:0}),U(this,`rafHandle`,0),U(this,`onStats`),U(this,`onViewChange`);let n=Ls(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=Rs(n),this.opts={...Ps,...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 Is()}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=q(),this.view={centerX:0,centerY:0,scale:1},this.fitScale=1,this.disposeScene(),this.render(),this.emitViewChange()}setDocument(e){this.document=e,this.bounds=Js(e,this.opts),this.disposeScene();let t=Hs(e,this.opts,this.bounds);this.scene=Bs(this.gl,t),this.stats=tc(this.scene,0),this.fitToView()}getDocument(){return this.document}setOptions(e){let t=ec(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(!no(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 nc(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=rc(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(!$s(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(!$s(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(!$s(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 Is(){if(typeof document>`u`)return!1;let e=document.createElement(`canvas`);return!!(e.getContext(`webgl2`)??e.getContext(`webgl`)??e.getContext(`experimental-webgl`))}function Ls(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 Rs(e){let t=zs(e,e.VERTEX_SHADER,`
|
|
83
83
|
attribute vec2 a_position;
|
|
84
84
|
attribute vec4 a_color;
|
|
85
85
|
uniform vec2 u_viewCenter;
|
|
@@ -97,10 +97,10 @@ void main() {
|
|
|
97
97
|
gl_PointSize = u_pointSize;
|
|
98
98
|
v_color = a_color;
|
|
99
99
|
}
|
|
100
|
-
`),n=
|
|
100
|
+
`),n=zs(e,e.FRAGMENT_SHADER,`
|
|
101
101
|
precision mediump float;
|
|
102
102
|
varying vec4 v_color;
|
|
103
103
|
void main() {
|
|
104
104
|
gl_FragColor = v_color;
|
|
105
105
|
}
|
|
106
|
-
`),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 Ls(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 Rs(e,t){let n=0,r=t=>t.map(t=>{let r=zs(e,t.positions),i=zs(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 zs(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 Bs(e,t,n){let r=performance.now(),i=new Vs(e,t,n,eo(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 Vs=class{constructor(e,t,n,r){U(this,`lineBuckets`,new Map),U(this,`triangleBuckets`,new Map),U(this,`pointBuckets`,new Map),U(this,`textItems`,[]),U(this,`imageItems`,[]),U(this,`stats`,{total:0,drawn:0,skipped:0,byType:{},unsupported:{},backend:`webgl`,primitiveCount:0,visiblePrimitiveCount:0,culledPrimitiveCount:0,gpuMemoryBytes:0,buildElapsedMs:0}),U(this,`tileSize`),U(this,`maxVerticesPerBatch`),U(this,`primitiveCount`,0),this.document=e,this.opts=t,this.bounds=n,this.origin=r;let i=eo(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||!os(r)){this.stats.skipped++;return}this.addEntity(e,n,t)}finalize(){let e=Ws(this.lineBuckets,this.maxVerticesPerBatch),t=Ws(this.triangleBuckets,this.maxVerticesPerBatch),n=Ws(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??qa(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=io(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(io(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=oo(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=ao(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=so(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:ns(e,this.document,this.colorOptions()),opacity:co(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=Ds(e,n.basePoint??{x:0,y:0});for(let i of n.entities){let n=ls(i,e,this.document,this.colorOptions());this.addEntityTracked(Os(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?qs(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=qs(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=Ys([i,{x:i.x+n,y:i.y-r}]);this.imageItems.push({point:i,width:n,height:r,source:e.imageDataUrl??e.imageSource,color:ns(e,this.document,this.colorOptions()),opacity:co(Number(e.opacity??1),0,1),bounds:a}),this.stats.drawn++}addUnsupportedMarker(e){let t=Js(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,Ys([e,t]));Us(r,e,n,this.origin),Us(r,t,n,this.origin),r.primitiveCount++,this.primitiveCount++}addPoint(e,t){let n=this.batchFor(this.pointBuckets,Xs(e));Us(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=Ys(n),i=this.batchFor(this.triangleBuckets,r);for(let e=1;e<n.length-1;e++)Us(i,n[0],t,this.origin),Us(i,n[e],t,this.origin),Us(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=Hs(),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 tc(ns(e,this.document,this.colorOptions()),[255,255,255,255],co(Number(e.opacity??1),0,1))}fillBytes(e){let t=rs(e,this.document,this.colorOptions());return t?tc(t,[255,255,255,255],co(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 Hs(){return{positions:[],colors:[],bounds:q(),primitiveCount:0}}function Us(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 Ws(e,t){let n=[];for(let r of e.values()){let e=r.positions.length/2;if(e<=0||!eo(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=Gs(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=q();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 Gs(e){let t=e.positions.length/2;return t===e.primitiveCount?1:t===e.primitiveCount*3?3:2}function Ks(e,t){var n;let r=q();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??qa(o);if(s===`insert`){let r=i(e.blockName??e.name);if(r&&n<t.maxInsertDepth){let t=Ds(e,r.basePoint??{x:0,y:0});for(let e of r.entities)a(Os(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)&&to(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)&&ao(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=Js(e);t&&J(r,t)}};for(let t of e.entities)a(t,0);return no(r)}function qs(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 Js(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 Ys(e){let t=q();for(let n of e)J(t,n);return t}function Xs(e){return{minX:e.x,minY:e.y,maxX:e.x,maxY:e.y}}function Zs(e,t){return e.minX<=t.maxX&&e.maxX>=t.minX&&e.minY<=t.maxY&&e.maxY>=t.minY}function Qs(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 $s(e,t){return{...e.stats,renderElapsedMs:t,backend:`webgl`,primitiveCount:e.primitiveCount,visiblePrimitiveCount:0,culledPrimitiveCount:0,gpuMemoryBytes:e.gpuMemoryBytes,buildElapsedMs:e.buildElapsedMs}}function ec(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 tc(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=[nc(n?r[0]*2.55:r[0]),nc(n?r[1]*2.55:r[1]),nc(n?r[2]*2.55:r[2]),nc((Number.isFinite(r[3])?r[3]:1)*255)])}}let a=i??t;return[a[0],a[1],a[2],nc(a[3]*n)]}function nc(e){return Math.max(0,Math.min(255,Math.round(e)))}var rc=class{constructor(e={}){U(this,`canvas`),U(this,`renderer`),U(this,`registry`),U(this,`nativeHost`),U(this,`options`),U(this,`lastResult`),U(this,`activeNativeLoader`);var t;if(this.options={autoFit:!0,...e},this.registry=e.registry??Yo(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=oc(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:Xa(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);ac(r.signal);let i=await this.registry.detect(e),a={...e,buffer:i.bytes};if(Xo(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=ic(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:Xa(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.`);ac(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);ac(n.signal);let s={...i,fileName:r,summary:Xa(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:Xa(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 ic(e){return e instanceof Error?e:Error(String(e))}function ac(e){if(e!=null&&e.aborted)throw new DOMException(`Loading cancelled.`,`AbortError`)}function oc(e,t,n={}){if(e===`canvas2d`)return new As(t,n);if(e===`webgl`)return new Ns(t,n);if(Ps())try{return new Ns(t,n)}catch{}return new As(t,n)}var sc={class:`cad-shell`},cc={class:`cad-toolbar`},lc={class:`cad-tools`},uc={class:`cad-zoom`},dc={class:`cad-meta`},fc={key:0,class:`cad-layers`},pc={class:`cad-layers-head`},mc=[`onClick`],hc={class:`cad-canvas-wrap`},gc={key:0,class:`cad-state`},_c={key:1,class:`cad-state error`},vc={class:`cad-inspector`},yc={key:0,class:`cad-warning`},bc=`wasm/cad/`,xc=`wasm/cad/dwg-worker.js`,Sc=`wasm/cad/dwfv-render.wasm`,Cc=12e4,wc=e(c({__name:`CadViewer`,props:{data:{},type:{},options:{}},setup(e){let t=e,c=n(null),_=n(null),v=n(`loading`),y=n(`正在加载 CAD 预览器...`),b=n(``),x=n(null),S=n(null),C=n(null),w=n([]),T=p(()=>x.value?.warnings||x.value?.document.warnings||[]),E=p(()=>x.value?.summary),ee=p(()=>S.value?.backend||`auto`),D=p(()=>{let e=C.value?.zoomPercent??O?.getZoomPercent?.()??100;return Number.isFinite(e)?Math.round(e):100}),O=null,k=null,A=null,j=()=>t.type.toLowerCase()||`dxf`,M=(e,t,n=!1)=>{let r=new URL(e?String(e):t,document.baseURI).href;return n?r.replace(/\/+$/,``):r},te=()=>`drawing.${j()}`,ne=e=>e?Object.entries(e.document.layers).map(([e,t])=>({...t,name:e})).sort((e,t)=>e.name.localeCompare(t.name)):[],re=e=>Number.isFinite(e)?new Intl.NumberFormat(`zh-CN`).format(Math.round(e||0)):`0`,ie=e=>{let t=e.format?`${e.format.toUpperCase()} `:``,n=Number.isFinite(e.percent)?` ${Math.round(e.percent||0)}%`:``;y.value=`${t}${e.message}${n}`},ae=()=>{O?.fit()},oe=()=>{O?.zoomIn()},se=()=>{O?.zoomOut()},ce=e=>{let t=O?.getDocument();if(!t?.layers[e.name])return;let n=t.layers[e.name];n.isVisible=n.isVisible===!1;let r=O?.setDocument(t,te())||null;x.value=r,w.value=ne(r),u(()=>O?.fit())},le=async()=>{let e=c.value,n=_.value;if(!e)return null;let r=t.options||{},i=M(r.wasmPath,bc,!0),a=M(r.workerUrl,xc),o=M(r.dwfWasmUrl,Sc),s=new rc({container:e,nativeHost:n||void 0,renderer:r.renderer||`auto`,wasmPath:i,workerUrl:a,dwfWasmUrl:o,useWorker:r.useWorker??!0,workerTimeoutMs:r.workerTimeoutMs??Cc,preferDwgWasm:r.preferDwgWasm??!0,includePaperSpace:r.includePaperSpace??!0,maxInsertDepth:r.maxInsertDepth,keepRaw:r.keepRaw??!1,dwfPreferWebgl:r.dwfPreferWebgl??!0,dwfPreferWasm:r.dwfPreferWasm??!0,dwfBackground:r.dwfBackground||`#f8fafc`,dwfMaxDevicePixelRatio:r.dwfMaxDevicePixelRatio,dwfMaxCanvasPixels:r.dwfMaxCanvasPixels,dwfMaxGpuCacheBytes:r.dwfMaxGpuCacheBytes,dwfMaxCachedScenes:r.dwfMaxCachedScenes,dwfLineWeightMode:r.dwfLineWeightMode,dwfMinStrokeCssPx:r.dwfMinStrokeCssPx,dwfMaxOverviewStrokeCssPx:r.dwfMaxOverviewStrokeCssPx,dwfMinTextCssPx:r.dwfMinTextCssPx,dwfMinFilledAreaCssPx:r.dwfMinFilledAreaCssPx,autoFit:!0,canvasOptions:{background:`#f8fafc`,foreground:`#0f172a`,contrastMode:`adaptive`,minColorContrast:2.4,showPageBounds:!0,showUnsupportedMarkers:!0,enableSpatialIndex:!0,maxVisibleTextLabels:2400,...r.canvasOptions||{}},onLoadProgress:ie,onRenderStats:e=>{S.value=e},onViewChange:e=>{C.value=e},onLoad:e=>{x.value=e,w.value=ne(e)},onError:e=>{b.value=e.message||`CAD 文件解析失败`}});return r.preloadDwg!==!1&&j()===`dwg`&&s.preloadDwg({wasmPath:i,workerUrl:a}).catch(()=>{}),s},ue=async()=>{v.value=`loading`,y.value=`正在解析 CAD...`,b.value=``,x.value=null,S.value=null,C.value=null,w.value=[],A?.abort(),A=new AbortController;try{if(O?.destroy(),O=await le(),!O)return;let e=t.options||{},n=await O.loadBuffer(t.data.slice(0),te(),{signal:A.signal,transferInputBuffer:!1,wasmPath:M(e.wasmPath,bc,!0),workerUrl:M(e.workerUrl,xc),dwfWasmUrl:M(e.dwfWasmUrl,Sc)});x.value=n,w.value=ne(n),v.value=`ready`,await u(),O.fit()}catch(e){if(A.signal.aborted)return;console.error(e),v.value=`error`,b.value=e instanceof Error?e.message:`CAD 文件解析失败`}};return o(()=>{ue(),c.value&&(k=new ResizeObserver(()=>{O?.resize()}),k.observe(c.value))}),l(()=>{A?.abort(),A=null,k?.disconnect(),k=null,O?.destroy(),O=null}),(e,t)=>(g(),m(`div`,sc,[d(`div`,cc,[d(`div`,lc,[d(`button`,{type:`button`,onClick:ae},`适配`),d(`button`,{type:`button`,title:`缩小`,onClick:se},`-`),d(`span`,uc,i(D.value)+`%`,1),d(`button`,{type:`button`,title:`放大`,onClick:oe},`+`)]),d(`div`,dc,[d(`span`,null,i(j().toUpperCase()),1),d(`span`,null,i(ee.value.toUpperCase()),1)])]),d(`div`,{class:r([`cad-body`,{"without-layers":!w.value.length}])},[w.value.length?(g(),m(`aside`,fc,[d(`div`,pc,[t[0]||=d(`strong`,null,`图层`,-1),d(`span`,null,i(w.value.length)+` 项`,1)]),(g(!0),m(h,null,s(w.value,e=>(g(),m(`button`,{key:e.name,type:`button`,class:r({muted:e.isVisible===!1||e.isFrozen}),onClick:t=>ce(e)},[d(`span`,{class:`cad-layer-color`,style:a({background:typeof e.color==`string`?e.color:void 0})},null,4),d(`span`,null,i(e.name),1)],10,mc))),128))])):f(``,!0),d(`div`,hc,[d(`div`,{ref_key:`root`,ref:c,class:`cad-stage`},[d(`div`,{ref_key:`nativeHost`,ref:_,class:`cad-native-stage`},null,512)],512),v.value===`loading`?(g(),m(`div`,gc,i(y.value),1)):v.value===`error`?(g(),m(`div`,_c,i(b.value),1)):f(``,!0)]),d(`aside`,vc,[t[5]||=d(`strong`,null,`结构`,-1),d(`dl`,null,[d(`div`,null,[t[1]||=d(`dt`,null,`实体`,-1),d(`dd`,null,i(re(E.value?.entityCount)),1)]),d(`div`,null,[t[2]||=d(`dt`,null,`块`,-1),d(`dd`,null,i(re(E.value?.blockCount)),1)]),d(`div`,null,[t[3]||=d(`dt`,null,`页面`,-1),d(`dd`,null,i(re(E.value?.pageCount)),1)]),d(`div`,null,[t[4]||=d(`dt`,null,`绘制`,-1),d(`dd`,null,i(re(S.value?.drawn)),1)])]),T.value.length?(g(),m(`p`,yc,i(T.value[0]),1)):f(``,!0)])],2)]))}}),[[`__scopeId`,`data-v-06294777`]]);export{wc as default};
|
|
106
|
+
`),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 zs(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 Bs(e,t){let n=0,r=t=>t.map(t=>{let r=Vs(e,t.positions),i=Vs(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 Vs(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 Hs(e,t,n){let r=performance.now(),i=new Us(e,t,n,no(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 Us=class{constructor(e,t,n,r){U(this,`lineBuckets`,new Map),U(this,`triangleBuckets`,new Map),U(this,`pointBuckets`,new Map),U(this,`textItems`,[]),U(this,`imageItems`,[]),U(this,`stats`,{total:0,drawn:0,skipped:0,byType:{},unsupported:{},backend:`webgl`,primitiveCount:0,visiblePrimitiveCount:0,culledPrimitiveCount:0,gpuMemoryBytes:0,buildElapsedMs:0}),U(this,`tileSize`),U(this,`maxVerticesPerBatch`),U(this,`primitiveCount`,0),this.document=e,this.opts=t,this.bounds=n,this.origin=r;let i=no(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||!cs(r)){this.stats.skipped++;return}this.addEntity(e,n,t)}finalize(){let e=Ks(this.lineBuckets,this.maxVerticesPerBatch),t=Ks(this.triangleBuckets,this.maxVerticesPerBatch),n=Ks(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??Ya(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=oo(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(oo(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=co(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=so(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=lo(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:is(e,this.document,this.colorOptions()),opacity:uo(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=ks(e,n.basePoint??{x:0,y:0});for(let i of n.entities){let n=ds(i,e,this.document,this.colorOptions());this.addEntityTracked(As(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?Ys(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=Ys(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=Zs([i,{x:i.x+n,y:i.y-r}]);this.imageItems.push({point:i,width:n,height:r,source:e.imageDataUrl??e.imageSource,color:is(e,this.document,this.colorOptions()),opacity:uo(Number(e.opacity??1),0,1),bounds:a}),this.stats.drawn++}addUnsupportedMarker(e){let t=Xs(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,Zs([e,t]));Gs(r,e,n,this.origin),Gs(r,t,n,this.origin),r.primitiveCount++,this.primitiveCount++}addPoint(e,t){let n=this.batchFor(this.pointBuckets,Qs(e));Gs(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=Zs(n),i=this.batchFor(this.triangleBuckets,r);for(let e=1;e<n.length-1;e++)Gs(i,n[0],t,this.origin),Gs(i,n[e],t,this.origin),Gs(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=Ws(),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 rc(is(e,this.document,this.colorOptions()),[255,255,255,255],uo(Number(e.opacity??1),0,1))}fillBytes(e){let t=as(e,this.document,this.colorOptions());return t?rc(t,[255,255,255,255],uo(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 Ws(){return{positions:[],colors:[],bounds:q(),primitiveCount:0}}function Gs(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 Ks(e,t){let n=[];for(let r of e.values()){let e=r.positions.length/2;if(e<=0||!no(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=qs(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=q();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 qs(e){let t=e.positions.length/2;return t===e.primitiveCount?1:t===e.primitiveCount*3?3:2}function Js(e,t){var n;let r=q();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??Ya(o);if(s===`insert`){let r=i(e.blockName??e.name);if(r&&n<t.maxInsertDepth){let t=ks(e,r.basePoint??{x:0,y:0});for(let e of r.entities)a(As(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)&&ro(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)&&so(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=Xs(e);t&&J(r,t)}};for(let t of e.entities)a(t,0);return io(r)}function Ys(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 Xs(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 Zs(e){let t=q();for(let n of e)J(t,n);return t}function Qs(e){return{minX:e.x,minY:e.y,maxX:e.x,maxY:e.y}}function $s(e,t){return e.minX<=t.maxX&&e.maxX>=t.minX&&e.minY<=t.maxY&&e.maxY>=t.minY}function ec(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 tc(e,t){return{...e.stats,renderElapsedMs:t,backend:`webgl`,primitiveCount:e.primitiveCount,visiblePrimitiveCount:0,culledPrimitiveCount:0,gpuMemoryBytes:e.gpuMemoryBytes,buildElapsedMs:e.buildElapsedMs}}function nc(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 rc(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=[ic(n?r[0]*2.55:r[0]),ic(n?r[1]*2.55:r[1]),ic(n?r[2]*2.55:r[2]),ic((Number.isFinite(r[3])?r[3]:1)*255)])}}let a=i??t;return[a[0],a[1],a[2],ic(a[3]*n)]}function ic(e){return Math.max(0,Math.min(255,Math.round(e)))}var ac=class{constructor(e={}){U(this,`canvas`),U(this,`renderer`),U(this,`registry`),U(this,`nativeHost`),U(this,`options`),U(this,`lastResult`),U(this,`activeNativeLoader`);var t;if(this.options={autoFit:!0,...e},this.registry=e.registry??Zo(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=cc(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:Qa(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);sc(r.signal);let i=await this.registry.detect(e),a={...e,buffer:i.bytes};if(Qo(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=oc(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:Qa(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.`);sc(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);sc(n.signal);let s={...i,fileName:r,summary:Qa(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:Qa(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 oc(e){return e instanceof Error?e:Error(String(e))}function sc(e){if(e!=null&&e.aborted)throw new DOMException(`Loading cancelled.`,`AbortError`)}function cc(e,t,n={}){if(e===`canvas2d`)return new Ms(t,n);if(e===`webgl`)return new Fs(t,n);if(Is())try{return new Fs(t,n)}catch{}return new Ms(t,n)}var lc={class:`cad-shell`},uc={class:`cad-toolbar`},dc={class:`cad-tools`},fc={class:`cad-zoom`},pc={class:`cad-meta`},mc={key:0,class:`cad-layers`},hc={class:`cad-layers-head`},gc=[`onClick`],_c={class:`cad-canvas-wrap`},vc={key:0,class:`cad-state`},yc={key:1,class:`cad-state error`},bc={class:`cad-inspector`},xc={key:0,class:`cad-warning`},Sc=`wasm/cad/`,Cc=`wasm/cad/dwg-worker.js`,wc=`wasm/cad/dwfv-render.wasm`,Tc=12e4,Ec=e(c({__name:`CadViewer`,props:{data:{},type:{},options:{}},setup(e){let t=e,c=n(null),_=n(null),v=n(`loading`),y=n(`正在加载 CAD 预览器...`),b=n(``),x=n(null),S=n(null),C=n(null),w=n([]),T=p(()=>x.value?.warnings||x.value?.document.warnings||[]),E=p(()=>x.value?.summary),ee=p(()=>S.value?.backend||`auto`),D=p(()=>{let e=C.value?.zoomPercent??O?.getZoomPercent?.()??100;return Number.isFinite(e)?Math.round(e):100}),O=null,k=null,A=null,te=()=>t.type.toLowerCase()||`dxf`,j=(e,t,n=!1)=>{let r=new URL(e?String(e):t,document.baseURI).href;return n?r.replace(/\/+$/,``):r},M=()=>`drawing.${te()}`,ne=e=>e?Object.entries(e.document.layers).map(([e,t])=>({...t,name:e})).sort((e,t)=>e.name.localeCompare(t.name)):[],re=e=>Number.isFinite(e)?new Intl.NumberFormat(`zh-CN`).format(Math.round(e||0)):`0`,ie=e=>{let t=e.format?`${e.format.toUpperCase()} `:``,n=Number.isFinite(e.percent)?` ${Math.round(e.percent||0)}%`:``;y.value=`${t}${e.message}${n}`},ae=()=>{O?.fit()},oe=()=>{O?.zoomIn()},se=()=>{O?.zoomOut()},ce=e=>{let t=O?.getDocument();if(!t?.layers[e.name])return;let n=t.layers[e.name];n.isVisible=n.isVisible===!1;let r=O?.setDocument(t,M())||null;x.value=r,w.value=ne(r),u(()=>O?.fit())},le=async()=>{let e=c.value,n=_.value;if(!e)return null;let r=t.options||{},i=j(r.wasmPath,Sc,!0),a=j(r.workerUrl,Cc),o=j(r.dwfWasmUrl,wc),s=new ac({container:e,nativeHost:n||void 0,renderer:r.renderer||`auto`,wasmPath:i,workerUrl:a,dwfWasmUrl:o,useWorker:r.useWorker??!0,workerTimeoutMs:r.workerTimeoutMs??Tc,preferDwgWasm:r.preferDwgWasm??!0,includePaperSpace:r.includePaperSpace??!0,maxInsertDepth:r.maxInsertDepth,keepRaw:r.keepRaw??!1,dwfPreferWebgl:r.dwfPreferWebgl??!0,dwfPreferWasm:r.dwfPreferWasm??!0,dwfBackground:r.dwfBackground||`#f8fafc`,dwfMaxDevicePixelRatio:r.dwfMaxDevicePixelRatio,dwfMaxCanvasPixels:r.dwfMaxCanvasPixels,dwfMaxGpuCacheBytes:r.dwfMaxGpuCacheBytes,dwfMaxCachedScenes:r.dwfMaxCachedScenes,dwfLineWeightMode:r.dwfLineWeightMode,dwfMinStrokeCssPx:r.dwfMinStrokeCssPx,dwfMaxOverviewStrokeCssPx:r.dwfMaxOverviewStrokeCssPx,dwfMinTextCssPx:r.dwfMinTextCssPx,dwfMinFilledAreaCssPx:r.dwfMinFilledAreaCssPx,autoFit:!0,canvasOptions:{background:`#f8fafc`,foreground:`#0f172a`,contrastMode:`adaptive`,minColorContrast:2.4,showPageBounds:!0,showUnsupportedMarkers:!0,enableSpatialIndex:!0,maxVisibleTextLabels:2400,...r.canvasOptions||{}},onLoadProgress:ie,onRenderStats:e=>{S.value=e},onViewChange:e=>{C.value=e},onLoad:e=>{x.value=e,w.value=ne(e)},onError:e=>{b.value=e.message||`CAD 文件解析失败`}});return r.preloadDwg!==!1&&te()===`dwg`&&s.preloadDwg({wasmPath:i,workerUrl:a}).catch(()=>{}),s},ue=async()=>{v.value=`loading`,y.value=`正在解析 CAD...`,b.value=``,x.value=null,S.value=null,C.value=null,w.value=[],A?.abort(),A=new AbortController;try{if(O?.destroy(),O=await le(),!O)return;let e=t.options||{},n=await O.loadBuffer(t.data.slice(0),M(),{signal:A.signal,transferInputBuffer:!1,wasmPath:j(e.wasmPath,Sc,!0),workerUrl:j(e.workerUrl,Cc),dwfWasmUrl:j(e.dwfWasmUrl,wc)});x.value=n,w.value=ne(n),v.value=`ready`,await u(),O.fit()}catch(e){if(A.signal.aborted)return;console.error(e),v.value=`error`,b.value=e instanceof Error?e.message:`CAD 文件解析失败`}};return o(()=>{ue(),c.value&&(k=new ResizeObserver(()=>{O?.resize()}),k.observe(c.value))}),l(()=>{A?.abort(),A=null,k?.disconnect(),k=null,O?.destroy(),O=null}),(e,t)=>(g(),m(`div`,lc,[d(`div`,uc,[d(`div`,dc,[d(`button`,{type:`button`,onClick:ae},`适配`),d(`button`,{type:`button`,title:`缩小`,onClick:se},`-`),d(`span`,fc,i(D.value)+`%`,1),d(`button`,{type:`button`,title:`放大`,onClick:oe},`+`)]),d(`div`,pc,[d(`span`,null,i(te().toUpperCase()),1),d(`span`,null,i(ee.value.toUpperCase()),1)])]),d(`div`,{class:r([`cad-body`,{"without-layers":!w.value.length}])},[w.value.length?(g(),m(`aside`,mc,[d(`div`,hc,[t[0]||=d(`strong`,null,`图层`,-1),d(`span`,null,i(w.value.length)+` 项`,1)]),(g(!0),m(h,null,s(w.value,e=>(g(),m(`button`,{key:e.name,type:`button`,class:r({muted:e.isVisible===!1||e.isFrozen}),onClick:t=>ce(e)},[d(`span`,{class:`cad-layer-color`,style:a({background:typeof e.color==`string`?e.color:void 0})},null,4),d(`span`,null,i(e.name),1)],10,gc))),128))])):f(``,!0),d(`div`,_c,[d(`div`,{ref_key:`root`,ref:c,class:`cad-stage`},[d(`div`,{ref_key:`nativeHost`,ref:_,class:`cad-native-stage`},null,512)],512),v.value===`loading`?(g(),m(`div`,vc,i(y.value),1)):v.value===`error`?(g(),m(`div`,yc,i(b.value),1)):f(``,!0)]),d(`aside`,bc,[t[5]||=d(`strong`,null,`结构`,-1),d(`dl`,null,[d(`div`,null,[t[1]||=d(`dt`,null,`实体`,-1),d(`dd`,null,i(re(E.value?.entityCount)),1)]),d(`div`,null,[t[2]||=d(`dt`,null,`块`,-1),d(`dd`,null,i(re(E.value?.blockCount)),1)]),d(`div`,null,[t[3]||=d(`dt`,null,`页面`,-1),d(`dd`,null,i(re(E.value?.pageCount)),1)]),d(`div`,null,[t[4]||=d(`dt`,null,`绘制`,-1),d(`dd`,null,i(re(S.value?.drawn)),1)])]),T.value.length?(g(),m(`p`,xc,i(T.value[0]),1)):f(``,!0)])],2)]))}}),[[`__scopeId`,`data-v-88d7d289`]]);export{Ec as default};
|