@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,493 @@
1
+ import { addressToSelection, checkIfStringIsReference, cellToAddress, } from "@rowsncolumns/utils";
2
+ import { uuid } from "@rowsncolumns/utils";
3
+ import { get } from "lodash-es";
4
+ const formatSheetName = (sheetName) => {
5
+ if (!sheetName) {
6
+ return "";
7
+ }
8
+ return `'${sheetName.replace(/'/g, "''")}'`;
9
+ };
10
+ const ensureSheetReference = (reference, sheetName) => {
11
+ if (!sheetName || reference.includes("!")) {
12
+ return reference;
13
+ }
14
+ const prefix = formatSheetName(sheetName);
15
+ return `${prefix}!${reference}`;
16
+ };
17
+ const extractFormulaText = (entry) => {
18
+ if (entry === undefined || entry === null) {
19
+ return undefined;
20
+ }
21
+ if (typeof entry === "string" || typeof entry === "number") {
22
+ return String(entry);
23
+ }
24
+ if (typeof entry === "object") {
25
+ if (typeof entry.t$ === "string") {
26
+ return entry.t$;
27
+ }
28
+ if (typeof entry._ === "string") {
29
+ return entry._;
30
+ }
31
+ if (typeof entry["#text"] === "string") {
32
+ return entry["#text"];
33
+ }
34
+ }
35
+ return undefined;
36
+ };
37
+ const normalizeFormulaText = (entry) => {
38
+ const text = extractFormulaText(entry);
39
+ if (text === undefined) {
40
+ return undefined;
41
+ }
42
+ const trimmed = text.trim();
43
+ if (!trimmed)
44
+ return undefined;
45
+ return trimmed.startsWith("=") ? trimmed.slice(1) : trimmed;
46
+ };
47
+ const normalizeOperator = (operator, hasSecondValue) => operator || (hasSecondValue ? "between" : "equal");
48
+ const mapNumberOperatorToCondition = (operator, hasSecondValue) => {
49
+ const normalized = normalizeOperator(operator, hasSecondValue);
50
+ const operatorMap = {
51
+ between: "NUMBER_BETWEEN",
52
+ notBetween: "NUMBER_NOT_BETWEEN",
53
+ equal: "NUMBER_EQ",
54
+ notEqual: "NUMBER_NOT_EQ",
55
+ greaterThan: "NUMBER_GREATER",
56
+ greaterThanOrEqual: "NUMBER_GREATER_THAN_EQ",
57
+ lessThan: "NUMBER_LESS",
58
+ lessThanOrEqual: "NUMBER_LESS_THAN_EQ",
59
+ };
60
+ return operatorMap[normalized];
61
+ };
62
+ const mapDateOperatorToCondition = (operator, hasSecondValue) => {
63
+ const normalized = normalizeOperator(operator, hasSecondValue);
64
+ const operatorMap = {
65
+ between: "DATE_BETWEEN",
66
+ notBetween: "DATE_NOT_BETWEEN",
67
+ equal: "DATE_EQ",
68
+ notEqual: "DATE_NOT_EQ",
69
+ greaterThan: "DATE_AFTER",
70
+ greaterThanOrEqual: "DATE_ON_OR_AFTER",
71
+ lessThan: "DATE_BEFORE",
72
+ lessThanOrEqual: "DATE_ON_OR_BEFORE",
73
+ };
74
+ return operatorMap[normalized];
75
+ };
76
+ const buildTextLengthFormula = (operator, baseCellRef, fromExpr, toExpr) => {
77
+ const lenExpr = `LEN(${baseCellRef})`;
78
+ const normalized = normalizeOperator(operator, Boolean(toExpr));
79
+ if (!fromExpr && normalized !== "between" && normalized !== "notBetween") {
80
+ return undefined;
81
+ }
82
+ switch (normalized) {
83
+ case "between":
84
+ if (!fromExpr || !toExpr)
85
+ return undefined;
86
+ return `AND(${lenExpr}>=${fromExpr},${lenExpr}<=${toExpr})`;
87
+ case "notBetween":
88
+ if (!fromExpr || !toExpr)
89
+ return undefined;
90
+ return `OR(${lenExpr}<${fromExpr},${lenExpr}>${toExpr})`;
91
+ case "equal":
92
+ return `${lenExpr}=${fromExpr}`;
93
+ case "notEqual":
94
+ return `${lenExpr}<>${fromExpr}`;
95
+ case "greaterThan":
96
+ return `${lenExpr}>${fromExpr}`;
97
+ case "greaterThanOrEqual":
98
+ return `${lenExpr}>=${fromExpr}`;
99
+ case "lessThan":
100
+ return `${lenExpr}<${fromExpr}`;
101
+ case "lessThanOrEqual":
102
+ return `${lenExpr}<=${fromExpr}`;
103
+ default:
104
+ return undefined;
105
+ }
106
+ };
107
+ const mapErrorStyle = (style) => {
108
+ if (!style)
109
+ return "stop";
110
+ if (style === "warning")
111
+ return "warning";
112
+ if (style === "information")
113
+ return "information";
114
+ return "stop";
115
+ };
116
+ const NUMBER_VALIDATION_TYPES = new Set(["whole", "decimal", "time"]);
117
+ const escapeRegExp = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
118
+ const parseListValues = (raw) => {
119
+ const trimmed = raw.trim();
120
+ if (!trimmed)
121
+ return [];
122
+ return [parseTextLiteral(trimmed)];
123
+ };
124
+ const parseTextLiteral = (raw) => {
125
+ const trimmed = raw.trim();
126
+ if (!trimmed)
127
+ return "";
128
+ if (trimmed.startsWith('"') && trimmed.endsWith('"')) {
129
+ return trimmed.slice(1, -1).replace(/""/g, '"');
130
+ }
131
+ return trimmed;
132
+ };
133
+ const parseCustomValidationFormula = (rawFormula, baseCellRef) => {
134
+ const formula = rawFormula.trim().startsWith("=")
135
+ ? rawFormula.trim().slice(1)
136
+ : rawFormula.trim();
137
+ if (!formula)
138
+ return undefined;
139
+ const baseMatch = /^([A-Z]+)(\d+)$/i.exec(baseCellRef);
140
+ const baseRefPattern = baseMatch
141
+ ? `\\$?${baseMatch[1]}\\$?${baseMatch[2]}`
142
+ : escapeRegExp(baseCellRef);
143
+ const basePattern = `(?:${baseRefPattern}|INDIRECT\\("RC",FALSE\\))`;
144
+ const textContains = new RegExp(`^ISNUMBER\\(SEARCH\\((.+),\\s*${basePattern}\\)\\)$`, "i");
145
+ const textNotContains = new RegExp(`^ISERROR\\(SEARCH\\((.+),\\s*${basePattern}\\)\\)$`, "i");
146
+ const textStartsWith = new RegExp(`^LEFT\\(${basePattern},LEN\\((.+)\\)\\)=(.+)$`, "i");
147
+ const textEndsWith = new RegExp(`^RIGHT\\(${basePattern},LEN\\((.+)\\)\\)=(.+)$`, "i");
148
+ const textIsEmail = new RegExp(`^AND\\(ISNUMBER\\(SEARCH\\("@",${basePattern}\\)\\),ISNUMBER\\(SEARCH\\("\\.",${basePattern}\\)\\)\\)$`, "i");
149
+ const textIsUrl = new RegExp(`^OR\\(LEFT\\(${basePattern},7\\)="http://",LEFT\\(${basePattern},8\\)="https://"\\)$`, "i");
150
+ const blank = new RegExp(`^${basePattern}=""$`, "i");
151
+ const notBlank = new RegExp(`^${basePattern}<>""$`, "i");
152
+ const boolean = new RegExp(`^OR\\(${basePattern}=TRUE,${basePattern}=FALSE\\)$`, "i");
153
+ const dateIsValid = new RegExp(`^ISNUMBER\\(${basePattern}\\)$`, "i");
154
+ const previousNumber = new RegExp(`^IFERROR\\(${basePattern}\\s*(>=|<=|>|<)\\s*INDIRECT\\("R\\[-1\\]C",FALSE\\),TRUE\\)$`, "i");
155
+ const oneOfRange = new RegExp(`^COUNTIF\\((.+),\\s*${basePattern}\\)\\s*>\\s*0$`, "i");
156
+ const oneOfList = new RegExp(`^OR\\((.+)\\)$`, "i");
157
+ let match = formula.match(textContains);
158
+ if (match) {
159
+ const value = parseTextLiteral(match[1]);
160
+ return value
161
+ ? { type: "TEXT_CONTAINS", values: [{ userEnteredValue: value }] }
162
+ : undefined;
163
+ }
164
+ match = formula.match(textNotContains);
165
+ if (match) {
166
+ const value = parseTextLiteral(match[1]);
167
+ return value
168
+ ? { type: "TEXT_NOT_CONTAINS", values: [{ userEnteredValue: value }] }
169
+ : undefined;
170
+ }
171
+ match = formula.match(textStartsWith);
172
+ if (match) {
173
+ const value = parseTextLiteral(match[1]);
174
+ return value
175
+ ? { type: "TEXT_STARTS_WITH", values: [{ userEnteredValue: value }] }
176
+ : undefined;
177
+ }
178
+ match = formula.match(textEndsWith);
179
+ if (match) {
180
+ const value = parseTextLiteral(match[1]);
181
+ return value
182
+ ? { type: "TEXT_ENDS_WITH", values: [{ userEnteredValue: value }] }
183
+ : undefined;
184
+ }
185
+ if (textIsEmail.test(formula)) {
186
+ return { type: "TEXT_IS_EMAIL", values: [] };
187
+ }
188
+ if (textIsUrl.test(formula)) {
189
+ return { type: "TEXT_IS_URL", values: [] };
190
+ }
191
+ if (blank.test(formula)) {
192
+ return { type: "BLANK", values: [] };
193
+ }
194
+ if (notBlank.test(formula)) {
195
+ return { type: "NOT_BLANK", values: [] };
196
+ }
197
+ if (boolean.test(formula)) {
198
+ return { type: "BOOLEAN", values: [] };
199
+ }
200
+ if (dateIsValid.test(formula)) {
201
+ return { type: "DATE_IS_VALID", values: [] };
202
+ }
203
+ match = formula.match(previousNumber);
204
+ if (match) {
205
+ const op = match[1];
206
+ const opMap = {
207
+ ">": "NUMBER_GREATER_THAN_PREVIOUS",
208
+ ">=": "NUMBER_GREATER_THAN_EQ_PREVIOUS",
209
+ "<": "NUMBER_LESS_THAN_PREVIOUS",
210
+ "<=": "NUMBER_LESS_THAN_EQ_PREVIOUS",
211
+ };
212
+ const type = opMap[op];
213
+ return type ? { type, values: [] } : undefined;
214
+ }
215
+ match = formula.match(oneOfRange);
216
+ if (match) {
217
+ const rangeRef = match[1].trim();
218
+ return rangeRef
219
+ ? { type: "ONE_OF_RANGE", values: [{ userEnteredValue: rangeRef }] }
220
+ : undefined;
221
+ }
222
+ match = formula.match(oneOfList);
223
+ if (match) {
224
+ const entries = [];
225
+ const entryRegex = new RegExp(`${basePattern}\\s*=\\s*([^,\\)]+)`, "gi");
226
+ let entryMatch;
227
+ while ((entryMatch = entryRegex.exec(match[1]))) {
228
+ const value = parseTextLiteral(entryMatch[1]);
229
+ if (value) {
230
+ entries.push({ userEnteredValue: value });
231
+ }
232
+ }
233
+ if (entries.length) {
234
+ return { type: "ONE_OF_LIST", values: entries };
235
+ }
236
+ }
237
+ return undefined;
238
+ };
239
+ export const getDataValidationsForSheet = (workbook, sheetId, sheet_data, sheetName) => {
240
+ const dataValidations = [];
241
+ // Handle both with and without namespace prefix
242
+ const validation = get(sheet_data, "worksheet.dataValidations.dataValidation") ||
243
+ get(sheet_data, "x:worksheet.x:dataValidations.x:dataValidation") ||
244
+ [];
245
+ const validations = Array.isArray(validation) ? validation : [validation];
246
+ // x14 (worksheet-extLst) validations — what Excel writes when a list rule's
247
+ // source lives on ANOTHER sheet. Ranges arrive via the `<xm:sqref>` CHILD
248
+ // (not the classic `sqref` attribute) and formulas via
249
+ // `<x14:formula1>/<xm:f>`. Normalize each into the classic node shape so
250
+ // the mapping loop below handles both forms identically.
251
+ const extEntry = get(sheet_data, "worksheet.extLst.ext") ||
252
+ get(sheet_data, "x:worksheet.x:extLst.x:ext") ||
253
+ [];
254
+ const exts = Array.isArray(extEntry) ? extEntry : [extEntry];
255
+ const x14Rules = exts
256
+ .flatMap((ext) => {
257
+ const block = get(ext, "x14:dataValidations.x14:dataValidation") ||
258
+ get(ext, "dataValidations.dataValidation");
259
+ return block ? (Array.isArray(block) ? block : [block]) : [];
260
+ })
261
+ .map((node) => {
262
+ const sqrefEntry = node?.["xm:sqref"] ?? node?.sqref;
263
+ const sqref = (Array.isArray(sqrefEntry) ? sqrefEntry : [sqrefEntry])
264
+ .map((entry) => extractFormulaText(entry)?.trim())
265
+ .filter(Boolean)
266
+ .join(" ");
267
+ if (!sqref) {
268
+ return undefined;
269
+ }
270
+ const formulaText = (formulaNode) => {
271
+ if (formulaNode === undefined || formulaNode === null) {
272
+ return undefined;
273
+ }
274
+ return extractFormulaText(formulaNode?.["xm:f"] ?? formulaNode?.f ?? formulaNode);
275
+ };
276
+ return {
277
+ a$: { ...(node?.a$ ?? {}), sqref },
278
+ formula1: formulaText(node?.["x14:formula1"] ?? node?.formula1),
279
+ formula2: formulaText(node?.["x14:formula2"] ?? node?.formula2),
280
+ };
281
+ })
282
+ .filter(Boolean);
283
+ const namedRanges = workbook.getNamedRanges();
284
+ for (const rule of [...validations, ...x14Rules]) {
285
+ if (!rule?.a$?.sqref) {
286
+ continue;
287
+ }
288
+ const sqref = rule.a$.sqref.split(" ");
289
+ const type = rule.a$.type;
290
+ const ranges = [];
291
+ for (const ref of sqref) {
292
+ const range = addressToSelection(ref)?.range;
293
+ if (range) {
294
+ ranges.push({
295
+ sheetId,
296
+ ...range,
297
+ });
298
+ }
299
+ }
300
+ if (!ranges.length) {
301
+ continue;
302
+ }
303
+ const baseCellRef = cellToAddress({
304
+ rowIndex: ranges[0].startRowIndex,
305
+ columnIndex: ranges[0].startColumnIndex,
306
+ }) ?? "A1";
307
+ const allowBlank = rule.a$.allowBlank === "1";
308
+ const showInputMessage = rule.a$.showInputMessage === "1";
309
+ const showErrorMessage = rule.a$.showErrorMessage === "1";
310
+ const inputMessage = showInputMessage && (rule.a$.prompt || rule.a$.promptTitle)
311
+ ? {
312
+ title: rule.a$.promptTitle ?? undefined,
313
+ message: rule.a$.prompt ?? undefined,
314
+ }
315
+ : undefined;
316
+ // showErrorMessage alone (no custom title/text) still means "reject
317
+ // invalid input with Excel's default alert" — keep the alert with just
318
+ // its style so the Stop/Warning behavior survives import.
319
+ const alert = showErrorMessage
320
+ ? {
321
+ style: mapErrorStyle(rule.a$.errorStyle),
322
+ message: rule.a$.error || rule.a$.errorTitle
323
+ ? {
324
+ title: rule.a$.errorTitle ?? undefined,
325
+ message: rule.a$.error ?? undefined,
326
+ }
327
+ : undefined,
328
+ }
329
+ : undefined;
330
+ // Prompt-only DV: Excel's "input message" feature attaches a tooltip
331
+ // (and/or an error alert) to a cell range without any validation
332
+ // constraint. These have no `type` attribute. Preserve them so the
333
+ // tooltip survives the round-trip.
334
+ if (!type) {
335
+ if (inputMessage || alert) {
336
+ dataValidations.push({
337
+ id: uuid(),
338
+ ranges,
339
+ allowBlank,
340
+ inputMessage,
341
+ alert,
342
+ });
343
+ }
344
+ continue;
345
+ }
346
+ const formula1Node = rule.formula1 ?? rule["x:formula1"];
347
+ const formula2Node = rule.formula2 ?? rule["x:formula2"];
348
+ // Capture the source xlsx representation verbatim so the exporter can
349
+ // round-trip the original `type`/`operator`/formulas instead of
350
+ // re-synthesizing from the parsed `condition` (which loses fidelity:
351
+ // `whole` collapses to `decimal`, `textLength` collapses to `custom`,
352
+ // user formulas get `INDIRECT("RC",FALSE)` rewriting). The source
353
+ // formula text is kept with any leading `=` stripped (matches xlsx wire
354
+ // format — `<formula1>` carries the expression without `=`).
355
+ const formula1Verbatim = (() => {
356
+ const text = extractFormulaText(formula1Node);
357
+ if (text === undefined)
358
+ return undefined;
359
+ const trimmed = String(text).trim();
360
+ if (!trimmed)
361
+ return undefined;
362
+ return trimmed.startsWith("=") ? trimmed.slice(1) : trimmed;
363
+ })();
364
+ const formula2Verbatim = (() => {
365
+ const text = extractFormulaText(formula2Node);
366
+ if (text === undefined)
367
+ return undefined;
368
+ const trimmed = String(text).trim();
369
+ if (!trimmed)
370
+ return undefined;
371
+ return trimmed.startsWith("=") ? trimmed.slice(1) : trimmed;
372
+ })();
373
+ const xlsxSource = {
374
+ type,
375
+ ...(rule.a$.operator ? { operator: rule.a$.operator } : {}),
376
+ ...(formula1Verbatim !== undefined
377
+ ? { formula1: formula1Verbatim }
378
+ : {}),
379
+ ...(formula2Verbatim !== undefined
380
+ ? { formula2: formula2Verbatim }
381
+ : {}),
382
+ };
383
+ if (type === "list") {
384
+ const rawFormula = extractFormulaText(formula1Node) ?? "";
385
+ const trimmedFormula = String(rawFormula ?? "").trim();
386
+ const referenceCandidate = trimmedFormula.startsWith("=")
387
+ ? trimmedFormula.slice(1)
388
+ : trimmedFormula;
389
+ const isOffsetFormula = /^offset\(/i.test(referenceCandidate);
390
+ const isNamedRange = !!namedRanges.find((n) => n.name === referenceCandidate);
391
+ const listValues = parseListValues(trimmedFormula);
392
+ const isRef = checkIfStringIsReference(referenceCandidate) ||
393
+ isOffsetFormula ||
394
+ isNamedRange;
395
+ const normalizedReference = isRef && !isNamedRange
396
+ ? ensureSheetReference(referenceCandidate, sheetName)
397
+ : referenceCandidate;
398
+ const values = isRef
399
+ ? [
400
+ {
401
+ userEnteredValue: normalizedReference.startsWith("=")
402
+ ? normalizedReference
403
+ : `=${normalizedReference}`,
404
+ },
405
+ ]
406
+ : listValues.map((value) => ({ userEnteredValue: value }));
407
+ if (!values.length) {
408
+ values.push({ userEnteredValue: trimmedFormula });
409
+ }
410
+ dataValidations.push({
411
+ id: uuid(),
412
+ ranges,
413
+ condition: {
414
+ type: isRef ? "ONE_OF_RANGE" : "ONE_OF_LIST",
415
+ values,
416
+ },
417
+ allowBlank,
418
+ displayStyle: rule.a$.showDropDown === "1" ? "plain" : undefined,
419
+ inputMessage,
420
+ alert,
421
+ xlsxSource,
422
+ });
423
+ continue;
424
+ }
425
+ const formula1 = normalizeFormulaText(formula1Node);
426
+ const formula2 = normalizeFormulaText(formula2Node);
427
+ if (type === "custom") {
428
+ if (!formula1) {
429
+ continue;
430
+ }
431
+ const parsedCondition = parseCustomValidationFormula(formula1, baseCellRef);
432
+ dataValidations.push({
433
+ id: uuid(),
434
+ ranges,
435
+ condition: parsedCondition ?? {
436
+ type: "CUSTOM_FORMULA",
437
+ values: [{ userEnteredValue: formula1 }],
438
+ },
439
+ allowBlank,
440
+ inputMessage,
441
+ alert,
442
+ xlsxSource,
443
+ });
444
+ continue;
445
+ }
446
+ if (type === "textLength") {
447
+ const lengthFormula = buildTextLengthFormula(rule.a$.operator, baseCellRef, formula1, formula2);
448
+ if (!lengthFormula) {
449
+ continue;
450
+ }
451
+ dataValidations.push({
452
+ id: uuid(),
453
+ ranges,
454
+ condition: {
455
+ type: "CUSTOM_FORMULA",
456
+ values: [{ userEnteredValue: lengthFormula }],
457
+ },
458
+ allowBlank,
459
+ inputMessage,
460
+ alert,
461
+ xlsxSource,
462
+ });
463
+ continue;
464
+ }
465
+ const isDateType = type === "date";
466
+ if (!isDateType && !NUMBER_VALIDATION_TYPES.has(type)) {
467
+ continue;
468
+ }
469
+ const conditionType = isDateType
470
+ ? mapDateOperatorToCondition(rule.a$.operator, Boolean(formula2))
471
+ : mapNumberOperatorToCondition(rule.a$.operator, Boolean(formula2));
472
+ if (!conditionType || !formula1) {
473
+ continue;
474
+ }
475
+ const values = [
476
+ { userEnteredValue: formula1 },
477
+ ...(formula2 ? [{ userEnteredValue: formula2 }] : []),
478
+ ];
479
+ dataValidations.push({
480
+ id: uuid(),
481
+ ranges,
482
+ condition: {
483
+ type: conditionType,
484
+ values,
485
+ },
486
+ allowBlank,
487
+ inputMessage,
488
+ alert,
489
+ xlsxSource,
490
+ });
491
+ }
492
+ return dataValidations;
493
+ };
@@ -0,0 +1,39 @@
1
+ import type { EmbeddedObject, EmbedShapeSpec } from "@rowsncolumns/spreadsheet";
2
+ import { type XMLParser } from "fast-xml-parser";
3
+ import { type StreamingZipParser } from "../../zip-parser-streaming";
4
+ export type EmbeddedObjectWithPosition = EmbeddedObject & {
5
+ isInsideCell?: boolean;
6
+ };
7
+ /**
8
+ * Process different types of image anchors
9
+ * @param anchors The anchor elements from the drawing
10
+ * @param anchorType The type of anchor
11
+ * @param drawingPath The path to the drawing file
12
+ * @param sheetName The name of the worksheet
13
+ * @param zipParser The zip parser instance
14
+ * @param xmlParser The XML parser instance
15
+ * @returns An array of image objects with their properties and binary data
16
+ */
17
+ export declare function processAnchors(anchors: any, anchorType: string, drawingPath: string, sheetId: number, zipParser: StreamingZipParser, xmlParser: XMLParser): Promise<EmbeddedObjectWithPosition[]>;
18
+ /**
19
+ * Whether an `<xdr:sp>` should import as a drawing shape (`EmbedShapeSpec`)
20
+ * rather than a textbox. Text boxes are excluded explicitly (`txBox="1"`), and
21
+ * a rect with no `<xdr:style>` block stays a textbox too — routing those to
22
+ * the shape renderer would repaint plain text notes with the default accent
23
+ * shape style.
24
+ */
25
+ export declare function isDrawingShape(shape: any): boolean;
26
+ /** Parse an `<xdr:sp>` drawing shape into an {@link EmbedShapeSpec}. */
27
+ export declare function parseShapeSpec(shape: any): EmbedShapeSpec;
28
+ /**
29
+ * Determine if a oneCellAnchor image is inside a cell
30
+ * Using EMU values for accurate assessment
31
+ * @param fromColOff Column offset in EMUs
32
+ * @param fromRowOff Row offset in EMUs
33
+ * @param fLocksWithSheet Whether image locks with sheet
34
+ * @param cx Image width in EMUs
35
+ * @param cy Image height in EMUs
36
+ * @returns Boolean indicating if the image is inside a cell
37
+ */
38
+ export declare function determineIfOneCellInsideCell(fromColOff: number, fromRowOff: number, fLocksWithSheet: string, cx: number, cy: number): boolean;
39
+ //# sourceMappingURL=drawing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drawing.d.ts","sourceRoot":"","sources":["../../../../../excel-parser/plugins/xlsx/drawing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,cAAc,EAEd,cAAc,EAWf,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAoDrE,MAAM,MAAM,0BAA0B,GAAG,cAAc,GAAG;IACxD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,GAAG,EACZ,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,kBAAkB,EAC7B,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,0BAA0B,EAAE,CAAC,CA6dvC;AA6OD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CASlD;AAED,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,KAAK,EAAE,GAAG,GAAG,cAAc,CA8CzD;AA8MD;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,EACvB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,GACT,OAAO,CAqBT"}