@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.
Files changed (456) hide show
  1. package/LICENSE.md +100 -0
  2. package/Readme.md +27 -0
  3. package/dist/cjs/autofilter-condition.d.ts +43 -0
  4. package/dist/cjs/autofilter-condition.d.ts.map +1 -0
  5. package/dist/cjs/autofilter-condition.js +155 -0
  6. package/dist/cjs/csv-export.d.ts +49 -0
  7. package/dist/cjs/csv-export.d.ts.map +1 -0
  8. package/dist/cjs/csv-export.js +142 -0
  9. package/dist/cjs/csv-import-worker.d.ts +16 -0
  10. package/dist/cjs/csv-import-worker.d.ts.map +1 -0
  11. package/dist/cjs/csv-import-worker.js +60 -0
  12. package/dist/cjs/csv-import.d.ts +38 -0
  13. package/dist/cjs/csv-import.d.ts.map +1 -0
  14. package/dist/cjs/csv-import.js +166 -0
  15. package/dist/cjs/csv-parser/helpers.d.ts +14 -0
  16. package/dist/cjs/csv-parser/helpers.d.ts.map +1 -0
  17. package/dist/cjs/csv-parser/helpers.js +145 -0
  18. package/dist/cjs/csv-parser/types.d.ts +66 -0
  19. package/dist/cjs/csv-parser/types.d.ts.map +1 -0
  20. package/dist/cjs/csv-parser/types.js +14 -0
  21. package/dist/cjs/csv-parser/worker.d.ts +2 -0
  22. package/dist/cjs/csv-parser/worker.d.ts.map +1 -0
  23. package/dist/cjs/csv-parser/worker.js +200 -0
  24. package/dist/cjs/excel-export.d.ts +11 -0
  25. package/dist/cjs/excel-export.d.ts.map +1 -0
  26. package/dist/cjs/excel-export.js +22 -0
  27. package/dist/cjs/excel-import-session.d.ts +51 -0
  28. package/dist/cjs/excel-import-session.d.ts.map +1 -0
  29. package/dist/cjs/excel-import-session.js +307 -0
  30. package/dist/cjs/excel-import-worker.d.ts +7 -0
  31. package/dist/cjs/excel-import-worker.d.ts.map +1 -0
  32. package/dist/cjs/excel-import-worker.js +119 -0
  33. package/dist/cjs/excel-parser/builtin-numfmts.d.ts +24 -0
  34. package/dist/cjs/excel-parser/builtin-numfmts.d.ts.map +1 -0
  35. package/dist/cjs/excel-parser/builtin-numfmts.js +63 -0
  36. package/dist/cjs/excel-parser/cfb-decryptor.d.ts +53 -0
  37. package/dist/cjs/excel-parser/cfb-decryptor.d.ts.map +1 -0
  38. package/dist/cjs/excel-parser/cfb-decryptor.js +553 -0
  39. package/dist/cjs/excel-parser/cfb-encryptor.d.ts +23 -0
  40. package/dist/cjs/excel-parser/cfb-encryptor.d.ts.map +1 -0
  41. package/dist/cjs/excel-parser/cfb-encryptor.js +200 -0
  42. package/dist/cjs/excel-parser/dv-cell-stamp.d.ts +29 -0
  43. package/dist/cjs/excel-parser/dv-cell-stamp.d.ts.map +1 -0
  44. package/dist/cjs/excel-parser/dv-cell-stamp.js +239 -0
  45. package/dist/cjs/excel-parser/helpers.d.ts +28 -0
  46. package/dist/cjs/excel-parser/helpers.d.ts.map +1 -0
  47. package/dist/cjs/excel-parser/helpers.js +188 -0
  48. package/dist/cjs/excel-parser/interface.d.ts +179 -0
  49. package/dist/cjs/excel-parser/interface.d.ts.map +1 -0
  50. package/dist/cjs/excel-parser/interface.js +1 -0
  51. package/dist/cjs/excel-parser/plugins/base/index.d.ts +31 -0
  52. package/dist/cjs/excel-parser/plugins/base/index.d.ts.map +1 -0
  53. package/dist/cjs/excel-parser/plugins/base/index.js +101 -0
  54. package/dist/cjs/excel-parser/plugins/ods/conditional-formatting.d.ts +16 -0
  55. package/dist/cjs/excel-parser/plugins/ods/conditional-formatting.d.ts.map +1 -0
  56. package/dist/cjs/excel-parser/plugins/ods/conditional-formatting.js +488 -0
  57. package/dist/cjs/excel-parser/plugins/ods/data-validations.d.ts +15 -0
  58. package/dist/cjs/excel-parser/plugins/ods/data-validations.d.ts.map +1 -0
  59. package/dist/cjs/excel-parser/plugins/ods/data-validations.js +353 -0
  60. package/dist/cjs/excel-parser/plugins/ods/formula.d.ts +8 -0
  61. package/dist/cjs/excel-parser/plugins/ods/formula.d.ts.map +1 -0
  62. package/dist/cjs/excel-parser/plugins/ods/formula.js +82 -0
  63. package/dist/cjs/excel-parser/plugins/ods/index.d.ts +122 -0
  64. package/dist/cjs/excel-parser/plugins/ods/index.d.ts.map +1 -0
  65. package/dist/cjs/excel-parser/plugins/ods/index.js +3642 -0
  66. package/dist/cjs/excel-parser/plugins/ods/sparklines.d.ts +25 -0
  67. package/dist/cjs/excel-parser/plugins/ods/sparklines.d.ts.map +1 -0
  68. package/dist/cjs/excel-parser/plugins/ods/sparklines.js +221 -0
  69. package/dist/cjs/excel-parser/plugins/ods/styles.d.ts +60 -0
  70. package/dist/cjs/excel-parser/plugins/ods/styles.d.ts.map +1 -0
  71. package/dist/cjs/excel-parser/plugins/ods/styles.js +808 -0
  72. package/dist/cjs/excel-parser/plugins/ods/types.d.ts +7 -0
  73. package/dist/cjs/excel-parser/plugins/ods/types.d.ts.map +1 -0
  74. package/dist/cjs/excel-parser/plugins/ods/types.js +1 -0
  75. package/dist/cjs/excel-parser/plugins/xls/index.d.ts +5 -0
  76. package/dist/cjs/excel-parser/plugins/xls/index.d.ts.map +1 -0
  77. package/dist/cjs/excel-parser/plugins/xls/index.js +19 -0
  78. package/dist/cjs/excel-parser/plugins/xlsb/biff-record-reader.d.ts +13 -0
  79. package/dist/cjs/excel-parser/plugins/xlsb/biff-record-reader.d.ts.map +1 -0
  80. package/dist/cjs/excel-parser/plugins/xlsb/biff-record-reader.js +49 -0
  81. package/dist/cjs/excel-parser/plugins/xlsb/index.d.ts +117 -0
  82. package/dist/cjs/excel-parser/plugins/xlsb/index.d.ts.map +1 -0
  83. package/dist/cjs/excel-parser/plugins/xlsb/index.js +2972 -0
  84. package/dist/cjs/excel-parser/plugins/xlsb/rgce-parser.d.ts +18 -0
  85. package/dist/cjs/excel-parser/plugins/xlsb/rgce-parser.d.ts.map +1 -0
  86. package/dist/cjs/excel-parser/plugins/xlsb/rgce-parser.js +527 -0
  87. package/dist/cjs/excel-parser/plugins/xlsm/index.d.ts +5 -0
  88. package/dist/cjs/excel-parser/plugins/xlsm/index.d.ts.map +1 -0
  89. package/dist/cjs/excel-parser/plugins/xlsm/index.js +10 -0
  90. package/dist/cjs/excel-parser/plugins/xlsx/charts.d.ts +60 -0
  91. package/dist/cjs/excel-parser/plugins/xlsx/charts.d.ts.map +1 -0
  92. package/dist/cjs/excel-parser/plugins/xlsx/charts.js +2178 -0
  93. package/dist/cjs/excel-parser/plugins/xlsx/conditional-formatting.d.ts +18 -0
  94. package/dist/cjs/excel-parser/plugins/xlsx/conditional-formatting.d.ts.map +1 -0
  95. package/dist/cjs/excel-parser/plugins/xlsx/conditional-formatting.js +620 -0
  96. package/dist/cjs/excel-parser/plugins/xlsx/data-validations.d.ts +4 -0
  97. package/dist/cjs/excel-parser/plugins/xlsx/data-validations.d.ts.map +1 -0
  98. package/dist/cjs/excel-parser/plugins/xlsx/data-validations.js +515 -0
  99. package/dist/cjs/excel-parser/plugins/xlsx/drawing.d.ts +39 -0
  100. package/dist/cjs/excel-parser/plugins/xlsx/drawing.d.ts.map +1 -0
  101. package/dist/cjs/excel-parser/plugins/xlsx/drawing.js +941 -0
  102. package/dist/cjs/excel-parser/plugins/xlsx/index.d.ts +320 -0
  103. package/dist/cjs/excel-parser/plugins/xlsx/index.d.ts.map +1 -0
  104. package/dist/cjs/excel-parser/plugins/xlsx/index.js +6056 -0
  105. package/dist/cjs/excel-parser/plugins/xlsx/numfmt.d.ts +2 -0
  106. package/dist/cjs/excel-parser/plugins/xlsx/numfmt.d.ts.map +1 -0
  107. package/dist/cjs/excel-parser/plugins/xlsx/numfmt.js +3 -0
  108. package/dist/cjs/excel-parser/plugins/xlsx/pivots.d.ts +40 -0
  109. package/dist/cjs/excel-parser/plugins/xlsx/pivots.d.ts.map +1 -0
  110. package/dist/cjs/excel-parser/plugins/xlsx/pivots.js +342 -0
  111. package/dist/cjs/excel-parser/plugins/xlsx/relationships.d.ts +8 -0
  112. package/dist/cjs/excel-parser/plugins/xlsx/relationships.d.ts.map +1 -0
  113. package/dist/cjs/excel-parser/plugins/xlsx/relationships.js +26 -0
  114. package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.d.ts +26 -0
  115. package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.d.ts.map +1 -0
  116. package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.js +59 -0
  117. package/dist/cjs/excel-parser/plugins/xlsx/styles.d.ts +44 -0
  118. package/dist/cjs/excel-parser/plugins/xlsx/styles.d.ts.map +1 -0
  119. package/dist/cjs/excel-parser/plugins/xlsx/styles.js +1377 -0
  120. package/dist/cjs/excel-parser/plugins/xlsx/theme.d.ts +50 -0
  121. package/dist/cjs/excel-parser/plugins/xlsx/theme.d.ts.map +1 -0
  122. package/dist/cjs/excel-parser/plugins/xlsx/theme.js +150 -0
  123. package/dist/cjs/excel-parser/plugins/xlsx/threaded-comments.d.ts +47 -0
  124. package/dist/cjs/excel-parser/plugins/xlsx/threaded-comments.d.ts.map +1 -0
  125. package/dist/cjs/excel-parser/plugins/xlsx/threaded-comments.js +141 -0
  126. package/dist/cjs/excel-parser/plugins/xlsx/value-type-detection.d.ts +44 -0
  127. package/dist/cjs/excel-parser/plugins/xlsx/value-type-detection.d.ts.map +1 -0
  128. package/dist/cjs/excel-parser/plugins/xlsx/value-type-detection.js +407 -0
  129. package/dist/cjs/excel-parser/registry.d.ts +5 -0
  130. package/dist/cjs/excel-parser/registry.d.ts.map +1 -0
  131. package/dist/cjs/excel-parser/registry.js +21 -0
  132. package/dist/cjs/excel-parser/style-registry.d.ts +51 -0
  133. package/dist/cjs/excel-parser/style-registry.d.ts.map +1 -0
  134. package/dist/cjs/excel-parser/style-registry.js +175 -0
  135. package/dist/cjs/excel-parser/theme-default.d.ts +3 -0
  136. package/dist/cjs/excel-parser/theme-default.d.ts.map +1 -0
  137. package/dist/cjs/excel-parser/theme-default.js +19 -0
  138. package/dist/cjs/excel-parser/types.d.ts +365 -0
  139. package/dist/cjs/excel-parser/types.d.ts.map +1 -0
  140. package/dist/cjs/excel-parser/types.js +59 -0
  141. package/dist/cjs/excel-parser/utils.d.ts +6 -0
  142. package/dist/cjs/excel-parser/utils.d.ts.map +1 -0
  143. package/dist/cjs/excel-parser/utils.js +30 -0
  144. package/dist/cjs/excel-parser/workbook.d.ts +51 -0
  145. package/dist/cjs/excel-parser/workbook.d.ts.map +1 -0
  146. package/dist/cjs/excel-parser/workbook.js +317 -0
  147. package/dist/cjs/excel-parser/worker.d.ts +2 -0
  148. package/dist/cjs/excel-parser/worker.d.ts.map +1 -0
  149. package/dist/cjs/excel-parser/worker.js +1149 -0
  150. package/dist/cjs/excel-parser/zip-parser-streaming.d.ts +13 -0
  151. package/dist/cjs/excel-parser/zip-parser-streaming.d.ts.map +1 -0
  152. package/dist/cjs/excel-parser/zip-parser-streaming.js +200 -0
  153. package/dist/cjs/excel-parser/zip-parser.d.ts +11 -0
  154. package/dist/cjs/excel-parser/zip-parser.d.ts.map +1 -0
  155. package/dist/cjs/excel-parser/zip-parser.js +49 -0
  156. package/dist/cjs/exporter/invalid-data-validation.d.ts +19 -0
  157. package/dist/cjs/exporter/invalid-data-validation.d.ts.map +1 -0
  158. package/dist/cjs/exporter/invalid-data-validation.js +39 -0
  159. package/dist/cjs/exporter/ods/ods-export.d.ts +26 -0
  160. package/dist/cjs/exporter/ods/ods-export.d.ts.map +1 -0
  161. package/dist/cjs/exporter/ods/ods-export.js +3714 -0
  162. package/dist/cjs/exporter/ods/sparkline-builder.d.ts +33 -0
  163. package/dist/cjs/exporter/ods/sparkline-builder.d.ts.map +1 -0
  164. package/dist/cjs/exporter/ods/sparkline-builder.js +221 -0
  165. package/dist/cjs/exporter/xlsx/chart-builder.d.ts +3 -0
  166. package/dist/cjs/exporter/xlsx/chart-builder.d.ts.map +1 -0
  167. package/dist/cjs/exporter/xlsx/chart-builder.js +1901 -0
  168. package/dist/cjs/exporter/xlsx/chart-templates.d.ts +1781 -0
  169. package/dist/cjs/exporter/xlsx/chart-templates.d.ts.map +1 -0
  170. package/dist/cjs/exporter/xlsx/chart-templates.js +1798 -0
  171. package/dist/cjs/exporter/xlsx/future-functions.d.ts +10 -0
  172. package/dist/cjs/exporter/xlsx/future-functions.d.ts.map +1 -0
  173. package/dist/cjs/exporter/xlsx/future-functions.js +264 -0
  174. package/dist/cjs/exporter/xlsx/pivot-builder.d.ts +58 -0
  175. package/dist/cjs/exporter/xlsx/pivot-builder.d.ts.map +1 -0
  176. package/dist/cjs/exporter/xlsx/pivot-builder.js +277 -0
  177. package/dist/cjs/exporter/xlsx/power-query-builder.d.ts +26 -0
  178. package/dist/cjs/exporter/xlsx/power-query-builder.d.ts.map +1 -0
  179. package/dist/cjs/exporter/xlsx/power-query-builder.js +306 -0
  180. package/dist/cjs/exporter/xlsx/slicer-builder.d.ts +11 -0
  181. package/dist/cjs/exporter/xlsx/slicer-builder.d.ts.map +1 -0
  182. package/dist/cjs/exporter/xlsx/slicer-builder.js +87 -0
  183. package/dist/cjs/exporter/xlsx/sparkline-builder.d.ts +61 -0
  184. package/dist/cjs/exporter/xlsx/sparkline-builder.d.ts.map +1 -0
  185. package/dist/cjs/exporter/xlsx/sparkline-builder.js +489 -0
  186. package/dist/cjs/exporter/xlsx/style-builder.d.ts +93 -0
  187. package/dist/cjs/exporter/xlsx/style-builder.d.ts.map +1 -0
  188. package/dist/cjs/exporter/xlsx/style-builder.js +813 -0
  189. package/dist/cjs/exporter/xlsx/threaded-comments-builder.d.ts +58 -0
  190. package/dist/cjs/exporter/xlsx/threaded-comments-builder.d.ts.map +1 -0
  191. package/dist/cjs/exporter/xlsx/threaded-comments-builder.js +189 -0
  192. package/dist/cjs/exporter/xlsx/xlsx-export.d.ts +121 -0
  193. package/dist/cjs/exporter/xlsx/xlsx-export.d.ts.map +1 -0
  194. package/dist/cjs/exporter/xlsx/xlsx-export.js +4596 -0
  195. package/dist/cjs/helpers/theme-xml-generator.d.ts +8 -0
  196. package/dist/cjs/helpers/theme-xml-generator.d.ts.map +1 -0
  197. package/dist/cjs/helpers/theme-xml-generator.js +33 -0
  198. package/dist/cjs/helpers.d.ts +34 -0
  199. package/dist/cjs/helpers.d.ts.map +1 -0
  200. package/dist/cjs/helpers.js +189 -0
  201. package/dist/cjs/index.d.ts +16 -0
  202. package/dist/cjs/index.d.ts.map +1 -0
  203. package/dist/cjs/index.js +15 -0
  204. package/dist/cjs/indexed-colors.d.ts +2 -0
  205. package/dist/cjs/indexed-colors.d.ts.map +1 -0
  206. package/dist/cjs/indexed-colors.js +75 -0
  207. package/dist/cjs/ods-export.d.ts +24 -0
  208. package/dist/cjs/ods-export.d.ts.map +1 -0
  209. package/dist/cjs/ods-export.js +23 -0
  210. package/dist/cjs/parse.d.ts +24 -0
  211. package/dist/cjs/parse.d.ts.map +1 -0
  212. package/dist/cjs/parse.js +68 -0
  213. package/dist/cjs/power-query.d.ts +41 -0
  214. package/dist/cjs/power-query.d.ts.map +1 -0
  215. package/dist/cjs/power-query.js +22 -0
  216. package/dist/cjs/server.d.ts +9 -0
  217. package/dist/cjs/server.d.ts.map +1 -0
  218. package/dist/cjs/server.js +8 -0
  219. package/dist/cjs/theme1.d.ts +3 -0
  220. package/dist/cjs/theme1.d.ts.map +1 -0
  221. package/dist/cjs/theme1.js +2 -0
  222. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
  223. package/dist/cjs/types.d.ts +14 -0
  224. package/dist/cjs/types.d.ts.map +1 -0
  225. package/dist/cjs/types.js +14 -0
  226. package/dist/cjs/vitest.config.d.ts +3 -0
  227. package/dist/cjs/vitest.config.d.ts.map +1 -0
  228. package/dist/cjs/vitest.config.js +16 -0
  229. package/dist/esm/autofilter-condition.d.ts +43 -0
  230. package/dist/esm/autofilter-condition.d.ts.map +1 -0
  231. package/dist/esm/autofilter-condition.js +145 -0
  232. package/dist/esm/csv-export.d.ts +49 -0
  233. package/dist/esm/csv-export.d.ts.map +1 -0
  234. package/dist/esm/csv-export.js +126 -0
  235. package/dist/esm/csv-import-worker.d.ts +16 -0
  236. package/dist/esm/csv-import-worker.d.ts.map +1 -0
  237. package/dist/esm/csv-import-worker.js +60 -0
  238. package/dist/esm/csv-import.d.ts +38 -0
  239. package/dist/esm/csv-import.d.ts.map +1 -0
  240. package/dist/esm/csv-import.js +132 -0
  241. package/dist/esm/csv-parser/helpers.d.ts +14 -0
  242. package/dist/esm/csv-parser/helpers.d.ts.map +1 -0
  243. package/dist/esm/csv-parser/helpers.js +0 -0
  244. package/dist/esm/csv-parser/types.d.ts +66 -0
  245. package/dist/esm/csv-parser/types.d.ts.map +1 -0
  246. package/dist/esm/csv-parser/types.js +14 -0
  247. package/dist/esm/csv-parser/worker.d.ts +2 -0
  248. package/dist/esm/csv-parser/worker.d.ts.map +1 -0
  249. package/dist/esm/csv-parser/worker.js +154 -0
  250. package/dist/esm/excel-export.d.ts +11 -0
  251. package/dist/esm/excel-export.d.ts.map +1 -0
  252. package/dist/esm/excel-export.js +13 -0
  253. package/dist/esm/excel-import-session.d.ts +51 -0
  254. package/dist/esm/excel-import-session.d.ts.map +1 -0
  255. package/dist/esm/excel-import-session.js +255 -0
  256. package/dist/esm/excel-import-worker.d.ts +7 -0
  257. package/dist/esm/excel-import-worker.d.ts.map +1 -0
  258. package/dist/esm/excel-import-worker.js +116 -0
  259. package/dist/esm/excel-parser/builtin-numfmts.d.ts +24 -0
  260. package/dist/esm/excel-parser/builtin-numfmts.d.ts.map +1 -0
  261. package/dist/esm/excel-parser/builtin-numfmts.js +59 -0
  262. package/dist/esm/excel-parser/cfb-decryptor.d.ts +53 -0
  263. package/dist/esm/excel-parser/cfb-decryptor.d.ts.map +1 -0
  264. package/dist/esm/excel-parser/cfb-decryptor.js +493 -0
  265. package/dist/esm/excel-parser/cfb-encryptor.d.ts +23 -0
  266. package/dist/esm/excel-parser/cfb-encryptor.d.ts.map +1 -0
  267. package/dist/esm/excel-parser/cfb-encryptor.js +181 -0
  268. package/dist/esm/excel-parser/dv-cell-stamp.d.ts +29 -0
  269. package/dist/esm/excel-parser/dv-cell-stamp.d.ts.map +1 -0
  270. package/dist/esm/excel-parser/dv-cell-stamp.js +155 -0
  271. package/dist/esm/excel-parser/helpers.d.ts +28 -0
  272. package/dist/esm/excel-parser/helpers.d.ts.map +1 -0
  273. package/dist/esm/excel-parser/helpers.js +160 -0
  274. package/dist/esm/excel-parser/interface.d.ts +179 -0
  275. package/dist/esm/excel-parser/interface.d.ts.map +1 -0
  276. package/dist/esm/excel-parser/interface.js +1 -0
  277. package/dist/esm/excel-parser/plugins/base/index.d.ts +31 -0
  278. package/dist/esm/excel-parser/plugins/base/index.d.ts.map +1 -0
  279. package/dist/esm/excel-parser/plugins/base/index.js +64 -0
  280. package/dist/esm/excel-parser/plugins/ods/conditional-formatting.d.ts +16 -0
  281. package/dist/esm/excel-parser/plugins/ods/conditional-formatting.d.ts.map +1 -0
  282. package/dist/esm/excel-parser/plugins/ods/conditional-formatting.js +405 -0
  283. package/dist/esm/excel-parser/plugins/ods/data-validations.d.ts +15 -0
  284. package/dist/esm/excel-parser/plugins/ods/data-validations.d.ts.map +1 -0
  285. package/dist/esm/excel-parser/plugins/ods/data-validations.js +331 -0
  286. package/dist/esm/excel-parser/plugins/ods/formula.d.ts +8 -0
  287. package/dist/esm/excel-parser/plugins/ods/formula.d.ts.map +1 -0
  288. package/dist/esm/excel-parser/plugins/ods/formula.js +82 -0
  289. package/dist/esm/excel-parser/plugins/ods/index.d.ts +122 -0
  290. package/dist/esm/excel-parser/plugins/ods/index.d.ts.map +1 -0
  291. package/dist/esm/excel-parser/plugins/ods/index.js +2896 -0
  292. package/dist/esm/excel-parser/plugins/ods/sparklines.d.ts +25 -0
  293. package/dist/esm/excel-parser/plugins/ods/sparklines.d.ts.map +1 -0
  294. package/dist/esm/excel-parser/plugins/ods/sparklines.js +188 -0
  295. package/dist/esm/excel-parser/plugins/ods/styles.d.ts +60 -0
  296. package/dist/esm/excel-parser/plugins/ods/styles.d.ts.map +1 -0
  297. package/dist/esm/excel-parser/plugins/ods/styles.js +732 -0
  298. package/dist/esm/excel-parser/plugins/ods/types.d.ts +7 -0
  299. package/dist/esm/excel-parser/plugins/ods/types.d.ts.map +1 -0
  300. package/dist/esm/excel-parser/plugins/ods/types.js +1 -0
  301. package/dist/esm/excel-parser/plugins/xls/index.d.ts +5 -0
  302. package/dist/esm/excel-parser/plugins/xls/index.d.ts.map +1 -0
  303. package/dist/esm/excel-parser/plugins/xls/index.js +7 -0
  304. package/dist/esm/excel-parser/plugins/xlsb/biff-record-reader.d.ts +13 -0
  305. package/dist/esm/excel-parser/plugins/xlsb/biff-record-reader.d.ts.map +1 -0
  306. package/dist/esm/excel-parser/plugins/xlsb/biff-record-reader.js +48 -0
  307. package/dist/esm/excel-parser/plugins/xlsb/index.d.ts +117 -0
  308. package/dist/esm/excel-parser/plugins/xlsb/index.d.ts.map +1 -0
  309. package/dist/esm/excel-parser/plugins/xlsb/index.js +2339 -0
  310. package/dist/esm/excel-parser/plugins/xlsb/rgce-parser.d.ts +18 -0
  311. package/dist/esm/excel-parser/plugins/xlsb/rgce-parser.d.ts.map +1 -0
  312. package/dist/esm/excel-parser/plugins/xlsb/rgce-parser.js +522 -0
  313. package/dist/esm/excel-parser/plugins/xlsm/index.d.ts +5 -0
  314. package/dist/esm/excel-parser/plugins/xlsm/index.d.ts.map +1 -0
  315. package/dist/esm/excel-parser/plugins/xlsm/index.js +6 -0
  316. package/dist/esm/excel-parser/plugins/xlsx/charts.d.ts +60 -0
  317. package/dist/esm/excel-parser/plugins/xlsx/charts.d.ts.map +1 -0
  318. package/dist/esm/excel-parser/plugins/xlsx/charts.js +2036 -0
  319. package/dist/esm/excel-parser/plugins/xlsx/conditional-formatting.d.ts +18 -0
  320. package/dist/esm/excel-parser/plugins/xlsx/conditional-formatting.d.ts.map +1 -0
  321. package/dist/esm/excel-parser/plugins/xlsx/conditional-formatting.js +621 -0
  322. package/dist/esm/excel-parser/plugins/xlsx/data-validations.d.ts +4 -0
  323. package/dist/esm/excel-parser/plugins/xlsx/data-validations.d.ts.map +1 -0
  324. package/dist/esm/excel-parser/plugins/xlsx/data-validations.js +493 -0
  325. package/dist/esm/excel-parser/plugins/xlsx/drawing.d.ts +39 -0
  326. package/dist/esm/excel-parser/plugins/xlsx/drawing.d.ts.map +1 -0
  327. package/dist/esm/excel-parser/plugins/xlsx/drawing.js +905 -0
  328. package/dist/esm/excel-parser/plugins/xlsx/index.d.ts +320 -0
  329. package/dist/esm/excel-parser/plugins/xlsx/index.d.ts.map +1 -0
  330. package/dist/esm/excel-parser/plugins/xlsx/index.js +4654 -0
  331. package/dist/esm/excel-parser/plugins/xlsx/numfmt.d.ts +2 -0
  332. package/dist/esm/excel-parser/plugins/xlsx/numfmt.d.ts.map +1 -0
  333. package/dist/esm/excel-parser/plugins/xlsx/numfmt.js +3 -0
  334. package/dist/esm/excel-parser/plugins/xlsx/pivots.d.ts +40 -0
  335. package/dist/esm/excel-parser/plugins/xlsx/pivots.d.ts.map +1 -0
  336. package/dist/esm/excel-parser/plugins/xlsx/pivots.js +254 -0
  337. package/dist/esm/excel-parser/plugins/xlsx/relationships.d.ts +8 -0
  338. package/dist/esm/excel-parser/plugins/xlsx/relationships.d.ts.map +1 -0
  339. package/dist/esm/excel-parser/plugins/xlsx/relationships.js +13 -0
  340. package/dist/esm/excel-parser/plugins/xlsx/sheet-views.d.ts +26 -0
  341. package/dist/esm/excel-parser/plugins/xlsx/sheet-views.d.ts.map +1 -0
  342. package/dist/esm/excel-parser/plugins/xlsx/sheet-views.js +64 -0
  343. package/dist/esm/excel-parser/plugins/xlsx/styles.d.ts +44 -0
  344. package/dist/esm/excel-parser/plugins/xlsx/styles.d.ts.map +1 -0
  345. package/dist/esm/excel-parser/plugins/xlsx/styles.js +1365 -0
  346. package/dist/esm/excel-parser/plugins/xlsx/theme.d.ts +50 -0
  347. package/dist/esm/excel-parser/plugins/xlsx/theme.d.ts.map +1 -0
  348. package/dist/esm/excel-parser/plugins/xlsx/theme.js +127 -0
  349. package/dist/esm/excel-parser/plugins/xlsx/threaded-comments.d.ts +47 -0
  350. package/dist/esm/excel-parser/plugins/xlsx/threaded-comments.d.ts.map +1 -0
  351. package/dist/esm/excel-parser/plugins/xlsx/threaded-comments.js +103 -0
  352. package/dist/esm/excel-parser/plugins/xlsx/value-type-detection.d.ts +44 -0
  353. package/dist/esm/excel-parser/plugins/xlsx/value-type-detection.d.ts.map +1 -0
  354. package/dist/esm/excel-parser/plugins/xlsx/value-type-detection.js +399 -0
  355. package/dist/esm/excel-parser/registry.d.ts +5 -0
  356. package/dist/esm/excel-parser/registry.d.ts.map +1 -0
  357. package/dist/esm/excel-parser/registry.js +20 -0
  358. package/dist/esm/excel-parser/style-registry.d.ts +51 -0
  359. package/dist/esm/excel-parser/style-registry.d.ts.map +1 -0
  360. package/dist/esm/excel-parser/style-registry.js +163 -0
  361. package/dist/esm/excel-parser/theme-default.d.ts +3 -0
  362. package/dist/esm/excel-parser/theme-default.d.ts.map +1 -0
  363. package/dist/esm/excel-parser/theme-default.js +19 -0
  364. package/dist/esm/excel-parser/types.d.ts +365 -0
  365. package/dist/esm/excel-parser/types.d.ts.map +1 -0
  366. package/dist/esm/excel-parser/types.js +59 -0
  367. package/dist/esm/excel-parser/utils.d.ts +6 -0
  368. package/dist/esm/excel-parser/utils.d.ts.map +1 -0
  369. package/dist/esm/excel-parser/utils.js +25 -0
  370. package/dist/esm/excel-parser/workbook.d.ts +51 -0
  371. package/dist/esm/excel-parser/workbook.d.ts.map +1 -0
  372. package/dist/esm/excel-parser/workbook.js +192 -0
  373. package/dist/esm/excel-parser/worker.d.ts +2 -0
  374. package/dist/esm/excel-parser/worker.d.ts.map +1 -0
  375. package/dist/esm/excel-parser/worker.js +862 -0
  376. package/dist/esm/excel-parser/zip-parser-streaming.d.ts +13 -0
  377. package/dist/esm/excel-parser/zip-parser-streaming.d.ts.map +1 -0
  378. package/dist/esm/excel-parser/zip-parser-streaming.js +119 -0
  379. package/dist/esm/excel-parser/zip-parser.d.ts +11 -0
  380. package/dist/esm/excel-parser/zip-parser.d.ts.map +1 -0
  381. package/dist/esm/excel-parser/zip-parser.js +43 -0
  382. package/dist/esm/exporter/invalid-data-validation.d.ts +19 -0
  383. package/dist/esm/exporter/invalid-data-validation.d.ts.map +1 -0
  384. package/dist/esm/exporter/invalid-data-validation.js +37 -0
  385. package/dist/esm/exporter/ods/ods-export.d.ts +26 -0
  386. package/dist/esm/exporter/ods/ods-export.d.ts.map +1 -0
  387. package/dist/esm/exporter/ods/ods-export.js +3238 -0
  388. package/dist/esm/exporter/ods/sparkline-builder.d.ts +33 -0
  389. package/dist/esm/exporter/ods/sparkline-builder.d.ts.map +1 -0
  390. package/dist/esm/exporter/ods/sparkline-builder.js +165 -0
  391. package/dist/esm/exporter/xlsx/chart-builder.d.ts +3 -0
  392. package/dist/esm/exporter/xlsx/chart-builder.d.ts.map +1 -0
  393. package/dist/esm/exporter/xlsx/chart-builder.js +1805 -0
  394. package/dist/esm/exporter/xlsx/chart-templates.d.ts +1781 -0
  395. package/dist/esm/exporter/xlsx/chart-templates.d.ts.map +1 -0
  396. package/dist/esm/exporter/xlsx/chart-templates.js +1798 -0
  397. package/dist/esm/exporter/xlsx/future-functions.d.ts +10 -0
  398. package/dist/esm/exporter/xlsx/future-functions.d.ts.map +1 -0
  399. package/dist/esm/exporter/xlsx/future-functions.js +264 -0
  400. package/dist/esm/exporter/xlsx/pivot-builder.d.ts +58 -0
  401. package/dist/esm/exporter/xlsx/pivot-builder.d.ts.map +1 -0
  402. package/dist/esm/exporter/xlsx/pivot-builder.js +230 -0
  403. package/dist/esm/exporter/xlsx/power-query-builder.d.ts +26 -0
  404. package/dist/esm/exporter/xlsx/power-query-builder.d.ts.map +1 -0
  405. package/dist/esm/exporter/xlsx/power-query-builder.js +257 -0
  406. package/dist/esm/exporter/xlsx/slicer-builder.d.ts +11 -0
  407. package/dist/esm/exporter/xlsx/slicer-builder.d.ts.map +1 -0
  408. package/dist/esm/exporter/xlsx/slicer-builder.js +84 -0
  409. package/dist/esm/exporter/xlsx/sparkline-builder.d.ts +61 -0
  410. package/dist/esm/exporter/xlsx/sparkline-builder.d.ts.map +1 -0
  411. package/dist/esm/exporter/xlsx/sparkline-builder.js +437 -0
  412. package/dist/esm/exporter/xlsx/style-builder.d.ts +93 -0
  413. package/dist/esm/exporter/xlsx/style-builder.d.ts.map +1 -0
  414. package/dist/esm/exporter/xlsx/style-builder.js +795 -0
  415. package/dist/esm/exporter/xlsx/threaded-comments-builder.d.ts +58 -0
  416. package/dist/esm/exporter/xlsx/threaded-comments-builder.d.ts.map +1 -0
  417. package/dist/esm/exporter/xlsx/threaded-comments-builder.js +175 -0
  418. package/dist/esm/exporter/xlsx/xlsx-export.d.ts +121 -0
  419. package/dist/esm/exporter/xlsx/xlsx-export.d.ts.map +1 -0
  420. package/dist/esm/exporter/xlsx/xlsx-export.js +4062 -0
  421. package/dist/esm/helpers/theme-xml-generator.d.ts +8 -0
  422. package/dist/esm/helpers/theme-xml-generator.d.ts.map +1 -0
  423. package/dist/esm/helpers/theme-xml-generator.js +33 -0
  424. package/dist/esm/helpers.d.ts +34 -0
  425. package/dist/esm/helpers.d.ts.map +1 -0
  426. package/dist/esm/helpers.js +182 -0
  427. package/dist/esm/index.d.ts +16 -0
  428. package/dist/esm/index.d.ts.map +1 -0
  429. package/dist/esm/index.js +15 -0
  430. package/dist/esm/indexed-colors.d.ts +2 -0
  431. package/dist/esm/indexed-colors.d.ts.map +1 -0
  432. package/dist/esm/indexed-colors.js +75 -0
  433. package/dist/esm/ods-export.d.ts +24 -0
  434. package/dist/esm/ods-export.d.ts.map +1 -0
  435. package/dist/esm/ods-export.js +12 -0
  436. package/dist/esm/parse.d.ts +24 -0
  437. package/dist/esm/parse.d.ts.map +1 -0
  438. package/dist/esm/parse.js +55 -0
  439. package/dist/esm/power-query.d.ts +41 -0
  440. package/dist/esm/power-query.d.ts.map +1 -0
  441. package/dist/esm/power-query.js +19 -0
  442. package/dist/esm/server.d.ts +9 -0
  443. package/dist/esm/server.d.ts.map +1 -0
  444. package/dist/esm/server.js +8 -0
  445. package/dist/esm/theme1.d.ts +3 -0
  446. package/dist/esm/theme1.d.ts.map +1 -0
  447. package/dist/esm/theme1.js +2 -0
  448. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
  449. package/dist/esm/types.d.ts +14 -0
  450. package/dist/esm/types.d.ts.map +1 -0
  451. package/dist/esm/types.js +14 -0
  452. package/dist/esm/vitest.config.d.ts +3 -0
  453. package/dist/esm/vitest.config.d.ts.map +1 -0
  454. package/dist/esm/vitest.config.js +16 -0
  455. package/package.json +62 -0
  456. 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,3 @@
1
+ import type { SpreadsheetTheme } from "@rowsncolumns/spreadsheet";
2
+ export declare const defaultSpreadsheetTheme: SpreadsheetTheme;
3
+ //# sourceMappingURL=theme-default.d.ts.map
@@ -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
+ };