ooxml-core 1.20.0 → 1.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -0
- package/dist/{PptxHandler-TEKISCJO.cjs → PptxHandler-DNSXWTQV.cjs} +3 -3
- package/dist/{PptxHandler-FYD7IYXT.mjs → PptxHandler-FSKKPZZC.mjs} +3 -3
- package/dist/PptxHandler-H7MEWJJJ.mjs +4 -0
- package/dist/{PresentationBuilder-IMB4DVRN.mjs → PresentationBuilder-7TSENZTX.mjs} +2 -2
- package/dist/{PresentationBuilder-NCKASKXU.cjs → PresentationBuilder-A5NI35VN.cjs} +5 -5
- package/dist/{PresentationBuilder-EYI6Z2JP.mjs → PresentationBuilder-RIJWQSEU.mjs} +3 -3
- package/dist/automation/docx-forms.d.ts +26 -0
- package/dist/automation/docx-forms.d.ts.map +1 -0
- package/dist/automation/index.cjs +39159 -14352
- package/dist/automation/index.d.ts +5 -0
- package/dist/automation/index.d.ts.map +1 -1
- package/dist/automation/index.mjs +39145 -14353
- package/dist/automation/node.cjs +37 -0
- package/dist/automation/node.d.ts +32 -1
- package/dist/automation/node.d.ts.map +1 -1
- package/dist/automation/node.mjs +36 -1
- package/dist/automation/proposal.d.ts +25 -0
- package/dist/automation/proposal.d.ts.map +1 -0
- package/dist/automation/tools/define.d.ts +27 -0
- package/dist/automation/tools/define.d.ts.map +1 -0
- package/dist/automation/tools/docx-tools.d.ts +4 -0
- package/dist/automation/tools/docx-tools.d.ts.map +1 -0
- package/dist/automation/tools/index.d.ts +16 -0
- package/dist/automation/tools/index.d.ts.map +1 -0
- package/dist/automation/tools/types.d.ts +52 -0
- package/dist/automation/tools/types.d.ts.map +1 -0
- package/dist/automation/tools/visio-tools.d.ts +4 -0
- package/dist/automation/tools/visio-tools.d.ts.map +1 -0
- package/dist/automation/tools/xlsx-tools.d.ts +8 -0
- package/dist/automation/tools/xlsx-tools.d.ts.map +1 -0
- package/dist/automation/xlsx-edits.d.ts +88 -0
- package/dist/automation/xlsx-edits.d.ts.map +1 -0
- package/dist/automation/xlsx-proposal.d.ts +34 -0
- package/dist/automation/xlsx-proposal.d.ts.map +1 -0
- package/dist/automation/xlsx.d.ts +10 -5
- package/dist/automation/xlsx.d.ts.map +1 -1
- package/dist/chart/axis-range.d.ts.map +1 -1
- package/dist/chart/bubble-radius.d.ts +0 -5
- package/dist/chart/bubble-radius.d.ts.map +1 -1
- package/dist/chart/extent.d.ts +9 -0
- package/dist/chart/extent.d.ts.map +1 -0
- package/dist/chart/histogram-binning.d.ts.map +1 -1
- package/dist/chart/index.cjs +56 -18
- package/dist/chart/index.mjs +56 -18
- package/dist/chart/render/chart-svg-cartesian.d.ts.map +1 -1
- package/dist/chart/render/chart-svg-legend.d.ts.map +1 -1
- package/dist/chart/render/chart-view-ex.d.ts.map +1 -1
- package/dist/chart/render/chart-view.d.ts.map +1 -1
- package/dist/chart/trendline-fit.d.ts.map +1 -1
- package/dist/{chunk-3IENHIFD.cjs → chunk-4LZIUJI3.cjs} +52 -12
- package/dist/{chunk-LEV2SVMK.mjs → chunk-4QPOJCJG.mjs} +45 -8
- package/dist/{chunk-CC5UNZOO.mjs → chunk-6IIMI5RS.mjs} +52 -12
- package/dist/{chunk-MN27HKHM.mjs → chunk-BA7Z6ATM.mjs} +5 -5
- package/dist/{chunk-LVM3IZJ2.mjs → chunk-DLFMCZZT.mjs} +1 -1
- package/dist/{chunk-M4XLF4R7.mjs → chunk-GBKBR4CX.mjs} +20 -8
- package/dist/{chunk-NXKATFM5.cjs → chunk-HL3FBJ6X.cjs} +1065 -1016
- package/dist/{chunk-WXY5EDGT.mjs → chunk-LF5E5ZOH.mjs} +51 -2
- package/dist/chunk-MHNETXQB.mjs +1 -0
- package/dist/{chunk-MNXKRXFB.mjs → chunk-Q5PKBQXH.mjs} +52 -3
- package/dist/{chunk-GQYQQ3GA.mjs → chunk-VQF6HQEE.mjs} +1 -1
- package/dist/collab/embedding.d.ts +108 -0
- package/dist/collab/embedding.d.ts.map +1 -0
- package/dist/collab/index.cjs +423 -293
- package/dist/collab/index.d.ts +2 -0
- package/dist/collab/index.d.ts.map +1 -1
- package/dist/collab/index.mjs +415 -294
- package/dist/collab/webrtc-provider.d.ts +21 -0
- package/dist/collab/webrtc-provider.d.ts.map +1 -0
- package/dist/color/theme-palette.d.ts +5 -1
- package/dist/color/theme-palette.d.ts.map +1 -1
- package/dist/crypto/index.cjs +27 -2
- package/dist/crypto/index.mjs +27 -2
- package/dist/diagram/index.cjs +31 -3
- package/dist/diagram/index.mjs +31 -3
- package/dist/docx/block-parser.d.ts.map +1 -1
- package/dist/docx/cell-blocks.d.ts +7 -1
- package/dist/docx/cell-blocks.d.ts.map +1 -1
- package/dist/docx/content-control-edit.d.ts +14 -0
- package/dist/docx/content-control-edit.d.ts.map +1 -1
- package/dist/docx/content-control-model.d.ts +8 -0
- package/dist/docx/content-control-model.d.ts.map +1 -1
- package/dist/docx/content-control-values.d.ts +20 -0
- package/dist/docx/content-control-values.d.ts.map +1 -0
- package/dist/docx/content-control.d.ts +7 -1
- package/dist/docx/content-control.d.ts.map +1 -1
- package/dist/docx/element-order.d.ts +10 -5
- package/dist/docx/element-order.d.ts.map +1 -1
- package/dist/docx/embedded.cjs +3861 -1379
- package/dist/docx/embedded.mjs +3861 -1379
- package/dist/docx/field-instruction.d.ts +22 -0
- package/dist/docx/field-instruction.d.ts.map +1 -0
- package/dist/docx/form-field-model.d.ts +48 -0
- package/dist/docx/form-field-model.d.ts.map +1 -0
- package/dist/docx/form-fields.d.ts +31 -0
- package/dist/docx/form-fields.d.ts.map +1 -0
- package/dist/docx/form-fill-fields.d.ts +61 -0
- package/dist/docx/form-fill-fields.d.ts.map +1 -0
- package/dist/docx/form-fill-labels.d.ts +8 -0
- package/dist/docx/form-fill-labels.d.ts.map +1 -0
- package/dist/docx/form-fill-sites.d.ts +59 -0
- package/dist/docx/form-fill-sites.d.ts.map +1 -0
- package/dist/docx/form-fill-values.d.ts +28 -0
- package/dist/docx/form-fill-values.d.ts.map +1 -0
- package/dist/docx/form-fill-write.d.ts +26 -0
- package/dist/docx/form-fill-write.d.ts.map +1 -0
- package/dist/docx/glossary.d.ts +15 -0
- package/dist/docx/glossary.d.ts.map +1 -0
- package/dist/docx/index.cjs +5929 -3153
- package/dist/docx/index.d.ts +7 -0
- package/dist/docx/index.d.ts.map +1 -1
- package/dist/docx/index.mjs +5913 -3154
- package/dist/docx/inline-annotations.d.ts +21 -0
- package/dist/docx/inline-annotations.d.ts.map +1 -0
- package/dist/docx/inline-container-markers.d.ts +14 -0
- package/dist/docx/inline-container-markers.d.ts.map +1 -0
- package/dist/docx/inline-containers.d.ts +54 -0
- package/dist/docx/inline-containers.d.ts.map +1 -0
- package/dist/docx/inline-form-field-bookmarks.d.ts +15 -0
- package/dist/docx/inline-form-field-bookmarks.d.ts.map +1 -0
- package/dist/docx/inline-marker-positions.d.ts +15 -0
- package/dist/docx/inline-marker-positions.d.ts.map +1 -0
- package/dist/docx/inline-markers.d.ts +63 -0
- package/dist/docx/inline-markers.d.ts.map +1 -0
- package/dist/docx/inline-slots.d.ts +24 -0
- package/dist/docx/inline-slots.d.ts.map +1 -0
- package/dist/docx/layout/adapter.d.ts.map +1 -1
- package/dist/docx/layout/index.cjs +1176 -563
- package/dist/docx/layout/index.d.ts +2 -1
- package/dist/docx/layout/index.d.ts.map +1 -1
- package/dist/docx/layout/index.mjs +1175 -564
- package/dist/docx/layout/input.d.ts +5 -1
- package/dist/docx/layout/input.d.ts.map +1 -1
- package/dist/docx/layout/page-style-refs.d.ts +21 -0
- package/dist/docx/layout/page-style-refs.d.ts.map +1 -0
- package/dist/docx/layout/paragraph-fragments.d.ts.map +1 -1
- package/dist/docx/layout/result.d.ts +1 -0
- package/dist/docx/layout/result.d.ts.map +1 -1
- package/dist/docx/layout/tab-stops.d.ts +8 -1
- package/dist/docx/layout/tab-stops.d.ts.map +1 -1
- package/dist/docx/load/index.cjs +3969 -1487
- package/dist/docx/load/index.mjs +3969 -1487
- package/dist/docx/model-run.d.ts +24 -2
- package/dist/docx/model-run.d.ts.map +1 -1
- package/dist/docx/model.d.ts +5 -0
- package/dist/docx/model.d.ts.map +1 -1
- package/dist/docx/numbering-format.d.ts.map +1 -1
- package/dist/docx/parse-warnings.d.ts.map +1 -1
- package/dist/docx/parse.d.ts.map +1 -1
- package/dist/docx/run-segmentation.d.ts +11 -0
- package/dist/docx/run-segmentation.d.ts.map +1 -0
- package/dist/docx/save.d.ts.map +1 -1
- package/dist/docx/section-model.d.ts +5 -0
- package/dist/docx/section-model.d.ts.map +1 -1
- package/dist/docx/sections.d.ts +4 -2
- package/dist/docx/sections.d.ts.map +1 -1
- package/dist/docx/settings.d.ts +9 -0
- package/dist/docx/settings.d.ts.map +1 -1
- package/dist/docx/special-characters.d.ts +34 -0
- package/dist/docx/special-characters.d.ts.map +1 -0
- package/dist/docx/style-ref-fields.d.ts +40 -0
- package/dist/docx/style-ref-fields.d.ts.map +1 -0
- package/dist/docx/style-ref.d.ts +85 -0
- package/dist/docx/style-ref.d.ts.map +1 -0
- package/dist/docx/table-model.d.ts +2 -2
- package/dist/docx/table-model.d.ts.map +1 -1
- package/dist/docx/ui/break-note-schema.d.ts.map +1 -1
- package/dist/docx/ui/content-control-commands.d.ts +20 -8
- package/dist/docx/ui/content-control-commands.d.ts.map +1 -1
- package/dist/docx/ui/content-control-guard.d.ts +4 -1
- package/dist/docx/ui/content-control-guard.d.ts.map +1 -1
- package/dist/docx/ui/content-control-paste.d.ts +23 -0
- package/dist/docx/ui/content-control-paste.d.ts.map +1 -0
- package/dist/docx/ui/content-control-rows.d.ts +15 -0
- package/dist/docx/ui/content-control-rows.d.ts.map +1 -0
- package/dist/docx/ui/content-control-sources.d.ts +12 -0
- package/dist/docx/ui/content-control-sources.d.ts.map +1 -0
- package/dist/docx/ui/content-control-spans.d.ts +29 -6
- package/dist/docx/ui/content-control-spans.d.ts.map +1 -1
- package/dist/docx/ui/content-control-temporary.d.ts +10 -0
- package/dist/docx/ui/content-control-temporary.d.ts.map +1 -0
- package/dist/docx/ui/form-field-commands.d.ts +41 -0
- package/dist/docx/ui/form-field-commands.d.ts.map +1 -0
- package/dist/docx/ui/form-field-guard.d.ts +24 -0
- package/dist/docx/ui/form-field-guard.d.ts.map +1 -0
- package/dist/docx/ui/form-text-blank.d.ts +18 -0
- package/dist/docx/ui/form-text-blank.d.ts.map +1 -0
- package/dist/docx/ui/index.cjs +9276 -7132
- package/dist/docx/ui/index.d.ts +5 -0
- package/dist/docx/ui/index.d.ts.map +1 -1
- package/dist/docx/ui/index.mjs +9259 -7137
- package/dist/docx/ui/positional-tab-input.d.ts +7 -0
- package/dist/docx/ui/positional-tab-input.d.ts.map +1 -0
- package/dist/docx/ui/run-compare.d.ts.map +1 -1
- package/dist/docx/ui/run-extra-mark.d.ts +1 -1
- package/dist/docx/ui/run-extra-mark.d.ts.map +1 -1
- package/dist/docx/ui/schema-marks.d.ts +1 -1
- package/dist/docx/ui/schema-marks.d.ts.map +1 -1
- package/dist/docx/ui/symbol-font.d.ts +4 -0
- package/dist/docx/ui/symbol-font.d.ts.map +1 -0
- package/dist/docx/ui/yjs-collaboration.d.ts +12 -1
- package/dist/docx/ui/yjs-collaboration.d.ts.map +1 -1
- package/dist/docx/write-block-placement.d.ts +7 -0
- package/dist/docx/write-block-placement.d.ts.map +1 -1
- package/dist/docx/write-content-control.d.ts +6 -0
- package/dist/docx/write-content-control.d.ts.map +1 -1
- package/dist/docx/write-header-footer.d.ts +6 -2
- package/dist/docx/write-header-footer.d.ts.map +1 -1
- package/dist/docx/write-inline.d.ts +12 -16
- package/dist/docx/write-inline.d.ts.map +1 -1
- package/dist/docx/write-paragraph.d.ts.map +1 -1
- package/dist/docx/write-revisions.d.ts.map +1 -1
- package/dist/docx/write-run.d.ts.map +1 -1
- package/dist/docx/write-section-properties.d.ts +5 -0
- package/dist/docx/write-section-properties.d.ts.map +1 -0
- package/dist/docx/write-sections.d.ts.map +1 -1
- package/dist/docx/write-table-controls.d.ts +15 -0
- package/dist/docx/write-table-controls.d.ts.map +1 -0
- package/dist/docx/write-table-properties.d.ts.map +1 -1
- package/dist/docx/write-table.d.ts.map +1 -1
- package/dist/docx/write.d.ts.map +1 -1
- package/dist/docx/xml.d.ts +6 -0
- package/dist/docx/xml.d.ts.map +1 -1
- package/dist/drawingml/index.cjs +31 -3
- package/dist/drawingml/index.mjs +31 -3
- package/dist/index.cjs +77 -26
- package/dist/index.mjs +77 -26
- package/dist/math/index.cjs +27 -2
- package/dist/math/index.mjs +27 -2
- package/dist/opc/index.cjs +51 -11
- package/dist/opc/index.mjs +51 -11
- package/dist/opc/zip-folders.d.ts +11 -0
- package/dist/opc/zip-folders.d.ts.map +1 -0
- package/dist/opc/zip-limits.d.ts +9 -0
- package/dist/opc/zip-limits.d.ts.map +1 -1
- package/dist/pptx/automation/index.cjs +28818 -7388
- package/dist/pptx/automation/index.d.ts +93 -3
- package/dist/pptx/automation/index.d.ts.map +1 -1
- package/dist/pptx/automation/index.mjs +740 -63
- package/dist/pptx/automation/schemas/chart-formatting-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/chart-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/chart-user-shape-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/element-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/export-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/geometry-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/hyperlink-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/index.mjs +1 -0
- package/dist/pptx/automation/schemas/json-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/layout-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/lock-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/metadata-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/ole-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/presentation-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/section-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/slide-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/smartart-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/table-style-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/template-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/theme-schemas.d.ts +1 -1
- package/dist/pptx/automation/schemas/validation-schemas.d.ts +1 -1
- package/dist/pptx/chunks/{index-CgFX0T7b.d.ts → index-CPhsd7Df.d.ts} +9 -1
- package/dist/pptx/chunks/{index-CgFX0T7b.d.ts.map → index-CPhsd7Df.d.ts.map} +1 -1
- package/dist/pptx/chunks/{index-qwVYoFn6.d.ts → index-Q5mM8kIR.d.ts} +2 -2
- package/dist/pptx/chunks/{index-qwVYoFn6.d.ts.map → index-Q5mM8kIR.d.ts.map} +1 -1
- package/dist/pptx/chunks/{schemas-CWr181Wx.d.ts → schemas-fuDGetRe.d.ts} +2 -2
- package/dist/pptx/chunks/{schemas-CWr181Wx.d.ts.map → schemas-fuDGetRe.d.ts.map} +1 -1
- package/dist/pptx/cli/index.cjs +116 -17
- package/dist/pptx/cli/index.mjs +5 -5
- package/dist/pptx/converter/index.cjs +12 -3
- package/dist/pptx/converter/index.d.ts +1 -1
- package/dist/pptx/converter/index.mjs +3 -3
- package/dist/pptx/editor/render/find-replace.cjs +14 -14
- package/dist/pptx/editor/render/find-replace.d.ts +1 -1
- package/dist/pptx/editor/render/find-replace.mjs +1 -1
- package/dist/pptx/editor/render/slide-operations.cjs +8 -8
- package/dist/pptx/editor/render/slide-operations.mjs +2 -2
- package/dist/pptx/index.cjs +116 -17
- package/dist/pptx/index.d.ts +2 -2
- package/dist/pptx/index.mjs +6 -6
- package/dist/pptx/signature-node/index.cjs +20 -8
- package/dist/pptx/signature-node/index.mjs +2 -2
- package/dist/teams/index.cjs +105 -70
- package/dist/teams/index.mjs +105 -70
- package/dist/text/text-diff.d.ts +15 -0
- package/dist/text/text-diff.d.ts.map +1 -0
- package/dist/visio/collab/bind.d.ts +44 -0
- package/dist/visio/collab/bind.d.ts.map +1 -0
- package/dist/visio/collab/compose.d.ts +15 -0
- package/dist/visio/collab/compose.d.ts.map +1 -0
- package/dist/visio/collab/index.cjs +1194 -0
- package/dist/visio/collab/index.d.ts +8 -0
- package/dist/visio/collab/index.d.ts.map +1 -0
- package/dist/visio/collab/index.mjs +1152 -0
- package/dist/visio/collab/keys.d.ts +22 -0
- package/dist/visio/collab/keys.d.ts.map +1 -0
- package/dist/visio/collab/order.d.ts +11 -0
- package/dist/visio/collab/order.d.ts.map +1 -0
- package/dist/visio/collab/package.d.ts +37 -0
- package/dist/visio/collab/package.d.ts.map +1 -0
- package/dist/visio/collab/read.d.ts +41 -0
- package/dist/visio/collab/read.d.ts.map +1 -0
- package/dist/visio/collab/scan.d.ts +28 -0
- package/dist/visio/collab/scan.d.ts.map +1 -0
- package/dist/visio/collab/schema.d.ts +70 -0
- package/dist/visio/collab/schema.d.ts.map +1 -0
- package/dist/visio/collab/snapshot.d.ts +61 -0
- package/dist/visio/collab/snapshot.d.ts.map +1 -0
- package/dist/visio/collab/write.d.ts +20 -0
- package/dist/visio/collab/write.d.ts.map +1 -0
- package/dist/visio/index.cjs +159 -39
- package/dist/visio/index.mjs +159 -39
- package/dist/visio/ui/collab-options.d.ts +24 -0
- package/dist/visio/ui/collab-options.d.ts.map +1 -0
- package/dist/visio/ui/collab-presence.d.ts +31 -0
- package/dist/visio/ui/collab-presence.d.ts.map +1 -0
- package/dist/visio/ui/contract.d.ts +9 -3
- package/dist/visio/ui/contract.d.ts.map +1 -1
- package/dist/visio/ui/document-history.d.ts +3 -1
- package/dist/visio/ui/document-history.d.ts.map +1 -1
- package/dist/visio/ui/index.cjs +284 -95
- package/dist/visio/ui/index.d.ts +2 -0
- package/dist/visio/ui/index.d.ts.map +1 -1
- package/dist/visio/ui/index.mjs +278 -95
- package/dist/xlsx/collab/index.cjs +8 -3
- package/dist/xlsx/collab/index.mjs +8 -3
- package/dist/xlsx/compare/cells.d.ts +22 -0
- package/dist/xlsx/compare/cells.d.ts.map +1 -0
- package/dist/xlsx/compare/compare.d.ts +12 -0
- package/dist/xlsx/compare/compare.d.ts.map +1 -0
- package/dist/xlsx/compare/conditional.d.ts +7 -0
- package/dist/xlsx/compare/conditional.d.ts.map +1 -0
- package/dist/xlsx/compare/format-key.d.ts +34 -0
- package/dist/xlsx/compare/format-key.d.ts.map +1 -0
- package/dist/xlsx/compare/group.d.ts +8 -0
- package/dist/xlsx/compare/group.d.ts.map +1 -0
- package/dist/xlsx/compare/index.d.ts +5 -0
- package/dist/xlsx/compare/index.d.ts.map +1 -0
- package/dist/xlsx/compare/rich-text.d.ts +7 -0
- package/dist/xlsx/compare/rich-text.d.ts.map +1 -0
- package/dist/xlsx/compare/sheets.d.ts +22 -0
- package/dist/xlsx/compare/sheets.d.ts.map +1 -0
- package/dist/xlsx/compare/structure.d.ts +11 -0
- package/dist/xlsx/compare/structure.d.ts.map +1 -0
- package/dist/xlsx/compare/text.d.ts +8 -0
- package/dist/xlsx/compare/text.d.ts.map +1 -0
- package/dist/xlsx/compare/types.d.ts +173 -0
- package/dist/xlsx/compare/types.d.ts.map +1 -0
- package/dist/xlsx/edit/cell-values.d.ts.map +1 -1
- package/dist/xlsx/edit/clipboard-html.d.ts.map +1 -1
- package/dist/xlsx/edit/clipboard-text.d.ts.map +1 -1
- package/dist/xlsx/edit/clipboard.d.ts.map +1 -1
- package/dist/xlsx/edit/clone-cell.d.ts +9 -0
- package/dist/xlsx/edit/clone-cell.d.ts.map +1 -0
- package/dist/xlsx/edit/history.d.ts +8 -3
- package/dist/xlsx/edit/history.d.ts.map +1 -1
- package/dist/xlsx/edit/timelines.d.ts.map +1 -1
- package/dist/xlsx/formula/change-areas.d.ts +9 -0
- package/dist/xlsx/formula/change-areas.d.ts.map +1 -0
- package/dist/xlsx/formula/engine-prepare.d.ts +8 -0
- package/dist/xlsx/formula/engine-prepare.d.ts.map +1 -1
- package/dist/xlsx/formula/engine.d.ts.map +1 -1
- package/dist/xlsx/formula/spill.d.ts +5 -1
- package/dist/xlsx/formula/spill.d.ts.map +1 -1
- package/dist/xlsx/index.cjs +2461 -1192
- package/dist/xlsx/index.d.ts +1 -0
- package/dist/xlsx/index.d.ts.map +1 -1
- package/dist/xlsx/index.mjs +2454 -1193
- package/dist/xlsx/layout/cell-view.d.ts.map +1 -1
- package/dist/xlsx/layout/navigate.d.ts.map +1 -1
- package/dist/xlsx/layout/style-view.d.ts +5 -0
- package/dist/xlsx/layout/style-view.d.ts.map +1 -1
- package/dist/xlsx/load/csv-dates.d.ts +22 -0
- package/dist/xlsx/load/csv-dates.d.ts.map +1 -0
- package/dist/xlsx/load/csv-import.d.ts +64 -0
- package/dist/xlsx/load/csv-import.d.ts.map +1 -0
- package/dist/xlsx/load/csv-separators.d.ts +13 -0
- package/dist/xlsx/load/csv-separators.d.ts.map +1 -0
- package/dist/xlsx/load/csv-traits.d.ts +20 -0
- package/dist/xlsx/load/csv-traits.d.ts.map +1 -0
- package/dist/xlsx/load/csv.d.ts +8 -4
- package/dist/xlsx/load/csv.d.ts.map +1 -1
- package/dist/xlsx/load/detect.d.ts +13 -0
- package/dist/xlsx/load/detect.d.ts.map +1 -1
- package/dist/xlsx/load/errors.d.ts +1 -0
- package/dist/xlsx/load/errors.d.ts.map +1 -1
- package/dist/xlsx/load/index.cjs +537 -91
- package/dist/xlsx/load/index.d.ts +3 -1
- package/dist/xlsx/load/index.d.ts.map +1 -1
- package/dist/xlsx/load/index.mjs +536 -92
- package/dist/xlsx/numfmt/input-date.d.ts +2 -0
- package/dist/xlsx/numfmt/input-date.d.ts.map +1 -1
- package/dist/xlsx/pivot/cache-xml.d.ts.map +1 -1
- package/dist/xlsx/pivot/groups.d.ts.map +1 -1
- package/dist/xlsx/read/index.d.ts +2 -1
- package/dist/xlsx/read/index.d.ts.map +1 -1
- package/dist/xlsx/read/limits.d.ts +50 -0
- package/dist/xlsx/read/limits.d.ts.map +1 -0
- package/dist/xlsx/read/load.d.ts +11 -1
- package/dist/xlsx/read/load.d.ts.map +1 -1
- package/dist/xlsx/read/package.d.ts +5 -23
- package/dist/xlsx/read/package.d.ts.map +1 -1
- package/dist/xlsx/read/shared-strings.d.ts +2 -2
- package/dist/xlsx/read/shared-strings.d.ts.map +1 -1
- package/dist/xlsx/read/worksheet.d.ts +2 -0
- package/dist/xlsx/read/worksheet.d.ts.map +1 -1
- package/dist/xlsx/stable-key.d.ts +3 -0
- package/dist/xlsx/stable-key.d.ts.map +1 -0
- package/dist/xlsx/styles.d.ts.map +1 -1
- package/dist/xlsx/ui/index.cjs +662 -372
- package/dist/xlsx/ui/index.mjs +662 -372
- package/dist/xlsx/ui/locales/de/shell.d.ts.map +1 -1
- package/dist/xlsx/ui/locales/en/shell.d.ts.map +1 -1
- package/dist/xlsx/ui/locales/es/shell.d.ts.map +1 -1
- package/dist/xlsx/ui/locales/fr/shell.d.ts.map +1 -1
- package/dist/xlsx/ui/locales/zh-CN/shell.d.ts.map +1 -1
- package/dist/xlsx/write/sheet-props.d.ts.map +1 -1
- package/dist/xml/index.cjs +32 -3
- package/dist/xml/index.mjs +32 -4
- package/dist/xml/xml.d.ts +11 -1
- package/dist/xml/xml.d.ts.map +1 -1
- package/package.json +6 -1
- package/dist/PptxHandler-SITN3K3F.mjs +0 -4
package/dist/xlsx/ui/index.cjs
CHANGED
|
@@ -321,9 +321,9 @@ function nextSheetName(workbook, base = "Sheet") {
|
|
|
321
321
|
}
|
|
322
322
|
var nextSheetId = (workbook) => workbook.sheets.reduce((max, sheet) => Math.max(max, sheet.sheetId), 0) + 1;
|
|
323
323
|
|
|
324
|
-
// xlsx/
|
|
325
|
-
function
|
|
326
|
-
return JSON.stringify(sortKeys(
|
|
324
|
+
// xlsx/stable-key.ts
|
|
325
|
+
function stableKey(value3) {
|
|
326
|
+
return JSON.stringify(sortKeys(value3));
|
|
327
327
|
}
|
|
328
328
|
function sortKeys(value3) {
|
|
329
329
|
if (Array.isArray(value3)) return value3.map(sortKeys);
|
|
@@ -337,6 +337,11 @@ function sortKeys(value3) {
|
|
|
337
337
|
}
|
|
338
338
|
return value3;
|
|
339
339
|
}
|
|
340
|
+
|
|
341
|
+
// xlsx/styles.ts
|
|
342
|
+
function styleKey(style3) {
|
|
343
|
+
return stableKey(style3);
|
|
344
|
+
}
|
|
340
345
|
function styleAt(workbook, styleId) {
|
|
341
346
|
const style3 = workbook.styles[styleId ?? 0] ?? workbook.styles[0];
|
|
342
347
|
if (!style3) throw new Error("Workbook has no default cell style");
|
|
@@ -2709,6 +2714,37 @@ function parseArray(c2) {
|
|
|
2709
2714
|
return { type: "array", rows: rows2 };
|
|
2710
2715
|
}
|
|
2711
2716
|
|
|
2717
|
+
// xlsx/formula/change-areas.ts
|
|
2718
|
+
function changeAreas(changes) {
|
|
2719
|
+
const out = [];
|
|
2720
|
+
const open = /* @__PURE__ */ new Map();
|
|
2721
|
+
let run2;
|
|
2722
|
+
const close2 = (area) => {
|
|
2723
|
+
const { start, end } = area.range;
|
|
2724
|
+
const key = `${area.sheet}:${start.col}:${end.col}`;
|
|
2725
|
+
const above = open.get(key);
|
|
2726
|
+
if (above && above.range.end.row === start.row - 1) {
|
|
2727
|
+
above.range.end.row = end.row;
|
|
2728
|
+
return;
|
|
2729
|
+
}
|
|
2730
|
+
out.push(area);
|
|
2731
|
+
open.set(key, area);
|
|
2732
|
+
};
|
|
2733
|
+
for (const { sheet, row: row2, col } of changes) {
|
|
2734
|
+
if (run2 && run2.sheet === sheet && run2.range.start.row === row2) {
|
|
2735
|
+
if (col === run2.range.end.col + 1) {
|
|
2736
|
+
run2.range.end.col = col;
|
|
2737
|
+
continue;
|
|
2738
|
+
}
|
|
2739
|
+
if (col >= run2.range.start.col && col <= run2.range.end.col) continue;
|
|
2740
|
+
}
|
|
2741
|
+
if (run2) close2(run2);
|
|
2742
|
+
run2 = { sheet, range: { start: { row: row2, col }, end: { row: row2, col } } };
|
|
2743
|
+
}
|
|
2744
|
+
if (run2) close2(run2);
|
|
2745
|
+
return out;
|
|
2746
|
+
}
|
|
2747
|
+
|
|
2712
2748
|
// xlsx/formula/date-serial.ts
|
|
2713
2749
|
var DAY_MS = 864e5;
|
|
2714
2750
|
var EPOCH_19002 = Date.UTC(1899, 11, 30);
|
|
@@ -2935,68 +2971,6 @@ var ReverseIndex = class extends AreaIndex {
|
|
|
2935
2971
|
}
|
|
2936
2972
|
};
|
|
2937
2973
|
|
|
2938
|
-
// xlsx/formula/engine-prepare.ts
|
|
2939
|
-
var CHECK_EVERY = 32;
|
|
2940
|
-
var GraphPreparation = class {
|
|
2941
|
-
constructor(workbook, create) {
|
|
2942
|
-
this.workbook = workbook;
|
|
2943
|
-
this.create = create;
|
|
2944
|
-
}
|
|
2945
|
-
workbook;
|
|
2946
|
-
create;
|
|
2947
|
-
reverse = new ReverseIndex();
|
|
2948
|
-
formulas = { dynamic: [], unvalued: [] };
|
|
2949
|
-
sheet = 0;
|
|
2950
|
-
rows;
|
|
2951
|
-
row = 0;
|
|
2952
|
-
cells;
|
|
2953
|
-
finished = false;
|
|
2954
|
-
/**
|
|
2955
|
-
* Adds formulas to the graph until `timeRemaining` (milliseconds, as an idle deadline reports
|
|
2956
|
-
* them) reaches zero, or until every formula is in. Returns true when the graph is complete.
|
|
2957
|
-
*/
|
|
2958
|
-
run(timeRemaining) {
|
|
2959
|
-
let visited = 0;
|
|
2960
|
-
while (!this.finished) {
|
|
2961
|
-
const cells = this.cells ?? this.nextRow();
|
|
2962
|
-
if (!cells) continue;
|
|
2963
|
-
const next = cells.next();
|
|
2964
|
-
if (next.done) {
|
|
2965
|
-
this.cells = void 0;
|
|
2966
|
-
continue;
|
|
2967
|
-
}
|
|
2968
|
-
const [col, cell] = next.value;
|
|
2969
|
-
if (cell.formula) this.add(this.create(this.sheet, this.row, col, cell), cell);
|
|
2970
|
-
if (timeRemaining && ++visited % CHECK_EVERY === 0 && timeRemaining() <= 0) break;
|
|
2971
|
-
}
|
|
2972
|
-
return this.finished;
|
|
2973
|
-
}
|
|
2974
|
-
add(node2, cell) {
|
|
2975
|
-
this.reverse.addNode(node2);
|
|
2976
|
-
if (!node2.legacy && !node2.arrayRange) this.formulas.dynamic.push(node2);
|
|
2977
|
-
if (cell.value === null && !node2.keepCached) this.formulas.unvalued.push(node2);
|
|
2978
|
-
}
|
|
2979
|
-
/** Moves to the next stored row (and sheet), or marks the walk finished. */
|
|
2980
|
-
nextRow() {
|
|
2981
|
-
for (; ; ) {
|
|
2982
|
-
const sheet = this.workbook.sheets[this.sheet];
|
|
2983
|
-
if (!sheet) {
|
|
2984
|
-
this.finished = true;
|
|
2985
|
-
return void 0;
|
|
2986
|
-
}
|
|
2987
|
-
this.rows ??= sheet.rows.entries();
|
|
2988
|
-
const next = this.rows.next();
|
|
2989
|
-
if (!next.done) {
|
|
2990
|
-
this.row = next.value[0];
|
|
2991
|
-
this.cells = next.value[1].entries();
|
|
2992
|
-
return this.cells;
|
|
2993
|
-
}
|
|
2994
|
-
this.rows = void 0;
|
|
2995
|
-
this.sheet++;
|
|
2996
|
-
}
|
|
2997
|
-
}
|
|
2998
|
-
};
|
|
2999
|
-
|
|
3000
2974
|
// xlsx/formula/text-number.ts
|
|
3001
2975
|
var MONTHS2 = [
|
|
3002
2976
|
"jan",
|
|
@@ -3399,6 +3373,311 @@ function finite(value3) {
|
|
|
3399
3373
|
return value3;
|
|
3400
3374
|
}
|
|
3401
3375
|
|
|
3376
|
+
// xlsx/formula/operators.ts
|
|
3377
|
+
var signal = (fn) => {
|
|
3378
|
+
try {
|
|
3379
|
+
return fn();
|
|
3380
|
+
} catch (e) {
|
|
3381
|
+
if (e instanceof ErrorSignal) return e.value;
|
|
3382
|
+
throw e;
|
|
3383
|
+
}
|
|
3384
|
+
};
|
|
3385
|
+
function power(base, exponent) {
|
|
3386
|
+
if (base === 0 && exponent === 0) throw new ErrorSignal(ERR.NUM);
|
|
3387
|
+
if (base === 0 && exponent < 0) throw new ErrorSignal(ERR.DIV0);
|
|
3388
|
+
if (base < 0 && !Number.isInteger(exponent)) {
|
|
3389
|
+
const inverse = 1 / exponent;
|
|
3390
|
+
const odd = Math.round(inverse);
|
|
3391
|
+
if (Math.abs(inverse - odd) < 1e-10 && Math.abs(odd) % 2 === 1) {
|
|
3392
|
+
return -Math.pow(-base, exponent);
|
|
3393
|
+
}
|
|
3394
|
+
throw new ErrorSignal(ERR.NUM);
|
|
3395
|
+
}
|
|
3396
|
+
return Math.pow(base, exponent);
|
|
3397
|
+
}
|
|
3398
|
+
function snapToZero(result2, a2, b) {
|
|
3399
|
+
if (result2 !== 0 && Math.abs(result2) <= Math.max(Math.abs(a2), Math.abs(b)) * 1e-15) return 0;
|
|
3400
|
+
return result2;
|
|
3401
|
+
}
|
|
3402
|
+
function arithmetic(op2, x, y, snap) {
|
|
3403
|
+
if (isError(x)) return x;
|
|
3404
|
+
if (isError(y)) return y;
|
|
3405
|
+
return signal(() => {
|
|
3406
|
+
const a2 = toNumber(x);
|
|
3407
|
+
const b = toNumber(y);
|
|
3408
|
+
let r;
|
|
3409
|
+
switch (op2) {
|
|
3410
|
+
case "+":
|
|
3411
|
+
r = a2 + b;
|
|
3412
|
+
if (snap) r = snapToZero(r, a2, b);
|
|
3413
|
+
break;
|
|
3414
|
+
case "-":
|
|
3415
|
+
r = a2 - b;
|
|
3416
|
+
if (snap) r = snapToZero(r, a2, b);
|
|
3417
|
+
break;
|
|
3418
|
+
case "*":
|
|
3419
|
+
r = a2 * b;
|
|
3420
|
+
break;
|
|
3421
|
+
case "/":
|
|
3422
|
+
if (b === 0) return ERR.DIV0;
|
|
3423
|
+
r = a2 / b;
|
|
3424
|
+
break;
|
|
3425
|
+
default:
|
|
3426
|
+
r = power(a2, b);
|
|
3427
|
+
}
|
|
3428
|
+
return Number.isFinite(r) ? r === 0 ? 0 : r : ERR.NUM;
|
|
3429
|
+
});
|
|
3430
|
+
}
|
|
3431
|
+
function comparison(op2, x, y) {
|
|
3432
|
+
if (isError(x)) return x;
|
|
3433
|
+
if (isError(y)) return y;
|
|
3434
|
+
const c2 = compareScalars(x, y);
|
|
3435
|
+
switch (op2) {
|
|
3436
|
+
case "=":
|
|
3437
|
+
return c2 === 0;
|
|
3438
|
+
case "<>":
|
|
3439
|
+
return c2 !== 0;
|
|
3440
|
+
case "<":
|
|
3441
|
+
return c2 < 0;
|
|
3442
|
+
case ">":
|
|
3443
|
+
return c2 > 0;
|
|
3444
|
+
case "<=":
|
|
3445
|
+
return c2 <= 0;
|
|
3446
|
+
default:
|
|
3447
|
+
return c2 >= 0;
|
|
3448
|
+
}
|
|
3449
|
+
}
|
|
3450
|
+
function concat(x, y) {
|
|
3451
|
+
if (isError(x)) return x;
|
|
3452
|
+
if (isError(y)) return y;
|
|
3453
|
+
return toText(x) + toText(y);
|
|
3454
|
+
}
|
|
3455
|
+
function scalarBinary(op2, x, y, snap = false) {
|
|
3456
|
+
if (op2 === "&") return concat(x, y);
|
|
3457
|
+
if (op2 === "+" || op2 === "-" || op2 === "*" || op2 === "/" || op2 === "^") {
|
|
3458
|
+
return arithmetic(op2, x, y, snap);
|
|
3459
|
+
}
|
|
3460
|
+
return comparison(op2, x, y);
|
|
3461
|
+
}
|
|
3462
|
+
function scalarUnary(op2, x) {
|
|
3463
|
+
if (isError(x)) return x;
|
|
3464
|
+
return signal(() => {
|
|
3465
|
+
const n2 = toNumber(x);
|
|
3466
|
+
const r = op2 === "-" ? -n2 : n2 / 100;
|
|
3467
|
+
return r === 0 ? 0 : r;
|
|
3468
|
+
});
|
|
3469
|
+
}
|
|
3470
|
+
function pick(m, row2, col) {
|
|
3471
|
+
const r = m.rows === 1 ? 0 : row2;
|
|
3472
|
+
const c2 = m.cols === 1 ? 0 : col;
|
|
3473
|
+
if (r >= m.rows || c2 >= m.cols) return ERR.NA;
|
|
3474
|
+
return m.get(r, c2);
|
|
3475
|
+
}
|
|
3476
|
+
function broadcastShape(operands, at) {
|
|
3477
|
+
let rows2 = 1;
|
|
3478
|
+
let cols = 1;
|
|
3479
|
+
for (const m of operands) {
|
|
3480
|
+
rows2 = Math.max(rows2, m.rows);
|
|
3481
|
+
cols = Math.max(cols, m.cols);
|
|
3482
|
+
}
|
|
3483
|
+
if (!operands.some((m) => m.isPadded)) return Matrix.build(rows2, cols, at);
|
|
3484
|
+
let blockRows = 1;
|
|
3485
|
+
let blockCols = 1;
|
|
3486
|
+
for (const m of operands) {
|
|
3487
|
+
blockRows = Math.max(blockRows, m.isPadded ? m.blockRows : m.rows);
|
|
3488
|
+
blockCols = Math.max(blockCols, m.isPadded ? m.blockCols : m.cols);
|
|
3489
|
+
}
|
|
3490
|
+
blockRows = Math.min(blockRows, rows2);
|
|
3491
|
+
blockCols = Math.min(blockCols, cols);
|
|
3492
|
+
const varies = operands.some(
|
|
3493
|
+
(m) => blockRows < rows2 && m.rows === 1 && m.cols > 1 || blockCols < cols && m.cols === 1 && m.rows > 1
|
|
3494
|
+
);
|
|
3495
|
+
if (varies) return Matrix.build(rows2, cols, at);
|
|
3496
|
+
return Matrix.padded(Matrix.build(blockRows, blockCols, at), rows2, cols, at(rows2 - 1, cols - 1));
|
|
3497
|
+
}
|
|
3498
|
+
function broadcast2(a2, b, fn) {
|
|
3499
|
+
if (!(a2 instanceof Matrix) && !(b instanceof Matrix)) return fn(a2, b);
|
|
3500
|
+
const ma = a2 instanceof Matrix ? a2 : new Matrix([[a2]]);
|
|
3501
|
+
const mb = b instanceof Matrix ? b : new Matrix([[b]]);
|
|
3502
|
+
return broadcastShape([ma, mb], (r, c2) => fn(pick(ma, r, c2), pick(mb, r, c2)));
|
|
3503
|
+
}
|
|
3504
|
+
function broadcast1(a2, fn) {
|
|
3505
|
+
return a2 instanceof Matrix ? a2.mapValues(fn) : fn(a2);
|
|
3506
|
+
}
|
|
3507
|
+
|
|
3508
|
+
// xlsx/formula/spill.ts
|
|
3509
|
+
var isSpilledCell = (cell) => cell !== void 0 && "spillAnchor" in cell;
|
|
3510
|
+
function releaseSpilledCell(sheet, row2, col) {
|
|
3511
|
+
const cell = getCell(sheet, row2, col);
|
|
3512
|
+
if (!isSpilledCell(cell)) return;
|
|
3513
|
+
delete cell.spillAnchor;
|
|
3514
|
+
cell.value = null;
|
|
3515
|
+
if (!cell.styleId && !cell.formula && !cell.richText && !cell.arrayRange)
|
|
3516
|
+
deleteCell(sheet, row2, col);
|
|
3517
|
+
}
|
|
3518
|
+
function clearFootprint(sheet, footprint, row2, col) {
|
|
3519
|
+
const { start, end } = footprint;
|
|
3520
|
+
const owned = [];
|
|
3521
|
+
const visit2 = (r, c2, cell) => {
|
|
3522
|
+
if (c2 < start.col || c2 > end.col || r === row2 && c2 === col) return;
|
|
3523
|
+
if (isSpilledCell(cell) && cell.spillAnchor.row === row2 && cell.spillAnchor.col === col)
|
|
3524
|
+
owned.push([r, c2]);
|
|
3525
|
+
};
|
|
3526
|
+
const visitRow = (r, cells) => {
|
|
3527
|
+
if (end.col - start.col + 1 <= cells.size)
|
|
3528
|
+
for (let c2 = start.col; c2 <= end.col; c2++) visit2(r, c2, cells.get(c2));
|
|
3529
|
+
else for (const [c2, cell] of cells) visit2(r, c2, cell);
|
|
3530
|
+
};
|
|
3531
|
+
if (end.row - start.row + 1 <= sheet.rows.size) {
|
|
3532
|
+
for (let r = start.row; r <= end.row; r++) {
|
|
3533
|
+
const cells = sheet.rows.get(r);
|
|
3534
|
+
if (cells) visitRow(r, cells);
|
|
3535
|
+
}
|
|
3536
|
+
} else
|
|
3537
|
+
for (const [r, cells] of sheet.rows) if (r >= start.row && r <= end.row) visitRow(r, cells);
|
|
3538
|
+
for (const [r, c2] of owned) releaseSpilledCell(sheet, r, c2);
|
|
3539
|
+
}
|
|
3540
|
+
function footprintFor(row2, col, m) {
|
|
3541
|
+
const end = { row: row2 + m.rows - 1, col: col + m.cols - 1 };
|
|
3542
|
+
if (end.row > MAX_ROW || end.col > MAX_COL) return void 0;
|
|
3543
|
+
return { start: { row: row2, col }, end };
|
|
3544
|
+
}
|
|
3545
|
+
function footprintFree(sheet, footprint, row2, col, claims) {
|
|
3546
|
+
if (sheet.merges.some((m) => rangesIntersect(m, footprint))) return false;
|
|
3547
|
+
for (let r = footprint.start.row; r <= footprint.end.row; r++) {
|
|
3548
|
+
const cells = sheet.rows.get(r);
|
|
3549
|
+
if (!cells) continue;
|
|
3550
|
+
for (let c2 = footprint.start.col; c2 <= footprint.end.col; c2++) {
|
|
3551
|
+
if (r === row2 && c2 === col) continue;
|
|
3552
|
+
const cell = cells.get(c2);
|
|
3553
|
+
if (!cell) continue;
|
|
3554
|
+
if (cell.formula) return false;
|
|
3555
|
+
if (isSpilledCell(cell)) {
|
|
3556
|
+
const a2 = cell.spillAnchor;
|
|
3557
|
+
if (a2.row === row2 && a2.col === col) continue;
|
|
3558
|
+
if (claims(a2, r, c2)) return false;
|
|
3559
|
+
continue;
|
|
3560
|
+
}
|
|
3561
|
+
if (cell.value !== null) return false;
|
|
3562
|
+
}
|
|
3563
|
+
}
|
|
3564
|
+
return true;
|
|
3565
|
+
}
|
|
3566
|
+
function writeFootprint(sheet, footprint, m) {
|
|
3567
|
+
const { row: row2, col } = footprint.start;
|
|
3568
|
+
for (let r = footprint.start.row; r <= footprint.end.row; r++) {
|
|
3569
|
+
for (let c2 = footprint.start.col; c2 <= footprint.end.col; c2++) {
|
|
3570
|
+
const value3 = cellValueOf(m.get(r - row2, c2 - col));
|
|
3571
|
+
const cell = getCell(sheet, r, c2);
|
|
3572
|
+
if (r === row2 && c2 === col) {
|
|
3573
|
+
if (cell) cell.value = value3;
|
|
3574
|
+
continue;
|
|
3575
|
+
}
|
|
3576
|
+
if (cell) {
|
|
3577
|
+
cell.value = value3;
|
|
3578
|
+
if (!isSpilledCell(cell) || cell.spillAnchor.row !== row2 || cell.spillAnchor.col !== col)
|
|
3579
|
+
cell.spillAnchor = { row: row2, col };
|
|
3580
|
+
} else {
|
|
3581
|
+
const spilled = { value: value3, spillAnchor: { row: row2, col } };
|
|
3582
|
+
putCell(sheet, r, c2, spilled);
|
|
3583
|
+
}
|
|
3584
|
+
}
|
|
3585
|
+
}
|
|
3586
|
+
}
|
|
3587
|
+
function fillArrayRange(sheet, range2, m) {
|
|
3588
|
+
const { row: row2, col } = range2.start;
|
|
3589
|
+
for (let r = range2.start.row; r <= range2.end.row; r++) {
|
|
3590
|
+
for (let c2 = range2.start.col; c2 <= range2.end.col; c2++) {
|
|
3591
|
+
const value3 = cellValueOf(pick(m, r - row2, c2 - col));
|
|
3592
|
+
const cell = getCell(sheet, r, c2);
|
|
3593
|
+
if (cell) cell.value = value3;
|
|
3594
|
+
else putCell(sheet, r, c2, { value: value3 });
|
|
3595
|
+
}
|
|
3596
|
+
}
|
|
3597
|
+
}
|
|
3598
|
+
var cellValueOf = (value3) => value3 === null ? 0 : value3;
|
|
3599
|
+
|
|
3600
|
+
// xlsx/formula/engine-prepare.ts
|
|
3601
|
+
var CHECK_EVERY = 32;
|
|
3602
|
+
var GraphPreparation = class {
|
|
3603
|
+
constructor(workbook, create) {
|
|
3604
|
+
this.workbook = workbook;
|
|
3605
|
+
this.create = create;
|
|
3606
|
+
}
|
|
3607
|
+
workbook;
|
|
3608
|
+
create;
|
|
3609
|
+
reverse = new ReverseIndex();
|
|
3610
|
+
formulas = { dynamic: [], unvalued: [] };
|
|
3611
|
+
/**
|
|
3612
|
+
* The spills stored in the file, by sheet and anchor (`cellKey`): from the anchor to the last
|
|
3613
|
+
* row and column of the cells marked as its results. Until the anchor is evaluated they are
|
|
3614
|
+
* the only record of the cells it covers.
|
|
3615
|
+
*/
|
|
3616
|
+
spills = /* @__PURE__ */ new Map();
|
|
3617
|
+
sheet = 0;
|
|
3618
|
+
rows;
|
|
3619
|
+
row = 0;
|
|
3620
|
+
cells;
|
|
3621
|
+
finished = false;
|
|
3622
|
+
/**
|
|
3623
|
+
* Adds formulas to the graph until `timeRemaining` (milliseconds, as an idle deadline reports
|
|
3624
|
+
* them) reaches zero, or until every formula is in. Returns true when the graph is complete.
|
|
3625
|
+
*/
|
|
3626
|
+
run(timeRemaining) {
|
|
3627
|
+
let visited = 0;
|
|
3628
|
+
while (!this.finished) {
|
|
3629
|
+
const cells = this.cells ?? this.nextRow();
|
|
3630
|
+
if (!cells) continue;
|
|
3631
|
+
const next = cells.next();
|
|
3632
|
+
if (next.done) {
|
|
3633
|
+
this.cells = void 0;
|
|
3634
|
+
continue;
|
|
3635
|
+
}
|
|
3636
|
+
const [col, cell] = next.value;
|
|
3637
|
+
if (cell.formula) this.add(this.create(this.sheet, this.row, col, cell), cell);
|
|
3638
|
+
else if (isSpilledCell(cell)) this.addSpilled(this.row, col, cell.spillAnchor);
|
|
3639
|
+
if (timeRemaining && ++visited % CHECK_EVERY === 0 && timeRemaining() <= 0) break;
|
|
3640
|
+
}
|
|
3641
|
+
return this.finished;
|
|
3642
|
+
}
|
|
3643
|
+
add(node2, cell) {
|
|
3644
|
+
this.reverse.addNode(node2);
|
|
3645
|
+
if (!node2.legacy && !node2.arrayRange) this.formulas.dynamic.push(node2);
|
|
3646
|
+
if (cell.value === null && !node2.keepCached) this.formulas.unvalued.push(node2);
|
|
3647
|
+
}
|
|
3648
|
+
addSpilled(row2, col, anchor) {
|
|
3649
|
+
if (row2 < anchor.row || col < anchor.col) return;
|
|
3650
|
+
let spills = this.spills.get(this.sheet);
|
|
3651
|
+
if (!spills) this.spills.set(this.sheet, spills = /* @__PURE__ */ new Map());
|
|
3652
|
+
const key = cellKey(anchor.row, anchor.col);
|
|
3653
|
+
const range2 = spills.get(key);
|
|
3654
|
+
if (!range2) spills.set(key, { start: { ...anchor }, end: { row: row2, col } });
|
|
3655
|
+
else {
|
|
3656
|
+
range2.end.row = Math.max(range2.end.row, row2);
|
|
3657
|
+
range2.end.col = Math.max(range2.end.col, col);
|
|
3658
|
+
}
|
|
3659
|
+
}
|
|
3660
|
+
/** Moves to the next stored row (and sheet), or marks the walk finished. */
|
|
3661
|
+
nextRow() {
|
|
3662
|
+
for (; ; ) {
|
|
3663
|
+
const sheet = this.workbook.sheets[this.sheet];
|
|
3664
|
+
if (!sheet) {
|
|
3665
|
+
this.finished = true;
|
|
3666
|
+
return void 0;
|
|
3667
|
+
}
|
|
3668
|
+
this.rows ??= sheet.rows.entries();
|
|
3669
|
+
const next = this.rows.next();
|
|
3670
|
+
if (!next.done) {
|
|
3671
|
+
this.row = next.value[0];
|
|
3672
|
+
this.cells = next.value[1].entries();
|
|
3673
|
+
return this.cells;
|
|
3674
|
+
}
|
|
3675
|
+
this.rows = void 0;
|
|
3676
|
+
this.sheet++;
|
|
3677
|
+
}
|
|
3678
|
+
}
|
|
3679
|
+
};
|
|
3680
|
+
|
|
3402
3681
|
// xlsx/formula/functions/wildcard.ts
|
|
3403
3682
|
var lower = (ch) => (ch ?? "").toLowerCase();
|
|
3404
3683
|
var fold = (text4) => Array.from({ length: text4.length }, (_, i2) => lower(text4[i2]));
|
|
@@ -6872,138 +7151,6 @@ var INFO_FUNCTIONS = [
|
|
|
6872
7151
|
)
|
|
6873
7152
|
];
|
|
6874
7153
|
|
|
6875
|
-
// xlsx/formula/operators.ts
|
|
6876
|
-
var signal = (fn) => {
|
|
6877
|
-
try {
|
|
6878
|
-
return fn();
|
|
6879
|
-
} catch (e) {
|
|
6880
|
-
if (e instanceof ErrorSignal) return e.value;
|
|
6881
|
-
throw e;
|
|
6882
|
-
}
|
|
6883
|
-
};
|
|
6884
|
-
function power(base, exponent) {
|
|
6885
|
-
if (base === 0 && exponent === 0) throw new ErrorSignal(ERR.NUM);
|
|
6886
|
-
if (base === 0 && exponent < 0) throw new ErrorSignal(ERR.DIV0);
|
|
6887
|
-
if (base < 0 && !Number.isInteger(exponent)) {
|
|
6888
|
-
const inverse = 1 / exponent;
|
|
6889
|
-
const odd = Math.round(inverse);
|
|
6890
|
-
if (Math.abs(inverse - odd) < 1e-10 && Math.abs(odd) % 2 === 1) {
|
|
6891
|
-
return -Math.pow(-base, exponent);
|
|
6892
|
-
}
|
|
6893
|
-
throw new ErrorSignal(ERR.NUM);
|
|
6894
|
-
}
|
|
6895
|
-
return Math.pow(base, exponent);
|
|
6896
|
-
}
|
|
6897
|
-
function snapToZero(result2, a2, b) {
|
|
6898
|
-
if (result2 !== 0 && Math.abs(result2) <= Math.max(Math.abs(a2), Math.abs(b)) * 1e-15) return 0;
|
|
6899
|
-
return result2;
|
|
6900
|
-
}
|
|
6901
|
-
function arithmetic(op2, x, y, snap) {
|
|
6902
|
-
if (isError(x)) return x;
|
|
6903
|
-
if (isError(y)) return y;
|
|
6904
|
-
return signal(() => {
|
|
6905
|
-
const a2 = toNumber(x);
|
|
6906
|
-
const b = toNumber(y);
|
|
6907
|
-
let r;
|
|
6908
|
-
switch (op2) {
|
|
6909
|
-
case "+":
|
|
6910
|
-
r = a2 + b;
|
|
6911
|
-
if (snap) r = snapToZero(r, a2, b);
|
|
6912
|
-
break;
|
|
6913
|
-
case "-":
|
|
6914
|
-
r = a2 - b;
|
|
6915
|
-
if (snap) r = snapToZero(r, a2, b);
|
|
6916
|
-
break;
|
|
6917
|
-
case "*":
|
|
6918
|
-
r = a2 * b;
|
|
6919
|
-
break;
|
|
6920
|
-
case "/":
|
|
6921
|
-
if (b === 0) return ERR.DIV0;
|
|
6922
|
-
r = a2 / b;
|
|
6923
|
-
break;
|
|
6924
|
-
default:
|
|
6925
|
-
r = power(a2, b);
|
|
6926
|
-
}
|
|
6927
|
-
return Number.isFinite(r) ? r === 0 ? 0 : r : ERR.NUM;
|
|
6928
|
-
});
|
|
6929
|
-
}
|
|
6930
|
-
function comparison(op2, x, y) {
|
|
6931
|
-
if (isError(x)) return x;
|
|
6932
|
-
if (isError(y)) return y;
|
|
6933
|
-
const c2 = compareScalars(x, y);
|
|
6934
|
-
switch (op2) {
|
|
6935
|
-
case "=":
|
|
6936
|
-
return c2 === 0;
|
|
6937
|
-
case "<>":
|
|
6938
|
-
return c2 !== 0;
|
|
6939
|
-
case "<":
|
|
6940
|
-
return c2 < 0;
|
|
6941
|
-
case ">":
|
|
6942
|
-
return c2 > 0;
|
|
6943
|
-
case "<=":
|
|
6944
|
-
return c2 <= 0;
|
|
6945
|
-
default:
|
|
6946
|
-
return c2 >= 0;
|
|
6947
|
-
}
|
|
6948
|
-
}
|
|
6949
|
-
function concat(x, y) {
|
|
6950
|
-
if (isError(x)) return x;
|
|
6951
|
-
if (isError(y)) return y;
|
|
6952
|
-
return toText(x) + toText(y);
|
|
6953
|
-
}
|
|
6954
|
-
function scalarBinary(op2, x, y, snap = false) {
|
|
6955
|
-
if (op2 === "&") return concat(x, y);
|
|
6956
|
-
if (op2 === "+" || op2 === "-" || op2 === "*" || op2 === "/" || op2 === "^") {
|
|
6957
|
-
return arithmetic(op2, x, y, snap);
|
|
6958
|
-
}
|
|
6959
|
-
return comparison(op2, x, y);
|
|
6960
|
-
}
|
|
6961
|
-
function scalarUnary(op2, x) {
|
|
6962
|
-
if (isError(x)) return x;
|
|
6963
|
-
return signal(() => {
|
|
6964
|
-
const n2 = toNumber(x);
|
|
6965
|
-
const r = op2 === "-" ? -n2 : n2 / 100;
|
|
6966
|
-
return r === 0 ? 0 : r;
|
|
6967
|
-
});
|
|
6968
|
-
}
|
|
6969
|
-
function pick(m, row2, col) {
|
|
6970
|
-
const r = m.rows === 1 ? 0 : row2;
|
|
6971
|
-
const c2 = m.cols === 1 ? 0 : col;
|
|
6972
|
-
if (r >= m.rows || c2 >= m.cols) return ERR.NA;
|
|
6973
|
-
return m.get(r, c2);
|
|
6974
|
-
}
|
|
6975
|
-
function broadcastShape(operands, at) {
|
|
6976
|
-
let rows2 = 1;
|
|
6977
|
-
let cols = 1;
|
|
6978
|
-
for (const m of operands) {
|
|
6979
|
-
rows2 = Math.max(rows2, m.rows);
|
|
6980
|
-
cols = Math.max(cols, m.cols);
|
|
6981
|
-
}
|
|
6982
|
-
if (!operands.some((m) => m.isPadded)) return Matrix.build(rows2, cols, at);
|
|
6983
|
-
let blockRows = 1;
|
|
6984
|
-
let blockCols = 1;
|
|
6985
|
-
for (const m of operands) {
|
|
6986
|
-
blockRows = Math.max(blockRows, m.isPadded ? m.blockRows : m.rows);
|
|
6987
|
-
blockCols = Math.max(blockCols, m.isPadded ? m.blockCols : m.cols);
|
|
6988
|
-
}
|
|
6989
|
-
blockRows = Math.min(blockRows, rows2);
|
|
6990
|
-
blockCols = Math.min(blockCols, cols);
|
|
6991
|
-
const varies = operands.some(
|
|
6992
|
-
(m) => blockRows < rows2 && m.rows === 1 && m.cols > 1 || blockCols < cols && m.cols === 1 && m.rows > 1
|
|
6993
|
-
);
|
|
6994
|
-
if (varies) return Matrix.build(rows2, cols, at);
|
|
6995
|
-
return Matrix.padded(Matrix.build(blockRows, blockCols, at), rows2, cols, at(rows2 - 1, cols - 1));
|
|
6996
|
-
}
|
|
6997
|
-
function broadcast2(a2, b, fn) {
|
|
6998
|
-
if (!(a2 instanceof Matrix) && !(b instanceof Matrix)) return fn(a2, b);
|
|
6999
|
-
const ma = a2 instanceof Matrix ? a2 : new Matrix([[a2]]);
|
|
7000
|
-
const mb = b instanceof Matrix ? b : new Matrix([[b]]);
|
|
7001
|
-
return broadcastShape([ma, mb], (r, c2) => fn(pick(ma, r, c2), pick(mb, r, c2)));
|
|
7002
|
-
}
|
|
7003
|
-
function broadcast1(a2, fn) {
|
|
7004
|
-
return a2 instanceof Matrix ? a2.mapValues(fn) : fn(a2);
|
|
7005
|
-
}
|
|
7006
|
-
|
|
7007
7154
|
// xlsx/formula/functions/lambda.ts
|
|
7008
7155
|
var C16 = "Logical";
|
|
7009
7156
|
function lambdaArg(value3) {
|
|
@@ -11741,6 +11888,19 @@ var DEFAULT_XML_LIMITS = {
|
|
|
11741
11888
|
maxDepth: 512,
|
|
11742
11889
|
maxNodes: 5e6
|
|
11743
11890
|
};
|
|
11891
|
+
var XmlLimitError = class extends Error {
|
|
11892
|
+
code = "xml-limit";
|
|
11893
|
+
/** The limit that was exceeded. */
|
|
11894
|
+
limit;
|
|
11895
|
+
/** Its value: the largest depth or element count allowed. */
|
|
11896
|
+
maximum;
|
|
11897
|
+
constructor(message, limit2, maximum) {
|
|
11898
|
+
super(message);
|
|
11899
|
+
this.name = "XmlLimitError";
|
|
11900
|
+
this.limit = limit2;
|
|
11901
|
+
this.maximum = maximum;
|
|
11902
|
+
}
|
|
11903
|
+
};
|
|
11744
11904
|
var TAG_RE = /<(\/?)([^\s\/><]+)(?:\s+[^\s=\/><]+\s*=\s*(?:"[^"<]*"|'[^'<]*'))*\s*(\/?)>/y;
|
|
11745
11905
|
var MARKUP_SKIPS = [
|
|
11746
11906
|
["<!--", "-->"],
|
|
@@ -11774,11 +11934,22 @@ function checkXmlLimits(xml, label2, limits = {}) {
|
|
|
11774
11934
|
continue;
|
|
11775
11935
|
}
|
|
11776
11936
|
nodes++;
|
|
11777
|
-
if (nodes > maxNodes)
|
|
11937
|
+
if (nodes > maxNodes)
|
|
11938
|
+
throw new XmlLimitError(
|
|
11939
|
+
`${label2} XML exceeds the limit of ${maxNodes} elements`,
|
|
11940
|
+
"maxNodes",
|
|
11941
|
+
maxNodes
|
|
11942
|
+
);
|
|
11778
11943
|
if (!selfClosing && ++depth > maxDepth)
|
|
11779
|
-
throw new
|
|
11944
|
+
throw new XmlLimitError(
|
|
11945
|
+
`${label2} XML exceeds the nesting depth limit of ${maxDepth}`,
|
|
11946
|
+
"maxDepth",
|
|
11947
|
+
maxDepth
|
|
11948
|
+
);
|
|
11780
11949
|
}
|
|
11781
11950
|
}
|
|
11951
|
+
var CRLF_DECLARATION = /^<\?xml[^>]*\?>\r\n/;
|
|
11952
|
+
var crlfDeclarations = /* @__PURE__ */ new WeakSet();
|
|
11782
11953
|
function parseXml(xml, options7 = {}) {
|
|
11783
11954
|
const label2 = options7.label ?? "OOXML";
|
|
11784
11955
|
if (/<!DOCTYPE|<!ENTITY/i.test(xml))
|
|
@@ -11800,9 +11971,13 @@ function parseXml(xml, options7 = {}) {
|
|
|
11800
11971
|
}
|
|
11801
11972
|
if (parseError || !parsed.documentElement)
|
|
11802
11973
|
throw new Error(`Invalid ${label2} XML: ${parseError || "missing root element"}`);
|
|
11974
|
+
if (CRLF_DECLARATION.test(xml)) crlfDeclarations.add(parsed);
|
|
11803
11975
|
return parsed;
|
|
11804
11976
|
}
|
|
11805
|
-
var buildXml = (node2) =>
|
|
11977
|
+
var buildXml = (node2) => {
|
|
11978
|
+
const xml = new xmldom.XMLSerializer().serializeToString(node2);
|
|
11979
|
+
return crlfDeclarations.has(node2) ? xml.replace(/^(<\?xml[^>]*\?>)\n/, "$1\r\n") : xml;
|
|
11980
|
+
};
|
|
11806
11981
|
var isElement = (node2) => node2.nodeType === 1;
|
|
11807
11982
|
var elements = (parent) => Array.from(parent.childNodes).filter(isElement);
|
|
11808
11983
|
function named(element2, local, ns, lenient = true) {
|
|
@@ -14919,89 +15094,6 @@ function sheetBounds(sheet) {
|
|
|
14919
15094
|
return { rows: rows2, cols };
|
|
14920
15095
|
}
|
|
14921
15096
|
|
|
14922
|
-
// xlsx/formula/spill.ts
|
|
14923
|
-
var isSpilledCell = (cell) => cell !== void 0 && "spillAnchor" in cell;
|
|
14924
|
-
function releaseSpilledCell(sheet, row2, col) {
|
|
14925
|
-
const cell = getCell(sheet, row2, col);
|
|
14926
|
-
if (!isSpilledCell(cell)) return;
|
|
14927
|
-
delete cell.spillAnchor;
|
|
14928
|
-
cell.value = null;
|
|
14929
|
-
if (!cell.styleId && !cell.formula && !cell.richText && !cell.arrayRange)
|
|
14930
|
-
deleteCell(sheet, row2, col);
|
|
14931
|
-
}
|
|
14932
|
-
function clearFootprint(sheet, footprint, row2, col) {
|
|
14933
|
-
for (let r = footprint.start.row; r <= footprint.end.row; r++) {
|
|
14934
|
-
const cells = sheet.rows.get(r);
|
|
14935
|
-
if (!cells) continue;
|
|
14936
|
-
for (let c2 = footprint.start.col; c2 <= footprint.end.col; c2++) {
|
|
14937
|
-
if (r === row2 && c2 === col) continue;
|
|
14938
|
-
const cell = cells.get(c2);
|
|
14939
|
-
if (isSpilledCell(cell) && cell.spillAnchor.row === row2 && cell.spillAnchor.col === col) {
|
|
14940
|
-
releaseSpilledCell(sheet, r, c2);
|
|
14941
|
-
}
|
|
14942
|
-
}
|
|
14943
|
-
}
|
|
14944
|
-
}
|
|
14945
|
-
function footprintFor(row2, col, m) {
|
|
14946
|
-
const end = { row: row2 + m.rows - 1, col: col + m.cols - 1 };
|
|
14947
|
-
if (end.row > MAX_ROW || end.col > MAX_COL) return void 0;
|
|
14948
|
-
return { start: { row: row2, col }, end };
|
|
14949
|
-
}
|
|
14950
|
-
function footprintFree(sheet, footprint, row2, col, claims) {
|
|
14951
|
-
if (sheet.merges.some((m) => rangesIntersect(m, footprint))) return false;
|
|
14952
|
-
for (let r = footprint.start.row; r <= footprint.end.row; r++) {
|
|
14953
|
-
const cells = sheet.rows.get(r);
|
|
14954
|
-
if (!cells) continue;
|
|
14955
|
-
for (let c2 = footprint.start.col; c2 <= footprint.end.col; c2++) {
|
|
14956
|
-
if (r === row2 && c2 === col) continue;
|
|
14957
|
-
const cell = cells.get(c2);
|
|
14958
|
-
if (!cell) continue;
|
|
14959
|
-
if (cell.formula) return false;
|
|
14960
|
-
if (isSpilledCell(cell)) {
|
|
14961
|
-
const a2 = cell.spillAnchor;
|
|
14962
|
-
if (a2.row === row2 && a2.col === col) continue;
|
|
14963
|
-
if (claims(a2, r, c2)) return false;
|
|
14964
|
-
continue;
|
|
14965
|
-
}
|
|
14966
|
-
if (cell.value !== null) return false;
|
|
14967
|
-
}
|
|
14968
|
-
}
|
|
14969
|
-
return true;
|
|
14970
|
-
}
|
|
14971
|
-
function writeFootprint(sheet, footprint, m) {
|
|
14972
|
-
const { row: row2, col } = footprint.start;
|
|
14973
|
-
for (let r = footprint.start.row; r <= footprint.end.row; r++) {
|
|
14974
|
-
for (let c2 = footprint.start.col; c2 <= footprint.end.col; c2++) {
|
|
14975
|
-
const value3 = cellValueOf(m.get(r - row2, c2 - col));
|
|
14976
|
-
const cell = getCell(sheet, r, c2);
|
|
14977
|
-
if (r === row2 && c2 === col) {
|
|
14978
|
-
if (cell) cell.value = value3;
|
|
14979
|
-
continue;
|
|
14980
|
-
}
|
|
14981
|
-
if (cell) {
|
|
14982
|
-
cell.value = value3;
|
|
14983
|
-
if (!isSpilledCell(cell) || cell.spillAnchor.row !== row2 || cell.spillAnchor.col !== col)
|
|
14984
|
-
cell.spillAnchor = { row: row2, col };
|
|
14985
|
-
} else {
|
|
14986
|
-
const spilled = { value: value3, spillAnchor: { row: row2, col } };
|
|
14987
|
-
putCell(sheet, r, c2, spilled);
|
|
14988
|
-
}
|
|
14989
|
-
}
|
|
14990
|
-
}
|
|
14991
|
-
}
|
|
14992
|
-
function fillArrayRange(sheet, range2, m) {
|
|
14993
|
-
const { row: row2, col } = range2.start;
|
|
14994
|
-
for (let r = range2.start.row; r <= range2.end.row; r++) {
|
|
14995
|
-
for (let c2 = range2.start.col; c2 <= range2.end.col; c2++) {
|
|
14996
|
-
const value3 = cellValueOf(pick(m, r - row2, c2 - col));
|
|
14997
|
-
const cell = getCell(sheet, r, c2);
|
|
14998
|
-
if (cell) cell.value = value3;
|
|
14999
|
-
else putCell(sheet, r, c2, { value: value3 });
|
|
15000
|
-
}
|
|
15001
|
-
}
|
|
15002
|
-
}
|
|
15003
|
-
var cellValueOf = (value3) => value3 === null ? 0 : value3;
|
|
15004
|
-
|
|
15005
15097
|
// xlsx/formula/engine-host.ts
|
|
15006
15098
|
var Deferred = class {
|
|
15007
15099
|
constructor(node2) {
|
|
@@ -15926,6 +16018,8 @@ var Engine = class extends EngineStructure {
|
|
|
15926
16018
|
preparation;
|
|
15927
16019
|
/** The prepared formulas the first recalculation checks (see `trustsStoredValues`). */
|
|
15928
16020
|
prepared;
|
|
16021
|
+
/** Stored spills released when the graph was built: their readers must recalculate. */
|
|
16022
|
+
released = [];
|
|
15929
16023
|
// ---- the graph ----
|
|
15930
16024
|
prepare(timeRemaining) {
|
|
15931
16025
|
if (this.built || this.needsFull) return true;
|
|
@@ -15963,10 +16057,33 @@ var Engine = class extends EngineStructure {
|
|
|
15963
16057
|
finishPreparation(preparation) {
|
|
15964
16058
|
this.preparation = void 0;
|
|
15965
16059
|
this.built = true;
|
|
16060
|
+
this.adoptStoredSpills(preparation.spills);
|
|
15966
16061
|
this.graphChanged();
|
|
15967
16062
|
this.reverseIndex = preparation.reverse;
|
|
15968
16063
|
this.prepared = preparation.formulas;
|
|
15969
16064
|
}
|
|
16065
|
+
/**
|
|
16066
|
+
* Takes the spills a file stored as their anchors' last footprints, so that overwriting an
|
|
16067
|
+
* anchor or shrinking its result clears the cells it covered before it was ever evaluated here.
|
|
16068
|
+
* Cells marked for an anchor that holds no formula able to spill are released.
|
|
16069
|
+
*/
|
|
16070
|
+
adoptStoredSpills(spills) {
|
|
16071
|
+
for (const [s, anchors] of spills)
|
|
16072
|
+
for (const [key, range2] of anchors) {
|
|
16073
|
+
const node2 = this.nodes.get(s)?.get(key);
|
|
16074
|
+
if (node2 && !node2.legacy && !node2.arrayRange) {
|
|
16075
|
+
if (!node2.spill && !node2.blockedSpill) {
|
|
16076
|
+
node2.spill = range2;
|
|
16077
|
+
this.footprints.add(node2);
|
|
16078
|
+
}
|
|
16079
|
+
continue;
|
|
16080
|
+
}
|
|
16081
|
+
const sheet = this.workbook.sheets[s];
|
|
16082
|
+
if (!sheet) continue;
|
|
16083
|
+
clearFootprint(sheet, range2, range2.start.row, range2.start.col);
|
|
16084
|
+
this.released.push({ sheet: s, range: range2 });
|
|
16085
|
+
}
|
|
16086
|
+
}
|
|
15970
16087
|
// ---- recalculation ----
|
|
15971
16088
|
recalculateAll() {
|
|
15972
16089
|
resetArrayBudget();
|
|
@@ -15975,6 +16092,7 @@ var Engine = class extends EngineStructure {
|
|
|
15975
16092
|
if (this.needsFull) this.releaseAllSpills();
|
|
15976
16093
|
if (!this.built || this.needsFull) this.build();
|
|
15977
16094
|
this.needsFull = false;
|
|
16095
|
+
this.released = [];
|
|
15978
16096
|
this.structuralSeeds.clear();
|
|
15979
16097
|
this.cycles = /* @__PURE__ */ new Set();
|
|
15980
16098
|
this.run(new Set(this.allNodes()), true);
|
|
@@ -15993,7 +16111,9 @@ var Engine = class extends EngineStructure {
|
|
|
15993
16111
|
this.recalculateAll();
|
|
15994
16112
|
return;
|
|
15995
16113
|
}
|
|
15996
|
-
const changed =
|
|
16114
|
+
const changed = this.released;
|
|
16115
|
+
this.released = [];
|
|
16116
|
+
const written = [];
|
|
15997
16117
|
let structural = false;
|
|
15998
16118
|
for (const change of changes) {
|
|
15999
16119
|
const sheet = this.workbook.sheets[change.sheet];
|
|
@@ -16013,7 +16133,8 @@ var Engine = class extends EngineStructure {
|
|
|
16013
16133
|
seeds.add(this.createNode(change.sheet, row2, col, cell, false));
|
|
16014
16134
|
structural = true;
|
|
16015
16135
|
} else if (existing && formula) seeds.add(existing);
|
|
16016
|
-
|
|
16136
|
+
written.push(change);
|
|
16137
|
+
if (!this.footprints.size) continue;
|
|
16017
16138
|
const anchors = [];
|
|
16018
16139
|
this.footprintsBy().dependents(
|
|
16019
16140
|
change.sheet,
|
|
@@ -16030,7 +16151,8 @@ var Engine = class extends EngineStructure {
|
|
|
16030
16151
|
if (structural) this.graphChanged();
|
|
16031
16152
|
this.takeStructuralSeeds(seeds);
|
|
16032
16153
|
const reverse2 = this.reverse();
|
|
16033
|
-
for (const area of changed
|
|
16154
|
+
for (const area of [...changed, ...changeAreas(written)])
|
|
16155
|
+
reverse2.dependents(area.sheet, area.range, seeds);
|
|
16034
16156
|
for (const node2 of this.allNodes()) if (node2.volatile) seeds.add(node2);
|
|
16035
16157
|
this.run(seeds, false);
|
|
16036
16158
|
}
|
|
@@ -16043,11 +16165,17 @@ var Engine = class extends EngineStructure {
|
|
|
16043
16165
|
const prepared = this.prepared;
|
|
16044
16166
|
this.prepared = void 0;
|
|
16045
16167
|
if (!prepared) return false;
|
|
16046
|
-
const changed = new Set(changes.map((c2) => `${c2.sheet}:${cellKey(c2.row, c2.col)}`));
|
|
16047
16168
|
const current = (node2) => this.nodes.get(node2.sheet)?.get(cellKey(node2.row, node2.col)) === node2;
|
|
16048
|
-
|
|
16049
|
-
|
|
16050
|
-
|
|
16169
|
+
const dynamic = prepared.dynamic.filter(current);
|
|
16170
|
+
if (dynamic.length) {
|
|
16171
|
+
const changed = /* @__PURE__ */ new Map();
|
|
16172
|
+
for (const c2 of changes) {
|
|
16173
|
+
let keys = changed.get(c2.sheet);
|
|
16174
|
+
if (!keys) changed.set(c2.sheet, keys = /* @__PURE__ */ new Set());
|
|
16175
|
+
keys.add(cellKey(c2.row, c2.col));
|
|
16176
|
+
}
|
|
16177
|
+
for (const node2 of dynamic)
|
|
16178
|
+
if (!changed.get(node2.sheet)?.has(cellKey(node2.row, node2.col))) return false;
|
|
16051
16179
|
}
|
|
16052
16180
|
for (const node2 of prepared.unvalued) {
|
|
16053
16181
|
const cell = this.workbook.sheets[node2.sheet]?.rows.get(node2.row)?.get(node2.col);
|
|
@@ -16775,10 +16903,13 @@ var DEFAULT_ZIP_LIMITS = {
|
|
|
16775
16903
|
var ZipLimitError = class extends Error {
|
|
16776
16904
|
code = "ZIP_BOMB";
|
|
16777
16905
|
limit;
|
|
16906
|
+
/** The check that failed (absent when the error was built without one). */
|
|
16907
|
+
kind;
|
|
16778
16908
|
constructor(message, details) {
|
|
16779
16909
|
super(message);
|
|
16780
16910
|
this.name = "ZipLimitError";
|
|
16781
16911
|
this.limit = details.limit;
|
|
16912
|
+
this.kind = details.kind;
|
|
16782
16913
|
}
|
|
16783
16914
|
};
|
|
16784
16915
|
var mib = (bytes) => Math.round(bytes / 1048576);
|
|
@@ -16801,7 +16932,7 @@ function resolveLimits(limits) {
|
|
|
16801
16932
|
maxEntryBytes: limits.maxEntryBytes ?? DEFAULT_ZIP_LIMITS.maxEntryBytes,
|
|
16802
16933
|
maxTotalBytes: limits.maxTotalBytes ?? DEFAULT_ZIP_LIMITS.maxTotalBytes,
|
|
16803
16934
|
label: limits.label ?? "ZIP",
|
|
16804
|
-
fail: (message, limit2) => create ? create(message, { limit: limit2 }) : new ZipLimitError(message, { limit: limit2 })
|
|
16935
|
+
fail: (message, limit2, kind) => create ? create(message, { limit: limit2, kind }) : new ZipLimitError(message, { limit: limit2, kind })
|
|
16805
16936
|
};
|
|
16806
16937
|
}
|
|
16807
16938
|
function inflateEntryGuarded(entry3, alreadyRead, limits) {
|
|
@@ -16824,13 +16955,18 @@ function inflateEntryGuarded(entry3, alreadyRead, limits) {
|
|
|
16824
16955
|
size += chunk.byteLength;
|
|
16825
16956
|
if (size > declared || size > r.maxEntryBytes)
|
|
16826
16957
|
return abort(
|
|
16827
|
-
r.fail(
|
|
16958
|
+
r.fail(
|
|
16959
|
+
`${r.label} part ${entry3.name} inflates past its declared size`,
|
|
16960
|
+
r.maxEntryBytes,
|
|
16961
|
+
size > declared ? "declaredSize" : "maxEntryBytes"
|
|
16962
|
+
)
|
|
16828
16963
|
);
|
|
16829
16964
|
if (alreadyRead + size > r.maxTotalBytes)
|
|
16830
16965
|
return abort(
|
|
16831
16966
|
r.fail(
|
|
16832
16967
|
`${r.label} package exceeds the ${mib(r.maxTotalBytes)} MiB uncompressed content limit`,
|
|
16833
|
-
r.maxTotalBytes
|
|
16968
|
+
r.maxTotalBytes,
|
|
16969
|
+
"maxTotalBytes"
|
|
16834
16970
|
)
|
|
16835
16971
|
);
|
|
16836
16972
|
chunks.push(chunk);
|
|
@@ -16863,26 +16999,29 @@ function guardZip(zip, limits = {}) {
|
|
|
16863
16999
|
if (entries.length > r.maxEntries)
|
|
16864
17000
|
throw r.fail(
|
|
16865
17001
|
`${r.label} package exceeds the ${r.maxEntries.toLocaleString("en-US")} part limit`,
|
|
16866
|
-
r.maxEntries
|
|
17002
|
+
r.maxEntries,
|
|
17003
|
+
"maxEntries"
|
|
16867
17004
|
);
|
|
16868
17005
|
let declared = 0;
|
|
16869
17006
|
for (const entry3 of entries) {
|
|
16870
17007
|
const original = entry3.unsafeOriginalName;
|
|
16871
17008
|
if (!isSafePartName(entry3.name) || original !== void 0 && !isSafePartName(original))
|
|
16872
|
-
throw r.fail(`${r.label} package has an unsafe part name`, r.maxEntries);
|
|
17009
|
+
throw r.fail(`${r.label} package has an unsafe part name`, r.maxEntries, "partName");
|
|
16873
17010
|
if (entry3.dir) continue;
|
|
16874
17011
|
const size = declaredEntrySize(entry3);
|
|
16875
17012
|
if (size > r.maxEntryBytes)
|
|
16876
17013
|
throw r.fail(
|
|
16877
17014
|
`${r.label} part ${entry3.name} exceeds the uncompressed part size limit`,
|
|
16878
|
-
r.maxEntryBytes
|
|
17015
|
+
r.maxEntryBytes,
|
|
17016
|
+
"maxEntryBytes"
|
|
16879
17017
|
);
|
|
16880
17018
|
declared += size;
|
|
16881
17019
|
}
|
|
16882
17020
|
if (declared > r.maxTotalBytes)
|
|
16883
17021
|
throw r.fail(
|
|
16884
17022
|
`${r.label} package exceeds the ${mib(r.maxTotalBytes)} MiB uncompressed content limit`,
|
|
16885
|
-
r.maxTotalBytes
|
|
17023
|
+
r.maxTotalBytes,
|
|
17024
|
+
"maxTotalBytes"
|
|
16886
17025
|
);
|
|
16887
17026
|
const produced = /* @__PURE__ */ new Map();
|
|
16888
17027
|
let total2 = 0;
|
|
@@ -18925,10 +19064,69 @@ function mergeComments(legacy, threaded) {
|
|
|
18925
19064
|
(a2, b) => a2.address.row - b.address.row || a2.address.col - b.address.col
|
|
18926
19065
|
);
|
|
18927
19066
|
}
|
|
18928
|
-
|
|
18929
|
-
|
|
18930
|
-
var
|
|
18931
|
-
|
|
19067
|
+
|
|
19068
|
+
// xlsx/read/limits.ts
|
|
19069
|
+
var DEFAULT_XLSX_LOAD_LIMITS = {
|
|
19070
|
+
maxInputBytes: 50 * 1024 * 1024,
|
|
19071
|
+
maxParts: 1e4,
|
|
19072
|
+
maxPartBytes: 200 * 1024 * 1024,
|
|
19073
|
+
maxTotalBytes: 300 * 1024 * 1024,
|
|
19074
|
+
maxXmlElements: 5e6
|
|
19075
|
+
};
|
|
19076
|
+
var WorkbookTooLargeError = class extends Error {
|
|
19077
|
+
code = "workbook-too-large";
|
|
19078
|
+
/** The limit that was exceeded, as named in {@link XlsxLoadLimits}. */
|
|
19079
|
+
limit;
|
|
19080
|
+
/** The value of that limit when the load failed. */
|
|
19081
|
+
maximum;
|
|
19082
|
+
constructor(message, limit2, maximum, options7) {
|
|
19083
|
+
super(message, options7);
|
|
19084
|
+
this.name = "WorkbookTooLargeError";
|
|
19085
|
+
this.limit = limit2;
|
|
19086
|
+
this.maximum = maximum;
|
|
19087
|
+
}
|
|
19088
|
+
};
|
|
19089
|
+
function resolveLoadLimits(limits = {}) {
|
|
19090
|
+
const resolved = { ...DEFAULT_XLSX_LOAD_LIMITS };
|
|
19091
|
+
for (const name of Object.keys(resolved)) {
|
|
19092
|
+
const value3 = limits[name];
|
|
19093
|
+
if (value3 === void 0) continue;
|
|
19094
|
+
if (!Number.isFinite(value3) || value3 <= 0)
|
|
19095
|
+
throw new RangeError(`limits.${name} must be a positive finite number`);
|
|
19096
|
+
resolved[name] = value3;
|
|
19097
|
+
}
|
|
19098
|
+
return resolved;
|
|
19099
|
+
}
|
|
19100
|
+
var ZIP_LIMIT_NAMES = {
|
|
19101
|
+
maxInputBytes: "maxInputBytes",
|
|
19102
|
+
maxEntries: "maxParts",
|
|
19103
|
+
maxEntryBytes: "maxPartBytes",
|
|
19104
|
+
maxTotalBytes: "maxTotalBytes"
|
|
19105
|
+
};
|
|
19106
|
+
function zipLimitsFor(limits) {
|
|
19107
|
+
return {
|
|
19108
|
+
maxInputBytes: limits.maxInputBytes,
|
|
19109
|
+
maxEntries: limits.maxParts,
|
|
19110
|
+
maxEntryBytes: limits.maxPartBytes,
|
|
19111
|
+
maxTotalBytes: limits.maxTotalBytes,
|
|
19112
|
+
label: "XLSX",
|
|
19113
|
+
createError: (message, { limit: limit2, kind }) => {
|
|
19114
|
+
const name = ZIP_LIMIT_NAMES[kind];
|
|
19115
|
+
return name ? new WorkbookTooLargeError(message, name, limit2) : new ZipLimitError(message, { limit: limit2, kind });
|
|
19116
|
+
}
|
|
19117
|
+
};
|
|
19118
|
+
}
|
|
19119
|
+
function parseDataXml(xml, label2, maxXmlElements = DEFAULT_XLSX_LOAD_LIMITS.maxXmlElements) {
|
|
19120
|
+
try {
|
|
19121
|
+
return parseXml(xml, { label: label2, limits: { maxNodes: maxXmlElements } });
|
|
19122
|
+
} catch (error) {
|
|
19123
|
+
if (error instanceof XmlLimitError && error.limit === "maxNodes")
|
|
19124
|
+
throw new WorkbookTooLargeError(error.message, "maxXmlElements", error.maximum, {
|
|
19125
|
+
cause: error
|
|
19126
|
+
});
|
|
19127
|
+
throw error;
|
|
19128
|
+
}
|
|
19129
|
+
}
|
|
18932
19130
|
var CONTENT_TYPES = {
|
|
18933
19131
|
workbook: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",
|
|
18934
19132
|
workbookMacro: "application/vnd.ms-excel.sheet.macroEnabled.main+xml",
|
|
@@ -19018,16 +19216,15 @@ var SourceIndex = class {
|
|
|
19018
19216
|
};
|
|
19019
19217
|
var mib2 = (bytes) => Math.round(bytes / 1048576);
|
|
19020
19218
|
async function readZipParts(input, limits = {}) {
|
|
19021
|
-
const
|
|
19022
|
-
const
|
|
19023
|
-
maxEntries: limits.maxParts ?? MAX_PARTS,
|
|
19024
|
-
maxEntryBytes: limits.maxPartBytes ?? MAX_PART_BYTES,
|
|
19025
|
-
maxTotalBytes: limits.maxTotalBytes ?? MAX_UNCOMPRESSED_BYTES,
|
|
19026
|
-
label: "XLSX"
|
|
19027
|
-
};
|
|
19219
|
+
const resolved = resolveLoadLimits(limits);
|
|
19220
|
+
const maxInput = resolved.maxInputBytes;
|
|
19028
19221
|
const bytes = input instanceof Uint8Array ? input : new Uint8Array(input);
|
|
19029
19222
|
if (bytes.byteLength > maxInput)
|
|
19030
|
-
throw new
|
|
19223
|
+
throw new WorkbookTooLargeError(
|
|
19224
|
+
`XLSX package exceeds the ${mib2(maxInput)} MiB compressed input limit`,
|
|
19225
|
+
"maxInputBytes",
|
|
19226
|
+
maxInput
|
|
19227
|
+
);
|
|
19031
19228
|
let loaded;
|
|
19032
19229
|
try {
|
|
19033
19230
|
loaded = await JSZip2__default.default.loadAsync(bytes);
|
|
@@ -19037,7 +19234,7 @@ async function readZipParts(input, limits = {}) {
|
|
|
19037
19234
|
{ cause: error }
|
|
19038
19235
|
);
|
|
19039
19236
|
}
|
|
19040
|
-
const zip = guardZip(loaded,
|
|
19237
|
+
const zip = guardZip(loaded, zipLimitsFor(resolved));
|
|
19041
19238
|
const parts = /* @__PURE__ */ new Map();
|
|
19042
19239
|
for (const entry3 of Object.values(zip.files)) {
|
|
19043
19240
|
if (entry3.dir) continue;
|
|
@@ -19244,9 +19441,9 @@ function parseRichString(element2, palette) {
|
|
|
19244
19441
|
const text4 = parsed.map((run2) => run2.text).join("");
|
|
19245
19442
|
return { text: text4, runs: parsed };
|
|
19246
19443
|
}
|
|
19247
|
-
function parseSharedStrings(xml, palette) {
|
|
19444
|
+
function parseSharedStrings(xml, palette, maxXmlElements) {
|
|
19248
19445
|
if (!xml) return [];
|
|
19249
|
-
const root =
|
|
19446
|
+
const root = parseDataXml(xml, "XLSX shared strings", maxXmlElements).documentElement;
|
|
19250
19447
|
return xChildren(root, "si").map((si) => parseRichString(si, palette));
|
|
19251
19448
|
}
|
|
19252
19449
|
|
|
@@ -24867,7 +25064,11 @@ function parseWorksheet(ctx, partName, name, sheetId) {
|
|
|
24867
25064
|
return sheet;
|
|
24868
25065
|
}
|
|
24869
25066
|
const split = splitSheetData(xml);
|
|
24870
|
-
const root =
|
|
25067
|
+
const root = parseDataXml(
|
|
25068
|
+
split?.xml ?? xml,
|
|
25069
|
+
"XLSX worksheet",
|
|
25070
|
+
ctx.maxXmlElements
|
|
25071
|
+
).documentElement;
|
|
24871
25072
|
const byName = /* @__PURE__ */ new Map();
|
|
24872
25073
|
const cfBlocks = [];
|
|
24873
25074
|
for (const node2 of elements(root)) {
|
|
@@ -24941,8 +25142,9 @@ function liftPrintAreas(workbook) {
|
|
|
24941
25142
|
return false;
|
|
24942
25143
|
});
|
|
24943
25144
|
}
|
|
24944
|
-
async function loadXlsx(input) {
|
|
24945
|
-
const
|
|
25145
|
+
async function loadXlsx(input, options7 = {}) {
|
|
25146
|
+
const limits = resolveLoadLimits(options7.limits);
|
|
25147
|
+
const parts = await readZipParts(input, limits);
|
|
24946
25148
|
const source2 = new SourceIndex(parts);
|
|
24947
25149
|
const workbookPart = source2.workbookPart();
|
|
24948
25150
|
if (!workbookPart) throw new Error("XLSX package has no workbook part (xl/workbook.xml)");
|
|
@@ -24963,7 +25165,8 @@ async function loadXlsx(input) {
|
|
|
24963
25165
|
source: source2,
|
|
24964
25166
|
sharedStrings: parseSharedStrings(
|
|
24965
25167
|
stringsPart ? source2.text(stringsPart) : void 0,
|
|
24966
|
-
styles.palette
|
|
25168
|
+
styles.palette,
|
|
25169
|
+
limits.maxXmlElements
|
|
24967
25170
|
),
|
|
24968
25171
|
xfMap: styles.xfMap,
|
|
24969
25172
|
date1904: book.date1904,
|
|
@@ -24971,7 +25174,8 @@ async function loadXlsx(input) {
|
|
|
24971
25174
|
dxfs: styles.dxfs,
|
|
24972
25175
|
persons: parsePersons(personsPart ? source2.text(personsPart) : void 0),
|
|
24973
25176
|
dynamicCells: parseDynamicArrayMetadata(metadataPart ? source2.text(metadataPart) : void 0),
|
|
24974
|
-
warn
|
|
25177
|
+
warn,
|
|
25178
|
+
maxXmlElements: limits.maxXmlElements
|
|
24975
25179
|
};
|
|
24976
25180
|
const rels = source2.rels(workbookPart);
|
|
24977
25181
|
const sheets = book.sheets.map((entry3) => {
|
|
@@ -29283,10 +29487,8 @@ function sheetFormatXml(sheet) {
|
|
|
29283
29487
|
const current = { defaultRowHeight: sheet.defaultRowHeight };
|
|
29284
29488
|
if (sheet.defaultColWidth !== void 0) current.defaultColWidth = sheet.defaultColWidth;
|
|
29285
29489
|
if (sheet.format && Object.keys(sheet.format).length) current.format = sheet.format;
|
|
29286
|
-
|
|
29287
|
-
|
|
29288
|
-
...[...sheet.rowInfo.values()].map((info) => info.outlineLevel ?? 0)
|
|
29289
|
-
);
|
|
29490
|
+
let rowLevel = 0;
|
|
29491
|
+
for (const info of sheet.rowInfo.values()) rowLevel = Math.max(rowLevel, info.outlineLevel ?? 0);
|
|
29290
29492
|
const colLevel = Math.max(0, ...sheet.columns.map((col) => col.outlineLevel ?? 0));
|
|
29291
29493
|
if (source2 && sameModel(readSheetFormat(source2), current) && Number(source2.getAttribute("outlineLevelRow") ?? 0) === rowLevel && Number(source2.getAttribute("outlineLevelCol") ?? 0) === colLevel)
|
|
29292
29494
|
return snapshotXml(sheet, "sheetFormatPr") ?? "";
|
|
@@ -29588,11 +29790,10 @@ function pivotCacheDefinitionXml(pivot, workbook, data, recordRel) {
|
|
|
29588
29790
|
const items = data.items[index3];
|
|
29589
29791
|
if (pivot.dateFields?.includes(name) && items.every((v) => typeof v === "number")) {
|
|
29590
29792
|
const serials = items;
|
|
29591
|
-
const
|
|
29592
|
-
const maxDate = Number.isInteger(latest) ? latest + 1 : latest;
|
|
29793
|
+
const range2 = dateGroupRange({}, serials);
|
|
29593
29794
|
const parent = derived.filter((entry3) => entry3.group.field === name).at(-1);
|
|
29594
29795
|
const link = parent ? `<fieldGroup par="${parent.index}"/>` : "";
|
|
29595
|
-
return `<cacheField${attrs({ name: encodeEscapes(name), numFmtId: 14 })}><sharedItems${attrs({ containsSemiMixedTypes: false, containsNonDate: false, containsDate: true, containsString: false, minDate: iso(
|
|
29796
|
+
return `<cacheField${attrs({ name: encodeEscapes(name), numFmtId: 14 })}><sharedItems${attrs({ containsSemiMixedTypes: false, containsNonDate: false, containsDate: true, containsString: false, minDate: iso(range2.start), maxDate: iso(range2.end), count: serials.length })}>${serials.map((serial) => `<d v="${iso(serial)}"/>`).join("")}</sharedItems>${link}</cacheField>`;
|
|
29596
29797
|
}
|
|
29597
29798
|
const types = new Set(
|
|
29598
29799
|
items.map((value3) => value3 === null || value3 === "" ? "blank" : typeof value3)
|
|
@@ -31007,7 +31208,8 @@ function setCellValue(ctx, s, row2, col, value3) {
|
|
|
31007
31208
|
}
|
|
31008
31209
|
function setRangeValues(ctx, s, at, values2) {
|
|
31009
31210
|
const sheet = sheetAt(ctx.workbook, s);
|
|
31010
|
-
|
|
31211
|
+
let width = 0;
|
|
31212
|
+
for (const row2 of values2) width = Math.max(width, row2.length);
|
|
31011
31213
|
if (!values2.length || !width) return;
|
|
31012
31214
|
const range2 = cellRange(at.row, at.col, at.row + values2.length - 1, at.col + width - 1);
|
|
31013
31215
|
ctx.run(
|
|
@@ -32331,23 +32533,33 @@ function toHtml(cells, theme2) {
|
|
|
32331
32533
|
for (let c2 = m.start.col; c2 <= m.end.col; c2++)
|
|
32332
32534
|
if (r !== m.start.row || c2 !== m.start.col) covered.add(`${r},${c2}`);
|
|
32333
32535
|
}
|
|
32536
|
+
const styleAttrs = /* @__PURE__ */ new Map();
|
|
32537
|
+
const styleAttr2 = (style3) => {
|
|
32538
|
+
let attr2 = styleAttrs.get(style3);
|
|
32539
|
+
if (attr2 === void 0) {
|
|
32540
|
+
const css = cssFor(style3, theme2);
|
|
32541
|
+
styleAttrs.set(style3, attr2 = css ? `style="${escapeHtml(css)}"` : "");
|
|
32542
|
+
}
|
|
32543
|
+
return attr2;
|
|
32544
|
+
};
|
|
32334
32545
|
const rows2 = [];
|
|
32335
32546
|
for (let r = 0; r < cells.rows; r++) {
|
|
32336
32547
|
const tds = [];
|
|
32337
32548
|
for (let c2 = 0; c2 < cells.cols; c2++) {
|
|
32338
|
-
|
|
32549
|
+
const key = covered.size || spans3.size || links.size ? `${r},${c2}` : "";
|
|
32550
|
+
if (covered.has(key)) continue;
|
|
32339
32551
|
const cell = cells.data[r]?.[c2] ?? null;
|
|
32340
32552
|
const attrs2 = [];
|
|
32341
|
-
const span4 = spans3.get(
|
|
32553
|
+
const span4 = spans3.get(key);
|
|
32342
32554
|
if (span4 && span4.end.row > span4.start.row)
|
|
32343
32555
|
attrs2.push(`rowspan="${span4.end.row - span4.start.row + 1}"`);
|
|
32344
32556
|
if (span4 && span4.end.col > span4.start.col)
|
|
32345
32557
|
attrs2.push(`colspan="${span4.end.col - span4.start.col + 1}"`);
|
|
32346
32558
|
if (cell && typeof cell.value === "number") attrs2.push(`x:num="${cell.value}"`);
|
|
32347
|
-
const css =
|
|
32348
|
-
if (css) attrs2.push(
|
|
32559
|
+
const css = styleAttr2(cell?.style);
|
|
32560
|
+
if (css) attrs2.push(css);
|
|
32349
32561
|
let text4 = escapeHtml(cell?.text ?? "").replace(/\n/g, "<br>");
|
|
32350
|
-
const link = links.get(
|
|
32562
|
+
const link = links.get(key);
|
|
32351
32563
|
const href = htmlHref(link);
|
|
32352
32564
|
if (href)
|
|
32353
32565
|
text4 = `<a href="${escapeHtml(href)}"${link?.tooltip ? ` title="${escapeHtml(link.tooltip)}"` : ""}>${text4}</a>`;
|
|
@@ -32655,7 +32867,8 @@ function parseTsv(text4) {
|
|
|
32655
32867
|
}
|
|
32656
32868
|
row2.push(field);
|
|
32657
32869
|
rows2.push(row2);
|
|
32658
|
-
|
|
32870
|
+
let width = 0;
|
|
32871
|
+
for (const r of rows2) width = Math.max(width, r.length);
|
|
32659
32872
|
for (const r of rows2) while (r.length < width) r.push("");
|
|
32660
32873
|
return rows2;
|
|
32661
32874
|
}
|
|
@@ -32910,10 +33123,16 @@ function copyRange(workbook, s, range2) {
|
|
|
32910
33123
|
{ length: rows2 },
|
|
32911
33124
|
() => Array.from({ length: cols }, () => null)
|
|
32912
33125
|
);
|
|
33126
|
+
const styles = /* @__PURE__ */ new Map();
|
|
33127
|
+
const styleCopy = (id) => {
|
|
33128
|
+
let style3 = styles.get(id ?? 0);
|
|
33129
|
+
if (!style3) styles.set(id ?? 0, style3 = structuredClone(styleAt(workbook, id)));
|
|
33130
|
+
return style3;
|
|
33131
|
+
};
|
|
32913
33132
|
forEachCellInRange(sheet, clipped, (cell, row2, col) => {
|
|
32914
33133
|
const clip = {
|
|
32915
33134
|
value: cell.value,
|
|
32916
|
-
style:
|
|
33135
|
+
style: styleCopy(cell.styleId),
|
|
32917
33136
|
text: displayText(workbook, cell)
|
|
32918
33137
|
};
|
|
32919
33138
|
if (cell.formula !== void 0) clip.formula = cell.formula;
|
|
@@ -33852,6 +34071,17 @@ function shiftEdgeCells(sheet, spec2, phase) {
|
|
|
33852
34071
|
return out;
|
|
33853
34072
|
}
|
|
33854
34073
|
|
|
34074
|
+
// xlsx/edit/clone-cell.ts
|
|
34075
|
+
function cloneCell(cell) {
|
|
34076
|
+
const copy2 = { ...cell };
|
|
34077
|
+
const fields = copy2;
|
|
34078
|
+
for (const key of Object.keys(fields)) {
|
|
34079
|
+
const value3 = fields[key];
|
|
34080
|
+
if (typeof value3 === "object" && value3 !== null) fields[key] = structuredClone(value3);
|
|
34081
|
+
}
|
|
34082
|
+
return copy2;
|
|
34083
|
+
}
|
|
34084
|
+
|
|
33855
34085
|
// xlsx/edit/history-rows.ts
|
|
33856
34086
|
function captureRowInfo(sheet, rows2) {
|
|
33857
34087
|
return [...new Set(rows2)].map((row2) => {
|
|
@@ -33892,12 +34122,14 @@ function restoreSettings(workbook, settings) {
|
|
|
33892
34122
|
var PROBE_LIMIT = 4096;
|
|
33893
34123
|
function captureCells(sheet, ranges) {
|
|
33894
34124
|
const cells = [];
|
|
33895
|
-
const seen = /* @__PURE__ */ new Set();
|
|
34125
|
+
const seen = ranges.length > 1 ? /* @__PURE__ */ new Set() : void 0;
|
|
33896
34126
|
const take2 = (cell, row2, col) => {
|
|
33897
|
-
|
|
33898
|
-
|
|
33899
|
-
|
|
33900
|
-
|
|
34127
|
+
if (seen) {
|
|
34128
|
+
const key = cellKey(row2, col);
|
|
34129
|
+
if (seen.has(key)) return;
|
|
34130
|
+
seen.add(key);
|
|
34131
|
+
}
|
|
34132
|
+
cells.push([row2, col, cloneCell(cell)]);
|
|
33901
34133
|
};
|
|
33902
34134
|
for (const raw2 of ranges) {
|
|
33903
34135
|
const range2 = normalizeRange(raw2);
|
|
@@ -33974,7 +34206,7 @@ function restoreShift(workbook, snapshot) {
|
|
|
33974
34206
|
if (!sheet) return;
|
|
33975
34207
|
const shift2 = snapshot.phase === "before" ? { ...spec2.shift, count: -spec2.shift.count } : spec2.shift;
|
|
33976
34208
|
moveCellsRaw(sheet, shift2, spec2.band);
|
|
33977
|
-
for (const [row2, col, cell] of snapshot.cells) putCell(sheet, row2, col,
|
|
34209
|
+
for (const [row2, col, cell] of snapshot.cells) putCell(sheet, row2, col, cloneCell(cell));
|
|
33978
34210
|
restoreRefs(workbook, snapshot.data);
|
|
33979
34211
|
workbook.activeSheet = snapshot.activeSheet;
|
|
33980
34212
|
}
|
|
@@ -34023,18 +34255,51 @@ function restoreSnapshot(workbook, snapshot) {
|
|
|
34023
34255
|
forEachCellInRange(sheet, range2, (_cell, row2, col) => doomed.push([row2, col]));
|
|
34024
34256
|
for (const [row2, col] of doomed) deleteCell(sheet, row2, col);
|
|
34025
34257
|
}
|
|
34026
|
-
for (const [row2, col, cell] of snapshot.cells) putCell(sheet, row2, col,
|
|
34258
|
+
for (const [row2, col, cell] of snapshot.cells) putCell(sheet, row2, col, cloneCell(cell));
|
|
34259
|
+
}
|
|
34260
|
+
function rowMajor(cells) {
|
|
34261
|
+
for (let i2 = 1; i2 < cells.length; i2++) {
|
|
34262
|
+
const [row0, col0] = cells[i2 - 1];
|
|
34263
|
+
const [row1, col1] = cells[i2];
|
|
34264
|
+
if (row1 < row0 || row1 === row0 && col1 <= col0) return false;
|
|
34265
|
+
}
|
|
34266
|
+
return true;
|
|
34027
34267
|
}
|
|
34028
34268
|
function touchedCells(step) {
|
|
34029
34269
|
const out = [];
|
|
34030
|
-
const
|
|
34270
|
+
const lists = step.entries.flatMap((entry3) => [entry3.before, entry3.after]).filter((snapshot) => snapshot.kind === "cells" && snapshot.cells.length > 0);
|
|
34271
|
+
const [first2, second, ...rest] = lists;
|
|
34272
|
+
if (first2 && !rest.length && (!second || second.sheet === first2.sheet)) {
|
|
34273
|
+
const sheet = first2.sheet;
|
|
34274
|
+
for (const [row2, col] of first2.cells) out.push({ sheet, row: row2, col });
|
|
34275
|
+
if (!second) return out;
|
|
34276
|
+
if (rowMajor(first2.cells) && rowMajor(second.cells)) {
|
|
34277
|
+
let i2 = 0;
|
|
34278
|
+
for (const [row2, col] of second.cells) {
|
|
34279
|
+
const key = cellKey(row2, col);
|
|
34280
|
+
while (i2 < first2.cells.length) {
|
|
34281
|
+
const [r, c2] = first2.cells[i2];
|
|
34282
|
+
if (cellKey(r, c2) >= key) break;
|
|
34283
|
+
i2++;
|
|
34284
|
+
}
|
|
34285
|
+
const at = first2.cells[i2];
|
|
34286
|
+
if (at && cellKey(at[0], at[1]) === key) continue;
|
|
34287
|
+
out.push({ sheet, row: row2, col });
|
|
34288
|
+
}
|
|
34289
|
+
return out;
|
|
34290
|
+
}
|
|
34291
|
+
out.length = 0;
|
|
34292
|
+
}
|
|
34293
|
+
const seen = /* @__PURE__ */ new Map();
|
|
34031
34294
|
for (const entry3 of step.entries)
|
|
34032
34295
|
for (const snapshot of [entry3.before, entry3.after]) {
|
|
34033
34296
|
if (snapshot.kind !== "cells") continue;
|
|
34297
|
+
let keys = seen.get(snapshot.sheet);
|
|
34298
|
+
if (!keys) seen.set(snapshot.sheet, keys = /* @__PURE__ */ new Set());
|
|
34034
34299
|
for (const [row2, col] of snapshot.cells) {
|
|
34035
|
-
const key =
|
|
34036
|
-
if (
|
|
34037
|
-
|
|
34300
|
+
const key = cellKey(row2, col);
|
|
34301
|
+
if (keys.has(key)) continue;
|
|
34302
|
+
keys.add(key);
|
|
34038
34303
|
out.push({ sheet: snapshot.sheet, row: row2, col });
|
|
34039
34304
|
}
|
|
34040
34305
|
}
|
|
@@ -34131,7 +34396,7 @@ var SessionCalculator = class {
|
|
|
34131
34396
|
}
|
|
34132
34397
|
this.calc.discardPreparation();
|
|
34133
34398
|
if (structural) this.staleGraph = true;
|
|
34134
|
-
else this.dirty.push(
|
|
34399
|
+
else for (const cell of touchedCells(step)) this.dirty.push(cell);
|
|
34135
34400
|
return;
|
|
34136
34401
|
}
|
|
34137
34402
|
if (hint && !this.staleGraph) {
|
|
@@ -34150,7 +34415,7 @@ var SessionCalculator = class {
|
|
|
34150
34415
|
this.calc.discardPreparation();
|
|
34151
34416
|
if (!this.enabled) return;
|
|
34152
34417
|
if (structural) this.staleGraph = true;
|
|
34153
|
-
else this.dirty.push(
|
|
34418
|
+
else for (const cell of cells) this.dirty.push(cell);
|
|
34154
34419
|
return;
|
|
34155
34420
|
}
|
|
34156
34421
|
this.recalc(structural, () => cells);
|
|
@@ -35212,8 +35477,16 @@ function insertTimeline(ctx, s, ref) {
|
|
|
35212
35477
|
const pivot = sheet.pivotTables?.find((entry3) => entry3.name === ref.pivot);
|
|
35213
35478
|
if (!pivot || !pivot.dateFields?.includes(ref.field))
|
|
35214
35479
|
throw new Error("Choose a PivotTable with a date field.");
|
|
35215
|
-
const
|
|
35216
|
-
|
|
35480
|
+
const column2 = pivot.fields.indexOf(ref.field);
|
|
35481
|
+
let earliest = Infinity;
|
|
35482
|
+
let latest = -Infinity;
|
|
35483
|
+
for (const record of pivot.records) {
|
|
35484
|
+
const value3 = record[column2];
|
|
35485
|
+
if (typeof value3 !== "number") continue;
|
|
35486
|
+
earliest = Math.min(earliest, value3);
|
|
35487
|
+
latest = Math.max(latest, value3);
|
|
35488
|
+
}
|
|
35489
|
+
if (earliest > latest) throw new Error("Choose a PivotTable with a date field.");
|
|
35217
35490
|
const taken = /* @__PURE__ */ new Set([
|
|
35218
35491
|
...(workbook.slicers?.slicers ?? []).map((entry3) => entry3.name.toLowerCase()),
|
|
35219
35492
|
...(workbook.slicers?.timelines ?? []).map((entry3) => entry3.name.toLowerCase()),
|
|
@@ -35231,8 +35504,8 @@ function insertTimeline(ctx, s, ref) {
|
|
|
35231
35504
|
"_"
|
|
35232
35505
|
);
|
|
35233
35506
|
const bounds = boundsOfSerialRange(
|
|
35234
|
-
serialToIso(
|
|
35235
|
-
serialToIso(
|
|
35507
|
+
serialToIso(earliest, workbook.date1904),
|
|
35508
|
+
serialToIso(latest, workbook.date1904)
|
|
35236
35509
|
);
|
|
35237
35510
|
const metrics = createGridMetrics(sheet, { zoom: 100 });
|
|
35238
35511
|
let right2 = 0;
|
|
@@ -38646,6 +38919,15 @@ function mergeFont(base, font) {
|
|
|
38646
38919
|
if (value3 !== void 0) out[key] = value3;
|
|
38647
38920
|
return out;
|
|
38648
38921
|
}
|
|
38922
|
+
function cellFont(font, defaultFont) {
|
|
38923
|
+
const out = { ...font };
|
|
38924
|
+
if (!out.name && !out.scheme) {
|
|
38925
|
+
if (defaultFont.name) out.name = defaultFont.name;
|
|
38926
|
+
if (defaultFont.scheme) out.scheme = defaultFont.scheme;
|
|
38927
|
+
}
|
|
38928
|
+
if (!out.size && defaultFont.size) out.size = defaultFont.size;
|
|
38929
|
+
return out;
|
|
38930
|
+
}
|
|
38649
38931
|
function fontView(font, theme2) {
|
|
38650
38932
|
const family = font.scheme === "major" ? theme2.majorFont || font.name || "Calibri Light" : font.scheme === "minor" ? theme2.minorFont || font.name || "Calibri" : font.name || theme2.minorFont || "Calibri";
|
|
38651
38933
|
const view = {
|
|
@@ -38770,14 +39052,7 @@ function cellView(workbook, sheetIndex2, row2, col, cf, options7 = {}) {
|
|
|
38770
39052
|
const style3 = styleAt(workbook, effectiveStyleId(sheet, row2, col));
|
|
38771
39053
|
const conditional = cf?.at(row2, col);
|
|
38772
39054
|
const dxf = conditional?.style;
|
|
38773
|
-
const
|
|
38774
|
-
const base = { ...style3.font };
|
|
38775
|
-
if (!base.name && !base.scheme) {
|
|
38776
|
-
if (defaultFont.name) base.name = defaultFont.name;
|
|
38777
|
-
if (defaultFont.scheme) base.scheme = defaultFont.scheme;
|
|
38778
|
-
}
|
|
38779
|
-
if (!base.size && defaultFont.size) base.size = defaultFont.size;
|
|
38780
|
-
const font = mergeFont(base, dxf?.font);
|
|
39055
|
+
const font = mergeFont(cellFont(style3.font, workbook.styles[0]?.font ?? {}), dxf?.font);
|
|
38781
39056
|
const formulaText = sheet.view.showFormulas && cell?.formula !== void 0 ? `=${cell.formula}` : void 0;
|
|
38782
39057
|
const shown = formulaText !== void 0 ? { text: formulaText } : displayText2(value3, style3, dxf?.numFmt ?? style3.numFmt, workbook, sheet);
|
|
38783
39058
|
const fontViewResolved = fontView(font, workbook.theme);
|
|
@@ -40374,14 +40649,24 @@ function formatAxisValue(value3, percent = false) {
|
|
|
40374
40649
|
return `${v < 0 ? "-" : ""}${grouped}${frac ? `.${frac}` : ""}`;
|
|
40375
40650
|
}
|
|
40376
40651
|
|
|
40652
|
+
// chart/extent.ts
|
|
40653
|
+
function extentOf(values2) {
|
|
40654
|
+
let min = Infinity;
|
|
40655
|
+
let max = -Infinity;
|
|
40656
|
+
for (const value3 of values2) {
|
|
40657
|
+
min = Math.min(min, value3);
|
|
40658
|
+
max = Math.max(max, value3);
|
|
40659
|
+
}
|
|
40660
|
+
return { min, max };
|
|
40661
|
+
}
|
|
40662
|
+
|
|
40377
40663
|
// chart/axis-range.ts
|
|
40378
40664
|
function computeLogValueRange(series, logBase) {
|
|
40379
40665
|
const allValues = series.flatMap((item) => item.values).filter((value3) => value3 !== null && Number.isFinite(value3) && value3 > 0);
|
|
40380
40666
|
if (allValues.length === 0) {
|
|
40381
40667
|
return { min: 1, max: logBase, span: 1, logScale: true, logBase };
|
|
40382
40668
|
}
|
|
40383
|
-
const dataMin =
|
|
40384
|
-
const dataMax = Math.max(...allValues);
|
|
40669
|
+
const { min: dataMin, max: dataMax } = extentOf(allValues);
|
|
40385
40670
|
const logMin = Math.floor(Math.log(dataMin) / Math.log(logBase));
|
|
40386
40671
|
const logMax = Math.ceil(Math.log(dataMax) / Math.log(logBase));
|
|
40387
40672
|
const min = logBase ** logMin;
|
|
@@ -41408,8 +41693,7 @@ function computeHistogramBins(values2, options7, format = String) {
|
|
|
41408
41693
|
});
|
|
41409
41694
|
}
|
|
41410
41695
|
if (regular.length > 0) {
|
|
41411
|
-
const min =
|
|
41412
|
-
const max = Math.max(...regular.map((item) => item.value));
|
|
41696
|
+
const { min, max } = extentOf(regular.map((item) => item.value));
|
|
41413
41697
|
const requestedSize = options7.binSize && options7.binSize > 0 ? options7.binSize : void 0;
|
|
41414
41698
|
const requestedCount = options7.binCount && options7.binCount > 0 ? options7.binCount : void 0;
|
|
41415
41699
|
const start = requestedSize ? Math.floor(min / requestedSize) * requestedSize : min;
|
|
@@ -41537,8 +41821,9 @@ function waterfallView(chart, model, ctx) {
|
|
|
41537
41821
|
colors: { increase: role(0), decrease: role(1), total: role(2) }
|
|
41538
41822
|
};
|
|
41539
41823
|
const ends = steps.flatMap((step) => [step.startValue, step.endValue]);
|
|
41824
|
+
const range2 = extentOf(ends);
|
|
41540
41825
|
model.valueAxis = {
|
|
41541
|
-
...ends.length ? niceScale(
|
|
41826
|
+
...ends.length ? niceScale(range2.min, range2.max) : niceScale(0, 1),
|
|
41542
41827
|
percent: false
|
|
41543
41828
|
};
|
|
41544
41829
|
const labels = model.categories;
|
|
@@ -41654,7 +41939,8 @@ function chartSummaryView(chart, theme2, options7 = {}) {
|
|
|
41654
41939
|
s.xValues = s.values.map((_, k) => numeric2 ? toNumber2(cats[k] ?? null) : k + 1);
|
|
41655
41940
|
});
|
|
41656
41941
|
const xs = series.flatMap((s) => s.xValues ?? []).filter((x) => x !== null);
|
|
41657
|
-
|
|
41942
|
+
const range2 = extentOf(xs);
|
|
41943
|
+
model.xAxis = xs.length ? niceScale(range2.min, range2.max) : niceScale(0, 1);
|
|
41658
41944
|
}
|
|
41659
41945
|
if (type === "stock") model.stock = stockView(chart.stock, ctx);
|
|
41660
41946
|
if (type === "bubble") bubbleView(chart, model, ctx.evaluateRef);
|
|
@@ -41931,8 +42217,9 @@ function fitChartTrendline(options7, xVals, yVals) {
|
|
|
41931
42217
|
}
|
|
41932
42218
|
const model = fitModel(options7, xVals, yVals);
|
|
41933
42219
|
if (!model) return noFit();
|
|
41934
|
-
const
|
|
41935
|
-
const
|
|
42220
|
+
const xRange = extentOf(xVals);
|
|
42221
|
+
const startX = xRange.min - (options7.backward ?? 0);
|
|
42222
|
+
const endX = xRange.max + (options7.forward ?? 0);
|
|
41936
42223
|
const steps = Math.max(Math.ceil((endX - startX) * 4), 20);
|
|
41937
42224
|
const points = [];
|
|
41938
42225
|
for (let step = 0; step <= steps; step++) {
|
|
@@ -42501,7 +42788,7 @@ function cartesianAxes(model, area, out) {
|
|
|
42501
42788
|
const cats = Math.max(1, model.categories.length);
|
|
42502
42789
|
const catW = Math.min(
|
|
42503
42790
|
area.w * 0.3,
|
|
42504
|
-
Math.max(
|
|
42791
|
+
Math.max(extentOf(model.categories.map((c2) => textWidth(c2, categorySize))).max, 8) + 6
|
|
42505
42792
|
);
|
|
42506
42793
|
const second = horizontal2 ? void 0 : model.secondaryAxis;
|
|
42507
42794
|
const secondLabels = second?.ticks.map((t) => axisTickText(t, model.axes?.secondary, second.percent)) ?? [];
|
|
@@ -42690,7 +42977,7 @@ function computeBubbleRadius(sizeVal, maxBubble, medianRadius, options7) {
|
|
|
42690
42977
|
return medianRadius * scale2 * 0.5 + ratio * medianRadius * scale2 * 1.5;
|
|
42691
42978
|
}
|
|
42692
42979
|
function maxBubbleSize(sizes) {
|
|
42693
|
-
return
|
|
42980
|
+
return Math.max(1, extentOf(sizes.map(Math.abs)).max);
|
|
42694
42981
|
}
|
|
42695
42982
|
function medianBubbleRadius(plotWidth, plotHeight) {
|
|
42696
42983
|
return Math.min(plotWidth, plotHeight) * 0.04;
|
|
@@ -43303,13 +43590,11 @@ function chartLegendSvg(model, area, frame, options7) {
|
|
|
43303
43590
|
chartAreaRect(model, "legend", { x: manual.x, y: manual.y, w: manual.width, h: manual.height })
|
|
43304
43591
|
];
|
|
43305
43592
|
const baselineOffset = font ? (font.ascent - font.descent) / 2 : size * 0.35;
|
|
43593
|
+
const widest = extentOf(widths).max;
|
|
43306
43594
|
entries.forEach((entry3, i2) => {
|
|
43307
43595
|
const available = horizontal2 ? chartTextWidth(entry3.label, attrs2, options7) : Math.max(0, rowWidth - size / 2 - keySize - keyGap);
|
|
43308
43596
|
const label2 = fitChartText(entry3.label, available, attrs2, options7);
|
|
43309
|
-
const contentWidth = Math.min(
|
|
43310
|
-
horizontal2 ? widths[i2] ?? 0 : Math.max(...widths),
|
|
43311
|
-
rowWidth - size / 2
|
|
43312
|
-
);
|
|
43597
|
+
const contentWidth = Math.min(horizontal2 ? widths[i2] ?? 0 : widest, rowWidth - size / 2);
|
|
43313
43598
|
const x = horizontal2 ? horizontalX : manual.x + Math.max(size / 4, (rowWidth - contentWidth) / 2);
|
|
43314
43599
|
const centerY = manual.y + (horizontal2 ? 0 : i2 * rowHeight) + rowHeight / 2;
|
|
43315
43600
|
markup.push(rect(x, centerY - keySize / 2, keySize, keySize, entry3.color));
|
|
@@ -43381,7 +43666,7 @@ function automaticLegend(model, area, out, options7, bounds) {
|
|
|
43381
43666
|
}
|
|
43382
43667
|
const width = Math.min(
|
|
43383
43668
|
area.w * 0.35,
|
|
43384
|
-
|
|
43669
|
+
extentOf(entries.map((e) => chartTextWidth(e.label, attrs2, options7))).max + 22
|
|
43385
43670
|
);
|
|
43386
43671
|
const height = entries.length * rowH;
|
|
43387
43672
|
const x = pos === "l" ? area.x + 4 : area.x + area.w - width;
|
|
@@ -49906,6 +50191,7 @@ __export(shell_exports, {
|
|
|
49906
50191
|
shell: () => shell
|
|
49907
50192
|
});
|
|
49908
50193
|
var shell = {
|
|
50194
|
+
"The current cell edit failed validation.": "Die aktuelle Zellbearbeitung hat die \xDCberpr\xFCfung nicht bestanden.",
|
|
49909
50195
|
"Finish or cancel the current cell edit before saving.": "Beenden oder verwerfen Sie die aktuelle Zellbearbeitung vor dem Speichern.",
|
|
49910
50196
|
File: "Datei",
|
|
49911
50197
|
Ribbon: "Men\xFCband",
|
|
@@ -50310,6 +50596,7 @@ __export(shell_exports2, {
|
|
|
50310
50596
|
shell: () => shell2
|
|
50311
50597
|
});
|
|
50312
50598
|
var shell2 = {
|
|
50599
|
+
"The current cell edit failed validation.": "The current cell edit failed validation.",
|
|
50313
50600
|
"Finish or cancel the current cell edit before saving.": "Finish or cancel the current cell edit before saving.",
|
|
50314
50601
|
File: "File",
|
|
50315
50602
|
Ribbon: "Ribbon",
|
|
@@ -50714,6 +51001,7 @@ __export(shell_exports3, {
|
|
|
50714
51001
|
shell: () => shell3
|
|
50715
51002
|
});
|
|
50716
51003
|
var shell3 = {
|
|
51004
|
+
"The current cell edit failed validation.": "La edici\xF3n de la celda actual no super\xF3 la validaci\xF3n.",
|
|
50717
51005
|
"Finish or cancel the current cell edit before saving.": "Finalice o cancele la edici\xF3n de la celda actual antes de guardar.",
|
|
50718
51006
|
File: "Archivo",
|
|
50719
51007
|
Ribbon: "Cinta de opciones",
|
|
@@ -51118,6 +51406,7 @@ __export(shell_exports4, {
|
|
|
51118
51406
|
shell: () => shell4
|
|
51119
51407
|
});
|
|
51120
51408
|
var shell4 = {
|
|
51409
|
+
"The current cell edit failed validation.": "La modification de la cellule en cours a \xE9chou\xE9 \xE0 la validation.",
|
|
51121
51410
|
"Finish or cancel the current cell edit before saving.": "Terminez ou annulez la modification de la cellule avant de sauvegarder.",
|
|
51122
51411
|
File: "Fichier",
|
|
51123
51412
|
Ribbon: "Ruban",
|
|
@@ -51522,6 +51811,7 @@ __export(shell_exports5, {
|
|
|
51522
51811
|
shell: () => shell5
|
|
51523
51812
|
});
|
|
51524
51813
|
var shell5 = {
|
|
51814
|
+
"The current cell edit failed validation.": "\u5F53\u524D\u5355\u5143\u683C\u7684\u7F16\u8F91\u672A\u901A\u8FC7\u9A8C\u8BC1\u3002",
|
|
51525
51815
|
"Finish or cancel the current cell edit before saving.": "\u8BF7\u5148\u5B8C\u6210\u6216\u53D6\u6D88\u5F53\u524D\u5355\u5143\u683C\u7684\u7F16\u8F91\uFF0C\u518D\u4FDD\u5B58\u3002",
|
|
51526
51816
|
File: "\u6587\u4EF6",
|
|
51527
51817
|
Ribbon: "\u529F\u80FD\u533A",
|