@file-viewer/core 2.0.11 → 2.1.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/README.en.md +2 -2
- package/README.md +2 -2
- package/dist/config/options.d.ts +1 -1
- package/dist/config/options.js +1 -1
- package/dist/contracts/types.d.ts +76 -1
- package/dist/headless.d.ts +3 -3
- package/dist/headless.js +2 -2
- package/dist/index.d.ts +10 -7
- package/dist/index.js +106 -49
- package/dist/lifecycle/operations.d.ts +1 -0
- package/dist/lifecycle/operations.js +65 -6
- package/dist/platform/assets.d.ts +3 -1
- package/dist/platform/assets.js +43 -6
- package/dist/registry/capabilities.d.ts +2 -2
- package/dist/registry/capabilities.js +2 -1
- package/dist/registry/formats.d.ts +20 -7
- package/dist/registry/formats.js +14 -5
- package/dist/registry/registry.d.ts +8 -1
- package/dist/registry/registry.js +29 -0
- package/dist/renderers/image.js +1 -10
- package/dist/renderers/index.d.ts +320 -2
- package/dist/renderers/index.js +27 -157
- package/dist/viewer/createViewer.js +86 -3
- package/package.json +17 -44
- package/dist/renderers/archive.d.ts +0 -2
- package/dist/renderers/archive.js +0 -547
- package/dist/renderers/archiveCache.d.ts +0 -10
- package/dist/renderers/archiveCache.js +0 -96
- package/dist/renderers/archiveFallback.d.ts +0 -7
- package/dist/renderers/archiveFallback.js +0 -166
- package/dist/renderers/archiveShared.d.ts +0 -23
- package/dist/renderers/archiveShared.js +0 -71
- package/dist/renderers/audio.d.ts +0 -8
- package/dist/renderers/audio.js +0 -219
- package/dist/renderers/cad.d.ts +0 -2
- package/dist/renderers/cad.js +0 -446
- package/dist/renderers/code.d.ts +0 -11
- package/dist/renderers/code.js +0 -233
- package/dist/renderers/data.d.ts +0 -7
- package/dist/renderers/data.js +0 -370
- package/dist/renderers/drawing.d.ts +0 -10
- package/dist/renderers/drawing.js +0 -882
- package/dist/renderers/eda.d.ts +0 -2
- package/dist/renderers/eda.js +0 -434
- package/dist/renderers/edaParser.d.ts +0 -77
- package/dist/renderers/edaParser.js +0 -569
- package/dist/renderers/email.d.ts +0 -2
- package/dist/renderers/email.js +0 -463
- package/dist/renderers/epub.d.ts +0 -2
- package/dist/renderers/epub.js +0 -331
- package/dist/renderers/geo.d.ts +0 -2
- package/dist/renderers/geo.js +0 -284
- package/dist/renderers/markdown.d.ts +0 -2
- package/dist/renderers/markdown.js +0 -83
- package/dist/renderers/model.d.ts +0 -2
- package/dist/renderers/model.js +0 -567
- package/dist/renderers/ofd.d.ts +0 -2
- package/dist/renderers/ofd.js +0 -256
- package/dist/renderers/openDocument.d.ts +0 -2
- package/dist/renderers/openDocument.js +0 -122
- package/dist/renderers/pdf.d.ts +0 -3
- package/dist/renderers/pdf.js +0 -1001
- package/dist/renderers/pdfStyles.d.ts +0 -1
- package/dist/renderers/pdfStyles.js +0 -1
- package/dist/renderers/pptx.d.ts +0 -2
- package/dist/renderers/pptx.js +0 -217
- package/dist/renderers/spreadsheet/state.d.ts +0 -80
- package/dist/renderers/spreadsheet/state.js +0 -96
- package/dist/renderers/spreadsheet/view.d.ts +0 -25
- package/dist/renderers/spreadsheet/view.js +0 -833
- package/dist/renderers/spreadsheet/worker/index.d.ts +0 -2
- package/dist/renderers/spreadsheet/worker/index.js +0 -1
- package/dist/renderers/spreadsheet/worker/sheetjs/SheetJsModel.d.ts +0 -73
- package/dist/renderers/spreadsheet/worker/sheetjs/SheetJsModel.js +0 -623
- package/dist/renderers/spreadsheet/worker/sheetjs/color.d.ts +0 -2
- package/dist/renderers/spreadsheet/worker/sheetjs/color.js +0 -73
- package/dist/renderers/spreadsheet/worker/sheetjs/index.d.ts +0 -1
- package/dist/renderers/spreadsheet/worker/sheetjs/index.js +0 -1
- package/dist/renderers/spreadsheet/worker/sheetjs/parser.d.ts +0 -18
- package/dist/renderers/spreadsheet/worker/sheetjs/parser.js +0 -106
- package/dist/renderers/spreadsheet/worker/sheetjs/sheet.worker.d.ts +0 -1
- package/dist/renderers/spreadsheet/worker/sheetjs/sheet.worker.js +0 -11
- package/dist/renderers/spreadsheet/worker/type.d.ts +0 -57
- package/dist/renderers/spreadsheet/worker/type.js +0 -1
- package/dist/renderers/spreadsheet.d.ts +0 -3
- package/dist/renderers/spreadsheet.js +0 -929
- package/dist/renderers/typst.d.ts +0 -8
- package/dist/renderers/typst.js +0 -547
- package/dist/renderers/umd/parser.d.ts +0 -30
- package/dist/renderers/umd/parser.js +0 -408
- package/dist/renderers/umd.d.ts +0 -2
- package/dist/renderers/umd.js +0 -297
- package/dist/renderers/video.d.ts +0 -8
- package/dist/renderers/video.js +0 -108
- package/dist/renderers/wordDoc.d.ts +0 -5
- package/dist/renderers/wordDoc.js +0 -284
- package/dist/renderers/wordDocx.d.ts +0 -5
- package/dist/renderers/wordDocx.js +0 -985
- package/dist/renderers/wordDocx.worker.d.ts +0 -1
- package/dist/renderers/wordDocx.worker.js +0 -96
- package/vendor/ofd/dltech/jbig2/arithmetic_decoder.js +0 -183
- package/vendor/ofd/dltech/jbig2/ccitt.js +0 -1070
- package/vendor/ofd/dltech/jbig2/compatibility.js +0 -12
- package/vendor/ofd/dltech/jbig2/core_utils.js +0 -180
- package/vendor/ofd/dltech/jbig2/is_node.js +0 -27
- package/vendor/ofd/dltech/jbig2/jbig2.js +0 -2589
- package/vendor/ofd/dltech/jbig2/jbig2_stream.js +0 -81
- package/vendor/ofd/dltech/jbig2/primitives.js +0 -387
- package/vendor/ofd/dltech/jbig2/stream.js +0 -1348
- package/vendor/ofd/dltech/jbig2/util.js +0 -972
- package/vendor/ofd/dltech/ofd/ofd.d.ts +0 -11
- package/vendor/ofd/dltech/ofd/ofd.js +0 -100
- package/vendor/ofd/dltech/ofd/ofd_parser.js +0 -395
- package/vendor/ofd/dltech/ofd/ofd_render.js +0 -473
- package/vendor/ofd/dltech/ofd/ofd_util.js +0 -350
- package/vendor/ofd/dltech/ofd/pipeline.js +0 -26
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const pdfViewerStyle = "/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n.textLayer {\n color-scheme: only light;\n position: absolute;\n text-align: initial;\n inset: 0;\n overflow: clip;\n opacity: 1;\n line-height: 1;\n letter-spacing: normal;\n word-spacing: normal;\n -webkit-text-size-adjust: none;\n -moz-text-size-adjust: none;\n text-size-adjust: none;\n forced-color-adjust: none;\n transform-origin: 0 0;\n caret-color: CanvasText;\n z-index: 0;\n --min-font-size: 1;\n --text-scale-factor: calc(var(--total-scale-factor) * var(--min-font-size));\n --min-font-size-inv: calc(1 / var(--min-font-size));\n}\n\n.textLayer.highlighting {\n touch-action: none;\n}\n\n.textLayer :is(span, br) {\n color: transparent;\n position: absolute;\n white-space: pre;\n cursor: text;\n transform-origin: 0% 0%;\n -webkit-user-select: text;\n -moz-user-select: text;\n user-select: text;\n}\n\n.textLayer > :not(.markedContent),\n.textLayer .markedContent span:not(.markedContent) {\n z-index: 1;\n --font-height: 0;\n font-size: calc(var(--text-scale-factor) * var(--font-height));\n --scale-x: 1;\n --rotate: 0deg;\n transform: rotate(var(--rotate)) scaleX(var(--scale-x)) scale(var(--min-font-size-inv));\n}\n\n.textLayer .markedContent {\n display: contents;\n}\n\n.textLayer .markedContent.highlight {\n background: transparent;\n backdrop-filter: none;\n margin: 0;\n padding: 0;\n}\n\n.textLayer span[role='img'] {\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n cursor: default;\n}\n\n.textLayer .highlight {\n --highlight-bg-color: rgb(180 0 170 / 0.25);\n --highlight-selected-bg-color: rgb(0 100 0 / 0.25);\n --highlight-backdrop-filter: none;\n --highlight-selected-backdrop-filter: none;\n margin: -1px;\n padding: 1px;\n background-color: var(--highlight-bg-color);\n backdrop-filter: var(--highlight-backdrop-filter);\n border-radius: 4px;\n}\n\n.textLayer .highlight.appended {\n position: initial;\n}\n\n.textLayer .highlight.begin {\n border-radius: 4px 0 0 4px;\n}\n\n.textLayer .highlight.end {\n border-radius: 0 4px 4px 0;\n}\n\n.textLayer .highlight.middle {\n border-radius: 0;\n}\n\n.textLayer .highlight.selected {\n background-color: var(--highlight-selected-bg-color);\n backdrop-filter: var(--highlight-selected-backdrop-filter);\n scroll-margin-top: 50px;\n}\n\n.textLayer ::-moz-selection {\n background: transparent;\n}\n\n.textLayer ::selection {\n background: transparent;\n}\n\n.textLayer br::-moz-selection {\n background: transparent;\n}\n\n.textLayer br::selection {\n background: transparent;\n}\n\n.textLayer .endOfContent {\n display: block;\n position: absolute;\n inset: 100% 0 0;\n z-index: 0;\n cursor: default;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n\n.textLayer.selecting .endOfContent {\n top: 0;\n}\n\n.textLayerImages {\n position: absolute;\n inset: 0;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n\n.textLayerImages canvas {\n position: absolute;\n transform-origin: 0% 0%;\n}\n\n@media screen and (forced-colors: active) {\n .textLayer .highlight {\n --highlight-bg-color: transparent;\n --highlight-selected-bg-color: transparent;\n --highlight-backdrop-filter: var(--hcm-highlight-filter);\n --highlight-selected-backdrop-filter: var(--hcm-highlight-selected-filter);\n }\n}\n\n\n:root {\n --annotation-unfocused-field-background: url(\"data:image/svg+xml;charset=UTF-8,<svg width='1px' height='1px' xmlns='http://www.w3.org/2000/svg'><rect width='100%' height='100%' style='fill:rgba(0, 54, 255, 0.13);'/></svg>\");\n}\n\n@media (forced-colors: active) {\n .annotationLayer .textWidgetAnnotation input:required,\n .annotationLayer .textWidgetAnnotation textarea:required,\n .annotationLayer .choiceWidgetAnnotation select:required,\n .annotationLayer .buttonWidgetAnnotation.checkBox input:required,\n .annotationLayer .buttonWidgetAnnotation.radioButton input:required {\n outline: 1.5px solid selectedItem;\n }\n}\n\n.annotationLayer {\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n transform-origin: 0 0;\n}\n\n.annotationLayer section {\n position: absolute;\n text-align: initial;\n pointer-events: auto;\n box-sizing: border-box;\n transform-origin: 0 0;\n}\n\n.annotationLayer .linkAnnotation > a,\n.annotationLayer .buttonWidgetAnnotation.pushButton > a {\n position: absolute;\n font-size: 1em;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.annotationLayer .buttonWidgetAnnotation.pushButton > canvas {\n width: 100%;\n height: 100%;\n}\n\n.annotationLayer .linkAnnotation > a:hover,\n.annotationLayer .buttonWidgetAnnotation.pushButton > a:hover {\n opacity: 0.2;\n background: rgba(255, 255, 0, 1);\n box-shadow: 0 2px 10px rgba(255, 255, 0, 1);\n}\n\n.annotationLayer .textAnnotation img {\n position: absolute;\n cursor: pointer;\n width: 100%;\n height: 100%;\n}\n\n.annotationLayer .textWidgetAnnotation input,\n.annotationLayer .textWidgetAnnotation textarea,\n.annotationLayer .choiceWidgetAnnotation select,\n.annotationLayer .buttonWidgetAnnotation.checkBox input,\n.annotationLayer .buttonWidgetAnnotation.radioButton input {\n background-image: var(--annotation-unfocused-field-background);\n border: 1px solid transparent;\n box-sizing: border-box;\n font: calc(9px * var(--scale-factor)) sans-serif;\n height: 100%;\n margin: 0;\n vertical-align: top;\n width: 100%;\n}\n\n.annotationLayer .textWidgetAnnotation input:required,\n.annotationLayer .textWidgetAnnotation textarea:required,\n.annotationLayer .choiceWidgetAnnotation select:required,\n.annotationLayer .buttonWidgetAnnotation.checkBox input:required,\n.annotationLayer .buttonWidgetAnnotation.radioButton input:required {\n outline: 1.5px solid red;\n}\n\n.annotationLayer .choiceWidgetAnnotation select option {\n padding: 0;\n}\n\n.annotationLayer .buttonWidgetAnnotation.radioButton input {\n border-radius: 50%;\n}\n\n.annotationLayer .textWidgetAnnotation textarea {\n resize: none;\n}\n\n.annotationLayer .textWidgetAnnotation input[disabled],\n.annotationLayer .textWidgetAnnotation textarea[disabled],\n.annotationLayer .choiceWidgetAnnotation select[disabled],\n.annotationLayer .buttonWidgetAnnotation.checkBox input[disabled],\n.annotationLayer .buttonWidgetAnnotation.radioButton input[disabled] {\n background: none;\n border: 1px solid transparent;\n cursor: not-allowed;\n}\n\n.annotationLayer .textWidgetAnnotation input:hover,\n.annotationLayer .textWidgetAnnotation textarea:hover,\n.annotationLayer .choiceWidgetAnnotation select:hover,\n.annotationLayer .buttonWidgetAnnotation.checkBox input:hover,\n.annotationLayer .buttonWidgetAnnotation.radioButton input:hover {\n border: 1px solid rgba(0, 0, 0, 1);\n}\n\n.annotationLayer .textWidgetAnnotation input:focus,\n.annotationLayer .textWidgetAnnotation textarea:focus,\n.annotationLayer .choiceWidgetAnnotation select:focus {\n background: none;\n border: 1px solid transparent;\n}\n\n.annotationLayer .textWidgetAnnotation input :focus,\n.annotationLayer .textWidgetAnnotation textarea :focus,\n.annotationLayer .choiceWidgetAnnotation select :focus,\n.annotationLayer .buttonWidgetAnnotation.checkBox :focus,\n.annotationLayer .buttonWidgetAnnotation.radioButton :focus {\n background-image: none;\n background-color: transparent;\n outline: auto;\n}\n\n.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before,\n.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after,\n.annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before {\n background-color: CanvasText;\n content: \"\";\n display: block;\n position: absolute;\n}\n\n.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before,\n.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after {\n height: 80%;\n left: 45%;\n width: 1px;\n}\n\n.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before {\n transform: rotate(45deg);\n}\n\n.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after {\n transform: rotate(-45deg);\n}\n\n.annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before {\n border-radius: 50%;\n height: 50%;\n left: 30%;\n top: 20%;\n width: 50%;\n}\n\n.annotationLayer .textWidgetAnnotation input.comb {\n font-family: monospace;\n padding-left: 2px;\n padding-right: 0;\n}\n\n.annotationLayer .textWidgetAnnotation input.comb:focus {\n /*\n * Letter spacing is placed on the right side of each character. Hence, the\n * letter spacing of the last character may be placed outside the visible\n * area, causing horizontal scrolling. We avoid this by extending the width\n * when the element has focus and revert this when it loses focus.\n */\n width: 103%;\n}\n\n.annotationLayer .buttonWidgetAnnotation.checkBox input,\n.annotationLayer .buttonWidgetAnnotation.radioButton input {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n\n.annotationLayer .popupTriggerArea {\n height: 100%;\n width: 100%;\n}\n\n.annotationLayer .popupWrapper {\n position: absolute;\n font-size: calc(9px * var(--scale-factor));\n width: 100%;\n min-width: calc(180px * var(--scale-factor));\n pointer-events: none;\n}\n\n.annotationLayer .popup {\n position: absolute;\n z-index: 200;\n max-width: calc(180px * var(--scale-factor));\n background-color: rgba(255, 255, 153, 1);\n box-shadow: 0 calc(2px * var(--scale-factor)) calc(5px * var(--scale-factor))\n rgba(136, 136, 136, 1);\n border-radius: calc(2px * var(--scale-factor));\n padding: calc(6px * var(--scale-factor));\n margin-left: calc(5px * var(--scale-factor));\n cursor: pointer;\n font: message-box;\n white-space: normal;\n word-wrap: break-word;\n pointer-events: auto;\n}\n\n.annotationLayer .popup > * {\n font-size: calc(9px * var(--scale-factor));\n}\n\n.annotationLayer .popup h1 {\n display: inline-block;\n}\n\n.annotationLayer .popupDate {\n display: inline-block;\n margin-left: calc(5px * var(--scale-factor));\n}\n\n.annotationLayer .popupContent {\n border-top: 1px solid rgba(51, 51, 51, 1);\n margin-top: calc(2px * var(--scale-factor));\n padding-top: calc(2px * var(--scale-factor));\n}\n\n.annotationLayer .richText > * {\n white-space: pre-wrap;\n font-size: calc(9px * var(--scale-factor));\n}\n\n.annotationLayer .highlightAnnotation,\n.annotationLayer .underlineAnnotation,\n.annotationLayer .squigglyAnnotation,\n.annotationLayer .strikeoutAnnotation,\n.annotationLayer .freeTextAnnotation,\n.annotationLayer .lineAnnotation svg line,\n.annotationLayer .squareAnnotation svg rect,\n.annotationLayer .circleAnnotation svg ellipse,\n.annotationLayer .polylineAnnotation svg polyline,\n.annotationLayer .polygonAnnotation svg polygon,\n.annotationLayer .caretAnnotation,\n.annotationLayer .inkAnnotation svg polyline,\n.annotationLayer .stampAnnotation,\n.annotationLayer .fileAttachmentAnnotation {\n cursor: pointer;\n}\n\n.annotationLayer section svg {\n position: absolute;\n width: 100%;\n height: 100%;\n}\n\n\n:root {\n --xfa-unfocused-field-background: url(\"data:image/svg+xml;charset=UTF-8,<svg width='1px' height='1px' xmlns='http://www.w3.org/2000/svg'><rect width='100%' height='100%' style='fill:rgba(0, 54, 255, 0.13);'/></svg>\");\n}\n\n@media (forced-colors: active) {\n .xfaLayer *:required {\n outline: 1.5px solid selectedItem;\n }\n}\n\n.xfaLayer .highlight {\n margin: -1px;\n padding: 1px;\n background-color: rgba(239, 203, 237, 1);\n border-radius: 4px;\n}\n\n.xfaLayer .highlight.appended {\n position: initial;\n}\n\n.xfaLayer .highlight.begin {\n border-radius: 4px 0 0 4px;\n}\n\n.xfaLayer .highlight.end {\n border-radius: 0 4px 4px 0;\n}\n\n.xfaLayer .highlight.middle {\n border-radius: 0;\n}\n\n.xfaLayer .highlight.selected {\n background-color: rgba(203, 223, 203, 1);\n}\n\n.xfaLayer ::-moz-selection {\n background: rgba(0, 0, 255, 1);\n}\n\n.xfaLayer ::selection {\n background: rgba(0, 0, 255, 1);\n}\n\n.xfaPage {\n overflow: hidden;\n position: relative;\n}\n\n.xfaContentarea {\n position: absolute;\n}\n\n.xfaPrintOnly {\n display: none;\n}\n\n.xfaLayer {\n position: absolute;\n text-align: initial;\n top: 0;\n left: 0;\n transform-origin: 0 0;\n line-height: 1.2;\n}\n\n.xfaLayer * {\n color: inherit;\n font: inherit;\n font-style: inherit;\n font-weight: inherit;\n font-kerning: inherit;\n letter-spacing: -0.01px;\n text-align: inherit;\n text-decoration: inherit;\n box-sizing: border-box;\n background-color: transparent;\n padding: 0;\n margin: 0;\n pointer-events: auto;\n line-height: inherit;\n}\n\n.xfaLayer *:required {\n outline: 1.5px solid red;\n}\n\n.xfaLayer div {\n pointer-events: none;\n}\n\n.xfaLayer svg {\n pointer-events: none;\n}\n\n.xfaLayer svg * {\n pointer-events: none;\n}\n\n.xfaLayer a {\n color: blue;\n}\n\n.xfaRich li {\n margin-left: 3em;\n}\n\n.xfaFont {\n color: black;\n font-weight: normal;\n font-kerning: none;\n font-size: 10px;\n font-style: normal;\n letter-spacing: 0;\n text-decoration: none;\n vertical-align: 0;\n}\n\n.xfaCaption {\n overflow: hidden;\n flex: 0 0 auto;\n}\n\n.xfaCaptionForCheckButton {\n overflow: hidden;\n flex: 1 1 auto;\n}\n\n.xfaLabel {\n height: 100%;\n width: 100%;\n}\n\n.xfaLeft {\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n\n.xfaRight {\n display: flex;\n flex-direction: row-reverse;\n align-items: center;\n}\n\n.xfaLeft > .xfaCaption,\n.xfaLeft > .xfaCaptionForCheckButton,\n.xfaRight > .xfaCaption,\n.xfaRight > .xfaCaptionForCheckButton {\n max-height: 100%;\n}\n\n.xfaTop {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n}\n\n.xfaBottom {\n display: flex;\n flex-direction: column-reverse;\n align-items: flex-start;\n}\n\n.xfaTop > .xfaCaption,\n.xfaTop > .xfaCaptionForCheckButton,\n.xfaBottom > .xfaCaption,\n.xfaBottom > .xfaCaptionForCheckButton {\n width: 100%;\n}\n\n.xfaBorder {\n background-color: transparent;\n position: absolute;\n pointer-events: none;\n}\n\n.xfaWrapped {\n width: 100%;\n height: 100%;\n}\n\n.xfaTextfield:focus,\n.xfaSelect:focus {\n background-image: none;\n background-color: transparent;\n outline: auto;\n outline-offset: -1px;\n}\n\n.xfaCheckbox:focus,\n.xfaRadio:focus {\n outline: auto;\n}\n\n.xfaTextfield,\n.xfaSelect {\n height: 100%;\n width: 100%;\n flex: 1 1 auto;\n border: none;\n resize: none;\n background-image: var(--xfa-unfocused-field-background);\n}\n\n.xfaTop > .xfaTextfield,\n.xfaTop > .xfaSelect,\n.xfaBottom > .xfaTextfield,\n.xfaBottom > .xfaSelect {\n flex: 0 1 auto;\n}\n\n.xfaButton {\n cursor: pointer;\n width: 100%;\n height: 100%;\n border: none;\n text-align: center;\n}\n\n.xfaLink {\n width: 100%;\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n}\n\n.xfaCheckbox,\n.xfaRadio {\n width: 100%;\n height: 100%;\n flex: 0 0 auto;\n border: none;\n}\n\n.xfaRich {\n white-space: pre-wrap;\n width: 100%;\n height: 100%;\n}\n\n.xfaImage {\n -o-object-position: left top;\n object-position: left top;\n -o-object-fit: contain;\n object-fit: contain;\n width: 100%;\n height: 100%;\n}\n\n.xfaLrTb,\n.xfaRlTb,\n.xfaTb {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n}\n\n.xfaLr {\n display: flex;\n flex-direction: row;\n align-items: stretch;\n}\n\n.xfaRl {\n display: flex;\n flex-direction: row-reverse;\n align-items: stretch;\n}\n\n.xfaTb > div {\n justify-content: left;\n}\n\n.xfaPosition {\n position: relative;\n}\n\n.xfaArea {\n position: relative;\n}\n\n.xfaValignMiddle {\n display: flex;\n align-items: center;\n}\n\n.xfaTable {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n}\n\n.xfaTable .xfaRow {\n display: flex;\n flex-direction: row;\n align-items: stretch;\n}\n\n.xfaTable .xfaRlRow {\n display: flex;\n flex-direction: row-reverse;\n align-items: stretch;\n flex: 1;\n}\n\n.xfaTable .xfaRlRow > div {\n flex: 1;\n}\n\n.xfaNonInteractive input,\n.xfaNonInteractive textarea,\n.xfaDisabled input,\n.xfaDisabled textarea,\n.xfaReadOnly input,\n.xfaReadOnly textarea {\n background: initial;\n}\n\n@media print {\n .xfaTextfield,\n .xfaSelect {\n background: transparent;\n }\n\n .xfaSelect {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n text-indent: 1px;\n text-overflow: \"\";\n }\n}\n\n\n:root {\n --focus-outline: solid 2px red;\n --hover-outline: dashed 2px blue;\n --freetext-line-height: 1.35;\n --freetext-padding: 2px;\n}\n\n@media (forced-colors: active) {\n :root {\n --focus-outline: solid 3px ButtonText;\n --hover-outline: dashed 3px ButtonText;\n }\n}\n\n[data-editor-rotation=\"90\"] {\n transform: rotate(90deg);\n}\n[data-editor-rotation=\"180\"] {\n transform: rotate(180deg);\n}\n[data-editor-rotation=\"270\"] {\n transform: rotate(270deg);\n}\n\n.annotationEditorLayer {\n background: transparent;\n position: absolute;\n top: 0;\n left: 0;\n font-size: calc(100px * var(--scale-factor));\n transform-origin: 0 0;\n}\n\n.annotationEditorLayer .selectedEditor {\n outline: var(--focus-outline);\n resize: none;\n}\n\n.annotationEditorLayer .freeTextEditor {\n position: absolute;\n background: transparent;\n border-radius: 3px;\n padding: calc(var(--freetext-padding) * var(--scale-factor));\n resize: none;\n width: auto;\n height: auto;\n z-index: 1;\n transform-origin: 0 0;\n touch-action: none;\n}\n\n.annotationEditorLayer .freeTextEditor .internal {\n background: transparent;\n border: none;\n top: 0;\n left: 0;\n overflow: visible;\n white-space: nowrap;\n resize: none;\n font: 10px sans-serif;\n line-height: var(--freetext-line-height);\n}\n\n.annotationEditorLayer .freeTextEditor .overlay {\n position: absolute;\n display: none;\n background: transparent;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.annotationEditorLayer .freeTextEditor .overlay.enabled {\n display: block;\n}\n\n.annotationEditorLayer .freeTextEditor .internal:empty::before {\n content: attr(default-content);\n color: gray;\n}\n\n.annotationEditorLayer .freeTextEditor .internal:focus {\n outline: none;\n}\n\n.annotationEditorLayer .inkEditor.disabled {\n resize: none;\n}\n\n.annotationEditorLayer .inkEditor.disabled.selectedEditor {\n resize: horizontal;\n}\n\n.annotationEditorLayer .freeTextEditor:hover:not(.selectedEditor),\n.annotationEditorLayer .inkEditor:hover:not(.selectedEditor) {\n outline: var(--hover-outline);\n}\n\n.annotationEditorLayer .inkEditor {\n position: absolute;\n background: transparent;\n border-radius: 3px;\n overflow: auto;\n width: 100%;\n height: 100%;\n z-index: 1;\n transform-origin: 0 0;\n cursor: auto;\n}\n\n.annotationEditorLayer .inkEditor.editing {\n resize: none;\n cursor: var(--editorInk-editing-cursor), pointer;\n}\n\n.annotationEditorLayer .inkEditor .inkEditorCanvas {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n touch-action: none;\n}\n\n:root {\n --viewer-container-height: 0;\n --pdfViewer-padding-bottom: 0;\n --page-margin: 1px auto -8px;\n --page-border: 9px solid transparent;\n --page-border-image: url(images/shadow.png) 9 9 repeat;\n --spreadHorizontalWrapped-margin-LR: -3.5px;\n --scale-factor: 1;\n}\n\n@media screen and (forced-colors: active) {\n :root {\n --pdfViewer-padding-bottom: 9px;\n --page-margin: 8px auto -1px;\n --page-border: 1px solid CanvasText;\n --page-border-image: none;\n --spreadHorizontalWrapped-margin-LR: 3.5px;\n }\n}\n\n.pdfViewer,\n.pdfViewer *,\n.pdfViewer *::before,\n.pdfViewer *::after {\n box-sizing: content-box;\n}\n\n[data-main-rotation=\"90\"] {\n transform: rotate(90deg) translateY(-100%);\n}\n[data-main-rotation=\"180\"] {\n transform: rotate(180deg) translate(-100%, -100%);\n}\n[data-main-rotation=\"270\"] {\n transform: rotate(270deg) translateX(-100%);\n}\n\n.pdfViewer {\n padding-bottom: var(--pdfViewer-padding-bottom);\n}\n\n.pdfViewer .canvasWrapper {\n overflow: hidden;\n width: 100%;\n height: 100%;\n}\n\n.pdfViewer .page {\n --user-unit: 1;\n --total-scale-factor: calc(var(--scale-factor) * var(--user-unit));\n --scale-round-x: 1px;\n --scale-round-y: 1px;\n direction: ltr;\n width: 816px;\n height: 1056px;\n margin: var(--page-margin);\n position: relative;\n overflow: visible;\n border: var(--page-border);\n -o-border-image: var(--page-border-image);\n border-image: var(--page-border-image);\n background-clip: content-box;\n background-color: rgba(255, 255, 255, 1);\n}\n\n.pdfViewer .dummyPage {\n position: relative;\n width: 0;\n height: var(--viewer-container-height);\n}\n\n.pdfViewer.removePageBorders .page {\n margin: 0 auto 10px;\n border: none;\n}\n\n.pdfViewer.singlePageView {\n display: inline-block;\n}\n\n.pdfViewer.singlePageView .page {\n margin: 0;\n border: none;\n}\n\n.pdfViewer.scrollHorizontal,\n.pdfViewer.scrollWrapped,\n.spread {\n margin-left: 3.5px;\n margin-right: 3.5px;\n text-align: center;\n}\n\n.pdfViewer.scrollHorizontal,\n.spread {\n white-space: nowrap;\n}\n\n.pdfViewer.removePageBorders,\n.pdfViewer.scrollHorizontal .spread,\n.pdfViewer.scrollWrapped .spread {\n margin-left: 0;\n margin-right: 0;\n}\n\n.spread .page,\n.spread .dummyPage,\n.pdfViewer.scrollHorizontal .page,\n.pdfViewer.scrollWrapped .page,\n.pdfViewer.scrollHorizontal .spread,\n.pdfViewer.scrollWrapped .spread {\n display: inline-block;\n vertical-align: middle;\n}\n\n.spread .page,\n.pdfViewer.scrollHorizontal .page,\n.pdfViewer.scrollWrapped .page {\n margin-left: var(--spreadHorizontalWrapped-margin-LR);\n margin-right: var(--spreadHorizontalWrapped-margin-LR);\n}\n\n.pdfViewer.removePageBorders .spread .page,\n.pdfViewer.removePageBorders.scrollHorizontal .page,\n.pdfViewer.removePageBorders.scrollWrapped .page {\n margin-left: 5px;\n margin-right: 5px;\n}\n\n.pdfViewer .page canvas {\n position: absolute;\n top: 0;\n left: 0;\n margin: 0;\n display: block;\n width: 100%;\n height: 100%;\n contain: content;\n}\n\n.pdfViewer .page canvas[hidden] {\n display: none;\n}\n\n.pdfViewer .page .loadingIcon {\n position: absolute;\n display: block;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n background: url(\"./images/loading-icon.gif\") center no-repeat;\n}\n.pdfViewer .page .loadingIcon.notVisible {\n background: none;\n}\n\n.pdfViewer.enablePermissions .textLayer span {\n -webkit-user-select: none !important;\n -moz-user-select: none !important;\n user-select: none !important;\n cursor: not-allowed;\n}\n\n.pdfPresentationMode .pdfViewer {\n padding-bottom: 0;\n}\n\n.pdfPresentationMode .spread {\n margin: 0;\n}\n\n.pdfPresentationMode .pdfViewer .page {\n margin: 0 auto;\n border: 2px solid transparent;\n}\n\n\n.pdf-shell {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n min-height: 0;\n color: #1f2937;\n background: #edf2f7;\n}\n\n.pdf-toolbar {\n z-index: 2;\n display: flex;\n align-items: center;\n gap: 10px;\n min-height: 48px;\n padding: 6px 12px;\n border-bottom: 1px solid #d7dee8;\n background: #ffffff;\n box-shadow: 0 1px 4px rgb(15 23 42 / 8%);\n}\n\n.pdf-toolbar-group {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n height: 36px;\n padding: 0 6px;\n border: 1px solid #dde5ef;\n border-radius: 8px;\n background: #f8fafc;\n}\n\n.pdf-toolbar-group--zoom {\n margin-left: auto;\n}\n\n.pdf-toolbar-group--rotate {\n flex-shrink: 0;\n}\n\n.pdf-icon-button,\n.pdf-scale-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: 30px;\n border: 1px solid transparent;\n border-radius: 6px;\n color: #334155;\n background: transparent;\n font: inherit;\n line-height: 1;\n cursor: pointer;\n transition: background-color 0.16s ease, border-color 0.16s ease, color 0.16s ease;\n}\n\n.pdf-icon-button {\n width: 30px;\n font-size: 18px;\n}\n\n.pdf-scale-button {\n width: 64px;\n font-size: 13px;\n font-weight: 600;\n}\n\n.pdf-icon-button:hover:not(:disabled),\n.pdf-scale-button:hover {\n border-color: #b9c8d8;\n color: #1769d8;\n background: #edf5ff;\n}\n\n.pdf-icon-button:disabled {\n color: #a8b3c0;\n cursor: not-allowed;\n}\n\n.pdf-icon-button--active {\n border-color: #9ac2ff;\n color: #1769d8;\n background: #e7f1ff;\n}\n\n.pdf-panel-icon {\n position: relative;\n display: block;\n width: 16px;\n height: 14px;\n border: 2px solid currentColor;\n border-radius: 3px;\n}\n\n.pdf-panel-icon::before {\n position: absolute;\n top: -2px;\n bottom: -2px;\n left: 4px;\n width: 2px;\n background: currentColor;\n content: '';\n}\n\n.pdf-page-meter {\n display: inline-flex;\n align-items: baseline;\n justify-content: center;\n min-width: 72px;\n gap: 3px;\n font-size: 13px;\n color: #64748b;\n white-space: nowrap;\n}\n\n.pdf-page-meter strong {\n color: #1e293b;\n font-size: 14px;\n}\n\n.pdf-rotation-meter {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 42px;\n color: #64748b;\n font-size: 13px;\n font-weight: 700;\n white-space: nowrap;\n}\n\n.pdf-content {\n position: relative;\n display: grid;\n grid-template-columns: clamp(148px, 22%, 220px) minmax(0, 1fr);\n flex: 1;\n min-height: 0;\n}\n\n.pdf-shell--nav-hidden .pdf-content {\n grid-template-columns: minmax(0, 1fr);\n}\n\n.pdf-nav-pane {\n display: flex;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n border-right: 1px solid #d7dee8;\n background: #f8fafc;\n}\n\n.pdf-nav-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: 44px;\n padding: 0 12px;\n border-bottom: 1px solid #e3e9f1;\n color: #475569;\n font-size: 13px;\n}\n\n.pdf-nav-head strong {\n color: #1e293b;\n font-size: 12px;\n}\n\n.pdf-nav-tabs {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 4px;\n padding: 8px;\n border-bottom: 1px solid #e3e9f1;\n background: #f8fafc;\n}\n\n.pdf-nav-tabs button {\n min-width: 0;\n height: 30px;\n border: 1px solid transparent;\n border-radius: 6px;\n color: #64748b;\n background: transparent;\n font: inherit;\n font-size: 12px;\n font-weight: 700;\n cursor: pointer;\n}\n\n.pdf-nav-tabs button:hover,\n.pdf-nav-tabs button.active {\n border-color: #b9d4f6;\n color: #1769d8;\n background: #edf5ff;\n}\n\n.pdf-page-list {\n flex: 1;\n min-height: 0;\n display: grid;\n align-content: start;\n gap: 8px;\n padding: 10px;\n overflow-y: auto;\n}\n\n.pdf-page-button {\n display: grid;\n grid-template-columns: 42px minmax(0, 1fr);\n align-items: center;\n gap: 10px;\n width: 100%;\n min-height: 54px;\n padding: 6px 8px;\n border: 1px solid #dce4ee;\n border-radius: 8px;\n color: #334155;\n background: #ffffff;\n cursor: pointer;\n text-align: left;\n transition: border-color 0.16s ease, box-shadow 0.16s ease, background-color 0.16s ease;\n}\n\n.pdf-page-button:hover {\n border-color: #a9c5ea;\n background: #f3f8ff;\n}\n\n.pdf-page-button--active {\n border-color: #408fff;\n background: #eaf3ff;\n box-shadow: inset 3px 0 0 #408fff;\n}\n\n.pdf-page-thumb {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 34px;\n height: 42px;\n border: 1px solid #d6e1ee;\n border-radius: 4px;\n color: #1769d8;\n background: linear-gradient(180deg, #ffffff 0%, #edf5ff 100%);\n font-size: 12px;\n font-weight: 700;\n}\n\n.pdf-page-label {\n min-width: 0;\n overflow: hidden;\n font-size: 13px;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.pdf-outline-list {\n flex: 1;\n min-height: 0;\n display: grid;\n align-content: start;\n gap: 4px;\n padding: 8px;\n overflow-y: auto;\n}\n\n.pdf-outline-button {\n --outline-depth: 0;\n display: grid;\n grid-template-columns: 16px minmax(0, 1fr);\n align-items: center;\n gap: 6px;\n width: 100%;\n min-height: 32px;\n padding: 5px 7px 5px calc(7px + var(--outline-depth) * 14px);\n border: 1px solid transparent;\n border-radius: 6px;\n color: #334155;\n background: transparent;\n font: inherit;\n text-align: left;\n cursor: pointer;\n}\n\n.pdf-outline-button:hover {\n border-color: #c7d7eb;\n background: #ffffff;\n}\n\n.pdf-outline-toggle {\n position: relative;\n width: 14px;\n height: 14px;\n border-radius: 4px;\n color: #64748b;\n}\n\n.pdf-outline-toggle::before {\n position: absolute;\n top: 3px;\n left: 4px;\n width: 6px;\n height: 6px;\n border-right: 2px solid currentColor;\n border-bottom: 2px solid currentColor;\n content: '';\n transform: rotate(-45deg);\n transition: transform 0.16s ease;\n}\n\n.pdf-outline-toggle--open::before {\n transform: rotate(45deg);\n}\n\n.pdf-outline-toggle--empty::before {\n display: none;\n}\n\n.pdf-outline-title {\n min-width: 0;\n overflow: hidden;\n font-size: 12px;\n line-height: 1.35;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.pdf-outline-empty {\n margin: 24px 8px;\n padding: 14px 10px;\n border: 1px dashed #cbd5e1;\n border-radius: 8px;\n color: #64748b;\n background: #ffffff;\n font-size: 12px;\n text-align: center;\n}\n\n.pdfViewer {\n margin: 0 auto;\n padding: 18px 14px 28px;\n}\n\n.pdf-viewport {\n position: relative;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n}\n\n.pdf-wrapper {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n overflow: auto;\n background: #e8edf4;\n}\n\n.pdf-state {\n position: absolute;\n top: 50%;\n left: 50%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 168px;\n min-height: 42px;\n padding: 0 16px;\n border: 1px solid #d7dee8;\n border-radius: 8px;\n color: #475569;\n background: #ffffff;\n box-shadow: 0 10px 30px rgb(15 23 42 / 12%);\n transform: translate(-50%, -50%);\n}\n\n.pdf-state--error {\n max-width: min(460px, calc(100% - 32px));\n color: #b42318;\n text-align: center;\n}\n\n@media (max-width: 720px) {\n .pdf-toolbar {\n flex-wrap: wrap;\n min-height: 88px;\n align-content: center;\n }\n\n .pdf-toolbar-group--zoom {\n margin-left: 0;\n }\n\n .pdf-content,\n .pdf-shell--nav-hidden .pdf-content {\n grid-template-columns: minmax(0, 1fr);\n }\n\n .pdf-nav-pane {\n position: absolute;\n z-index: 3;\n top: 0;\n bottom: 0;\n left: 0;\n width: min(78vw, 240px);\n box-shadow: 10px 0 24px rgb(15 23 42 / 14%);\n }\n}\n";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export const pdfViewerStyle = "/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n.textLayer {\n color-scheme: only light;\n position: absolute;\n text-align: initial;\n inset: 0;\n overflow: clip;\n opacity: 1;\n line-height: 1;\n letter-spacing: normal;\n word-spacing: normal;\n -webkit-text-size-adjust: none;\n -moz-text-size-adjust: none;\n text-size-adjust: none;\n forced-color-adjust: none;\n transform-origin: 0 0;\n caret-color: CanvasText;\n z-index: 0;\n --min-font-size: 1;\n --text-scale-factor: calc(var(--total-scale-factor) * var(--min-font-size));\n --min-font-size-inv: calc(1 / var(--min-font-size));\n}\n\n.textLayer.highlighting {\n touch-action: none;\n}\n\n.textLayer :is(span, br) {\n color: transparent;\n position: absolute;\n white-space: pre;\n cursor: text;\n transform-origin: 0% 0%;\n -webkit-user-select: text;\n -moz-user-select: text;\n user-select: text;\n}\n\n.textLayer > :not(.markedContent),\n.textLayer .markedContent span:not(.markedContent) {\n z-index: 1;\n --font-height: 0;\n font-size: calc(var(--text-scale-factor) * var(--font-height));\n --scale-x: 1;\n --rotate: 0deg;\n transform: rotate(var(--rotate)) scaleX(var(--scale-x)) scale(var(--min-font-size-inv));\n}\n\n.textLayer .markedContent {\n display: contents;\n}\n\n.textLayer .markedContent.highlight {\n background: transparent;\n backdrop-filter: none;\n margin: 0;\n padding: 0;\n}\n\n.textLayer span[role='img'] {\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n cursor: default;\n}\n\n.textLayer .highlight {\n --highlight-bg-color: rgb(180 0 170 / 0.25);\n --highlight-selected-bg-color: rgb(0 100 0 / 0.25);\n --highlight-backdrop-filter: none;\n --highlight-selected-backdrop-filter: none;\n margin: -1px;\n padding: 1px;\n background-color: var(--highlight-bg-color);\n backdrop-filter: var(--highlight-backdrop-filter);\n border-radius: 4px;\n}\n\n.textLayer .highlight.appended {\n position: initial;\n}\n\n.textLayer .highlight.begin {\n border-radius: 4px 0 0 4px;\n}\n\n.textLayer .highlight.end {\n border-radius: 0 4px 4px 0;\n}\n\n.textLayer .highlight.middle {\n border-radius: 0;\n}\n\n.textLayer .highlight.selected {\n background-color: var(--highlight-selected-bg-color);\n backdrop-filter: var(--highlight-selected-backdrop-filter);\n scroll-margin-top: 50px;\n}\n\n.textLayer ::-moz-selection {\n background: transparent;\n}\n\n.textLayer ::selection {\n background: transparent;\n}\n\n.textLayer br::-moz-selection {\n background: transparent;\n}\n\n.textLayer br::selection {\n background: transparent;\n}\n\n.textLayer .endOfContent {\n display: block;\n position: absolute;\n inset: 100% 0 0;\n z-index: 0;\n cursor: default;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n\n.textLayer.selecting .endOfContent {\n top: 0;\n}\n\n.textLayerImages {\n position: absolute;\n inset: 0;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n\n.textLayerImages canvas {\n position: absolute;\n transform-origin: 0% 0%;\n}\n\n@media screen and (forced-colors: active) {\n .textLayer .highlight {\n --highlight-bg-color: transparent;\n --highlight-selected-bg-color: transparent;\n --highlight-backdrop-filter: var(--hcm-highlight-filter);\n --highlight-selected-backdrop-filter: var(--hcm-highlight-selected-filter);\n }\n}\n\n\n:root {\n --annotation-unfocused-field-background: url(\"data:image/svg+xml;charset=UTF-8,<svg width='1px' height='1px' xmlns='http://www.w3.org/2000/svg'><rect width='100%' height='100%' style='fill:rgba(0, 54, 255, 0.13);'/></svg>\");\n}\n\n@media (forced-colors: active) {\n .annotationLayer .textWidgetAnnotation input:required,\n .annotationLayer .textWidgetAnnotation textarea:required,\n .annotationLayer .choiceWidgetAnnotation select:required,\n .annotationLayer .buttonWidgetAnnotation.checkBox input:required,\n .annotationLayer .buttonWidgetAnnotation.radioButton input:required {\n outline: 1.5px solid selectedItem;\n }\n}\n\n.annotationLayer {\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n transform-origin: 0 0;\n}\n\n.annotationLayer section {\n position: absolute;\n text-align: initial;\n pointer-events: auto;\n box-sizing: border-box;\n transform-origin: 0 0;\n}\n\n.annotationLayer .linkAnnotation > a,\n.annotationLayer .buttonWidgetAnnotation.pushButton > a {\n position: absolute;\n font-size: 1em;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.annotationLayer .buttonWidgetAnnotation.pushButton > canvas {\n width: 100%;\n height: 100%;\n}\n\n.annotationLayer .linkAnnotation > a:hover,\n.annotationLayer .buttonWidgetAnnotation.pushButton > a:hover {\n opacity: 0.2;\n background: rgba(255, 255, 0, 1);\n box-shadow: 0 2px 10px rgba(255, 255, 0, 1);\n}\n\n.annotationLayer .textAnnotation img {\n position: absolute;\n cursor: pointer;\n width: 100%;\n height: 100%;\n}\n\n.annotationLayer .textWidgetAnnotation input,\n.annotationLayer .textWidgetAnnotation textarea,\n.annotationLayer .choiceWidgetAnnotation select,\n.annotationLayer .buttonWidgetAnnotation.checkBox input,\n.annotationLayer .buttonWidgetAnnotation.radioButton input {\n background-image: var(--annotation-unfocused-field-background);\n border: 1px solid transparent;\n box-sizing: border-box;\n font: calc(9px * var(--scale-factor)) sans-serif;\n height: 100%;\n margin: 0;\n vertical-align: top;\n width: 100%;\n}\n\n.annotationLayer .textWidgetAnnotation input:required,\n.annotationLayer .textWidgetAnnotation textarea:required,\n.annotationLayer .choiceWidgetAnnotation select:required,\n.annotationLayer .buttonWidgetAnnotation.checkBox input:required,\n.annotationLayer .buttonWidgetAnnotation.radioButton input:required {\n outline: 1.5px solid red;\n}\n\n.annotationLayer .choiceWidgetAnnotation select option {\n padding: 0;\n}\n\n.annotationLayer .buttonWidgetAnnotation.radioButton input {\n border-radius: 50%;\n}\n\n.annotationLayer .textWidgetAnnotation textarea {\n resize: none;\n}\n\n.annotationLayer .textWidgetAnnotation input[disabled],\n.annotationLayer .textWidgetAnnotation textarea[disabled],\n.annotationLayer .choiceWidgetAnnotation select[disabled],\n.annotationLayer .buttonWidgetAnnotation.checkBox input[disabled],\n.annotationLayer .buttonWidgetAnnotation.radioButton input[disabled] {\n background: none;\n border: 1px solid transparent;\n cursor: not-allowed;\n}\n\n.annotationLayer .textWidgetAnnotation input:hover,\n.annotationLayer .textWidgetAnnotation textarea:hover,\n.annotationLayer .choiceWidgetAnnotation select:hover,\n.annotationLayer .buttonWidgetAnnotation.checkBox input:hover,\n.annotationLayer .buttonWidgetAnnotation.radioButton input:hover {\n border: 1px solid rgba(0, 0, 0, 1);\n}\n\n.annotationLayer .textWidgetAnnotation input:focus,\n.annotationLayer .textWidgetAnnotation textarea:focus,\n.annotationLayer .choiceWidgetAnnotation select:focus {\n background: none;\n border: 1px solid transparent;\n}\n\n.annotationLayer .textWidgetAnnotation input :focus,\n.annotationLayer .textWidgetAnnotation textarea :focus,\n.annotationLayer .choiceWidgetAnnotation select :focus,\n.annotationLayer .buttonWidgetAnnotation.checkBox :focus,\n.annotationLayer .buttonWidgetAnnotation.radioButton :focus {\n background-image: none;\n background-color: transparent;\n outline: auto;\n}\n\n.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before,\n.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after,\n.annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before {\n background-color: CanvasText;\n content: \"\";\n display: block;\n position: absolute;\n}\n\n.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before,\n.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after {\n height: 80%;\n left: 45%;\n width: 1px;\n}\n\n.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before {\n transform: rotate(45deg);\n}\n\n.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after {\n transform: rotate(-45deg);\n}\n\n.annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before {\n border-radius: 50%;\n height: 50%;\n left: 30%;\n top: 20%;\n width: 50%;\n}\n\n.annotationLayer .textWidgetAnnotation input.comb {\n font-family: monospace;\n padding-left: 2px;\n padding-right: 0;\n}\n\n.annotationLayer .textWidgetAnnotation input.comb:focus {\n /*\n * Letter spacing is placed on the right side of each character. Hence, the\n * letter spacing of the last character may be placed outside the visible\n * area, causing horizontal scrolling. We avoid this by extending the width\n * when the element has focus and revert this when it loses focus.\n */\n width: 103%;\n}\n\n.annotationLayer .buttonWidgetAnnotation.checkBox input,\n.annotationLayer .buttonWidgetAnnotation.radioButton input {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n\n.annotationLayer .popupTriggerArea {\n height: 100%;\n width: 100%;\n}\n\n.annotationLayer .popupWrapper {\n position: absolute;\n font-size: calc(9px * var(--scale-factor));\n width: 100%;\n min-width: calc(180px * var(--scale-factor));\n pointer-events: none;\n}\n\n.annotationLayer .popup {\n position: absolute;\n z-index: 200;\n max-width: calc(180px * var(--scale-factor));\n background-color: rgba(255, 255, 153, 1);\n box-shadow: 0 calc(2px * var(--scale-factor)) calc(5px * var(--scale-factor))\n rgba(136, 136, 136, 1);\n border-radius: calc(2px * var(--scale-factor));\n padding: calc(6px * var(--scale-factor));\n margin-left: calc(5px * var(--scale-factor));\n cursor: pointer;\n font: message-box;\n white-space: normal;\n word-wrap: break-word;\n pointer-events: auto;\n}\n\n.annotationLayer .popup > * {\n font-size: calc(9px * var(--scale-factor));\n}\n\n.annotationLayer .popup h1 {\n display: inline-block;\n}\n\n.annotationLayer .popupDate {\n display: inline-block;\n margin-left: calc(5px * var(--scale-factor));\n}\n\n.annotationLayer .popupContent {\n border-top: 1px solid rgba(51, 51, 51, 1);\n margin-top: calc(2px * var(--scale-factor));\n padding-top: calc(2px * var(--scale-factor));\n}\n\n.annotationLayer .richText > * {\n white-space: pre-wrap;\n font-size: calc(9px * var(--scale-factor));\n}\n\n.annotationLayer .highlightAnnotation,\n.annotationLayer .underlineAnnotation,\n.annotationLayer .squigglyAnnotation,\n.annotationLayer .strikeoutAnnotation,\n.annotationLayer .freeTextAnnotation,\n.annotationLayer .lineAnnotation svg line,\n.annotationLayer .squareAnnotation svg rect,\n.annotationLayer .circleAnnotation svg ellipse,\n.annotationLayer .polylineAnnotation svg polyline,\n.annotationLayer .polygonAnnotation svg polygon,\n.annotationLayer .caretAnnotation,\n.annotationLayer .inkAnnotation svg polyline,\n.annotationLayer .stampAnnotation,\n.annotationLayer .fileAttachmentAnnotation {\n cursor: pointer;\n}\n\n.annotationLayer section svg {\n position: absolute;\n width: 100%;\n height: 100%;\n}\n\n\n:root {\n --xfa-unfocused-field-background: url(\"data:image/svg+xml;charset=UTF-8,<svg width='1px' height='1px' xmlns='http://www.w3.org/2000/svg'><rect width='100%' height='100%' style='fill:rgba(0, 54, 255, 0.13);'/></svg>\");\n}\n\n@media (forced-colors: active) {\n .xfaLayer *:required {\n outline: 1.5px solid selectedItem;\n }\n}\n\n.xfaLayer .highlight {\n margin: -1px;\n padding: 1px;\n background-color: rgba(239, 203, 237, 1);\n border-radius: 4px;\n}\n\n.xfaLayer .highlight.appended {\n position: initial;\n}\n\n.xfaLayer .highlight.begin {\n border-radius: 4px 0 0 4px;\n}\n\n.xfaLayer .highlight.end {\n border-radius: 0 4px 4px 0;\n}\n\n.xfaLayer .highlight.middle {\n border-radius: 0;\n}\n\n.xfaLayer .highlight.selected {\n background-color: rgba(203, 223, 203, 1);\n}\n\n.xfaLayer ::-moz-selection {\n background: rgba(0, 0, 255, 1);\n}\n\n.xfaLayer ::selection {\n background: rgba(0, 0, 255, 1);\n}\n\n.xfaPage {\n overflow: hidden;\n position: relative;\n}\n\n.xfaContentarea {\n position: absolute;\n}\n\n.xfaPrintOnly {\n display: none;\n}\n\n.xfaLayer {\n position: absolute;\n text-align: initial;\n top: 0;\n left: 0;\n transform-origin: 0 0;\n line-height: 1.2;\n}\n\n.xfaLayer * {\n color: inherit;\n font: inherit;\n font-style: inherit;\n font-weight: inherit;\n font-kerning: inherit;\n letter-spacing: -0.01px;\n text-align: inherit;\n text-decoration: inherit;\n box-sizing: border-box;\n background-color: transparent;\n padding: 0;\n margin: 0;\n pointer-events: auto;\n line-height: inherit;\n}\n\n.xfaLayer *:required {\n outline: 1.5px solid red;\n}\n\n.xfaLayer div {\n pointer-events: none;\n}\n\n.xfaLayer svg {\n pointer-events: none;\n}\n\n.xfaLayer svg * {\n pointer-events: none;\n}\n\n.xfaLayer a {\n color: blue;\n}\n\n.xfaRich li {\n margin-left: 3em;\n}\n\n.xfaFont {\n color: black;\n font-weight: normal;\n font-kerning: none;\n font-size: 10px;\n font-style: normal;\n letter-spacing: 0;\n text-decoration: none;\n vertical-align: 0;\n}\n\n.xfaCaption {\n overflow: hidden;\n flex: 0 0 auto;\n}\n\n.xfaCaptionForCheckButton {\n overflow: hidden;\n flex: 1 1 auto;\n}\n\n.xfaLabel {\n height: 100%;\n width: 100%;\n}\n\n.xfaLeft {\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n\n.xfaRight {\n display: flex;\n flex-direction: row-reverse;\n align-items: center;\n}\n\n.xfaLeft > .xfaCaption,\n.xfaLeft > .xfaCaptionForCheckButton,\n.xfaRight > .xfaCaption,\n.xfaRight > .xfaCaptionForCheckButton {\n max-height: 100%;\n}\n\n.xfaTop {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n}\n\n.xfaBottom {\n display: flex;\n flex-direction: column-reverse;\n align-items: flex-start;\n}\n\n.xfaTop > .xfaCaption,\n.xfaTop > .xfaCaptionForCheckButton,\n.xfaBottom > .xfaCaption,\n.xfaBottom > .xfaCaptionForCheckButton {\n width: 100%;\n}\n\n.xfaBorder {\n background-color: transparent;\n position: absolute;\n pointer-events: none;\n}\n\n.xfaWrapped {\n width: 100%;\n height: 100%;\n}\n\n.xfaTextfield:focus,\n.xfaSelect:focus {\n background-image: none;\n background-color: transparent;\n outline: auto;\n outline-offset: -1px;\n}\n\n.xfaCheckbox:focus,\n.xfaRadio:focus {\n outline: auto;\n}\n\n.xfaTextfield,\n.xfaSelect {\n height: 100%;\n width: 100%;\n flex: 1 1 auto;\n border: none;\n resize: none;\n background-image: var(--xfa-unfocused-field-background);\n}\n\n.xfaTop > .xfaTextfield,\n.xfaTop > .xfaSelect,\n.xfaBottom > .xfaTextfield,\n.xfaBottom > .xfaSelect {\n flex: 0 1 auto;\n}\n\n.xfaButton {\n cursor: pointer;\n width: 100%;\n height: 100%;\n border: none;\n text-align: center;\n}\n\n.xfaLink {\n width: 100%;\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n}\n\n.xfaCheckbox,\n.xfaRadio {\n width: 100%;\n height: 100%;\n flex: 0 0 auto;\n border: none;\n}\n\n.xfaRich {\n white-space: pre-wrap;\n width: 100%;\n height: 100%;\n}\n\n.xfaImage {\n -o-object-position: left top;\n object-position: left top;\n -o-object-fit: contain;\n object-fit: contain;\n width: 100%;\n height: 100%;\n}\n\n.xfaLrTb,\n.xfaRlTb,\n.xfaTb {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n}\n\n.xfaLr {\n display: flex;\n flex-direction: row;\n align-items: stretch;\n}\n\n.xfaRl {\n display: flex;\n flex-direction: row-reverse;\n align-items: stretch;\n}\n\n.xfaTb > div {\n justify-content: left;\n}\n\n.xfaPosition {\n position: relative;\n}\n\n.xfaArea {\n position: relative;\n}\n\n.xfaValignMiddle {\n display: flex;\n align-items: center;\n}\n\n.xfaTable {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n}\n\n.xfaTable .xfaRow {\n display: flex;\n flex-direction: row;\n align-items: stretch;\n}\n\n.xfaTable .xfaRlRow {\n display: flex;\n flex-direction: row-reverse;\n align-items: stretch;\n flex: 1;\n}\n\n.xfaTable .xfaRlRow > div {\n flex: 1;\n}\n\n.xfaNonInteractive input,\n.xfaNonInteractive textarea,\n.xfaDisabled input,\n.xfaDisabled textarea,\n.xfaReadOnly input,\n.xfaReadOnly textarea {\n background: initial;\n}\n\n@media print {\n .xfaTextfield,\n .xfaSelect {\n background: transparent;\n }\n\n .xfaSelect {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n text-indent: 1px;\n text-overflow: \"\";\n }\n}\n\n\n:root {\n --focus-outline: solid 2px red;\n --hover-outline: dashed 2px blue;\n --freetext-line-height: 1.35;\n --freetext-padding: 2px;\n}\n\n@media (forced-colors: active) {\n :root {\n --focus-outline: solid 3px ButtonText;\n --hover-outline: dashed 3px ButtonText;\n }\n}\n\n[data-editor-rotation=\"90\"] {\n transform: rotate(90deg);\n}\n[data-editor-rotation=\"180\"] {\n transform: rotate(180deg);\n}\n[data-editor-rotation=\"270\"] {\n transform: rotate(270deg);\n}\n\n.annotationEditorLayer {\n background: transparent;\n position: absolute;\n top: 0;\n left: 0;\n font-size: calc(100px * var(--scale-factor));\n transform-origin: 0 0;\n}\n\n.annotationEditorLayer .selectedEditor {\n outline: var(--focus-outline);\n resize: none;\n}\n\n.annotationEditorLayer .freeTextEditor {\n position: absolute;\n background: transparent;\n border-radius: 3px;\n padding: calc(var(--freetext-padding) * var(--scale-factor));\n resize: none;\n width: auto;\n height: auto;\n z-index: 1;\n transform-origin: 0 0;\n touch-action: none;\n}\n\n.annotationEditorLayer .freeTextEditor .internal {\n background: transparent;\n border: none;\n top: 0;\n left: 0;\n overflow: visible;\n white-space: nowrap;\n resize: none;\n font: 10px sans-serif;\n line-height: var(--freetext-line-height);\n}\n\n.annotationEditorLayer .freeTextEditor .overlay {\n position: absolute;\n display: none;\n background: transparent;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.annotationEditorLayer .freeTextEditor .overlay.enabled {\n display: block;\n}\n\n.annotationEditorLayer .freeTextEditor .internal:empty::before {\n content: attr(default-content);\n color: gray;\n}\n\n.annotationEditorLayer .freeTextEditor .internal:focus {\n outline: none;\n}\n\n.annotationEditorLayer .inkEditor.disabled {\n resize: none;\n}\n\n.annotationEditorLayer .inkEditor.disabled.selectedEditor {\n resize: horizontal;\n}\n\n.annotationEditorLayer .freeTextEditor:hover:not(.selectedEditor),\n.annotationEditorLayer .inkEditor:hover:not(.selectedEditor) {\n outline: var(--hover-outline);\n}\n\n.annotationEditorLayer .inkEditor {\n position: absolute;\n background: transparent;\n border-radius: 3px;\n overflow: auto;\n width: 100%;\n height: 100%;\n z-index: 1;\n transform-origin: 0 0;\n cursor: auto;\n}\n\n.annotationEditorLayer .inkEditor.editing {\n resize: none;\n cursor: var(--editorInk-editing-cursor), pointer;\n}\n\n.annotationEditorLayer .inkEditor .inkEditorCanvas {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n touch-action: none;\n}\n\n:root {\n --viewer-container-height: 0;\n --pdfViewer-padding-bottom: 0;\n --page-margin: 1px auto -8px;\n --page-border: 9px solid transparent;\n --page-border-image: url(images/shadow.png) 9 9 repeat;\n --spreadHorizontalWrapped-margin-LR: -3.5px;\n --scale-factor: 1;\n}\n\n@media screen and (forced-colors: active) {\n :root {\n --pdfViewer-padding-bottom: 9px;\n --page-margin: 8px auto -1px;\n --page-border: 1px solid CanvasText;\n --page-border-image: none;\n --spreadHorizontalWrapped-margin-LR: 3.5px;\n }\n}\n\n.pdfViewer,\n.pdfViewer *,\n.pdfViewer *::before,\n.pdfViewer *::after {\n box-sizing: content-box;\n}\n\n[data-main-rotation=\"90\"] {\n transform: rotate(90deg) translateY(-100%);\n}\n[data-main-rotation=\"180\"] {\n transform: rotate(180deg) translate(-100%, -100%);\n}\n[data-main-rotation=\"270\"] {\n transform: rotate(270deg) translateX(-100%);\n}\n\n.pdfViewer {\n padding-bottom: var(--pdfViewer-padding-bottom);\n}\n\n.pdfViewer .canvasWrapper {\n overflow: hidden;\n width: 100%;\n height: 100%;\n}\n\n.pdfViewer .page {\n --user-unit: 1;\n --total-scale-factor: calc(var(--scale-factor) * var(--user-unit));\n --scale-round-x: 1px;\n --scale-round-y: 1px;\n direction: ltr;\n width: 816px;\n height: 1056px;\n margin: var(--page-margin);\n position: relative;\n overflow: visible;\n border: var(--page-border);\n -o-border-image: var(--page-border-image);\n border-image: var(--page-border-image);\n background-clip: content-box;\n background-color: rgba(255, 255, 255, 1);\n}\n\n.pdfViewer .dummyPage {\n position: relative;\n width: 0;\n height: var(--viewer-container-height);\n}\n\n.pdfViewer.removePageBorders .page {\n margin: 0 auto 10px;\n border: none;\n}\n\n.pdfViewer.singlePageView {\n display: inline-block;\n}\n\n.pdfViewer.singlePageView .page {\n margin: 0;\n border: none;\n}\n\n.pdfViewer.scrollHorizontal,\n.pdfViewer.scrollWrapped,\n.spread {\n margin-left: 3.5px;\n margin-right: 3.5px;\n text-align: center;\n}\n\n.pdfViewer.scrollHorizontal,\n.spread {\n white-space: nowrap;\n}\n\n.pdfViewer.removePageBorders,\n.pdfViewer.scrollHorizontal .spread,\n.pdfViewer.scrollWrapped .spread {\n margin-left: 0;\n margin-right: 0;\n}\n\n.spread .page,\n.spread .dummyPage,\n.pdfViewer.scrollHorizontal .page,\n.pdfViewer.scrollWrapped .page,\n.pdfViewer.scrollHorizontal .spread,\n.pdfViewer.scrollWrapped .spread {\n display: inline-block;\n vertical-align: middle;\n}\n\n.spread .page,\n.pdfViewer.scrollHorizontal .page,\n.pdfViewer.scrollWrapped .page {\n margin-left: var(--spreadHorizontalWrapped-margin-LR);\n margin-right: var(--spreadHorizontalWrapped-margin-LR);\n}\n\n.pdfViewer.removePageBorders .spread .page,\n.pdfViewer.removePageBorders.scrollHorizontal .page,\n.pdfViewer.removePageBorders.scrollWrapped .page {\n margin-left: 5px;\n margin-right: 5px;\n}\n\n.pdfViewer .page canvas {\n position: absolute;\n top: 0;\n left: 0;\n margin: 0;\n display: block;\n width: 100%;\n height: 100%;\n contain: content;\n}\n\n.pdfViewer .page canvas[hidden] {\n display: none;\n}\n\n.pdfViewer .page .loadingIcon {\n position: absolute;\n display: block;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n background: url(\"./images/loading-icon.gif\") center no-repeat;\n}\n.pdfViewer .page .loadingIcon.notVisible {\n background: none;\n}\n\n.pdfViewer.enablePermissions .textLayer span {\n -webkit-user-select: none !important;\n -moz-user-select: none !important;\n user-select: none !important;\n cursor: not-allowed;\n}\n\n.pdfPresentationMode .pdfViewer {\n padding-bottom: 0;\n}\n\n.pdfPresentationMode .spread {\n margin: 0;\n}\n\n.pdfPresentationMode .pdfViewer .page {\n margin: 0 auto;\n border: 2px solid transparent;\n}\n\n\n.pdf-shell {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n min-height: 0;\n color: #1f2937;\n background: #edf2f7;\n}\n\n.pdf-toolbar {\n z-index: 2;\n display: flex;\n align-items: center;\n gap: 10px;\n min-height: 48px;\n padding: 6px 12px;\n border-bottom: 1px solid #d7dee8;\n background: #ffffff;\n box-shadow: 0 1px 4px rgb(15 23 42 / 8%);\n}\n\n.pdf-toolbar-group {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n height: 36px;\n padding: 0 6px;\n border: 1px solid #dde5ef;\n border-radius: 8px;\n background: #f8fafc;\n}\n\n.pdf-toolbar-group--zoom {\n margin-left: auto;\n}\n\n.pdf-toolbar-group--rotate {\n flex-shrink: 0;\n}\n\n.pdf-icon-button,\n.pdf-scale-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: 30px;\n border: 1px solid transparent;\n border-radius: 6px;\n color: #334155;\n background: transparent;\n font: inherit;\n line-height: 1;\n cursor: pointer;\n transition: background-color 0.16s ease, border-color 0.16s ease, color 0.16s ease;\n}\n\n.pdf-icon-button {\n width: 30px;\n font-size: 18px;\n}\n\n.pdf-scale-button {\n width: 64px;\n font-size: 13px;\n font-weight: 600;\n}\n\n.pdf-icon-button:hover:not(:disabled),\n.pdf-scale-button:hover {\n border-color: #b9c8d8;\n color: #1769d8;\n background: #edf5ff;\n}\n\n.pdf-icon-button:disabled {\n color: #a8b3c0;\n cursor: not-allowed;\n}\n\n.pdf-icon-button--active {\n border-color: #9ac2ff;\n color: #1769d8;\n background: #e7f1ff;\n}\n\n.pdf-panel-icon {\n position: relative;\n display: block;\n width: 16px;\n height: 14px;\n border: 2px solid currentColor;\n border-radius: 3px;\n}\n\n.pdf-panel-icon::before {\n position: absolute;\n top: -2px;\n bottom: -2px;\n left: 4px;\n width: 2px;\n background: currentColor;\n content: '';\n}\n\n.pdf-page-meter {\n display: inline-flex;\n align-items: baseline;\n justify-content: center;\n min-width: 72px;\n gap: 3px;\n font-size: 13px;\n color: #64748b;\n white-space: nowrap;\n}\n\n.pdf-page-meter strong {\n color: #1e293b;\n font-size: 14px;\n}\n\n.pdf-rotation-meter {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 42px;\n color: #64748b;\n font-size: 13px;\n font-weight: 700;\n white-space: nowrap;\n}\n\n.pdf-content {\n position: relative;\n display: grid;\n grid-template-columns: clamp(148px, 22%, 220px) minmax(0, 1fr);\n flex: 1;\n min-height: 0;\n}\n\n.pdf-shell--nav-hidden .pdf-content {\n grid-template-columns: minmax(0, 1fr);\n}\n\n.pdf-nav-pane {\n display: flex;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n border-right: 1px solid #d7dee8;\n background: #f8fafc;\n}\n\n.pdf-nav-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: 44px;\n padding: 0 12px;\n border-bottom: 1px solid #e3e9f1;\n color: #475569;\n font-size: 13px;\n}\n\n.pdf-nav-head strong {\n color: #1e293b;\n font-size: 12px;\n}\n\n.pdf-nav-tabs {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 4px;\n padding: 8px;\n border-bottom: 1px solid #e3e9f1;\n background: #f8fafc;\n}\n\n.pdf-nav-tabs button {\n min-width: 0;\n height: 30px;\n border: 1px solid transparent;\n border-radius: 6px;\n color: #64748b;\n background: transparent;\n font: inherit;\n font-size: 12px;\n font-weight: 700;\n cursor: pointer;\n}\n\n.pdf-nav-tabs button:hover,\n.pdf-nav-tabs button.active {\n border-color: #b9d4f6;\n color: #1769d8;\n background: #edf5ff;\n}\n\n.pdf-page-list {\n flex: 1;\n min-height: 0;\n display: grid;\n align-content: start;\n gap: 8px;\n padding: 10px;\n overflow-y: auto;\n}\n\n.pdf-page-button {\n display: grid;\n grid-template-columns: 42px minmax(0, 1fr);\n align-items: center;\n gap: 10px;\n width: 100%;\n min-height: 54px;\n padding: 6px 8px;\n border: 1px solid #dce4ee;\n border-radius: 8px;\n color: #334155;\n background: #ffffff;\n cursor: pointer;\n text-align: left;\n transition: border-color 0.16s ease, box-shadow 0.16s ease, background-color 0.16s ease;\n}\n\n.pdf-page-button:hover {\n border-color: #a9c5ea;\n background: #f3f8ff;\n}\n\n.pdf-page-button--active {\n border-color: #408fff;\n background: #eaf3ff;\n box-shadow: inset 3px 0 0 #408fff;\n}\n\n.pdf-page-thumb {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 34px;\n height: 42px;\n border: 1px solid #d6e1ee;\n border-radius: 4px;\n color: #1769d8;\n background: linear-gradient(180deg, #ffffff 0%, #edf5ff 100%);\n font-size: 12px;\n font-weight: 700;\n}\n\n.pdf-page-label {\n min-width: 0;\n overflow: hidden;\n font-size: 13px;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.pdf-outline-list {\n flex: 1;\n min-height: 0;\n display: grid;\n align-content: start;\n gap: 4px;\n padding: 8px;\n overflow-y: auto;\n}\n\n.pdf-outline-button {\n --outline-depth: 0;\n display: grid;\n grid-template-columns: 16px minmax(0, 1fr);\n align-items: center;\n gap: 6px;\n width: 100%;\n min-height: 32px;\n padding: 5px 7px 5px calc(7px + var(--outline-depth) * 14px);\n border: 1px solid transparent;\n border-radius: 6px;\n color: #334155;\n background: transparent;\n font: inherit;\n text-align: left;\n cursor: pointer;\n}\n\n.pdf-outline-button:hover {\n border-color: #c7d7eb;\n background: #ffffff;\n}\n\n.pdf-outline-toggle {\n position: relative;\n width: 14px;\n height: 14px;\n border-radius: 4px;\n color: #64748b;\n}\n\n.pdf-outline-toggle::before {\n position: absolute;\n top: 3px;\n left: 4px;\n width: 6px;\n height: 6px;\n border-right: 2px solid currentColor;\n border-bottom: 2px solid currentColor;\n content: '';\n transform: rotate(-45deg);\n transition: transform 0.16s ease;\n}\n\n.pdf-outline-toggle--open::before {\n transform: rotate(45deg);\n}\n\n.pdf-outline-toggle--empty::before {\n display: none;\n}\n\n.pdf-outline-title {\n min-width: 0;\n overflow: hidden;\n font-size: 12px;\n line-height: 1.35;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.pdf-outline-empty {\n margin: 24px 8px;\n padding: 14px 10px;\n border: 1px dashed #cbd5e1;\n border-radius: 8px;\n color: #64748b;\n background: #ffffff;\n font-size: 12px;\n text-align: center;\n}\n\n.pdfViewer {\n margin: 0 auto;\n padding: 18px 14px 28px;\n}\n\n.pdf-viewport {\n position: relative;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n}\n\n.pdf-wrapper {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n overflow: auto;\n background: #e8edf4;\n}\n\n.pdf-state {\n position: absolute;\n top: 50%;\n left: 50%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 168px;\n min-height: 42px;\n padding: 0 16px;\n border: 1px solid #d7dee8;\n border-radius: 8px;\n color: #475569;\n background: #ffffff;\n box-shadow: 0 10px 30px rgb(15 23 42 / 12%);\n transform: translate(-50%, -50%);\n}\n\n.pdf-state--error {\n max-width: min(460px, calc(100% - 32px));\n color: #b42318;\n text-align: center;\n}\n\n@media (max-width: 720px) {\n .pdf-toolbar {\n flex-wrap: wrap;\n min-height: 88px;\n align-content: center;\n }\n\n .pdf-toolbar-group--zoom {\n margin-left: 0;\n }\n\n .pdf-content,\n .pdf-shell--nav-hidden .pdf-content {\n grid-template-columns: minmax(0, 1fr);\n }\n\n .pdf-nav-pane {\n position: absolute;\n z-index: 3;\n top: 0;\n bottom: 0;\n left: 0;\n width: min(78vw, 240px);\n box-shadow: 10px 0 24px rgb(15 23 42 / 14%);\n }\n}\n";
|
package/dist/renderers/pptx.d.ts
DELETED
package/dist/renderers/pptx.js
DELETED
|
@@ -1,217 +0,0 @@
|
|
|
1
|
-
import { PptxViewer, RECOMMENDED_ZIP_LIMITS } from '@file-viewer/pptx';
|
|
2
|
-
import { registerFileViewerZoomProvider, unregisterFileViewerZoomProvider, } from '../features/document/dom/index.js';
|
|
3
|
-
import { createFileViewerZoomChangeEmitter } from '../features/document/zoom.js';
|
|
4
|
-
import { waitForFileViewerNextPaint } from '../output/export.js';
|
|
5
|
-
const pptxStyle = `
|
|
6
|
-
.pptx-viewer-shell{position:relative;box-sizing:border-box;min-height:100%;padding:24px 20px;background:#eef3f8;color:#1f2d3b;font-family:Aptos,'Segoe UI','PingFang SC','Microsoft YaHei',sans-serif}
|
|
7
|
-
.pptx-render-surface{min-height:240px}
|
|
8
|
-
.pptx-render-surface.is-loading{opacity:.72}
|
|
9
|
-
.pptx-loading{position:sticky;top:12px;z-index:3;box-sizing:border-box;display:inline-flex;align-items:center;gap:10px;margin:0 0 16px 50%;padding:10px 14px;border:1px solid rgba(42,94,144,.14);border-radius:999px;background:rgba(255,255,255,.92);color:#41556b;box-shadow:0 12px 32px rgba(24,44,64,.12);transform:translateX(-50%)}
|
|
10
|
-
.pptx-loading[hidden],.pptx-error[hidden]{display:none!important}
|
|
11
|
-
.pptx-loading-dot{width:9px;height:9px;border-radius:999px;background:#1f9d67;box-shadow:0 0 0 6px rgba(31,157,103,.13)}
|
|
12
|
-
.pptx-error{box-sizing:border-box;width:min(680px,calc(100% - 32px));margin:48px auto;padding:24px;border:1px solid rgba(28,43,58,.12);border-radius:14px;background:#fff;color:#1f2d3b;box-shadow:0 16px 42px rgba(25,42,54,.08)}
|
|
13
|
-
.pptx-error strong{display:block;margin-bottom:10px;font-size:18px}
|
|
14
|
-
.pptx-error p{margin:0;color:#607282;line-height:1.7}
|
|
15
|
-
`;
|
|
16
|
-
const pptxPrintStyle = `
|
|
17
|
-
.pptx-viewer-shell {
|
|
18
|
-
background: #fff !important;
|
|
19
|
-
padding: 0 !important;
|
|
20
|
-
}
|
|
21
|
-
.pptx-render-surface {
|
|
22
|
-
display: block !important;
|
|
23
|
-
overflow: visible !important;
|
|
24
|
-
}
|
|
25
|
-
.pptx-render-surface [data-slide-index] {
|
|
26
|
-
break-after: page;
|
|
27
|
-
page-break-after: always;
|
|
28
|
-
margin: 0 auto !important;
|
|
29
|
-
}
|
|
30
|
-
.pptx-render-surface [data-slide-index]:last-child {
|
|
31
|
-
break-after: auto;
|
|
32
|
-
page-break-after: auto;
|
|
33
|
-
}
|
|
34
|
-
`;
|
|
35
|
-
const createStyle = (documentRef) => {
|
|
36
|
-
const style = documentRef.createElement('style');
|
|
37
|
-
style.textContent = pptxStyle;
|
|
38
|
-
return style;
|
|
39
|
-
};
|
|
40
|
-
const createElement = (documentRef, tagName, className, text) => {
|
|
41
|
-
const element = documentRef.createElement(tagName);
|
|
42
|
-
if (className) {
|
|
43
|
-
element.className = className;
|
|
44
|
-
}
|
|
45
|
-
if (text !== undefined) {
|
|
46
|
-
element.textContent = text;
|
|
47
|
-
}
|
|
48
|
-
return element;
|
|
49
|
-
};
|
|
50
|
-
const clampZoomPercent = (value) => {
|
|
51
|
-
return Math.min(300, Math.max(25, Math.round(value)));
|
|
52
|
-
};
|
|
53
|
-
const formatErrorMessage = (error) => {
|
|
54
|
-
if (error instanceof Error) {
|
|
55
|
-
return error.message;
|
|
56
|
-
}
|
|
57
|
-
return String(error || 'PPTX 解析失败');
|
|
58
|
-
};
|
|
59
|
-
const buildExportAdapter = (targetWindow) => ({
|
|
60
|
-
print: true,
|
|
61
|
-
exportHtml: true,
|
|
62
|
-
includeDocumentStyles: true,
|
|
63
|
-
beforeSnapshot: () => waitForFileViewerNextPaint(targetWindow || undefined),
|
|
64
|
-
printStyle: pptxPrintStyle,
|
|
65
|
-
});
|
|
66
|
-
export default async function renderPptx(buffer, target, _type, context) {
|
|
67
|
-
const documentRef = target.ownerDocument || document;
|
|
68
|
-
const targetWindow = documentRef.defaultView || (typeof window !== 'undefined' ? window : null);
|
|
69
|
-
const zoomEmitter = createFileViewerZoomChangeEmitter();
|
|
70
|
-
let viewer = null;
|
|
71
|
-
let state = 'loading';
|
|
72
|
-
let errorMessage = '';
|
|
73
|
-
let zoomPercent = 100;
|
|
74
|
-
let progressiveReady = false;
|
|
75
|
-
let disposed = false;
|
|
76
|
-
const style = createStyle(documentRef);
|
|
77
|
-
const shell = createElement(documentRef, 'div', 'pptx-viewer-shell');
|
|
78
|
-
shell.dataset.viewerZoomProvider = 'pptx';
|
|
79
|
-
const loading = createElement(documentRef, 'div', 'pptx-loading');
|
|
80
|
-
loading.setAttribute('aria-live', 'polite');
|
|
81
|
-
loading.append(createElement(documentRef, 'span', 'pptx-loading-dot'), createElement(documentRef, 'span', undefined, '正在解析 PPTX...'));
|
|
82
|
-
const error = createElement(documentRef, 'div', 'pptx-error');
|
|
83
|
-
const errorTitle = createElement(documentRef, 'strong', undefined, 'PPTX 预览失败');
|
|
84
|
-
const errorText = createElement(documentRef, 'p');
|
|
85
|
-
error.append(errorTitle, errorText);
|
|
86
|
-
const surface = createElement(documentRef, 'div', 'pptx-render-surface');
|
|
87
|
-
shell.append(loading, error, surface);
|
|
88
|
-
target.replaceChildren(style, shell);
|
|
89
|
-
const getCurrentZoomPercent = () => { var _a; return clampZoomPercent((_a = viewer === null || viewer === void 0 ? void 0 : viewer.zoomPercent) !== null && _a !== void 0 ? _a : zoomPercent); };
|
|
90
|
-
const getZoomState = () => {
|
|
91
|
-
const percent = getCurrentZoomPercent();
|
|
92
|
-
return {
|
|
93
|
-
scale: percent / 100,
|
|
94
|
-
label: `${percent}%`,
|
|
95
|
-
canZoomIn: percent < 300,
|
|
96
|
-
canZoomOut: percent > 25,
|
|
97
|
-
canReset: percent !== 100,
|
|
98
|
-
minScale: 0.25,
|
|
99
|
-
maxScale: 3,
|
|
100
|
-
};
|
|
101
|
-
};
|
|
102
|
-
const setZoom = async (percent) => {
|
|
103
|
-
const nextPercent = clampZoomPercent(percent);
|
|
104
|
-
zoomPercent = nextPercent;
|
|
105
|
-
if (viewer) {
|
|
106
|
-
await viewer.setZoom(nextPercent);
|
|
107
|
-
zoomPercent = getCurrentZoomPercent();
|
|
108
|
-
}
|
|
109
|
-
zoomEmitter.emit();
|
|
110
|
-
return getZoomState();
|
|
111
|
-
};
|
|
112
|
-
const notifyProgressiveReady = () => {
|
|
113
|
-
var _a;
|
|
114
|
-
if (progressiveReady) {
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
progressiveReady = true;
|
|
118
|
-
(_a = context === null || context === void 0 ? void 0 : context.onProgressiveRender) === null || _a === void 0 ? void 0 : _a.call(context);
|
|
119
|
-
};
|
|
120
|
-
const syncUi = () => {
|
|
121
|
-
loading.hidden = !(state === 'loading' && !errorMessage);
|
|
122
|
-
error.hidden = state !== 'error';
|
|
123
|
-
errorText.textContent = errorMessage;
|
|
124
|
-
surface.classList.toggle('is-loading', state === 'loading');
|
|
125
|
-
};
|
|
126
|
-
const registerExportAdapter = () => {
|
|
127
|
-
var _a;
|
|
128
|
-
(_a = context === null || context === void 0 ? void 0 : context.registerExportAdapter) === null || _a === void 0 ? void 0 : _a.call(context, buildExportAdapter(targetWindow));
|
|
129
|
-
};
|
|
130
|
-
registerFileViewerZoomProvider(shell, {
|
|
131
|
-
zoomIn: () => setZoom(getCurrentZoomPercent() + 15),
|
|
132
|
-
zoomOut: () => setZoom(getCurrentZoomPercent() - 15),
|
|
133
|
-
resetZoom: () => setZoom(100),
|
|
134
|
-
setZoom: scale => setZoom(scale * 100),
|
|
135
|
-
getState: getZoomState,
|
|
136
|
-
subscribe: zoomEmitter.subscribe,
|
|
137
|
-
});
|
|
138
|
-
const openPresentation = async () => {
|
|
139
|
-
var _a;
|
|
140
|
-
state = 'loading';
|
|
141
|
-
errorMessage = '';
|
|
142
|
-
progressiveReady = false;
|
|
143
|
-
syncUi();
|
|
144
|
-
try {
|
|
145
|
-
const nextViewer = await PptxViewer.open(buffer, surface, {
|
|
146
|
-
fitMode: 'contain',
|
|
147
|
-
zoomPercent,
|
|
148
|
-
zipLimits: RECOMMENDED_ZIP_LIMITS,
|
|
149
|
-
lazySlides: true,
|
|
150
|
-
lazyMedia: true,
|
|
151
|
-
listOptions: {
|
|
152
|
-
windowed: true,
|
|
153
|
-
initialSlides: 3,
|
|
154
|
-
batchSize: 4,
|
|
155
|
-
overscanViewport: 1.5,
|
|
156
|
-
},
|
|
157
|
-
onSlideRendered: () => notifyProgressiveReady(),
|
|
158
|
-
onRenderComplete: () => {
|
|
159
|
-
if (disposed) {
|
|
160
|
-
return;
|
|
161
|
-
}
|
|
162
|
-
state = 'ready';
|
|
163
|
-
notifyProgressiveReady();
|
|
164
|
-
zoomPercent = getCurrentZoomPercent();
|
|
165
|
-
syncUi();
|
|
166
|
-
zoomEmitter.emit();
|
|
167
|
-
},
|
|
168
|
-
onSlideError: (_index, error) => {
|
|
169
|
-
console.warn('PPTX slide render warning:', error);
|
|
170
|
-
},
|
|
171
|
-
onError: error => {
|
|
172
|
-
var _a;
|
|
173
|
-
if (disposed) {
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
|
-
state = 'error';
|
|
177
|
-
errorMessage = formatErrorMessage(error);
|
|
178
|
-
(_a = context === null || context === void 0 ? void 0 : context.registerExportAdapter) === null || _a === void 0 ? void 0 : _a.call(context, null);
|
|
179
|
-
syncUi();
|
|
180
|
-
},
|
|
181
|
-
});
|
|
182
|
-
if (disposed) {
|
|
183
|
-
nextViewer.destroy();
|
|
184
|
-
return;
|
|
185
|
-
}
|
|
186
|
-
viewer = nextViewer;
|
|
187
|
-
state = 'ready';
|
|
188
|
-
notifyProgressiveReady();
|
|
189
|
-
zoomPercent = getCurrentZoomPercent();
|
|
190
|
-
registerExportAdapter();
|
|
191
|
-
syncUi();
|
|
192
|
-
zoomEmitter.emit();
|
|
193
|
-
}
|
|
194
|
-
catch (error) {
|
|
195
|
-
if (disposed) {
|
|
196
|
-
return;
|
|
197
|
-
}
|
|
198
|
-
state = 'error';
|
|
199
|
-
errorMessage = formatErrorMessage(error);
|
|
200
|
-
(_a = context === null || context === void 0 ? void 0 : context.registerExportAdapter) === null || _a === void 0 ? void 0 : _a.call(context, null);
|
|
201
|
-
syncUi();
|
|
202
|
-
}
|
|
203
|
-
};
|
|
204
|
-
void openPresentation();
|
|
205
|
-
return {
|
|
206
|
-
$el: shell,
|
|
207
|
-
unmount() {
|
|
208
|
-
var _a;
|
|
209
|
-
disposed = true;
|
|
210
|
-
(_a = context === null || context === void 0 ? void 0 : context.registerExportAdapter) === null || _a === void 0 ? void 0 : _a.call(context, null);
|
|
211
|
-
unregisterFileViewerZoomProvider(shell);
|
|
212
|
-
viewer === null || viewer === void 0 ? void 0 : viewer.destroy();
|
|
213
|
-
viewer = null;
|
|
214
|
-
target.replaceChildren();
|
|
215
|
-
},
|
|
216
|
-
};
|
|
217
|
-
}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import type { Align, Column, VerticalAlign } from 'e-virt-table';
|
|
2
|
-
import type { CellMerge } from './worker/type';
|
|
3
|
-
export declare const WINDOW_SIZE = 500;
|
|
4
|
-
export declare const PREFETCH_AHEAD = 3;
|
|
5
|
-
export declare const PREFETCH_BEHIND = 1;
|
|
6
|
-
export declare const INDEX_COLUMN_KEY = "__index";
|
|
7
|
-
export declare const ROW_KEY_FIELD = "__k";
|
|
8
|
-
export declare const ROW_STATE_FIELD = "__s";
|
|
9
|
-
export interface SheetDefaults {
|
|
10
|
-
rowHeight: number;
|
|
11
|
-
colWidth: number;
|
|
12
|
-
}
|
|
13
|
-
export declare const DEFAULT_SHEET_DEFAULTS: SheetDefaults;
|
|
14
|
-
export declare const RowState: {
|
|
15
|
-
readonly Placeholder: 0;
|
|
16
|
-
readonly Loading: 1;
|
|
17
|
-
readonly Loaded: 2;
|
|
18
|
-
};
|
|
19
|
-
export type RowStateValue = (typeof RowState)[keyof typeof RowState];
|
|
20
|
-
export interface VirtualRow extends Record<string, any> {
|
|
21
|
-
__k: string;
|
|
22
|
-
__s: RowStateValue;
|
|
23
|
-
__baseHeight?: number;
|
|
24
|
-
_height?: number;
|
|
25
|
-
}
|
|
26
|
-
export interface CellBorderCache {
|
|
27
|
-
width: number;
|
|
28
|
-
style: string;
|
|
29
|
-
color: string;
|
|
30
|
-
}
|
|
31
|
-
export interface CellStyleCache {
|
|
32
|
-
backgroundColor?: string;
|
|
33
|
-
color?: string;
|
|
34
|
-
font?: string;
|
|
35
|
-
horizontalAlign?: Align;
|
|
36
|
-
verticalAlign?: VerticalAlign;
|
|
37
|
-
wrapText?: boolean;
|
|
38
|
-
shrinkToFit?: boolean;
|
|
39
|
-
borderTop?: CellBorderCache;
|
|
40
|
-
borderRight?: CellBorderCache;
|
|
41
|
-
borderBottom?: CellBorderCache;
|
|
42
|
-
borderLeft?: CellBorderCache;
|
|
43
|
-
}
|
|
44
|
-
export interface VirtualSheetState {
|
|
45
|
-
active: boolean;
|
|
46
|
-
totalRows: number;
|
|
47
|
-
totalCols: number;
|
|
48
|
-
indexOffset: number;
|
|
49
|
-
defaults: SheetDefaults;
|
|
50
|
-
dataKeys: string[];
|
|
51
|
-
rows: VirtualRow[];
|
|
52
|
-
columns: Column[];
|
|
53
|
-
cellCache: Map<string, CellStyleCache>;
|
|
54
|
-
mergeStartMap: Map<string, CellMerge>;
|
|
55
|
-
mergeCoveredMap: Map<string, true>;
|
|
56
|
-
rowHeightCache: Map<number, number>;
|
|
57
|
-
windowRows: Map<number, number[]>;
|
|
58
|
-
windowCells: Map<number, string[]>;
|
|
59
|
-
loadedWindows: Set<number>;
|
|
60
|
-
loadingWindows: Set<number>;
|
|
61
|
-
}
|
|
62
|
-
export type ScrollDirection = 1 | -1;
|
|
63
|
-
interface CollectWindowStartsOptions {
|
|
64
|
-
direction: ScrollDirection;
|
|
65
|
-
endRow: number;
|
|
66
|
-
far?: boolean;
|
|
67
|
-
startRow: number;
|
|
68
|
-
totalRows: number;
|
|
69
|
-
}
|
|
70
|
-
export declare const createEmptyVirtualState: () => VirtualSheetState;
|
|
71
|
-
export declare const displayCellKey: (row: number, col: number) => string;
|
|
72
|
-
export declare const getDataKey: (index: number) => string;
|
|
73
|
-
export declare const getRowState: (row?: VirtualRow | null) => RowStateValue;
|
|
74
|
-
export declare const buildRows: (count: number) => VirtualRow[];
|
|
75
|
-
export declare const getMaxWindowStart: (totalRows: number) => number;
|
|
76
|
-
export declare const clampWindowStart: (startRow?: number, totalRows?: number) => number;
|
|
77
|
-
export declare const getWindowStart: (row?: number, totalRows?: number) => number;
|
|
78
|
-
export declare const collectWindowStarts: ({ startRow, endRow, direction, totalRows, far }: CollectWindowStartsOptions) => number[];
|
|
79
|
-
export declare const markWindowState: (rows: VirtualRow[], totalRows: number, windowStart: number, nextState: RowStateValue) => void;
|
|
80
|
-
export {};
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
export const WINDOW_SIZE = 500;
|
|
2
|
-
export const PREFETCH_AHEAD = 3;
|
|
3
|
-
export const PREFETCH_BEHIND = 1;
|
|
4
|
-
export const INDEX_COLUMN_KEY = '__index';
|
|
5
|
-
export const ROW_KEY_FIELD = '__k';
|
|
6
|
-
export const ROW_STATE_FIELD = '__s';
|
|
7
|
-
export const DEFAULT_SHEET_DEFAULTS = {
|
|
8
|
-
rowHeight: 20,
|
|
9
|
-
colWidth: 64
|
|
10
|
-
};
|
|
11
|
-
export const RowState = {
|
|
12
|
-
Placeholder: 0,
|
|
13
|
-
Loading: 1,
|
|
14
|
-
Loaded: 2
|
|
15
|
-
};
|
|
16
|
-
export const createEmptyVirtualState = () => ({
|
|
17
|
-
active: false,
|
|
18
|
-
totalRows: 0,
|
|
19
|
-
totalCols: 0,
|
|
20
|
-
indexOffset: 0,
|
|
21
|
-
defaults: { ...DEFAULT_SHEET_DEFAULTS },
|
|
22
|
-
dataKeys: [],
|
|
23
|
-
rows: [],
|
|
24
|
-
columns: [],
|
|
25
|
-
cellCache: new Map(),
|
|
26
|
-
mergeStartMap: new Map(),
|
|
27
|
-
mergeCoveredMap: new Map(),
|
|
28
|
-
rowHeightCache: new Map(),
|
|
29
|
-
windowRows: new Map(),
|
|
30
|
-
windowCells: new Map(),
|
|
31
|
-
loadedWindows: new Set(),
|
|
32
|
-
loadingWindows: new Set()
|
|
33
|
-
});
|
|
34
|
-
export const displayCellKey = (row, col) => {
|
|
35
|
-
return `${row}-${col}`;
|
|
36
|
-
};
|
|
37
|
-
export const getDataKey = (index) => {
|
|
38
|
-
return `c${index}`;
|
|
39
|
-
};
|
|
40
|
-
export const getRowState = (row) => {
|
|
41
|
-
var _a;
|
|
42
|
-
return (_a = row === null || row === void 0 ? void 0 : row[ROW_STATE_FIELD]) !== null && _a !== void 0 ? _a : RowState.Placeholder;
|
|
43
|
-
};
|
|
44
|
-
export const buildRows = (count) => {
|
|
45
|
-
const rows = new Array(count);
|
|
46
|
-
for (let index = 0; index < count; index += 1) {
|
|
47
|
-
rows[index] = {
|
|
48
|
-
[ROW_KEY_FIELD]: `${index}`,
|
|
49
|
-
[ROW_STATE_FIELD]: RowState.Placeholder
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
return rows;
|
|
53
|
-
};
|
|
54
|
-
export const getMaxWindowStart = (totalRows) => {
|
|
55
|
-
if (!totalRows) {
|
|
56
|
-
return 0;
|
|
57
|
-
}
|
|
58
|
-
return Math.floor(Math.max(totalRows - 1, 0) / WINDOW_SIZE) * WINDOW_SIZE;
|
|
59
|
-
};
|
|
60
|
-
export const clampWindowStart = (startRow = 0, totalRows = 0) => {
|
|
61
|
-
return Math.min(Math.max(startRow, 0), getMaxWindowStart(totalRows));
|
|
62
|
-
};
|
|
63
|
-
export const getWindowStart = (row = 0, totalRows = 0) => {
|
|
64
|
-
const start = Math.floor(Math.max(row, 0) / WINDOW_SIZE) * WINDOW_SIZE;
|
|
65
|
-
return clampWindowStart(start, totalRows);
|
|
66
|
-
};
|
|
67
|
-
// 视口周边始终保留一小圈热窗口,滚轮滚动和拖动滚动条都可以直接命中缓存,
|
|
68
|
-
// 避免每次跳转都同步等待 worker 回包。
|
|
69
|
-
export const collectWindowStarts = ({ startRow, endRow, direction, totalRows, far = false }) => {
|
|
70
|
-
const starts = new Set();
|
|
71
|
-
const firstWindow = getWindowStart(startRow, totalRows);
|
|
72
|
-
const lastWindow = getWindowStart(endRow, totalRows);
|
|
73
|
-
for (let current = firstWindow; current <= lastWindow; current += WINDOW_SIZE) {
|
|
74
|
-
starts.add(current);
|
|
75
|
-
}
|
|
76
|
-
const ahead = far ? PREFETCH_AHEAD + 1 : PREFETCH_AHEAD;
|
|
77
|
-
const behind = far ? PREFETCH_BEHIND + 1 : PREFETCH_BEHIND;
|
|
78
|
-
const anchor = direction > 0 ? lastWindow : firstWindow;
|
|
79
|
-
for (let step = 1; step <= ahead; step += 1) {
|
|
80
|
-
starts.add(clampWindowStart(anchor + direction * step * WINDOW_SIZE, totalRows));
|
|
81
|
-
}
|
|
82
|
-
for (let step = 1; step <= behind; step += 1) {
|
|
83
|
-
starts.add(clampWindowStart(anchor - direction * step * WINDOW_SIZE, totalRows));
|
|
84
|
-
}
|
|
85
|
-
return Array.from(starts);
|
|
86
|
-
};
|
|
87
|
-
export const markWindowState = (rows, totalRows, windowStart, nextState) => {
|
|
88
|
-
const endRow = Math.min(windowStart + WINDOW_SIZE, totalRows);
|
|
89
|
-
for (let rowIndex = windowStart; rowIndex < endRow; rowIndex += 1) {
|
|
90
|
-
const row = rows[rowIndex];
|
|
91
|
-
if (!row) {
|
|
92
|
-
continue;
|
|
93
|
-
}
|
|
94
|
-
row[ROW_STATE_FIELD] = nextState;
|
|
95
|
-
}
|
|
96
|
-
};
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import type { Column, ConfigType } from 'e-virt-table';
|
|
2
|
-
import type { SheetModel } from './worker/type';
|
|
3
|
-
import { type CellStyleCache, type SheetDefaults, type VirtualSheetState } from './state';
|
|
4
|
-
export declare const INDEX_COLUMN_WIDTH = 68;
|
|
5
|
-
export declare const HEADER_HEIGHT = 34;
|
|
6
|
-
interface TableConfigOptions {
|
|
7
|
-
hostHeight: number;
|
|
8
|
-
sheetDefaults: SheetDefaults;
|
|
9
|
-
virtualState: VirtualSheetState;
|
|
10
|
-
zoomScale?: number;
|
|
11
|
-
}
|
|
12
|
-
export declare const getRowHeight: (heights: number | number[] | undefined, index: number, fallback: number) => number;
|
|
13
|
-
export declare const normalizeRowHeight: (height: number | undefined, fallback: number) => number;
|
|
14
|
-
export declare const detectIndexOffset: (ws: SheetModel) => 1 | 0;
|
|
15
|
-
export declare const buildColumns: (ws: SheetModel) => {
|
|
16
|
-
columns: Column[];
|
|
17
|
-
dataKeys: string[];
|
|
18
|
-
};
|
|
19
|
-
export declare const getDisplayColumns: (columns: Column[], zoomScale?: number) => Column[];
|
|
20
|
-
export declare const normalizeCellStyle: (meta: {
|
|
21
|
-
className?: string;
|
|
22
|
-
style: any;
|
|
23
|
-
} | undefined) => CellStyleCache | undefined;
|
|
24
|
-
export declare const createTableConfig: ({ hostHeight, sheetDefaults, virtualState, zoomScale }: TableConfigOptions) => ConfigType;
|
|
25
|
-
export {};
|