@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,941 @@
1
+ import { __assign, __awaiter, __generator, __values } from "tslib";
2
+ import { uuid } from "@rowsncolumns/utils";
3
+ import { get } from "lodash-es";
4
+ /**
5
+ * Create a data URL from binary data and MIME type
6
+ * @param data Binary data of the image
7
+ * @param mimeType MIME type of the image
8
+ * @returns Data URL string
9
+ */
10
+ function createDataUrl(data, mimeType) {
11
+ // Convert ArrayBuffer to Base64 string
12
+ var base64 = arrayBufferToBase64(data);
13
+ return "data:".concat(mimeType, ";base64,").concat(base64);
14
+ }
15
+ /**
16
+ * Convert an ArrayBuffer to a Base64 string
17
+ * @param buffer ArrayBuffer to convert
18
+ * @returns Base64 string
19
+ */
20
+ function arrayBufferToBase64(buffer) {
21
+ var bytes = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);
22
+ // Use Buffer in Node.js, btoa in browser
23
+ if (typeof Buffer !== "undefined") {
24
+ return Buffer.from(bytes).toString("base64");
25
+ }
26
+ var binary = "";
27
+ var len = bytes.byteLength;
28
+ for (var i = 0; i < len; i++) {
29
+ binary += String.fromCharCode(bytes[i]);
30
+ }
31
+ return btoa(binary);
32
+ }
33
+ // Conversion constant: 1 pixel is approximately 9525 EMUs (at 96 DPI)
34
+ var EMU_PER_PIXEL = 9525;
35
+ var DEFAULT_CELL_IMAGE_MAX_SIZE_PX = 60;
36
+ var CELL_IMAGE_OFFSET_THRESHOLD_PX = 1;
37
+ /**
38
+ * Convert EMUs to pixels
39
+ * @param emuValue Value in English Metric Units
40
+ * @returns Value in pixels (at 96 DPI)
41
+ */
42
+ function emuToPixels(emuValue) {
43
+ return Math.round(emuValue / EMU_PER_PIXEL);
44
+ }
45
+ /**
46
+ * Process different types of image anchors
47
+ * @param anchors The anchor elements from the drawing
48
+ * @param anchorType The type of anchor
49
+ * @param drawingPath The path to the drawing file
50
+ * @param sheetName The name of the worksheet
51
+ * @param zipParser The zip parser instance
52
+ * @param xmlParser The XML parser instance
53
+ * @returns An array of image objects with their properties and binary data
54
+ */
55
+ export function processAnchors(anchors, anchorType, drawingPath, sheetId, zipParser, xmlParser) {
56
+ return __awaiter(this, void 0, void 0, function () {
57
+ var images, anchorArray, _loop_1, anchorArray_1, anchorArray_1_1, anchor, e_1_1;
58
+ var e_1, _a;
59
+ var _b;
60
+ return __generator(this, function (_c) {
61
+ switch (_c.label) {
62
+ case 0:
63
+ images = [];
64
+ if (!anchors)
65
+ return [2 /*return*/, images];
66
+ anchorArray = Array.isArray(anchors) ? anchors : [anchors];
67
+ _loop_1 = function (anchor) {
68
+ var isInsideCell, position, fromColBase0, fromRowBase0, toColBase0, toRowBase0, fromCol, fromRow, toCol, toRow, fromColOffEmu, fromRowOffEmu, toColOffEmu, toRowOffEmu, fromColOff, fromRowOff, toColOff, toRowOff, cxEmu, cyEmu, width, height, editAs, fromColBase0, fromRowBase0, fromCol, fromRow, fromColOffEmu, fromRowOffEmu, fromColOff, fromRowOff, cxEmu, cyEmu, width, height, fLocksWithSheet, posXEmu, posYEmu, posX, posY, cxEmu, cyEmu, width, height, picture, shape, shapeSpec, cxEmu, cyEmu, rotUnits, txBody, textBoxName, textBoxId, cxEmu, cyEmu, width, height, textBoxSpec, blipRId, imageName, imageId, imageTitle, drawingDir, drawingFilename, drawingRelsPath, drawingRelsContent, drawingRels, imageRelations, imageRel, imageTarget, imagePath, baseDir, imageData, imageExt, imageType;
69
+ return __generator(this, function (_d) {
70
+ switch (_d.label) {
71
+ case 0:
72
+ isInsideCell = false;
73
+ position = {
74
+ sheetId: sheetId,
75
+ // sheet: sheetName,
76
+ // anchorType: anchorType, // Store the anchor type to differentiate positioning
77
+ };
78
+ if (anchorType === "twoCellAnchors") {
79
+ fromColBase0 = parseInt(get(anchor, "xdr:from.xdr:col.t$") ||
80
+ get(anchor, "from.col.t$") ||
81
+ get(anchor, "xdr:from.xdr:col") ||
82
+ get(anchor, "from.col") ||
83
+ "0");
84
+ fromRowBase0 = parseInt(get(anchor, "xdr:from.xdr:row.t$") ||
85
+ get(anchor, "from.row.t$") ||
86
+ get(anchor, "xdr:from.xdr:row") ||
87
+ get(anchor, "from.row") ||
88
+ "0");
89
+ toColBase0 = parseInt(get(anchor, "xdr:to.xdr:col.t$") ||
90
+ get(anchor, "to.col.t$") ||
91
+ get(anchor, "xdr:to.xdr:col") ||
92
+ get(anchor, "to.col") ||
93
+ "0");
94
+ toRowBase0 = parseInt(get(anchor, "xdr:to.xdr:row.t$") ||
95
+ get(anchor, "to.row.t$") ||
96
+ get(anchor, "xdr:to.xdr:row") ||
97
+ get(anchor, "to.row") ||
98
+ "0");
99
+ fromCol = fromColBase0 + 1;
100
+ fromRow = fromRowBase0 + 1;
101
+ toCol = toColBase0 + 1;
102
+ toRow = toRowBase0 + 1;
103
+ fromColOffEmu = parseInt(get(anchor, "xdr:from.xdr:colOff.t$") ||
104
+ get(anchor, "from.colOff.t$") ||
105
+ get(anchor, "xdr:from.xdr:colOff") ||
106
+ get(anchor, "from.colOff") ||
107
+ "0");
108
+ fromRowOffEmu = parseInt(get(anchor, "xdr:from.xdr:rowOff.t$") ||
109
+ get(anchor, "from.rowOff.t$") ||
110
+ get(anchor, "xdr:from.xdr:rowOff") ||
111
+ get(anchor, "from.rowOff") ||
112
+ "0");
113
+ toColOffEmu = parseInt(get(anchor, "xdr:to.xdr:colOff.t$") ||
114
+ get(anchor, "to.colOff.t$") ||
115
+ get(anchor, "xdr:to.xdr:colOff") ||
116
+ get(anchor, "to.colOff") ||
117
+ "0");
118
+ toRowOffEmu = parseInt(get(anchor, "xdr:to.xdr:rowOff.t$") ||
119
+ get(anchor, "to.rowOff.t$") ||
120
+ get(anchor, "xdr:to.xdr:rowOff") ||
121
+ get(anchor, "to.rowOff") ||
122
+ "0");
123
+ fromColOff = emuToPixels(fromColOffEmu);
124
+ fromRowOff = emuToPixels(fromRowOffEmu);
125
+ toColOff = emuToPixels(toColOffEmu);
126
+ toRowOff = emuToPixels(toRowOffEmu);
127
+ cxEmu = parseInt(get(anchor, "xdr:pic.xdr:spPr.a:xfrm.a:ext.a$.cx") ||
128
+ get(anchor, "pic.spPr.xfrm.ext.a$.cx") ||
129
+ "0");
130
+ cyEmu = parseInt(get(anchor, "xdr:pic.xdr:spPr.a:xfrm.a:ext.a$.cy") ||
131
+ get(anchor, "pic.spPr.xfrm.ext.a$.cy") ||
132
+ "0");
133
+ width = emuToPixels(cxEmu);
134
+ height = emuToPixels(cyEmu);
135
+ editAs = get(anchor, "a$.editAs") || "";
136
+ isInsideCell = determineIfTwoCellInsideCell(editAs, fromColBase0, fromRowBase0, toColBase0, toRowBase0);
137
+ position = __assign(__assign({}, position), { overlayPosition: {
138
+ anchorCell: {
139
+ rowIndex: fromRow,
140
+ columnIndex: fromCol,
141
+ },
142
+ heightPixels: height,
143
+ widthPixels: width,
144
+ offsetXPixels: fromColOff,
145
+ offsetYPixels: fromRowOff,
146
+ } });
147
+ }
148
+ else if (anchorType === "oneCellAnchor") {
149
+ fromColBase0 = parseInt(get(anchor, "xdr:from.xdr:col.t$") ||
150
+ get(anchor, "from.col.t$") ||
151
+ get(anchor, "xdr:from.xdr:col") ||
152
+ get(anchor, "from.col") ||
153
+ "0");
154
+ fromRowBase0 = parseInt(get(anchor, "xdr:from.xdr:row.t$") ||
155
+ get(anchor, "from.row.t$") ||
156
+ get(anchor, "xdr:from.xdr:row") ||
157
+ get(anchor, "from.row") ||
158
+ "0");
159
+ fromCol = fromColBase0 + 1;
160
+ fromRow = fromRowBase0 + 1;
161
+ fromColOffEmu = parseInt(get(anchor, "xdr:from.xdr:colOff.t$") ||
162
+ get(anchor, "from.colOff.t$") ||
163
+ get(anchor, "xdr:from.xdr:colOff") ||
164
+ get(anchor, "from.colOff") ||
165
+ "0");
166
+ fromRowOffEmu = parseInt(get(anchor, "xdr:from.xdr:rowOff.t$") ||
167
+ get(anchor, "from.rowOff.t$") ||
168
+ get(anchor, "xdr:from.xdr:rowOff") ||
169
+ get(anchor, "from.rowOff") ||
170
+ "0");
171
+ fromColOff = emuToPixels(fromColOffEmu);
172
+ fromRowOff = emuToPixels(fromRowOffEmu);
173
+ cxEmu = parseInt(get(anchor, "xdr:ext.a$.cx") || get(anchor, "ext.a$.cx") || "0");
174
+ cyEmu = parseInt(get(anchor, "xdr:ext.a$.cy") || get(anchor, "ext.a$.cy") || "0");
175
+ width = emuToPixels(cxEmu);
176
+ height = emuToPixels(cyEmu);
177
+ fLocksWithSheet = get(anchor, "xdr:clientData.a$.fLocksWithSheet") ||
178
+ get(anchor, "clientData.a$.fLocksWithSheet") ||
179
+ "0";
180
+ isInsideCell = determineIfOneCellInsideCell(fromColOffEmu, fromRowOffEmu, fLocksWithSheet, cxEmu, cyEmu);
181
+ position = __assign(__assign({}, position), { overlayPosition: {
182
+ anchorCell: {
183
+ rowIndex: fromRow,
184
+ columnIndex: fromCol,
185
+ },
186
+ heightPixels: height,
187
+ widthPixels: width,
188
+ offsetXPixels: fromColOff,
189
+ offsetYPixels: fromRowOff,
190
+ } });
191
+ // position = {
192
+ // ...position,
193
+ // fromCol,
194
+ // fromRow,
195
+ // fromColOff,
196
+ // fromRowOff,
197
+ // width,
198
+ // height,
199
+ // // Store original indices in case they're needed
200
+ // _fromColBase0: fromColBase0,
201
+ // _fromRowBase0: fromRowBase0,
202
+ // // Store original EMU values for reference if needed
203
+ // _fromColOffEmu: fromColOffEmu,
204
+ // _fromRowOffEmu: fromRowOffEmu,
205
+ // _widthEmu: cxEmu,
206
+ // _heightEmu: cyEmu,
207
+ // fLocksWithSheet: fLocksWithSheet === "1",
208
+ // // For oneCellAnchor, determine based on offsets and locking
209
+ // isInsideCell: determineIfOneCellInsideCell(
210
+ // fromColOffEmu,
211
+ // fromRowOffEmu,
212
+ // fLocksWithSheet,
213
+ // cxEmu,
214
+ // cyEmu
215
+ // ),
216
+ // };
217
+ }
218
+ else if (anchorType === "absoluteAnchors") {
219
+ posXEmu = parseInt(get(anchor, "xdr:pos.a$.x") || get(anchor, "pos.a$.x") || "0") || 0;
220
+ posYEmu = parseInt(get(anchor, "xdr:pos.a$.y") || get(anchor, "pos.a$.y") || "0") || 0;
221
+ posX = emuToPixels(posXEmu);
222
+ posY = emuToPixels(posYEmu);
223
+ cxEmu = parseInt(get(anchor, "xdr:ext.a$.cx") || get(anchor, "ext.a$.cx") || "0") || 0;
224
+ cyEmu = parseInt(get(anchor, "xdr:ext.a$.cy") || get(anchor, "ext.a$.cy") || "0") || 0;
225
+ width = emuToPixels(cxEmu);
226
+ height = emuToPixels(cyEmu);
227
+ position = __assign(__assign({}, position), { overlayPosition: {
228
+ anchorCell: {
229
+ rowIndex: 1,
230
+ columnIndex: 1,
231
+ },
232
+ heightPixels: height,
233
+ widthPixels: width,
234
+ offsetXPixels: posX,
235
+ offsetYPixels: posY,
236
+ } });
237
+ }
238
+ picture = get(anchor, "xdr:pic") || get(anchor, "pic");
239
+ shape = get(anchor, "xdr:sp") || get(anchor, "sp");
240
+ // Drawing shape (Insert → Shapes): parsed into an `EmbedShapeSpec` so the
241
+ // geometry/fill/outline render. A shape is only routed here when it is
242
+ // visibly a *shape* — a non-rect preset geometry, an explicit fill, or an
243
+ // `<xdr:style>` theme-style block. Plain text boxes (`txBox="1"`, or a bare
244
+ // unstyled rect) keep the textbox path below, so they don't inherit the
245
+ // shape renderer's default accent styling.
246
+ if (shape && isDrawingShape(shape)) {
247
+ shapeSpec = parseShapeSpec(shape);
248
+ cxEmu = parseInt(get(shape, "xdr:spPr.a:xfrm.a:ext.a$.cx") ||
249
+ get(shape, "spPr.xfrm.ext.a$.cx") ||
250
+ "0");
251
+ cyEmu = parseInt(get(shape, "xdr:spPr.a:xfrm.a:ext.a$.cy") ||
252
+ get(shape, "spPr.xfrm.ext.a$.cy") ||
253
+ "0");
254
+ if (cxEmu > 0 && cyEmu > 0 && position.overlayPosition) {
255
+ position.overlayPosition.widthPixels = emuToPixels(cxEmu);
256
+ position.overlayPosition.heightPixels = emuToPixels(cyEmu);
257
+ }
258
+ rotUnits = parseInt(get(shape, "xdr:spPr.a:xfrm.a$.rot") ||
259
+ get(shape, "spPr.xfrm.a$.rot") ||
260
+ "0");
261
+ images.push({
262
+ isInsideCell: isInsideCell,
263
+ embedId: uuid(),
264
+ spec: shapeSpec,
265
+ position: position,
266
+ rotation: rotUnits ? rotUnits / 60000 : undefined,
267
+ draggable: true,
268
+ });
269
+ return [2 /*return*/, "continue"];
270
+ }
271
+ // Process textbox if shape has text body
272
+ if (shape) {
273
+ txBody = get(shape, "xdr:txBody") || get(shape, "txBody");
274
+ if (txBody) {
275
+ textBoxName = get(shape, "xdr:nvSpPr.xdr:cNvPr.a$.name") ||
276
+ get(shape, "nvSpPr.cNvPr.a$.name") ||
277
+ "TextBox";
278
+ textBoxId = get(shape, "xdr:nvSpPr.xdr:cNvPr.a$.id") ||
279
+ get(shape, "nvSpPr.cNvPr.a$.id") ||
280
+ "";
281
+ cxEmu = parseInt(get(shape, "xdr:spPr.a:xfrm.a:ext.a$.cx") ||
282
+ get(shape, "spPr.xfrm.ext.a$.cx") ||
283
+ "0");
284
+ cyEmu = parseInt(get(shape, "xdr:spPr.a:xfrm.a:ext.a$.cy") ||
285
+ get(shape, "spPr.xfrm.ext.a$.cy") ||
286
+ "0");
287
+ // Convert EMUs to pixels and override position dimensions if available
288
+ if (cxEmu > 0 && cyEmu > 0) {
289
+ width = emuToPixels(cxEmu);
290
+ height = emuToPixels(cyEmu);
291
+ if (position.overlayPosition) {
292
+ position.overlayPosition.widthPixels = width;
293
+ position.overlayPosition.heightPixels = height;
294
+ }
295
+ }
296
+ textBoxSpec = parseTextBoxContent(txBody, shape);
297
+ images.push({
298
+ isInsideCell: isInsideCell,
299
+ embedId: uuid(),
300
+ spec: textBoxSpec,
301
+ position: position,
302
+ draggable: true,
303
+ });
304
+ return [2 /*return*/, "continue"];
305
+ }
306
+ }
307
+ if (!picture)
308
+ return [2 /*return*/, "continue"];
309
+ blipRId = get(picture, "xdr:blipFill.a:blip.a$.embed") ||
310
+ get(picture, "xdr:blipFill.a:blip.a$.r:embed") ||
311
+ get(picture, "blipFill.a:blip.a$.embed") ||
312
+ get(picture, "blipFill.a:blip.a$.r:embed") ||
313
+ get(picture, "blipFill.blip.a$.embed") ||
314
+ get(picture, "blipFill.blip.a$.r:embed");
315
+ if (!blipRId)
316
+ return [2 /*return*/, "continue"];
317
+ imageName = get(picture, "xdr:nvPicPr.xdr:cNvPr.a$.name") ||
318
+ get(picture, "nvPicPr.cNvPr.a$.name") ||
319
+ "Image";
320
+ imageId = get(picture, "xdr:nvPicPr.xdr:cNvPr.a$.id") ||
321
+ get(picture, "nvPicPr.cNvPr.a$.id") ||
322
+ "";
323
+ imageTitle = get(picture, "xdr:nvPicPr.xdr:cNvPr.a$.title") ||
324
+ get(picture, "nvPicPr.cNvPr.a$.title") ||
325
+ "";
326
+ drawingDir = drawingPath.substring(0, drawingPath.lastIndexOf("/"));
327
+ drawingFilename = drawingPath.split("/").pop();
328
+ drawingRelsPath = "".concat(drawingDir, "/_rels/").concat(drawingFilename, ".rels");
329
+ return [4 /*yield*/, zipParser.getText(drawingRelsPath)];
330
+ case 1:
331
+ drawingRelsContent = _d.sent();
332
+ if (!drawingRelsContent)
333
+ return [2 /*return*/, "continue"];
334
+ drawingRels = xmlParser.parse(drawingRelsContent);
335
+ imageRelations = get(drawingRels, "Relationships.Relationship");
336
+ if (!imageRelations)
337
+ return [2 /*return*/, "continue"];
338
+ imageRel = Array.isArray(imageRelations)
339
+ ? imageRelations.find(function (rel) { return rel.a$.Id === blipRId; })
340
+ : imageRelations.a$.Id === blipRId
341
+ ? imageRelations
342
+ : null;
343
+ if (!imageRel)
344
+ return [2 /*return*/, "continue"];
345
+ imageTarget = imageRel.a$.Target;
346
+ imagePath = void 0;
347
+ // Handle different path formats
348
+ if (imageTarget.startsWith("/")) {
349
+ // Absolute path from the root of the zip
350
+ imagePath = imageTarget.substring(1);
351
+ }
352
+ else if (imageTarget.startsWith("../")) {
353
+ baseDir = drawingDir.split("/").slice(0, -1).join("/");
354
+ imagePath = "".concat(baseDir, "/").concat(imageTarget.replace("../", ""));
355
+ }
356
+ else {
357
+ // Relative path in the same directory
358
+ imagePath = "".concat(drawingDir, "/").concat(imageTarget);
359
+ }
360
+ return [4 /*yield*/, zipParser.getBinary(imagePath)];
361
+ case 2:
362
+ imageData = _d.sent();
363
+ if (!imageData)
364
+ return [2 /*return*/, "continue"];
365
+ imageExt = ((_b = imagePath.split(".").pop()) === null || _b === void 0 ? void 0 : _b.toLowerCase()) || "";
366
+ imageType = "image/".concat(imageExt === "jpg" ? "jpeg" : imageExt);
367
+ // Add the image to our collection
368
+ images.push({
369
+ isInsideCell: isInsideCell,
370
+ embedId: uuid(),
371
+ spec: {
372
+ id: imageId,
373
+ imageUrl: createDataUrl(imageData, imageType),
374
+ type: "image",
375
+ description: imageName,
376
+ },
377
+ position: position,
378
+ draggable: true,
379
+ lockAspectRatio: true,
380
+ });
381
+ return [2 /*return*/];
382
+ }
383
+ });
384
+ };
385
+ _c.label = 1;
386
+ case 1:
387
+ _c.trys.push([1, 6, 7, 8]);
388
+ anchorArray_1 = __values(anchorArray), anchorArray_1_1 = anchorArray_1.next();
389
+ _c.label = 2;
390
+ case 2:
391
+ if (!!anchorArray_1_1.done) return [3 /*break*/, 5];
392
+ anchor = anchorArray_1_1.value;
393
+ return [5 /*yield**/, _loop_1(anchor)];
394
+ case 3:
395
+ _c.sent();
396
+ _c.label = 4;
397
+ case 4:
398
+ anchorArray_1_1 = anchorArray_1.next();
399
+ return [3 /*break*/, 2];
400
+ case 5: return [3 /*break*/, 8];
401
+ case 6:
402
+ e_1_1 = _c.sent();
403
+ e_1 = { error: e_1_1 };
404
+ return [3 /*break*/, 8];
405
+ case 7:
406
+ try {
407
+ if (anchorArray_1_1 && !anchorArray_1_1.done && (_a = anchorArray_1.return)) _a.call(anchorArray_1);
408
+ }
409
+ finally { if (e_1) throw e_1.error; }
410
+ return [7 /*endfinally*/];
411
+ case 8: return [2 /*return*/, images];
412
+ }
413
+ });
414
+ });
415
+ }
416
+ /**
417
+ * Parse color from DrawingML color element
418
+ * Supports both RGB (srgbClr) and theme colors (schemeClr)
419
+ */
420
+ function parseDrawingColor(colorElement) {
421
+ if (!colorElement)
422
+ return undefined;
423
+ // RGB color
424
+ var srgbClr = get(colorElement, "a:srgbClr.a$.val");
425
+ if (srgbClr) {
426
+ return "#".concat(srgbClr);
427
+ }
428
+ // Theme color - map to approximate RGB values
429
+ var schemeClr = get(colorElement, "a:schemeClr.a$.val");
430
+ if (schemeClr) {
431
+ // Basic theme color mapping (Office theme defaults)
432
+ var themeColorMap = {
433
+ accent1: "#4472C4",
434
+ accent2: "#ED7D31",
435
+ accent3: "#A5A5A5",
436
+ accent4: "#FFC000",
437
+ accent5: "#5B9BD5",
438
+ accent6: "#70AD47",
439
+ dk1: "#000000",
440
+ lt1: "#FFFFFF",
441
+ dk2: "#44546A",
442
+ lt2: "#E7E6E6",
443
+ hlink: "#0563C1",
444
+ folHlink: "#954F72",
445
+ };
446
+ return themeColorMap[schemeClr] || "#000000";
447
+ }
448
+ return undefined;
449
+ }
450
+ var toArray = function (value) {
451
+ return Array.isArray(value) ? value : value ? [value] : [];
452
+ };
453
+ /** DrawingML scheme-color names → the spreadsheet theme's ColorIndex slots. */
454
+ var SCHEME_TO_THEME_INDEX = {
455
+ bg1: 0,
456
+ lt1: 0,
457
+ tx1: 1,
458
+ dk1: 1,
459
+ bg2: 2,
460
+ lt2: 2,
461
+ tx2: 3,
462
+ dk2: 3,
463
+ accent1: 4,
464
+ accent2: 5,
465
+ accent3: 6,
466
+ accent4: 7,
467
+ accent5: 8,
468
+ accent6: 9,
469
+ hlink: 10,
470
+ };
471
+ /** OOXML preset names → the renderer's preset union where they differ. */
472
+ var PRESET_RENAMES = {
473
+ rtTriangle: "rightTriangle",
474
+ snip1Rect: "snipSingleCornerRect",
475
+ };
476
+ /**
477
+ * Parse a DrawingML color element into a `Color` — a live theme reference
478
+ * (`{ theme, tint }`) for `<a:schemeClr>` (so the shape follows document theme
479
+ * changes, unlike {@link parseDrawingColor}'s baked-in hex), or a hex string
480
+ * for `<a:srgbClr>`. Luminance/tint modifiers map onto the theme tint:
481
+ * `lumOff`/`tint` lighten (accent1 "lighter 40%" = lumMod 60000 + lumOff 40000
482
+ * → tint 0.4), `shade`/`lumMod`-only darken.
483
+ */
484
+ function parseDrawingColorValue(colorElement) {
485
+ if (!colorElement)
486
+ return undefined;
487
+ var srgbClr = get(colorElement, "a:srgbClr.a$.val");
488
+ if (srgbClr)
489
+ return "#".concat(srgbClr);
490
+ var schemeClr = get(colorElement, "a:schemeClr");
491
+ var schemeVal = get(schemeClr, "a$.val");
492
+ if (schemeVal) {
493
+ var theme = SCHEME_TO_THEME_INDEX[schemeVal];
494
+ if (theme === undefined) {
495
+ // Unmapped scheme name (e.g. folHlink): fall back to the baked hex.
496
+ return parseDrawingColor(colorElement);
497
+ }
498
+ var lumOff = parseInt(get(schemeClr, "a:lumOff.a$.val") || "0");
499
+ var tintVal = parseInt(get(schemeClr, "a:tint.a$.val") || "0");
500
+ var shade = parseInt(get(schemeClr, "a:shade.a$.val") || "0");
501
+ var lumMod = parseInt(get(schemeClr, "a:lumMod.a$.val") || "0");
502
+ var tint = void 0;
503
+ if (lumOff > 0)
504
+ tint = lumOff / 100000;
505
+ else if (tintVal > 0)
506
+ tint = tintVal / 100000;
507
+ else if (shade > 0)
508
+ tint = -(1 - shade / 100000);
509
+ else if (lumMod > 0 && lumMod < 100000)
510
+ tint = -(1 - lumMod / 100000);
511
+ return tint !== undefined ? { theme: theme, tint: tint } : { theme: theme };
512
+ }
513
+ return undefined;
514
+ }
515
+ /** `<a:alpha val>` (1/100000) under a color element → 0–1 opacity, if reduced. */
516
+ function parseColorOpacity(colorElement) {
517
+ var alpha = parseInt(get(colorElement, "a:srgbClr.a:alpha.a$.val") ||
518
+ get(colorElement, "a:schemeClr.a:alpha.a$.val") ||
519
+ "0");
520
+ return alpha > 0 && alpha < 100000 ? alpha / 100000 : undefined;
521
+ }
522
+ /** `<a:prstGeom>` → geometry preset + `<a:avLst>` adjust guides. */
523
+ function parseShapeGeometry(spPr) {
524
+ var e_2, _a;
525
+ var _b;
526
+ var prstGeom = get(spPr, "a:prstGeom");
527
+ var prst = get(prstGeom, "a$.prst");
528
+ if (!prst)
529
+ return undefined;
530
+ var adjustments;
531
+ try {
532
+ for (var _c = __values(toArray(get(prstGeom, "a:avLst.a:gd"))), _d = _c.next(); !_d.done; _d = _c.next()) {
533
+ var gd = _d.value;
534
+ var name_1 = get(gd, "a$.name");
535
+ var fmla = get(gd, "a$.fmla") || "";
536
+ var match = /^val\s+(-?\d+)$/.exec(fmla);
537
+ if (name_1 && match) {
538
+ (adjustments !== null && adjustments !== void 0 ? adjustments : (adjustments = {}))[name_1] = parseInt(match[1]);
539
+ }
540
+ }
541
+ }
542
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
543
+ finally {
544
+ try {
545
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
546
+ }
547
+ finally { if (e_2) throw e_2.error; }
548
+ }
549
+ return { preset: (_b = PRESET_RENAMES[prst]) !== null && _b !== void 0 ? _b : prst, adjustments: adjustments };
550
+ }
551
+ /** Empty elements (`<a:noFill/>`) parse to `""` — presence must not be truthiness. */
552
+ var hasElement = function (obj, path) {
553
+ return get(obj, path) !== undefined;
554
+ };
555
+ /** Explicit `<a:noFill>`/`<a:solidFill>`/`<a:gradFill>` on `spPr` (style refs are separate). */
556
+ function parseShapeFill(spPr) {
557
+ if (hasElement(spPr, "a:noFill"))
558
+ return { kind: "none" };
559
+ var solidFill = get(spPr, "a:solidFill");
560
+ if (solidFill) {
561
+ var color = parseDrawingColorValue(solidFill);
562
+ if (color) {
563
+ return { kind: "solid", color: color, opacity: parseColorOpacity(solidFill) };
564
+ }
565
+ }
566
+ var gradFill = get(spPr, "a:gradFill");
567
+ if (gradFill) {
568
+ var stops = toArray(get(gradFill, "a:gsLst.a:gs"))
569
+ .map(function (gs) {
570
+ var _a;
571
+ return ({
572
+ position: parseInt(get(gs, "a$.pos") || "0") / 100000,
573
+ color: (_a = parseDrawingColorValue(gs)) !== null && _a !== void 0 ? _a : "#FFFFFF",
574
+ opacity: parseColorOpacity(gs),
575
+ });
576
+ })
577
+ .sort(function (a, b) { return a.position - b.position; });
578
+ if (stops.length) {
579
+ var ang = parseInt(get(gradFill, "a:lin.a$.ang") || "0");
580
+ return {
581
+ kind: "gradient",
582
+ stops: stops,
583
+ angle: ang ? ang / 60000 : 90,
584
+ shading: get(gradFill, "a:path") ? "radial" : "linear",
585
+ };
586
+ }
587
+ }
588
+ return undefined;
589
+ }
590
+ var DASH_RENAMES = {
591
+ solid: "solid",
592
+ dot: "dot",
593
+ sysDot: "dot",
594
+ dash: "dash",
595
+ sysDash: "dash",
596
+ dashDot: "dashDot",
597
+ sysDashDot: "dashDot",
598
+ lgDash: "longDash",
599
+ lgDashDot: "longDashDot",
600
+ lgDashDotDot: "longDashDotDot",
601
+ };
602
+ /** `<a:ln>` → outline; `<a:noFill>` inside it means explicitly strokeless (width 0). */
603
+ function parseShapeOutline(spPr) {
604
+ var ln = get(spPr, "a:ln");
605
+ if (ln === undefined)
606
+ return undefined;
607
+ if (hasElement(ln, "a:noFill"))
608
+ return { width: 0 };
609
+ var solidFill = get(ln, "a:solidFill");
610
+ var color = parseDrawingColorValue(solidFill);
611
+ var wEmu = parseInt(get(ln, "a$.w") || "0");
612
+ var dashVal = get(ln, "a:prstDash.a$.val");
613
+ if (!color && !wEmu && !dashVal)
614
+ return undefined;
615
+ return {
616
+ color: color,
617
+ width: wEmu ? emuToPixels(wEmu) : undefined,
618
+ dash: dashVal ? DASH_RENAMES[dashVal] : undefined,
619
+ opacity: solidFill ? parseColorOpacity(solidFill) : undefined,
620
+ };
621
+ }
622
+ /** `<a:effectLst><a:outerShdw>` → drop shadow (distance+direction → x/y offsets). */
623
+ function parseShapeShadow(spPr) {
624
+ var shdw = get(spPr, "a:effectLst.a:outerShdw");
625
+ if (!shdw)
626
+ return undefined;
627
+ var distPx = emuToPixels(parseInt(get(shdw, "a$.dist") || "0"));
628
+ var dirRad = (parseInt(get(shdw, "a$.dir") || "0") / 60000) * (Math.PI / 180);
629
+ var blurRad = parseInt(get(shdw, "a$.blurRad") || "0");
630
+ return {
631
+ color: parseDrawingColorValue(shdw),
632
+ opacity: parseColorOpacity(shdw),
633
+ blurRadius: blurRad ? emuToPixels(blurRad) : undefined,
634
+ offsetXPixels: distPx ? Math.round(Math.cos(dirRad) * distPx) : undefined,
635
+ offsetYPixels: distPx ? Math.round(Math.sin(dirRad) * distPx) : undefined,
636
+ };
637
+ }
638
+ /** `<xdr:style>` fill/line/effect/font references into the theme format scheme. */
639
+ function parseShapeStyleRefs(shape) {
640
+ var style = get(shape, "xdr:style") || get(shape, "style");
641
+ if (!style)
642
+ return undefined;
643
+ var parseRef = function (name) {
644
+ var ref = get(style, name);
645
+ if (!ref)
646
+ return undefined;
647
+ var index = parseInt(get(ref, "a$.idx") || "0");
648
+ var color = parseDrawingColorValue(ref);
649
+ return color ? { index: index, color: color } : undefined;
650
+ };
651
+ var refs = {
652
+ fill: parseRef("a:fillRef"),
653
+ line: parseRef("a:lnRef"),
654
+ effect: parseRef("a:effectRef"),
655
+ };
656
+ var fontRef = get(style, "a:fontRef");
657
+ if (fontRef) {
658
+ var scheme = get(fontRef, "a$.idx");
659
+ if (scheme === "major" || scheme === "minor") {
660
+ refs.font = { scheme: scheme, color: parseDrawingColorValue(fontRef) };
661
+ }
662
+ }
663
+ return refs.fill || refs.line || refs.effect || refs.font ? refs : undefined;
664
+ }
665
+ /**
666
+ * Whether an `<xdr:sp>` should import as a drawing shape (`EmbedShapeSpec`)
667
+ * rather than a textbox. Text boxes are excluded explicitly (`txBox="1"`), and
668
+ * a rect with no `<xdr:style>` block stays a textbox too — routing those to
669
+ * the shape renderer would repaint plain text notes with the default accent
670
+ * shape style.
671
+ */
672
+ export function isDrawingShape(shape) {
673
+ var txBox = get(shape, "xdr:nvSpPr.xdr:cNvSpPr.a$.txBox") ||
674
+ get(shape, "nvSpPr.cNvSpPr.a$.txBox");
675
+ if (txBox === "1" || txBox === true)
676
+ return false;
677
+ var spPr = get(shape, "xdr:spPr") || get(shape, "spPr");
678
+ var preset = get(spPr, "a:prstGeom.a$.prst");
679
+ if (preset && preset !== "rect")
680
+ return true;
681
+ return hasElement(shape, "xdr:style") || hasElement(shape, "style");
682
+ }
683
+ /** Parse an `<xdr:sp>` drawing shape into an {@link EmbedShapeSpec}. */
684
+ export function parseShapeSpec(shape) {
685
+ var _a, _b, _c;
686
+ var spPr = get(shape, "xdr:spPr") || get(shape, "spPr");
687
+ var name = get(shape, "xdr:nvSpPr.xdr:cNvPr.a$.name") ||
688
+ get(shape, "nvSpPr.cNvPr.a$.name");
689
+ // Shape text rides the textbox content model; box-level background/borders
690
+ // are shape fill/outline concerns, so only the text fields carry over. An
691
+ // empty text body (Excel writes one on every shape) is omitted entirely.
692
+ var textBody;
693
+ var txBody = get(shape, "xdr:txBody") || get(shape, "txBody");
694
+ if (txBody) {
695
+ var tb = parseTextBoxContent(txBody, shape);
696
+ var hasText = Boolean((_a = tb.text) === null || _a === void 0 ? void 0 : _a.trim()) ||
697
+ Boolean((_b = tb.richText) === null || _b === void 0 ? void 0 : _b.some(function (run) { return run.text.trim(); }));
698
+ if (hasText) {
699
+ textBody = {
700
+ text: tb.text,
701
+ richText: tb.richText,
702
+ textFormat: tb.textFormat,
703
+ verticalAlignment: tb.verticalAlignment,
704
+ horizontalAlignment: tb.horizontalAlignment,
705
+ wrapStrategy: tb.wrapStrategy,
706
+ textRotation: tb.textRotation,
707
+ padding: tb.padding,
708
+ };
709
+ }
710
+ }
711
+ var xfrm = get(spPr, "a:xfrm");
712
+ var flipH = get(xfrm, "a$.flipH");
713
+ var flipV = get(xfrm, "a$.flipV");
714
+ return {
715
+ type: "shape",
716
+ name: name,
717
+ geometry: (_c = parseShapeGeometry(spPr)) !== null && _c !== void 0 ? _c : { preset: "rect" },
718
+ fill: parseShapeFill(spPr),
719
+ outline: parseShapeOutline(spPr),
720
+ shadow: parseShapeShadow(spPr),
721
+ styleRefs: parseShapeStyleRefs(shape),
722
+ textBody: textBody,
723
+ flipHorizontal: flipH === "1" || flipH === true ? true : undefined,
724
+ flipVertical: flipV === "1" || flipV === true ? true : undefined,
725
+ };
726
+ }
727
+ /**
728
+ * Parse textbox content from DrawingML text body
729
+ * @param txBody The text body element from DrawingML
730
+ * @param shape The shape element containing formatting properties
731
+ * @returns EmbedTextBoxSpec object
732
+ */
733
+ function parseTextBoxContent(txBody, shape) {
734
+ var e_3, _a, e_4, _b;
735
+ var richText = [];
736
+ var plainText = "";
737
+ // Get paragraphs
738
+ var paragraphs = get(txBody, "a:p") || [];
739
+ var paragraphArray = Array.isArray(paragraphs) ? paragraphs : [paragraphs];
740
+ try {
741
+ for (var paragraphArray_1 = __values(paragraphArray), paragraphArray_1_1 = paragraphArray_1.next(); !paragraphArray_1_1.done; paragraphArray_1_1 = paragraphArray_1.next()) {
742
+ var paragraph = paragraphArray_1_1.value;
743
+ // Extract paragraph properties for indentation and bullets
744
+ var pPr = get(paragraph, "a:pPr") || {};
745
+ var indentEmu = parseInt(get(pPr, "a$.marL") || get(pPr, "a$.indent") || "0");
746
+ // Convert EMUs to approximate character spaces (roughly 90000 EMUs ≈ 1 character space)
747
+ var indentSpaces = Math.round(indentEmu / 90000);
748
+ // Check for bullets
749
+ var bulletChar = "";
750
+ var buChar = get(pPr, "a:buChar.a$.char");
751
+ var buAutoNum = get(pPr, "a:buAutoNum");
752
+ var buNone = get(pPr, "a:buNone");
753
+ if (!buNone) {
754
+ if (buChar) {
755
+ // Custom bullet character (e.g., "•", "-", etc.)
756
+ bulletChar = buChar + " ";
757
+ }
758
+ else if (buAutoNum) {
759
+ // Auto-numbered bullets (would need context to track numbering)
760
+ bulletChar = "• ";
761
+ }
762
+ }
763
+ // Get text runs
764
+ var runs = get(paragraph, "a:r") || [];
765
+ var runArray = Array.isArray(runs) ? runs : runs ? [runs] : [];
766
+ // Add indentation and bullet to the first run of the paragraph
767
+ var isFirstRun = true;
768
+ try {
769
+ for (var runArray_1 = (e_4 = void 0, __values(runArray)), runArray_1_1 = runArray_1.next(); !runArray_1_1.done; runArray_1_1 = runArray_1.next()) {
770
+ var run = runArray_1_1.value;
771
+ var text = get(run, "a:t.t$") || get(run, "a:t") || "";
772
+ // Handle tab characters
773
+ var tabElements = get(run, "a:tab");
774
+ if (tabElements) {
775
+ var tabCount = Array.isArray(tabElements) ? tabElements.length : 1;
776
+ text = "\t".repeat(tabCount) + text;
777
+ }
778
+ // Add indentation and bullet to the first run
779
+ if (isFirstRun) {
780
+ if (indentSpaces > 0) {
781
+ var indent = " ".repeat(indentSpaces);
782
+ text = indent + text;
783
+ }
784
+ if (bulletChar) {
785
+ text = bulletChar + text;
786
+ }
787
+ isFirstRun = false;
788
+ }
789
+ plainText += text;
790
+ // Parse run properties
791
+ var rPr = get(run, "a:rPr") || {};
792
+ var format = {};
793
+ // Font size (in points * 100, e.g., 1100 = 11pt)
794
+ var sz = parseInt(get(rPr, "a$.sz") || "0");
795
+ if (sz > 0) {
796
+ format.fontSize = sz / 100;
797
+ }
798
+ // Bold
799
+ var bold = get(rPr, "a$.b");
800
+ if (bold === "1" || bold === true) {
801
+ format.bold = true;
802
+ }
803
+ // Italic
804
+ var italic = get(rPr, "a$.i");
805
+ if (italic === "1" || italic === true) {
806
+ format.italic = true;
807
+ }
808
+ // Underline
809
+ var underline = get(rPr, "a$.u");
810
+ if (underline && underline !== "none") {
811
+ format.underline = true;
812
+ }
813
+ // Strikethrough
814
+ var strike = get(rPr, "a$.strike");
815
+ if (strike && strike !== "noStrike") {
816
+ format.strikethrough = true;
817
+ }
818
+ // Font family
819
+ var fontFamily = get(rPr, "a:latin.a$.typeface");
820
+ if (fontFamily) {
821
+ format.fontFamily = fontFamily;
822
+ }
823
+ // Text color (supports RGB and theme colors)
824
+ var solidFill_1 = get(rPr, "a:solidFill");
825
+ var color = parseDrawingColor(solidFill_1);
826
+ if (color) {
827
+ format.color = color;
828
+ }
829
+ richText.push({
830
+ text: text,
831
+ format: Object.keys(format).length > 0 ? format : undefined,
832
+ });
833
+ }
834
+ }
835
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
836
+ finally {
837
+ try {
838
+ if (runArray_1_1 && !runArray_1_1.done && (_b = runArray_1.return)) _b.call(runArray_1);
839
+ }
840
+ finally { if (e_4) throw e_4.error; }
841
+ }
842
+ // Add paragraph break (newline) between paragraphs
843
+ if (paragraphArray.indexOf(paragraph) < paragraphArray.length - 1) {
844
+ plainText += "\n";
845
+ richText.push({ text: "\n" });
846
+ }
847
+ }
848
+ }
849
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
850
+ finally {
851
+ try {
852
+ if (paragraphArray_1_1 && !paragraphArray_1_1.done && (_a = paragraphArray_1.return)) _a.call(paragraphArray_1);
853
+ }
854
+ finally { if (e_3) throw e_3.error; }
855
+ }
856
+ // Get shape properties for background, borders, etc.
857
+ var spPr = get(shape, "xdr:spPr") || get(shape, "spPr");
858
+ var spec = {
859
+ type: "textbox",
860
+ text: plainText,
861
+ richText: richText.length > 0 ? richText : undefined,
862
+ };
863
+ // Parse background color (supports RGB and theme colors)
864
+ var solidFill = get(spPr, "a:solidFill");
865
+ var bgColor = parseDrawingColor(solidFill);
866
+ if (bgColor) {
867
+ spec.backgroundColor = bgColor;
868
+ }
869
+ // Parse text alignment and other properties from body properties
870
+ var bodyPr = get(txBody, "a:bodyPr") || {};
871
+ var anchor = get(bodyPr, "a$.anchor");
872
+ if (anchor) {
873
+ // Map DrawingML anchor to our vertical alignment
874
+ var anchorMap = {
875
+ t: "top",
876
+ ctr: "middle",
877
+ b: "bottom",
878
+ };
879
+ spec.verticalAlignment = anchorMap[anchor];
880
+ }
881
+ // Parse wrap strategy
882
+ var wrap = get(bodyPr, "a$.wrap");
883
+ if (wrap) {
884
+ var wrapMap = {
885
+ square: "wrap",
886
+ none: "overflow",
887
+ };
888
+ spec.wrapStrategy = wrapMap[wrap];
889
+ }
890
+ // Parse padding (insets) - convert from EMUs to pixels
891
+ var lIns = parseInt(get(bodyPr, "a$.lIns") || "0");
892
+ var rIns = parseInt(get(bodyPr, "a$.rIns") || "0");
893
+ var tIns = parseInt(get(bodyPr, "a$.tIns") || "0");
894
+ var bIns = parseInt(get(bodyPr, "a$.bIns") || "0");
895
+ // Use average of insets as padding (or could store separately if needed)
896
+ var avgPadding = (lIns + rIns + tIns + bIns) / 4;
897
+ if (avgPadding > 0) {
898
+ spec.padding = emuToPixels(avgPadding);
899
+ }
900
+ return spec;
901
+ }
902
+ /**
903
+ * Determine if a two-cell anchored image is inside a cell
904
+ * @param editAs The editAs attribute value
905
+ * @param fromCol From column
906
+ * @param fromRow From row
907
+ * @param toCol To column
908
+ * @param toRow To row
909
+ * @returns Boolean indicating if image is inside a cell
910
+ */
911
+ function determineIfTwoCellInsideCell(editAs, fromCol, fromRow, toCol, toRow) {
912
+ // Two-cell anchors represent floating images in Excel. We only mark them as
913
+ // "cell" content when the rectangle is constrained to a single cell.
914
+ return fromCol === toCol && fromRow === toRow;
915
+ }
916
+ /**
917
+ * Determine if a oneCellAnchor image is inside a cell
918
+ * Using EMU values for accurate assessment
919
+ * @param fromColOff Column offset in EMUs
920
+ * @param fromRowOff Row offset in EMUs
921
+ * @param fLocksWithSheet Whether image locks with sheet
922
+ * @param cx Image width in EMUs
923
+ * @param cy Image height in EMUs
924
+ * @returns Boolean indicating if the image is inside a cell
925
+ */
926
+ export function determineIfOneCellInsideCell(fromColOff, fromRowOff, fLocksWithSheet, cx, cy) {
927
+ var widthPixels = emuToPixels(Math.max(0, cx));
928
+ var heightPixels = emuToPixels(Math.max(0, cy));
929
+ var exceedsCellSize = (!!widthPixels && widthPixels > DEFAULT_CELL_IMAGE_MAX_SIZE_PX) ||
930
+ (!!heightPixels && heightPixels > DEFAULT_CELL_IMAGE_MAX_SIZE_PX);
931
+ if (exceedsCellSize) {
932
+ return false;
933
+ }
934
+ if (fLocksWithSheet === "1") {
935
+ return true;
936
+ }
937
+ var offsetXPixels = Math.abs(emuToPixels(fromColOff));
938
+ var offsetYPixels = Math.abs(emuToPixels(fromRowOff));
939
+ return (offsetXPixels <= CELL_IMAGE_OFFSET_THRESHOLD_PX &&
940
+ offsetYPixels <= CELL_IMAGE_OFFSET_THRESHOLD_PX);
941
+ }