@rowsncolumns/toolkit 24.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +100 -0
- package/Readme.md +27 -0
- package/dist/cjs/autofilter-condition.d.ts +43 -0
- package/dist/cjs/autofilter-condition.d.ts.map +1 -0
- package/dist/cjs/autofilter-condition.js +155 -0
- package/dist/cjs/csv-export.d.ts +49 -0
- package/dist/cjs/csv-export.d.ts.map +1 -0
- package/dist/cjs/csv-export.js +142 -0
- package/dist/cjs/csv-import-worker.d.ts +16 -0
- package/dist/cjs/csv-import-worker.d.ts.map +1 -0
- package/dist/cjs/csv-import-worker.js +60 -0
- package/dist/cjs/csv-import.d.ts +38 -0
- package/dist/cjs/csv-import.d.ts.map +1 -0
- package/dist/cjs/csv-import.js +166 -0
- package/dist/cjs/csv-parser/helpers.d.ts +14 -0
- package/dist/cjs/csv-parser/helpers.d.ts.map +1 -0
- package/dist/cjs/csv-parser/helpers.js +145 -0
- package/dist/cjs/csv-parser/types.d.ts +66 -0
- package/dist/cjs/csv-parser/types.d.ts.map +1 -0
- package/dist/cjs/csv-parser/types.js +14 -0
- package/dist/cjs/csv-parser/worker.d.ts +2 -0
- package/dist/cjs/csv-parser/worker.d.ts.map +1 -0
- package/dist/cjs/csv-parser/worker.js +200 -0
- package/dist/cjs/excel-export.d.ts +11 -0
- package/dist/cjs/excel-export.d.ts.map +1 -0
- package/dist/cjs/excel-export.js +22 -0
- package/dist/cjs/excel-import-session.d.ts +51 -0
- package/dist/cjs/excel-import-session.d.ts.map +1 -0
- package/dist/cjs/excel-import-session.js +307 -0
- package/dist/cjs/excel-import-worker.d.ts +7 -0
- package/dist/cjs/excel-import-worker.d.ts.map +1 -0
- package/dist/cjs/excel-import-worker.js +119 -0
- package/dist/cjs/excel-parser/builtin-numfmts.d.ts +24 -0
- package/dist/cjs/excel-parser/builtin-numfmts.d.ts.map +1 -0
- package/dist/cjs/excel-parser/builtin-numfmts.js +63 -0
- package/dist/cjs/excel-parser/cfb-decryptor.d.ts +53 -0
- package/dist/cjs/excel-parser/cfb-decryptor.d.ts.map +1 -0
- package/dist/cjs/excel-parser/cfb-decryptor.js +553 -0
- package/dist/cjs/excel-parser/cfb-encryptor.d.ts +23 -0
- package/dist/cjs/excel-parser/cfb-encryptor.d.ts.map +1 -0
- package/dist/cjs/excel-parser/cfb-encryptor.js +200 -0
- package/dist/cjs/excel-parser/dv-cell-stamp.d.ts +29 -0
- package/dist/cjs/excel-parser/dv-cell-stamp.d.ts.map +1 -0
- package/dist/cjs/excel-parser/dv-cell-stamp.js +239 -0
- package/dist/cjs/excel-parser/helpers.d.ts +28 -0
- package/dist/cjs/excel-parser/helpers.d.ts.map +1 -0
- package/dist/cjs/excel-parser/helpers.js +188 -0
- package/dist/cjs/excel-parser/interface.d.ts +179 -0
- package/dist/cjs/excel-parser/interface.d.ts.map +1 -0
- package/dist/cjs/excel-parser/interface.js +1 -0
- package/dist/cjs/excel-parser/plugins/base/index.d.ts +31 -0
- package/dist/cjs/excel-parser/plugins/base/index.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/base/index.js +101 -0
- package/dist/cjs/excel-parser/plugins/ods/conditional-formatting.d.ts +16 -0
- package/dist/cjs/excel-parser/plugins/ods/conditional-formatting.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/ods/conditional-formatting.js +488 -0
- package/dist/cjs/excel-parser/plugins/ods/data-validations.d.ts +15 -0
- package/dist/cjs/excel-parser/plugins/ods/data-validations.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/ods/data-validations.js +353 -0
- package/dist/cjs/excel-parser/plugins/ods/formula.d.ts +8 -0
- package/dist/cjs/excel-parser/plugins/ods/formula.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/ods/formula.js +82 -0
- package/dist/cjs/excel-parser/plugins/ods/index.d.ts +122 -0
- package/dist/cjs/excel-parser/plugins/ods/index.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/ods/index.js +3642 -0
- package/dist/cjs/excel-parser/plugins/ods/sparklines.d.ts +25 -0
- package/dist/cjs/excel-parser/plugins/ods/sparklines.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/ods/sparklines.js +221 -0
- package/dist/cjs/excel-parser/plugins/ods/styles.d.ts +60 -0
- package/dist/cjs/excel-parser/plugins/ods/styles.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/ods/styles.js +808 -0
- package/dist/cjs/excel-parser/plugins/ods/types.d.ts +7 -0
- package/dist/cjs/excel-parser/plugins/ods/types.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/ods/types.js +1 -0
- package/dist/cjs/excel-parser/plugins/xls/index.d.ts +5 -0
- package/dist/cjs/excel-parser/plugins/xls/index.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xls/index.js +19 -0
- package/dist/cjs/excel-parser/plugins/xlsb/biff-record-reader.d.ts +13 -0
- package/dist/cjs/excel-parser/plugins/xlsb/biff-record-reader.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsb/biff-record-reader.js +49 -0
- package/dist/cjs/excel-parser/plugins/xlsb/index.d.ts +117 -0
- package/dist/cjs/excel-parser/plugins/xlsb/index.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsb/index.js +2972 -0
- package/dist/cjs/excel-parser/plugins/xlsb/rgce-parser.d.ts +18 -0
- package/dist/cjs/excel-parser/plugins/xlsb/rgce-parser.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsb/rgce-parser.js +527 -0
- package/dist/cjs/excel-parser/plugins/xlsm/index.d.ts +5 -0
- package/dist/cjs/excel-parser/plugins/xlsm/index.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsm/index.js +10 -0
- package/dist/cjs/excel-parser/plugins/xlsx/charts.d.ts +60 -0
- package/dist/cjs/excel-parser/plugins/xlsx/charts.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/charts.js +2178 -0
- package/dist/cjs/excel-parser/plugins/xlsx/conditional-formatting.d.ts +18 -0
- package/dist/cjs/excel-parser/plugins/xlsx/conditional-formatting.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/conditional-formatting.js +620 -0
- package/dist/cjs/excel-parser/plugins/xlsx/data-validations.d.ts +4 -0
- package/dist/cjs/excel-parser/plugins/xlsx/data-validations.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/data-validations.js +515 -0
- package/dist/cjs/excel-parser/plugins/xlsx/drawing.d.ts +39 -0
- package/dist/cjs/excel-parser/plugins/xlsx/drawing.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/drawing.js +941 -0
- package/dist/cjs/excel-parser/plugins/xlsx/index.d.ts +320 -0
- package/dist/cjs/excel-parser/plugins/xlsx/index.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/index.js +6056 -0
- package/dist/cjs/excel-parser/plugins/xlsx/numfmt.d.ts +2 -0
- package/dist/cjs/excel-parser/plugins/xlsx/numfmt.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/numfmt.js +3 -0
- package/dist/cjs/excel-parser/plugins/xlsx/pivots.d.ts +40 -0
- package/dist/cjs/excel-parser/plugins/xlsx/pivots.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/pivots.js +342 -0
- package/dist/cjs/excel-parser/plugins/xlsx/relationships.d.ts +8 -0
- package/dist/cjs/excel-parser/plugins/xlsx/relationships.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/relationships.js +26 -0
- package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.d.ts +26 -0
- package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.js +59 -0
- package/dist/cjs/excel-parser/plugins/xlsx/styles.d.ts +44 -0
- package/dist/cjs/excel-parser/plugins/xlsx/styles.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/styles.js +1377 -0
- package/dist/cjs/excel-parser/plugins/xlsx/theme.d.ts +50 -0
- package/dist/cjs/excel-parser/plugins/xlsx/theme.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/theme.js +150 -0
- package/dist/cjs/excel-parser/plugins/xlsx/threaded-comments.d.ts +47 -0
- package/dist/cjs/excel-parser/plugins/xlsx/threaded-comments.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/threaded-comments.js +141 -0
- package/dist/cjs/excel-parser/plugins/xlsx/value-type-detection.d.ts +44 -0
- package/dist/cjs/excel-parser/plugins/xlsx/value-type-detection.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/value-type-detection.js +407 -0
- package/dist/cjs/excel-parser/registry.d.ts +5 -0
- package/dist/cjs/excel-parser/registry.d.ts.map +1 -0
- package/dist/cjs/excel-parser/registry.js +21 -0
- package/dist/cjs/excel-parser/style-registry.d.ts +51 -0
- package/dist/cjs/excel-parser/style-registry.d.ts.map +1 -0
- package/dist/cjs/excel-parser/style-registry.js +175 -0
- package/dist/cjs/excel-parser/theme-default.d.ts +3 -0
- package/dist/cjs/excel-parser/theme-default.d.ts.map +1 -0
- package/dist/cjs/excel-parser/theme-default.js +19 -0
- package/dist/cjs/excel-parser/types.d.ts +365 -0
- package/dist/cjs/excel-parser/types.d.ts.map +1 -0
- package/dist/cjs/excel-parser/types.js +59 -0
- package/dist/cjs/excel-parser/utils.d.ts +6 -0
- package/dist/cjs/excel-parser/utils.d.ts.map +1 -0
- package/dist/cjs/excel-parser/utils.js +30 -0
- package/dist/cjs/excel-parser/workbook.d.ts +51 -0
- package/dist/cjs/excel-parser/workbook.d.ts.map +1 -0
- package/dist/cjs/excel-parser/workbook.js +317 -0
- package/dist/cjs/excel-parser/worker.d.ts +2 -0
- package/dist/cjs/excel-parser/worker.d.ts.map +1 -0
- package/dist/cjs/excel-parser/worker.js +1149 -0
- package/dist/cjs/excel-parser/zip-parser-streaming.d.ts +13 -0
- package/dist/cjs/excel-parser/zip-parser-streaming.d.ts.map +1 -0
- package/dist/cjs/excel-parser/zip-parser-streaming.js +200 -0
- package/dist/cjs/excel-parser/zip-parser.d.ts +11 -0
- package/dist/cjs/excel-parser/zip-parser.d.ts.map +1 -0
- package/dist/cjs/excel-parser/zip-parser.js +49 -0
- package/dist/cjs/exporter/invalid-data-validation.d.ts +19 -0
- package/dist/cjs/exporter/invalid-data-validation.d.ts.map +1 -0
- package/dist/cjs/exporter/invalid-data-validation.js +39 -0
- package/dist/cjs/exporter/ods/ods-export.d.ts +26 -0
- package/dist/cjs/exporter/ods/ods-export.d.ts.map +1 -0
- package/dist/cjs/exporter/ods/ods-export.js +3714 -0
- package/dist/cjs/exporter/ods/sparkline-builder.d.ts +33 -0
- package/dist/cjs/exporter/ods/sparkline-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/ods/sparkline-builder.js +221 -0
- package/dist/cjs/exporter/xlsx/chart-builder.d.ts +3 -0
- package/dist/cjs/exporter/xlsx/chart-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/chart-builder.js +1901 -0
- package/dist/cjs/exporter/xlsx/chart-templates.d.ts +1781 -0
- package/dist/cjs/exporter/xlsx/chart-templates.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/chart-templates.js +1798 -0
- package/dist/cjs/exporter/xlsx/future-functions.d.ts +10 -0
- package/dist/cjs/exporter/xlsx/future-functions.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/future-functions.js +264 -0
- package/dist/cjs/exporter/xlsx/pivot-builder.d.ts +58 -0
- package/dist/cjs/exporter/xlsx/pivot-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/pivot-builder.js +277 -0
- package/dist/cjs/exporter/xlsx/power-query-builder.d.ts +26 -0
- package/dist/cjs/exporter/xlsx/power-query-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/power-query-builder.js +306 -0
- package/dist/cjs/exporter/xlsx/slicer-builder.d.ts +11 -0
- package/dist/cjs/exporter/xlsx/slicer-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/slicer-builder.js +87 -0
- package/dist/cjs/exporter/xlsx/sparkline-builder.d.ts +61 -0
- package/dist/cjs/exporter/xlsx/sparkline-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/sparkline-builder.js +489 -0
- package/dist/cjs/exporter/xlsx/style-builder.d.ts +93 -0
- package/dist/cjs/exporter/xlsx/style-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/style-builder.js +813 -0
- package/dist/cjs/exporter/xlsx/threaded-comments-builder.d.ts +58 -0
- package/dist/cjs/exporter/xlsx/threaded-comments-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/threaded-comments-builder.js +189 -0
- package/dist/cjs/exporter/xlsx/xlsx-export.d.ts +121 -0
- package/dist/cjs/exporter/xlsx/xlsx-export.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/xlsx-export.js +4596 -0
- package/dist/cjs/helpers/theme-xml-generator.d.ts +8 -0
- package/dist/cjs/helpers/theme-xml-generator.d.ts.map +1 -0
- package/dist/cjs/helpers/theme-xml-generator.js +33 -0
- package/dist/cjs/helpers.d.ts +34 -0
- package/dist/cjs/helpers.d.ts.map +1 -0
- package/dist/cjs/helpers.js +189 -0
- package/dist/cjs/index.d.ts +16 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +15 -0
- package/dist/cjs/indexed-colors.d.ts +2 -0
- package/dist/cjs/indexed-colors.d.ts.map +1 -0
- package/dist/cjs/indexed-colors.js +75 -0
- package/dist/cjs/ods-export.d.ts +24 -0
- package/dist/cjs/ods-export.d.ts.map +1 -0
- package/dist/cjs/ods-export.js +23 -0
- package/dist/cjs/parse.d.ts +24 -0
- package/dist/cjs/parse.d.ts.map +1 -0
- package/dist/cjs/parse.js +68 -0
- package/dist/cjs/power-query.d.ts +41 -0
- package/dist/cjs/power-query.d.ts.map +1 -0
- package/dist/cjs/power-query.js +22 -0
- package/dist/cjs/server.d.ts +9 -0
- package/dist/cjs/server.d.ts.map +1 -0
- package/dist/cjs/server.js +8 -0
- package/dist/cjs/theme1.d.ts +3 -0
- package/dist/cjs/theme1.d.ts.map +1 -0
- package/dist/cjs/theme1.js +2 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/cjs/types.d.ts +14 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +14 -0
- package/dist/cjs/vitest.config.d.ts +3 -0
- package/dist/cjs/vitest.config.d.ts.map +1 -0
- package/dist/cjs/vitest.config.js +16 -0
- package/dist/esm/autofilter-condition.d.ts +43 -0
- package/dist/esm/autofilter-condition.d.ts.map +1 -0
- package/dist/esm/autofilter-condition.js +145 -0
- package/dist/esm/csv-export.d.ts +49 -0
- package/dist/esm/csv-export.d.ts.map +1 -0
- package/dist/esm/csv-export.js +126 -0
- package/dist/esm/csv-import-worker.d.ts +16 -0
- package/dist/esm/csv-import-worker.d.ts.map +1 -0
- package/dist/esm/csv-import-worker.js +60 -0
- package/dist/esm/csv-import.d.ts +38 -0
- package/dist/esm/csv-import.d.ts.map +1 -0
- package/dist/esm/csv-import.js +132 -0
- package/dist/esm/csv-parser/helpers.d.ts +14 -0
- package/dist/esm/csv-parser/helpers.d.ts.map +1 -0
- package/dist/esm/csv-parser/helpers.js +0 -0
- package/dist/esm/csv-parser/types.d.ts +66 -0
- package/dist/esm/csv-parser/types.d.ts.map +1 -0
- package/dist/esm/csv-parser/types.js +14 -0
- package/dist/esm/csv-parser/worker.d.ts +2 -0
- package/dist/esm/csv-parser/worker.d.ts.map +1 -0
- package/dist/esm/csv-parser/worker.js +154 -0
- package/dist/esm/excel-export.d.ts +11 -0
- package/dist/esm/excel-export.d.ts.map +1 -0
- package/dist/esm/excel-export.js +13 -0
- package/dist/esm/excel-import-session.d.ts +51 -0
- package/dist/esm/excel-import-session.d.ts.map +1 -0
- package/dist/esm/excel-import-session.js +255 -0
- package/dist/esm/excel-import-worker.d.ts +7 -0
- package/dist/esm/excel-import-worker.d.ts.map +1 -0
- package/dist/esm/excel-import-worker.js +116 -0
- package/dist/esm/excel-parser/builtin-numfmts.d.ts +24 -0
- package/dist/esm/excel-parser/builtin-numfmts.d.ts.map +1 -0
- package/dist/esm/excel-parser/builtin-numfmts.js +59 -0
- package/dist/esm/excel-parser/cfb-decryptor.d.ts +53 -0
- package/dist/esm/excel-parser/cfb-decryptor.d.ts.map +1 -0
- package/dist/esm/excel-parser/cfb-decryptor.js +493 -0
- package/dist/esm/excel-parser/cfb-encryptor.d.ts +23 -0
- package/dist/esm/excel-parser/cfb-encryptor.d.ts.map +1 -0
- package/dist/esm/excel-parser/cfb-encryptor.js +181 -0
- package/dist/esm/excel-parser/dv-cell-stamp.d.ts +29 -0
- package/dist/esm/excel-parser/dv-cell-stamp.d.ts.map +1 -0
- package/dist/esm/excel-parser/dv-cell-stamp.js +155 -0
- package/dist/esm/excel-parser/helpers.d.ts +28 -0
- package/dist/esm/excel-parser/helpers.d.ts.map +1 -0
- package/dist/esm/excel-parser/helpers.js +160 -0
- package/dist/esm/excel-parser/interface.d.ts +179 -0
- package/dist/esm/excel-parser/interface.d.ts.map +1 -0
- package/dist/esm/excel-parser/interface.js +1 -0
- package/dist/esm/excel-parser/plugins/base/index.d.ts +31 -0
- package/dist/esm/excel-parser/plugins/base/index.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/base/index.js +64 -0
- package/dist/esm/excel-parser/plugins/ods/conditional-formatting.d.ts +16 -0
- package/dist/esm/excel-parser/plugins/ods/conditional-formatting.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/ods/conditional-formatting.js +405 -0
- package/dist/esm/excel-parser/plugins/ods/data-validations.d.ts +15 -0
- package/dist/esm/excel-parser/plugins/ods/data-validations.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/ods/data-validations.js +331 -0
- package/dist/esm/excel-parser/plugins/ods/formula.d.ts +8 -0
- package/dist/esm/excel-parser/plugins/ods/formula.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/ods/formula.js +82 -0
- package/dist/esm/excel-parser/plugins/ods/index.d.ts +122 -0
- package/dist/esm/excel-parser/plugins/ods/index.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/ods/index.js +2896 -0
- package/dist/esm/excel-parser/plugins/ods/sparklines.d.ts +25 -0
- package/dist/esm/excel-parser/plugins/ods/sparklines.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/ods/sparklines.js +188 -0
- package/dist/esm/excel-parser/plugins/ods/styles.d.ts +60 -0
- package/dist/esm/excel-parser/plugins/ods/styles.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/ods/styles.js +732 -0
- package/dist/esm/excel-parser/plugins/ods/types.d.ts +7 -0
- package/dist/esm/excel-parser/plugins/ods/types.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/ods/types.js +1 -0
- package/dist/esm/excel-parser/plugins/xls/index.d.ts +5 -0
- package/dist/esm/excel-parser/plugins/xls/index.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xls/index.js +7 -0
- package/dist/esm/excel-parser/plugins/xlsb/biff-record-reader.d.ts +13 -0
- package/dist/esm/excel-parser/plugins/xlsb/biff-record-reader.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsb/biff-record-reader.js +48 -0
- package/dist/esm/excel-parser/plugins/xlsb/index.d.ts +117 -0
- package/dist/esm/excel-parser/plugins/xlsb/index.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsb/index.js +2339 -0
- package/dist/esm/excel-parser/plugins/xlsb/rgce-parser.d.ts +18 -0
- package/dist/esm/excel-parser/plugins/xlsb/rgce-parser.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsb/rgce-parser.js +522 -0
- package/dist/esm/excel-parser/plugins/xlsm/index.d.ts +5 -0
- package/dist/esm/excel-parser/plugins/xlsm/index.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsm/index.js +6 -0
- package/dist/esm/excel-parser/plugins/xlsx/charts.d.ts +60 -0
- package/dist/esm/excel-parser/plugins/xlsx/charts.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/charts.js +2036 -0
- package/dist/esm/excel-parser/plugins/xlsx/conditional-formatting.d.ts +18 -0
- package/dist/esm/excel-parser/plugins/xlsx/conditional-formatting.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/conditional-formatting.js +621 -0
- package/dist/esm/excel-parser/plugins/xlsx/data-validations.d.ts +4 -0
- package/dist/esm/excel-parser/plugins/xlsx/data-validations.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/data-validations.js +493 -0
- package/dist/esm/excel-parser/plugins/xlsx/drawing.d.ts +39 -0
- package/dist/esm/excel-parser/plugins/xlsx/drawing.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/drawing.js +905 -0
- package/dist/esm/excel-parser/plugins/xlsx/index.d.ts +320 -0
- package/dist/esm/excel-parser/plugins/xlsx/index.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/index.js +4654 -0
- package/dist/esm/excel-parser/plugins/xlsx/numfmt.d.ts +2 -0
- package/dist/esm/excel-parser/plugins/xlsx/numfmt.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/numfmt.js +3 -0
- package/dist/esm/excel-parser/plugins/xlsx/pivots.d.ts +40 -0
- package/dist/esm/excel-parser/plugins/xlsx/pivots.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/pivots.js +254 -0
- package/dist/esm/excel-parser/plugins/xlsx/relationships.d.ts +8 -0
- package/dist/esm/excel-parser/plugins/xlsx/relationships.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/relationships.js +13 -0
- package/dist/esm/excel-parser/plugins/xlsx/sheet-views.d.ts +26 -0
- package/dist/esm/excel-parser/plugins/xlsx/sheet-views.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/sheet-views.js +64 -0
- package/dist/esm/excel-parser/plugins/xlsx/styles.d.ts +44 -0
- package/dist/esm/excel-parser/plugins/xlsx/styles.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/styles.js +1365 -0
- package/dist/esm/excel-parser/plugins/xlsx/theme.d.ts +50 -0
- package/dist/esm/excel-parser/plugins/xlsx/theme.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/theme.js +127 -0
- package/dist/esm/excel-parser/plugins/xlsx/threaded-comments.d.ts +47 -0
- package/dist/esm/excel-parser/plugins/xlsx/threaded-comments.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/threaded-comments.js +103 -0
- package/dist/esm/excel-parser/plugins/xlsx/value-type-detection.d.ts +44 -0
- package/dist/esm/excel-parser/plugins/xlsx/value-type-detection.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/value-type-detection.js +399 -0
- package/dist/esm/excel-parser/registry.d.ts +5 -0
- package/dist/esm/excel-parser/registry.d.ts.map +1 -0
- package/dist/esm/excel-parser/registry.js +20 -0
- package/dist/esm/excel-parser/style-registry.d.ts +51 -0
- package/dist/esm/excel-parser/style-registry.d.ts.map +1 -0
- package/dist/esm/excel-parser/style-registry.js +163 -0
- package/dist/esm/excel-parser/theme-default.d.ts +3 -0
- package/dist/esm/excel-parser/theme-default.d.ts.map +1 -0
- package/dist/esm/excel-parser/theme-default.js +19 -0
- package/dist/esm/excel-parser/types.d.ts +365 -0
- package/dist/esm/excel-parser/types.d.ts.map +1 -0
- package/dist/esm/excel-parser/types.js +59 -0
- package/dist/esm/excel-parser/utils.d.ts +6 -0
- package/dist/esm/excel-parser/utils.d.ts.map +1 -0
- package/dist/esm/excel-parser/utils.js +25 -0
- package/dist/esm/excel-parser/workbook.d.ts +51 -0
- package/dist/esm/excel-parser/workbook.d.ts.map +1 -0
- package/dist/esm/excel-parser/workbook.js +192 -0
- package/dist/esm/excel-parser/worker.d.ts +2 -0
- package/dist/esm/excel-parser/worker.d.ts.map +1 -0
- package/dist/esm/excel-parser/worker.js +862 -0
- package/dist/esm/excel-parser/zip-parser-streaming.d.ts +13 -0
- package/dist/esm/excel-parser/zip-parser-streaming.d.ts.map +1 -0
- package/dist/esm/excel-parser/zip-parser-streaming.js +119 -0
- package/dist/esm/excel-parser/zip-parser.d.ts +11 -0
- package/dist/esm/excel-parser/zip-parser.d.ts.map +1 -0
- package/dist/esm/excel-parser/zip-parser.js +43 -0
- package/dist/esm/exporter/invalid-data-validation.d.ts +19 -0
- package/dist/esm/exporter/invalid-data-validation.d.ts.map +1 -0
- package/dist/esm/exporter/invalid-data-validation.js +37 -0
- package/dist/esm/exporter/ods/ods-export.d.ts +26 -0
- package/dist/esm/exporter/ods/ods-export.d.ts.map +1 -0
- package/dist/esm/exporter/ods/ods-export.js +3238 -0
- package/dist/esm/exporter/ods/sparkline-builder.d.ts +33 -0
- package/dist/esm/exporter/ods/sparkline-builder.d.ts.map +1 -0
- package/dist/esm/exporter/ods/sparkline-builder.js +165 -0
- package/dist/esm/exporter/xlsx/chart-builder.d.ts +3 -0
- package/dist/esm/exporter/xlsx/chart-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/chart-builder.js +1805 -0
- package/dist/esm/exporter/xlsx/chart-templates.d.ts +1781 -0
- package/dist/esm/exporter/xlsx/chart-templates.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/chart-templates.js +1798 -0
- package/dist/esm/exporter/xlsx/future-functions.d.ts +10 -0
- package/dist/esm/exporter/xlsx/future-functions.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/future-functions.js +264 -0
- package/dist/esm/exporter/xlsx/pivot-builder.d.ts +58 -0
- package/dist/esm/exporter/xlsx/pivot-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/pivot-builder.js +230 -0
- package/dist/esm/exporter/xlsx/power-query-builder.d.ts +26 -0
- package/dist/esm/exporter/xlsx/power-query-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/power-query-builder.js +257 -0
- package/dist/esm/exporter/xlsx/slicer-builder.d.ts +11 -0
- package/dist/esm/exporter/xlsx/slicer-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/slicer-builder.js +84 -0
- package/dist/esm/exporter/xlsx/sparkline-builder.d.ts +61 -0
- package/dist/esm/exporter/xlsx/sparkline-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/sparkline-builder.js +437 -0
- package/dist/esm/exporter/xlsx/style-builder.d.ts +93 -0
- package/dist/esm/exporter/xlsx/style-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/style-builder.js +795 -0
- package/dist/esm/exporter/xlsx/threaded-comments-builder.d.ts +58 -0
- package/dist/esm/exporter/xlsx/threaded-comments-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/threaded-comments-builder.js +175 -0
- package/dist/esm/exporter/xlsx/xlsx-export.d.ts +121 -0
- package/dist/esm/exporter/xlsx/xlsx-export.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/xlsx-export.js +4062 -0
- package/dist/esm/helpers/theme-xml-generator.d.ts +8 -0
- package/dist/esm/helpers/theme-xml-generator.d.ts.map +1 -0
- package/dist/esm/helpers/theme-xml-generator.js +33 -0
- package/dist/esm/helpers.d.ts +34 -0
- package/dist/esm/helpers.d.ts.map +1 -0
- package/dist/esm/helpers.js +182 -0
- package/dist/esm/index.d.ts +16 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +15 -0
- package/dist/esm/indexed-colors.d.ts +2 -0
- package/dist/esm/indexed-colors.d.ts.map +1 -0
- package/dist/esm/indexed-colors.js +75 -0
- package/dist/esm/ods-export.d.ts +24 -0
- package/dist/esm/ods-export.d.ts.map +1 -0
- package/dist/esm/ods-export.js +12 -0
- package/dist/esm/parse.d.ts +24 -0
- package/dist/esm/parse.d.ts.map +1 -0
- package/dist/esm/parse.js +55 -0
- package/dist/esm/power-query.d.ts +41 -0
- package/dist/esm/power-query.d.ts.map +1 -0
- package/dist/esm/power-query.js +19 -0
- package/dist/esm/server.d.ts +9 -0
- package/dist/esm/server.d.ts.map +1 -0
- package/dist/esm/server.js +8 -0
- package/dist/esm/theme1.d.ts +3 -0
- package/dist/esm/theme1.d.ts.map +1 -0
- package/dist/esm/theme1.js +2 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
- package/dist/esm/types.d.ts +14 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +14 -0
- package/dist/esm/vitest.config.d.ts +3 -0
- package/dist/esm/vitest.config.d.ts.map +1 -0
- package/dist/esm/vitest.config.js +16 -0
- package/package.json +62 -0
- package/xlsx.d.ts +52 -0
|
@@ -0,0 +1,813 @@
|
|
|
1
|
+
import { __assign, __read, __spreadArray, __values } from "tslib";
|
|
2
|
+
import { getCellEffectiveFormat, getCellUserEnteredFormat, } from "@rowsncolumns/utils";
|
|
3
|
+
import { BUILTIN_NUMFMT_BY_PATTERN } from "../../excel-parser/builtin-numfmts";
|
|
4
|
+
var isStyleReference = function (value) {
|
|
5
|
+
return !!value && typeof value === "object" && "sid" in value;
|
|
6
|
+
};
|
|
7
|
+
// Built-in number-format dictionary is shared with the importer — see
|
|
8
|
+
// `excel-parser/builtin-numfmts.ts`. Pattern strings are the canonical
|
|
9
|
+
// Excel-writer form (quoted "$" for currency/accounting, `mmss.0` for
|
|
10
|
+
// numFmtId 47 per ECMA-376). Re-aliased for backwards compat with the
|
|
11
|
+
// previous local name in this file.
|
|
12
|
+
var BUILT_IN_NUMFMT_BY_PATTERN = BUILTIN_NUMFMT_BY_PATTERN;
|
|
13
|
+
var StyleBuilder = /** @class */ (function () {
|
|
14
|
+
function StyleBuilder() {
|
|
15
|
+
this.numberFormats = [];
|
|
16
|
+
this.fonts = [
|
|
17
|
+
{
|
|
18
|
+
name: "Calibri",
|
|
19
|
+
size: 11,
|
|
20
|
+
},
|
|
21
|
+
];
|
|
22
|
+
this.fills = [{ pattern: "none" }, { pattern: "gray125" }];
|
|
23
|
+
this.borders = [{}];
|
|
24
|
+
this.namedCellStyles = [
|
|
25
|
+
{ name: "Normal", xfId: 0, builtinId: 0 },
|
|
26
|
+
];
|
|
27
|
+
this.customTableStyles = [];
|
|
28
|
+
this.cellXfs = [
|
|
29
|
+
{
|
|
30
|
+
numFmtId: 0,
|
|
31
|
+
fontId: 0,
|
|
32
|
+
fillId: 0,
|
|
33
|
+
borderId: 0,
|
|
34
|
+
},
|
|
35
|
+
];
|
|
36
|
+
this.fontMap = new Map();
|
|
37
|
+
this.fillMap = new Map();
|
|
38
|
+
this.borderMap = new Map();
|
|
39
|
+
this.formatMap = new Map();
|
|
40
|
+
this.xfMap = new Map();
|
|
41
|
+
this.dxfs = [];
|
|
42
|
+
this.dxfMap = new Map();
|
|
43
|
+
this.fontMap.set(this.serializeFont(this.fonts[0]), 0);
|
|
44
|
+
this.fillMap.set(this.serializeFill(this.fills[0]), 0);
|
|
45
|
+
this.fillMap.set(this.serializeFill(this.fills[1]), 1);
|
|
46
|
+
this.borderMap.set(this.serializeBorder(this.borders[0]), 0);
|
|
47
|
+
this.xfMap.set(serializeXf(this.cellXfs[0]), 0);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Replace the named-cell-styles list emitted in `<cellStyles>`.
|
|
51
|
+
* Used for round-tripping the OOXML Heading 1 / Accent / Total /
|
|
52
|
+
* Good-Bad-Neutral gallery — the importer parses these from
|
|
53
|
+
* `xl/styles.xml` and exposes them on `workbook.workbookStyles.
|
|
54
|
+
* namedCellStyles`; hosts can forward that list back here.
|
|
55
|
+
*
|
|
56
|
+
* Excel requires at least a "Normal" entry pointing at xfId=0,
|
|
57
|
+
* builtinId=0 — when the supplied list doesn't contain one, we
|
|
58
|
+
* keep the default at the head of the list rather than risk
|
|
59
|
+
* emitting a file Excel rejects.
|
|
60
|
+
*/
|
|
61
|
+
StyleBuilder.prototype.setNamedCellStyles = function (entries) {
|
|
62
|
+
if (!entries || entries.length === 0)
|
|
63
|
+
return;
|
|
64
|
+
var hasNormal = entries.some(function (e) { return e.builtinId === 0 || e.name === "Normal"; });
|
|
65
|
+
this.namedCellStyles = hasNormal
|
|
66
|
+
? entries.slice()
|
|
67
|
+
: __spreadArray([{ name: "Normal", xfId: 0, builtinId: 0 }], __read(entries), false);
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Replace the user-authored table-style list emitted in the
|
|
71
|
+
* `<tableStyles>` block. The exporter registers each element's
|
|
72
|
+
* format as a dxf at `toXml()` time, so callers pass self-contained
|
|
73
|
+
* records (no dxfIds to manage). Used for round-tripping the
|
|
74
|
+
* OOXML custom-table-style list from
|
|
75
|
+
* `workbook.workbookStyles.getCustomTableStyleExports()`.
|
|
76
|
+
*/
|
|
77
|
+
StyleBuilder.prototype.setCustomTableStyles = function (entries) {
|
|
78
|
+
if (!entries || entries.length === 0) {
|
|
79
|
+
this.customTableStyles = [];
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
this.customTableStyles = entries.slice();
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Replace the workbook default font (font id 0 — what every cell without
|
|
86
|
+
* an explicit font inherits). Callers pass the source workbook's parsed
|
|
87
|
+
* default (`WorkBook.getDefaultFont()`) so an imported workbook keeps its
|
|
88
|
+
* default typeface/size instead of the hardcoded Calibri 11. Must be
|
|
89
|
+
* called before any cell registration: cells explicitly styled with the
|
|
90
|
+
* old default must not collapse into font id 0.
|
|
91
|
+
*/
|
|
92
|
+
StyleBuilder.prototype.setDefaultFont = function (format) {
|
|
93
|
+
if (this.fonts.length > 1)
|
|
94
|
+
return;
|
|
95
|
+
var record = this.buildFontRecord(format);
|
|
96
|
+
if (!record)
|
|
97
|
+
return;
|
|
98
|
+
this.fonts[0] = record;
|
|
99
|
+
this.fontMap.clear();
|
|
100
|
+
this.fontMap.set(this.serializeFont(record), 0);
|
|
101
|
+
};
|
|
102
|
+
StyleBuilder.prototype.registerCell = function (cell, cellXfs,
|
|
103
|
+
/**
|
|
104
|
+
* Number format to use when the cell itself has none. Used by the
|
|
105
|
+
* exporter to layer in the precedent-derived number format on formula
|
|
106
|
+
* cells so Excel displays them correctly without requiring a recalc.
|
|
107
|
+
*/
|
|
108
|
+
derivedNumberFormat) {
|
|
109
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
110
|
+
if (!cell)
|
|
111
|
+
return 0;
|
|
112
|
+
// Match Excel's model: persist only the user-entered format. Auto-
|
|
113
|
+
// derived alignment / pattern color / formula precedent format are
|
|
114
|
+
// recomputed at render time and never serialized to disk. Legacy `ef`
|
|
115
|
+
// is still read as a fallback so old files continue to export with the
|
|
116
|
+
// formatting they originally had.
|
|
117
|
+
var userEnteredFormat = normalizeFormat(getCellUserEnteredFormat(cell), cellXfs);
|
|
118
|
+
var effectiveFormat = (_a = userEnteredFormat !== null && userEnteredFormat !== void 0 ? userEnteredFormat : normalizeFormat(getCellEffectiveFormat(cell), cellXfs)) !== null && _a !== void 0 ? _a : undefined;
|
|
119
|
+
// Layer in the derived number format only when the cell's own format
|
|
120
|
+
// has nothing in that slot. User-set formats always win.
|
|
121
|
+
if (derivedNumberFormat && !(effectiveFormat === null || effectiveFormat === void 0 ? void 0 : effectiveFormat.numberFormat)) {
|
|
122
|
+
effectiveFormat = __assign(__assign({}, (effectiveFormat !== null && effectiveFormat !== void 0 ? effectiveFormat : {})), { numberFormat: derivedNumberFormat });
|
|
123
|
+
}
|
|
124
|
+
var numberFormatId = this.getNumberFormatId(effectiveFormat);
|
|
125
|
+
var fontId = this.getFontId(effectiveFormat === null || effectiveFormat === void 0 ? void 0 : effectiveFormat.textFormat);
|
|
126
|
+
var fillId = this.getFillId(effectiveFormat);
|
|
127
|
+
var borderId = this.getBorderId(effectiveFormat === null || effectiveFormat === void 0 ? void 0 : effectiveFormat.borders);
|
|
128
|
+
var xfRecord = {
|
|
129
|
+
numFmtId: numberFormatId,
|
|
130
|
+
fontId: fontId,
|
|
131
|
+
fillId: fillId,
|
|
132
|
+
borderId: borderId,
|
|
133
|
+
wrapText: (effectiveFormat === null || effectiveFormat === void 0 ? void 0 : effectiveFormat.wrapStrategy) === "wrap",
|
|
134
|
+
horizontalAlignment: normalizeHorizontalAlignment(effectiveFormat === null || effectiveFormat === void 0 ? void 0 : effectiveFormat.horizontalAlignment),
|
|
135
|
+
verticalAlignment: normalizeVerticalAlignment(effectiveFormat === null || effectiveFormat === void 0 ? void 0 : effectiveFormat.verticalAlignment),
|
|
136
|
+
indent: (_b = effectiveFormat === null || effectiveFormat === void 0 ? void 0 : effectiveFormat.indent) !== null && _b !== void 0 ? _b : undefined,
|
|
137
|
+
relativeIndent: (_c = effectiveFormat === null || effectiveFormat === void 0 ? void 0 : effectiveFormat.relativeIndent) !== null && _c !== void 0 ? _c : undefined,
|
|
138
|
+
textRotation: (_d = effectiveFormat === null || effectiveFormat === void 0 ? void 0 : effectiveFormat.textRotation) !== null && _d !== void 0 ? _d : undefined,
|
|
139
|
+
shrinkToFit: (_e = effectiveFormat === null || effectiveFormat === void 0 ? void 0 : effectiveFormat.shrinkToFit) !== null && _e !== void 0 ? _e : undefined,
|
|
140
|
+
// Protection lives top-level on the cell (not on the format) — read
|
|
141
|
+
// it off the cell directly. The xf still carries the flags because
|
|
142
|
+
// that's where Excel persists them; we synthesize a unique xf per
|
|
143
|
+
// protection variant via the cache key below.
|
|
144
|
+
protectionLocked: ((_f = cell === null || cell === void 0 ? void 0 : cell.protection) === null || _f === void 0 ? void 0 : _f.locked) === false ? false : undefined,
|
|
145
|
+
protectionHidden: ((_g = cell === null || cell === void 0 ? void 0 : cell.protection) === null || _g === void 0 ? void 0 : _g.hidden) === true ? true : undefined,
|
|
146
|
+
};
|
|
147
|
+
var key = serializeXf(xfRecord);
|
|
148
|
+
var existing = this.xfMap.get(key);
|
|
149
|
+
if (typeof existing === "number") {
|
|
150
|
+
return existing;
|
|
151
|
+
}
|
|
152
|
+
var nextId = this.cellXfs.length;
|
|
153
|
+
this.cellXfs.push(xfRecord);
|
|
154
|
+
this.xfMap.set(key, nextId);
|
|
155
|
+
return nextId;
|
|
156
|
+
};
|
|
157
|
+
StyleBuilder.prototype.registerDifferentialFormat = function (format) {
|
|
158
|
+
if (!format)
|
|
159
|
+
return undefined;
|
|
160
|
+
var record = {};
|
|
161
|
+
if (format.backgroundColor) {
|
|
162
|
+
record.fill = {
|
|
163
|
+
color: format.backgroundColor,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
var font = this.buildFontRecord(format.textFormat);
|
|
167
|
+
if (font) {
|
|
168
|
+
record.font = font;
|
|
169
|
+
}
|
|
170
|
+
if (!record.fill && !record.font) {
|
|
171
|
+
return undefined;
|
|
172
|
+
}
|
|
173
|
+
var key = this.serializeDxf(record);
|
|
174
|
+
var existing = this.dxfMap.get(key);
|
|
175
|
+
if (typeof existing === "number") {
|
|
176
|
+
return existing;
|
|
177
|
+
}
|
|
178
|
+
var nextId = this.dxfs.length;
|
|
179
|
+
this.dxfs.push(record);
|
|
180
|
+
this.dxfMap.set(key, nextId);
|
|
181
|
+
return nextId;
|
|
182
|
+
};
|
|
183
|
+
StyleBuilder.prototype.getNumberFormatId = function (effectiveFormat) {
|
|
184
|
+
var _a;
|
|
185
|
+
var pattern = (_a = effectiveFormat === null || effectiveFormat === void 0 ? void 0 : effectiveFormat.numberFormat) === null || _a === void 0 ? void 0 : _a.pattern;
|
|
186
|
+
if (!pattern)
|
|
187
|
+
return 0;
|
|
188
|
+
// Preserve trailing whitespace in the pattern verbatim — number-format
|
|
189
|
+
// strings legitimately end with significant `\xa0` (non-breaking space)
|
|
190
|
+
// chars for column-aligned currency/accounting formats. Trimming here
|
|
191
|
+
// mangled those formats on round-trip and broke comparator equality
|
|
192
|
+
// against the source `<numFmts>` table. We still dedupe via the map
|
|
193
|
+
// using the raw pattern as key.
|
|
194
|
+
var normalizedPattern = pattern;
|
|
195
|
+
// Try Excel's built-in numFmtId table (0–49). When our pattern matches
|
|
196
|
+
// a built-in exactly, emit that ID — Excel and other readers render
|
|
197
|
+
// identically and we avoid bloating <numFmts> with a redundant
|
|
198
|
+
// custom entry.
|
|
199
|
+
var builtInId = BUILT_IN_NUMFMT_BY_PATTERN.get(normalizedPattern);
|
|
200
|
+
if (typeof builtInId === "number") {
|
|
201
|
+
return builtInId;
|
|
202
|
+
}
|
|
203
|
+
var existing = this.formatMap.get(normalizedPattern);
|
|
204
|
+
if (typeof existing === "number") {
|
|
205
|
+
return existing;
|
|
206
|
+
}
|
|
207
|
+
// ECMA-376 §18.8.30: built-in numFmtIds occupy 0–163. Custom IDs
|
|
208
|
+
// start at 164 by convention (Excel's own writer does the same).
|
|
209
|
+
var nextId = 164 + this.numberFormats.length;
|
|
210
|
+
this.numberFormats.push({
|
|
211
|
+
id: nextId,
|
|
212
|
+
format: normalizedPattern,
|
|
213
|
+
});
|
|
214
|
+
this.formatMap.set(normalizedPattern, nextId);
|
|
215
|
+
return nextId;
|
|
216
|
+
};
|
|
217
|
+
StyleBuilder.prototype.getFontId = function (format) {
|
|
218
|
+
var record = this.buildFontRecord(format);
|
|
219
|
+
if (!record)
|
|
220
|
+
return 0;
|
|
221
|
+
var key = this.serializeFont(record);
|
|
222
|
+
var existing = this.fontMap.get(key);
|
|
223
|
+
if (typeof existing === "number") {
|
|
224
|
+
return existing;
|
|
225
|
+
}
|
|
226
|
+
var nextId = this.fonts.length;
|
|
227
|
+
this.fonts.push(record);
|
|
228
|
+
this.fontMap.set(key, nextId);
|
|
229
|
+
return nextId;
|
|
230
|
+
};
|
|
231
|
+
StyleBuilder.prototype.getFillId = function (format) {
|
|
232
|
+
var _a, _b, _c, _d, _e;
|
|
233
|
+
var fillPattern = (_a = format === null || format === void 0 ? void 0 : format.fillPattern) !== null && _a !== void 0 ? _a : undefined;
|
|
234
|
+
var fgColor = (_b = format === null || format === void 0 ? void 0 : format.foregroundColor) !== null && _b !== void 0 ? _b : undefined;
|
|
235
|
+
var bgColor = (_c = format === null || format === void 0 ? void 0 : format.backgroundColor) !== null && _c !== void 0 ? _c : undefined;
|
|
236
|
+
var gradient = (_d = format === null || format === void 0 ? void 0 : format.gradient) !== null && _d !== void 0 ? _d : undefined;
|
|
237
|
+
// Gradient fill takes precedence over pattern — Excel's UI treats
|
|
238
|
+
// them as mutually exclusive on a single cell.
|
|
239
|
+
if (gradient && ((_e = gradient.stops) === null || _e === void 0 ? void 0 : _e.length)) {
|
|
240
|
+
var record_1 = { gradient: gradient };
|
|
241
|
+
var key_1 = this.serializeFill(record_1);
|
|
242
|
+
var existing_1 = this.fillMap.get(key_1);
|
|
243
|
+
if (typeof existing_1 === "number")
|
|
244
|
+
return existing_1;
|
|
245
|
+
var nextId_1 = this.fills.length;
|
|
246
|
+
this.fills.push(record_1);
|
|
247
|
+
this.fillMap.set(key_1, nextId_1);
|
|
248
|
+
return nextId_1;
|
|
249
|
+
}
|
|
250
|
+
// Patterned (non-solid) fill: `color` carries the foreground (pattern)
|
|
251
|
+
// color and `bgColor` carries the under-layer that shows through the
|
|
252
|
+
// pattern gaps. Solid fill keeps the legacy single-color path.
|
|
253
|
+
if (fillPattern &&
|
|
254
|
+
fillPattern !== "none" &&
|
|
255
|
+
fillPattern !== "solid") {
|
|
256
|
+
var record_2 = {
|
|
257
|
+
color: fgColor !== null && fgColor !== void 0 ? fgColor : bgColor,
|
|
258
|
+
bgColor: fgColor ? bgColor : undefined,
|
|
259
|
+
pattern: fillPattern,
|
|
260
|
+
};
|
|
261
|
+
var key_2 = this.serializeFill(record_2);
|
|
262
|
+
var existing_2 = this.fillMap.get(key_2);
|
|
263
|
+
if (typeof existing_2 === "number")
|
|
264
|
+
return existing_2;
|
|
265
|
+
var nextId_2 = this.fills.length;
|
|
266
|
+
this.fills.push(record_2);
|
|
267
|
+
this.fillMap.set(key_2, nextId_2);
|
|
268
|
+
return nextId_2;
|
|
269
|
+
}
|
|
270
|
+
// Solid fill: prefer explicit foregroundColor, fall back to
|
|
271
|
+
// backgroundColor for the common authored-as-bg case.
|
|
272
|
+
var color = fgColor !== null && fgColor !== void 0 ? fgColor : bgColor;
|
|
273
|
+
var record = {
|
|
274
|
+
color: color,
|
|
275
|
+
pattern: color ? "solid" : "none",
|
|
276
|
+
};
|
|
277
|
+
var key = this.serializeFill(record);
|
|
278
|
+
var existing = this.fillMap.get(key);
|
|
279
|
+
if (typeof existing === "number") {
|
|
280
|
+
return existing;
|
|
281
|
+
}
|
|
282
|
+
var nextId = this.fills.length;
|
|
283
|
+
this.fills.push(record);
|
|
284
|
+
this.fillMap.set(key, nextId);
|
|
285
|
+
return nextId;
|
|
286
|
+
};
|
|
287
|
+
StyleBuilder.prototype.getBorderId = function (borders) {
|
|
288
|
+
var _a;
|
|
289
|
+
// OOXML uses a single <diagonal> child plus diagonalUp/diagonalDown
|
|
290
|
+
// attributes. If both diagonals are present and identically styled the
|
|
291
|
+
// first non-null one defines the edge; otherwise each flag is set
|
|
292
|
+
// independently and both share the same painted style. This matches
|
|
293
|
+
// how Excel collapses diagonal pairs.
|
|
294
|
+
var diagonalEdge = convertBorderEdge((_a = borders === null || borders === void 0 ? void 0 : borders.diagonalUp) !== null && _a !== void 0 ? _a : borders === null || borders === void 0 ? void 0 : borders.diagonalDown);
|
|
295
|
+
var record = {
|
|
296
|
+
top: convertBorderEdge(borders === null || borders === void 0 ? void 0 : borders.top),
|
|
297
|
+
bottom: convertBorderEdge(borders === null || borders === void 0 ? void 0 : borders.bottom),
|
|
298
|
+
left: convertBorderEdge(borders === null || borders === void 0 ? void 0 : borders.left),
|
|
299
|
+
right: convertBorderEdge(borders === null || borders === void 0 ? void 0 : borders.right),
|
|
300
|
+
diagonal: diagonalEdge,
|
|
301
|
+
diagonalUp: !!(borders === null || borders === void 0 ? void 0 : borders.diagonalUp),
|
|
302
|
+
diagonalDown: !!(borders === null || borders === void 0 ? void 0 : borders.diagonalDown),
|
|
303
|
+
};
|
|
304
|
+
var key = this.serializeBorder(record);
|
|
305
|
+
var existing = this.borderMap.get(key);
|
|
306
|
+
if (typeof existing === "number") {
|
|
307
|
+
return existing;
|
|
308
|
+
}
|
|
309
|
+
var nextId = this.borders.length;
|
|
310
|
+
this.borders.push(record);
|
|
311
|
+
this.borderMap.set(key, nextId);
|
|
312
|
+
return nextId;
|
|
313
|
+
};
|
|
314
|
+
StyleBuilder.prototype.serializeFont = function (font) {
|
|
315
|
+
var _a, _b, _c;
|
|
316
|
+
return [
|
|
317
|
+
(_a = font.name) !== null && _a !== void 0 ? _a : "",
|
|
318
|
+
(_b = font.size) !== null && _b !== void 0 ? _b : "",
|
|
319
|
+
font.bold ? "1" : "",
|
|
320
|
+
font.italic ? "1" : "",
|
|
321
|
+
font.underline ? "1" : "",
|
|
322
|
+
font.strike ? "1" : "",
|
|
323
|
+
serializeColor(font.color),
|
|
324
|
+
(_c = font.vertAlign) !== null && _c !== void 0 ? _c : "",
|
|
325
|
+
].join("|");
|
|
326
|
+
};
|
|
327
|
+
StyleBuilder.prototype.buildFontRecord = function (format) {
|
|
328
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
329
|
+
if (!(format === null || format === void 0 ? void 0 : format.bold) &&
|
|
330
|
+
!(format === null || format === void 0 ? void 0 : format.italic) &&
|
|
331
|
+
!(format === null || format === void 0 ? void 0 : format.underline) &&
|
|
332
|
+
!(format === null || format === void 0 ? void 0 : format.strikethrough) &&
|
|
333
|
+
!(format === null || format === void 0 ? void 0 : format.fontSize) &&
|
|
334
|
+
!(format === null || format === void 0 ? void 0 : format.fontFamily) &&
|
|
335
|
+
!(format === null || format === void 0 ? void 0 : format.color) &&
|
|
336
|
+
!(format === null || format === void 0 ? void 0 : format.baselineOffset)) {
|
|
337
|
+
return undefined;
|
|
338
|
+
}
|
|
339
|
+
var vertAlign = (format === null || format === void 0 ? void 0 : format.baselineOffset) === "superscript" ||
|
|
340
|
+
(format === null || format === void 0 ? void 0 : format.baselineOffset) === "subscript"
|
|
341
|
+
? format.baselineOffset
|
|
342
|
+
: undefined;
|
|
343
|
+
return {
|
|
344
|
+
bold: (_a = format === null || format === void 0 ? void 0 : format.bold) !== null && _a !== void 0 ? _a : undefined,
|
|
345
|
+
italic: (_b = format === null || format === void 0 ? void 0 : format.italic) !== null && _b !== void 0 ? _b : undefined,
|
|
346
|
+
underline: (_c = format === null || format === void 0 ? void 0 : format.underline) !== null && _c !== void 0 ? _c : undefined,
|
|
347
|
+
strike: (_d = format === null || format === void 0 ? void 0 : format.strikethrough) !== null && _d !== void 0 ? _d : undefined,
|
|
348
|
+
size: (_e = format === null || format === void 0 ? void 0 : format.fontSize) !== null && _e !== void 0 ? _e : undefined,
|
|
349
|
+
name: (_f = format === null || format === void 0 ? void 0 : format.fontFamily) !== null && _f !== void 0 ? _f : undefined,
|
|
350
|
+
color: (_g = format === null || format === void 0 ? void 0 : format.color) !== null && _g !== void 0 ? _g : undefined,
|
|
351
|
+
vertAlign: vertAlign,
|
|
352
|
+
};
|
|
353
|
+
};
|
|
354
|
+
StyleBuilder.prototype.buildFontXml = function (font) {
|
|
355
|
+
var color = serializeColorXml(font.color);
|
|
356
|
+
var name = sanitizeFontName(font.name);
|
|
357
|
+
return "<font>".concat(font.size ? "<sz val=\"".concat(font.size, "\"/>") : "").concat(name ? "<name val=\"".concat(escapeXml(name), "\"/>") : "").concat(font.bold ? "<b/>" : "").concat(font.italic ? "<i/>" : "").concat(font.underline ? "<u/>" : "").concat(font.strike ? "<strike/>" : "").concat(font.vertAlign ? "<vertAlign val=\"".concat(font.vertAlign, "\"/>") : "").concat(color ? "<color ".concat(color, "/>") : "", "</font>");
|
|
358
|
+
};
|
|
359
|
+
StyleBuilder.prototype.buildFillXml = function (fill, forDxf) {
|
|
360
|
+
var _a, _b;
|
|
361
|
+
if (forDxf === void 0) { forDxf = false; }
|
|
362
|
+
// Gradient fill — emits `<gradientFill>` with `<stop>` children.
|
|
363
|
+
// Excel accepts gradients in cell fills (not dxf), so when this is
|
|
364
|
+
// requested for a dxf record we degrade to a solid using the first
|
|
365
|
+
// stop's color so the conditional format still has SOMETHING to paint.
|
|
366
|
+
if (fill.gradient && ((_a = fill.gradient.stops) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
367
|
+
if (forDxf) {
|
|
368
|
+
var first = fill.gradient.stops[0].color;
|
|
369
|
+
var fallback = serializeColorXml(first);
|
|
370
|
+
if (fallback) {
|
|
371
|
+
return "<fill><patternFill patternType=\"solid\"><fgColor ".concat(fallback, "/><bgColor ").concat(fallback, "/></patternFill></fill>");
|
|
372
|
+
}
|
|
373
|
+
return "<fill><patternFill patternType=\"none\"/></fill>";
|
|
374
|
+
}
|
|
375
|
+
return this.buildGradientFillXml(fill.gradient);
|
|
376
|
+
}
|
|
377
|
+
var pattern = (_b = fill.pattern) !== null && _b !== void 0 ? _b : (fill.color ? "solid" : "none");
|
|
378
|
+
if (pattern === "gray125" && !fill.color) {
|
|
379
|
+
return "<fill><patternFill patternType=\"gray125\"/></fill>";
|
|
380
|
+
}
|
|
381
|
+
var color = serializeColorXml(fill.color);
|
|
382
|
+
if (pattern === "none" || !color) {
|
|
383
|
+
return "<fill><patternFill patternType=\"none\"/></fill>";
|
|
384
|
+
}
|
|
385
|
+
if (pattern === "solid") {
|
|
386
|
+
if (forDxf) {
|
|
387
|
+
return "<fill><patternFill patternType=\"solid\"><fgColor ".concat(color, "/><bgColor ").concat(color, "/></patternFill></fill>");
|
|
388
|
+
}
|
|
389
|
+
return "<fill><patternFill patternType=\"solid\"><fgColor ".concat(color, "/><bgColor indexed=\"64\"/></patternFill></fill>");
|
|
390
|
+
}
|
|
391
|
+
// True patterned fill — emit both fg and bg if available.
|
|
392
|
+
var bgColor = serializeColorXml(fill.bgColor);
|
|
393
|
+
var bgAttr = bgColor ? "<bgColor ".concat(bgColor, "/>") : "<bgColor indexed=\"64\"/>";
|
|
394
|
+
return "<fill><patternFill patternType=\"".concat(pattern, "\"><fgColor ").concat(color, "/>").concat(bgAttr, "</patternFill></fill>");
|
|
395
|
+
};
|
|
396
|
+
StyleBuilder.prototype.buildGradientFillXml = function (gradient) {
|
|
397
|
+
var stopsXml = gradient.stops
|
|
398
|
+
.map(function (s) {
|
|
399
|
+
var color = serializeColorXml(s.color);
|
|
400
|
+
return "<stop position=\"".concat(s.position, "\">").concat(color ? "<color ".concat(color, "/>") : "", "</stop>");
|
|
401
|
+
})
|
|
402
|
+
.join("");
|
|
403
|
+
var attrs = [];
|
|
404
|
+
if (gradient.type === "path") {
|
|
405
|
+
attrs.push('type="path"');
|
|
406
|
+
if (gradient.left != null)
|
|
407
|
+
attrs.push("left=\"".concat(gradient.left, "\""));
|
|
408
|
+
if (gradient.right != null)
|
|
409
|
+
attrs.push("right=\"".concat(gradient.right, "\""));
|
|
410
|
+
if (gradient.top != null)
|
|
411
|
+
attrs.push("top=\"".concat(gradient.top, "\""));
|
|
412
|
+
if (gradient.bottom != null)
|
|
413
|
+
attrs.push("bottom=\"".concat(gradient.bottom, "\""));
|
|
414
|
+
}
|
|
415
|
+
else if (gradient.degree != null && gradient.degree !== 0) {
|
|
416
|
+
attrs.push("degree=\"".concat(gradient.degree, "\""));
|
|
417
|
+
}
|
|
418
|
+
var attrStr = attrs.length ? " " + attrs.join(" ") : "";
|
|
419
|
+
return "<fill><gradientFill".concat(attrStr, ">").concat(stopsXml, "</gradientFill></fill>");
|
|
420
|
+
};
|
|
421
|
+
StyleBuilder.prototype.serializeFill = function (fill) {
|
|
422
|
+
var _a, _b, _c, _d, _e, _f;
|
|
423
|
+
var gradientKey = fill.gradient
|
|
424
|
+
? "G:".concat(fill.gradient.type, ":").concat((_a = fill.gradient.degree) !== null && _a !== void 0 ? _a : "", ":").concat((_b = fill.gradient.left) !== null && _b !== void 0 ? _b : "", ":").concat((_c = fill.gradient.right) !== null && _c !== void 0 ? _c : "", ":").concat((_d = fill.gradient.top) !== null && _d !== void 0 ? _d : "", ":").concat((_e = fill.gradient.bottom) !== null && _e !== void 0 ? _e : "", ":").concat(fill.gradient.stops
|
|
425
|
+
.map(function (s) { return "".concat(s.position, ",").concat(s.color); })
|
|
426
|
+
.join("|"))
|
|
427
|
+
: "";
|
|
428
|
+
return "".concat((_f = fill.pattern) !== null && _f !== void 0 ? _f : "", ":").concat(serializeColor(fill.color), ":").concat(serializeColor(fill.bgColor), ":").concat(gradientKey);
|
|
429
|
+
};
|
|
430
|
+
StyleBuilder.prototype.serializeBorder = function (border) {
|
|
431
|
+
return [
|
|
432
|
+
serializeBorderEdge(border.top),
|
|
433
|
+
serializeBorderEdge(border.bottom),
|
|
434
|
+
serializeBorderEdge(border.left),
|
|
435
|
+
serializeBorderEdge(border.right),
|
|
436
|
+
serializeBorderEdge(border.diagonal),
|
|
437
|
+
border.diagonalUp ? "1" : "",
|
|
438
|
+
border.diagonalDown ? "1" : "",
|
|
439
|
+
].join("|");
|
|
440
|
+
};
|
|
441
|
+
StyleBuilder.prototype.serializeDxf = function (dxf) {
|
|
442
|
+
return "".concat(dxf.fill ? this.serializeFill(dxf.fill) : "", "|").concat(dxf.font ? this.serializeFont(dxf.font) : "");
|
|
443
|
+
};
|
|
444
|
+
StyleBuilder.prototype.toXml = function () {
|
|
445
|
+
var _this = this;
|
|
446
|
+
var numFmtXml = this.numberFormats.length
|
|
447
|
+
? "<numFmts count=\"".concat(this.numberFormats.length, "\">").concat(this.numberFormats
|
|
448
|
+
.map(function (fmt) {
|
|
449
|
+
return "<numFmt numFmtId=\"".concat(fmt.id, "\" formatCode=\"").concat(escapeXml(fmt.format), "\"/>");
|
|
450
|
+
})
|
|
451
|
+
.join(""), "</numFmts>")
|
|
452
|
+
: "<numFmts count=\"0\"/>";
|
|
453
|
+
var fontXml = "<fonts count=\"".concat(this.fonts.length, "\">").concat(this.fonts
|
|
454
|
+
.map(function (font) { return _this.buildFontXml(font); })
|
|
455
|
+
.join(""), "</fonts>");
|
|
456
|
+
var fillXml = "<fills count=\"".concat(this.fills.length, "\">").concat(this.fills
|
|
457
|
+
.map(function (fill) { return _this.buildFillXml(fill, false); })
|
|
458
|
+
.join(""), "</fills>");
|
|
459
|
+
var borderXml = "<borders count=\"".concat(this.borders.length, "\">").concat(this.borders
|
|
460
|
+
.map(function (border) {
|
|
461
|
+
var top = serializeBorderEdgeXml(border.top, "top");
|
|
462
|
+
var bottom = serializeBorderEdgeXml(border.bottom, "bottom");
|
|
463
|
+
var left = serializeBorderEdgeXml(border.left, "left");
|
|
464
|
+
var right = serializeBorderEdgeXml(border.right, "right");
|
|
465
|
+
var diagonal = border.diagonal
|
|
466
|
+
? serializeBorderEdgeXml(border.diagonal, "diagonal")
|
|
467
|
+
: "<diagonal/>";
|
|
468
|
+
var diagonalAttrs = "".concat(border.diagonalUp ? " diagonalUp=\"1\"" : "").concat(border.diagonalDown ? " diagonalDown=\"1\"" : "");
|
|
469
|
+
return "<border".concat(diagonalAttrs, ">").concat(left).concat(right).concat(top).concat(bottom).concat(diagonal, "</border>");
|
|
470
|
+
})
|
|
471
|
+
.join(""), "</borders>");
|
|
472
|
+
var cellXfsXml = "<cellXfs count=\"".concat(this.cellXfs.length, "\">").concat(this.cellXfs
|
|
473
|
+
.map(function (record) {
|
|
474
|
+
var alignment = serializeAlignment(record);
|
|
475
|
+
var protection = serializeProtection(record);
|
|
476
|
+
// ECMA-376 §18.8.45: `applyX="1"` signals that this xf overrides
|
|
477
|
+
// the named-style parent (xfId=0) for that aspect. Excel tolerates
|
|
478
|
+
// missing applyX, but stricter readers (older LibreOffice, some
|
|
479
|
+
// headless engines) honor only the parent's value when applyX is
|
|
480
|
+
// absent. Emit each flag when the corresponding id deviates from
|
|
481
|
+
// the parent's defaults (0 across the board) or when alignment is
|
|
482
|
+
// present.
|
|
483
|
+
var applyNumberFormat = record.numFmtId !== 0 ? " applyNumberFormat=\"1\"" : "";
|
|
484
|
+
var applyFont = record.fontId !== 0 ? " applyFont=\"1\"" : "";
|
|
485
|
+
var applyFill = record.fillId !== 0 ? " applyFill=\"1\"" : "";
|
|
486
|
+
var applyBorder = record.borderId !== 0 ? " applyBorder=\"1\"" : "";
|
|
487
|
+
var applyAlignment = alignment ? " applyAlignment=\"1\"" : "";
|
|
488
|
+
var applyProtection = protection ? " applyProtection=\"1\"" : "";
|
|
489
|
+
return "<xf numFmtId=\"".concat(record.numFmtId, "\" fontId=\"").concat(record.fontId, "\" fillId=\"").concat(record.fillId, "\" borderId=\"").concat(record.borderId, "\" xfId=\"0\"").concat(applyNumberFormat).concat(applyFont).concat(applyFill).concat(applyBorder).concat(applyAlignment).concat(applyProtection, ">").concat(alignment).concat(protection, "</xf>");
|
|
490
|
+
})
|
|
491
|
+
.join(""), "</cellXfs>");
|
|
492
|
+
var resolvedTableStyles = this.customTableStyles.map(function (style) {
|
|
493
|
+
var e_1, _a;
|
|
494
|
+
var resolvedElements = [];
|
|
495
|
+
try {
|
|
496
|
+
for (var _b = __values(style.elements), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
497
|
+
var el = _c.value;
|
|
498
|
+
var dxfId = _this.registerDifferentialFormat(__assign(__assign({}, (el.backgroundColor
|
|
499
|
+
? { backgroundColor: el.backgroundColor }
|
|
500
|
+
: {})), (el.textColor || el.bold || el.italic
|
|
501
|
+
? {
|
|
502
|
+
textFormat: __assign(__assign(__assign({}, (el.textColor ? { color: el.textColor } : {})), (el.bold ? { bold: true } : {})), (el.italic ? { italic: true } : {})),
|
|
503
|
+
}
|
|
504
|
+
: {})));
|
|
505
|
+
// Drop elements that didn't contribute any recognized format —
|
|
506
|
+
// an undefined dxfId means `registerDifferentialFormat` saw
|
|
507
|
+
// an empty record. (dxfId === 0 is the valid first-slot
|
|
508
|
+
// entry, so we explicitly exclude only `undefined`.)
|
|
509
|
+
if (dxfId === undefined)
|
|
510
|
+
continue;
|
|
511
|
+
resolvedElements.push(__assign({ type: el.type, dxfId: dxfId }, (el.size != null ? { size: el.size } : {})));
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
515
|
+
finally {
|
|
516
|
+
try {
|
|
517
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
518
|
+
}
|
|
519
|
+
finally { if (e_1) throw e_1.error; }
|
|
520
|
+
}
|
|
521
|
+
return {
|
|
522
|
+
name: style.name,
|
|
523
|
+
pivot: style.pivot,
|
|
524
|
+
elements: resolvedElements,
|
|
525
|
+
};
|
|
526
|
+
});
|
|
527
|
+
var dxfsXml = this.dxfs.length
|
|
528
|
+
? "<dxfs count=\"".concat(this.dxfs.length, "\">").concat(this.dxfs
|
|
529
|
+
.map(function (dxf) {
|
|
530
|
+
var font = dxf.font ? _this.buildFontXml(dxf.font) : "";
|
|
531
|
+
var fill = dxf.fill ? _this.buildFillXml(dxf.fill, true) : "";
|
|
532
|
+
return "<dxf>".concat(font).concat(fill, "</dxf>");
|
|
533
|
+
})
|
|
534
|
+
.join(""), "</dxfs>")
|
|
535
|
+
: "<dxfs count=\"0\"/>";
|
|
536
|
+
var cellStylesXml = "<cellStyles count=\"".concat(this.namedCellStyles.length, "\">").concat(this.namedCellStyles
|
|
537
|
+
.map(function (s) {
|
|
538
|
+
var parts = ["name=\"".concat(escapeXml(s.name), "\"")];
|
|
539
|
+
parts.push("xfId=\"".concat(s.xfId, "\""));
|
|
540
|
+
if (s.builtinId != null)
|
|
541
|
+
parts.push("builtinId=\"".concat(s.builtinId, "\""));
|
|
542
|
+
if (s.iLevel != null)
|
|
543
|
+
parts.push("iLevel=\"".concat(s.iLevel, "\""));
|
|
544
|
+
if (s.hidden)
|
|
545
|
+
parts.push("hidden=\"1\"");
|
|
546
|
+
if (s.customBuiltin)
|
|
547
|
+
parts.push("customBuiltin=\"1\"");
|
|
548
|
+
return "<cellStyle ".concat(parts.join(" "), "/>");
|
|
549
|
+
})
|
|
550
|
+
.join(""), "</cellStyles>");
|
|
551
|
+
// Emit user-authored table styles. Excel REQUIRES the
|
|
552
|
+
// `defaultTableStyle` + `defaultPivotStyle` attributes to be the
|
|
553
|
+
// names of built-in styles (or styles defined here) — we keep
|
|
554
|
+
// the built-in defaults regardless of whether any custom styles
|
|
555
|
+
// are present.
|
|
556
|
+
var customTableStylesXml = resolvedTableStyles
|
|
557
|
+
.filter(function (s) { return s.elements.length > 0; })
|
|
558
|
+
.map(function (s) {
|
|
559
|
+
var pivotAttr = s.pivot ? " pivot=\"1\"" : " pivot=\"0\"";
|
|
560
|
+
var elementsXml = s.elements
|
|
561
|
+
.map(function (el) {
|
|
562
|
+
var sizeAttr = el.size != null ? " size=\"".concat(el.size, "\"") : "";
|
|
563
|
+
return "<tableStyleElement type=\"".concat(escapeXml(el.type), "\" dxfId=\"").concat(el.dxfId, "\"").concat(sizeAttr, "/>");
|
|
564
|
+
})
|
|
565
|
+
.join("");
|
|
566
|
+
return "<tableStyle name=\"".concat(escapeXml(s.name), "\"").concat(pivotAttr, " count=\"").concat(s.elements.length, "\">").concat(elementsXml, "</tableStyle>");
|
|
567
|
+
})
|
|
568
|
+
.join("");
|
|
569
|
+
var tableStylesXml = "<tableStyles count=\"".concat(resolvedTableStyles.filter(function (s) { return s.elements.length > 0; }).length, "\" defaultTableStyle=\"TableStyleMedium2\" defaultPivotStyle=\"PivotStyleLight16\">").concat(customTableStylesXml, "</tableStyles>");
|
|
570
|
+
var styleXml = "".concat(XML_DECLARATION, "<styleSheet xmlns=\"").concat(WORKSHEET_NS, "\">").concat(numFmtXml).concat(fontXml).concat(fillXml).concat(borderXml, "<cellStyleXfs count=\"1\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/></cellStyleXfs>").concat(cellXfsXml).concat(cellStylesXml).concat(dxfsXml).concat(tableStylesXml, "</styleSheet>");
|
|
571
|
+
return styleXml;
|
|
572
|
+
};
|
|
573
|
+
return StyleBuilder;
|
|
574
|
+
}());
|
|
575
|
+
export { StyleBuilder };
|
|
576
|
+
var convertBorderEdge = function (border) {
|
|
577
|
+
var _a;
|
|
578
|
+
if (!border || !border.style)
|
|
579
|
+
return undefined;
|
|
580
|
+
return {
|
|
581
|
+
style: mapBorderStyle(border.style),
|
|
582
|
+
color: (_a = border.color) !== null && _a !== void 0 ? _a : undefined,
|
|
583
|
+
};
|
|
584
|
+
};
|
|
585
|
+
var mapBorderStyle = function (style) {
|
|
586
|
+
switch (style) {
|
|
587
|
+
case "dashed":
|
|
588
|
+
return "dashed";
|
|
589
|
+
case "dotted":
|
|
590
|
+
return "dotted";
|
|
591
|
+
case "double":
|
|
592
|
+
return "double";
|
|
593
|
+
case "solid_medium":
|
|
594
|
+
return "medium";
|
|
595
|
+
case "solid_thick":
|
|
596
|
+
return "thick";
|
|
597
|
+
case "hair":
|
|
598
|
+
return "hair";
|
|
599
|
+
case "mediumDashed":
|
|
600
|
+
return "mediumDashed";
|
|
601
|
+
case "mediumDashDot":
|
|
602
|
+
return "mediumDashDot";
|
|
603
|
+
case "dashDot":
|
|
604
|
+
return "dashDot";
|
|
605
|
+
case "dashDotDot":
|
|
606
|
+
return "dashDotDot";
|
|
607
|
+
case "slantDashDot":
|
|
608
|
+
return "slantDashDot";
|
|
609
|
+
case "thin":
|
|
610
|
+
// openpyxl/Excel's "thin" is the regular 1px border. The previous
|
|
611
|
+
// mapping returned Excel's "hair" (the lightest sub-1px border),
|
|
612
|
+
// which produced near-invisible borders for any caller — including
|
|
613
|
+
// athena-openpyxl — that explicitly asks for `Side(style="thin")`.
|
|
614
|
+
return "thin";
|
|
615
|
+
case "solid":
|
|
616
|
+
default:
|
|
617
|
+
// rowsncolumns' generic "solid" remains aliased to Excel's "thin"
|
|
618
|
+
// (the regular 1px border) when no explicit thickness is requested.
|
|
619
|
+
return "thin";
|
|
620
|
+
}
|
|
621
|
+
};
|
|
622
|
+
var serializeBorderEdge = function (edge) {
|
|
623
|
+
if (!edge)
|
|
624
|
+
return "";
|
|
625
|
+
return "".concat(edge.style || "", ":").concat(serializeColor(edge.color));
|
|
626
|
+
};
|
|
627
|
+
var serializeBorderEdgeXml = function (edge, side) {
|
|
628
|
+
if (!(edge === null || edge === void 0 ? void 0 : edge.style)) {
|
|
629
|
+
return "<".concat(side, "/>");
|
|
630
|
+
}
|
|
631
|
+
var color = serializeColorXml(edge.color);
|
|
632
|
+
return "<".concat(side, " style=\"").concat(edge.style, "\">").concat(color ? "<color ".concat(color, "/>") : "", "</").concat(side, ">");
|
|
633
|
+
};
|
|
634
|
+
var serializeColor = function (color) {
|
|
635
|
+
var _a, _b;
|
|
636
|
+
if (!color)
|
|
637
|
+
return "";
|
|
638
|
+
if (typeof color === "string") {
|
|
639
|
+
return (_a = normalizeHex(color)) !== null && _a !== void 0 ? _a : "";
|
|
640
|
+
}
|
|
641
|
+
return "theme".concat(color.theme, ":").concat((_b = color.tint) !== null && _b !== void 0 ? _b : "");
|
|
642
|
+
};
|
|
643
|
+
var serializeColorXml = function (color) {
|
|
644
|
+
if (!color)
|
|
645
|
+
return undefined;
|
|
646
|
+
if (typeof color === "string") {
|
|
647
|
+
var hex = normalizeHex(color);
|
|
648
|
+
return hex ? "rgb=\"".concat(hex, "\"") : undefined;
|
|
649
|
+
}
|
|
650
|
+
var tintAttr = typeof color.tint === "number" ? " tint=\"".concat(color.tint, "\"") : "";
|
|
651
|
+
return "theme=\"".concat(color.theme, "\"").concat(tintAttr);
|
|
652
|
+
};
|
|
653
|
+
// Excel <name val=""/> expects a single font family ≤31 chars. CSS font stacks
|
|
654
|
+
// (`InterVariable, system-ui, sans-serif`) make Excel reject the entire styles
|
|
655
|
+
// part. Take the first family and strip surrounding quotes.
|
|
656
|
+
var sanitizeFontName = function (name) {
|
|
657
|
+
if (!name || typeof name !== "string")
|
|
658
|
+
return undefined;
|
|
659
|
+
var first = name.split(",")[0].trim().replace(/^['"]|['"]$/g, "");
|
|
660
|
+
if (!first)
|
|
661
|
+
return undefined;
|
|
662
|
+
return first.length > 31 ? first.slice(0, 31) : first;
|
|
663
|
+
};
|
|
664
|
+
var HEX6_RE = /^[0-9A-Fa-f]{6}$/;
|
|
665
|
+
var HEX8_RE = /^[0-9A-Fa-f]{8}$/;
|
|
666
|
+
var RGB_FUNC_RE = /^rgba?\s*\(\s*(\d+)\s*[, ]\s*(\d+)\s*[, ]\s*(\d+)(?:\s*[, /]\s*([\d.]+))?\s*\)$/i;
|
|
667
|
+
// Returns AARRGGBB hex for any recognized color string; undefined otherwise.
|
|
668
|
+
// Excel rejects the whole styles.xml if rgb="" contains non-hex or unescaped
|
|
669
|
+
// quotes (which CSS strings like `font-family:"Times New Roman"` would produce).
|
|
670
|
+
var normalizeHex = function (color) {
|
|
671
|
+
if (typeof color !== "string")
|
|
672
|
+
return undefined;
|
|
673
|
+
var trimmed = color.trim();
|
|
674
|
+
if (!trimmed)
|
|
675
|
+
return undefined;
|
|
676
|
+
var noHash = trimmed.startsWith("#") ? trimmed.slice(1) : trimmed;
|
|
677
|
+
if (HEX8_RE.test(noHash))
|
|
678
|
+
return noHash.toUpperCase();
|
|
679
|
+
if (HEX6_RE.test(noHash))
|
|
680
|
+
return "FF".concat(noHash.toUpperCase());
|
|
681
|
+
var m = RGB_FUNC_RE.exec(trimmed);
|
|
682
|
+
if (m) {
|
|
683
|
+
var toHex = function (s) {
|
|
684
|
+
var n = Math.max(0, Math.min(255, parseInt(s, 10) | 0));
|
|
685
|
+
return n.toString(16).padStart(2, "0").toUpperCase();
|
|
686
|
+
};
|
|
687
|
+
var alpha = m[4] != null
|
|
688
|
+
? Math.max(0, Math.min(255, Math.round(parseFloat(m[4]) * 255)))
|
|
689
|
+
.toString(16)
|
|
690
|
+
.padStart(2, "0")
|
|
691
|
+
.toUpperCase()
|
|
692
|
+
: "FF";
|
|
693
|
+
return "".concat(alpha).concat(toHex(m[1])).concat(toHex(m[2])).concat(toHex(m[3]));
|
|
694
|
+
}
|
|
695
|
+
return undefined;
|
|
696
|
+
};
|
|
697
|
+
var serializeAlignment = function (record) {
|
|
698
|
+
var attrs = [];
|
|
699
|
+
if (record.horizontalAlignment) {
|
|
700
|
+
attrs.push("horizontal=\"".concat(record.horizontalAlignment, "\""));
|
|
701
|
+
}
|
|
702
|
+
if (record.verticalAlignment) {
|
|
703
|
+
attrs.push("vertical=\"".concat(record.verticalAlignment, "\""));
|
|
704
|
+
}
|
|
705
|
+
if (record.wrapText) {
|
|
706
|
+
attrs.push("wrapText=\"1\"");
|
|
707
|
+
}
|
|
708
|
+
if (typeof record.indent === "number" &&
|
|
709
|
+
Number.isFinite(record.indent) &&
|
|
710
|
+
record.indent > 0) {
|
|
711
|
+
attrs.push("indent=\"".concat(record.indent, "\""));
|
|
712
|
+
}
|
|
713
|
+
if (typeof record.relativeIndent === "number" &&
|
|
714
|
+
Number.isFinite(record.relativeIndent) &&
|
|
715
|
+
record.relativeIndent !== 0) {
|
|
716
|
+
attrs.push("relativeIndent=\"".concat(record.relativeIndent, "\""));
|
|
717
|
+
}
|
|
718
|
+
if (record.textRotation !== undefined && record.textRotation !== null) {
|
|
719
|
+
// Excel encodes "vertical (stacked)" text as the magic value 255.
|
|
720
|
+
var rotation = record.textRotation === "vertical" ? 255 : record.textRotation;
|
|
721
|
+
if (Number.isFinite(rotation) && rotation !== 0) {
|
|
722
|
+
attrs.push("textRotation=\"".concat(rotation, "\""));
|
|
723
|
+
}
|
|
724
|
+
}
|
|
725
|
+
if (record.shrinkToFit) {
|
|
726
|
+
attrs.push("shrinkToFit=\"1\"");
|
|
727
|
+
}
|
|
728
|
+
if (!attrs.length)
|
|
729
|
+
return "";
|
|
730
|
+
return "<alignment ".concat(attrs.join(" "), "/>");
|
|
731
|
+
};
|
|
732
|
+
var serializeXf = function (record) {
|
|
733
|
+
var _a, _b, _c, _d, _e;
|
|
734
|
+
return [
|
|
735
|
+
record.numFmtId,
|
|
736
|
+
record.fontId,
|
|
737
|
+
record.fillId,
|
|
738
|
+
record.borderId,
|
|
739
|
+
record.wrapText ? 1 : 0,
|
|
740
|
+
(_a = record.horizontalAlignment) !== null && _a !== void 0 ? _a : "",
|
|
741
|
+
(_b = record.verticalAlignment) !== null && _b !== void 0 ? _b : "",
|
|
742
|
+
(_c = record.indent) !== null && _c !== void 0 ? _c : "",
|
|
743
|
+
(_d = record.relativeIndent) !== null && _d !== void 0 ? _d : "",
|
|
744
|
+
(_e = record.textRotation) !== null && _e !== void 0 ? _e : "",
|
|
745
|
+
record.shrinkToFit ? 1 : 0,
|
|
746
|
+
record.protectionLocked === false ? 0 : "",
|
|
747
|
+
record.protectionHidden === true ? 1 : "",
|
|
748
|
+
].join(":");
|
|
749
|
+
};
|
|
750
|
+
var serializeProtection = function (record) {
|
|
751
|
+
var attrs = [];
|
|
752
|
+
// Only emit when the value deviates from Excel's defaults (locked=true,
|
|
753
|
+
// hidden=false) — otherwise we'd flag every xf as having protection.
|
|
754
|
+
if (record.protectionLocked === false) {
|
|
755
|
+
attrs.push("locked=\"0\"");
|
|
756
|
+
}
|
|
757
|
+
if (record.protectionHidden === true) {
|
|
758
|
+
attrs.push("hidden=\"1\"");
|
|
759
|
+
}
|
|
760
|
+
if (!attrs.length)
|
|
761
|
+
return "";
|
|
762
|
+
return "<protection ".concat(attrs.join(" "), "/>");
|
|
763
|
+
};
|
|
764
|
+
var normalizeHorizontalAlignment = function (value) {
|
|
765
|
+
var allowed = new Set([
|
|
766
|
+
"general",
|
|
767
|
+
"left",
|
|
768
|
+
"center",
|
|
769
|
+
"right",
|
|
770
|
+
"fill",
|
|
771
|
+
"justify",
|
|
772
|
+
"centerContinuous",
|
|
773
|
+
"distributed",
|
|
774
|
+
]);
|
|
775
|
+
if (!value)
|
|
776
|
+
return undefined;
|
|
777
|
+
return allowed.has(value) ? value : undefined;
|
|
778
|
+
};
|
|
779
|
+
var normalizeVerticalAlignment = function (value) {
|
|
780
|
+
if (!value)
|
|
781
|
+
return undefined;
|
|
782
|
+
if (value === "middle")
|
|
783
|
+
return "center";
|
|
784
|
+
var allowed = new Set([
|
|
785
|
+
"top",
|
|
786
|
+
"center",
|
|
787
|
+
"bottom",
|
|
788
|
+
"justify",
|
|
789
|
+
"distributed",
|
|
790
|
+
]);
|
|
791
|
+
return allowed.has(value) ? value : undefined;
|
|
792
|
+
};
|
|
793
|
+
var XML_DECLARATION = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>";
|
|
794
|
+
var WORKSHEET_NS = "http://schemas.openxmlformats.org/spreadsheetml/2006/main";
|
|
795
|
+
var normalizeFormat = function (format, cellXfs) {
|
|
796
|
+
var _a;
|
|
797
|
+
if (format && isStyleReference(format)) {
|
|
798
|
+
var styleId = (_a = format.sid) !== null && _a !== void 0 ? _a : format.styleId;
|
|
799
|
+
if (styleId) {
|
|
800
|
+
return cellXfs === null || cellXfs === void 0 ? void 0 : cellXfs.get(styleId);
|
|
801
|
+
}
|
|
802
|
+
return undefined;
|
|
803
|
+
}
|
|
804
|
+
return format !== null && format !== void 0 ? format : undefined;
|
|
805
|
+
};
|
|
806
|
+
var escapeXml = function (value) {
|
|
807
|
+
return value
|
|
808
|
+
.replace(/&/g, "&")
|
|
809
|
+
.replace(/</g, "<")
|
|
810
|
+
.replace(/>/g, ">")
|
|
811
|
+
.replace(/"/g, """)
|
|
812
|
+
.replace(/'/g, "'");
|
|
813
|
+
};
|