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.mjs
CHANGED
|
@@ -315,9 +315,9 @@ function nextSheetName(workbook, base = "Sheet") {
|
|
|
315
315
|
}
|
|
316
316
|
var nextSheetId = (workbook) => workbook.sheets.reduce((max, sheet) => Math.max(max, sheet.sheetId), 0) + 1;
|
|
317
317
|
|
|
318
|
-
// xlsx/
|
|
319
|
-
function
|
|
320
|
-
return JSON.stringify(sortKeys(
|
|
318
|
+
// xlsx/stable-key.ts
|
|
319
|
+
function stableKey(value3) {
|
|
320
|
+
return JSON.stringify(sortKeys(value3));
|
|
321
321
|
}
|
|
322
322
|
function sortKeys(value3) {
|
|
323
323
|
if (Array.isArray(value3)) return value3.map(sortKeys);
|
|
@@ -331,6 +331,11 @@ function sortKeys(value3) {
|
|
|
331
331
|
}
|
|
332
332
|
return value3;
|
|
333
333
|
}
|
|
334
|
+
|
|
335
|
+
// xlsx/styles.ts
|
|
336
|
+
function styleKey(style3) {
|
|
337
|
+
return stableKey(style3);
|
|
338
|
+
}
|
|
334
339
|
function styleAt(workbook, styleId) {
|
|
335
340
|
const style3 = workbook.styles[styleId ?? 0] ?? workbook.styles[0];
|
|
336
341
|
if (!style3) throw new Error("Workbook has no default cell style");
|
|
@@ -2703,6 +2708,37 @@ function parseArray(c2) {
|
|
|
2703
2708
|
return { type: "array", rows: rows2 };
|
|
2704
2709
|
}
|
|
2705
2710
|
|
|
2711
|
+
// xlsx/formula/change-areas.ts
|
|
2712
|
+
function changeAreas(changes) {
|
|
2713
|
+
const out = [];
|
|
2714
|
+
const open = /* @__PURE__ */ new Map();
|
|
2715
|
+
let run2;
|
|
2716
|
+
const close2 = (area) => {
|
|
2717
|
+
const { start, end } = area.range;
|
|
2718
|
+
const key = `${area.sheet}:${start.col}:${end.col}`;
|
|
2719
|
+
const above = open.get(key);
|
|
2720
|
+
if (above && above.range.end.row === start.row - 1) {
|
|
2721
|
+
above.range.end.row = end.row;
|
|
2722
|
+
return;
|
|
2723
|
+
}
|
|
2724
|
+
out.push(area);
|
|
2725
|
+
open.set(key, area);
|
|
2726
|
+
};
|
|
2727
|
+
for (const { sheet, row: row2, col } of changes) {
|
|
2728
|
+
if (run2 && run2.sheet === sheet && run2.range.start.row === row2) {
|
|
2729
|
+
if (col === run2.range.end.col + 1) {
|
|
2730
|
+
run2.range.end.col = col;
|
|
2731
|
+
continue;
|
|
2732
|
+
}
|
|
2733
|
+
if (col >= run2.range.start.col && col <= run2.range.end.col) continue;
|
|
2734
|
+
}
|
|
2735
|
+
if (run2) close2(run2);
|
|
2736
|
+
run2 = { sheet, range: { start: { row: row2, col }, end: { row: row2, col } } };
|
|
2737
|
+
}
|
|
2738
|
+
if (run2) close2(run2);
|
|
2739
|
+
return out;
|
|
2740
|
+
}
|
|
2741
|
+
|
|
2706
2742
|
// xlsx/formula/date-serial.ts
|
|
2707
2743
|
var DAY_MS = 864e5;
|
|
2708
2744
|
var EPOCH_19002 = Date.UTC(1899, 11, 30);
|
|
@@ -2929,68 +2965,6 @@ var ReverseIndex = class extends AreaIndex {
|
|
|
2929
2965
|
}
|
|
2930
2966
|
};
|
|
2931
2967
|
|
|
2932
|
-
// xlsx/formula/engine-prepare.ts
|
|
2933
|
-
var CHECK_EVERY = 32;
|
|
2934
|
-
var GraphPreparation = class {
|
|
2935
|
-
constructor(workbook, create) {
|
|
2936
|
-
this.workbook = workbook;
|
|
2937
|
-
this.create = create;
|
|
2938
|
-
}
|
|
2939
|
-
workbook;
|
|
2940
|
-
create;
|
|
2941
|
-
reverse = new ReverseIndex();
|
|
2942
|
-
formulas = { dynamic: [], unvalued: [] };
|
|
2943
|
-
sheet = 0;
|
|
2944
|
-
rows;
|
|
2945
|
-
row = 0;
|
|
2946
|
-
cells;
|
|
2947
|
-
finished = false;
|
|
2948
|
-
/**
|
|
2949
|
-
* Adds formulas to the graph until `timeRemaining` (milliseconds, as an idle deadline reports
|
|
2950
|
-
* them) reaches zero, or until every formula is in. Returns true when the graph is complete.
|
|
2951
|
-
*/
|
|
2952
|
-
run(timeRemaining) {
|
|
2953
|
-
let visited = 0;
|
|
2954
|
-
while (!this.finished) {
|
|
2955
|
-
const cells = this.cells ?? this.nextRow();
|
|
2956
|
-
if (!cells) continue;
|
|
2957
|
-
const next = cells.next();
|
|
2958
|
-
if (next.done) {
|
|
2959
|
-
this.cells = void 0;
|
|
2960
|
-
continue;
|
|
2961
|
-
}
|
|
2962
|
-
const [col, cell] = next.value;
|
|
2963
|
-
if (cell.formula) this.add(this.create(this.sheet, this.row, col, cell), cell);
|
|
2964
|
-
if (timeRemaining && ++visited % CHECK_EVERY === 0 && timeRemaining() <= 0) break;
|
|
2965
|
-
}
|
|
2966
|
-
return this.finished;
|
|
2967
|
-
}
|
|
2968
|
-
add(node2, cell) {
|
|
2969
|
-
this.reverse.addNode(node2);
|
|
2970
|
-
if (!node2.legacy && !node2.arrayRange) this.formulas.dynamic.push(node2);
|
|
2971
|
-
if (cell.value === null && !node2.keepCached) this.formulas.unvalued.push(node2);
|
|
2972
|
-
}
|
|
2973
|
-
/** Moves to the next stored row (and sheet), or marks the walk finished. */
|
|
2974
|
-
nextRow() {
|
|
2975
|
-
for (; ; ) {
|
|
2976
|
-
const sheet = this.workbook.sheets[this.sheet];
|
|
2977
|
-
if (!sheet) {
|
|
2978
|
-
this.finished = true;
|
|
2979
|
-
return void 0;
|
|
2980
|
-
}
|
|
2981
|
-
this.rows ??= sheet.rows.entries();
|
|
2982
|
-
const next = this.rows.next();
|
|
2983
|
-
if (!next.done) {
|
|
2984
|
-
this.row = next.value[0];
|
|
2985
|
-
this.cells = next.value[1].entries();
|
|
2986
|
-
return this.cells;
|
|
2987
|
-
}
|
|
2988
|
-
this.rows = void 0;
|
|
2989
|
-
this.sheet++;
|
|
2990
|
-
}
|
|
2991
|
-
}
|
|
2992
|
-
};
|
|
2993
|
-
|
|
2994
2968
|
// xlsx/formula/text-number.ts
|
|
2995
2969
|
var MONTHS2 = [
|
|
2996
2970
|
"jan",
|
|
@@ -3393,6 +3367,311 @@ function finite(value3) {
|
|
|
3393
3367
|
return value3;
|
|
3394
3368
|
}
|
|
3395
3369
|
|
|
3370
|
+
// xlsx/formula/operators.ts
|
|
3371
|
+
var signal = (fn) => {
|
|
3372
|
+
try {
|
|
3373
|
+
return fn();
|
|
3374
|
+
} catch (e) {
|
|
3375
|
+
if (e instanceof ErrorSignal) return e.value;
|
|
3376
|
+
throw e;
|
|
3377
|
+
}
|
|
3378
|
+
};
|
|
3379
|
+
function power(base, exponent) {
|
|
3380
|
+
if (base === 0 && exponent === 0) throw new ErrorSignal(ERR.NUM);
|
|
3381
|
+
if (base === 0 && exponent < 0) throw new ErrorSignal(ERR.DIV0);
|
|
3382
|
+
if (base < 0 && !Number.isInteger(exponent)) {
|
|
3383
|
+
const inverse = 1 / exponent;
|
|
3384
|
+
const odd = Math.round(inverse);
|
|
3385
|
+
if (Math.abs(inverse - odd) < 1e-10 && Math.abs(odd) % 2 === 1) {
|
|
3386
|
+
return -Math.pow(-base, exponent);
|
|
3387
|
+
}
|
|
3388
|
+
throw new ErrorSignal(ERR.NUM);
|
|
3389
|
+
}
|
|
3390
|
+
return Math.pow(base, exponent);
|
|
3391
|
+
}
|
|
3392
|
+
function snapToZero(result2, a2, b) {
|
|
3393
|
+
if (result2 !== 0 && Math.abs(result2) <= Math.max(Math.abs(a2), Math.abs(b)) * 1e-15) return 0;
|
|
3394
|
+
return result2;
|
|
3395
|
+
}
|
|
3396
|
+
function arithmetic(op2, x, y, snap) {
|
|
3397
|
+
if (isError(x)) return x;
|
|
3398
|
+
if (isError(y)) return y;
|
|
3399
|
+
return signal(() => {
|
|
3400
|
+
const a2 = toNumber(x);
|
|
3401
|
+
const b = toNumber(y);
|
|
3402
|
+
let r;
|
|
3403
|
+
switch (op2) {
|
|
3404
|
+
case "+":
|
|
3405
|
+
r = a2 + b;
|
|
3406
|
+
if (snap) r = snapToZero(r, a2, b);
|
|
3407
|
+
break;
|
|
3408
|
+
case "-":
|
|
3409
|
+
r = a2 - b;
|
|
3410
|
+
if (snap) r = snapToZero(r, a2, b);
|
|
3411
|
+
break;
|
|
3412
|
+
case "*":
|
|
3413
|
+
r = a2 * b;
|
|
3414
|
+
break;
|
|
3415
|
+
case "/":
|
|
3416
|
+
if (b === 0) return ERR.DIV0;
|
|
3417
|
+
r = a2 / b;
|
|
3418
|
+
break;
|
|
3419
|
+
default:
|
|
3420
|
+
r = power(a2, b);
|
|
3421
|
+
}
|
|
3422
|
+
return Number.isFinite(r) ? r === 0 ? 0 : r : ERR.NUM;
|
|
3423
|
+
});
|
|
3424
|
+
}
|
|
3425
|
+
function comparison(op2, x, y) {
|
|
3426
|
+
if (isError(x)) return x;
|
|
3427
|
+
if (isError(y)) return y;
|
|
3428
|
+
const c2 = compareScalars(x, y);
|
|
3429
|
+
switch (op2) {
|
|
3430
|
+
case "=":
|
|
3431
|
+
return c2 === 0;
|
|
3432
|
+
case "<>":
|
|
3433
|
+
return c2 !== 0;
|
|
3434
|
+
case "<":
|
|
3435
|
+
return c2 < 0;
|
|
3436
|
+
case ">":
|
|
3437
|
+
return c2 > 0;
|
|
3438
|
+
case "<=":
|
|
3439
|
+
return c2 <= 0;
|
|
3440
|
+
default:
|
|
3441
|
+
return c2 >= 0;
|
|
3442
|
+
}
|
|
3443
|
+
}
|
|
3444
|
+
function concat(x, y) {
|
|
3445
|
+
if (isError(x)) return x;
|
|
3446
|
+
if (isError(y)) return y;
|
|
3447
|
+
return toText(x) + toText(y);
|
|
3448
|
+
}
|
|
3449
|
+
function scalarBinary(op2, x, y, snap = false) {
|
|
3450
|
+
if (op2 === "&") return concat(x, y);
|
|
3451
|
+
if (op2 === "+" || op2 === "-" || op2 === "*" || op2 === "/" || op2 === "^") {
|
|
3452
|
+
return arithmetic(op2, x, y, snap);
|
|
3453
|
+
}
|
|
3454
|
+
return comparison(op2, x, y);
|
|
3455
|
+
}
|
|
3456
|
+
function scalarUnary(op2, x) {
|
|
3457
|
+
if (isError(x)) return x;
|
|
3458
|
+
return signal(() => {
|
|
3459
|
+
const n2 = toNumber(x);
|
|
3460
|
+
const r = op2 === "-" ? -n2 : n2 / 100;
|
|
3461
|
+
return r === 0 ? 0 : r;
|
|
3462
|
+
});
|
|
3463
|
+
}
|
|
3464
|
+
function pick(m, row2, col) {
|
|
3465
|
+
const r = m.rows === 1 ? 0 : row2;
|
|
3466
|
+
const c2 = m.cols === 1 ? 0 : col;
|
|
3467
|
+
if (r >= m.rows || c2 >= m.cols) return ERR.NA;
|
|
3468
|
+
return m.get(r, c2);
|
|
3469
|
+
}
|
|
3470
|
+
function broadcastShape(operands, at) {
|
|
3471
|
+
let rows2 = 1;
|
|
3472
|
+
let cols = 1;
|
|
3473
|
+
for (const m of operands) {
|
|
3474
|
+
rows2 = Math.max(rows2, m.rows);
|
|
3475
|
+
cols = Math.max(cols, m.cols);
|
|
3476
|
+
}
|
|
3477
|
+
if (!operands.some((m) => m.isPadded)) return Matrix.build(rows2, cols, at);
|
|
3478
|
+
let blockRows = 1;
|
|
3479
|
+
let blockCols = 1;
|
|
3480
|
+
for (const m of operands) {
|
|
3481
|
+
blockRows = Math.max(blockRows, m.isPadded ? m.blockRows : m.rows);
|
|
3482
|
+
blockCols = Math.max(blockCols, m.isPadded ? m.blockCols : m.cols);
|
|
3483
|
+
}
|
|
3484
|
+
blockRows = Math.min(blockRows, rows2);
|
|
3485
|
+
blockCols = Math.min(blockCols, cols);
|
|
3486
|
+
const varies = operands.some(
|
|
3487
|
+
(m) => blockRows < rows2 && m.rows === 1 && m.cols > 1 || blockCols < cols && m.cols === 1 && m.rows > 1
|
|
3488
|
+
);
|
|
3489
|
+
if (varies) return Matrix.build(rows2, cols, at);
|
|
3490
|
+
return Matrix.padded(Matrix.build(blockRows, blockCols, at), rows2, cols, at(rows2 - 1, cols - 1));
|
|
3491
|
+
}
|
|
3492
|
+
function broadcast2(a2, b, fn) {
|
|
3493
|
+
if (!(a2 instanceof Matrix) && !(b instanceof Matrix)) return fn(a2, b);
|
|
3494
|
+
const ma = a2 instanceof Matrix ? a2 : new Matrix([[a2]]);
|
|
3495
|
+
const mb = b instanceof Matrix ? b : new Matrix([[b]]);
|
|
3496
|
+
return broadcastShape([ma, mb], (r, c2) => fn(pick(ma, r, c2), pick(mb, r, c2)));
|
|
3497
|
+
}
|
|
3498
|
+
function broadcast1(a2, fn) {
|
|
3499
|
+
return a2 instanceof Matrix ? a2.mapValues(fn) : fn(a2);
|
|
3500
|
+
}
|
|
3501
|
+
|
|
3502
|
+
// xlsx/formula/spill.ts
|
|
3503
|
+
var isSpilledCell = (cell) => cell !== void 0 && "spillAnchor" in cell;
|
|
3504
|
+
function releaseSpilledCell(sheet, row2, col) {
|
|
3505
|
+
const cell = getCell(sheet, row2, col);
|
|
3506
|
+
if (!isSpilledCell(cell)) return;
|
|
3507
|
+
delete cell.spillAnchor;
|
|
3508
|
+
cell.value = null;
|
|
3509
|
+
if (!cell.styleId && !cell.formula && !cell.richText && !cell.arrayRange)
|
|
3510
|
+
deleteCell(sheet, row2, col);
|
|
3511
|
+
}
|
|
3512
|
+
function clearFootprint(sheet, footprint, row2, col) {
|
|
3513
|
+
const { start, end } = footprint;
|
|
3514
|
+
const owned = [];
|
|
3515
|
+
const visit2 = (r, c2, cell) => {
|
|
3516
|
+
if (c2 < start.col || c2 > end.col || r === row2 && c2 === col) return;
|
|
3517
|
+
if (isSpilledCell(cell) && cell.spillAnchor.row === row2 && cell.spillAnchor.col === col)
|
|
3518
|
+
owned.push([r, c2]);
|
|
3519
|
+
};
|
|
3520
|
+
const visitRow = (r, cells) => {
|
|
3521
|
+
if (end.col - start.col + 1 <= cells.size)
|
|
3522
|
+
for (let c2 = start.col; c2 <= end.col; c2++) visit2(r, c2, cells.get(c2));
|
|
3523
|
+
else for (const [c2, cell] of cells) visit2(r, c2, cell);
|
|
3524
|
+
};
|
|
3525
|
+
if (end.row - start.row + 1 <= sheet.rows.size) {
|
|
3526
|
+
for (let r = start.row; r <= end.row; r++) {
|
|
3527
|
+
const cells = sheet.rows.get(r);
|
|
3528
|
+
if (cells) visitRow(r, cells);
|
|
3529
|
+
}
|
|
3530
|
+
} else
|
|
3531
|
+
for (const [r, cells] of sheet.rows) if (r >= start.row && r <= end.row) visitRow(r, cells);
|
|
3532
|
+
for (const [r, c2] of owned) releaseSpilledCell(sheet, r, c2);
|
|
3533
|
+
}
|
|
3534
|
+
function footprintFor(row2, col, m) {
|
|
3535
|
+
const end = { row: row2 + m.rows - 1, col: col + m.cols - 1 };
|
|
3536
|
+
if (end.row > MAX_ROW || end.col > MAX_COL) return void 0;
|
|
3537
|
+
return { start: { row: row2, col }, end };
|
|
3538
|
+
}
|
|
3539
|
+
function footprintFree(sheet, footprint, row2, col, claims) {
|
|
3540
|
+
if (sheet.merges.some((m) => rangesIntersect(m, footprint))) return false;
|
|
3541
|
+
for (let r = footprint.start.row; r <= footprint.end.row; r++) {
|
|
3542
|
+
const cells = sheet.rows.get(r);
|
|
3543
|
+
if (!cells) continue;
|
|
3544
|
+
for (let c2 = footprint.start.col; c2 <= footprint.end.col; c2++) {
|
|
3545
|
+
if (r === row2 && c2 === col) continue;
|
|
3546
|
+
const cell = cells.get(c2);
|
|
3547
|
+
if (!cell) continue;
|
|
3548
|
+
if (cell.formula) return false;
|
|
3549
|
+
if (isSpilledCell(cell)) {
|
|
3550
|
+
const a2 = cell.spillAnchor;
|
|
3551
|
+
if (a2.row === row2 && a2.col === col) continue;
|
|
3552
|
+
if (claims(a2, r, c2)) return false;
|
|
3553
|
+
continue;
|
|
3554
|
+
}
|
|
3555
|
+
if (cell.value !== null) return false;
|
|
3556
|
+
}
|
|
3557
|
+
}
|
|
3558
|
+
return true;
|
|
3559
|
+
}
|
|
3560
|
+
function writeFootprint(sheet, footprint, m) {
|
|
3561
|
+
const { row: row2, col } = footprint.start;
|
|
3562
|
+
for (let r = footprint.start.row; r <= footprint.end.row; r++) {
|
|
3563
|
+
for (let c2 = footprint.start.col; c2 <= footprint.end.col; c2++) {
|
|
3564
|
+
const value3 = cellValueOf(m.get(r - row2, c2 - col));
|
|
3565
|
+
const cell = getCell(sheet, r, c2);
|
|
3566
|
+
if (r === row2 && c2 === col) {
|
|
3567
|
+
if (cell) cell.value = value3;
|
|
3568
|
+
continue;
|
|
3569
|
+
}
|
|
3570
|
+
if (cell) {
|
|
3571
|
+
cell.value = value3;
|
|
3572
|
+
if (!isSpilledCell(cell) || cell.spillAnchor.row !== row2 || cell.spillAnchor.col !== col)
|
|
3573
|
+
cell.spillAnchor = { row: row2, col };
|
|
3574
|
+
} else {
|
|
3575
|
+
const spilled = { value: value3, spillAnchor: { row: row2, col } };
|
|
3576
|
+
putCell(sheet, r, c2, spilled);
|
|
3577
|
+
}
|
|
3578
|
+
}
|
|
3579
|
+
}
|
|
3580
|
+
}
|
|
3581
|
+
function fillArrayRange(sheet, range2, m) {
|
|
3582
|
+
const { row: row2, col } = range2.start;
|
|
3583
|
+
for (let r = range2.start.row; r <= range2.end.row; r++) {
|
|
3584
|
+
for (let c2 = range2.start.col; c2 <= range2.end.col; c2++) {
|
|
3585
|
+
const value3 = cellValueOf(pick(m, r - row2, c2 - col));
|
|
3586
|
+
const cell = getCell(sheet, r, c2);
|
|
3587
|
+
if (cell) cell.value = value3;
|
|
3588
|
+
else putCell(sheet, r, c2, { value: value3 });
|
|
3589
|
+
}
|
|
3590
|
+
}
|
|
3591
|
+
}
|
|
3592
|
+
var cellValueOf = (value3) => value3 === null ? 0 : value3;
|
|
3593
|
+
|
|
3594
|
+
// xlsx/formula/engine-prepare.ts
|
|
3595
|
+
var CHECK_EVERY = 32;
|
|
3596
|
+
var GraphPreparation = class {
|
|
3597
|
+
constructor(workbook, create) {
|
|
3598
|
+
this.workbook = workbook;
|
|
3599
|
+
this.create = create;
|
|
3600
|
+
}
|
|
3601
|
+
workbook;
|
|
3602
|
+
create;
|
|
3603
|
+
reverse = new ReverseIndex();
|
|
3604
|
+
formulas = { dynamic: [], unvalued: [] };
|
|
3605
|
+
/**
|
|
3606
|
+
* The spills stored in the file, by sheet and anchor (`cellKey`): from the anchor to the last
|
|
3607
|
+
* row and column of the cells marked as its results. Until the anchor is evaluated they are
|
|
3608
|
+
* the only record of the cells it covers.
|
|
3609
|
+
*/
|
|
3610
|
+
spills = /* @__PURE__ */ new Map();
|
|
3611
|
+
sheet = 0;
|
|
3612
|
+
rows;
|
|
3613
|
+
row = 0;
|
|
3614
|
+
cells;
|
|
3615
|
+
finished = false;
|
|
3616
|
+
/**
|
|
3617
|
+
* Adds formulas to the graph until `timeRemaining` (milliseconds, as an idle deadline reports
|
|
3618
|
+
* them) reaches zero, or until every formula is in. Returns true when the graph is complete.
|
|
3619
|
+
*/
|
|
3620
|
+
run(timeRemaining) {
|
|
3621
|
+
let visited = 0;
|
|
3622
|
+
while (!this.finished) {
|
|
3623
|
+
const cells = this.cells ?? this.nextRow();
|
|
3624
|
+
if (!cells) continue;
|
|
3625
|
+
const next = cells.next();
|
|
3626
|
+
if (next.done) {
|
|
3627
|
+
this.cells = void 0;
|
|
3628
|
+
continue;
|
|
3629
|
+
}
|
|
3630
|
+
const [col, cell] = next.value;
|
|
3631
|
+
if (cell.formula) this.add(this.create(this.sheet, this.row, col, cell), cell);
|
|
3632
|
+
else if (isSpilledCell(cell)) this.addSpilled(this.row, col, cell.spillAnchor);
|
|
3633
|
+
if (timeRemaining && ++visited % CHECK_EVERY === 0 && timeRemaining() <= 0) break;
|
|
3634
|
+
}
|
|
3635
|
+
return this.finished;
|
|
3636
|
+
}
|
|
3637
|
+
add(node2, cell) {
|
|
3638
|
+
this.reverse.addNode(node2);
|
|
3639
|
+
if (!node2.legacy && !node2.arrayRange) this.formulas.dynamic.push(node2);
|
|
3640
|
+
if (cell.value === null && !node2.keepCached) this.formulas.unvalued.push(node2);
|
|
3641
|
+
}
|
|
3642
|
+
addSpilled(row2, col, anchor) {
|
|
3643
|
+
if (row2 < anchor.row || col < anchor.col) return;
|
|
3644
|
+
let spills = this.spills.get(this.sheet);
|
|
3645
|
+
if (!spills) this.spills.set(this.sheet, spills = /* @__PURE__ */ new Map());
|
|
3646
|
+
const key = cellKey(anchor.row, anchor.col);
|
|
3647
|
+
const range2 = spills.get(key);
|
|
3648
|
+
if (!range2) spills.set(key, { start: { ...anchor }, end: { row: row2, col } });
|
|
3649
|
+
else {
|
|
3650
|
+
range2.end.row = Math.max(range2.end.row, row2);
|
|
3651
|
+
range2.end.col = Math.max(range2.end.col, col);
|
|
3652
|
+
}
|
|
3653
|
+
}
|
|
3654
|
+
/** Moves to the next stored row (and sheet), or marks the walk finished. */
|
|
3655
|
+
nextRow() {
|
|
3656
|
+
for (; ; ) {
|
|
3657
|
+
const sheet = this.workbook.sheets[this.sheet];
|
|
3658
|
+
if (!sheet) {
|
|
3659
|
+
this.finished = true;
|
|
3660
|
+
return void 0;
|
|
3661
|
+
}
|
|
3662
|
+
this.rows ??= sheet.rows.entries();
|
|
3663
|
+
const next = this.rows.next();
|
|
3664
|
+
if (!next.done) {
|
|
3665
|
+
this.row = next.value[0];
|
|
3666
|
+
this.cells = next.value[1].entries();
|
|
3667
|
+
return this.cells;
|
|
3668
|
+
}
|
|
3669
|
+
this.rows = void 0;
|
|
3670
|
+
this.sheet++;
|
|
3671
|
+
}
|
|
3672
|
+
}
|
|
3673
|
+
};
|
|
3674
|
+
|
|
3396
3675
|
// xlsx/formula/functions/wildcard.ts
|
|
3397
3676
|
var lower = (ch) => (ch ?? "").toLowerCase();
|
|
3398
3677
|
var fold = (text4) => Array.from({ length: text4.length }, (_, i2) => lower(text4[i2]));
|
|
@@ -6866,138 +7145,6 @@ var INFO_FUNCTIONS = [
|
|
|
6866
7145
|
)
|
|
6867
7146
|
];
|
|
6868
7147
|
|
|
6869
|
-
// xlsx/formula/operators.ts
|
|
6870
|
-
var signal = (fn) => {
|
|
6871
|
-
try {
|
|
6872
|
-
return fn();
|
|
6873
|
-
} catch (e) {
|
|
6874
|
-
if (e instanceof ErrorSignal) return e.value;
|
|
6875
|
-
throw e;
|
|
6876
|
-
}
|
|
6877
|
-
};
|
|
6878
|
-
function power(base, exponent) {
|
|
6879
|
-
if (base === 0 && exponent === 0) throw new ErrorSignal(ERR.NUM);
|
|
6880
|
-
if (base === 0 && exponent < 0) throw new ErrorSignal(ERR.DIV0);
|
|
6881
|
-
if (base < 0 && !Number.isInteger(exponent)) {
|
|
6882
|
-
const inverse = 1 / exponent;
|
|
6883
|
-
const odd = Math.round(inverse);
|
|
6884
|
-
if (Math.abs(inverse - odd) < 1e-10 && Math.abs(odd) % 2 === 1) {
|
|
6885
|
-
return -Math.pow(-base, exponent);
|
|
6886
|
-
}
|
|
6887
|
-
throw new ErrorSignal(ERR.NUM);
|
|
6888
|
-
}
|
|
6889
|
-
return Math.pow(base, exponent);
|
|
6890
|
-
}
|
|
6891
|
-
function snapToZero(result2, a2, b) {
|
|
6892
|
-
if (result2 !== 0 && Math.abs(result2) <= Math.max(Math.abs(a2), Math.abs(b)) * 1e-15) return 0;
|
|
6893
|
-
return result2;
|
|
6894
|
-
}
|
|
6895
|
-
function arithmetic(op2, x, y, snap) {
|
|
6896
|
-
if (isError(x)) return x;
|
|
6897
|
-
if (isError(y)) return y;
|
|
6898
|
-
return signal(() => {
|
|
6899
|
-
const a2 = toNumber(x);
|
|
6900
|
-
const b = toNumber(y);
|
|
6901
|
-
let r;
|
|
6902
|
-
switch (op2) {
|
|
6903
|
-
case "+":
|
|
6904
|
-
r = a2 + b;
|
|
6905
|
-
if (snap) r = snapToZero(r, a2, b);
|
|
6906
|
-
break;
|
|
6907
|
-
case "-":
|
|
6908
|
-
r = a2 - b;
|
|
6909
|
-
if (snap) r = snapToZero(r, a2, b);
|
|
6910
|
-
break;
|
|
6911
|
-
case "*":
|
|
6912
|
-
r = a2 * b;
|
|
6913
|
-
break;
|
|
6914
|
-
case "/":
|
|
6915
|
-
if (b === 0) return ERR.DIV0;
|
|
6916
|
-
r = a2 / b;
|
|
6917
|
-
break;
|
|
6918
|
-
default:
|
|
6919
|
-
r = power(a2, b);
|
|
6920
|
-
}
|
|
6921
|
-
return Number.isFinite(r) ? r === 0 ? 0 : r : ERR.NUM;
|
|
6922
|
-
});
|
|
6923
|
-
}
|
|
6924
|
-
function comparison(op2, x, y) {
|
|
6925
|
-
if (isError(x)) return x;
|
|
6926
|
-
if (isError(y)) return y;
|
|
6927
|
-
const c2 = compareScalars(x, y);
|
|
6928
|
-
switch (op2) {
|
|
6929
|
-
case "=":
|
|
6930
|
-
return c2 === 0;
|
|
6931
|
-
case "<>":
|
|
6932
|
-
return c2 !== 0;
|
|
6933
|
-
case "<":
|
|
6934
|
-
return c2 < 0;
|
|
6935
|
-
case ">":
|
|
6936
|
-
return c2 > 0;
|
|
6937
|
-
case "<=":
|
|
6938
|
-
return c2 <= 0;
|
|
6939
|
-
default:
|
|
6940
|
-
return c2 >= 0;
|
|
6941
|
-
}
|
|
6942
|
-
}
|
|
6943
|
-
function concat(x, y) {
|
|
6944
|
-
if (isError(x)) return x;
|
|
6945
|
-
if (isError(y)) return y;
|
|
6946
|
-
return toText(x) + toText(y);
|
|
6947
|
-
}
|
|
6948
|
-
function scalarBinary(op2, x, y, snap = false) {
|
|
6949
|
-
if (op2 === "&") return concat(x, y);
|
|
6950
|
-
if (op2 === "+" || op2 === "-" || op2 === "*" || op2 === "/" || op2 === "^") {
|
|
6951
|
-
return arithmetic(op2, x, y, snap);
|
|
6952
|
-
}
|
|
6953
|
-
return comparison(op2, x, y);
|
|
6954
|
-
}
|
|
6955
|
-
function scalarUnary(op2, x) {
|
|
6956
|
-
if (isError(x)) return x;
|
|
6957
|
-
return signal(() => {
|
|
6958
|
-
const n2 = toNumber(x);
|
|
6959
|
-
const r = op2 === "-" ? -n2 : n2 / 100;
|
|
6960
|
-
return r === 0 ? 0 : r;
|
|
6961
|
-
});
|
|
6962
|
-
}
|
|
6963
|
-
function pick(m, row2, col) {
|
|
6964
|
-
const r = m.rows === 1 ? 0 : row2;
|
|
6965
|
-
const c2 = m.cols === 1 ? 0 : col;
|
|
6966
|
-
if (r >= m.rows || c2 >= m.cols) return ERR.NA;
|
|
6967
|
-
return m.get(r, c2);
|
|
6968
|
-
}
|
|
6969
|
-
function broadcastShape(operands, at) {
|
|
6970
|
-
let rows2 = 1;
|
|
6971
|
-
let cols = 1;
|
|
6972
|
-
for (const m of operands) {
|
|
6973
|
-
rows2 = Math.max(rows2, m.rows);
|
|
6974
|
-
cols = Math.max(cols, m.cols);
|
|
6975
|
-
}
|
|
6976
|
-
if (!operands.some((m) => m.isPadded)) return Matrix.build(rows2, cols, at);
|
|
6977
|
-
let blockRows = 1;
|
|
6978
|
-
let blockCols = 1;
|
|
6979
|
-
for (const m of operands) {
|
|
6980
|
-
blockRows = Math.max(blockRows, m.isPadded ? m.blockRows : m.rows);
|
|
6981
|
-
blockCols = Math.max(blockCols, m.isPadded ? m.blockCols : m.cols);
|
|
6982
|
-
}
|
|
6983
|
-
blockRows = Math.min(blockRows, rows2);
|
|
6984
|
-
blockCols = Math.min(blockCols, cols);
|
|
6985
|
-
const varies = operands.some(
|
|
6986
|
-
(m) => blockRows < rows2 && m.rows === 1 && m.cols > 1 || blockCols < cols && m.cols === 1 && m.rows > 1
|
|
6987
|
-
);
|
|
6988
|
-
if (varies) return Matrix.build(rows2, cols, at);
|
|
6989
|
-
return Matrix.padded(Matrix.build(blockRows, blockCols, at), rows2, cols, at(rows2 - 1, cols - 1));
|
|
6990
|
-
}
|
|
6991
|
-
function broadcast2(a2, b, fn) {
|
|
6992
|
-
if (!(a2 instanceof Matrix) && !(b instanceof Matrix)) return fn(a2, b);
|
|
6993
|
-
const ma = a2 instanceof Matrix ? a2 : new Matrix([[a2]]);
|
|
6994
|
-
const mb = b instanceof Matrix ? b : new Matrix([[b]]);
|
|
6995
|
-
return broadcastShape([ma, mb], (r, c2) => fn(pick(ma, r, c2), pick(mb, r, c2)));
|
|
6996
|
-
}
|
|
6997
|
-
function broadcast1(a2, fn) {
|
|
6998
|
-
return a2 instanceof Matrix ? a2.mapValues(fn) : fn(a2);
|
|
6999
|
-
}
|
|
7000
|
-
|
|
7001
7148
|
// xlsx/formula/functions/lambda.ts
|
|
7002
7149
|
var C16 = "Logical";
|
|
7003
7150
|
function lambdaArg(value3) {
|
|
@@ -11735,6 +11882,19 @@ var DEFAULT_XML_LIMITS = {
|
|
|
11735
11882
|
maxDepth: 512,
|
|
11736
11883
|
maxNodes: 5e6
|
|
11737
11884
|
};
|
|
11885
|
+
var XmlLimitError = class extends Error {
|
|
11886
|
+
code = "xml-limit";
|
|
11887
|
+
/** The limit that was exceeded. */
|
|
11888
|
+
limit;
|
|
11889
|
+
/** Its value: the largest depth or element count allowed. */
|
|
11890
|
+
maximum;
|
|
11891
|
+
constructor(message, limit2, maximum) {
|
|
11892
|
+
super(message);
|
|
11893
|
+
this.name = "XmlLimitError";
|
|
11894
|
+
this.limit = limit2;
|
|
11895
|
+
this.maximum = maximum;
|
|
11896
|
+
}
|
|
11897
|
+
};
|
|
11738
11898
|
var TAG_RE = /<(\/?)([^\s\/><]+)(?:\s+[^\s=\/><]+\s*=\s*(?:"[^"<]*"|'[^'<]*'))*\s*(\/?)>/y;
|
|
11739
11899
|
var MARKUP_SKIPS = [
|
|
11740
11900
|
["<!--", "-->"],
|
|
@@ -11768,11 +11928,22 @@ function checkXmlLimits(xml, label2, limits = {}) {
|
|
|
11768
11928
|
continue;
|
|
11769
11929
|
}
|
|
11770
11930
|
nodes++;
|
|
11771
|
-
if (nodes > maxNodes)
|
|
11931
|
+
if (nodes > maxNodes)
|
|
11932
|
+
throw new XmlLimitError(
|
|
11933
|
+
`${label2} XML exceeds the limit of ${maxNodes} elements`,
|
|
11934
|
+
"maxNodes",
|
|
11935
|
+
maxNodes
|
|
11936
|
+
);
|
|
11772
11937
|
if (!selfClosing && ++depth > maxDepth)
|
|
11773
|
-
throw new
|
|
11938
|
+
throw new XmlLimitError(
|
|
11939
|
+
`${label2} XML exceeds the nesting depth limit of ${maxDepth}`,
|
|
11940
|
+
"maxDepth",
|
|
11941
|
+
maxDepth
|
|
11942
|
+
);
|
|
11774
11943
|
}
|
|
11775
11944
|
}
|
|
11945
|
+
var CRLF_DECLARATION = /^<\?xml[^>]*\?>\r\n/;
|
|
11946
|
+
var crlfDeclarations = /* @__PURE__ */ new WeakSet();
|
|
11776
11947
|
function parseXml(xml, options7 = {}) {
|
|
11777
11948
|
const label2 = options7.label ?? "OOXML";
|
|
11778
11949
|
if (/<!DOCTYPE|<!ENTITY/i.test(xml))
|
|
@@ -11794,9 +11965,13 @@ function parseXml(xml, options7 = {}) {
|
|
|
11794
11965
|
}
|
|
11795
11966
|
if (parseError || !parsed.documentElement)
|
|
11796
11967
|
throw new Error(`Invalid ${label2} XML: ${parseError || "missing root element"}`);
|
|
11968
|
+
if (CRLF_DECLARATION.test(xml)) crlfDeclarations.add(parsed);
|
|
11797
11969
|
return parsed;
|
|
11798
11970
|
}
|
|
11799
|
-
var buildXml = (node2) =>
|
|
11971
|
+
var buildXml = (node2) => {
|
|
11972
|
+
const xml = new XMLSerializer().serializeToString(node2);
|
|
11973
|
+
return crlfDeclarations.has(node2) ? xml.replace(/^(<\?xml[^>]*\?>)\n/, "$1\r\n") : xml;
|
|
11974
|
+
};
|
|
11800
11975
|
var isElement = (node2) => node2.nodeType === 1;
|
|
11801
11976
|
var elements = (parent) => Array.from(parent.childNodes).filter(isElement);
|
|
11802
11977
|
function named(element2, local, ns, lenient = true) {
|
|
@@ -14913,89 +15088,6 @@ function sheetBounds(sheet) {
|
|
|
14913
15088
|
return { rows: rows2, cols };
|
|
14914
15089
|
}
|
|
14915
15090
|
|
|
14916
|
-
// xlsx/formula/spill.ts
|
|
14917
|
-
var isSpilledCell = (cell) => cell !== void 0 && "spillAnchor" in cell;
|
|
14918
|
-
function releaseSpilledCell(sheet, row2, col) {
|
|
14919
|
-
const cell = getCell(sheet, row2, col);
|
|
14920
|
-
if (!isSpilledCell(cell)) return;
|
|
14921
|
-
delete cell.spillAnchor;
|
|
14922
|
-
cell.value = null;
|
|
14923
|
-
if (!cell.styleId && !cell.formula && !cell.richText && !cell.arrayRange)
|
|
14924
|
-
deleteCell(sheet, row2, col);
|
|
14925
|
-
}
|
|
14926
|
-
function clearFootprint(sheet, footprint, row2, col) {
|
|
14927
|
-
for (let r = footprint.start.row; r <= footprint.end.row; r++) {
|
|
14928
|
-
const cells = sheet.rows.get(r);
|
|
14929
|
-
if (!cells) continue;
|
|
14930
|
-
for (let c2 = footprint.start.col; c2 <= footprint.end.col; c2++) {
|
|
14931
|
-
if (r === row2 && c2 === col) continue;
|
|
14932
|
-
const cell = cells.get(c2);
|
|
14933
|
-
if (isSpilledCell(cell) && cell.spillAnchor.row === row2 && cell.spillAnchor.col === col) {
|
|
14934
|
-
releaseSpilledCell(sheet, r, c2);
|
|
14935
|
-
}
|
|
14936
|
-
}
|
|
14937
|
-
}
|
|
14938
|
-
}
|
|
14939
|
-
function footprintFor(row2, col, m) {
|
|
14940
|
-
const end = { row: row2 + m.rows - 1, col: col + m.cols - 1 };
|
|
14941
|
-
if (end.row > MAX_ROW || end.col > MAX_COL) return void 0;
|
|
14942
|
-
return { start: { row: row2, col }, end };
|
|
14943
|
-
}
|
|
14944
|
-
function footprintFree(sheet, footprint, row2, col, claims) {
|
|
14945
|
-
if (sheet.merges.some((m) => rangesIntersect(m, footprint))) return false;
|
|
14946
|
-
for (let r = footprint.start.row; r <= footprint.end.row; r++) {
|
|
14947
|
-
const cells = sheet.rows.get(r);
|
|
14948
|
-
if (!cells) continue;
|
|
14949
|
-
for (let c2 = footprint.start.col; c2 <= footprint.end.col; c2++) {
|
|
14950
|
-
if (r === row2 && c2 === col) continue;
|
|
14951
|
-
const cell = cells.get(c2);
|
|
14952
|
-
if (!cell) continue;
|
|
14953
|
-
if (cell.formula) return false;
|
|
14954
|
-
if (isSpilledCell(cell)) {
|
|
14955
|
-
const a2 = cell.spillAnchor;
|
|
14956
|
-
if (a2.row === row2 && a2.col === col) continue;
|
|
14957
|
-
if (claims(a2, r, c2)) return false;
|
|
14958
|
-
continue;
|
|
14959
|
-
}
|
|
14960
|
-
if (cell.value !== null) return false;
|
|
14961
|
-
}
|
|
14962
|
-
}
|
|
14963
|
-
return true;
|
|
14964
|
-
}
|
|
14965
|
-
function writeFootprint(sheet, footprint, m) {
|
|
14966
|
-
const { row: row2, col } = footprint.start;
|
|
14967
|
-
for (let r = footprint.start.row; r <= footprint.end.row; r++) {
|
|
14968
|
-
for (let c2 = footprint.start.col; c2 <= footprint.end.col; c2++) {
|
|
14969
|
-
const value3 = cellValueOf(m.get(r - row2, c2 - col));
|
|
14970
|
-
const cell = getCell(sheet, r, c2);
|
|
14971
|
-
if (r === row2 && c2 === col) {
|
|
14972
|
-
if (cell) cell.value = value3;
|
|
14973
|
-
continue;
|
|
14974
|
-
}
|
|
14975
|
-
if (cell) {
|
|
14976
|
-
cell.value = value3;
|
|
14977
|
-
if (!isSpilledCell(cell) || cell.spillAnchor.row !== row2 || cell.spillAnchor.col !== col)
|
|
14978
|
-
cell.spillAnchor = { row: row2, col };
|
|
14979
|
-
} else {
|
|
14980
|
-
const spilled = { value: value3, spillAnchor: { row: row2, col } };
|
|
14981
|
-
putCell(sheet, r, c2, spilled);
|
|
14982
|
-
}
|
|
14983
|
-
}
|
|
14984
|
-
}
|
|
14985
|
-
}
|
|
14986
|
-
function fillArrayRange(sheet, range2, m) {
|
|
14987
|
-
const { row: row2, col } = range2.start;
|
|
14988
|
-
for (let r = range2.start.row; r <= range2.end.row; r++) {
|
|
14989
|
-
for (let c2 = range2.start.col; c2 <= range2.end.col; c2++) {
|
|
14990
|
-
const value3 = cellValueOf(pick(m, r - row2, c2 - col));
|
|
14991
|
-
const cell = getCell(sheet, r, c2);
|
|
14992
|
-
if (cell) cell.value = value3;
|
|
14993
|
-
else putCell(sheet, r, c2, { value: value3 });
|
|
14994
|
-
}
|
|
14995
|
-
}
|
|
14996
|
-
}
|
|
14997
|
-
var cellValueOf = (value3) => value3 === null ? 0 : value3;
|
|
14998
|
-
|
|
14999
15091
|
// xlsx/formula/engine-host.ts
|
|
15000
15092
|
var Deferred = class {
|
|
15001
15093
|
constructor(node2) {
|
|
@@ -15920,6 +16012,8 @@ var Engine = class extends EngineStructure {
|
|
|
15920
16012
|
preparation;
|
|
15921
16013
|
/** The prepared formulas the first recalculation checks (see `trustsStoredValues`). */
|
|
15922
16014
|
prepared;
|
|
16015
|
+
/** Stored spills released when the graph was built: their readers must recalculate. */
|
|
16016
|
+
released = [];
|
|
15923
16017
|
// ---- the graph ----
|
|
15924
16018
|
prepare(timeRemaining) {
|
|
15925
16019
|
if (this.built || this.needsFull) return true;
|
|
@@ -15957,10 +16051,33 @@ var Engine = class extends EngineStructure {
|
|
|
15957
16051
|
finishPreparation(preparation) {
|
|
15958
16052
|
this.preparation = void 0;
|
|
15959
16053
|
this.built = true;
|
|
16054
|
+
this.adoptStoredSpills(preparation.spills);
|
|
15960
16055
|
this.graphChanged();
|
|
15961
16056
|
this.reverseIndex = preparation.reverse;
|
|
15962
16057
|
this.prepared = preparation.formulas;
|
|
15963
16058
|
}
|
|
16059
|
+
/**
|
|
16060
|
+
* Takes the spills a file stored as their anchors' last footprints, so that overwriting an
|
|
16061
|
+
* anchor or shrinking its result clears the cells it covered before it was ever evaluated here.
|
|
16062
|
+
* Cells marked for an anchor that holds no formula able to spill are released.
|
|
16063
|
+
*/
|
|
16064
|
+
adoptStoredSpills(spills) {
|
|
16065
|
+
for (const [s, anchors] of spills)
|
|
16066
|
+
for (const [key, range2] of anchors) {
|
|
16067
|
+
const node2 = this.nodes.get(s)?.get(key);
|
|
16068
|
+
if (node2 && !node2.legacy && !node2.arrayRange) {
|
|
16069
|
+
if (!node2.spill && !node2.blockedSpill) {
|
|
16070
|
+
node2.spill = range2;
|
|
16071
|
+
this.footprints.add(node2);
|
|
16072
|
+
}
|
|
16073
|
+
continue;
|
|
16074
|
+
}
|
|
16075
|
+
const sheet = this.workbook.sheets[s];
|
|
16076
|
+
if (!sheet) continue;
|
|
16077
|
+
clearFootprint(sheet, range2, range2.start.row, range2.start.col);
|
|
16078
|
+
this.released.push({ sheet: s, range: range2 });
|
|
16079
|
+
}
|
|
16080
|
+
}
|
|
15964
16081
|
// ---- recalculation ----
|
|
15965
16082
|
recalculateAll() {
|
|
15966
16083
|
resetArrayBudget();
|
|
@@ -15969,6 +16086,7 @@ var Engine = class extends EngineStructure {
|
|
|
15969
16086
|
if (this.needsFull) this.releaseAllSpills();
|
|
15970
16087
|
if (!this.built || this.needsFull) this.build();
|
|
15971
16088
|
this.needsFull = false;
|
|
16089
|
+
this.released = [];
|
|
15972
16090
|
this.structuralSeeds.clear();
|
|
15973
16091
|
this.cycles = /* @__PURE__ */ new Set();
|
|
15974
16092
|
this.run(new Set(this.allNodes()), true);
|
|
@@ -15987,7 +16105,9 @@ var Engine = class extends EngineStructure {
|
|
|
15987
16105
|
this.recalculateAll();
|
|
15988
16106
|
return;
|
|
15989
16107
|
}
|
|
15990
|
-
const changed =
|
|
16108
|
+
const changed = this.released;
|
|
16109
|
+
this.released = [];
|
|
16110
|
+
const written = [];
|
|
15991
16111
|
let structural = false;
|
|
15992
16112
|
for (const change of changes) {
|
|
15993
16113
|
const sheet = this.workbook.sheets[change.sheet];
|
|
@@ -16007,7 +16127,8 @@ var Engine = class extends EngineStructure {
|
|
|
16007
16127
|
seeds.add(this.createNode(change.sheet, row2, col, cell, false));
|
|
16008
16128
|
structural = true;
|
|
16009
16129
|
} else if (existing && formula) seeds.add(existing);
|
|
16010
|
-
|
|
16130
|
+
written.push(change);
|
|
16131
|
+
if (!this.footprints.size) continue;
|
|
16011
16132
|
const anchors = [];
|
|
16012
16133
|
this.footprintsBy().dependents(
|
|
16013
16134
|
change.sheet,
|
|
@@ -16024,7 +16145,8 @@ var Engine = class extends EngineStructure {
|
|
|
16024
16145
|
if (structural) this.graphChanged();
|
|
16025
16146
|
this.takeStructuralSeeds(seeds);
|
|
16026
16147
|
const reverse2 = this.reverse();
|
|
16027
|
-
for (const area of changed
|
|
16148
|
+
for (const area of [...changed, ...changeAreas(written)])
|
|
16149
|
+
reverse2.dependents(area.sheet, area.range, seeds);
|
|
16028
16150
|
for (const node2 of this.allNodes()) if (node2.volatile) seeds.add(node2);
|
|
16029
16151
|
this.run(seeds, false);
|
|
16030
16152
|
}
|
|
@@ -16037,11 +16159,17 @@ var Engine = class extends EngineStructure {
|
|
|
16037
16159
|
const prepared = this.prepared;
|
|
16038
16160
|
this.prepared = void 0;
|
|
16039
16161
|
if (!prepared) return false;
|
|
16040
|
-
const changed = new Set(changes.map((c2) => `${c2.sheet}:${cellKey(c2.row, c2.col)}`));
|
|
16041
16162
|
const current = (node2) => this.nodes.get(node2.sheet)?.get(cellKey(node2.row, node2.col)) === node2;
|
|
16042
|
-
|
|
16043
|
-
|
|
16044
|
-
|
|
16163
|
+
const dynamic = prepared.dynamic.filter(current);
|
|
16164
|
+
if (dynamic.length) {
|
|
16165
|
+
const changed = /* @__PURE__ */ new Map();
|
|
16166
|
+
for (const c2 of changes) {
|
|
16167
|
+
let keys = changed.get(c2.sheet);
|
|
16168
|
+
if (!keys) changed.set(c2.sheet, keys = /* @__PURE__ */ new Set());
|
|
16169
|
+
keys.add(cellKey(c2.row, c2.col));
|
|
16170
|
+
}
|
|
16171
|
+
for (const node2 of dynamic)
|
|
16172
|
+
if (!changed.get(node2.sheet)?.has(cellKey(node2.row, node2.col))) return false;
|
|
16045
16173
|
}
|
|
16046
16174
|
for (const node2 of prepared.unvalued) {
|
|
16047
16175
|
const cell = this.workbook.sheets[node2.sheet]?.rows.get(node2.row)?.get(node2.col);
|
|
@@ -16769,10 +16897,13 @@ var DEFAULT_ZIP_LIMITS = {
|
|
|
16769
16897
|
var ZipLimitError = class extends Error {
|
|
16770
16898
|
code = "ZIP_BOMB";
|
|
16771
16899
|
limit;
|
|
16900
|
+
/** The check that failed (absent when the error was built without one). */
|
|
16901
|
+
kind;
|
|
16772
16902
|
constructor(message, details) {
|
|
16773
16903
|
super(message);
|
|
16774
16904
|
this.name = "ZipLimitError";
|
|
16775
16905
|
this.limit = details.limit;
|
|
16906
|
+
this.kind = details.kind;
|
|
16776
16907
|
}
|
|
16777
16908
|
};
|
|
16778
16909
|
var mib = (bytes) => Math.round(bytes / 1048576);
|
|
@@ -16795,7 +16926,7 @@ function resolveLimits(limits) {
|
|
|
16795
16926
|
maxEntryBytes: limits.maxEntryBytes ?? DEFAULT_ZIP_LIMITS.maxEntryBytes,
|
|
16796
16927
|
maxTotalBytes: limits.maxTotalBytes ?? DEFAULT_ZIP_LIMITS.maxTotalBytes,
|
|
16797
16928
|
label: limits.label ?? "ZIP",
|
|
16798
|
-
fail: (message, limit2) => create ? create(message, { limit: limit2 }) : new ZipLimitError(message, { limit: limit2 })
|
|
16929
|
+
fail: (message, limit2, kind) => create ? create(message, { limit: limit2, kind }) : new ZipLimitError(message, { limit: limit2, kind })
|
|
16799
16930
|
};
|
|
16800
16931
|
}
|
|
16801
16932
|
function inflateEntryGuarded(entry3, alreadyRead, limits) {
|
|
@@ -16818,13 +16949,18 @@ function inflateEntryGuarded(entry3, alreadyRead, limits) {
|
|
|
16818
16949
|
size += chunk.byteLength;
|
|
16819
16950
|
if (size > declared || size > r.maxEntryBytes)
|
|
16820
16951
|
return abort(
|
|
16821
|
-
r.fail(
|
|
16952
|
+
r.fail(
|
|
16953
|
+
`${r.label} part ${entry3.name} inflates past its declared size`,
|
|
16954
|
+
r.maxEntryBytes,
|
|
16955
|
+
size > declared ? "declaredSize" : "maxEntryBytes"
|
|
16956
|
+
)
|
|
16822
16957
|
);
|
|
16823
16958
|
if (alreadyRead + size > r.maxTotalBytes)
|
|
16824
16959
|
return abort(
|
|
16825
16960
|
r.fail(
|
|
16826
16961
|
`${r.label} package exceeds the ${mib(r.maxTotalBytes)} MiB uncompressed content limit`,
|
|
16827
|
-
r.maxTotalBytes
|
|
16962
|
+
r.maxTotalBytes,
|
|
16963
|
+
"maxTotalBytes"
|
|
16828
16964
|
)
|
|
16829
16965
|
);
|
|
16830
16966
|
chunks.push(chunk);
|
|
@@ -16857,26 +16993,29 @@ function guardZip(zip, limits = {}) {
|
|
|
16857
16993
|
if (entries.length > r.maxEntries)
|
|
16858
16994
|
throw r.fail(
|
|
16859
16995
|
`${r.label} package exceeds the ${r.maxEntries.toLocaleString("en-US")} part limit`,
|
|
16860
|
-
r.maxEntries
|
|
16996
|
+
r.maxEntries,
|
|
16997
|
+
"maxEntries"
|
|
16861
16998
|
);
|
|
16862
16999
|
let declared = 0;
|
|
16863
17000
|
for (const entry3 of entries) {
|
|
16864
17001
|
const original = entry3.unsafeOriginalName;
|
|
16865
17002
|
if (!isSafePartName(entry3.name) || original !== void 0 && !isSafePartName(original))
|
|
16866
|
-
throw r.fail(`${r.label} package has an unsafe part name`, r.maxEntries);
|
|
17003
|
+
throw r.fail(`${r.label} package has an unsafe part name`, r.maxEntries, "partName");
|
|
16867
17004
|
if (entry3.dir) continue;
|
|
16868
17005
|
const size = declaredEntrySize(entry3);
|
|
16869
17006
|
if (size > r.maxEntryBytes)
|
|
16870
17007
|
throw r.fail(
|
|
16871
17008
|
`${r.label} part ${entry3.name} exceeds the uncompressed part size limit`,
|
|
16872
|
-
r.maxEntryBytes
|
|
17009
|
+
r.maxEntryBytes,
|
|
17010
|
+
"maxEntryBytes"
|
|
16873
17011
|
);
|
|
16874
17012
|
declared += size;
|
|
16875
17013
|
}
|
|
16876
17014
|
if (declared > r.maxTotalBytes)
|
|
16877
17015
|
throw r.fail(
|
|
16878
17016
|
`${r.label} package exceeds the ${mib(r.maxTotalBytes)} MiB uncompressed content limit`,
|
|
16879
|
-
r.maxTotalBytes
|
|
17017
|
+
r.maxTotalBytes,
|
|
17018
|
+
"maxTotalBytes"
|
|
16880
17019
|
);
|
|
16881
17020
|
const produced = /* @__PURE__ */ new Map();
|
|
16882
17021
|
let total2 = 0;
|
|
@@ -18919,10 +19058,69 @@ function mergeComments(legacy, threaded) {
|
|
|
18919
19058
|
(a2, b) => a2.address.row - b.address.row || a2.address.col - b.address.col
|
|
18920
19059
|
);
|
|
18921
19060
|
}
|
|
18922
|
-
|
|
18923
|
-
|
|
18924
|
-
var
|
|
18925
|
-
|
|
19061
|
+
|
|
19062
|
+
// xlsx/read/limits.ts
|
|
19063
|
+
var DEFAULT_XLSX_LOAD_LIMITS = {
|
|
19064
|
+
maxInputBytes: 50 * 1024 * 1024,
|
|
19065
|
+
maxParts: 1e4,
|
|
19066
|
+
maxPartBytes: 200 * 1024 * 1024,
|
|
19067
|
+
maxTotalBytes: 300 * 1024 * 1024,
|
|
19068
|
+
maxXmlElements: 5e6
|
|
19069
|
+
};
|
|
19070
|
+
var WorkbookTooLargeError = class extends Error {
|
|
19071
|
+
code = "workbook-too-large";
|
|
19072
|
+
/** The limit that was exceeded, as named in {@link XlsxLoadLimits}. */
|
|
19073
|
+
limit;
|
|
19074
|
+
/** The value of that limit when the load failed. */
|
|
19075
|
+
maximum;
|
|
19076
|
+
constructor(message, limit2, maximum, options7) {
|
|
19077
|
+
super(message, options7);
|
|
19078
|
+
this.name = "WorkbookTooLargeError";
|
|
19079
|
+
this.limit = limit2;
|
|
19080
|
+
this.maximum = maximum;
|
|
19081
|
+
}
|
|
19082
|
+
};
|
|
19083
|
+
function resolveLoadLimits(limits = {}) {
|
|
19084
|
+
const resolved = { ...DEFAULT_XLSX_LOAD_LIMITS };
|
|
19085
|
+
for (const name of Object.keys(resolved)) {
|
|
19086
|
+
const value3 = limits[name];
|
|
19087
|
+
if (value3 === void 0) continue;
|
|
19088
|
+
if (!Number.isFinite(value3) || value3 <= 0)
|
|
19089
|
+
throw new RangeError(`limits.${name} must be a positive finite number`);
|
|
19090
|
+
resolved[name] = value3;
|
|
19091
|
+
}
|
|
19092
|
+
return resolved;
|
|
19093
|
+
}
|
|
19094
|
+
var ZIP_LIMIT_NAMES = {
|
|
19095
|
+
maxInputBytes: "maxInputBytes",
|
|
19096
|
+
maxEntries: "maxParts",
|
|
19097
|
+
maxEntryBytes: "maxPartBytes",
|
|
19098
|
+
maxTotalBytes: "maxTotalBytes"
|
|
19099
|
+
};
|
|
19100
|
+
function zipLimitsFor(limits) {
|
|
19101
|
+
return {
|
|
19102
|
+
maxInputBytes: limits.maxInputBytes,
|
|
19103
|
+
maxEntries: limits.maxParts,
|
|
19104
|
+
maxEntryBytes: limits.maxPartBytes,
|
|
19105
|
+
maxTotalBytes: limits.maxTotalBytes,
|
|
19106
|
+
label: "XLSX",
|
|
19107
|
+
createError: (message, { limit: limit2, kind }) => {
|
|
19108
|
+
const name = ZIP_LIMIT_NAMES[kind];
|
|
19109
|
+
return name ? new WorkbookTooLargeError(message, name, limit2) : new ZipLimitError(message, { limit: limit2, kind });
|
|
19110
|
+
}
|
|
19111
|
+
};
|
|
19112
|
+
}
|
|
19113
|
+
function parseDataXml(xml, label2, maxXmlElements = DEFAULT_XLSX_LOAD_LIMITS.maxXmlElements) {
|
|
19114
|
+
try {
|
|
19115
|
+
return parseXml(xml, { label: label2, limits: { maxNodes: maxXmlElements } });
|
|
19116
|
+
} catch (error) {
|
|
19117
|
+
if (error instanceof XmlLimitError && error.limit === "maxNodes")
|
|
19118
|
+
throw new WorkbookTooLargeError(error.message, "maxXmlElements", error.maximum, {
|
|
19119
|
+
cause: error
|
|
19120
|
+
});
|
|
19121
|
+
throw error;
|
|
19122
|
+
}
|
|
19123
|
+
}
|
|
18926
19124
|
var CONTENT_TYPES = {
|
|
18927
19125
|
workbook: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",
|
|
18928
19126
|
workbookMacro: "application/vnd.ms-excel.sheet.macroEnabled.main+xml",
|
|
@@ -19012,16 +19210,15 @@ var SourceIndex = class {
|
|
|
19012
19210
|
};
|
|
19013
19211
|
var mib2 = (bytes) => Math.round(bytes / 1048576);
|
|
19014
19212
|
async function readZipParts(input, limits = {}) {
|
|
19015
|
-
const
|
|
19016
|
-
const
|
|
19017
|
-
maxEntries: limits.maxParts ?? MAX_PARTS,
|
|
19018
|
-
maxEntryBytes: limits.maxPartBytes ?? MAX_PART_BYTES,
|
|
19019
|
-
maxTotalBytes: limits.maxTotalBytes ?? MAX_UNCOMPRESSED_BYTES,
|
|
19020
|
-
label: "XLSX"
|
|
19021
|
-
};
|
|
19213
|
+
const resolved = resolveLoadLimits(limits);
|
|
19214
|
+
const maxInput = resolved.maxInputBytes;
|
|
19022
19215
|
const bytes = input instanceof Uint8Array ? input : new Uint8Array(input);
|
|
19023
19216
|
if (bytes.byteLength > maxInput)
|
|
19024
|
-
throw new
|
|
19217
|
+
throw new WorkbookTooLargeError(
|
|
19218
|
+
`XLSX package exceeds the ${mib2(maxInput)} MiB compressed input limit`,
|
|
19219
|
+
"maxInputBytes",
|
|
19220
|
+
maxInput
|
|
19221
|
+
);
|
|
19025
19222
|
let loaded;
|
|
19026
19223
|
try {
|
|
19027
19224
|
loaded = await JSZip2.loadAsync(bytes);
|
|
@@ -19031,7 +19228,7 @@ async function readZipParts(input, limits = {}) {
|
|
|
19031
19228
|
{ cause: error }
|
|
19032
19229
|
);
|
|
19033
19230
|
}
|
|
19034
|
-
const zip = guardZip(loaded,
|
|
19231
|
+
const zip = guardZip(loaded, zipLimitsFor(resolved));
|
|
19035
19232
|
const parts = /* @__PURE__ */ new Map();
|
|
19036
19233
|
for (const entry3 of Object.values(zip.files)) {
|
|
19037
19234
|
if (entry3.dir) continue;
|
|
@@ -19238,9 +19435,9 @@ function parseRichString(element2, palette) {
|
|
|
19238
19435
|
const text4 = parsed.map((run2) => run2.text).join("");
|
|
19239
19436
|
return { text: text4, runs: parsed };
|
|
19240
19437
|
}
|
|
19241
|
-
function parseSharedStrings(xml, palette) {
|
|
19438
|
+
function parseSharedStrings(xml, palette, maxXmlElements) {
|
|
19242
19439
|
if (!xml) return [];
|
|
19243
|
-
const root =
|
|
19440
|
+
const root = parseDataXml(xml, "XLSX shared strings", maxXmlElements).documentElement;
|
|
19244
19441
|
return xChildren(root, "si").map((si) => parseRichString(si, palette));
|
|
19245
19442
|
}
|
|
19246
19443
|
|
|
@@ -24861,7 +25058,11 @@ function parseWorksheet(ctx, partName, name, sheetId) {
|
|
|
24861
25058
|
return sheet;
|
|
24862
25059
|
}
|
|
24863
25060
|
const split = splitSheetData(xml);
|
|
24864
|
-
const root =
|
|
25061
|
+
const root = parseDataXml(
|
|
25062
|
+
split?.xml ?? xml,
|
|
25063
|
+
"XLSX worksheet",
|
|
25064
|
+
ctx.maxXmlElements
|
|
25065
|
+
).documentElement;
|
|
24865
25066
|
const byName = /* @__PURE__ */ new Map();
|
|
24866
25067
|
const cfBlocks = [];
|
|
24867
25068
|
for (const node2 of elements(root)) {
|
|
@@ -24935,8 +25136,9 @@ function liftPrintAreas(workbook) {
|
|
|
24935
25136
|
return false;
|
|
24936
25137
|
});
|
|
24937
25138
|
}
|
|
24938
|
-
async function loadXlsx(input) {
|
|
24939
|
-
const
|
|
25139
|
+
async function loadXlsx(input, options7 = {}) {
|
|
25140
|
+
const limits = resolveLoadLimits(options7.limits);
|
|
25141
|
+
const parts = await readZipParts(input, limits);
|
|
24940
25142
|
const source2 = new SourceIndex(parts);
|
|
24941
25143
|
const workbookPart = source2.workbookPart();
|
|
24942
25144
|
if (!workbookPart) throw new Error("XLSX package has no workbook part (xl/workbook.xml)");
|
|
@@ -24957,7 +25159,8 @@ async function loadXlsx(input) {
|
|
|
24957
25159
|
source: source2,
|
|
24958
25160
|
sharedStrings: parseSharedStrings(
|
|
24959
25161
|
stringsPart ? source2.text(stringsPart) : void 0,
|
|
24960
|
-
styles.palette
|
|
25162
|
+
styles.palette,
|
|
25163
|
+
limits.maxXmlElements
|
|
24961
25164
|
),
|
|
24962
25165
|
xfMap: styles.xfMap,
|
|
24963
25166
|
date1904: book.date1904,
|
|
@@ -24965,7 +25168,8 @@ async function loadXlsx(input) {
|
|
|
24965
25168
|
dxfs: styles.dxfs,
|
|
24966
25169
|
persons: parsePersons(personsPart ? source2.text(personsPart) : void 0),
|
|
24967
25170
|
dynamicCells: parseDynamicArrayMetadata(metadataPart ? source2.text(metadataPart) : void 0),
|
|
24968
|
-
warn
|
|
25171
|
+
warn,
|
|
25172
|
+
maxXmlElements: limits.maxXmlElements
|
|
24969
25173
|
};
|
|
24970
25174
|
const rels = source2.rels(workbookPart);
|
|
24971
25175
|
const sheets = book.sheets.map((entry3) => {
|
|
@@ -29277,10 +29481,8 @@ function sheetFormatXml(sheet) {
|
|
|
29277
29481
|
const current = { defaultRowHeight: sheet.defaultRowHeight };
|
|
29278
29482
|
if (sheet.defaultColWidth !== void 0) current.defaultColWidth = sheet.defaultColWidth;
|
|
29279
29483
|
if (sheet.format && Object.keys(sheet.format).length) current.format = sheet.format;
|
|
29280
|
-
|
|
29281
|
-
|
|
29282
|
-
...[...sheet.rowInfo.values()].map((info) => info.outlineLevel ?? 0)
|
|
29283
|
-
);
|
|
29484
|
+
let rowLevel = 0;
|
|
29485
|
+
for (const info of sheet.rowInfo.values()) rowLevel = Math.max(rowLevel, info.outlineLevel ?? 0);
|
|
29284
29486
|
const colLevel = Math.max(0, ...sheet.columns.map((col) => col.outlineLevel ?? 0));
|
|
29285
29487
|
if (source2 && sameModel(readSheetFormat(source2), current) && Number(source2.getAttribute("outlineLevelRow") ?? 0) === rowLevel && Number(source2.getAttribute("outlineLevelCol") ?? 0) === colLevel)
|
|
29286
29488
|
return snapshotXml(sheet, "sheetFormatPr") ?? "";
|
|
@@ -29582,11 +29784,10 @@ function pivotCacheDefinitionXml(pivot, workbook, data, recordRel) {
|
|
|
29582
29784
|
const items = data.items[index3];
|
|
29583
29785
|
if (pivot.dateFields?.includes(name) && items.every((v) => typeof v === "number")) {
|
|
29584
29786
|
const serials = items;
|
|
29585
|
-
const
|
|
29586
|
-
const maxDate = Number.isInteger(latest) ? latest + 1 : latest;
|
|
29787
|
+
const range2 = dateGroupRange({}, serials);
|
|
29587
29788
|
const parent = derived.filter((entry3) => entry3.group.field === name).at(-1);
|
|
29588
29789
|
const link = parent ? `<fieldGroup par="${parent.index}"/>` : "";
|
|
29589
|
-
return `<cacheField${attrs({ name: encodeEscapes(name), numFmtId: 14 })}><sharedItems${attrs({ containsSemiMixedTypes: false, containsNonDate: false, containsDate: true, containsString: false, minDate: iso(
|
|
29790
|
+
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>`;
|
|
29590
29791
|
}
|
|
29591
29792
|
const types = new Set(
|
|
29592
29793
|
items.map((value3) => value3 === null || value3 === "" ? "blank" : typeof value3)
|
|
@@ -31001,7 +31202,8 @@ function setCellValue(ctx, s, row2, col, value3) {
|
|
|
31001
31202
|
}
|
|
31002
31203
|
function setRangeValues(ctx, s, at, values2) {
|
|
31003
31204
|
const sheet = sheetAt(ctx.workbook, s);
|
|
31004
|
-
|
|
31205
|
+
let width = 0;
|
|
31206
|
+
for (const row2 of values2) width = Math.max(width, row2.length);
|
|
31005
31207
|
if (!values2.length || !width) return;
|
|
31006
31208
|
const range2 = cellRange(at.row, at.col, at.row + values2.length - 1, at.col + width - 1);
|
|
31007
31209
|
ctx.run(
|
|
@@ -32325,23 +32527,33 @@ function toHtml(cells, theme2) {
|
|
|
32325
32527
|
for (let c2 = m.start.col; c2 <= m.end.col; c2++)
|
|
32326
32528
|
if (r !== m.start.row || c2 !== m.start.col) covered.add(`${r},${c2}`);
|
|
32327
32529
|
}
|
|
32530
|
+
const styleAttrs = /* @__PURE__ */ new Map();
|
|
32531
|
+
const styleAttr2 = (style3) => {
|
|
32532
|
+
let attr2 = styleAttrs.get(style3);
|
|
32533
|
+
if (attr2 === void 0) {
|
|
32534
|
+
const css = cssFor(style3, theme2);
|
|
32535
|
+
styleAttrs.set(style3, attr2 = css ? `style="${escapeHtml(css)}"` : "");
|
|
32536
|
+
}
|
|
32537
|
+
return attr2;
|
|
32538
|
+
};
|
|
32328
32539
|
const rows2 = [];
|
|
32329
32540
|
for (let r = 0; r < cells.rows; r++) {
|
|
32330
32541
|
const tds = [];
|
|
32331
32542
|
for (let c2 = 0; c2 < cells.cols; c2++) {
|
|
32332
|
-
|
|
32543
|
+
const key = covered.size || spans3.size || links.size ? `${r},${c2}` : "";
|
|
32544
|
+
if (covered.has(key)) continue;
|
|
32333
32545
|
const cell = cells.data[r]?.[c2] ?? null;
|
|
32334
32546
|
const attrs2 = [];
|
|
32335
|
-
const span4 = spans3.get(
|
|
32547
|
+
const span4 = spans3.get(key);
|
|
32336
32548
|
if (span4 && span4.end.row > span4.start.row)
|
|
32337
32549
|
attrs2.push(`rowspan="${span4.end.row - span4.start.row + 1}"`);
|
|
32338
32550
|
if (span4 && span4.end.col > span4.start.col)
|
|
32339
32551
|
attrs2.push(`colspan="${span4.end.col - span4.start.col + 1}"`);
|
|
32340
32552
|
if (cell && typeof cell.value === "number") attrs2.push(`x:num="${cell.value}"`);
|
|
32341
|
-
const css =
|
|
32342
|
-
if (css) attrs2.push(
|
|
32553
|
+
const css = styleAttr2(cell?.style);
|
|
32554
|
+
if (css) attrs2.push(css);
|
|
32343
32555
|
let text4 = escapeHtml(cell?.text ?? "").replace(/\n/g, "<br>");
|
|
32344
|
-
const link = links.get(
|
|
32556
|
+
const link = links.get(key);
|
|
32345
32557
|
const href = htmlHref(link);
|
|
32346
32558
|
if (href)
|
|
32347
32559
|
text4 = `<a href="${escapeHtml(href)}"${link?.tooltip ? ` title="${escapeHtml(link.tooltip)}"` : ""}>${text4}</a>`;
|
|
@@ -32649,7 +32861,8 @@ function parseTsv(text4) {
|
|
|
32649
32861
|
}
|
|
32650
32862
|
row2.push(field);
|
|
32651
32863
|
rows2.push(row2);
|
|
32652
|
-
|
|
32864
|
+
let width = 0;
|
|
32865
|
+
for (const r of rows2) width = Math.max(width, r.length);
|
|
32653
32866
|
for (const r of rows2) while (r.length < width) r.push("");
|
|
32654
32867
|
return rows2;
|
|
32655
32868
|
}
|
|
@@ -32904,10 +33117,16 @@ function copyRange(workbook, s, range2) {
|
|
|
32904
33117
|
{ length: rows2 },
|
|
32905
33118
|
() => Array.from({ length: cols }, () => null)
|
|
32906
33119
|
);
|
|
33120
|
+
const styles = /* @__PURE__ */ new Map();
|
|
33121
|
+
const styleCopy = (id) => {
|
|
33122
|
+
let style3 = styles.get(id ?? 0);
|
|
33123
|
+
if (!style3) styles.set(id ?? 0, style3 = structuredClone(styleAt(workbook, id)));
|
|
33124
|
+
return style3;
|
|
33125
|
+
};
|
|
32907
33126
|
forEachCellInRange(sheet, clipped, (cell, row2, col) => {
|
|
32908
33127
|
const clip = {
|
|
32909
33128
|
value: cell.value,
|
|
32910
|
-
style:
|
|
33129
|
+
style: styleCopy(cell.styleId),
|
|
32911
33130
|
text: displayText(workbook, cell)
|
|
32912
33131
|
};
|
|
32913
33132
|
if (cell.formula !== void 0) clip.formula = cell.formula;
|
|
@@ -33846,6 +34065,17 @@ function shiftEdgeCells(sheet, spec2, phase) {
|
|
|
33846
34065
|
return out;
|
|
33847
34066
|
}
|
|
33848
34067
|
|
|
34068
|
+
// xlsx/edit/clone-cell.ts
|
|
34069
|
+
function cloneCell(cell) {
|
|
34070
|
+
const copy2 = { ...cell };
|
|
34071
|
+
const fields = copy2;
|
|
34072
|
+
for (const key of Object.keys(fields)) {
|
|
34073
|
+
const value3 = fields[key];
|
|
34074
|
+
if (typeof value3 === "object" && value3 !== null) fields[key] = structuredClone(value3);
|
|
34075
|
+
}
|
|
34076
|
+
return copy2;
|
|
34077
|
+
}
|
|
34078
|
+
|
|
33849
34079
|
// xlsx/edit/history-rows.ts
|
|
33850
34080
|
function captureRowInfo(sheet, rows2) {
|
|
33851
34081
|
return [...new Set(rows2)].map((row2) => {
|
|
@@ -33886,12 +34116,14 @@ function restoreSettings(workbook, settings) {
|
|
|
33886
34116
|
var PROBE_LIMIT = 4096;
|
|
33887
34117
|
function captureCells(sheet, ranges) {
|
|
33888
34118
|
const cells = [];
|
|
33889
|
-
const seen = /* @__PURE__ */ new Set();
|
|
34119
|
+
const seen = ranges.length > 1 ? /* @__PURE__ */ new Set() : void 0;
|
|
33890
34120
|
const take2 = (cell, row2, col) => {
|
|
33891
|
-
|
|
33892
|
-
|
|
33893
|
-
|
|
33894
|
-
|
|
34121
|
+
if (seen) {
|
|
34122
|
+
const key = cellKey(row2, col);
|
|
34123
|
+
if (seen.has(key)) return;
|
|
34124
|
+
seen.add(key);
|
|
34125
|
+
}
|
|
34126
|
+
cells.push([row2, col, cloneCell(cell)]);
|
|
33895
34127
|
};
|
|
33896
34128
|
for (const raw2 of ranges) {
|
|
33897
34129
|
const range2 = normalizeRange(raw2);
|
|
@@ -33968,7 +34200,7 @@ function restoreShift(workbook, snapshot) {
|
|
|
33968
34200
|
if (!sheet) return;
|
|
33969
34201
|
const shift2 = snapshot.phase === "before" ? { ...spec2.shift, count: -spec2.shift.count } : spec2.shift;
|
|
33970
34202
|
moveCellsRaw(sheet, shift2, spec2.band);
|
|
33971
|
-
for (const [row2, col, cell] of snapshot.cells) putCell(sheet, row2, col,
|
|
34203
|
+
for (const [row2, col, cell] of snapshot.cells) putCell(sheet, row2, col, cloneCell(cell));
|
|
33972
34204
|
restoreRefs(workbook, snapshot.data);
|
|
33973
34205
|
workbook.activeSheet = snapshot.activeSheet;
|
|
33974
34206
|
}
|
|
@@ -34017,18 +34249,51 @@ function restoreSnapshot(workbook, snapshot) {
|
|
|
34017
34249
|
forEachCellInRange(sheet, range2, (_cell, row2, col) => doomed.push([row2, col]));
|
|
34018
34250
|
for (const [row2, col] of doomed) deleteCell(sheet, row2, col);
|
|
34019
34251
|
}
|
|
34020
|
-
for (const [row2, col, cell] of snapshot.cells) putCell(sheet, row2, col,
|
|
34252
|
+
for (const [row2, col, cell] of snapshot.cells) putCell(sheet, row2, col, cloneCell(cell));
|
|
34253
|
+
}
|
|
34254
|
+
function rowMajor(cells) {
|
|
34255
|
+
for (let i2 = 1; i2 < cells.length; i2++) {
|
|
34256
|
+
const [row0, col0] = cells[i2 - 1];
|
|
34257
|
+
const [row1, col1] = cells[i2];
|
|
34258
|
+
if (row1 < row0 || row1 === row0 && col1 <= col0) return false;
|
|
34259
|
+
}
|
|
34260
|
+
return true;
|
|
34021
34261
|
}
|
|
34022
34262
|
function touchedCells(step) {
|
|
34023
34263
|
const out = [];
|
|
34024
|
-
const
|
|
34264
|
+
const lists = step.entries.flatMap((entry3) => [entry3.before, entry3.after]).filter((snapshot) => snapshot.kind === "cells" && snapshot.cells.length > 0);
|
|
34265
|
+
const [first2, second, ...rest] = lists;
|
|
34266
|
+
if (first2 && !rest.length && (!second || second.sheet === first2.sheet)) {
|
|
34267
|
+
const sheet = first2.sheet;
|
|
34268
|
+
for (const [row2, col] of first2.cells) out.push({ sheet, row: row2, col });
|
|
34269
|
+
if (!second) return out;
|
|
34270
|
+
if (rowMajor(first2.cells) && rowMajor(second.cells)) {
|
|
34271
|
+
let i2 = 0;
|
|
34272
|
+
for (const [row2, col] of second.cells) {
|
|
34273
|
+
const key = cellKey(row2, col);
|
|
34274
|
+
while (i2 < first2.cells.length) {
|
|
34275
|
+
const [r, c2] = first2.cells[i2];
|
|
34276
|
+
if (cellKey(r, c2) >= key) break;
|
|
34277
|
+
i2++;
|
|
34278
|
+
}
|
|
34279
|
+
const at = first2.cells[i2];
|
|
34280
|
+
if (at && cellKey(at[0], at[1]) === key) continue;
|
|
34281
|
+
out.push({ sheet, row: row2, col });
|
|
34282
|
+
}
|
|
34283
|
+
return out;
|
|
34284
|
+
}
|
|
34285
|
+
out.length = 0;
|
|
34286
|
+
}
|
|
34287
|
+
const seen = /* @__PURE__ */ new Map();
|
|
34025
34288
|
for (const entry3 of step.entries)
|
|
34026
34289
|
for (const snapshot of [entry3.before, entry3.after]) {
|
|
34027
34290
|
if (snapshot.kind !== "cells") continue;
|
|
34291
|
+
let keys = seen.get(snapshot.sheet);
|
|
34292
|
+
if (!keys) seen.set(snapshot.sheet, keys = /* @__PURE__ */ new Set());
|
|
34028
34293
|
for (const [row2, col] of snapshot.cells) {
|
|
34029
|
-
const key =
|
|
34030
|
-
if (
|
|
34031
|
-
|
|
34294
|
+
const key = cellKey(row2, col);
|
|
34295
|
+
if (keys.has(key)) continue;
|
|
34296
|
+
keys.add(key);
|
|
34032
34297
|
out.push({ sheet: snapshot.sheet, row: row2, col });
|
|
34033
34298
|
}
|
|
34034
34299
|
}
|
|
@@ -34125,7 +34390,7 @@ var SessionCalculator = class {
|
|
|
34125
34390
|
}
|
|
34126
34391
|
this.calc.discardPreparation();
|
|
34127
34392
|
if (structural) this.staleGraph = true;
|
|
34128
|
-
else this.dirty.push(
|
|
34393
|
+
else for (const cell of touchedCells(step)) this.dirty.push(cell);
|
|
34129
34394
|
return;
|
|
34130
34395
|
}
|
|
34131
34396
|
if (hint && !this.staleGraph) {
|
|
@@ -34144,7 +34409,7 @@ var SessionCalculator = class {
|
|
|
34144
34409
|
this.calc.discardPreparation();
|
|
34145
34410
|
if (!this.enabled) return;
|
|
34146
34411
|
if (structural) this.staleGraph = true;
|
|
34147
|
-
else this.dirty.push(
|
|
34412
|
+
else for (const cell of cells) this.dirty.push(cell);
|
|
34148
34413
|
return;
|
|
34149
34414
|
}
|
|
34150
34415
|
this.recalc(structural, () => cells);
|
|
@@ -35206,8 +35471,16 @@ function insertTimeline(ctx, s, ref) {
|
|
|
35206
35471
|
const pivot = sheet.pivotTables?.find((entry3) => entry3.name === ref.pivot);
|
|
35207
35472
|
if (!pivot || !pivot.dateFields?.includes(ref.field))
|
|
35208
35473
|
throw new Error("Choose a PivotTable with a date field.");
|
|
35209
|
-
const
|
|
35210
|
-
|
|
35474
|
+
const column2 = pivot.fields.indexOf(ref.field);
|
|
35475
|
+
let earliest = Infinity;
|
|
35476
|
+
let latest = -Infinity;
|
|
35477
|
+
for (const record of pivot.records) {
|
|
35478
|
+
const value3 = record[column2];
|
|
35479
|
+
if (typeof value3 !== "number") continue;
|
|
35480
|
+
earliest = Math.min(earliest, value3);
|
|
35481
|
+
latest = Math.max(latest, value3);
|
|
35482
|
+
}
|
|
35483
|
+
if (earliest > latest) throw new Error("Choose a PivotTable with a date field.");
|
|
35211
35484
|
const taken = /* @__PURE__ */ new Set([
|
|
35212
35485
|
...(workbook.slicers?.slicers ?? []).map((entry3) => entry3.name.toLowerCase()),
|
|
35213
35486
|
...(workbook.slicers?.timelines ?? []).map((entry3) => entry3.name.toLowerCase()),
|
|
@@ -35225,8 +35498,8 @@ function insertTimeline(ctx, s, ref) {
|
|
|
35225
35498
|
"_"
|
|
35226
35499
|
);
|
|
35227
35500
|
const bounds = boundsOfSerialRange(
|
|
35228
|
-
serialToIso(
|
|
35229
|
-
serialToIso(
|
|
35501
|
+
serialToIso(earliest, workbook.date1904),
|
|
35502
|
+
serialToIso(latest, workbook.date1904)
|
|
35230
35503
|
);
|
|
35231
35504
|
const metrics = createGridMetrics(sheet, { zoom: 100 });
|
|
35232
35505
|
let right2 = 0;
|
|
@@ -38640,6 +38913,15 @@ function mergeFont(base, font) {
|
|
|
38640
38913
|
if (value3 !== void 0) out[key] = value3;
|
|
38641
38914
|
return out;
|
|
38642
38915
|
}
|
|
38916
|
+
function cellFont(font, defaultFont) {
|
|
38917
|
+
const out = { ...font };
|
|
38918
|
+
if (!out.name && !out.scheme) {
|
|
38919
|
+
if (defaultFont.name) out.name = defaultFont.name;
|
|
38920
|
+
if (defaultFont.scheme) out.scheme = defaultFont.scheme;
|
|
38921
|
+
}
|
|
38922
|
+
if (!out.size && defaultFont.size) out.size = defaultFont.size;
|
|
38923
|
+
return out;
|
|
38924
|
+
}
|
|
38643
38925
|
function fontView(font, theme2) {
|
|
38644
38926
|
const family = font.scheme === "major" ? theme2.majorFont || font.name || "Calibri Light" : font.scheme === "minor" ? theme2.minorFont || font.name || "Calibri" : font.name || theme2.minorFont || "Calibri";
|
|
38645
38927
|
const view = {
|
|
@@ -38764,14 +39046,7 @@ function cellView(workbook, sheetIndex2, row2, col, cf, options7 = {}) {
|
|
|
38764
39046
|
const style3 = styleAt(workbook, effectiveStyleId(sheet, row2, col));
|
|
38765
39047
|
const conditional = cf?.at(row2, col);
|
|
38766
39048
|
const dxf = conditional?.style;
|
|
38767
|
-
const
|
|
38768
|
-
const base = { ...style3.font };
|
|
38769
|
-
if (!base.name && !base.scheme) {
|
|
38770
|
-
if (defaultFont.name) base.name = defaultFont.name;
|
|
38771
|
-
if (defaultFont.scheme) base.scheme = defaultFont.scheme;
|
|
38772
|
-
}
|
|
38773
|
-
if (!base.size && defaultFont.size) base.size = defaultFont.size;
|
|
38774
|
-
const font = mergeFont(base, dxf?.font);
|
|
39049
|
+
const font = mergeFont(cellFont(style3.font, workbook.styles[0]?.font ?? {}), dxf?.font);
|
|
38775
39050
|
const formulaText = sheet.view.showFormulas && cell?.formula !== void 0 ? `=${cell.formula}` : void 0;
|
|
38776
39051
|
const shown = formulaText !== void 0 ? { text: formulaText } : displayText2(value3, style3, dxf?.numFmt ?? style3.numFmt, workbook, sheet);
|
|
38777
39052
|
const fontViewResolved = fontView(font, workbook.theme);
|
|
@@ -40368,14 +40643,24 @@ function formatAxisValue(value3, percent = false) {
|
|
|
40368
40643
|
return `${v < 0 ? "-" : ""}${grouped}${frac ? `.${frac}` : ""}`;
|
|
40369
40644
|
}
|
|
40370
40645
|
|
|
40646
|
+
// chart/extent.ts
|
|
40647
|
+
function extentOf(values2) {
|
|
40648
|
+
let min = Infinity;
|
|
40649
|
+
let max = -Infinity;
|
|
40650
|
+
for (const value3 of values2) {
|
|
40651
|
+
min = Math.min(min, value3);
|
|
40652
|
+
max = Math.max(max, value3);
|
|
40653
|
+
}
|
|
40654
|
+
return { min, max };
|
|
40655
|
+
}
|
|
40656
|
+
|
|
40371
40657
|
// chart/axis-range.ts
|
|
40372
40658
|
function computeLogValueRange(series, logBase) {
|
|
40373
40659
|
const allValues = series.flatMap((item) => item.values).filter((value3) => value3 !== null && Number.isFinite(value3) && value3 > 0);
|
|
40374
40660
|
if (allValues.length === 0) {
|
|
40375
40661
|
return { min: 1, max: logBase, span: 1, logScale: true, logBase };
|
|
40376
40662
|
}
|
|
40377
|
-
const dataMin =
|
|
40378
|
-
const dataMax = Math.max(...allValues);
|
|
40663
|
+
const { min: dataMin, max: dataMax } = extentOf(allValues);
|
|
40379
40664
|
const logMin = Math.floor(Math.log(dataMin) / Math.log(logBase));
|
|
40380
40665
|
const logMax = Math.ceil(Math.log(dataMax) / Math.log(logBase));
|
|
40381
40666
|
const min = logBase ** logMin;
|
|
@@ -41402,8 +41687,7 @@ function computeHistogramBins(values2, options7, format = String) {
|
|
|
41402
41687
|
});
|
|
41403
41688
|
}
|
|
41404
41689
|
if (regular.length > 0) {
|
|
41405
|
-
const min =
|
|
41406
|
-
const max = Math.max(...regular.map((item) => item.value));
|
|
41690
|
+
const { min, max } = extentOf(regular.map((item) => item.value));
|
|
41407
41691
|
const requestedSize = options7.binSize && options7.binSize > 0 ? options7.binSize : void 0;
|
|
41408
41692
|
const requestedCount = options7.binCount && options7.binCount > 0 ? options7.binCount : void 0;
|
|
41409
41693
|
const start = requestedSize ? Math.floor(min / requestedSize) * requestedSize : min;
|
|
@@ -41531,8 +41815,9 @@ function waterfallView(chart, model, ctx) {
|
|
|
41531
41815
|
colors: { increase: role(0), decrease: role(1), total: role(2) }
|
|
41532
41816
|
};
|
|
41533
41817
|
const ends = steps.flatMap((step) => [step.startValue, step.endValue]);
|
|
41818
|
+
const range2 = extentOf(ends);
|
|
41534
41819
|
model.valueAxis = {
|
|
41535
|
-
...ends.length ? niceScale(
|
|
41820
|
+
...ends.length ? niceScale(range2.min, range2.max) : niceScale(0, 1),
|
|
41536
41821
|
percent: false
|
|
41537
41822
|
};
|
|
41538
41823
|
const labels = model.categories;
|
|
@@ -41648,7 +41933,8 @@ function chartSummaryView(chart, theme2, options7 = {}) {
|
|
|
41648
41933
|
s.xValues = s.values.map((_, k) => numeric2 ? toNumber2(cats[k] ?? null) : k + 1);
|
|
41649
41934
|
});
|
|
41650
41935
|
const xs = series.flatMap((s) => s.xValues ?? []).filter((x) => x !== null);
|
|
41651
|
-
|
|
41936
|
+
const range2 = extentOf(xs);
|
|
41937
|
+
model.xAxis = xs.length ? niceScale(range2.min, range2.max) : niceScale(0, 1);
|
|
41652
41938
|
}
|
|
41653
41939
|
if (type === "stock") model.stock = stockView(chart.stock, ctx);
|
|
41654
41940
|
if (type === "bubble") bubbleView(chart, model, ctx.evaluateRef);
|
|
@@ -41925,8 +42211,9 @@ function fitChartTrendline(options7, xVals, yVals) {
|
|
|
41925
42211
|
}
|
|
41926
42212
|
const model = fitModel(options7, xVals, yVals);
|
|
41927
42213
|
if (!model) return noFit();
|
|
41928
|
-
const
|
|
41929
|
-
const
|
|
42214
|
+
const xRange = extentOf(xVals);
|
|
42215
|
+
const startX = xRange.min - (options7.backward ?? 0);
|
|
42216
|
+
const endX = xRange.max + (options7.forward ?? 0);
|
|
41930
42217
|
const steps = Math.max(Math.ceil((endX - startX) * 4), 20);
|
|
41931
42218
|
const points = [];
|
|
41932
42219
|
for (let step = 0; step <= steps; step++) {
|
|
@@ -42495,7 +42782,7 @@ function cartesianAxes(model, area, out) {
|
|
|
42495
42782
|
const cats = Math.max(1, model.categories.length);
|
|
42496
42783
|
const catW = Math.min(
|
|
42497
42784
|
area.w * 0.3,
|
|
42498
|
-
Math.max(
|
|
42785
|
+
Math.max(extentOf(model.categories.map((c2) => textWidth(c2, categorySize))).max, 8) + 6
|
|
42499
42786
|
);
|
|
42500
42787
|
const second = horizontal2 ? void 0 : model.secondaryAxis;
|
|
42501
42788
|
const secondLabels = second?.ticks.map((t) => axisTickText(t, model.axes?.secondary, second.percent)) ?? [];
|
|
@@ -42684,7 +42971,7 @@ function computeBubbleRadius(sizeVal, maxBubble, medianRadius, options7) {
|
|
|
42684
42971
|
return medianRadius * scale2 * 0.5 + ratio * medianRadius * scale2 * 1.5;
|
|
42685
42972
|
}
|
|
42686
42973
|
function maxBubbleSize(sizes) {
|
|
42687
|
-
return
|
|
42974
|
+
return Math.max(1, extentOf(sizes.map(Math.abs)).max);
|
|
42688
42975
|
}
|
|
42689
42976
|
function medianBubbleRadius(plotWidth, plotHeight) {
|
|
42690
42977
|
return Math.min(plotWidth, plotHeight) * 0.04;
|
|
@@ -43297,13 +43584,11 @@ function chartLegendSvg(model, area, frame, options7) {
|
|
|
43297
43584
|
chartAreaRect(model, "legend", { x: manual.x, y: manual.y, w: manual.width, h: manual.height })
|
|
43298
43585
|
];
|
|
43299
43586
|
const baselineOffset = font ? (font.ascent - font.descent) / 2 : size * 0.35;
|
|
43587
|
+
const widest = extentOf(widths).max;
|
|
43300
43588
|
entries.forEach((entry3, i2) => {
|
|
43301
43589
|
const available = horizontal2 ? chartTextWidth(entry3.label, attrs2, options7) : Math.max(0, rowWidth - size / 2 - keySize - keyGap);
|
|
43302
43590
|
const label2 = fitChartText(entry3.label, available, attrs2, options7);
|
|
43303
|
-
const contentWidth = Math.min(
|
|
43304
|
-
horizontal2 ? widths[i2] ?? 0 : Math.max(...widths),
|
|
43305
|
-
rowWidth - size / 2
|
|
43306
|
-
);
|
|
43591
|
+
const contentWidth = Math.min(horizontal2 ? widths[i2] ?? 0 : widest, rowWidth - size / 2);
|
|
43307
43592
|
const x = horizontal2 ? horizontalX : manual.x + Math.max(size / 4, (rowWidth - contentWidth) / 2);
|
|
43308
43593
|
const centerY = manual.y + (horizontal2 ? 0 : i2 * rowHeight) + rowHeight / 2;
|
|
43309
43594
|
markup.push(rect(x, centerY - keySize / 2, keySize, keySize, entry3.color));
|
|
@@ -43375,7 +43660,7 @@ function automaticLegend(model, area, out, options7, bounds) {
|
|
|
43375
43660
|
}
|
|
43376
43661
|
const width = Math.min(
|
|
43377
43662
|
area.w * 0.35,
|
|
43378
|
-
|
|
43663
|
+
extentOf(entries.map((e) => chartTextWidth(e.label, attrs2, options7))).max + 22
|
|
43379
43664
|
);
|
|
43380
43665
|
const height = entries.length * rowH;
|
|
43381
43666
|
const x = pos === "l" ? area.x + 4 : area.x + area.w - width;
|
|
@@ -49900,6 +50185,7 @@ __export(shell_exports, {
|
|
|
49900
50185
|
shell: () => shell
|
|
49901
50186
|
});
|
|
49902
50187
|
var shell = {
|
|
50188
|
+
"The current cell edit failed validation.": "Die aktuelle Zellbearbeitung hat die \xDCberpr\xFCfung nicht bestanden.",
|
|
49903
50189
|
"Finish or cancel the current cell edit before saving.": "Beenden oder verwerfen Sie die aktuelle Zellbearbeitung vor dem Speichern.",
|
|
49904
50190
|
File: "Datei",
|
|
49905
50191
|
Ribbon: "Men\xFCband",
|
|
@@ -50304,6 +50590,7 @@ __export(shell_exports2, {
|
|
|
50304
50590
|
shell: () => shell2
|
|
50305
50591
|
});
|
|
50306
50592
|
var shell2 = {
|
|
50593
|
+
"The current cell edit failed validation.": "The current cell edit failed validation.",
|
|
50307
50594
|
"Finish or cancel the current cell edit before saving.": "Finish or cancel the current cell edit before saving.",
|
|
50308
50595
|
File: "File",
|
|
50309
50596
|
Ribbon: "Ribbon",
|
|
@@ -50708,6 +50995,7 @@ __export(shell_exports3, {
|
|
|
50708
50995
|
shell: () => shell3
|
|
50709
50996
|
});
|
|
50710
50997
|
var shell3 = {
|
|
50998
|
+
"The current cell edit failed validation.": "La edici\xF3n de la celda actual no super\xF3 la validaci\xF3n.",
|
|
50711
50999
|
"Finish or cancel the current cell edit before saving.": "Finalice o cancele la edici\xF3n de la celda actual antes de guardar.",
|
|
50712
51000
|
File: "Archivo",
|
|
50713
51001
|
Ribbon: "Cinta de opciones",
|
|
@@ -51112,6 +51400,7 @@ __export(shell_exports4, {
|
|
|
51112
51400
|
shell: () => shell4
|
|
51113
51401
|
});
|
|
51114
51402
|
var shell4 = {
|
|
51403
|
+
"The current cell edit failed validation.": "La modification de la cellule en cours a \xE9chou\xE9 \xE0 la validation.",
|
|
51115
51404
|
"Finish or cancel the current cell edit before saving.": "Terminez ou annulez la modification de la cellule avant de sauvegarder.",
|
|
51116
51405
|
File: "Fichier",
|
|
51117
51406
|
Ribbon: "Ruban",
|
|
@@ -51516,6 +51805,7 @@ __export(shell_exports5, {
|
|
|
51516
51805
|
shell: () => shell5
|
|
51517
51806
|
});
|
|
51518
51807
|
var shell5 = {
|
|
51808
|
+
"The current cell edit failed validation.": "\u5F53\u524D\u5355\u5143\u683C\u7684\u7F16\u8F91\u672A\u901A\u8FC7\u9A8C\u8BC1\u3002",
|
|
51519
51809
|
"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",
|
|
51520
51810
|
File: "\u6587\u4EF6",
|
|
51521
51811
|
Ribbon: "\u529F\u80FD\u533A",
|