@yumiai/chat-widget 0.1.2 → 0.2.1
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/CHANGELOG.md +100 -0
- package/README.md +119 -22
- package/dist/ExcelCore-DJOIVQMI.js +11 -0
- package/dist/ExcelCore-DJOIVQMI.js.map +1 -0
- package/dist/ExcelViewer-3YLLYYIQ.js +65 -0
- package/dist/ExcelViewer-3YLLYYIQ.js.map +1 -0
- package/dist/GerberViewerA2UI-7CNT7HX4.css +693 -0
- package/dist/GerberViewerA2UI-7CNT7HX4.css.map +1 -0
- package/dist/GerberViewerA2UI-X5FWAD5M.js +57 -0
- package/dist/GerberViewerA2UI-X5FWAD5M.js.map +1 -0
- package/dist/GraphStatsLegend-D5bPeXB_.d.cts +607 -0
- package/dist/GraphStatsLegend-D5bPeXB_.d.ts +607 -0
- package/dist/JsonRenderStandalone-EIZM62JU.js +18 -0
- package/dist/JsonRenderStandalone-EIZM62JU.js.map +1 -0
- package/dist/JsonRenderStandalone-POB4Q3N3.css +2384 -0
- package/dist/JsonRenderStandalone-POB4Q3N3.css.map +1 -0
- package/dist/JsonRenderStandalone-UsTcST4G.d.cts +23 -0
- package/dist/JsonRenderStandalone-UsTcST4G.d.ts +23 -0
- package/dist/KicadViewer-GV6ZC4AQ.js +124 -0
- package/dist/KicadViewer-GV6ZC4AQ.js.map +1 -0
- package/dist/KicadViewerCore-U7BWZHKJ.js +11 -0
- package/dist/KicadViewerCore-U7BWZHKJ.js.map +1 -0
- package/dist/PdfViewer-CHPDRK46.js +51 -0
- package/dist/PdfViewer-CHPDRK46.js.map +1 -0
- package/dist/PdfViewer-LPYGQETK.css +1899 -0
- package/dist/PdfViewer-LPYGQETK.css.map +1 -0
- package/dist/PdfViewerCore-HJPEHSRA.js +364 -0
- package/dist/PdfViewerCore-HJPEHSRA.js.map +1 -0
- package/dist/PowerPointCore-FPDR2BL4.js +11 -0
- package/dist/PowerPointCore-FPDR2BL4.js.map +1 -0
- package/dist/PowerPointViewer-LQTO6UCU.js +61 -0
- package/dist/PowerPointViewer-LQTO6UCU.js.map +1 -0
- package/dist/StepViewerCore-7W3L3R4E.js +285 -0
- package/dist/StepViewerCore-7W3L3R4E.js.map +1 -0
- package/dist/ThreeViewerCore-N3QJD5QI.js +161 -0
- package/dist/ThreeViewerCore-N3QJD5QI.js.map +1 -0
- package/dist/WordCore-JKSXK2XD.js +11 -0
- package/dist/WordCore-JKSXK2XD.js.map +1 -0
- package/dist/WordViewer-ZHCQMHOH.js +61 -0
- package/dist/WordViewer-ZHCQMHOH.js.map +1 -0
- package/dist/chunk-2SKA3F5U.js +88 -0
- package/dist/chunk-2SKA3F5U.js.map +1 -0
- package/dist/chunk-2UC7YLVX.js +318 -0
- package/dist/chunk-2UC7YLVX.js.map +1 -0
- package/dist/chunk-3R6T3LBR.js +24 -0
- package/dist/chunk-3R6T3LBR.js.map +1 -0
- package/dist/chunk-56WRZM3R.js +398 -0
- package/dist/chunk-56WRZM3R.js.map +1 -0
- package/dist/chunk-7A4FY6FK.js +10226 -0
- package/dist/chunk-7A4FY6FK.js.map +1 -0
- package/dist/chunk-7D4SUZUM.js +38 -0
- package/dist/chunk-7D4SUZUM.js.map +1 -0
- package/dist/chunk-7S67DOHQ.js +436 -0
- package/dist/chunk-7S67DOHQ.js.map +1 -0
- package/dist/chunk-CFKGNAJM.js +14013 -0
- package/dist/chunk-CFKGNAJM.js.map +1 -0
- package/dist/chunk-GAMA3VA7.js +99 -0
- package/dist/chunk-GAMA3VA7.js.map +1 -0
- package/dist/chunk-GYXTSY22.js +639 -0
- package/dist/chunk-GYXTSY22.js.map +1 -0
- package/dist/chunk-K4KGNVL5.js +77 -0
- package/dist/chunk-K4KGNVL5.js.map +1 -0
- package/dist/chunk-KQV7IKET.js +1621 -0
- package/dist/chunk-KQV7IKET.js.map +1 -0
- package/dist/chunk-O3NXUM6C.js +1871 -0
- package/dist/chunk-O3NXUM6C.js.map +1 -0
- package/dist/chunk-PZXSASDY.js +83 -0
- package/dist/chunk-PZXSASDY.js.map +1 -0
- package/dist/chunk-QLVPIM6R.js +595 -0
- package/dist/chunk-QLVPIM6R.js.map +1 -0
- package/dist/chunk-VXJWGLZ7.js +21 -0
- package/dist/chunk-VXJWGLZ7.js.map +1 -0
- package/dist/chunk-XQ562W7I.js +116 -0
- package/dist/chunk-XQ562W7I.js.map +1 -0
- package/dist/components/JsonRender/standalone.cjs +39368 -0
- package/dist/components/JsonRender/standalone.cjs.map +1 -0
- package/dist/components/JsonRender/standalone.css +2384 -0
- package/dist/components/JsonRender/standalone.css.map +1 -0
- package/dist/components/JsonRender/standalone.d.cts +16 -0
- package/dist/components/JsonRender/standalone.d.ts +16 -0
- package/dist/components/JsonRender/standalone.js +38 -0
- package/dist/components/JsonRender/standalone.js.map +1 -0
- package/dist/gerber-2d-entry-OQ4SQRBY.js +3950 -0
- package/dist/gerber-2d-entry-OQ4SQRBY.js.map +1 -0
- package/dist/gerber-3d-entry-DEHDBOO2.js +3679 -0
- package/dist/gerber-3d-entry-DEHDBOO2.js.map +1 -0
- package/dist/gerber-simulation-entry-EBDX72XE.js +1801 -0
- package/dist/gerber-simulation-entry-EBDX72XE.js.map +1 -0
- package/dist/index.cjs +60113 -2970
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +11342 -1708
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +3275 -77
- package/dist/index.d.ts +3275 -77
- package/dist/index.js +18078 -2540
- package/dist/index.js.map +1 -1
- package/dist/provenance/index.cjs +2248 -0
- package/dist/provenance/index.cjs.map +1 -0
- package/dist/provenance/index.css +52 -0
- package/dist/provenance/index.css.map +1 -0
- package/dist/provenance/index.d.cts +12 -0
- package/dist/provenance/index.d.ts +12 -0
- package/dist/provenance/index.js +27 -0
- package/dist/provenance/index.js.map +1 -0
- package/dist/resolveToArrayBuffer-AQIDZHSQ.js +23 -0
- package/dist/resolveToArrayBuffer-AQIDZHSQ.js.map +1 -0
- package/package.json +98 -17
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/FileViewer/FileViewer.css","../src/components/jetPaveGerberViewer/src/styles/page-2d.css","../src/components/jetPaveGerberViewer/src/styles/page-3d.css","../src/components/jetPaveGerberViewer/src/styles/page-simulation.css"],"sourcesContent":["/* === FileViewer Core Styles (CWRF-001) === */\n\n.ycw-file-viewer {\n height: 100%;\n overflow: auto;\n}\n\n/* Gerber — DFX Copilot iframe embed */\n.ycw-file-viewer-gerber {\n display: flex;\n flex-direction: column;\n gap: 8px;\n height: 100%;\n min-height: 320px;\n}\n.ycw-file-viewer-gerber-warning {\n padding: 12px;\n font-size: 13px;\n line-height: 1.5;\n color: var(--ycw-color-text-secondary);\n background: var(--ycw-color-fill-quaternary);\n border-radius: 8px;\n border: 1px solid var(--ycw-color-border);\n}\n.ycw-file-viewer-gerber-frame {\n flex: 1;\n width: 100%;\n min-height: 480px;\n border: 0;\n border-radius: 8px;\n background: var(--ycw-color-fill-quaternary);\n}\n\n/* 内嵌 JetPaveGerberApp(非 iframe)时撑满右侧面板 */\n.ycw-file-viewer-gerber-embedded {\n height: 100%;\n min-height: 400px;\n display: flex;\n flex-direction: column;\n}\n.ycw-gerber-mode-bar {\n flex-shrink: 0;\n display: flex;\n gap: 2px;\n padding: 4px 8px;\n border-bottom: 1px solid var(--ycw-color-border);\n background: var(--ycw-color-bg-primary);\n}\n\n.ycw-gerber-mode-bar .viewer-action-btn {\n position: relative;\n font-size: 12px;\n line-height: 18px;\n padding: 5px 12px;\n background: transparent;\n border: none;\n border-radius: 0;\n cursor: pointer;\n color: var(--ycw-color-text-secondary);\n transition: color 0.2s, background 0.2s;\n white-space: nowrap;\n}\n\n.ycw-gerber-mode-bar .viewer-action-btn::after {\n content: '';\n position: absolute;\n left: 6px;\n right: 6px;\n bottom: 0;\n height: 2px;\n border-radius: 1px;\n background: transparent;\n transition: background 0.2s;\n}\n\n.ycw-gerber-mode-bar .viewer-action-btn:hover {\n color: var(--ycw-color-text-primary);\n background: var(--ycw-color-bg-hover);\n}\n\n.ycw-gerber-mode-bar .viewer-action-btn.active {\n color: var(--ycw-color-text-primary);\n font-weight: 500;\n}\n\n.ycw-gerber-mode-bar .viewer-action-btn.active::after {\n background: var(--ycw-color-primary);\n}\n\n.ycw-gerber-viewer-body {\n flex: 1;\n min-height: 0;\n position: relative;\n background: var(--ycw-color-bg-secondary);\n}\n\n.ycw-file-viewer-loading {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 12px;\n padding: 48px 24px;\n color: var(--ycw-color-text-secondary);\n}\n\n/* === FileViewerModal === */\n.ycw-fvm-header {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.ycw-fvm-icon { font-size: 18px; }\n.ycw-fvm-title {\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.ycw-fvm-actions {\n display: flex;\n gap: 4px;\n}\n.ycw-fvm-depth {\n font-size: var(--ycw-font-size-2xs);\n padding: 1px 6px;\n border-radius: 8px;\n background: var(--ycw-color-fill-quaternary);\n color: var(--ycw-color-text-tertiary);\n}\n.ycw-fvm-meta {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 6px 12px;\n font-size: var(--ycw-font-size-sm);\n color: var(--ycw-color-text-tertiary);\n border-bottom: 1px solid var(--ycw-color-border);\n flex-shrink: 0;\n}\n.ycw-fvm-path {\n font-family: var(--ycw-font-family-mono);\n color: var(--ycw-color-text-quaternary);\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.ycw-fvm-meta-toggle {\n margin-left: auto;\n flex-shrink: 0;\n}\n.ycw-fvm-body {\n flex: 1;\n overflow: auto;\n min-height: 0;\n padding-top: 12px;\n}\n.ycw-fvm-error {\n padding: 24px;\n text-align: center;\n color: var(--ycw-color-error);\n}\n.ycw-fvm-kicad-ref-hint {\n padding: 6px 12px;\n font-size: var(--ycw-font-size-xs);\n color: var(--ycw-color-text-tertiary);\n background: var(--ycw-color-fill-quaternary);\n border-bottom: 1px solid var(--ycw-color-border);\n flex-shrink: 0;\n}\n.ycw-fvm-kicad-ref-hint-sub {\n display: block;\n margin-top: 4px;\n color: var(--ycw-color-text-quaternary);\n}\n.ycw-fvm-kicad-canvas-bar {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 8px;\n padding: 8px 12px;\n background: var(--ycw-color-primary-bg);\n border-bottom: 1px solid var(--ycw-color-border);\n flex-shrink: 0;\n}\n.ycw-fvm-kicad-canvas-bar-label {\n font-size: var(--ycw-font-size-sm);\n color: var(--ycw-color-text-secondary);\n margin-right: auto;\n}\n.ycw-fvm-btn-ask {\n background: var(--ycw-color-primary);\n color: var(--ycw-color-bg-primary);\n border: none;\n}\n.ycw-fvm-btn-ask:hover {\n filter: brightness(1.05);\n}\n\n/* === FileViewerPanel (inline, no Drawer) === */\n.ycw-fvm-panel {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n}\n.ycw-fvm-panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 12px;\n border-bottom: 1px solid var(--ycw-color-border);\n flex-shrink: 0;\n gap: 8px;\n}\n.ycw-fvm-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 2px 8px;\n border: none;\n background: transparent;\n cursor: pointer;\n font-size: var(--ycw-font-size-md);\n color: var(--ycw-color-text-secondary);\n border-radius: 4px;\n transition: background var(--ycw-duration-fast), color var(--ycw-duration-fast);\n white-space: nowrap;\n}\n.ycw-fvm-btn:hover {\n background: var(--ycw-color-bg-hover);\n color: var(--ycw-color-text-primary);\n}\n.ycw-fvm-btn-back {\n font-size: var(--ycw-font-size-sm);\n margin-right: 4px;\n}\n\n/* === Breadcrumb === */\n.ycw-fvm-breadcrumb {\n display: flex;\n align-items: center;\n gap: 2px;\n padding: 4px 12px;\n font-size: var(--ycw-font-size-sm);\n color: var(--ycw-color-text-tertiary);\n border-bottom: 1px solid var(--ycw-color-border);\n flex-shrink: 0;\n overflow-x: auto;\n white-space: nowrap;\n}\n.ycw-fvm-breadcrumb-sep {\n color: var(--ycw-color-text-quaternary);\n margin: 0 2px;\n user-select: none;\n}\n.ycw-fvm-breadcrumb-link {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n border: none;\n background: transparent;\n cursor: pointer;\n font-size: var(--ycw-font-size-sm);\n color: var(--ycw-color-primary);\n padding: 2px 4px;\n border-radius: 3px;\n transition: background var(--ycw-duration-fast);\n max-width: 120px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.ycw-fvm-breadcrumb-link:hover {\n background: var(--ycw-color-primary-bg);\n}\n.ycw-fvm-breadcrumb-current {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n font-weight: 500;\n color: var(--ycw-color-text-primary);\n max-width: 180px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.ycw-fvm-breadcrumb-icon {\n font-size: var(--ycw-font-size-md);\n}\n\n/* === FileViewerModal (Drawer — legacy) === */\n.ycw-file-viewer-modal .ant-drawer-content-wrapper {\n transition: width var(--ycw-duration-slow) var(--ycw-ease-default);\n}\n.ycw-file-viewer-modal .ant-drawer-body {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n/* === MarkdownViewer === */\n.ycw-file-viewer-markdown {\n padding: 8px 16px;\n line-height: 1.8;\n font-size: var(--ycw-font-size-base, 14px);\n color: var(--ycw-color-text-primary, #1f2937);\n word-break: break-word;\n overflow-wrap: break-word;\n}\n\n.ycw-file-viewer-markdown h1,\n.ycw-file-viewer-markdown h2,\n.ycw-file-viewer-markdown h3,\n.ycw-file-viewer-markdown h4,\n.ycw-file-viewer-markdown h5,\n.ycw-file-viewer-markdown h6 {\n margin-top: 1.4em;\n margin-bottom: 0.6em;\n font-weight: 600;\n line-height: 1.3;\n}\n\n.ycw-file-viewer-markdown h1:first-child,\n.ycw-file-viewer-markdown h2:first-child,\n.ycw-file-viewer-markdown h3:first-child {\n margin-top: 0;\n}\n\n.ycw-file-viewer-markdown p {\n margin-bottom: 0.75em;\n}\n.ycw-file-viewer-markdown p:last-child {\n margin-bottom: 0;\n}\n\n.ycw-file-viewer-markdown ul,\n.ycw-file-viewer-markdown ol {\n margin-top: 0.4em;\n margin-bottom: 0.75em;\n padding-left: 1.5em;\n}\n\n.ycw-file-viewer-markdown li {\n margin-bottom: 0.25em;\n}\n\n.ycw-file-viewer-markdown blockquote {\n margin: 0.6em 0;\n padding: 0.4em 1em;\n border-left: 3px solid var(--ycw-color-border, #e5e7eb);\n color: var(--ycw-color-text-secondary, #4b5563);\n background: var(--ycw-color-bg-secondary, #f9fafb);\n border-radius: 0 4px 4px 0;\n}\n\n.ycw-file-viewer-markdown table {\n width: 100%;\n border-collapse: collapse;\n margin: 0.8em 0;\n font-size: var(--ycw-font-size-md, 13px);\n}\n\n.ycw-file-viewer-markdown th,\n.ycw-file-viewer-markdown td {\n padding: 8px 12px;\n border: 1px solid var(--ycw-color-border, #e5e7eb);\n text-align: left;\n}\n\n.ycw-file-viewer-markdown th {\n background: var(--ycw-color-bg-secondary, #f9fafb);\n font-weight: 600;\n}\n\n.ycw-file-viewer-markdown tr:nth-child(even) {\n background: var(--ycw-color-bg-secondary, #f9fafb);\n}\n\n.ycw-file-viewer-markdown hr {\n border: none;\n border-top: 1px solid var(--ycw-color-border, #e5e7eb);\n margin: 1.5em 0;\n}\n\n.ycw-file-viewer-markdown img {\n max-width: 100%;\n height: auto;\n border-radius: 4px;\n}\n\n.ycw-file-viewer-markdown .katex-display {\n margin: 0.8em 0;\n}\n\n/* Inline @xref chips — global, works in all text-based viewers */\n.ycw-xref-chip {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n padding: 1px 8px;\n border: 1px solid var(--ycw-color-border, #e5e7eb);\n border-radius: 12px;\n font-size: var(--ycw-font-size-md, 13px);\n font-weight: 500;\n color: var(--ycw-color-primary, #2563eb);\n background: var(--ycw-color-bg-primary, #ffffff);\n text-decoration: none;\n cursor: pointer;\n transition: border-color var(--ycw-duration-normal, 0.2s), background var(--ycw-duration-normal, 0.2s);\n vertical-align: baseline;\n user-select: none;\n}\n.ycw-xref-chip:hover {\n border-color: var(--ycw-color-primary, #2563eb);\n background: var(--ycw-color-primary-bg, #eff6ff);\n}\n.ycw-xref-chip:focus-visible {\n outline: 2px solid var(--ycw-color-primary, #2563eb);\n outline-offset: 1px;\n}\n\n/* === CodeViewer === */\n.ycw-file-viewer-code {\n font-size: var(--ycw-font-size-md, 13px);\n line-height: 1.6;\n}\n.ycw-file-viewer-code pre {\n margin: 0;\n padding: 16px;\n overflow-x: auto;\n}\n\n/* === TextViewer === */\n.ycw-file-viewer-text {\n overflow: auto;\n font-family: var(--ycw-font-family-mono, 'JetBrains Mono', 'SF Mono', 'Consolas', monospace);\n font-size: var(--ycw-font-size-md, 13px);\n line-height: 1.6;\n}\n.ycw-text-viewer-table {\n border-collapse: collapse;\n width: 100%;\n}\n.ycw-text-viewer-line-num {\n width: 50px;\n text-align: right;\n padding: 0 12px 0 8px;\n color: var(--ycw-color-text-tertiary, #9ca3af);\n user-select: none;\n white-space: nowrap;\n vertical-align: top;\n}\n.ycw-text-viewer-line-content pre {\n margin: 0;\n white-space: pre-wrap;\n word-break: break-all;\n}\n\n/* === ImageViewer === */\n.ycw-file-viewer-image {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n.ycw-image-toolbar {\n display: flex;\n gap: 8px;\n padding: 8px 12px;\n border-bottom: 1px solid var(--ycw-color-border, #e5e7eb);\n align-items: center;\n}\n.ycw-image-toolbar button {\n padding: 4px 10px;\n border: 1px solid var(--ycw-color-border, #e5e7eb);\n border-radius: 4px;\n background: var(--ycw-color-bg-primary, #ffffff);\n cursor: pointer;\n font-size: var(--ycw-font-size-base, 14px);\n}\n.ycw-image-toolbar button:hover {\n border-color: var(--ycw-color-primary, #2563eb);\n color: var(--ycw-color-primary, #2563eb);\n}\n.ycw-image-scale {\n font-size: var(--ycw-font-size-sm, 12px);\n color: var(--ycw-color-text-tertiary, #9ca3af);\n margin-left: 4px;\n}\n.ycw-image-canvas {\n flex: 1;\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--ycw-color-bg-tertiary, #f3f4f6);\n}\n.ycw-image-canvas img {\n max-width: 100%;\n max-height: 100%;\n object-fit: contain;\n transition: transform var(--ycw-duration-fast, 0.15s) var(--ycw-ease-out, ease-out);\n}\n\n/* === FallbackViewer === */\n.ycw-file-viewer-fallback {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n padding: 48px 24px;\n text-align: center;\n}\n.ycw-fallback-icon {\n font-size: 48px;\n}\n.ycw-fallback-info {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n.ycw-fallback-name {\n font-size: var(--ycw-font-size-lg);\n font-weight: 500;\n color: var(--ycw-color-text-primary);\n}\n.ycw-fallback-meta {\n display: flex;\n gap: 12px;\n justify-content: center;\n font-size: var(--ycw-font-size-sm);\n color: var(--ycw-color-text-tertiary);\n}\n.ycw-fallback-path {\n font-size: var(--ycw-font-size-xs);\n font-family: var(--ycw-font-family-mono);\n color: var(--ycw-color-text-quaternary);\n}\n.ycw-fallback-download {\n padding: 8px 24px;\n border: 1px solid var(--ycw-color-primary);\n border-radius: 6px;\n background: var(--ycw-color-primary);\n color: var(--ycw-color-bg-primary);\n cursor: pointer;\n font-size: var(--ycw-font-size-base);\n}\n.ycw-fallback-download:hover {\n opacity: 0.85;\n}\n\n/* === VideoPlayer === */\n.ycw-file-viewer-video {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n background: var(--ycw-color-bg-primary, #ffffff);\n}\n.ycw-video-element {\n max-width: 100%;\n max-height: 100%;\n}\n\n/* === AudioPlayer === */\n.ycw-file-viewer-audio {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 48px 24px;\n}\n.ycw-audio-element {\n width: 100%;\n max-width: 480px;\n}\n\n/* === HtmlViewer === */\n.ycw-file-viewer-html {\n height: 100%;\n}\n.ycw-html-iframe {\n width: 100%;\n height: 100%;\n border: none;\n}\n\n/* === JsonViewer === */\n.ycw-file-viewer-json {\n font-family: var(--ycw-font-family-mono, 'JetBrains Mono', 'SF Mono', 'Consolas', monospace);\n font-size: var(--ycw-font-size-md, 13px);\n line-height: 1.6;\n padding: 12px;\n overflow: auto;\n}\n.ycw-json-key {\n color: var(--ycw-color-primary, #2563eb);\n}\n.ycw-json-string {\n color: var(--ycw-json-string-color, #16a34a);\n}\n.ycw-json-number {\n color: var(--ycw-json-number-color, #d97706);\n}\n.ycw-json-bool {\n color: var(--ycw-json-bool-color, #7c3aed);\n}\n.ycw-json-null {\n color: var(--ycw-json-null-color, #9ca3af);\n font-style: italic;\n}\n.ycw-json-toggle {\n cursor: pointer;\n user-select: none;\n margin-right: 4px;\n font-size: var(--ycw-font-size-2xs, 10px);\n color: var(--ycw-color-text-tertiary, #9ca3af);\n}\n.ycw-json-bracket {\n color: var(--ycw-color-text-secondary, #4b5563);\n}\n.ycw-json-collapsed {\n color: var(--ycw-color-text-tertiary, #9ca3af);\n font-style: italic;\n}\n.ycw-json-leaf {\n white-space: nowrap;\n}\n\n/* === @xref Section === */\n.ycw-xref-section {\n margin-top: 24px;\n padding-top: 16px;\n border-top: 1px solid var(--ycw-color-border);\n}\n.ycw-xref-section-title {\n font-size: var(--ycw-font-size-sm);\n font-weight: 600;\n color: var(--ycw-color-text-tertiary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 10px;\n}\n.ycw-xref-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n/* === KiCad Viewer === */\n.ycw-file-viewer-kicad {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n.ycw-kicad-header {\n display: none;\n}\n.ycw-kicad-overlay-toolbar {\n position: absolute;\n top: 6px;\n right: 6px;\n z-index: 80;\n display: flex;\n align-items: center;\n gap: 8px;\n background: var(--ycw-kicad-toolbar-bg);\n backdrop-filter: blur(4px);\n border-radius: 6px;\n padding: 3px 8px;\n font-size: var(--ycw-font-size-xs);\n pointer-events: auto;\n box-shadow: var(--ycw-kicad-toolbar-shadow);\n}\n.ycw-kicad-controls-hint {\n font-size: var(--ycw-font-size-xs);\n color: var(--ycw-color-text-tertiary);\n max-width: 280px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.ycw-kicad-docs-link {\n font-size: var(--ycw-font-size-xs);\n color: var(--ycw-color-primary);\n text-decoration: none;\n}\n.ycw-kicad-docs-link:hover {\n text-decoration: underline;\n}\n.ycw-kicad-view-toggle {\n display: flex;\n gap: 2px;\n background: var(--ycw-color-bg-tertiary);\n border-radius: 6px;\n padding: 2px;\n}\n.ycw-kicad-toggle-btn {\n padding: 3px 10px;\n font-size: var(--ycw-font-size-xs);\n border: none;\n border-radius: 4px;\n background: transparent;\n color: var(--ycw-color-text-secondary);\n cursor: pointer;\n transition: all var(--ycw-duration-fast);\n}\n.ycw-kicad-toggle-btn[data-state=\"active\"] {\n background: var(--ycw-color-bg-primary);\n color: var(--ycw-color-text-primary);\n box-shadow: var(--ycw-kicad-toggle-active-shadow);\n}\n.ycw-kicad-canvas-container {\n flex: 1;\n min-height: 400px;\n position: relative;\n}\n.ycw-kicad-loading {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--ycw-color-text-tertiary);\n font-size: var(--ycw-font-size-md);\n}\n.ycw-kicad-source-view {\n flex: 1;\n overflow: auto;\n}\n.ycw-kicad-fallback-hint {\n padding: 8px 12px;\n font-size: var(--ycw-font-size-xs);\n color: var(--ycw-color-warning);\n background: var(--ycw-color-warning-bg);\n border-bottom: 1px solid var(--ycw-color-warning-border);\n}\n.ycw.ycw-dark .ycw-kicad-view-toggle {\n background: var(--ycw-color-bg-tertiary);\n}\n.ycw.ycw-dark .ycw-kicad-toggle-btn[data-state=\"active\"] {\n background: var(--ycw-color-bg-primary);\n color: var(--ycw-color-text-primary);\n}\n.ycw.ycw-dark .ycw-kicad-fallback-hint {\n background: var(--ycw-color-warning-bg);\n border-color: var(--ycw-color-warning-border);\n color: var(--ycw-color-warning);\n}\n.ycw.ycw-dark .ycw-kicad-loading,\n.ycw.ycw-midnight .ycw-kicad-loading {\n --ycw-kicad-loading-bg: var(--ycw-color-bg-secondary, #1a1b2e);\n}\n.ycw.ycw-neu .ycw-kicad-loading {\n --ycw-kicad-loading-bg: #e0e5ec;\n}\n.ycw-kicad-source {\n padding: 12px;\n overflow: auto;\n line-height: 1.6;\n white-space: pre-wrap;\n}\n\n/* === 3D / STEP Viewer === */\n.ycw-file-viewer-3d,\n.ycw-file-viewer-step {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 400px;\n position: relative;\n}\n\n.ycw-3d-toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 12px;\n background: var(--ycw-color-bg-secondary, #fafafa);\n border-bottom: 1px solid var(--ycw-color-border, #e0e0e0);\n flex-shrink: 0;\n gap: 8px;\n}\n.ycw-3d-filename {\n font-size: var(--ycw-font-size-sm);\n font-weight: 500;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 0;\n}\n.ycw-3d-toolbar-actions {\n display: flex;\n gap: 4px;\n flex-shrink: 0;\n}\n.ycw-3d-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 30px;\n height: 30px;\n border: 1px solid var(--ycw-color-border, #d0d0d0);\n border-radius: 6px;\n background: var(--ycw-color-bg, #fff);\n color: var(--ycw-color-text-secondary, #666);\n cursor: pointer;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n}\n.ycw-3d-btn:hover {\n background: var(--ycw-color-primary-bg, #eef4ff);\n color: var(--ycw-color-primary, #4080ff);\n border-color: var(--ycw-color-primary, #4080ff);\n}\n.ycw-3d-btn.active {\n background: var(--ycw-color-primary, #4080ff);\n color: #fff;\n border-color: var(--ycw-color-primary, #4080ff);\n}\n\n.ycw-3d-canvas {\n flex: 1;\n position: relative;\n overflow: hidden;\n min-height: 0;\n}\n.ycw-3d-canvas canvas {\n display: block;\n width: 100% !important;\n height: 100% !important;\n}\n\n.ycw-3d-overlay {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 12px;\n background: rgba(240, 240, 240, 0.85);\n z-index: 2;\n font-size: var(--ycw-font-size-sm);\n color: var(--ycw-color-text-secondary, #666);\n}\n.ycw-3d-overlay.ycw-3d-error {\n color: #c44;\n}\n\n@keyframes ycw-3d-spin {\n to { transform: rotate(360deg); }\n}\n.ycw-3d-spinner {\n width: 32px;\n height: 32px;\n border: 3px solid var(--ycw-color-border, #ddd);\n border-top-color: var(--ycw-color-primary, #4080ff);\n border-radius: 50%;\n animation: ycw-3d-spin 0.8s linear infinite;\n}\n\n/* === PDF Viewer === */\n.ycw-file-viewer-pdf {\n width: 100%;\n}\n.ycw-pdf-toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 4px 8px;\n font-size: var(--ycw-font-size-xs, 12px);\n color: var(--ycw-color-text-tertiary, #9ca3af);\n border-bottom: 1px solid var(--ycw-color-border, #e5e7eb);\n user-select: none;\n}\n.ycw-pdf-zoom-controls {\n display: flex;\n align-items: center;\n gap: 2px;\n}\n.ycw-pdf-zoom-btn,\n.ycw-pdf-zoom-label {\n background: none;\n border: 1px solid var(--ycw-color-border, #e5e7eb);\n border-radius: 4px;\n padding: 2px 8px;\n cursor: pointer;\n font-size: var(--ycw-font-size-xs, 12px);\n color: var(--ycw-color-text-secondary, #6b7280);\n line-height: 1.4;\n}\n.ycw-pdf-zoom-btn:hover:not(:disabled),\n.ycw-pdf-zoom-label:hover {\n background: var(--ycw-color-bg-secondary, #f3f4f6);\n}\n.ycw-pdf-zoom-btn:disabled {\n opacity: 0.35;\n cursor: default;\n}\n.ycw-pdf-pages {\n overflow: auto;\n max-height: 80vh;\n padding: 8px 0;\n}\n.ycw-pdf-page {\n position: relative;\n margin: 0 auto 8px;\n box-shadow: 0 1px 4px rgba(0,0,0,0.12);\n background: #fff;\n}\n.ycw-pdf-page canvas {\n display: block;\n}\n\n/* ── PDF text selection layer ── */\n.ycw-pdf-text-layer {\n -webkit-text-size-adjust: none;\n -moz-text-size-adjust: none;\n text-size-adjust: none;\n}\n.ycw-pdf-text-layer span::selection {\n background: rgba(0, 100, 200, 0.3);\n}\n.ycw-pdf-text-layer span::-moz-selection {\n background: rgba(0, 100, 200, 0.3);\n}\n\n/* Image overlay — above text layer; only <img> catches pointer events */\n.ycw-pdf-image-layer {\n position: absolute;\n inset: 0;\n z-index: 3;\n pointer-events: none;\n}\n.ycw-pdf-image-layer img {\n pointer-events: auto;\n opacity: 0;\n cursor: pointer;\n transition: opacity 0.15s, outline-color 0.15s;\n}\n.ycw-pdf-image-layer img:hover {\n opacity: 0.06;\n outline: 2px solid rgba(59, 130, 246, 0.6);\n outline-offset: -1px;\n border-radius: 2px;\n}\n.ycw-pdf-image-layer img[data-selected=\"true\"] {\n opacity: 0.10;\n outline: 2px solid rgba(59, 130, 246, 0.9);\n outline-offset: -1px;\n border-radius: 2px;\n}\n\n/* === Hover Preview (Layer 0) === */\n.ycw-fvm-hover-preview {\n position: fixed;\n z-index: 100;\n min-width: 180px;\n max-width: 320px;\n padding: 10px 14px;\n background: var(--ycw-color-bg-primary);\n border: 1px solid var(--ycw-color-border);\n border-radius: 10px;\n box-shadow: var(--ycw-fvm-hover-shadow);\n animation: ycw-fvm-hover-in 150ms ease-out;\n pointer-events: none;\n}\n\n@keyframes ycw-fvm-hover-in {\n from {\n opacity: 0;\n transform: translateX(-50%) translateY(-4px);\n }\n to {\n opacity: 1;\n transform: translateX(-50%) translateY(0);\n }\n}\n\n.ycw-fvm-hover-preview-header {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-bottom: 4px;\n}\n\n.ycw-fvm-hover-preview-icon {\n font-size: var(--ycw-font-size-lg);\n}\n\n.ycw-fvm-hover-preview-name {\n font-size: var(--ycw-font-size-md);\n font-weight: 500;\n color: var(--ycw-color-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.ycw-fvm-hover-preview-type {\n display: block;\n font-size: var(--ycw-font-size-xs);\n color: var(--ycw-color-text-tertiary);\n margin-bottom: 4px;\n}\n\n.ycw-fvm-hover-preview-text {\n font-size: var(--ycw-font-size-sm);\n color: var(--ycw-color-text-secondary);\n line-height: 1.4;\n max-height: 60px;\n overflow: hidden;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n}\n\n.ycw-fvm-hover-preview-hint {\n font-size: var(--ycw-font-size-2xs);\n color: var(--ycw-color-text-quaternary);\n margin-top: 6px;\n text-align: right;\n}\n\n.ycw.ycw-dark .ycw-fvm-hover-preview {\n background: var(--ycw-color-bg-primary);\n border-color: var(--ycw-color-border);\n}\n\n/* ── Midnight theme — FileViewer overrides ── */\n\n.ycw.ycw-midnight .ycw-fvm-panel-header {\n background: rgba(12, 20, 36, 0.8);\n backdrop-filter: blur(10px);\n -webkit-backdrop-filter: blur(10px);\n border-bottom-color: rgba(34, 211, 238, 0.08);\n}\n\n.ycw.ycw-midnight .ycw-fvm-breadcrumb {\n background: rgba(8, 14, 28, 0.5);\n border-bottom-color: rgba(34, 211, 238, 0.05);\n}\n\n.ycw.ycw-midnight .ycw-fvm-meta {\n border-bottom-color: rgba(34, 211, 238, 0.06);\n}\n\n.ycw.ycw-midnight .ycw-fvm-btn-ref {\n border-color: rgba(34, 211, 238, 0.12);\n}\n\n.ycw.ycw-midnight .ycw-fvm-btn-ref:hover {\n border-color: #22d3ee;\n box-shadow: 0 0 8px rgba(34, 211, 238, 0.15);\n}\n\n.ycw.ycw-midnight .ycw-file-viewer-markdown table {\n border-radius: 6px;\n overflow: hidden;\n}\n\n.ycw.ycw-midnight .ycw-file-viewer-markdown th {\n background: rgba(34, 211, 238, 0.06);\n border-color: rgba(34, 211, 238, 0.10);\n color: var(--ycw-color-text-primary);\n}\n\n.ycw.ycw-midnight .ycw-file-viewer-markdown td {\n border-color: rgba(34, 211, 238, 0.05);\n color: var(--ycw-color-text-secondary);\n}\n\n.ycw.ycw-midnight .ycw-file-viewer-markdown tr:nth-child(even) {\n background: rgba(34, 211, 238, 0.015);\n}\n\n.ycw.ycw-midnight .ycw-file-viewer-markdown tr:hover td {\n background: rgba(34, 211, 238, 0.035);\n}\n\n.ycw.ycw-midnight .ycw-file-viewer-markdown blockquote {\n border-left-color: rgba(34, 211, 238, 0.18);\n background: rgba(34, 211, 238, 0.02);\n}\n\n.ycw.ycw-midnight .ycw-file-viewer-markdown hr {\n border-top: none;\n background: linear-gradient(90deg, transparent, rgba(34, 211, 238, 0.12), transparent);\n height: 1px;\n border: none;\n}\n\n.ycw.ycw-midnight .ycw-xref-chip {\n border-color: rgba(34, 211, 238, 0.15);\n background: rgba(34, 211, 238, 0.04);\n}\n\n.ycw.ycw-midnight .ycw-xref-chip:hover {\n border-color: rgba(34, 211, 238, 0.35);\n background: rgba(34, 211, 238, 0.08);\n box-shadow: 0 0 8px rgba(34, 211, 238, 0.08);\n}\n\n.ycw.ycw-midnight .ycw-fvm-hover-preview {\n background: rgba(12, 20, 36, 0.95);\n backdrop-filter: blur(16px);\n -webkit-backdrop-filter: blur(16px);\n border-color: rgba(34, 211, 238, 0.10);\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.35), 0 0 14px rgba(34, 211, 238, 0.02);\n}\n\n.ycw.ycw-midnight .ycw-image-toolbar {\n border-bottom-color: rgba(34, 211, 238, 0.06);\n}\n\n.ycw.ycw-midnight .ycw-image-toolbar button {\n border-color: rgba(34, 211, 238, 0.10);\n background: rgba(14, 24, 42, 0.5);\n color: var(--ycw-color-text-secondary);\n}\n\n.ycw.ycw-midnight .ycw-image-toolbar button:hover {\n border-color: rgba(34, 211, 238, 0.3);\n color: #22d3ee;\n}\n\n.ycw.ycw-midnight .ycw-kicad-view-toggle {\n background: rgba(8, 14, 28, 0.6);\n}\n\n.ycw.ycw-midnight .ycw-kicad-toggle-btn[data-state=\"active\"] {\n background: rgba(34, 211, 238, 0.08);\n color: #22d3ee;\n}\n\n.ycw.ycw-midnight .ycw-fallback-download {\n background: #22d3ee;\n color: #0b1221;\n border-color: #22d3ee;\n box-shadow: 0 0 12px rgba(34, 211, 238, 0.2);\n}\n\n.ycw.ycw-midnight .ycw-fallback-download:hover {\n box-shadow: 0 0 20px rgba(34, 211, 238, 0.35);\n opacity: 1;\n}\n\n/* === iframe degradation hint === */\n.ycw-fvm-iframe-hint {\n position: absolute;\n bottom: 8px;\n left: 50%;\n transform: translateX(-50%);\n padding: 4px 12px;\n font-size: var(--ycw-font-size-xs);\n color: var(--ycw-color-text-tertiary);\n background: var(--ycw-color-bg-primary);\n border: 1px solid var(--ycw-color-border);\n border-radius: 12px;\n white-space: nowrap;\n pointer-events: none;\n backdrop-filter: blur(4px);\n}\n\n/* === Reference button (inline text style) === */\n.ycw-fvm-btn-ref {\n font-size: var(--ycw-font-size-sm);\n gap: 4px;\n color: var(--ycw-color-primary);\n padding: 2px 10px;\n border: 1px solid var(--ycw-color-border);\n border-radius: 12px;\n}\n.ycw-fvm-btn-ref:hover {\n background: var(--ycw-color-primary-bg);\n border-color: var(--ycw-color-primary);\n color: var(--ycw-color-primary);\n}\n\n/* === Shared Viewer Utility Classes === */\n.ycw-viewer-loading {\n padding: 1rem;\n color: var(--ycw-color-text-tertiary);\n}\n.ycw-viewer-error {\n padding: 1rem;\n color: var(--ycw-color-error, #ef4444);\n}\n\n/* === Word Viewer === */\n.ycw-word-viewer {\n width: 100%;\n min-height: 400px;\n overflow: auto;\n background: var(--ycw-color-bg-primary);\n}\n\n/* === Excel Viewer === */\n.ycw-excel-viewer {\n width: 100%;\n display: flex;\n flex-direction: column;\n}\n.ycw-excel-sheet-tabs {\n display: flex;\n gap: 4px;\n padding: 8px 0;\n border-bottom: 1px solid var(--ycw-color-border);\n margin-bottom: 8px;\n flex-wrap: wrap;\n}\n.ycw-excel-sheet-tab {\n padding: 4px 12px;\n border: 1px solid var(--ycw-color-border);\n border-radius: 4px;\n background: var(--ycw-color-bg-primary);\n color: var(--ycw-color-text-primary);\n cursor: pointer;\n font-size: 13px;\n}\n.ycw-excel-sheet-tab--active {\n background: var(--ycw-color-primary);\n color: var(--ycw-color-bg-primary);\n border-color: var(--ycw-color-primary);\n}\n.ycw-excel-scroll {\n overflow: auto;\n max-height: 600px;\n position: relative;\n}\n.ycw-excel-table {\n border-collapse: collapse;\n width: 100%;\n font-size: 13px;\n font-family: var(--ycw-font-family-mono, system-ui, sans-serif);\n}\n.ycw-excel-thead {\n position: sticky;\n top: 0;\n z-index: 2;\n}\n.ycw-excel-col-header {\n border: 1px solid var(--ycw-color-border);\n padding: 2px 6px;\n background: var(--ycw-color-bg-tertiary);\n font-weight: 500;\n font-size: 11px;\n color: var(--ycw-color-text-tertiary);\n text-align: center;\n}\n.ycw-excel-data-header {\n border: 1px solid var(--ycw-color-border);\n padding: 6px 10px;\n background: var(--ycw-color-bg-secondary);\n font-weight: 600;\n text-align: left;\n white-space: nowrap;\n}\n.ycw-excel-data-header--sortable {\n cursor: pointer;\n user-select: none;\n}\n.ycw-excel-sort-indicator {\n margin-left: 4px;\n font-size: 10px;\n}\n.ycw-excel-row-idx {\n border: 1px solid var(--ycw-color-border);\n padding: 4px 6px;\n background: var(--ycw-color-bg-secondary);\n font-weight: 500;\n font-size: 11px;\n color: var(--ycw-color-text-tertiary);\n text-align: center;\n min-width: 40px;\n}\n.ycw-excel-cell {\n border: 1px solid var(--ycw-color-border);\n padding: 4px 10px;\n white-space: nowrap;\n height: 28px;\n}\n.ycw-excel-footer {\n padding: 4px 0;\n font-size: 11px;\n color: var(--ycw-color-text-tertiary);\n}\n\n/* === PowerPoint Viewer === */\n.ycw-ppt-viewer {\n width: 100%;\n outline: none;\n}\n.ycw-ppt-stage {\n min-height: 200px;\n overflow: hidden;\n border-radius: 6px;\n border: 1px solid var(--ycw-color-border);\n background: #f0f0f0;\n}\n.ycw-ppt-stage > div {\n transform-origin: top left;\n}\n/* pptx-preview injects inline wrappers; constrain them */\n.ycw-ppt-stage svg,\n.ycw-ppt-stage canvas,\n.ycw-ppt-stage img {\n max-width: 100%;\n height: auto;\n}\n","/* 与 src/2dPage/index.html 内联样式一致,body 选择器改为 .layout-2d */\n\n.layout-2d-mount {\n width: 100%;\n height: 100%;\n position: relative;\n}\n\n.layout-2d-error {\n color: var(--ycw-color-error, #dc3545);\n padding: 16px;\n text-align: center;\n font-size: 14px;\n}\n\n.layout-2d * {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n\n.layout-2d {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n width: 100%;\n height: 100%;\n}\n\n.layout-2d .container {\n margin: 0 auto;\n max-width: calc(100% - 4px);\n background: var(--ycw-color-bg-primary, #fff);\n border-radius: 8px;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 400px;\n}\n\n.layout-2d .controls {\n padding: 8px 30px;\n background: var(--ycw-color-bg-tertiary, #f8f9fa);\n border-bottom: 1px solid var(--ycw-color-border, #e9ecef);\n display: flex;\n gap: 20px;\n align-items: center;\n flex-wrap: wrap;\n flex-shrink: 0;\n}\n\n.layout-2d .controls[style*='display: none'] {\n display: none !important;\n}\n\n.layout-2d .file-input-wrapper {\n position: relative;\n display: inline-block;\n}\n\n.layout-2d .file-input-wrapper input[type='file'] {\n position: absolute;\n opacity: 0;\n width: 100%;\n height: 100%;\n cursor: pointer;\n}\n\n.layout-2d .file-input-button {\n display: inline-block;\n padding: 6px 14px;\n background: var(--ycw-color-primary, #009688);\n color: var(--ycw-color-bg-primary, #fff);\n border-radius: 4px;\n cursor: pointer;\n font-size: 12px;\n transition: background 0.3s, opacity 0.2s;\n}\n\n.layout-2d .file-input-button:hover {\n opacity: 0.85;\n}\n\n.layout-2d .file-info {\n display: none;\n flex-direction: column;\n gap: 5px;\n}\n\n.layout-2d .file-info.active {\n display: flex;\n}\n\n.layout-2d .file-name {\n font-weight: bold;\n color: var(--ycw-color-primary, #009688);\n}\n\n.layout-2d .status {\n display: none;\n padding: 4px 10px;\n border-radius: 4px;\n font-size: 12px;\n}\n\n.layout-2d .status.success {\n color: #155724;\n background: #d4edda;\n display: block;\n}\n\n.layout-2d .status.error {\n color: #721c24;\n background: #f8d7da;\n display: block;\n}\n\n.layout-2d .status.loading {\n color: #0c5460;\n background: #d1ecf1;\n display: block;\n}\n\n.layout-2d .viewer {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.layout-2d .viewer-title {\n font-size: 1.5em;\n margin-bottom: 20px;\n color: var(--ycw-color-text-primary, #333);\n flex-shrink: 0;\n display: flex;\n align-items: center;\n}\n\n.layout-2d .viewer-title-left {\n display: flex;\n align-items: center;\n}\n\n.layout-2d .viewer-title-actions {\n display: flex;\n gap: 10px;\n margin-left: 10px;\n}\n\n.layout-2d .viewer-content {\n display: flex;\n gap: 10px;\n align-items: stretch;\n flex: 1;\n min-height: 0;\n}\n\n.layout-2d .table-detail {\n flex-shrink: 0;\n width: 320px;\n height: 100%;\n background: var(--ycw-color-bg-tertiary, #f8f9fa);\n border-radius: 8px;\n border: 1px solid var(--ycw-color-border, #e9ecef);\n overflow: hidden;\n padding: 15px;\n box-sizing: border-box;\n}\n\n.layout-2d .layer-list-container {\n width: 220px;\n height: 100%;\n background: var(--ycw-color-bg-tertiary, #f8f9fa);\n border: 1px solid var(--ycw-color-border, #e9ecef);\n overflow: hidden;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n}\n\n.layout-2d .layer-list-title {\n padding: 8px 10px;\n background: var(--ycw-color-primary, #009688);\n color: var(--ycw-color-bg-primary, #fff);\n font-weight: 600;\n font-size: 12px;\n flex-shrink: 0;\n}\n\n.layout-2d .layer-list-header {\n padding: 12px 0;\n background: var(--ycw-color-bg-tertiary, #f8f9fa);\n border-bottom: 1px solid var(--ycw-color-border, #e9ecef);\n flex-shrink: 0;\n}\n\n.layout-2d .layer-toggle-all {\n display: flex;\n align-items: center;\n cursor: pointer;\n user-select: none;\n padding-left: 26px;\n}\n\n.layout-2d .layer-toggle-all:hover {\n opacity: 0.8;\n}\n\n.layout-2d .layer-toggle-all-label {\n margin-left: 8px;\n font-size: 12px;\n color: var(--ycw-color-text-primary, #333);\n font-weight: 500;\n}\n\n.layout-2d .layer-list {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n min-height: 0;\n}\n\n.layout-2d .layer-item {\n display: flex;\n align-items: center;\n padding: 0 15px;\n line-height: 30px;\n border-bottom: 1px solid var(--ycw-color-border, #e9ecef);\n cursor: pointer;\n transition: background 0.2s;\n background: var(--ycw-color-bg-primary, #fff);\n}\n\n.layout-2d .layer-item .layer-index {\n width: 26px;\n}\n\n.layout-2d .layer-item:hover {\n background: var(--ycw-color-bg-hover, #f0f0f0);\n}\n\n.layout-2d .layer-item.disabled {\n background: var(--ycw-color-bg-tertiary, #f5f5f5);\n opacity: 0.6;\n}\n\n.layout-2d .layer-toggle {\n width: 18px;\n height: 18px;\n border: 2px solid var(--ycw-color-primary, #009688);\n border-radius: 4px;\n cursor: pointer;\n flex-shrink: 0;\n position: relative;\n background: var(--ycw-color-bg-primary, #fff);\n transition: all 0.2s;\n margin-right: 6px;\n}\n\n.layout-2d .layer-toggle.checked {\n background: var(--ycw-color-primary, #009688);\n}\n\n.layout-2d .layer-toggle.checked::after {\n content: '✓';\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n color: white;\n font-size: 12px;\n font-weight: bold;\n}\n\n.layout-2d .layer-color {\n width: 20px;\n height: 20px;\n border-radius: 4px;\n margin-right: 8px;\n border: 1px solid var(--ycw-color-border, #ddd);\n flex-shrink: 0;\n}\n\n.layout-2d .layer-name {\n flex: 1;\n font-size: 12px;\n color: var(--ycw-color-text-primary, #333);\n font-weight: 500;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 0;\n}\n\n.layout-2d .webgl-canvas-container {\n flex: 1;\n height: 100%;\n min-height: 0;\n border-radius: 8px;\n}\n\n.layout-2d #canvas {\n width: 100%;\n height: 100%;\n min-height: 0;\n background: #000;\n cursor: grab;\n}\n\n.layout-2d #canvas:active {\n cursor: grabbing;\n}\n\n.layout-2d .loading-spinner {\n display: inline-block;\n width: 16px;\n height: 16px;\n border: 2px solid rgba(12, 84, 96, 0.3);\n border-radius: 50%;\n border-top-color: #0c5460;\n animation: layout2d-spin 0.8s linear infinite;\n margin-right: 8px;\n vertical-align: middle;\n}\n\n@keyframes layout2d-spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n.layout-2d #loadingOverlay {\n display: none;\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n color: white;\n z-index: 9999;\n justify-content: center;\n align-items: center;\n font-size: 24px;\n}\n\n.layout-2d #loadingOverlay.active {\n display: flex;\n}\n\n.layout-2d .viewer-action-btn {\n font-size: 12px;\n padding: 4px 10px;\n background: var(--ycw-color-bg-primary, #fff);\n border: 1px solid var(--ycw-color-border, #ddd);\n border-radius: 4px;\n cursor: pointer;\n color: var(--ycw-color-text-secondary, #666);\n transition: all 0.2s;\n}\n\n.layout-2d .viewer-action-btn:hover {\n background: var(--ycw-color-bg-hover, #f0f0f0);\n color: var(--ycw-color-text-primary, #333);\n border-color: var(--ycw-color-border, #ccc);\n}\n","/* ── Mount wrapper (embedded) ── */\n.layout-3d-mount {\n width: 100%;\n height: 100%;\n position: relative;\n}\n\n/* ── Layout ── */\n.layout-3d {\n position: relative;\n width: 100%;\n height: 100%;\n margin: 0;\n overflow: hidden;\n font-family: sans-serif;\n background: #000000;\n}\n\n.layout-3d .viewer3d-canvas-host {\n position: absolute;\n inset: 0;\n z-index: 0;\n pointer-events: auto;\n}\n\n.layout-3d #info {\n position: absolute;\n top: 10px;\n left: 10px;\n color: white;\n background: rgba(0, 0, 0, 0.7);\n padding: 10px;\n border-radius: 5px;\n pointer-events: none;\n z-index: 100;\n}\n\n.layout-3d #gerber-3d-toolbar {\n z-index: 200;\n}\n\n.layout-3d .btn {\n background: var(--ycw-color-primary, #009688);\n color: var(--ycw-color-bg-primary, #fff);\n padding: 5px 12px;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 12px;\n transition: opacity 0.2s;\n}\n\n.layout-3d .btn:hover {\n opacity: 0.85;\n}\n\n.layout-3d #loading {\n display: none;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n color: white;\n z-index: 300;\n justify-content: center;\n align-items: center;\n font-size: 24px;\n}\n\n.layout-3d #loading.active {\n display: flex;\n}\n\n.layout-3d #layer-list {\n position: absolute;\n top: 10px;\n right: 10px;\n background: rgba(0, 0, 0, 0.7);\n color: white;\n padding: 10px;\n border-radius: 5px;\n max-height: 80%;\n overflow-y: auto;\n}\n\n.layout-3d .layer-item {\n margin: 5px 0;\n font-size: 12px;\n}\n\n.layout-3d-error {\n color: var(--ycw-color-error, #dc3545);\n padding: 16px;\n text-align: center;\n font-size: 14px;\n position: relative;\n z-index: 500;\n}\n","/* 与 src/simulation/index.html 内联样式一致,body 改为 .layout-simulation */\n\n.layout-simulation-mount {\n width: 100%;\n height: 100%;\n position: relative;\n}\n\n.layout-simulation * {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n\n.layout-simulation {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Microsoft YaHei', sans-serif;\n background: var(--ycw-color-bg-secondary, #f5f5f5);\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n\n.layout-simulation .container {\n display: flex;\n height: 100%;\n background: var(--ycw-color-bg-primary, #fff);\n}\n\n.layout-simulation .control-panel {\n width: 240px;\n background: var(--ycw-color-bg-tertiary, #f8f9fa);\n border-right: 1px solid var(--ycw-color-border, #e9ecef);\n padding: 10px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n flex-shrink: 0;\n overflow: hidden;\n}\n\n.layout-simulation .panel-title {\n font-size: 13px;\n font-weight: 600;\n color: var(--ycw-color-text-primary, #333);\n padding-bottom: 8px;\n border-bottom: 2px solid var(--ycw-color-primary, #009688);\n}\n\n.layout-simulation .control-group {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.layout-simulation .control-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 6px;\n}\n\n.layout-simulation .control-label {\n font-size: 12px;\n color: var(--ycw-color-text-secondary, #555);\n min-width: 50px;\n}\n\n.layout-simulation select {\n flex: 1;\n padding: 4px 8px;\n border: 1px solid var(--ycw-color-border, #ddd);\n border-radius: 4px;\n background: var(--ycw-color-bg-primary, #fff);\n color: var(--ycw-color-text-primary, #333);\n font-size: 12px;\n cursor: pointer;\n}\n\n.layout-simulation select:hover,\n.layout-simulation select:focus {\n border-color: var(--ycw-color-primary, #009688);\n outline: none;\n}\n\n.layout-simulation .file-input-wrapper {\n position: relative;\n display: inline-block;\n width: 100%;\n}\n\n.layout-simulation .file-input-wrapper input[type='file'] {\n position: absolute;\n top: 0;\n left: 0;\n opacity: 0;\n width: 100%;\n height: 100%;\n cursor: pointer;\n z-index: 10;\n}\n\n.layout-simulation .file-input-button {\n display: block;\n padding: 6px 14px;\n background: var(--ycw-color-primary, #009688);\n color: var(--ycw-color-bg-primary, #fff);\n border-radius: 4px;\n cursor: pointer;\n font-size: 12px;\n text-align: center;\n transition: opacity 0.2s;\n}\n\n.layout-simulation .file-input-button:hover {\n opacity: 0.85;\n}\n\n.layout-simulation .btn {\n padding: 5px 12px;\n border: none;\n border-radius: 4px;\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n width: 100%;\n}\n\n.layout-simulation .btn-success {\n background: var(--ycw-color-primary, #009688);\n color: var(--ycw-color-bg-primary, #fff);\n}\n\n.layout-simulation .btn-success:hover {\n opacity: 0.85;\n}\n\n.layout-simulation .btn-secondary {\n background: var(--ycw-color-text-tertiary, #6c757d);\n color: var(--ycw-color-bg-primary, #fff);\n}\n\n.layout-simulation .btn-secondary:hover {\n opacity: 0.85;\n}\n\n.layout-simulation .view-toggle {\n display: flex;\n gap: 0;\n border-radius: 6px;\n overflow: hidden;\n border: 1px solid var(--ycw-color-border, #ddd);\n}\n\n.layout-simulation .view-toggle button {\n flex: 1;\n padding: 5px 8px;\n border: none;\n background: var(--ycw-color-bg-primary, #fff);\n color: var(--ycw-color-text-secondary, #555);\n font-size: 12px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.layout-simulation .view-toggle button.active {\n background: var(--ycw-color-primary, #009688);\n color: var(--ycw-color-bg-primary, #fff);\n}\n\n.layout-simulation .view-toggle button:hover:not(.active) {\n background: var(--ycw-color-bg-hover, #f0f0f0);\n}\n\n.layout-simulation .color-preview {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n}\n\n.layout-simulation .color-swatch {\n width: 18px;\n height: 18px;\n border-radius: 4px;\n border: 1px solid var(--ycw-color-border, #ccc);\n flex-shrink: 0;\n}\n\n.layout-simulation .switch-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n.layout-simulation .switch {\n position: relative;\n width: 36px;\n height: 20px;\n}\n\n.layout-simulation .switch input {\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.layout-simulation .slider {\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: var(--ycw-color-text-quaternary, #ccc);\n transition: 0.3s;\n border-radius: 20px;\n}\n\n.layout-simulation .slider:before {\n position: absolute;\n content: '';\n height: 14px;\n width: 14px;\n left: 3px;\n bottom: 3px;\n background-color: var(--ycw-color-bg-primary, #fff);\n transition: 0.3s;\n border-radius: 50%;\n}\n\n.layout-simulation input:checked + .slider {\n background-color: var(--ycw-color-primary, #009688);\n}\n\n.layout-simulation input:checked + .slider:before {\n transform: translateX(16px);\n}\n\n.layout-simulation .main-view {\n flex: 1;\n display: flex;\n flex-direction: column;\n background: var(--ycw-color-bg-primary, #fff);\n}\n\n.layout-simulation .canvas-container {\n flex: 1;\n position: relative;\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #1a1a1a;\n}\n\n.layout-simulation #simulationCanvas {\n cursor: grab;\n}\n\n.layout-simulation #simulationCanvas:active {\n cursor: grabbing;\n}\n\n.layout-simulation .loading-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.8);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n gap: 15px;\n z-index: 100;\n}\n\n.layout-simulation .loading-overlay.hidden {\n display: none;\n}\n\n.layout-simulation .spinner {\n width: 40px;\n height: 40px;\n border: 3px solid var(--ycw-color-text-quaternary, #444);\n border-top-color: var(--ycw-color-primary, #009688);\n border-radius: 50%;\n animation: layoutSim-spin 1s linear infinite;\n}\n\n@keyframes layoutSim-spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n.layout-simulation .loading-text {\n font-size: 12px;\n color: var(--ycw-color-text-tertiary, #888);\n}\n\n.layout-simulation .hidden-status {\n display: none;\n}\n\n.layout-simulation-error {\n color: var(--ycw-color-error, #dc3545);\n padding: 16px;\n text-align: center;\n font-size: 14px;\n position: relative;\n z-index: 500;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
import {
|
|
2
|
+
useRevokeBlobUrl
|
|
3
|
+
} from "./chunk-VXJWGLZ7.js";
|
|
4
|
+
import {
|
|
5
|
+
useChatWidgetI18n
|
|
6
|
+
} from "./chunk-QLVPIM6R.js";
|
|
7
|
+
import "./chunk-7D4SUZUM.js";
|
|
8
|
+
|
|
9
|
+
// src/components/FileViewer/viewers/PdfViewerCore.tsx
|
|
10
|
+
import { useEffect, useRef, useState, useCallback } from "react";
|
|
11
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
12
|
+
if (typeof ReadableStream !== "undefined" && !(Symbol.asyncIterator in ReadableStream.prototype)) {
|
|
13
|
+
ReadableStream.prototype[Symbol.asyncIterator] = async function* () {
|
|
14
|
+
const reader = this.getReader();
|
|
15
|
+
try {
|
|
16
|
+
for (; ; ) {
|
|
17
|
+
const { done, value } = await reader.read();
|
|
18
|
+
if (done) return;
|
|
19
|
+
yield value;
|
|
20
|
+
}
|
|
21
|
+
} finally {
|
|
22
|
+
reader.releaseLock();
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
var BASE_SCALE = 1.333;
|
|
27
|
+
var ZOOM_STEP = 0.25;
|
|
28
|
+
var ZOOM_MIN = 0.5;
|
|
29
|
+
var ZOOM_MAX = 4;
|
|
30
|
+
var MAX_IMAGES_PER_PAGE = 50;
|
|
31
|
+
var MIN_IMAGE_DIM = 8;
|
|
32
|
+
function mulM(a, b) {
|
|
33
|
+
return [
|
|
34
|
+
a[0] * b[0] + a[2] * b[1],
|
|
35
|
+
a[1] * b[0] + a[3] * b[1],
|
|
36
|
+
a[0] * b[2] + a[2] * b[3],
|
|
37
|
+
a[1] * b[2] + a[3] * b[3],
|
|
38
|
+
a[0] * b[4] + a[2] * b[5] + a[4],
|
|
39
|
+
a[1] * b[4] + a[3] * b[5] + a[5]
|
|
40
|
+
];
|
|
41
|
+
}
|
|
42
|
+
async function extractPageImages(page, viewport, OPS) {
|
|
43
|
+
const opList = await page.getOperatorList();
|
|
44
|
+
const results = [];
|
|
45
|
+
const ID = [1, 0, 0, 1, 0, 0];
|
|
46
|
+
let ctm = ID.slice();
|
|
47
|
+
const stack = [];
|
|
48
|
+
const vt = viewport.transform;
|
|
49
|
+
for (let i = 0; i < opList.fnArray.length; i++) {
|
|
50
|
+
if (results.length >= MAX_IMAGES_PER_PAGE) break;
|
|
51
|
+
const fn = opList.fnArray[i];
|
|
52
|
+
const args = opList.argsArray[i];
|
|
53
|
+
switch (fn) {
|
|
54
|
+
case OPS.save:
|
|
55
|
+
stack.push(ctm.slice());
|
|
56
|
+
break;
|
|
57
|
+
case OPS.restore:
|
|
58
|
+
ctm = stack.pop() || ID.slice();
|
|
59
|
+
break;
|
|
60
|
+
case OPS.transform:
|
|
61
|
+
ctm = mulM(ctm, args);
|
|
62
|
+
break;
|
|
63
|
+
case OPS.paintImageXObject:
|
|
64
|
+
case OPS.paintJpegXObject: {
|
|
65
|
+
const imgName = args[0];
|
|
66
|
+
try {
|
|
67
|
+
const imgData = await new Promise((res, rej) => {
|
|
68
|
+
const timeout = setTimeout(() => rej("timeout"), 2e3);
|
|
69
|
+
page.objs.get(imgName, (d) => {
|
|
70
|
+
clearTimeout(timeout);
|
|
71
|
+
res(d);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
if (!imgData || !imgData.data && !imgData.bitmap) break;
|
|
75
|
+
if (imgData.width < MIN_IMAGE_DIM || imgData.height < MIN_IMAGE_DIM) break;
|
|
76
|
+
const tc = document.createElement("canvas");
|
|
77
|
+
tc.width = imgData.width;
|
|
78
|
+
tc.height = imgData.height;
|
|
79
|
+
const tctx = tc.getContext("2d");
|
|
80
|
+
if (imgData.bitmap) {
|
|
81
|
+
tctx.drawImage(imgData.bitmap, 0, 0);
|
|
82
|
+
} else {
|
|
83
|
+
const id = tctx.createImageData(imgData.width, imgData.height);
|
|
84
|
+
id.data.set(imgData.data);
|
|
85
|
+
tctx.putImageData(id, 0, 0);
|
|
86
|
+
}
|
|
87
|
+
const src = tc.toDataURL("image/png");
|
|
88
|
+
const sm = mulM(vt, ctm);
|
|
89
|
+
const corners = [
|
|
90
|
+
[sm[4], sm[5]],
|
|
91
|
+
[sm[0] + sm[4], sm[1] + sm[5]],
|
|
92
|
+
[sm[2] + sm[4], sm[3] + sm[5]],
|
|
93
|
+
[sm[0] + sm[2] + sm[4], sm[1] + sm[3] + sm[5]]
|
|
94
|
+
];
|
|
95
|
+
const xs = corners.map((c) => c[0]);
|
|
96
|
+
const ys = corners.map((c) => c[1]);
|
|
97
|
+
results.push({
|
|
98
|
+
src,
|
|
99
|
+
x: Math.min(...xs),
|
|
100
|
+
y: Math.min(...ys),
|
|
101
|
+
w: Math.max(...xs) - Math.min(...xs),
|
|
102
|
+
h: Math.max(...ys) - Math.min(...ys)
|
|
103
|
+
});
|
|
104
|
+
} catch {
|
|
105
|
+
}
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return results;
|
|
111
|
+
}
|
|
112
|
+
var PdfViewerCore = ({ src, className, loadingLabel, onImageSelect }) => {
|
|
113
|
+
const { t } = useChatWidgetI18n();
|
|
114
|
+
const containerRef = useRef(null);
|
|
115
|
+
const pdfDocRef = useRef(null);
|
|
116
|
+
const renderIdRef = useRef(0);
|
|
117
|
+
const [loading, setLoading] = useState(true);
|
|
118
|
+
const [error, setError] = useState();
|
|
119
|
+
const [totalPages, setTotalPages] = useState(0);
|
|
120
|
+
const [zoom, setZoom] = useState(1);
|
|
121
|
+
useRevokeBlobUrl(src);
|
|
122
|
+
const cleanup = useCallback(() => {
|
|
123
|
+
if (pdfDocRef.current) {
|
|
124
|
+
try {
|
|
125
|
+
pdfDocRef.current.destroy();
|
|
126
|
+
} catch {
|
|
127
|
+
}
|
|
128
|
+
pdfDocRef.current = null;
|
|
129
|
+
}
|
|
130
|
+
}, []);
|
|
131
|
+
const renderPages = useCallback(async (pdfjsLib, pdfDoc, container, userZoom, renderId) => {
|
|
132
|
+
container.innerHTML = "";
|
|
133
|
+
const dpr = window.devicePixelRatio || 1;
|
|
134
|
+
const numPages = pdfDoc.numPages;
|
|
135
|
+
const containerWidth = container.clientWidth || 600;
|
|
136
|
+
for (let i = 1; i <= numPages; i++) {
|
|
137
|
+
if (renderIdRef.current !== renderId) return;
|
|
138
|
+
const page = await pdfDoc.getPage(i);
|
|
139
|
+
if (renderIdRef.current !== renderId) return;
|
|
140
|
+
const baseViewport = page.getViewport({ scale: BASE_SCALE });
|
|
141
|
+
const fitScale = containerWidth / baseViewport.width;
|
|
142
|
+
const finalScale = BASE_SCALE * fitScale * userZoom;
|
|
143
|
+
const viewport = page.getViewport({ scale: finalScale });
|
|
144
|
+
const pageDiv = document.createElement("div");
|
|
145
|
+
pageDiv.className = "ycw-pdf-page";
|
|
146
|
+
pageDiv.style.width = `${viewport.width}px`;
|
|
147
|
+
pageDiv.style.height = `${viewport.height}px`;
|
|
148
|
+
const canvas = document.createElement("canvas");
|
|
149
|
+
canvas.width = Math.floor(viewport.width * dpr);
|
|
150
|
+
canvas.height = Math.floor(viewport.height * dpr);
|
|
151
|
+
canvas.style.width = `${viewport.width}px`;
|
|
152
|
+
canvas.style.height = `${viewport.height}px`;
|
|
153
|
+
pageDiv.appendChild(canvas);
|
|
154
|
+
const ctx = canvas.getContext("2d");
|
|
155
|
+
ctx.scale(dpr, dpr);
|
|
156
|
+
await page.render({ canvasContext: ctx, canvas, viewport }).promise;
|
|
157
|
+
if (renderIdRef.current !== renderId) return;
|
|
158
|
+
const textContent = await page.getTextContent();
|
|
159
|
+
if (renderIdRef.current !== renderId) return;
|
|
160
|
+
const textDiv = document.createElement("div");
|
|
161
|
+
textDiv.className = "ycw-pdf-text-layer";
|
|
162
|
+
textDiv.dataset.page = String(i);
|
|
163
|
+
textDiv.style.cssText = "position:absolute;inset:0;z-index:2;line-height:1;pointer-events:auto;";
|
|
164
|
+
const measureCanvas = document.createElement("canvas");
|
|
165
|
+
const mCtx = measureCanvas.getContext("2d");
|
|
166
|
+
for (const item of textContent.items) {
|
|
167
|
+
if (!item.str) continue;
|
|
168
|
+
const tx = pdfjsLib.Util.transform(viewport.transform, item.transform);
|
|
169
|
+
const angle = Math.atan2(tx[1], tx[0]);
|
|
170
|
+
const fontSize = Math.hypot(tx[2], tx[3]);
|
|
171
|
+
if (fontSize < 1) continue;
|
|
172
|
+
const fontFamily = textContent.styles?.[item.fontName]?.fontFamily || "sans-serif";
|
|
173
|
+
const ascent = fontSize * 0.8;
|
|
174
|
+
let left, top;
|
|
175
|
+
if (Math.abs(angle) < 1e-3) {
|
|
176
|
+
left = tx[4];
|
|
177
|
+
top = tx[5] - ascent;
|
|
178
|
+
} else {
|
|
179
|
+
left = tx[4] + ascent * Math.sin(angle);
|
|
180
|
+
top = tx[5] - ascent * Math.cos(angle);
|
|
181
|
+
}
|
|
182
|
+
const span = document.createElement("span");
|
|
183
|
+
span.textContent = item.str;
|
|
184
|
+
span.dataset.page = String(i);
|
|
185
|
+
span.style.position = "absolute";
|
|
186
|
+
span.style.left = `${left.toFixed(1)}px`;
|
|
187
|
+
span.style.top = `${top.toFixed(1)}px`;
|
|
188
|
+
span.style.fontSize = `${fontSize.toFixed(1)}px`;
|
|
189
|
+
span.style.fontFamily = fontFamily;
|
|
190
|
+
span.style.color = "transparent";
|
|
191
|
+
span.style.whiteSpace = "pre";
|
|
192
|
+
span.style.cursor = "text";
|
|
193
|
+
span.style.transformOrigin = "0% 0%";
|
|
194
|
+
if (item.width) {
|
|
195
|
+
const targetWidth = item.width * finalScale;
|
|
196
|
+
mCtx.font = `${fontSize}px ${fontFamily}`;
|
|
197
|
+
const measured = mCtx.measureText(item.str).width;
|
|
198
|
+
if (measured > 0) {
|
|
199
|
+
const scaleX = targetWidth / measured;
|
|
200
|
+
if (Math.abs(angle) < 1e-3) {
|
|
201
|
+
span.style.transform = `scaleX(${scaleX.toFixed(4)})`;
|
|
202
|
+
} else {
|
|
203
|
+
const deg = angle * (180 / Math.PI);
|
|
204
|
+
span.style.transform = `rotate(${deg.toFixed(2)}deg) scaleX(${scaleX.toFixed(4)})`;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
} else if (Math.abs(angle) >= 1e-3) {
|
|
208
|
+
const deg = angle * (180 / Math.PI);
|
|
209
|
+
span.style.transform = `rotate(${deg.toFixed(2)}deg)`;
|
|
210
|
+
}
|
|
211
|
+
textDiv.appendChild(span);
|
|
212
|
+
}
|
|
213
|
+
pageDiv.appendChild(textDiv);
|
|
214
|
+
try {
|
|
215
|
+
const images = await extractPageImages(page, viewport, pdfjsLib.OPS);
|
|
216
|
+
if (renderIdRef.current !== renderId) return;
|
|
217
|
+
if (images.length > 0) {
|
|
218
|
+
const imgLayer = document.createElement("div");
|
|
219
|
+
imgLayer.className = "ycw-pdf-image-layer";
|
|
220
|
+
images.forEach((img, imgIdx) => {
|
|
221
|
+
const el = document.createElement("img");
|
|
222
|
+
el.src = img.src;
|
|
223
|
+
el.dataset.page = String(i);
|
|
224
|
+
el.dataset.imgIdx = String(imgIdx);
|
|
225
|
+
el.style.position = "absolute";
|
|
226
|
+
el.style.left = `${img.x}px`;
|
|
227
|
+
el.style.top = `${img.y}px`;
|
|
228
|
+
el.style.width = `${img.w}px`;
|
|
229
|
+
el.style.height = `${img.h}px`;
|
|
230
|
+
el.draggable = true;
|
|
231
|
+
imgLayer.appendChild(el);
|
|
232
|
+
});
|
|
233
|
+
pageDiv.appendChild(imgLayer);
|
|
234
|
+
}
|
|
235
|
+
} catch {
|
|
236
|
+
}
|
|
237
|
+
container.appendChild(pageDiv);
|
|
238
|
+
}
|
|
239
|
+
}, []);
|
|
240
|
+
useEffect(() => {
|
|
241
|
+
if (!src) return;
|
|
242
|
+
let cancelled = false;
|
|
243
|
+
(async () => {
|
|
244
|
+
try {
|
|
245
|
+
setLoading(true);
|
|
246
|
+
setError(void 0);
|
|
247
|
+
setZoom(1);
|
|
248
|
+
const pdfjsLib = await import("pdfjs-dist");
|
|
249
|
+
if (!pdfjsLib.GlobalWorkerOptions.workerSrc) {
|
|
250
|
+
pdfjsLib.GlobalWorkerOptions.workerSrc = `https://cdn.jsdelivr.net/npm/pdfjs-dist@${pdfjsLib.version}/build/pdf.worker.min.mjs`;
|
|
251
|
+
}
|
|
252
|
+
const { resolveToArrayBuffer } = await import("./resolveToArrayBuffer-AQIDZHSQ.js");
|
|
253
|
+
const buf = await resolveToArrayBuffer(src);
|
|
254
|
+
if (cancelled) return;
|
|
255
|
+
cleanup();
|
|
256
|
+
const pdfDoc = await pdfjsLib.getDocument({
|
|
257
|
+
data: new Uint8Array(buf.slice(0)),
|
|
258
|
+
disableStream: true,
|
|
259
|
+
disableAutoFetch: true
|
|
260
|
+
}).promise;
|
|
261
|
+
if (cancelled) {
|
|
262
|
+
pdfDoc.destroy();
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
pdfDocRef.current = pdfDoc;
|
|
266
|
+
setTotalPages(pdfDoc.numPages);
|
|
267
|
+
setLoading(false);
|
|
268
|
+
const container = containerRef.current;
|
|
269
|
+
if (!container || cancelled) return;
|
|
270
|
+
const rid = ++renderIdRef.current;
|
|
271
|
+
await renderPages(await import("pdfjs-dist"), pdfDoc, container, 1, rid);
|
|
272
|
+
} catch (err) {
|
|
273
|
+
if (!cancelled) {
|
|
274
|
+
setError(String(err?.message ?? err));
|
|
275
|
+
setLoading(false);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
})();
|
|
279
|
+
return () => {
|
|
280
|
+
cancelled = true;
|
|
281
|
+
cleanup();
|
|
282
|
+
};
|
|
283
|
+
}, [src, cleanup, renderPages]);
|
|
284
|
+
useEffect(() => {
|
|
285
|
+
const pdfDoc = pdfDocRef.current;
|
|
286
|
+
const container = containerRef.current;
|
|
287
|
+
if (!pdfDoc || !container || loading) return;
|
|
288
|
+
const rid = ++renderIdRef.current;
|
|
289
|
+
(async () => {
|
|
290
|
+
const pdfjsLib = await import("pdfjs-dist");
|
|
291
|
+
await renderPages(pdfjsLib, pdfDoc, container, zoom, rid);
|
|
292
|
+
})().catch(() => {
|
|
293
|
+
});
|
|
294
|
+
}, [zoom, renderPages, loading]);
|
|
295
|
+
const handleZoomIn = useCallback(() => {
|
|
296
|
+
setZoom((z) => Math.min(ZOOM_MAX, +(z + ZOOM_STEP).toFixed(2)));
|
|
297
|
+
}, []);
|
|
298
|
+
const handleZoomOut = useCallback(() => {
|
|
299
|
+
setZoom((z) => Math.max(ZOOM_MIN, +(z - ZOOM_STEP).toFixed(2)));
|
|
300
|
+
}, []);
|
|
301
|
+
const handleZoomReset = useCallback(() => setZoom(1), []);
|
|
302
|
+
useEffect(() => {
|
|
303
|
+
const el = containerRef.current;
|
|
304
|
+
if (!el || !onImageSelect) return;
|
|
305
|
+
const onClick = (e) => {
|
|
306
|
+
const target = e.target;
|
|
307
|
+
if (target.tagName !== "IMG" || !target.closest(".ycw-pdf-image-layer")) return;
|
|
308
|
+
const img = target;
|
|
309
|
+
const prev = el.querySelector('.ycw-pdf-image-layer img[data-selected="true"]');
|
|
310
|
+
if (prev && prev !== img) prev.removeAttribute("data-selected");
|
|
311
|
+
if (img.dataset.selected === "true") {
|
|
312
|
+
img.removeAttribute("data-selected");
|
|
313
|
+
onImageSelect(null);
|
|
314
|
+
} else {
|
|
315
|
+
img.dataset.selected = "true";
|
|
316
|
+
onImageSelect({
|
|
317
|
+
page: parseInt(img.dataset.page || "1", 10),
|
|
318
|
+
imageIndex: parseInt(img.dataset.imgIdx || "0", 10),
|
|
319
|
+
imageSrc: img.src,
|
|
320
|
+
rect: img.getBoundingClientRect()
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
};
|
|
324
|
+
el.addEventListener("click", onClick);
|
|
325
|
+
return () => el.removeEventListener("click", onClick);
|
|
326
|
+
}, [onImageSelect]);
|
|
327
|
+
useEffect(() => {
|
|
328
|
+
const el = containerRef.current?.parentElement;
|
|
329
|
+
if (!el) return;
|
|
330
|
+
const onWheel = (e) => {
|
|
331
|
+
if (!e.ctrlKey && !e.metaKey) return;
|
|
332
|
+
e.preventDefault();
|
|
333
|
+
setZoom((z) => {
|
|
334
|
+
const delta = e.deltaY > 0 ? -ZOOM_STEP : ZOOM_STEP;
|
|
335
|
+
return Math.max(ZOOM_MIN, Math.min(ZOOM_MAX, +(z + delta).toFixed(2)));
|
|
336
|
+
});
|
|
337
|
+
};
|
|
338
|
+
el.addEventListener("wheel", onWheel, { passive: false });
|
|
339
|
+
return () => el.removeEventListener("wheel", onWheel);
|
|
340
|
+
}, [loading]);
|
|
341
|
+
if (error) {
|
|
342
|
+
return /* @__PURE__ */ jsx("div", { className: `ycw-file-viewer-pdf ${className || ""}`, children: /* @__PURE__ */ jsx("div", { className: "ycw-viewer-error", children: error }) });
|
|
343
|
+
}
|
|
344
|
+
return /* @__PURE__ */ jsxs("div", { className: `ycw-file-viewer-pdf ${className || ""}`, children: [
|
|
345
|
+
loading && /* @__PURE__ */ jsx("div", { className: "ycw-viewer-loading", children: loadingLabel || t("viewer.loading") }),
|
|
346
|
+
!loading && totalPages > 0 && /* @__PURE__ */ jsxs("div", { className: "ycw-pdf-toolbar", children: [
|
|
347
|
+
/* @__PURE__ */ jsx("span", { className: "ycw-pdf-page-count", children: t("viewer.pdfPages", { count: String(totalPages) }) }),
|
|
348
|
+
/* @__PURE__ */ jsxs("div", { className: "ycw-pdf-zoom-controls", children: [
|
|
349
|
+
/* @__PURE__ */ jsx("button", { className: "ycw-pdf-zoom-btn", onClick: handleZoomOut, disabled: zoom <= ZOOM_MIN, title: t("viewer.zoomOut"), children: "\u2212" }),
|
|
350
|
+
/* @__PURE__ */ jsxs("button", { className: "ycw-pdf-zoom-label", onClick: handleZoomReset, title: t("viewer.zoomReset"), children: [
|
|
351
|
+
Math.round(zoom * 100),
|
|
352
|
+
"%"
|
|
353
|
+
] }),
|
|
354
|
+
/* @__PURE__ */ jsx("button", { className: "ycw-pdf-zoom-btn", onClick: handleZoomIn, disabled: zoom >= ZOOM_MAX, title: t("viewer.zoomIn"), children: "+" })
|
|
355
|
+
] })
|
|
356
|
+
] }),
|
|
357
|
+
/* @__PURE__ */ jsx("div", { ref: containerRef, className: "ycw-pdf-pages" })
|
|
358
|
+
] });
|
|
359
|
+
};
|
|
360
|
+
var PdfViewerCore_default = PdfViewerCore;
|
|
361
|
+
export {
|
|
362
|
+
PdfViewerCore_default as default
|
|
363
|
+
};
|
|
364
|
+
//# sourceMappingURL=PdfViewerCore-HJPEHSRA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/FileViewer/viewers/PdfViewerCore.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState, useCallback } from 'react'\nimport { useRevokeBlobUrl } from '../../ViewerCore/hooks/useRevokeBlobUrl.js'\nimport { useChatWidgetI18n } from '../../../i18n'\n\n// Safari <17.5 lacks ReadableStream async iterator — pdfjs-dist v5 needs it\nif (\n typeof ReadableStream !== 'undefined' &&\n !(Symbol.asyncIterator in ReadableStream.prototype)\n) {\n (ReadableStream.prototype as any)[Symbol.asyncIterator] = async function* (this: ReadableStream) {\n const reader = this.getReader()\n try {\n for (;;) {\n const { done, value } = await reader.read()\n if (done) return\n yield value\n }\n } finally {\n reader.releaseLock()\n }\n }\n}\n\nexport interface PdfImageSelection {\n page: number\n imageIndex: number\n imageSrc: string\n rect: DOMRect\n}\n\ninterface PdfViewerCoreProps {\n src: string\n className?: string\n loadingLabel?: string\n onImageSelect?: (sel: PdfImageSelection | null) => void\n}\n\nconst BASE_SCALE = 1.333 // 96dpi / 72pt\nconst ZOOM_STEP = 0.25\nconst ZOOM_MIN = 0.5\nconst ZOOM_MAX = 4\nconst MAX_IMAGES_PER_PAGE = 50\nconst MIN_IMAGE_DIM = 8\n\ntype Img = { src: string; x: number; y: number; w: number; h: number }\n\nfunction mulM(a: number[], b: number[]): number[] {\n return [\n a[0] * b[0] + a[2] * b[1],\n a[1] * b[0] + a[3] * b[1],\n a[0] * b[2] + a[2] * b[3],\n a[1] * b[2] + a[3] * b[3],\n a[0] * b[4] + a[2] * b[5] + a[4],\n a[1] * b[4] + a[3] * b[5] + a[5],\n ]\n}\n\nasync function extractPageImages(page: any, viewport: any, OPS: any): Promise<Img[]> {\n const opList = await page.getOperatorList()\n const results: Img[] = []\n const ID = [1, 0, 0, 1, 0, 0]\n let ctm = ID.slice()\n const stack: number[][] = []\n const vt: number[] = viewport.transform\n\n for (let i = 0; i < opList.fnArray.length; i++) {\n if (results.length >= MAX_IMAGES_PER_PAGE) break\n const fn = opList.fnArray[i]\n const args = opList.argsArray[i]\n\n switch (fn) {\n case OPS.save:\n stack.push(ctm.slice())\n break\n case OPS.restore:\n ctm = stack.pop() || ID.slice()\n break\n case OPS.transform:\n ctm = mulM(ctm, args as number[])\n break\n case OPS.paintImageXObject:\n case OPS.paintJpegXObject: {\n const imgName = args[0]\n try {\n const imgData: any = await new Promise((res, rej) => {\n const timeout = setTimeout(() => rej('timeout'), 2000)\n page.objs.get(imgName, (d: any) => { clearTimeout(timeout); res(d) })\n })\n if (!imgData || (!imgData.data && !imgData.bitmap)) break\n if (imgData.width < MIN_IMAGE_DIM || imgData.height < MIN_IMAGE_DIM) break\n\n const tc = document.createElement('canvas')\n tc.width = imgData.width\n tc.height = imgData.height\n const tctx = tc.getContext('2d')!\n if (imgData.bitmap) {\n tctx.drawImage(imgData.bitmap, 0, 0)\n } else {\n const id = tctx.createImageData(imgData.width, imgData.height)\n id.data.set(imgData.data)\n tctx.putImageData(id, 0, 0)\n }\n const src = tc.toDataURL('image/png')\n\n const sm = mulM(vt, ctm)\n const corners = [\n [sm[4], sm[5]],\n [sm[0] + sm[4], sm[1] + sm[5]],\n [sm[2] + sm[4], sm[3] + sm[5]],\n [sm[0] + sm[2] + sm[4], sm[1] + sm[3] + sm[5]],\n ]\n const xs = corners.map(c => c[0])\n const ys = corners.map(c => c[1])\n results.push({\n src,\n x: Math.min(...xs),\n y: Math.min(...ys),\n w: Math.max(...xs) - Math.min(...xs),\n h: Math.max(...ys) - Math.min(...ys),\n })\n } catch { /* skip failed images */ }\n break\n }\n }\n }\n return results\n}\n\nconst PdfViewerCore: React.FC<PdfViewerCoreProps> = ({ src, className, loadingLabel, onImageSelect }) => {\n const { t } = useChatWidgetI18n()\n const containerRef = useRef<HTMLDivElement>(null)\n const pdfDocRef = useRef<any>(null)\n const renderIdRef = useRef(0)\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<string>()\n const [totalPages, setTotalPages] = useState(0)\n const [zoom, setZoom] = useState(1)\n\n useRevokeBlobUrl(src)\n\n const cleanup = useCallback(() => {\n if (pdfDocRef.current) {\n try { pdfDocRef.current.destroy() } catch {}\n pdfDocRef.current = null\n }\n }, [])\n\n const renderPages = useCallback(async (\n pdfjsLib: any,\n pdfDoc: any,\n container: HTMLDivElement,\n userZoom: number,\n renderId: number,\n ) => {\n container.innerHTML = ''\n\n const dpr = window.devicePixelRatio || 1\n const numPages = pdfDoc.numPages\n const containerWidth = container.clientWidth || 600\n\n for (let i = 1; i <= numPages; i++) {\n if (renderIdRef.current !== renderId) return\n const page = await pdfDoc.getPage(i)\n if (renderIdRef.current !== renderId) return\n\n const baseViewport = page.getViewport({ scale: BASE_SCALE })\n const fitScale = containerWidth / baseViewport.width\n const finalScale = BASE_SCALE * fitScale * userZoom\n const viewport = page.getViewport({ scale: finalScale })\n\n const pageDiv = document.createElement('div')\n pageDiv.className = 'ycw-pdf-page'\n pageDiv.style.width = `${viewport.width}px`\n pageDiv.style.height = `${viewport.height}px`\n\n // Canvas\n const canvas = document.createElement('canvas')\n canvas.width = Math.floor(viewport.width * dpr)\n canvas.height = Math.floor(viewport.height * dpr)\n canvas.style.width = `${viewport.width}px`\n canvas.style.height = `${viewport.height}px`\n pageDiv.appendChild(canvas)\n\n const ctx = canvas.getContext('2d')!\n ctx.scale(dpr, dpr)\n await page.render({ canvasContext: ctx, canvas, viewport }).promise\n if (renderIdRef.current !== renderId) return\n\n // Text selection layer — manual spans with inline px positioning\n const textContent = await page.getTextContent()\n if (renderIdRef.current !== renderId) return\n\n const textDiv = document.createElement('div')\n textDiv.className = 'ycw-pdf-text-layer'\n textDiv.dataset.page = String(i)\n textDiv.style.cssText =\n 'position:absolute;inset:0;z-index:2;line-height:1;pointer-events:auto;'\n\n const measureCanvas = document.createElement('canvas')\n const mCtx = measureCanvas.getContext('2d')!\n\n for (const item of textContent.items as any[]) {\n if (!item.str) continue\n const tx = pdfjsLib.Util.transform(viewport.transform, item.transform)\n const angle = Math.atan2(tx[1], tx[0])\n const fontSize = Math.hypot(tx[2], tx[3])\n if (fontSize < 1) continue\n\n const fontFamily = textContent.styles?.[item.fontName]?.fontFamily || 'sans-serif'\n\n const ascent = fontSize * 0.8\n let left: number, top: number\n if (Math.abs(angle) < 0.001) {\n left = tx[4]\n top = tx[5] - ascent\n } else {\n left = tx[4] + ascent * Math.sin(angle)\n top = tx[5] - ascent * Math.cos(angle)\n }\n\n const span = document.createElement('span')\n span.textContent = item.str\n span.dataset.page = String(i)\n span.style.position = 'absolute'\n span.style.left = `${left.toFixed(1)}px`\n span.style.top = `${top.toFixed(1)}px`\n span.style.fontSize = `${fontSize.toFixed(1)}px`\n span.style.fontFamily = fontFamily\n span.style.color = 'transparent'\n span.style.whiteSpace = 'pre'\n span.style.cursor = 'text'\n span.style.transformOrigin = '0% 0%'\n\n if (item.width) {\n const targetWidth = item.width * finalScale\n mCtx.font = `${fontSize}px ${fontFamily}`\n const measured = mCtx.measureText(item.str).width\n if (measured > 0) {\n const scaleX = targetWidth / measured\n if (Math.abs(angle) < 0.001) {\n span.style.transform = `scaleX(${scaleX.toFixed(4)})`\n } else {\n const deg = angle * (180 / Math.PI)\n span.style.transform = `rotate(${deg.toFixed(2)}deg) scaleX(${scaleX.toFixed(4)})`\n }\n }\n } else if (Math.abs(angle) >= 0.001) {\n const deg = angle * (180 / Math.PI)\n span.style.transform = `rotate(${deg.toFixed(2)}deg)`\n }\n\n textDiv.appendChild(span)\n }\n\n pageDiv.appendChild(textDiv)\n\n // Image overlay layer (above text layer — click to select image)\n try {\n const images = await extractPageImages(page, viewport, pdfjsLib.OPS)\n if (renderIdRef.current !== renderId) return\n if (images.length > 0) {\n const imgLayer = document.createElement('div')\n imgLayer.className = 'ycw-pdf-image-layer'\n images.forEach((img, imgIdx) => {\n const el = document.createElement('img')\n el.src = img.src\n el.dataset.page = String(i)\n el.dataset.imgIdx = String(imgIdx)\n el.style.position = 'absolute'\n el.style.left = `${img.x}px`\n el.style.top = `${img.y}px`\n el.style.width = `${img.w}px`\n el.style.height = `${img.h}px`\n el.draggable = true\n imgLayer.appendChild(el)\n })\n pageDiv.appendChild(imgLayer)\n }\n } catch { /* image extraction is best-effort */ }\n\n container.appendChild(pageDiv)\n }\n }, [])\n\n // Load PDF doc once\n useEffect(() => {\n if (!src) return\n let cancelled = false\n\n ;(async () => {\n try {\n setLoading(true)\n setError(undefined)\n setZoom(1)\n\n const pdfjsLib = await import('pdfjs-dist')\n if (!pdfjsLib.GlobalWorkerOptions.workerSrc) {\n pdfjsLib.GlobalWorkerOptions.workerSrc =\n `https://cdn.jsdelivr.net/npm/pdfjs-dist@${pdfjsLib.version}/build/pdf.worker.min.mjs`\n }\n\n const { resolveToArrayBuffer } = await import('../../ViewerCore/utils/resolveToArrayBuffer.js')\n const buf = await resolveToArrayBuffer(src)\n if (cancelled) return\n\n cleanup()\n\n const pdfDoc = await pdfjsLib.getDocument({\n data: new Uint8Array(buf.slice(0)),\n disableStream: true,\n disableAutoFetch: true,\n }).promise\n if (cancelled) { pdfDoc.destroy(); return }\n pdfDocRef.current = pdfDoc\n\n setTotalPages(pdfDoc.numPages)\n setLoading(false)\n\n const container = containerRef.current\n if (!container || cancelled) return\n\n const rid = ++renderIdRef.current\n await renderPages(await import('pdfjs-dist'), pdfDoc, container, 1, rid)\n } catch (err) {\n if (!cancelled) {\n setError(String((err as Error)?.message ?? err))\n setLoading(false)\n }\n }\n })()\n\n return () => {\n cancelled = true\n cleanup()\n }\n }, [src, cleanup, renderPages])\n\n // Re-render on zoom change\n useEffect(() => {\n const pdfDoc = pdfDocRef.current\n const container = containerRef.current\n if (!pdfDoc || !container || loading) return\n\n const rid = ++renderIdRef.current\n ;(async () => {\n const pdfjsLib = await import('pdfjs-dist')\n await renderPages(pdfjsLib, pdfDoc, container, zoom, rid)\n })().catch(() => {})\n }, [zoom, renderPages, loading])\n\n const handleZoomIn = useCallback(() => {\n setZoom(z => Math.min(ZOOM_MAX, +(z + ZOOM_STEP).toFixed(2)))\n }, [])\n const handleZoomOut = useCallback(() => {\n setZoom(z => Math.max(ZOOM_MIN, +(z - ZOOM_STEP).toFixed(2)))\n }, [])\n const handleZoomReset = useCallback(() => setZoom(1), [])\n\n // Image click → select/deselect\n useEffect(() => {\n const el = containerRef.current\n if (!el || !onImageSelect) return\n const onClick = (e: MouseEvent) => {\n const target = e.target as HTMLElement\n if (target.tagName !== 'IMG' || !target.closest('.ycw-pdf-image-layer')) return\n const img = target as HTMLImageElement\n const prev = el.querySelector('.ycw-pdf-image-layer img[data-selected=\"true\"]')\n if (prev && prev !== img) prev.removeAttribute('data-selected')\n\n if (img.dataset.selected === 'true') {\n img.removeAttribute('data-selected')\n onImageSelect(null)\n } else {\n img.dataset.selected = 'true'\n onImageSelect({\n page: parseInt(img.dataset.page || '1', 10),\n imageIndex: parseInt(img.dataset.imgIdx || '0', 10),\n imageSrc: img.src,\n rect: img.getBoundingClientRect(),\n })\n }\n }\n el.addEventListener('click', onClick)\n return () => el.removeEventListener('click', onClick)\n }, [onImageSelect])\n\n // Ctrl/Cmd + scroll for zoom\n useEffect(() => {\n const el = containerRef.current?.parentElement\n if (!el) return\n const onWheel = (e: WheelEvent) => {\n if (!e.ctrlKey && !e.metaKey) return\n e.preventDefault()\n setZoom(z => {\n const delta = e.deltaY > 0 ? -ZOOM_STEP : ZOOM_STEP\n return Math.max(ZOOM_MIN, Math.min(ZOOM_MAX, +(z + delta).toFixed(2)))\n })\n }\n el.addEventListener('wheel', onWheel, { passive: false })\n return () => el.removeEventListener('wheel', onWheel)\n }, [loading])\n\n if (error) {\n return (\n <div className={`ycw-file-viewer-pdf ${className || ''}`}>\n <div className=\"ycw-viewer-error\">{error}</div>\n </div>\n )\n }\n\n return (\n <div className={`ycw-file-viewer-pdf ${className || ''}`}>\n {loading && <div className=\"ycw-viewer-loading\">{loadingLabel || t('viewer.loading')}</div>}\n {!loading && totalPages > 0 && (\n <div className=\"ycw-pdf-toolbar\">\n <span className=\"ycw-pdf-page-count\">\n {t('viewer.pdfPages', { count: String(totalPages) })}\n </span>\n <div className=\"ycw-pdf-zoom-controls\">\n <button className=\"ycw-pdf-zoom-btn\" onClick={handleZoomOut} disabled={zoom <= ZOOM_MIN} title={t('viewer.zoomOut')}>−</button>\n <button className=\"ycw-pdf-zoom-label\" onClick={handleZoomReset} title={t('viewer.zoomReset')}>{Math.round(zoom * 100)}%</button>\n <button className=\"ycw-pdf-zoom-btn\" onClick={handleZoomIn} disabled={zoom >= ZOOM_MAX} title={t('viewer.zoomIn')}>+</button>\n </div>\n </div>\n )}\n <div ref={containerRef} className=\"ycw-pdf-pages\" />\n </div>\n )\n}\n\nexport default PdfViewerCore\n"],"mappings":";;;;;;;;;AAAA,SAAgB,WAAW,QAAQ,UAAU,mBAAmB;AAqZxD,cAeI,YAfJ;AAhZR,IACE,OAAO,mBAAmB,eAC1B,EAAE,OAAO,iBAAiB,eAAe,YACzC;AACA,EAAC,eAAe,UAAkB,OAAO,aAAa,IAAI,mBAAuC;AAC/F,UAAM,SAAS,KAAK,UAAU;AAC9B,QAAI;AACF,iBAAS;AACP,cAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,YAAI,KAAM;AACV,cAAM;AAAA,MACR;AAAA,IACF,UAAE;AACA,aAAO,YAAY;AAAA,IACrB;AAAA,EACF;AACF;AAgBA,IAAM,aAAa;AACnB,IAAM,YAAY;AAClB,IAAM,WAAW;AACjB,IAAM,WAAW;AACjB,IAAM,sBAAsB;AAC5B,IAAM,gBAAgB;AAItB,SAAS,KAAK,GAAa,GAAuB;AAChD,SAAO;AAAA,IACL,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AAAA,IACxB,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AAAA,IACxB,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AAAA,IACxB,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AAAA,IACxB,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AAAA,IAC/B,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AAAA,EACjC;AACF;AAEA,eAAe,kBAAkB,MAAW,UAAe,KAA0B;AACnF,QAAM,SAAS,MAAM,KAAK,gBAAgB;AAC1C,QAAM,UAAiB,CAAC;AACxB,QAAM,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,MAAI,MAAM,GAAG,MAAM;AACnB,QAAM,QAAoB,CAAC;AAC3B,QAAM,KAAe,SAAS;AAE9B,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,QAAQ,KAAK;AAC9C,QAAI,QAAQ,UAAU,oBAAqB;AAC3C,UAAM,KAAK,OAAO,QAAQ,CAAC;AAC3B,UAAM,OAAO,OAAO,UAAU,CAAC;AAE/B,YAAQ,IAAI;AAAA,MACV,KAAK,IAAI;AACP,cAAM,KAAK,IAAI,MAAM,CAAC;AACtB;AAAA,MACF,KAAK,IAAI;AACP,cAAM,MAAM,IAAI,KAAK,GAAG,MAAM;AAC9B;AAAA,MACF,KAAK,IAAI;AACP,cAAM,KAAK,KAAK,IAAgB;AAChC;AAAA,MACF,KAAK,IAAI;AAAA,MACT,KAAK,IAAI,kBAAkB;AACzB,cAAM,UAAU,KAAK,CAAC;AACtB,YAAI;AACF,gBAAM,UAAe,MAAM,IAAI,QAAQ,CAAC,KAAK,QAAQ;AACnD,kBAAM,UAAU,WAAW,MAAM,IAAI,SAAS,GAAG,GAAI;AACrD,iBAAK,KAAK,IAAI,SAAS,CAAC,MAAW;AAAE,2BAAa,OAAO;AAAG,kBAAI,CAAC;AAAA,YAAE,CAAC;AAAA,UACtE,CAAC;AACD,cAAI,CAAC,WAAY,CAAC,QAAQ,QAAQ,CAAC,QAAQ,OAAS;AACpD,cAAI,QAAQ,QAAQ,iBAAiB,QAAQ,SAAS,cAAe;AAErE,gBAAM,KAAK,SAAS,cAAc,QAAQ;AAC1C,aAAG,QAAQ,QAAQ;AACnB,aAAG,SAAS,QAAQ;AACpB,gBAAM,OAAO,GAAG,WAAW,IAAI;AAC/B,cAAI,QAAQ,QAAQ;AAClB,iBAAK,UAAU,QAAQ,QAAQ,GAAG,CAAC;AAAA,UACrC,OAAO;AACL,kBAAM,KAAK,KAAK,gBAAgB,QAAQ,OAAO,QAAQ,MAAM;AAC7D,eAAG,KAAK,IAAI,QAAQ,IAAI;AACxB,iBAAK,aAAa,IAAI,GAAG,CAAC;AAAA,UAC5B;AACA,gBAAM,MAAM,GAAG,UAAU,WAAW;AAEpC,gBAAM,KAAK,KAAK,IAAI,GAAG;AACvB,gBAAM,UAAU;AAAA,YACd,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAAA,YACb,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;AAAA,YAC7B,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;AAAA,YAC7B,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;AAAA,UAC/C;AACA,gBAAM,KAAK,QAAQ,IAAI,OAAK,EAAE,CAAC,CAAC;AAChC,gBAAM,KAAK,QAAQ,IAAI,OAAK,EAAE,CAAC,CAAC;AAChC,kBAAQ,KAAK;AAAA,YACX;AAAA,YACA,GAAG,KAAK,IAAI,GAAG,EAAE;AAAA,YACjB,GAAG,KAAK,IAAI,GAAG,EAAE;AAAA,YACjB,GAAG,KAAK,IAAI,GAAG,EAAE,IAAI,KAAK,IAAI,GAAG,EAAE;AAAA,YACnC,GAAG,KAAK,IAAI,GAAG,EAAE,IAAI,KAAK,IAAI,GAAG,EAAE;AAAA,UACrC,CAAC;AAAA,QACH,QAAQ;AAAA,QAA2B;AACnC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,IAAM,gBAA8C,CAAC,EAAE,KAAK,WAAW,cAAc,cAAc,MAAM;AACvG,QAAM,EAAE,EAAE,IAAI,kBAAkB;AAChC,QAAM,eAAe,OAAuB,IAAI;AAChD,QAAM,YAAY,OAAY,IAAI;AAClC,QAAM,cAAc,OAAO,CAAC;AAC5B,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,IAAI;AAC3C,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAiB;AAC3C,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,CAAC;AAC9C,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,CAAC;AAElC,mBAAiB,GAAG;AAEpB,QAAM,UAAU,YAAY,MAAM;AAChC,QAAI,UAAU,SAAS;AACrB,UAAI;AAAE,kBAAU,QAAQ,QAAQ;AAAA,MAAE,QAAQ;AAAA,MAAC;AAC3C,gBAAU,UAAU;AAAA,IACtB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,cAAc,YAAY,OAC9B,UACA,QACA,WACA,UACA,aACG;AACH,cAAU,YAAY;AAEtB,UAAM,MAAM,OAAO,oBAAoB;AACvC,UAAM,WAAW,OAAO;AACxB,UAAM,iBAAiB,UAAU,eAAe;AAEhD,aAAS,IAAI,GAAG,KAAK,UAAU,KAAK;AAClC,UAAI,YAAY,YAAY,SAAU;AACtC,YAAM,OAAO,MAAM,OAAO,QAAQ,CAAC;AACnC,UAAI,YAAY,YAAY,SAAU;AAEtC,YAAM,eAAe,KAAK,YAAY,EAAE,OAAO,WAAW,CAAC;AAC3D,YAAM,WAAW,iBAAiB,aAAa;AAC/C,YAAM,aAAa,aAAa,WAAW;AAC3C,YAAM,WAAW,KAAK,YAAY,EAAE,OAAO,WAAW,CAAC;AAEvD,YAAM,UAAU,SAAS,cAAc,KAAK;AAC5C,cAAQ,YAAY;AACpB,cAAQ,MAAM,QAAQ,GAAG,SAAS,KAAK;AACvC,cAAQ,MAAM,SAAS,GAAG,SAAS,MAAM;AAGzC,YAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,aAAO,QAAQ,KAAK,MAAM,SAAS,QAAQ,GAAG;AAC9C,aAAO,SAAS,KAAK,MAAM,SAAS,SAAS,GAAG;AAChD,aAAO,MAAM,QAAQ,GAAG,SAAS,KAAK;AACtC,aAAO,MAAM,SAAS,GAAG,SAAS,MAAM;AACxC,cAAQ,YAAY,MAAM;AAE1B,YAAM,MAAM,OAAO,WAAW,IAAI;AAClC,UAAI,MAAM,KAAK,GAAG;AAClB,YAAM,KAAK,OAAO,EAAE,eAAe,KAAK,QAAQ,SAAS,CAAC,EAAE;AAC5D,UAAI,YAAY,YAAY,SAAU;AAGtC,YAAM,cAAc,MAAM,KAAK,eAAe;AAC9C,UAAI,YAAY,YAAY,SAAU;AAEtC,YAAM,UAAU,SAAS,cAAc,KAAK;AAC5C,cAAQ,YAAY;AACpB,cAAQ,QAAQ,OAAO,OAAO,CAAC;AAC/B,cAAQ,MAAM,UACZ;AAEF,YAAM,gBAAgB,SAAS,cAAc,QAAQ;AACrD,YAAM,OAAO,cAAc,WAAW,IAAI;AAE1C,iBAAW,QAAQ,YAAY,OAAgB;AAC7C,YAAI,CAAC,KAAK,IAAK;AACf,cAAM,KAAK,SAAS,KAAK,UAAU,SAAS,WAAW,KAAK,SAAS;AACrE,cAAM,QAAQ,KAAK,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AACrC,cAAM,WAAW,KAAK,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AACxC,YAAI,WAAW,EAAG;AAElB,cAAM,aAAa,YAAY,SAAS,KAAK,QAAQ,GAAG,cAAc;AAEtE,cAAM,SAAS,WAAW;AAC1B,YAAI,MAAc;AAClB,YAAI,KAAK,IAAI,KAAK,IAAI,MAAO;AAC3B,iBAAO,GAAG,CAAC;AACX,gBAAM,GAAG,CAAC,IAAI;AAAA,QAChB,OAAO;AACL,iBAAO,GAAG,CAAC,IAAI,SAAS,KAAK,IAAI,KAAK;AACtC,gBAAM,GAAG,CAAC,IAAI,SAAS,KAAK,IAAI,KAAK;AAAA,QACvC;AAEA,cAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,aAAK,cAAc,KAAK;AACxB,aAAK,QAAQ,OAAO,OAAO,CAAC;AAC5B,aAAK,MAAM,WAAW;AACtB,aAAK,MAAM,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC;AACpC,aAAK,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,CAAC;AAClC,aAAK,MAAM,WAAW,GAAG,SAAS,QAAQ,CAAC,CAAC;AAC5C,aAAK,MAAM,aAAa;AACxB,aAAK,MAAM,QAAQ;AACnB,aAAK,MAAM,aAAa;AACxB,aAAK,MAAM,SAAS;AACpB,aAAK,MAAM,kBAAkB;AAE7B,YAAI,KAAK,OAAO;AACd,gBAAM,cAAc,KAAK,QAAQ;AACjC,eAAK,OAAO,GAAG,QAAQ,MAAM,UAAU;AACvC,gBAAM,WAAW,KAAK,YAAY,KAAK,GAAG,EAAE;AAC5C,cAAI,WAAW,GAAG;AAChB,kBAAM,SAAS,cAAc;AAC7B,gBAAI,KAAK,IAAI,KAAK,IAAI,MAAO;AAC3B,mBAAK,MAAM,YAAY,UAAU,OAAO,QAAQ,CAAC,CAAC;AAAA,YACpD,OAAO;AACL,oBAAM,MAAM,SAAS,MAAM,KAAK;AAChC,mBAAK,MAAM,YAAY,UAAU,IAAI,QAAQ,CAAC,CAAC,eAAe,OAAO,QAAQ,CAAC,CAAC;AAAA,YACjF;AAAA,UACF;AAAA,QACF,WAAW,KAAK,IAAI,KAAK,KAAK,MAAO;AACnC,gBAAM,MAAM,SAAS,MAAM,KAAK;AAChC,eAAK,MAAM,YAAY,UAAU,IAAI,QAAQ,CAAC,CAAC;AAAA,QACjD;AAEA,gBAAQ,YAAY,IAAI;AAAA,MAC1B;AAEA,cAAQ,YAAY,OAAO;AAG3B,UAAI;AACF,cAAM,SAAS,MAAM,kBAAkB,MAAM,UAAU,SAAS,GAAG;AACnE,YAAI,YAAY,YAAY,SAAU;AACtC,YAAI,OAAO,SAAS,GAAG;AACrB,gBAAM,WAAW,SAAS,cAAc,KAAK;AAC7C,mBAAS,YAAY;AACrB,iBAAO,QAAQ,CAAC,KAAK,WAAW;AAC9B,kBAAM,KAAK,SAAS,cAAc,KAAK;AACvC,eAAG,MAAM,IAAI;AACb,eAAG,QAAQ,OAAO,OAAO,CAAC;AAC1B,eAAG,QAAQ,SAAS,OAAO,MAAM;AACjC,eAAG,MAAM,WAAW;AACpB,eAAG,MAAM,OAAO,GAAG,IAAI,CAAC;AACxB,eAAG,MAAM,MAAM,GAAG,IAAI,CAAC;AACvB,eAAG,MAAM,QAAQ,GAAG,IAAI,CAAC;AACzB,eAAG,MAAM,SAAS,GAAG,IAAI,CAAC;AAC1B,eAAG,YAAY;AACf,qBAAS,YAAY,EAAE;AAAA,UACzB,CAAC;AACD,kBAAQ,YAAY,QAAQ;AAAA,QAC9B;AAAA,MACF,QAAQ;AAAA,MAAwC;AAEhD,gBAAU,YAAY,OAAO;AAAA,IAC/B;AAAA,EACF,GAAG,CAAC,CAAC;AAGL,YAAU,MAAM;AACd,QAAI,CAAC,IAAK;AACV,QAAI,YAAY;AAEf,KAAC,YAAY;AACZ,UAAI;AACF,mBAAW,IAAI;AACf,iBAAS,MAAS;AAClB,gBAAQ,CAAC;AAET,cAAM,WAAW,MAAM,OAAO,YAAY;AAC1C,YAAI,CAAC,SAAS,oBAAoB,WAAW;AAC3C,mBAAS,oBAAoB,YAC3B,2CAA2C,SAAS,OAAO;AAAA,QAC/D;AAEA,cAAM,EAAE,qBAAqB,IAAI,MAAM,OAAO,oCAAgD;AAC9F,cAAM,MAAM,MAAM,qBAAqB,GAAG;AAC1C,YAAI,UAAW;AAEf,gBAAQ;AAER,cAAM,SAAS,MAAM,SAAS,YAAY;AAAA,UACxC,MAAM,IAAI,WAAW,IAAI,MAAM,CAAC,CAAC;AAAA,UACjC,eAAe;AAAA,UACf,kBAAkB;AAAA,QACpB,CAAC,EAAE;AACH,YAAI,WAAW;AAAE,iBAAO,QAAQ;AAAG;AAAA,QAAO;AAC1C,kBAAU,UAAU;AAEpB,sBAAc,OAAO,QAAQ;AAC7B,mBAAW,KAAK;AAEhB,cAAM,YAAY,aAAa;AAC/B,YAAI,CAAC,aAAa,UAAW;AAE7B,cAAM,MAAM,EAAE,YAAY;AAC1B,cAAM,YAAY,MAAM,OAAO,YAAY,GAAG,QAAQ,WAAW,GAAG,GAAG;AAAA,MACzE,SAAS,KAAK;AACZ,YAAI,CAAC,WAAW;AACd,mBAAS,OAAQ,KAAe,WAAW,GAAG,CAAC;AAC/C,qBAAW,KAAK;AAAA,QAClB;AAAA,MACF;AAAA,IACF,GAAG;AAEH,WAAO,MAAM;AACX,kBAAY;AACZ,cAAQ;AAAA,IACV;AAAA,EACF,GAAG,CAAC,KAAK,SAAS,WAAW,CAAC;AAG9B,YAAU,MAAM;AACd,UAAM,SAAS,UAAU;AACzB,UAAM,YAAY,aAAa;AAC/B,QAAI,CAAC,UAAU,CAAC,aAAa,QAAS;AAEtC,UAAM,MAAM,EAAE,YAAY;AACzB,KAAC,YAAY;AACZ,YAAM,WAAW,MAAM,OAAO,YAAY;AAC1C,YAAM,YAAY,UAAU,QAAQ,WAAW,MAAM,GAAG;AAAA,IAC1D,GAAG,EAAE,MAAM,MAAM;AAAA,IAAC,CAAC;AAAA,EACrB,GAAG,CAAC,MAAM,aAAa,OAAO,CAAC;AAE/B,QAAM,eAAe,YAAY,MAAM;AACrC,YAAQ,OAAK,KAAK,IAAI,UAAU,EAAE,IAAI,WAAW,QAAQ,CAAC,CAAC,CAAC;AAAA,EAC9D,GAAG,CAAC,CAAC;AACL,QAAM,gBAAgB,YAAY,MAAM;AACtC,YAAQ,OAAK,KAAK,IAAI,UAAU,EAAE,IAAI,WAAW,QAAQ,CAAC,CAAC,CAAC;AAAA,EAC9D,GAAG,CAAC,CAAC;AACL,QAAM,kBAAkB,YAAY,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;AAGxD,YAAU,MAAM;AACd,UAAM,KAAK,aAAa;AACxB,QAAI,CAAC,MAAM,CAAC,cAAe;AAC3B,UAAM,UAAU,CAAC,MAAkB;AACjC,YAAM,SAAS,EAAE;AACjB,UAAI,OAAO,YAAY,SAAS,CAAC,OAAO,QAAQ,sBAAsB,EAAG;AACzE,YAAM,MAAM;AACZ,YAAM,OAAO,GAAG,cAAc,gDAAgD;AAC9E,UAAI,QAAQ,SAAS,IAAK,MAAK,gBAAgB,eAAe;AAE9D,UAAI,IAAI,QAAQ,aAAa,QAAQ;AACnC,YAAI,gBAAgB,eAAe;AACnC,sBAAc,IAAI;AAAA,MACpB,OAAO;AACL,YAAI,QAAQ,WAAW;AACvB,sBAAc;AAAA,UACZ,MAAM,SAAS,IAAI,QAAQ,QAAQ,KAAK,EAAE;AAAA,UAC1C,YAAY,SAAS,IAAI,QAAQ,UAAU,KAAK,EAAE;AAAA,UAClD,UAAU,IAAI;AAAA,UACd,MAAM,IAAI,sBAAsB;AAAA,QAClC,CAAC;AAAA,MACH;AAAA,IACF;AACA,OAAG,iBAAiB,SAAS,OAAO;AACpC,WAAO,MAAM,GAAG,oBAAoB,SAAS,OAAO;AAAA,EACtD,GAAG,CAAC,aAAa,CAAC;AAGlB,YAAU,MAAM;AACd,UAAM,KAAK,aAAa,SAAS;AACjC,QAAI,CAAC,GAAI;AACT,UAAM,UAAU,CAAC,MAAkB;AACjC,UAAI,CAAC,EAAE,WAAW,CAAC,EAAE,QAAS;AAC9B,QAAE,eAAe;AACjB,cAAQ,OAAK;AACX,cAAM,QAAQ,EAAE,SAAS,IAAI,CAAC,YAAY;AAC1C,eAAO,KAAK,IAAI,UAAU,KAAK,IAAI,UAAU,EAAE,IAAI,OAAO,QAAQ,CAAC,CAAC,CAAC;AAAA,MACvE,CAAC;AAAA,IACH;AACA,OAAG,iBAAiB,SAAS,SAAS,EAAE,SAAS,MAAM,CAAC;AACxD,WAAO,MAAM,GAAG,oBAAoB,SAAS,OAAO;AAAA,EACtD,GAAG,CAAC,OAAO,CAAC;AAEZ,MAAI,OAAO;AACT,WACE,oBAAC,SAAI,WAAW,uBAAuB,aAAa,EAAE,IACpD,8BAAC,SAAI,WAAU,oBAAoB,iBAAM,GAC3C;AAAA,EAEJ;AAEA,SACE,qBAAC,SAAI,WAAW,uBAAuB,aAAa,EAAE,IACnD;AAAA,eAAW,oBAAC,SAAI,WAAU,sBAAsB,0BAAgB,EAAE,gBAAgB,GAAE;AAAA,IACpF,CAAC,WAAW,aAAa,KACxB,qBAAC,SAAI,WAAU,mBACb;AAAA,0BAAC,UAAK,WAAU,sBACb,YAAE,mBAAmB,EAAE,OAAO,OAAO,UAAU,EAAE,CAAC,GACrD;AAAA,MACA,qBAAC,SAAI,WAAU,yBACb;AAAA,4BAAC,YAAO,WAAU,oBAAmB,SAAS,eAAe,UAAU,QAAQ,UAAU,OAAO,EAAE,gBAAgB,GAAG,oBAAC;AAAA,QACtH,qBAAC,YAAO,WAAU,sBAAqB,SAAS,iBAAiB,OAAO,EAAE,kBAAkB,GAAI;AAAA,eAAK,MAAM,OAAO,GAAG;AAAA,UAAE;AAAA,WAAC;AAAA,QACxH,oBAAC,YAAO,WAAU,oBAAmB,SAAS,cAAc,UAAU,QAAQ,UAAU,OAAO,EAAE,eAAe,GAAG,eAAC;AAAA,SACtH;AAAA,OACF;AAAA,IAEF,oBAAC,SAAI,KAAK,cAAc,WAAU,iBAAgB;AAAA,KACpD;AAEJ;AAEA,IAAO,wBAAQ;","names":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import {
|
|
2
|
+
PowerPointCore,
|
|
3
|
+
PowerPointCore_default
|
|
4
|
+
} from "./chunk-PZXSASDY.js";
|
|
5
|
+
import "./chunk-VXJWGLZ7.js";
|
|
6
|
+
import "./chunk-7D4SUZUM.js";
|
|
7
|
+
export {
|
|
8
|
+
PowerPointCore,
|
|
9
|
+
PowerPointCore_default as default
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=PowerPointCore-FPDR2BL4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|