@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,399 @@
|
|
|
1
|
+
import { parse } from "@rowsncolumns/date-parser";
|
|
2
|
+
import { isAFormula, isNil, toDate, toSerial } from "@rowsncolumns/utils";
|
|
3
|
+
export const pattern_percent = "0%";
|
|
4
|
+
export const pattern_percent_decimal = "0.00%";
|
|
5
|
+
export const pattern_currency = '"$"#,##0';
|
|
6
|
+
export const pattern_currency_decimal = '"$"#,##0.00';
|
|
7
|
+
export const date_pattern = "mm/dd/yyyy";
|
|
8
|
+
export const time_pattern_base = "hh:mm:ss";
|
|
9
|
+
export const time_pattern = `hh:mm:ss AM/PM`;
|
|
10
|
+
export const time_pattern_short = `h:mm AM/PM`;
|
|
11
|
+
const CURRENCY_PATTERN = /^[£$€¥₹]\d+(?:[.,]\d{1,2})?$|^\d+(?:[.,]\d{1,2})?[£$€¥₹]$/;
|
|
12
|
+
const CURRENCY_GROUPING_CHARS = /[,\s]/g;
|
|
13
|
+
const NUMBER_CLEANUP_PATTERN = /[$,%]/gi;
|
|
14
|
+
const NUMBER_CONVERSION_PATTERN = /[^0-9.-]+/g;
|
|
15
|
+
const TRUE_UPPER = "TRUE";
|
|
16
|
+
const FALSE_UPPER = "FALSE";
|
|
17
|
+
const PERCENT_CHAR = "%";
|
|
18
|
+
const PATTERN_SEPARATOR = ";";
|
|
19
|
+
const DECIMAL_CLEANUP_REGEX = /[^0-9.,]/g;
|
|
20
|
+
const DECIMAL_SPLIT_REGEX = /[.]/;
|
|
21
|
+
// const THOUSAND_REGEX = /(\,[#,0]{3})/gi;
|
|
22
|
+
// const THOUSAND_PATTERN = ",##0";
|
|
23
|
+
const ISO_DATE_REGEX = /^(\d{4})[-/.](\d{2})[-/.](\d{2})$/;
|
|
24
|
+
const TIME_REGEX = {
|
|
25
|
+
FULL_WITH_MERIDIAN: /^(\d{1,2}):(\d{1,2}):(\d{1,2})\s*(AM|PM|a|p)$/i,
|
|
26
|
+
FULL: /^(\d{1,2}):(\d{1,2}):(\d{1,2})$/,
|
|
27
|
+
SHORT_WITH_MERIDIAN: /^(\d{1,2}):(\d{1,2})\s*(AM|PM)$/i,
|
|
28
|
+
SHORT: /^(\d{1,2}):(\d{1,2})$/,
|
|
29
|
+
};
|
|
30
|
+
const TIME_FORMATS = {
|
|
31
|
+
FULL_WITH_MERIDIAN: "hh:mm:ss AM/PM",
|
|
32
|
+
FULL: "hh:mm:ss",
|
|
33
|
+
SHORT_WITH_MERIDIAN: "hh:mm AM/PM",
|
|
34
|
+
SHORT: "hh:mm",
|
|
35
|
+
};
|
|
36
|
+
const DECIMAL_REGEX = new RegExp("(?<prefix>[\\d#,]+)(?<decimal>\\.)?(?<suffix>\\d{1,})?", "i");
|
|
37
|
+
export const isCurrency = (value) => {
|
|
38
|
+
if (value === void 0)
|
|
39
|
+
return false;
|
|
40
|
+
const text = String(value).trim();
|
|
41
|
+
const normalized = text.replace(CURRENCY_GROUPING_CHARS, "");
|
|
42
|
+
return CURRENCY_PATTERN.test(normalized);
|
|
43
|
+
};
|
|
44
|
+
export const isBoolean = (value) => {
|
|
45
|
+
if (typeof value === "boolean")
|
|
46
|
+
return true;
|
|
47
|
+
if (typeof value !== "string" && typeof value !== "number")
|
|
48
|
+
return false;
|
|
49
|
+
const upperValue = String(value).toUpperCase();
|
|
50
|
+
return upperValue === TRUE_UPPER || upperValue === FALSE_UPPER;
|
|
51
|
+
};
|
|
52
|
+
export const isPercentage = (value) => {
|
|
53
|
+
if (isNil(value))
|
|
54
|
+
return false;
|
|
55
|
+
const strValue = String(value).trim();
|
|
56
|
+
return strValue.endsWith(PERCENT_CHAR) || strValue.startsWith(PERCENT_CHAR);
|
|
57
|
+
};
|
|
58
|
+
export const cleanNumberValue = (value) => {
|
|
59
|
+
if (typeof value === "number")
|
|
60
|
+
return String(value);
|
|
61
|
+
if (isNil(value)) {
|
|
62
|
+
return "";
|
|
63
|
+
}
|
|
64
|
+
const trimmedValue = String(value).trim();
|
|
65
|
+
if (trimmedValue === "") {
|
|
66
|
+
return "";
|
|
67
|
+
}
|
|
68
|
+
return trimmedValue.replace(NUMBER_CLEANUP_PATTERN, "");
|
|
69
|
+
};
|
|
70
|
+
export const convertToNumber = (text) => {
|
|
71
|
+
if (typeof text === "number") {
|
|
72
|
+
return text;
|
|
73
|
+
}
|
|
74
|
+
return Number(String(text).replace(NUMBER_CONVERSION_PATTERN, ""));
|
|
75
|
+
};
|
|
76
|
+
export const createNumberValue = (value, numFormatType, locale) => {
|
|
77
|
+
if (isNil(value)) {
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
const isDate = numFormatType === "DATE";
|
|
81
|
+
const isDateTime = numFormatType === "DATE_TIME";
|
|
82
|
+
if (typeof value !== "boolean" && (isDate || isDateTime)) {
|
|
83
|
+
if (typeof value === "number") {
|
|
84
|
+
const dateValue = createDateValueFromNumber(value);
|
|
85
|
+
if (!isNil(dateValue) && dateValue instanceof Date) {
|
|
86
|
+
return toSerial(dateValue);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
const dateValue = isDate
|
|
90
|
+
? validateDate(value, locale)
|
|
91
|
+
: validateDateTime(value);
|
|
92
|
+
if (dateValue) {
|
|
93
|
+
const { parts: { year, month, day, hour, minute, second }, } = dateValue;
|
|
94
|
+
return toSerial(new Date(year, month, day, hour, minute, second, 0));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return convertToNumber(value);
|
|
98
|
+
};
|
|
99
|
+
export const createDateValueFromNumber = (value) => {
|
|
100
|
+
if (typeof value === "number") {
|
|
101
|
+
return toDate(value);
|
|
102
|
+
}
|
|
103
|
+
return value;
|
|
104
|
+
};
|
|
105
|
+
export const isNumber = (value) => {
|
|
106
|
+
const sanitizedValue = cleanNumberValue(value);
|
|
107
|
+
if (sanitizedValue === "") {
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
return !isNaN(Number(sanitizedValue));
|
|
111
|
+
};
|
|
112
|
+
const createZeros = (len) => {
|
|
113
|
+
return Array.from({ length: len })
|
|
114
|
+
.map(() => `0`)
|
|
115
|
+
.join("");
|
|
116
|
+
};
|
|
117
|
+
export const getDecimalPlaces = (value) => {
|
|
118
|
+
const cleanedValue = value.replace(DECIMAL_CLEANUP_REGEX, "");
|
|
119
|
+
const parts = cleanedValue.split(DECIMAL_SPLIT_REGEX);
|
|
120
|
+
if (parts.length === 1) {
|
|
121
|
+
return 0;
|
|
122
|
+
}
|
|
123
|
+
const decimalPart = parts[parts.length - 1];
|
|
124
|
+
return decimalPart.length;
|
|
125
|
+
};
|
|
126
|
+
export const detectDecimalPattern = (value, defaultPattern = "#") => {
|
|
127
|
+
const str = String(value);
|
|
128
|
+
const hasThousands = str.indexOf(",") !== -1;
|
|
129
|
+
const decimalsLen = getDecimalPlaces(str);
|
|
130
|
+
const numValue = Number(str.replace(/[^0-9.-]/g, ""));
|
|
131
|
+
const needsLeadingZero = Math.abs(numValue) < 1;
|
|
132
|
+
let prefix = hasThousands ? "#,##0" : defaultPattern;
|
|
133
|
+
if (decimalsLen !== 0) {
|
|
134
|
+
if (needsLeadingZero && prefix === "#") {
|
|
135
|
+
prefix = "0";
|
|
136
|
+
}
|
|
137
|
+
return changeDecimals(prefix, decimalsLen, true);
|
|
138
|
+
}
|
|
139
|
+
return prefix;
|
|
140
|
+
};
|
|
141
|
+
export const changeDecimals = (pattern = "", changeBy = 1, delta = true) => {
|
|
142
|
+
const patterns = pattern.split(PATTERN_SEPARATOR);
|
|
143
|
+
return patterns
|
|
144
|
+
.map((p) => {
|
|
145
|
+
const match = p.match(DECIMAL_REGEX);
|
|
146
|
+
if (match && match.groups) {
|
|
147
|
+
const { decimal, suffix } = match.groups;
|
|
148
|
+
if (!decimal) {
|
|
149
|
+
const newDecimals = Math.max(changeBy, 0);
|
|
150
|
+
const zeros = createZeros(newDecimals);
|
|
151
|
+
return p.replace(DECIMAL_REGEX, `$1$2${zeros.length ? "." + zeros : ""}`);
|
|
152
|
+
}
|
|
153
|
+
let newSuffix = 0;
|
|
154
|
+
if (suffix) {
|
|
155
|
+
newSuffix = Math.max(delta ? suffix.length + changeBy : changeBy, 0);
|
|
156
|
+
}
|
|
157
|
+
const zeros = createZeros(newSuffix);
|
|
158
|
+
return p.replace(DECIMAL_REGEX, `$1${zeros.length ? "$2" + zeros : ""}`);
|
|
159
|
+
}
|
|
160
|
+
if (!p) {
|
|
161
|
+
const newDecimals = Math.max(changeBy, 0);
|
|
162
|
+
const zeros = createZeros(newDecimals);
|
|
163
|
+
return `0${zeros.length ? "." + zeros : ""}`;
|
|
164
|
+
}
|
|
165
|
+
return p;
|
|
166
|
+
})
|
|
167
|
+
.join(PATTERN_SEPARATOR);
|
|
168
|
+
};
|
|
169
|
+
export const validateDate = (value, locale) => {
|
|
170
|
+
if (typeof value === "number") {
|
|
171
|
+
const match = ISO_DATE_REGEX.exec(String(value));
|
|
172
|
+
if (match) {
|
|
173
|
+
const [, yearStr, monthStr, dayStr] = match;
|
|
174
|
+
const year = Number(yearStr);
|
|
175
|
+
const month = Number(monthStr) - 1;
|
|
176
|
+
const day = Number(dayStr);
|
|
177
|
+
const dateValue = new Date(year, month, day);
|
|
178
|
+
if (dateValue.getFullYear() === year &&
|
|
179
|
+
dateValue.getMonth() === month &&
|
|
180
|
+
dateValue.getDate() === Number(dayStr)) {
|
|
181
|
+
return {
|
|
182
|
+
format: "yyyy-mm-dd",
|
|
183
|
+
parts: {
|
|
184
|
+
year,
|
|
185
|
+
month,
|
|
186
|
+
day,
|
|
187
|
+
hour: 0,
|
|
188
|
+
minute: 0,
|
|
189
|
+
second: 0,
|
|
190
|
+
},
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
if (typeof value !== "string")
|
|
196
|
+
return undefined;
|
|
197
|
+
const result = parse(value, { locale });
|
|
198
|
+
if (!result)
|
|
199
|
+
return undefined;
|
|
200
|
+
const { dateValue } = result;
|
|
201
|
+
return {
|
|
202
|
+
format: result.pattern,
|
|
203
|
+
parts: {
|
|
204
|
+
year: dateValue.getFullYear(),
|
|
205
|
+
month: dateValue.getMonth(),
|
|
206
|
+
day: dateValue.getDate(),
|
|
207
|
+
hour: dateValue.getHours(),
|
|
208
|
+
minute: dateValue.getMinutes(),
|
|
209
|
+
second: dateValue.getSeconds(),
|
|
210
|
+
},
|
|
211
|
+
};
|
|
212
|
+
};
|
|
213
|
+
export const validateDateTime = (value) => {
|
|
214
|
+
if (typeof value !== "string")
|
|
215
|
+
return undefined;
|
|
216
|
+
const str = value.trim();
|
|
217
|
+
let match;
|
|
218
|
+
if ((match = TIME_REGEX.FULL_WITH_MERIDIAN.exec(str))) {
|
|
219
|
+
const hour = parseInt(match[1], 10);
|
|
220
|
+
const minute = parseInt(match[2], 10);
|
|
221
|
+
const second = parseInt(match[3], 10);
|
|
222
|
+
const meridian = match[4];
|
|
223
|
+
if (isValidTimeComponents(hour, minute, second, meridian)) {
|
|
224
|
+
return createTimeResult(TIME_FORMATS.FULL_WITH_MERIDIAN, adjustHour(hour, meridian), minute, second);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
if ((match = TIME_REGEX.FULL.exec(str))) {
|
|
228
|
+
const hour = parseInt(match[1], 10);
|
|
229
|
+
const minute = parseInt(match[2], 10);
|
|
230
|
+
const second = parseInt(match[3], 10);
|
|
231
|
+
if (isValidTimeComponents(hour, minute, second)) {
|
|
232
|
+
return createTimeResult(TIME_FORMATS.FULL, hour, minute, second);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
if ((match = TIME_REGEX.SHORT_WITH_MERIDIAN.exec(str))) {
|
|
236
|
+
const hour = parseInt(match[1], 10);
|
|
237
|
+
const minute = parseInt(match[2], 10);
|
|
238
|
+
const meridian = match[3];
|
|
239
|
+
if (isValidTimeComponents(hour, minute, 0, meridian)) {
|
|
240
|
+
return createTimeResult(TIME_FORMATS.SHORT_WITH_MERIDIAN, adjustHour(hour, meridian), minute, 0);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
if ((match = TIME_REGEX.SHORT.exec(str))) {
|
|
244
|
+
const hour = parseInt(match[1], 10);
|
|
245
|
+
const minute = parseInt(match[2], 10);
|
|
246
|
+
if (isValidTimeComponents(hour, minute, 0)) {
|
|
247
|
+
return createTimeResult(TIME_FORMATS.SHORT, hour, minute, 0);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return undefined;
|
|
251
|
+
};
|
|
252
|
+
const isValidTimeComponents = (hour, minute, second, meridian) => {
|
|
253
|
+
if (hour > 24 ||
|
|
254
|
+
minute > 59 ||
|
|
255
|
+
second > 59 ||
|
|
256
|
+
(meridian?.toUpperCase() === "AM" && hour > 12)) {
|
|
257
|
+
return false;
|
|
258
|
+
}
|
|
259
|
+
return true;
|
|
260
|
+
};
|
|
261
|
+
const adjustHour = (hour, meridian) => {
|
|
262
|
+
if (meridian?.toLowerCase().charAt(0) === "p" && hour < 12) {
|
|
263
|
+
return hour + 12;
|
|
264
|
+
}
|
|
265
|
+
return hour;
|
|
266
|
+
};
|
|
267
|
+
const createTimeResult = (format, hour, minute, second) => {
|
|
268
|
+
const now = new Date();
|
|
269
|
+
return {
|
|
270
|
+
format,
|
|
271
|
+
parts: {
|
|
272
|
+
year: now.getFullYear(),
|
|
273
|
+
month: now.getMonth(),
|
|
274
|
+
day: now.getDate(),
|
|
275
|
+
hour,
|
|
276
|
+
minute,
|
|
277
|
+
second,
|
|
278
|
+
},
|
|
279
|
+
};
|
|
280
|
+
};
|
|
281
|
+
export const detectDateFormatPattern = (value, locale) => {
|
|
282
|
+
if (!value || (typeof value !== "string" && !(value instanceof Date))) {
|
|
283
|
+
return undefined;
|
|
284
|
+
}
|
|
285
|
+
return validateDate(value, locale)?.format;
|
|
286
|
+
};
|
|
287
|
+
export const detectDateTimeFormatPattern = (value) => {
|
|
288
|
+
if (!value || typeof value !== "string") {
|
|
289
|
+
return undefined;
|
|
290
|
+
}
|
|
291
|
+
return validateDateTime(value)?.format ?? time_pattern;
|
|
292
|
+
};
|
|
293
|
+
export const detectNumberFormatType = (value, locale) => {
|
|
294
|
+
if (isCurrency(value)) {
|
|
295
|
+
return "CURRENCY";
|
|
296
|
+
}
|
|
297
|
+
if (isPercentage(value)) {
|
|
298
|
+
return "PERCENT";
|
|
299
|
+
}
|
|
300
|
+
if (isNumber(value)) {
|
|
301
|
+
return "NUMBER";
|
|
302
|
+
}
|
|
303
|
+
if (isValidDate(value, locale)) {
|
|
304
|
+
return "DATE";
|
|
305
|
+
}
|
|
306
|
+
if (isValidDateTime(value)) {
|
|
307
|
+
return "DATE_TIME";
|
|
308
|
+
}
|
|
309
|
+
};
|
|
310
|
+
export const detectNumberFormatPattern = (value, numberValue, type, locale) => {
|
|
311
|
+
if (type === "PERCENT") {
|
|
312
|
+
return detectDecimalPattern(value, pattern_percent);
|
|
313
|
+
}
|
|
314
|
+
if (type === "CURRENCY") {
|
|
315
|
+
return detectDecimalPattern(numberValue, pattern_currency);
|
|
316
|
+
}
|
|
317
|
+
if (type === "DATE") {
|
|
318
|
+
return detectDateFormatPattern(value, locale) ?? date_pattern;
|
|
319
|
+
}
|
|
320
|
+
if (type === "DATE_TIME") {
|
|
321
|
+
return detectDateTimeFormatPattern(value) ?? time_pattern;
|
|
322
|
+
}
|
|
323
|
+
if (type === "NUMBER") {
|
|
324
|
+
// An integer zero with no explicit format stays "General" — imported `0`,
|
|
325
|
+
// `00`, and signed zero values with a General number format shouldn't
|
|
326
|
+
// manufacture a `#` pattern that renders the value as blank.
|
|
327
|
+
// Explicit CURRENCY / PERCENT formats keep their own base pattern for
|
|
328
|
+
// zero (handled above), so `$0` stays `"$"#,##0`, not a bare `0`.
|
|
329
|
+
if (value === 0 ||
|
|
330
|
+
(typeof value === "string" && /^[-+]?0+$/.test(value.trim()))) {
|
|
331
|
+
return "General";
|
|
332
|
+
}
|
|
333
|
+
return detectDecimalPattern(value);
|
|
334
|
+
}
|
|
335
|
+
return undefined;
|
|
336
|
+
};
|
|
337
|
+
export const detectValueType = (value, locale) => {
|
|
338
|
+
if (isAFormula(value)) {
|
|
339
|
+
return "formulaValue";
|
|
340
|
+
}
|
|
341
|
+
if (isBoolean(value)) {
|
|
342
|
+
return "boolValue";
|
|
343
|
+
}
|
|
344
|
+
if (isNumber(value) || isValidDate(value, locale) || isValidDateTime(value)) {
|
|
345
|
+
return "numberValue";
|
|
346
|
+
}
|
|
347
|
+
return "stringValue";
|
|
348
|
+
};
|
|
349
|
+
export const detectValueTypeAndPattern = (value, locale) => {
|
|
350
|
+
if (isAFormula(value)) {
|
|
351
|
+
return ["formulaValue"];
|
|
352
|
+
}
|
|
353
|
+
if (isBoolean(value)) {
|
|
354
|
+
return ["boolValue"];
|
|
355
|
+
}
|
|
356
|
+
if (isNumber(value)) {
|
|
357
|
+
const numberValue = convertToNumber(value);
|
|
358
|
+
if (isCurrency(value)) {
|
|
359
|
+
const pattern = detectDecimalPattern(numberValue, pattern_currency);
|
|
360
|
+
return ["numberValue", "CURRENCY", numberValue, pattern];
|
|
361
|
+
}
|
|
362
|
+
if (isPercentage(value)) {
|
|
363
|
+
const pattern = detectDecimalPattern(numberValue, pattern_percent);
|
|
364
|
+
const percentValue = convertToNumber(value) / 100;
|
|
365
|
+
return ["numberValue", "PERCENT", percentValue, pattern];
|
|
366
|
+
}
|
|
367
|
+
return [
|
|
368
|
+
"numberValue",
|
|
369
|
+
"NUMBER",
|
|
370
|
+
convertToNumber(value),
|
|
371
|
+
detectNumberFormatPattern(value, numberValue, "NUMBER", locale),
|
|
372
|
+
];
|
|
373
|
+
}
|
|
374
|
+
const dateValue = validateDate(value, locale);
|
|
375
|
+
if (dateValue) {
|
|
376
|
+
const { parts: { year, month, day, hour, minute, second }, } = dateValue;
|
|
377
|
+
const numberValue = toSerial(new Date(year, month, day, hour, minute, second, 0));
|
|
378
|
+
return ["numberValue", "DATE", numberValue, dateValue.format];
|
|
379
|
+
}
|
|
380
|
+
const dateTimeValue = validateDateTime(value);
|
|
381
|
+
if (dateTimeValue) {
|
|
382
|
+
const { parts: { year, month, day, hour, minute, second }, } = dateTimeValue;
|
|
383
|
+
const numberValue = toSerial(new Date(year, month, day, hour, minute, second, 0));
|
|
384
|
+
return ["numberValue", "DATE_TIME", numberValue, dateTimeValue.format];
|
|
385
|
+
}
|
|
386
|
+
return ["stringValue"];
|
|
387
|
+
};
|
|
388
|
+
export const isValidDate = (value, locale) => {
|
|
389
|
+
if (!value || (typeof value !== "string" && !(value instanceof Date))) {
|
|
390
|
+
return false;
|
|
391
|
+
}
|
|
392
|
+
return !!validateDate(value, locale);
|
|
393
|
+
};
|
|
394
|
+
export const isValidDateTime = (value) => {
|
|
395
|
+
if (!value || typeof value !== "string") {
|
|
396
|
+
return false;
|
|
397
|
+
}
|
|
398
|
+
return !!validateDateTime(value);
|
|
399
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { IWorkbookPlugin } from "./interface";
|
|
2
|
+
export type PluginFactory = () => IWorkbookPlugin;
|
|
3
|
+
export declare const PARSER_REGISTRY: Record<string, PluginFactory>;
|
|
4
|
+
export declare function getPluginForFile(file: File | string): IWorkbookPlugin;
|
|
5
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../excel-parser/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAMnD,MAAM,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC;AAElD,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAKzD,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,eAAe,CAWrE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { OdsPlugin } from "./plugins/ods/index";
|
|
2
|
+
import { XlsbPlugin } from "./plugins/xlsb/index";
|
|
3
|
+
import { XlsmPlugin } from "./plugins/xlsm/index";
|
|
4
|
+
import { XlsxPlugin } from "./plugins/xlsx/index";
|
|
5
|
+
export const PARSER_REGISTRY = {
|
|
6
|
+
xlsx: () => new XlsxPlugin(),
|
|
7
|
+
xlsm: () => new XlsmPlugin(),
|
|
8
|
+
xlsb: () => new XlsbPlugin(),
|
|
9
|
+
ods: () => new OdsPlugin(),
|
|
10
|
+
};
|
|
11
|
+
export function getPluginForFile(file) {
|
|
12
|
+
const fileName = typeof file === "string" ? file : file.name;
|
|
13
|
+
const extension = fileName.split(".").pop()?.toLowerCase();
|
|
14
|
+
if (extension && PARSER_REGISTRY[extension]) {
|
|
15
|
+
return PARSER_REGISTRY[extension]();
|
|
16
|
+
}
|
|
17
|
+
// Default to xlsx for now if unknown, or maybe throw error?
|
|
18
|
+
// Current behavior assumes everything is xlsx-like
|
|
19
|
+
return new XlsxPlugin();
|
|
20
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { CellFormat, TextFormat } from "@rowsncolumns/spreadsheet";
|
|
2
|
+
/**
|
|
3
|
+
* Excel-like style registry that mirrors Excel's XF (eXtended Format) architecture
|
|
4
|
+
*/
|
|
5
|
+
export declare class StyleRegistry {
|
|
6
|
+
private cellXfs;
|
|
7
|
+
private styleXfs;
|
|
8
|
+
private numFmts;
|
|
9
|
+
private fonts;
|
|
10
|
+
private fills;
|
|
11
|
+
private borders;
|
|
12
|
+
constructor();
|
|
13
|
+
/**
|
|
14
|
+
* Register a font and return its index
|
|
15
|
+
*/
|
|
16
|
+
registerFont(font: TextFormat): number;
|
|
17
|
+
/**
|
|
18
|
+
* Register a fill and return its index
|
|
19
|
+
*/
|
|
20
|
+
registerFill(fill: any): number;
|
|
21
|
+
/**
|
|
22
|
+
* Register a border and return its index
|
|
23
|
+
*/
|
|
24
|
+
registerBorder(border: any): number;
|
|
25
|
+
/**
|
|
26
|
+
* Register a number format and return its index
|
|
27
|
+
*/
|
|
28
|
+
registerNumberFormat(format: string): number;
|
|
29
|
+
/**
|
|
30
|
+
* Register a cell XF (format) and return its index
|
|
31
|
+
*/
|
|
32
|
+
registerCellXf(format: CellFormat): number;
|
|
33
|
+
/**
|
|
34
|
+
* Get a cell XF by index
|
|
35
|
+
*/
|
|
36
|
+
getCellXf(index: number): CellFormat;
|
|
37
|
+
/**
|
|
38
|
+
* Export the style registry
|
|
39
|
+
*/
|
|
40
|
+
export(): {
|
|
41
|
+
cellXfs: CellFormat[];
|
|
42
|
+
styleXfs: CellFormat[];
|
|
43
|
+
numFmts: {
|
|
44
|
+
[k: string]: string;
|
|
45
|
+
};
|
|
46
|
+
fonts: TextFormat[];
|
|
47
|
+
fills: any[];
|
|
48
|
+
borders: any[];
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=style-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style-registry.d.ts","sourceRoot":"","sources":["../../../excel-parser/style-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAExE;;GAEG;AACH,qBAAa,aAAa;IAExB,OAAO,CAAC,OAAO,CAAoB;IAGnC,OAAO,CAAC,QAAQ,CAAoB;IAGpC,OAAO,CAAC,OAAO,CAAkC;IAGjD,OAAO,CAAC,KAAK,CAAoB;IAGjC,OAAO,CAAC,KAAK,CAAa;IAG1B,OAAO,CAAC,OAAO,CAAa;;IAoB5B;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;IActC;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM;IAc/B;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM;IAcnC;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAc5C;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAsD1C;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU;IAMpC;;OAEG;IACH,MAAM;;;;;;;;;;CAUP"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Excel-like style registry that mirrors Excel's XF (eXtended Format) architecture
|
|
3
|
+
*/
|
|
4
|
+
export class StyleRegistry {
|
|
5
|
+
// Store style XF records (cell formats used directly by cells)
|
|
6
|
+
cellXfs = [];
|
|
7
|
+
// Store style XF records (named styles that can be applied to cells)
|
|
8
|
+
styleXfs = [];
|
|
9
|
+
// Store number formats
|
|
10
|
+
numFmts = new Map();
|
|
11
|
+
// Store fonts
|
|
12
|
+
fonts = [];
|
|
13
|
+
// Store fills (background colors)
|
|
14
|
+
fills = [];
|
|
15
|
+
// Store borders
|
|
16
|
+
borders = [];
|
|
17
|
+
constructor() {
|
|
18
|
+
// Initialize with default formats
|
|
19
|
+
this.cellXfs.push({}); // Default empty format at index 0
|
|
20
|
+
this.styleXfs.push({}); // Default empty style at index 0
|
|
21
|
+
this.fonts.push({}); // Default font at index 0
|
|
22
|
+
this.fills.push({ patternType: "none" }); // Default fill (none) at index 0
|
|
23
|
+
this.fills.push({ patternType: "gray125" }); // Default fill (gray125) at index 1
|
|
24
|
+
this.borders.push({}); // Default border (none) at index 0
|
|
25
|
+
// Standard number formats (0-49 are built-in in Excel)
|
|
26
|
+
this.numFmts.set(0, "General");
|
|
27
|
+
this.numFmts.set(1, "0");
|
|
28
|
+
this.numFmts.set(2, "0.00");
|
|
29
|
+
this.numFmts.set(3, "#,##0");
|
|
30
|
+
this.numFmts.set(4, "#,##0.00");
|
|
31
|
+
// And so on...
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Register a font and return its index
|
|
35
|
+
*/
|
|
36
|
+
registerFont(font) {
|
|
37
|
+
// Check if font already exists
|
|
38
|
+
const fontStr = JSON.stringify(font);
|
|
39
|
+
for (let i = 0; i < this.fonts.length; i++) {
|
|
40
|
+
if (JSON.stringify(this.fonts[i]) === fontStr) {
|
|
41
|
+
return i;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Add new font
|
|
45
|
+
this.fonts.push(font);
|
|
46
|
+
return this.fonts.length - 1;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Register a fill and return its index
|
|
50
|
+
*/
|
|
51
|
+
registerFill(fill) {
|
|
52
|
+
// Check if fill already exists
|
|
53
|
+
const fillStr = JSON.stringify(fill);
|
|
54
|
+
for (let i = 0; i < this.fills.length; i++) {
|
|
55
|
+
if (JSON.stringify(this.fills[i]) === fillStr) {
|
|
56
|
+
return i;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Add new fill
|
|
60
|
+
this.fills.push(fill);
|
|
61
|
+
return this.fills.length - 1;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Register a border and return its index
|
|
65
|
+
*/
|
|
66
|
+
registerBorder(border) {
|
|
67
|
+
// Check if border already exists
|
|
68
|
+
const borderStr = JSON.stringify(border);
|
|
69
|
+
for (let i = 0; i < this.borders.length; i++) {
|
|
70
|
+
if (JSON.stringify(this.borders[i]) === borderStr) {
|
|
71
|
+
return i;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Add new border
|
|
75
|
+
this.borders.push(border);
|
|
76
|
+
return this.borders.length - 1;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Register a number format and return its index
|
|
80
|
+
*/
|
|
81
|
+
registerNumberFormat(format) {
|
|
82
|
+
// Check if format already exists in built-in formats
|
|
83
|
+
for (const [id, fmt] of this.numFmts.entries()) {
|
|
84
|
+
if (fmt === format) {
|
|
85
|
+
return id;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Assign a new ID (starting from 164 as Excel does for custom formats)
|
|
89
|
+
const newId = 164 + (this.numFmts.size - 50); // 50 is the number of built-in formats
|
|
90
|
+
this.numFmts.set(newId, format);
|
|
91
|
+
return newId;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Register a cell XF (format) and return its index
|
|
95
|
+
*/
|
|
96
|
+
registerCellXf(format) {
|
|
97
|
+
// Extract components to register individually
|
|
98
|
+
let numFmtId = 0;
|
|
99
|
+
let fontId = 0;
|
|
100
|
+
let fillId = 0;
|
|
101
|
+
let borderId = 0;
|
|
102
|
+
// Register number format if present
|
|
103
|
+
if (format.numberFormat?.pattern) {
|
|
104
|
+
numFmtId = this.registerNumberFormat(format.numberFormat.pattern);
|
|
105
|
+
}
|
|
106
|
+
// Register font if present
|
|
107
|
+
if (format.textFormat) {
|
|
108
|
+
fontId = this.registerFont(format.textFormat);
|
|
109
|
+
}
|
|
110
|
+
// Register fill if present
|
|
111
|
+
if (format.backgroundColor) {
|
|
112
|
+
fillId = this.registerFill({
|
|
113
|
+
patternType: "solid",
|
|
114
|
+
fgColor: format.backgroundColor,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
// Register border if present
|
|
118
|
+
if (format.borders) {
|
|
119
|
+
borderId = this.registerBorder(format.borders);
|
|
120
|
+
}
|
|
121
|
+
// Create an XF record with references
|
|
122
|
+
const xfRecord = {
|
|
123
|
+
...format,
|
|
124
|
+
_refs: {
|
|
125
|
+
numFmtId,
|
|
126
|
+
fontId,
|
|
127
|
+
fillId,
|
|
128
|
+
borderId,
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
// Check if XF already exists
|
|
132
|
+
const xfStr = JSON.stringify(xfRecord);
|
|
133
|
+
for (let i = 0; i < this.cellXfs.length; i++) {
|
|
134
|
+
if (JSON.stringify(this.cellXfs[i]) === xfStr) {
|
|
135
|
+
return i;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// Add new XF
|
|
139
|
+
this.cellXfs.push(xfRecord);
|
|
140
|
+
return this.cellXfs.length - 1;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Get a cell XF by index
|
|
144
|
+
*/
|
|
145
|
+
getCellXf(index) {
|
|
146
|
+
return index >= 0 && index < this.cellXfs.length
|
|
147
|
+
? this.cellXfs[index]
|
|
148
|
+
: this.cellXfs[0];
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Export the style registry
|
|
152
|
+
*/
|
|
153
|
+
export() {
|
|
154
|
+
return {
|
|
155
|
+
cellXfs: this.cellXfs,
|
|
156
|
+
styleXfs: this.styleXfs,
|
|
157
|
+
numFmts: Object.fromEntries(this.numFmts),
|
|
158
|
+
fonts: this.fonts,
|
|
159
|
+
fills: this.fills,
|
|
160
|
+
borders: this.borders,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-default.d.ts","sourceRoot":"","sources":["../../../excel-parser/theme-default.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAe,MAAM,2BAA2B,CAAC;AAgB/E,eAAO,MAAM,uBAAuB,EAAE,gBAKrC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const lightColors = {
|
|
2
|
+
text1: "#000000",
|
|
3
|
+
background1: "#ffffff",
|
|
4
|
+
text2: "#44546A",
|
|
5
|
+
background2: "#E7E6E6",
|
|
6
|
+
accent1: "#5B9BD5",
|
|
7
|
+
accent2: "#ED7D31",
|
|
8
|
+
accent3: "#A5A5A5",
|
|
9
|
+
accent4: "#FFC000",
|
|
10
|
+
accent5: "#4472C4",
|
|
11
|
+
accent6: "#70AD47",
|
|
12
|
+
hyperlink: "#0563C1",
|
|
13
|
+
};
|
|
14
|
+
export const defaultSpreadsheetTheme = {
|
|
15
|
+
name: "Office",
|
|
16
|
+
primaryFontFamily: "Calibri",
|
|
17
|
+
themeColors: lightColors,
|
|
18
|
+
darkThemeColors: {},
|
|
19
|
+
};
|