ooxml-core 1.20.0 → 1.22.0

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 (422) hide show
  1. package/README.md +35 -0
  2. package/dist/{PptxHandler-TEKISCJO.cjs → PptxHandler-DNSXWTQV.cjs} +3 -3
  3. package/dist/{PptxHandler-FYD7IYXT.mjs → PptxHandler-FSKKPZZC.mjs} +3 -3
  4. package/dist/PptxHandler-H7MEWJJJ.mjs +4 -0
  5. package/dist/{PresentationBuilder-IMB4DVRN.mjs → PresentationBuilder-7TSENZTX.mjs} +2 -2
  6. package/dist/{PresentationBuilder-NCKASKXU.cjs → PresentationBuilder-A5NI35VN.cjs} +5 -5
  7. package/dist/{PresentationBuilder-EYI6Z2JP.mjs → PresentationBuilder-RIJWQSEU.mjs} +3 -3
  8. package/dist/automation/docx-forms.d.ts +26 -0
  9. package/dist/automation/docx-forms.d.ts.map +1 -0
  10. package/dist/automation/index.cjs +39159 -14352
  11. package/dist/automation/index.d.ts +5 -0
  12. package/dist/automation/index.d.ts.map +1 -1
  13. package/dist/automation/index.mjs +39145 -14353
  14. package/dist/automation/node.cjs +37 -0
  15. package/dist/automation/node.d.ts +32 -1
  16. package/dist/automation/node.d.ts.map +1 -1
  17. package/dist/automation/node.mjs +36 -1
  18. package/dist/automation/proposal.d.ts +25 -0
  19. package/dist/automation/proposal.d.ts.map +1 -0
  20. package/dist/automation/tools/define.d.ts +27 -0
  21. package/dist/automation/tools/define.d.ts.map +1 -0
  22. package/dist/automation/tools/docx-tools.d.ts +4 -0
  23. package/dist/automation/tools/docx-tools.d.ts.map +1 -0
  24. package/dist/automation/tools/index.d.ts +16 -0
  25. package/dist/automation/tools/index.d.ts.map +1 -0
  26. package/dist/automation/tools/types.d.ts +52 -0
  27. package/dist/automation/tools/types.d.ts.map +1 -0
  28. package/dist/automation/tools/visio-tools.d.ts +4 -0
  29. package/dist/automation/tools/visio-tools.d.ts.map +1 -0
  30. package/dist/automation/tools/xlsx-tools.d.ts +8 -0
  31. package/dist/automation/tools/xlsx-tools.d.ts.map +1 -0
  32. package/dist/automation/xlsx-edits.d.ts +88 -0
  33. package/dist/automation/xlsx-edits.d.ts.map +1 -0
  34. package/dist/automation/xlsx-proposal.d.ts +34 -0
  35. package/dist/automation/xlsx-proposal.d.ts.map +1 -0
  36. package/dist/automation/xlsx.d.ts +10 -5
  37. package/dist/automation/xlsx.d.ts.map +1 -1
  38. package/dist/chart/axis-range.d.ts.map +1 -1
  39. package/dist/chart/bubble-radius.d.ts +0 -5
  40. package/dist/chart/bubble-radius.d.ts.map +1 -1
  41. package/dist/chart/extent.d.ts +9 -0
  42. package/dist/chart/extent.d.ts.map +1 -0
  43. package/dist/chart/histogram-binning.d.ts.map +1 -1
  44. package/dist/chart/index.cjs +56 -18
  45. package/dist/chart/index.mjs +56 -18
  46. package/dist/chart/render/chart-svg-cartesian.d.ts.map +1 -1
  47. package/dist/chart/render/chart-svg-legend.d.ts.map +1 -1
  48. package/dist/chart/render/chart-view-ex.d.ts.map +1 -1
  49. package/dist/chart/render/chart-view.d.ts.map +1 -1
  50. package/dist/chart/trendline-fit.d.ts.map +1 -1
  51. package/dist/{chunk-3IENHIFD.cjs → chunk-4LZIUJI3.cjs} +52 -12
  52. package/dist/{chunk-LEV2SVMK.mjs → chunk-4QPOJCJG.mjs} +45 -8
  53. package/dist/{chunk-CC5UNZOO.mjs → chunk-6IIMI5RS.mjs} +52 -12
  54. package/dist/{chunk-MN27HKHM.mjs → chunk-BA7Z6ATM.mjs} +5 -5
  55. package/dist/{chunk-LVM3IZJ2.mjs → chunk-DLFMCZZT.mjs} +1 -1
  56. package/dist/{chunk-M4XLF4R7.mjs → chunk-GBKBR4CX.mjs} +20 -8
  57. package/dist/{chunk-NXKATFM5.cjs → chunk-HL3FBJ6X.cjs} +1065 -1016
  58. package/dist/{chunk-WXY5EDGT.mjs → chunk-LF5E5ZOH.mjs} +51 -2
  59. package/dist/chunk-MHNETXQB.mjs +1 -0
  60. package/dist/{chunk-MNXKRXFB.mjs → chunk-Q5PKBQXH.mjs} +52 -3
  61. package/dist/{chunk-GQYQQ3GA.mjs → chunk-VQF6HQEE.mjs} +1 -1
  62. package/dist/collab/embedding.d.ts +108 -0
  63. package/dist/collab/embedding.d.ts.map +1 -0
  64. package/dist/collab/index.cjs +423 -293
  65. package/dist/collab/index.d.ts +2 -0
  66. package/dist/collab/index.d.ts.map +1 -1
  67. package/dist/collab/index.mjs +415 -294
  68. package/dist/collab/webrtc-provider.d.ts +21 -0
  69. package/dist/collab/webrtc-provider.d.ts.map +1 -0
  70. package/dist/color/theme-palette.d.ts +5 -1
  71. package/dist/color/theme-palette.d.ts.map +1 -1
  72. package/dist/crypto/index.cjs +27 -2
  73. package/dist/crypto/index.mjs +27 -2
  74. package/dist/diagram/index.cjs +31 -3
  75. package/dist/diagram/index.mjs +31 -3
  76. package/dist/docx/block-parser.d.ts.map +1 -1
  77. package/dist/docx/cell-blocks.d.ts +7 -1
  78. package/dist/docx/cell-blocks.d.ts.map +1 -1
  79. package/dist/docx/content-control-edit.d.ts +14 -0
  80. package/dist/docx/content-control-edit.d.ts.map +1 -1
  81. package/dist/docx/content-control-model.d.ts +8 -0
  82. package/dist/docx/content-control-model.d.ts.map +1 -1
  83. package/dist/docx/content-control-values.d.ts +20 -0
  84. package/dist/docx/content-control-values.d.ts.map +1 -0
  85. package/dist/docx/content-control.d.ts +7 -1
  86. package/dist/docx/content-control.d.ts.map +1 -1
  87. package/dist/docx/element-order.d.ts +10 -5
  88. package/dist/docx/element-order.d.ts.map +1 -1
  89. package/dist/docx/embedded.cjs +3861 -1379
  90. package/dist/docx/embedded.mjs +3861 -1379
  91. package/dist/docx/field-instruction.d.ts +22 -0
  92. package/dist/docx/field-instruction.d.ts.map +1 -0
  93. package/dist/docx/form-field-model.d.ts +48 -0
  94. package/dist/docx/form-field-model.d.ts.map +1 -0
  95. package/dist/docx/form-fields.d.ts +31 -0
  96. package/dist/docx/form-fields.d.ts.map +1 -0
  97. package/dist/docx/form-fill-fields.d.ts +61 -0
  98. package/dist/docx/form-fill-fields.d.ts.map +1 -0
  99. package/dist/docx/form-fill-labels.d.ts +8 -0
  100. package/dist/docx/form-fill-labels.d.ts.map +1 -0
  101. package/dist/docx/form-fill-sites.d.ts +59 -0
  102. package/dist/docx/form-fill-sites.d.ts.map +1 -0
  103. package/dist/docx/form-fill-values.d.ts +28 -0
  104. package/dist/docx/form-fill-values.d.ts.map +1 -0
  105. package/dist/docx/form-fill-write.d.ts +26 -0
  106. package/dist/docx/form-fill-write.d.ts.map +1 -0
  107. package/dist/docx/glossary.d.ts +15 -0
  108. package/dist/docx/glossary.d.ts.map +1 -0
  109. package/dist/docx/index.cjs +5929 -3153
  110. package/dist/docx/index.d.ts +7 -0
  111. package/dist/docx/index.d.ts.map +1 -1
  112. package/dist/docx/index.mjs +5913 -3154
  113. package/dist/docx/inline-annotations.d.ts +21 -0
  114. package/dist/docx/inline-annotations.d.ts.map +1 -0
  115. package/dist/docx/inline-container-markers.d.ts +14 -0
  116. package/dist/docx/inline-container-markers.d.ts.map +1 -0
  117. package/dist/docx/inline-containers.d.ts +54 -0
  118. package/dist/docx/inline-containers.d.ts.map +1 -0
  119. package/dist/docx/inline-form-field-bookmarks.d.ts +15 -0
  120. package/dist/docx/inline-form-field-bookmarks.d.ts.map +1 -0
  121. package/dist/docx/inline-marker-positions.d.ts +15 -0
  122. package/dist/docx/inline-marker-positions.d.ts.map +1 -0
  123. package/dist/docx/inline-markers.d.ts +63 -0
  124. package/dist/docx/inline-markers.d.ts.map +1 -0
  125. package/dist/docx/inline-slots.d.ts +24 -0
  126. package/dist/docx/inline-slots.d.ts.map +1 -0
  127. package/dist/docx/layout/adapter.d.ts.map +1 -1
  128. package/dist/docx/layout/index.cjs +1176 -563
  129. package/dist/docx/layout/index.d.ts +2 -1
  130. package/dist/docx/layout/index.d.ts.map +1 -1
  131. package/dist/docx/layout/index.mjs +1175 -564
  132. package/dist/docx/layout/input.d.ts +5 -1
  133. package/dist/docx/layout/input.d.ts.map +1 -1
  134. package/dist/docx/layout/page-style-refs.d.ts +21 -0
  135. package/dist/docx/layout/page-style-refs.d.ts.map +1 -0
  136. package/dist/docx/layout/paragraph-fragments.d.ts.map +1 -1
  137. package/dist/docx/layout/result.d.ts +1 -0
  138. package/dist/docx/layout/result.d.ts.map +1 -1
  139. package/dist/docx/layout/tab-stops.d.ts +8 -1
  140. package/dist/docx/layout/tab-stops.d.ts.map +1 -1
  141. package/dist/docx/load/index.cjs +3969 -1487
  142. package/dist/docx/load/index.mjs +3969 -1487
  143. package/dist/docx/model-run.d.ts +24 -2
  144. package/dist/docx/model-run.d.ts.map +1 -1
  145. package/dist/docx/model.d.ts +5 -0
  146. package/dist/docx/model.d.ts.map +1 -1
  147. package/dist/docx/numbering-format.d.ts.map +1 -1
  148. package/dist/docx/parse-warnings.d.ts.map +1 -1
  149. package/dist/docx/parse.d.ts.map +1 -1
  150. package/dist/docx/run-segmentation.d.ts +11 -0
  151. package/dist/docx/run-segmentation.d.ts.map +1 -0
  152. package/dist/docx/save.d.ts.map +1 -1
  153. package/dist/docx/section-model.d.ts +5 -0
  154. package/dist/docx/section-model.d.ts.map +1 -1
  155. package/dist/docx/sections.d.ts +4 -2
  156. package/dist/docx/sections.d.ts.map +1 -1
  157. package/dist/docx/settings.d.ts +9 -0
  158. package/dist/docx/settings.d.ts.map +1 -1
  159. package/dist/docx/special-characters.d.ts +34 -0
  160. package/dist/docx/special-characters.d.ts.map +1 -0
  161. package/dist/docx/style-ref-fields.d.ts +40 -0
  162. package/dist/docx/style-ref-fields.d.ts.map +1 -0
  163. package/dist/docx/style-ref.d.ts +85 -0
  164. package/dist/docx/style-ref.d.ts.map +1 -0
  165. package/dist/docx/table-model.d.ts +2 -2
  166. package/dist/docx/table-model.d.ts.map +1 -1
  167. package/dist/docx/ui/break-note-schema.d.ts.map +1 -1
  168. package/dist/docx/ui/content-control-commands.d.ts +20 -8
  169. package/dist/docx/ui/content-control-commands.d.ts.map +1 -1
  170. package/dist/docx/ui/content-control-guard.d.ts +4 -1
  171. package/dist/docx/ui/content-control-guard.d.ts.map +1 -1
  172. package/dist/docx/ui/content-control-paste.d.ts +23 -0
  173. package/dist/docx/ui/content-control-paste.d.ts.map +1 -0
  174. package/dist/docx/ui/content-control-rows.d.ts +15 -0
  175. package/dist/docx/ui/content-control-rows.d.ts.map +1 -0
  176. package/dist/docx/ui/content-control-sources.d.ts +12 -0
  177. package/dist/docx/ui/content-control-sources.d.ts.map +1 -0
  178. package/dist/docx/ui/content-control-spans.d.ts +29 -6
  179. package/dist/docx/ui/content-control-spans.d.ts.map +1 -1
  180. package/dist/docx/ui/content-control-temporary.d.ts +10 -0
  181. package/dist/docx/ui/content-control-temporary.d.ts.map +1 -0
  182. package/dist/docx/ui/form-field-commands.d.ts +41 -0
  183. package/dist/docx/ui/form-field-commands.d.ts.map +1 -0
  184. package/dist/docx/ui/form-field-guard.d.ts +24 -0
  185. package/dist/docx/ui/form-field-guard.d.ts.map +1 -0
  186. package/dist/docx/ui/form-text-blank.d.ts +18 -0
  187. package/dist/docx/ui/form-text-blank.d.ts.map +1 -0
  188. package/dist/docx/ui/index.cjs +9276 -7132
  189. package/dist/docx/ui/index.d.ts +5 -0
  190. package/dist/docx/ui/index.d.ts.map +1 -1
  191. package/dist/docx/ui/index.mjs +9259 -7137
  192. package/dist/docx/ui/positional-tab-input.d.ts +7 -0
  193. package/dist/docx/ui/positional-tab-input.d.ts.map +1 -0
  194. package/dist/docx/ui/run-compare.d.ts.map +1 -1
  195. package/dist/docx/ui/run-extra-mark.d.ts +1 -1
  196. package/dist/docx/ui/run-extra-mark.d.ts.map +1 -1
  197. package/dist/docx/ui/schema-marks.d.ts +1 -1
  198. package/dist/docx/ui/schema-marks.d.ts.map +1 -1
  199. package/dist/docx/ui/symbol-font.d.ts +4 -0
  200. package/dist/docx/ui/symbol-font.d.ts.map +1 -0
  201. package/dist/docx/ui/yjs-collaboration.d.ts +12 -1
  202. package/dist/docx/ui/yjs-collaboration.d.ts.map +1 -1
  203. package/dist/docx/write-block-placement.d.ts +7 -0
  204. package/dist/docx/write-block-placement.d.ts.map +1 -1
  205. package/dist/docx/write-content-control.d.ts +6 -0
  206. package/dist/docx/write-content-control.d.ts.map +1 -1
  207. package/dist/docx/write-header-footer.d.ts +6 -2
  208. package/dist/docx/write-header-footer.d.ts.map +1 -1
  209. package/dist/docx/write-inline.d.ts +12 -16
  210. package/dist/docx/write-inline.d.ts.map +1 -1
  211. package/dist/docx/write-paragraph.d.ts.map +1 -1
  212. package/dist/docx/write-revisions.d.ts.map +1 -1
  213. package/dist/docx/write-run.d.ts.map +1 -1
  214. package/dist/docx/write-section-properties.d.ts +5 -0
  215. package/dist/docx/write-section-properties.d.ts.map +1 -0
  216. package/dist/docx/write-sections.d.ts.map +1 -1
  217. package/dist/docx/write-table-controls.d.ts +15 -0
  218. package/dist/docx/write-table-controls.d.ts.map +1 -0
  219. package/dist/docx/write-table-properties.d.ts.map +1 -1
  220. package/dist/docx/write-table.d.ts.map +1 -1
  221. package/dist/docx/write.d.ts.map +1 -1
  222. package/dist/docx/xml.d.ts +6 -0
  223. package/dist/docx/xml.d.ts.map +1 -1
  224. package/dist/drawingml/index.cjs +31 -3
  225. package/dist/drawingml/index.mjs +31 -3
  226. package/dist/index.cjs +77 -26
  227. package/dist/index.mjs +77 -26
  228. package/dist/math/index.cjs +27 -2
  229. package/dist/math/index.mjs +27 -2
  230. package/dist/opc/index.cjs +51 -11
  231. package/dist/opc/index.mjs +51 -11
  232. package/dist/opc/zip-folders.d.ts +11 -0
  233. package/dist/opc/zip-folders.d.ts.map +1 -0
  234. package/dist/opc/zip-limits.d.ts +9 -0
  235. package/dist/opc/zip-limits.d.ts.map +1 -1
  236. package/dist/pptx/automation/index.cjs +28818 -7388
  237. package/dist/pptx/automation/index.d.ts +93 -3
  238. package/dist/pptx/automation/index.d.ts.map +1 -1
  239. package/dist/pptx/automation/index.mjs +740 -63
  240. package/dist/pptx/automation/schemas/chart-formatting-schemas.d.ts +1 -1
  241. package/dist/pptx/automation/schemas/chart-schemas.d.ts +1 -1
  242. package/dist/pptx/automation/schemas/chart-user-shape-schemas.d.ts +1 -1
  243. package/dist/pptx/automation/schemas/element-schemas.d.ts +1 -1
  244. package/dist/pptx/automation/schemas/export-schemas.d.ts +1 -1
  245. package/dist/pptx/automation/schemas/geometry-schemas.d.ts +1 -1
  246. package/dist/pptx/automation/schemas/hyperlink-schemas.d.ts +1 -1
  247. package/dist/pptx/automation/schemas/index.mjs +1 -0
  248. package/dist/pptx/automation/schemas/json-schemas.d.ts +1 -1
  249. package/dist/pptx/automation/schemas/layout-schemas.d.ts +1 -1
  250. package/dist/pptx/automation/schemas/lock-schemas.d.ts +1 -1
  251. package/dist/pptx/automation/schemas/metadata-schemas.d.ts +1 -1
  252. package/dist/pptx/automation/schemas/ole-schemas.d.ts +1 -1
  253. package/dist/pptx/automation/schemas/presentation-schemas.d.ts +1 -1
  254. package/dist/pptx/automation/schemas/section-schemas.d.ts +1 -1
  255. package/dist/pptx/automation/schemas/slide-schemas.d.ts +1 -1
  256. package/dist/pptx/automation/schemas/smartart-schemas.d.ts +1 -1
  257. package/dist/pptx/automation/schemas/table-style-schemas.d.ts +1 -1
  258. package/dist/pptx/automation/schemas/template-schemas.d.ts +1 -1
  259. package/dist/pptx/automation/schemas/theme-schemas.d.ts +1 -1
  260. package/dist/pptx/automation/schemas/validation-schemas.d.ts +1 -1
  261. package/dist/pptx/chunks/{index-CgFX0T7b.d.ts → index-CPhsd7Df.d.ts} +9 -1
  262. package/dist/pptx/chunks/{index-CgFX0T7b.d.ts.map → index-CPhsd7Df.d.ts.map} +1 -1
  263. package/dist/pptx/chunks/{index-qwVYoFn6.d.ts → index-Q5mM8kIR.d.ts} +2 -2
  264. package/dist/pptx/chunks/{index-qwVYoFn6.d.ts.map → index-Q5mM8kIR.d.ts.map} +1 -1
  265. package/dist/pptx/chunks/{schemas-CWr181Wx.d.ts → schemas-fuDGetRe.d.ts} +2 -2
  266. package/dist/pptx/chunks/{schemas-CWr181Wx.d.ts.map → schemas-fuDGetRe.d.ts.map} +1 -1
  267. package/dist/pptx/cli/index.cjs +116 -17
  268. package/dist/pptx/cli/index.mjs +5 -5
  269. package/dist/pptx/converter/index.cjs +12 -3
  270. package/dist/pptx/converter/index.d.ts +1 -1
  271. package/dist/pptx/converter/index.mjs +3 -3
  272. package/dist/pptx/editor/render/find-replace.cjs +14 -14
  273. package/dist/pptx/editor/render/find-replace.d.ts +1 -1
  274. package/dist/pptx/editor/render/find-replace.mjs +1 -1
  275. package/dist/pptx/editor/render/slide-operations.cjs +8 -8
  276. package/dist/pptx/editor/render/slide-operations.mjs +2 -2
  277. package/dist/pptx/index.cjs +116 -17
  278. package/dist/pptx/index.d.ts +2 -2
  279. package/dist/pptx/index.mjs +6 -6
  280. package/dist/pptx/signature-node/index.cjs +20 -8
  281. package/dist/pptx/signature-node/index.mjs +2 -2
  282. package/dist/teams/index.cjs +105 -70
  283. package/dist/teams/index.mjs +105 -70
  284. package/dist/text/text-diff.d.ts +15 -0
  285. package/dist/text/text-diff.d.ts.map +1 -0
  286. package/dist/visio/collab/bind.d.ts +44 -0
  287. package/dist/visio/collab/bind.d.ts.map +1 -0
  288. package/dist/visio/collab/compose.d.ts +15 -0
  289. package/dist/visio/collab/compose.d.ts.map +1 -0
  290. package/dist/visio/collab/index.cjs +1194 -0
  291. package/dist/visio/collab/index.d.ts +8 -0
  292. package/dist/visio/collab/index.d.ts.map +1 -0
  293. package/dist/visio/collab/index.mjs +1152 -0
  294. package/dist/visio/collab/keys.d.ts +22 -0
  295. package/dist/visio/collab/keys.d.ts.map +1 -0
  296. package/dist/visio/collab/order.d.ts +11 -0
  297. package/dist/visio/collab/order.d.ts.map +1 -0
  298. package/dist/visio/collab/package.d.ts +37 -0
  299. package/dist/visio/collab/package.d.ts.map +1 -0
  300. package/dist/visio/collab/read.d.ts +41 -0
  301. package/dist/visio/collab/read.d.ts.map +1 -0
  302. package/dist/visio/collab/scan.d.ts +28 -0
  303. package/dist/visio/collab/scan.d.ts.map +1 -0
  304. package/dist/visio/collab/schema.d.ts +70 -0
  305. package/dist/visio/collab/schema.d.ts.map +1 -0
  306. package/dist/visio/collab/snapshot.d.ts +61 -0
  307. package/dist/visio/collab/snapshot.d.ts.map +1 -0
  308. package/dist/visio/collab/write.d.ts +20 -0
  309. package/dist/visio/collab/write.d.ts.map +1 -0
  310. package/dist/visio/index.cjs +159 -39
  311. package/dist/visio/index.mjs +159 -39
  312. package/dist/visio/ui/collab-options.d.ts +24 -0
  313. package/dist/visio/ui/collab-options.d.ts.map +1 -0
  314. package/dist/visio/ui/collab-presence.d.ts +31 -0
  315. package/dist/visio/ui/collab-presence.d.ts.map +1 -0
  316. package/dist/visio/ui/contract.d.ts +9 -3
  317. package/dist/visio/ui/contract.d.ts.map +1 -1
  318. package/dist/visio/ui/document-history.d.ts +3 -1
  319. package/dist/visio/ui/document-history.d.ts.map +1 -1
  320. package/dist/visio/ui/index.cjs +284 -95
  321. package/dist/visio/ui/index.d.ts +2 -0
  322. package/dist/visio/ui/index.d.ts.map +1 -1
  323. package/dist/visio/ui/index.mjs +278 -95
  324. package/dist/xlsx/collab/index.cjs +8 -3
  325. package/dist/xlsx/collab/index.mjs +8 -3
  326. package/dist/xlsx/compare/cells.d.ts +22 -0
  327. package/dist/xlsx/compare/cells.d.ts.map +1 -0
  328. package/dist/xlsx/compare/compare.d.ts +12 -0
  329. package/dist/xlsx/compare/compare.d.ts.map +1 -0
  330. package/dist/xlsx/compare/conditional.d.ts +7 -0
  331. package/dist/xlsx/compare/conditional.d.ts.map +1 -0
  332. package/dist/xlsx/compare/format-key.d.ts +34 -0
  333. package/dist/xlsx/compare/format-key.d.ts.map +1 -0
  334. package/dist/xlsx/compare/group.d.ts +8 -0
  335. package/dist/xlsx/compare/group.d.ts.map +1 -0
  336. package/dist/xlsx/compare/index.d.ts +5 -0
  337. package/dist/xlsx/compare/index.d.ts.map +1 -0
  338. package/dist/xlsx/compare/rich-text.d.ts +7 -0
  339. package/dist/xlsx/compare/rich-text.d.ts.map +1 -0
  340. package/dist/xlsx/compare/sheets.d.ts +22 -0
  341. package/dist/xlsx/compare/sheets.d.ts.map +1 -0
  342. package/dist/xlsx/compare/structure.d.ts +11 -0
  343. package/dist/xlsx/compare/structure.d.ts.map +1 -0
  344. package/dist/xlsx/compare/text.d.ts +8 -0
  345. package/dist/xlsx/compare/text.d.ts.map +1 -0
  346. package/dist/xlsx/compare/types.d.ts +173 -0
  347. package/dist/xlsx/compare/types.d.ts.map +1 -0
  348. package/dist/xlsx/edit/cell-values.d.ts.map +1 -1
  349. package/dist/xlsx/edit/clipboard-html.d.ts.map +1 -1
  350. package/dist/xlsx/edit/clipboard-text.d.ts.map +1 -1
  351. package/dist/xlsx/edit/clipboard.d.ts.map +1 -1
  352. package/dist/xlsx/edit/clone-cell.d.ts +9 -0
  353. package/dist/xlsx/edit/clone-cell.d.ts.map +1 -0
  354. package/dist/xlsx/edit/history.d.ts +8 -3
  355. package/dist/xlsx/edit/history.d.ts.map +1 -1
  356. package/dist/xlsx/edit/timelines.d.ts.map +1 -1
  357. package/dist/xlsx/formula/change-areas.d.ts +9 -0
  358. package/dist/xlsx/formula/change-areas.d.ts.map +1 -0
  359. package/dist/xlsx/formula/engine-prepare.d.ts +8 -0
  360. package/dist/xlsx/formula/engine-prepare.d.ts.map +1 -1
  361. package/dist/xlsx/formula/engine.d.ts.map +1 -1
  362. package/dist/xlsx/formula/spill.d.ts +5 -1
  363. package/dist/xlsx/formula/spill.d.ts.map +1 -1
  364. package/dist/xlsx/index.cjs +2461 -1192
  365. package/dist/xlsx/index.d.ts +1 -0
  366. package/dist/xlsx/index.d.ts.map +1 -1
  367. package/dist/xlsx/index.mjs +2454 -1193
  368. package/dist/xlsx/layout/cell-view.d.ts.map +1 -1
  369. package/dist/xlsx/layout/navigate.d.ts.map +1 -1
  370. package/dist/xlsx/layout/style-view.d.ts +5 -0
  371. package/dist/xlsx/layout/style-view.d.ts.map +1 -1
  372. package/dist/xlsx/load/csv-dates.d.ts +22 -0
  373. package/dist/xlsx/load/csv-dates.d.ts.map +1 -0
  374. package/dist/xlsx/load/csv-import.d.ts +64 -0
  375. package/dist/xlsx/load/csv-import.d.ts.map +1 -0
  376. package/dist/xlsx/load/csv-separators.d.ts +13 -0
  377. package/dist/xlsx/load/csv-separators.d.ts.map +1 -0
  378. package/dist/xlsx/load/csv-traits.d.ts +20 -0
  379. package/dist/xlsx/load/csv-traits.d.ts.map +1 -0
  380. package/dist/xlsx/load/csv.d.ts +8 -4
  381. package/dist/xlsx/load/csv.d.ts.map +1 -1
  382. package/dist/xlsx/load/detect.d.ts +13 -0
  383. package/dist/xlsx/load/detect.d.ts.map +1 -1
  384. package/dist/xlsx/load/errors.d.ts +1 -0
  385. package/dist/xlsx/load/errors.d.ts.map +1 -1
  386. package/dist/xlsx/load/index.cjs +537 -91
  387. package/dist/xlsx/load/index.d.ts +3 -1
  388. package/dist/xlsx/load/index.d.ts.map +1 -1
  389. package/dist/xlsx/load/index.mjs +536 -92
  390. package/dist/xlsx/numfmt/input-date.d.ts +2 -0
  391. package/dist/xlsx/numfmt/input-date.d.ts.map +1 -1
  392. package/dist/xlsx/pivot/cache-xml.d.ts.map +1 -1
  393. package/dist/xlsx/pivot/groups.d.ts.map +1 -1
  394. package/dist/xlsx/read/index.d.ts +2 -1
  395. package/dist/xlsx/read/index.d.ts.map +1 -1
  396. package/dist/xlsx/read/limits.d.ts +50 -0
  397. package/dist/xlsx/read/limits.d.ts.map +1 -0
  398. package/dist/xlsx/read/load.d.ts +11 -1
  399. package/dist/xlsx/read/load.d.ts.map +1 -1
  400. package/dist/xlsx/read/package.d.ts +5 -23
  401. package/dist/xlsx/read/package.d.ts.map +1 -1
  402. package/dist/xlsx/read/shared-strings.d.ts +2 -2
  403. package/dist/xlsx/read/shared-strings.d.ts.map +1 -1
  404. package/dist/xlsx/read/worksheet.d.ts +2 -0
  405. package/dist/xlsx/read/worksheet.d.ts.map +1 -1
  406. package/dist/xlsx/stable-key.d.ts +3 -0
  407. package/dist/xlsx/stable-key.d.ts.map +1 -0
  408. package/dist/xlsx/styles.d.ts.map +1 -1
  409. package/dist/xlsx/ui/index.cjs +662 -372
  410. package/dist/xlsx/ui/index.mjs +662 -372
  411. package/dist/xlsx/ui/locales/de/shell.d.ts.map +1 -1
  412. package/dist/xlsx/ui/locales/en/shell.d.ts.map +1 -1
  413. package/dist/xlsx/ui/locales/es/shell.d.ts.map +1 -1
  414. package/dist/xlsx/ui/locales/fr/shell.d.ts.map +1 -1
  415. package/dist/xlsx/ui/locales/zh-CN/shell.d.ts.map +1 -1
  416. package/dist/xlsx/write/sheet-props.d.ts.map +1 -1
  417. package/dist/xml/index.cjs +32 -3
  418. package/dist/xml/index.mjs +32 -4
  419. package/dist/xml/xml.d.ts +11 -1
  420. package/dist/xml/xml.d.ts.map +1 -1
  421. package/package.json +6 -1
  422. package/dist/PptxHandler-SITN3K3F.mjs +0 -4
@@ -3254,6 +3254,19 @@ var DEFAULT_XML_LIMITS = {
3254
3254
  maxDepth: 512,
3255
3255
  maxNodes: 5e6
3256
3256
  };
3257
+ var XmlLimitError = class extends Error {
3258
+ code = "xml-limit";
3259
+ /** The limit that was exceeded. */
3260
+ limit;
3261
+ /** Its value: the largest depth or element count allowed. */
3262
+ maximum;
3263
+ constructor(message, limit2, maximum) {
3264
+ super(message);
3265
+ this.name = "XmlLimitError";
3266
+ this.limit = limit2;
3267
+ this.maximum = maximum;
3268
+ }
3269
+ };
3257
3270
  var TAG_RE = /<(\/?)([^\s\/><]+)(?:\s+[^\s=\/><]+\s*=\s*(?:"[^"<]*"|'[^'<]*'))*\s*(\/?)>/y;
3258
3271
  var MARKUP_SKIPS = [
3259
3272
  ["<!--", "-->"],
@@ -3287,11 +3300,22 @@ function checkXmlLimits(xml, label2, limits = {}) {
3287
3300
  continue;
3288
3301
  }
3289
3302
  nodes++;
3290
- if (nodes > maxNodes) throw new Error(`${label2} XML exceeds the limit of ${maxNodes} elements`);
3303
+ if (nodes > maxNodes)
3304
+ throw new XmlLimitError(
3305
+ `${label2} XML exceeds the limit of ${maxNodes} elements`,
3306
+ "maxNodes",
3307
+ maxNodes
3308
+ );
3291
3309
  if (!selfClosing && ++depth > maxDepth)
3292
- throw new Error(`${label2} XML exceeds the nesting depth limit of ${maxDepth}`);
3310
+ throw new XmlLimitError(
3311
+ `${label2} XML exceeds the nesting depth limit of ${maxDepth}`,
3312
+ "maxDepth",
3313
+ maxDepth
3314
+ );
3293
3315
  }
3294
3316
  }
3317
+ var CRLF_DECLARATION = /^<\?xml[^>]*\?>\r\n/;
3318
+ var crlfDeclarations = /* @__PURE__ */ new WeakSet();
3295
3319
  function parseXml(xml, options = {}) {
3296
3320
  const label2 = options.label ?? "OOXML";
3297
3321
  if (/<!DOCTYPE|<!ENTITY/i.test(xml))
@@ -3313,9 +3337,13 @@ function parseXml(xml, options = {}) {
3313
3337
  }
3314
3338
  if (parseError || !parsed.documentElement)
3315
3339
  throw new Error(`Invalid ${label2} XML: ${parseError || "missing root element"}`);
3340
+ if (CRLF_DECLARATION.test(xml)) crlfDeclarations.add(parsed);
3316
3341
  return parsed;
3317
3342
  }
3318
- var buildXml = (node2) => new xmldom.XMLSerializer().serializeToString(node2);
3343
+ var buildXml = (node2) => {
3344
+ const xml = new xmldom.XMLSerializer().serializeToString(node2);
3345
+ return crlfDeclarations.has(node2) ? xml.replace(/^(<\?xml[^>]*\?>)\n/, "$1\r\n") : xml;
3346
+ };
3319
3347
  var isElement = (node2) => node2.nodeType === 1;
3320
3348
  var elements = (parent) => Array.from(parent.childNodes).filter(isElement);
3321
3349
  function named(element2, local, ns, lenient = true) {
@@ -3827,10 +3855,13 @@ var DEFAULT_ZIP_LIMITS = {
3827
3855
  var ZipLimitError = class extends Error {
3828
3856
  code = "ZIP_BOMB";
3829
3857
  limit;
3858
+ /** The check that failed (absent when the error was built without one). */
3859
+ kind;
3830
3860
  constructor(message, details) {
3831
3861
  super(message);
3832
3862
  this.name = "ZipLimitError";
3833
3863
  this.limit = details.limit;
3864
+ this.kind = details.kind;
3834
3865
  }
3835
3866
  };
3836
3867
  var mib = (bytes) => Math.round(bytes / 1048576);
@@ -3853,7 +3884,7 @@ function resolveLimits(limits) {
3853
3884
  maxEntryBytes: limits.maxEntryBytes ?? DEFAULT_ZIP_LIMITS.maxEntryBytes,
3854
3885
  maxTotalBytes: limits.maxTotalBytes ?? DEFAULT_ZIP_LIMITS.maxTotalBytes,
3855
3886
  label: limits.label ?? "ZIP",
3856
- fail: (message, limit2) => create ? create(message, { limit: limit2 }) : new ZipLimitError(message, { limit: limit2 })
3887
+ fail: (message, limit2, kind) => create ? create(message, { limit: limit2, kind }) : new ZipLimitError(message, { limit: limit2, kind })
3857
3888
  };
3858
3889
  }
3859
3890
  function inflateEntryGuarded(entry3, alreadyRead, limits) {
@@ -3876,13 +3907,18 @@ function inflateEntryGuarded(entry3, alreadyRead, limits) {
3876
3907
  size += chunk.byteLength;
3877
3908
  if (size > declared || size > r.maxEntryBytes)
3878
3909
  return abort(
3879
- r.fail(`${r.label} part ${entry3.name} inflates past its declared size`, r.maxEntryBytes)
3910
+ r.fail(
3911
+ `${r.label} part ${entry3.name} inflates past its declared size`,
3912
+ r.maxEntryBytes,
3913
+ size > declared ? "declaredSize" : "maxEntryBytes"
3914
+ )
3880
3915
  );
3881
3916
  if (alreadyRead + size > r.maxTotalBytes)
3882
3917
  return abort(
3883
3918
  r.fail(
3884
3919
  `${r.label} package exceeds the ${mib(r.maxTotalBytes)} MiB uncompressed content limit`,
3885
- r.maxTotalBytes
3920
+ r.maxTotalBytes,
3921
+ "maxTotalBytes"
3886
3922
  )
3887
3923
  );
3888
3924
  chunks.push(chunk);
@@ -3915,26 +3951,29 @@ function guardZip(zip, limits = {}) {
3915
3951
  if (entries.length > r.maxEntries)
3916
3952
  throw r.fail(
3917
3953
  `${r.label} package exceeds the ${r.maxEntries.toLocaleString("en-US")} part limit`,
3918
- r.maxEntries
3954
+ r.maxEntries,
3955
+ "maxEntries"
3919
3956
  );
3920
3957
  let declared = 0;
3921
3958
  for (const entry3 of entries) {
3922
3959
  const original = entry3.unsafeOriginalName;
3923
3960
  if (!isSafePartName(entry3.name) || original !== void 0 && !isSafePartName(original))
3924
- throw r.fail(`${r.label} package has an unsafe part name`, r.maxEntries);
3961
+ throw r.fail(`${r.label} package has an unsafe part name`, r.maxEntries, "partName");
3925
3962
  if (entry3.dir) continue;
3926
3963
  const size = declaredEntrySize(entry3);
3927
3964
  if (size > r.maxEntryBytes)
3928
3965
  throw r.fail(
3929
3966
  `${r.label} part ${entry3.name} exceeds the uncompressed part size limit`,
3930
- r.maxEntryBytes
3967
+ r.maxEntryBytes,
3968
+ "maxEntryBytes"
3931
3969
  );
3932
3970
  declared += size;
3933
3971
  }
3934
3972
  if (declared > r.maxTotalBytes)
3935
3973
  throw r.fail(
3936
3974
  `${r.label} package exceeds the ${mib(r.maxTotalBytes)} MiB uncompressed content limit`,
3937
- r.maxTotalBytes
3975
+ r.maxTotalBytes,
3976
+ "maxTotalBytes"
3938
3977
  );
3939
3978
  const produced = /* @__PURE__ */ new Map();
3940
3979
  let total2 = 0;
@@ -5624,6 +5663,9 @@ function formatValue(value2, format, options = {}) {
5624
5663
  if (options.width !== void 0) return fitNumber(value2, format, options);
5625
5664
  return formatNumber(value2, format, options.date1904 ?? false);
5626
5665
  }
5666
+ function isDateFormat(format) {
5667
+ return compileFormat(format).isDate;
5668
+ }
5627
5669
 
5628
5670
  // xlsx/numfmt/input-date.ts
5629
5671
  var MONTH_NAMES = [
@@ -5846,9 +5888,9 @@ function parseCellInput(text2, options = {}) {
5846
5888
  return parsed.numFmt ? { value: parsed.value, numFmt: parsed.numFmt } : { value: parsed.value };
5847
5889
  }
5848
5890
 
5849
- // xlsx/styles.ts
5850
- function styleKey(style2) {
5851
- return JSON.stringify(sortKeys(style2));
5891
+ // xlsx/stable-key.ts
5892
+ function stableKey(value2) {
5893
+ return JSON.stringify(sortKeys(value2));
5852
5894
  }
5853
5895
  function sortKeys(value2) {
5854
5896
  if (Array.isArray(value2)) return value2.map(sortKeys);
@@ -5862,6 +5904,11 @@ function sortKeys(value2) {
5862
5904
  }
5863
5905
  return value2;
5864
5906
  }
5907
+
5908
+ // xlsx/styles.ts
5909
+ function styleKey(style2) {
5910
+ return stableKey(style2);
5911
+ }
5865
5912
  function styleAt(workbook, styleId) {
5866
5913
  const style2 = workbook.styles[styleId ?? 0] ?? workbook.styles[0];
5867
5914
  if (!style2) throw new Error("Workbook has no default cell style");
@@ -9314,10 +9361,72 @@ function mergeComments(legacy, threaded) {
9314
9361
  (a2, b) => a2.address.row - b.address.row || a2.address.col - b.address.col
9315
9362
  );
9316
9363
  }
9317
- var MAX_INPUT_BYTES = 50 * 1024 * 1024;
9318
- var MAX_PARTS = 1e4;
9319
- var MAX_UNCOMPRESSED_BYTES = 300 * 1024 * 1024;
9320
- var MAX_PART_BYTES = 200 * 1024 * 1024;
9364
+
9365
+ // xlsx/read/limits.ts
9366
+ var DEFAULT_XLSX_LOAD_LIMITS = {
9367
+ maxInputBytes: 50 * 1024 * 1024,
9368
+ maxParts: 1e4,
9369
+ maxPartBytes: 200 * 1024 * 1024,
9370
+ maxTotalBytes: 300 * 1024 * 1024,
9371
+ maxXmlElements: 5e6
9372
+ };
9373
+ var WorkbookTooLargeError = class extends Error {
9374
+ code = "workbook-too-large";
9375
+ /** The limit that was exceeded, as named in {@link XlsxLoadLimits}. */
9376
+ limit;
9377
+ /** The value of that limit when the load failed. */
9378
+ maximum;
9379
+ constructor(message, limit2, maximum, options) {
9380
+ super(message, options);
9381
+ this.name = "WorkbookTooLargeError";
9382
+ this.limit = limit2;
9383
+ this.maximum = maximum;
9384
+ }
9385
+ };
9386
+ function isWorkbookTooLargeError(error) {
9387
+ return error instanceof Error && error.code === "workbook-too-large";
9388
+ }
9389
+ function resolveLoadLimits(limits = {}) {
9390
+ const resolved = { ...DEFAULT_XLSX_LOAD_LIMITS };
9391
+ for (const name of Object.keys(resolved)) {
9392
+ const value2 = limits[name];
9393
+ if (value2 === void 0) continue;
9394
+ if (!Number.isFinite(value2) || value2 <= 0)
9395
+ throw new RangeError(`limits.${name} must be a positive finite number`);
9396
+ resolved[name] = value2;
9397
+ }
9398
+ return resolved;
9399
+ }
9400
+ var ZIP_LIMIT_NAMES = {
9401
+ maxInputBytes: "maxInputBytes",
9402
+ maxEntries: "maxParts",
9403
+ maxEntryBytes: "maxPartBytes",
9404
+ maxTotalBytes: "maxTotalBytes"
9405
+ };
9406
+ function zipLimitsFor(limits) {
9407
+ return {
9408
+ maxInputBytes: limits.maxInputBytes,
9409
+ maxEntries: limits.maxParts,
9410
+ maxEntryBytes: limits.maxPartBytes,
9411
+ maxTotalBytes: limits.maxTotalBytes,
9412
+ label: "XLSX",
9413
+ createError: (message, { limit: limit2, kind }) => {
9414
+ const name = ZIP_LIMIT_NAMES[kind];
9415
+ return name ? new WorkbookTooLargeError(message, name, limit2) : new ZipLimitError(message, { limit: limit2, kind });
9416
+ }
9417
+ };
9418
+ }
9419
+ function parseDataXml(xml, label2, maxXmlElements = DEFAULT_XLSX_LOAD_LIMITS.maxXmlElements) {
9420
+ try {
9421
+ return parseXml(xml, { label: label2, limits: { maxNodes: maxXmlElements } });
9422
+ } catch (error) {
9423
+ if (error instanceof XmlLimitError && error.limit === "maxNodes")
9424
+ throw new WorkbookTooLargeError(error.message, "maxXmlElements", error.maximum, {
9425
+ cause: error
9426
+ });
9427
+ throw error;
9428
+ }
9429
+ }
9321
9430
  var CONTENT_TYPES = {
9322
9431
  workbook: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",
9323
9432
  workbookMacro: "application/vnd.ms-excel.sheet.macroEnabled.main+xml",
@@ -9407,16 +9516,15 @@ var SourceIndex = class {
9407
9516
  };
9408
9517
  var mib2 = (bytes) => Math.round(bytes / 1048576);
9409
9518
  async function readZipParts(input, limits = {}) {
9410
- const maxInput = limits.maxInputBytes ?? MAX_INPUT_BYTES;
9411
- const zipLimits = {
9412
- maxEntries: limits.maxParts ?? MAX_PARTS,
9413
- maxEntryBytes: limits.maxPartBytes ?? MAX_PART_BYTES,
9414
- maxTotalBytes: limits.maxTotalBytes ?? MAX_UNCOMPRESSED_BYTES,
9415
- label: "XLSX"
9416
- };
9519
+ const resolved = resolveLoadLimits(limits);
9520
+ const maxInput = resolved.maxInputBytes;
9417
9521
  const bytes = input instanceof Uint8Array ? input : new Uint8Array(input);
9418
9522
  if (bytes.byteLength > maxInput)
9419
- throw new Error(`XLSX package exceeds the ${mib2(maxInput)} MiB compressed input limit`);
9523
+ throw new WorkbookTooLargeError(
9524
+ `XLSX package exceeds the ${mib2(maxInput)} MiB compressed input limit`,
9525
+ "maxInputBytes",
9526
+ maxInput
9527
+ );
9420
9528
  let loaded;
9421
9529
  try {
9422
9530
  loaded = await JSZip2__default.default.loadAsync(bytes);
@@ -9426,7 +9534,7 @@ async function readZipParts(input, limits = {}) {
9426
9534
  { cause: error }
9427
9535
  );
9428
9536
  }
9429
- const zip = guardZip(loaded, zipLimits);
9537
+ const zip = guardZip(loaded, zipLimitsFor(resolved));
9430
9538
  const parts = /* @__PURE__ */ new Map();
9431
9539
  for (const entry3 of Object.values(zip.files)) {
9432
9540
  if (entry3.dir) continue;
@@ -9633,9 +9741,9 @@ function parseRichString(element2, palette) {
9633
9741
  const text2 = parsed.map((run2) => run2.text).join("");
9634
9742
  return { text: text2, runs: parsed };
9635
9743
  }
9636
- function parseSharedStrings(xml, palette) {
9744
+ function parseSharedStrings(xml, palette, maxXmlElements) {
9637
9745
  if (!xml) return [];
9638
- const root = parseXml(xml, { label: "XLSX shared strings" }).documentElement;
9746
+ const root = parseDataXml(xml, "XLSX shared strings", maxXmlElements).documentElement;
9639
9747
  return xChildren(root, "si").map((si) => parseRichString(si, palette));
9640
9748
  }
9641
9749
 
@@ -14275,7 +14383,11 @@ function parseWorksheet(ctx, partName, name, sheetId) {
14275
14383
  return sheet;
14276
14384
  }
14277
14385
  const split = splitSheetData(xml);
14278
- const root = parseXml(split?.xml ?? xml, { label: "XLSX worksheet" }).documentElement;
14386
+ const root = parseDataXml(
14387
+ split?.xml ?? xml,
14388
+ "XLSX worksheet",
14389
+ ctx.maxXmlElements
14390
+ ).documentElement;
14279
14391
  const byName = /* @__PURE__ */ new Map();
14280
14392
  const cfBlocks = [];
14281
14393
  for (const node2 of elements(root)) {
@@ -14349,8 +14461,9 @@ function liftPrintAreas(workbook) {
14349
14461
  return false;
14350
14462
  });
14351
14463
  }
14352
- async function loadXlsx(input) {
14353
- const parts = await readZipParts(input);
14464
+ async function loadXlsx(input, options = {}) {
14465
+ const limits = resolveLoadLimits(options.limits);
14466
+ const parts = await readZipParts(input, limits);
14354
14467
  const source2 = new SourceIndex(parts);
14355
14468
  const workbookPart = source2.workbookPart();
14356
14469
  if (!workbookPart) throw new Error("XLSX package has no workbook part (xl/workbook.xml)");
@@ -14371,7 +14484,8 @@ async function loadXlsx(input) {
14371
14484
  source: source2,
14372
14485
  sharedStrings: parseSharedStrings(
14373
14486
  stringsPart ? source2.text(stringsPart) : void 0,
14374
- styles.palette
14487
+ styles.palette,
14488
+ limits.maxXmlElements
14375
14489
  ),
14376
14490
  xfMap: styles.xfMap,
14377
14491
  date1904: book.date1904,
@@ -14379,7 +14493,8 @@ async function loadXlsx(input) {
14379
14493
  dxfs: styles.dxfs,
14380
14494
  persons: parsePersons(personsPart ? source2.text(personsPart) : void 0),
14381
14495
  dynamicCells: parseDynamicArrayMetadata(metadataPart ? source2.text(metadataPart) : void 0),
14382
- warn
14496
+ warn,
14497
+ maxXmlElements: limits.maxXmlElements
14383
14498
  };
14384
14499
  const rels = source2.rels(workbookPart);
14385
14500
  const sheets = book.sheets.map((entry3) => {
@@ -16596,6 +16711,52 @@ function finite(value2) {
16596
16711
  return value2;
16597
16712
  }
16598
16713
 
16714
+ // xlsx/formula/operators.ts
16715
+ function power(base, exponent) {
16716
+ if (base === 0 && exponent === 0) throw new ErrorSignal(ERR.NUM);
16717
+ if (base === 0 && exponent < 0) throw new ErrorSignal(ERR.DIV0);
16718
+ if (base < 0 && !Number.isInteger(exponent)) {
16719
+ const inverse = 1 / exponent;
16720
+ const odd = Math.round(inverse);
16721
+ if (Math.abs(inverse - odd) < 1e-10 && Math.abs(odd) % 2 === 1) {
16722
+ return -Math.pow(-base, exponent);
16723
+ }
16724
+ throw new ErrorSignal(ERR.NUM);
16725
+ }
16726
+ return Math.pow(base, exponent);
16727
+ }
16728
+ function pick(m, row2, col) {
16729
+ const r = m.rows === 1 ? 0 : row2;
16730
+ const c2 = m.cols === 1 ? 0 : col;
16731
+ if (r >= m.rows || c2 >= m.cols) return ERR.NA;
16732
+ return m.get(r, c2);
16733
+ }
16734
+ function broadcastShape(operands, at) {
16735
+ let rows = 1;
16736
+ let cols = 1;
16737
+ for (const m of operands) {
16738
+ rows = Math.max(rows, m.rows);
16739
+ cols = Math.max(cols, m.cols);
16740
+ }
16741
+ if (!operands.some((m) => m.isPadded)) return Matrix.build(rows, cols, at);
16742
+ let blockRows = 1;
16743
+ let blockCols = 1;
16744
+ for (const m of operands) {
16745
+ blockRows = Math.max(blockRows, m.isPadded ? m.blockRows : m.rows);
16746
+ blockCols = Math.max(blockCols, m.isPadded ? m.blockCols : m.cols);
16747
+ }
16748
+ blockRows = Math.min(blockRows, rows);
16749
+ blockCols = Math.min(blockCols, cols);
16750
+ const varies = operands.some(
16751
+ (m) => blockRows < rows && m.rows === 1 && m.cols > 1 || blockCols < cols && m.cols === 1 && m.rows > 1
16752
+ );
16753
+ if (varies) return Matrix.build(rows, cols, at);
16754
+ return Matrix.padded(Matrix.build(blockRows, blockCols, at), rows, cols, at(rows - 1, cols - 1));
16755
+ }
16756
+
16757
+ // xlsx/formula/spill.ts
16758
+ var isSpilledCell = (cell) => cell !== void 0 && "spillAnchor" in cell;
16759
+
16599
16760
  // xlsx/formula/functions/wildcard.ts
16600
16761
  var lower = (ch) => (ch ?? "").toLowerCase();
16601
16762
  var fold = (text2) => Array.from({ length: text2.length }, (_, i2) => lower(text2[i2]));
@@ -19880,49 +20041,6 @@ var INFO_FUNCTIONS = [
19880
20041
  )
19881
20042
  ];
19882
20043
 
19883
- // xlsx/formula/operators.ts
19884
- function power(base, exponent) {
19885
- if (base === 0 && exponent === 0) throw new ErrorSignal(ERR.NUM);
19886
- if (base === 0 && exponent < 0) throw new ErrorSignal(ERR.DIV0);
19887
- if (base < 0 && !Number.isInteger(exponent)) {
19888
- const inverse = 1 / exponent;
19889
- const odd = Math.round(inverse);
19890
- if (Math.abs(inverse - odd) < 1e-10 && Math.abs(odd) % 2 === 1) {
19891
- return -Math.pow(-base, exponent);
19892
- }
19893
- throw new ErrorSignal(ERR.NUM);
19894
- }
19895
- return Math.pow(base, exponent);
19896
- }
19897
- function pick(m, row2, col) {
19898
- const r = m.rows === 1 ? 0 : row2;
19899
- const c2 = m.cols === 1 ? 0 : col;
19900
- if (r >= m.rows || c2 >= m.cols) return ERR.NA;
19901
- return m.get(r, c2);
19902
- }
19903
- function broadcastShape(operands, at) {
19904
- let rows = 1;
19905
- let cols = 1;
19906
- for (const m of operands) {
19907
- rows = Math.max(rows, m.rows);
19908
- cols = Math.max(cols, m.cols);
19909
- }
19910
- if (!operands.some((m) => m.isPadded)) return Matrix.build(rows, cols, at);
19911
- let blockRows = 1;
19912
- let blockCols = 1;
19913
- for (const m of operands) {
19914
- blockRows = Math.max(blockRows, m.isPadded ? m.blockRows : m.rows);
19915
- blockCols = Math.max(blockCols, m.isPadded ? m.blockCols : m.cols);
19916
- }
19917
- blockRows = Math.min(blockRows, rows);
19918
- blockCols = Math.min(blockCols, cols);
19919
- const varies = operands.some(
19920
- (m) => blockRows < rows && m.rows === 1 && m.cols > 1 || blockCols < cols && m.cols === 1 && m.rows > 1
19921
- );
19922
- if (varies) return Matrix.build(rows, cols, at);
19923
- return Matrix.padded(Matrix.build(blockRows, blockCols, at), rows, cols, at(rows - 1, cols - 1));
19924
- }
19925
-
19926
20044
  // xlsx/formula/functions/lambda.ts
19927
20045
  var C17 = "Logical";
19928
20046
  function lambdaArg(value2) {
@@ -25182,9 +25300,6 @@ var paramKind = (spec2, index3) => {
25182
25300
  return params[Math.min(index3, params.length - 1)] ?? "value";
25183
25301
  };
25184
25302
 
25185
- // xlsx/formula/spill.ts
25186
- var isSpilledCell = (cell) => cell !== void 0 && "spillAnchor" in cell;
25187
-
25188
25303
  // xlsx/formula/move.ts
25189
25304
  var same3 = (a2, b) => a2.toLowerCase() === b.toLowerCase();
25190
25305
  function deleteSheetInFormula(formula, sheetName, tableNames = []) {
@@ -27213,10 +27328,8 @@ function sheetFormatXml(sheet) {
27213
27328
  const current = { defaultRowHeight: sheet.defaultRowHeight };
27214
27329
  if (sheet.defaultColWidth !== void 0) current.defaultColWidth = sheet.defaultColWidth;
27215
27330
  if (sheet.format && Object.keys(sheet.format).length) current.format = sheet.format;
27216
- const rowLevel = Math.max(
27217
- 0,
27218
- ...[...sheet.rowInfo.values()].map((info) => info.outlineLevel ?? 0)
27219
- );
27331
+ let rowLevel = 0;
27332
+ for (const info of sheet.rowInfo.values()) rowLevel = Math.max(rowLevel, info.outlineLevel ?? 0);
27220
27333
  const colLevel = Math.max(0, ...sheet.columns.map((col) => col.outlineLevel ?? 0));
27221
27334
  if (source2 && sameModel(readSheetFormat(source2), current) && Number(source2.getAttribute("outlineLevelRow") ?? 0) === rowLevel && Number(source2.getAttribute("outlineLevelCol") ?? 0) === colLevel)
27222
27335
  return snapshotXml(sheet, "sheetFormatPr") ?? "";
@@ -27518,11 +27631,10 @@ function pivotCacheDefinitionXml(pivot, workbook, data, recordRel) {
27518
27631
  const items = data.items[index3];
27519
27632
  if (pivot.dateFields?.includes(name) && items.every((v) => typeof v === "number")) {
27520
27633
  const serials = items;
27521
- const latest = Math.max(...serials);
27522
- const maxDate = Number.isInteger(latest) ? latest + 1 : latest;
27634
+ const range = dateGroupRange({}, serials);
27523
27635
  const parent = derived.filter((entry3) => entry3.group.field === name).at(-1);
27524
27636
  const link = parent ? `<fieldGroup par="${parent.index}"/>` : "";
27525
- return `<cacheField${attrs({ name: encodeEscapes(name), numFmtId: 14 })}><sharedItems${attrs({ containsSemiMixedTypes: false, containsNonDate: false, containsDate: true, containsString: false, minDate: iso(Math.min(...serials)), maxDate: iso(maxDate), count: serials.length })}>${serials.map((serial) => `<d v="${iso(serial)}"/>`).join("")}</sharedItems>${link}</cacheField>`;
27637
+ return `<cacheField${attrs({ name: encodeEscapes(name), numFmtId: 14 })}><sharedItems${attrs({ containsSemiMixedTypes: false, containsNonDate: false, containsDate: true, containsString: false, minDate: iso(range.start), maxDate: iso(range.end), count: serials.length })}>${serials.map((serial) => `<d v="${iso(serial)}"/>`).join("")}</sharedItems>${link}</cacheField>`;
27526
27638
  }
27527
27639
  const types = new Set(
27528
27640
  items.map((value2) => value2 === null || value2 === "" ? "blank" : typeof value2)
@@ -28393,6 +28505,332 @@ async function saveXlsx(workbook) {
28393
28505
  return writer.build();
28394
28506
  }
28395
28507
 
28508
+ // xlsx/load/csv-dates.ts
28509
+ var DAY_RE = /^(\d{1,4})([-/. ])(\d{1,4})\2(\d{1,4})$/;
28510
+ var COMPACT_RE = /^\d{8}$/;
28511
+ var PAIR_RE = /^(\d{1,2})\/(\d{1,2})$/;
28512
+ var FRACTION_RE = /\.(\d+)/;
28513
+ var TIME_RE3 = /^(\d{1,2}:\d{1,2}(?::\d{1,2}(?:\.\d+)?)?(?:\s*[ap]m?)?)\s*(Z|[+-]\d{2}(?::?\d{2})?)?$/i;
28514
+ var SPACE_RE = /\s/;
28515
+ var MAX_DATE_TEXT = 64;
28516
+ function splitTime(text2) {
28517
+ const colon = text2.indexOf(":");
28518
+ if (colon < 0) return [text2, void 0];
28519
+ let start = colon;
28520
+ while (start > 0 && colon - start < 2) {
28521
+ const code = text2.charCodeAt(start - 1);
28522
+ if (code < 48 || code > 57) break;
28523
+ start--;
28524
+ }
28525
+ const before = text2[start - 1] ?? "";
28526
+ if (start === colon || !before) return void 0;
28527
+ if (before === "T" || before === "t") return [text2.slice(0, start - 1), text2.slice(start)];
28528
+ return SPACE_RE.test(before) ? [text2.slice(0, start).trimEnd(), text2.slice(start)] : void 0;
28529
+ }
28530
+ function compactParts(text2, order) {
28531
+ const parts = [];
28532
+ let at = 0;
28533
+ for (const kind of order) {
28534
+ const size = kind === "Y" ? 4 : 2;
28535
+ parts.push(text2.slice(at, at + size));
28536
+ at += size;
28537
+ }
28538
+ return parts;
28539
+ }
28540
+ function pairParts(pair, order) {
28541
+ let next = 0;
28542
+ return [...order].map(
28543
+ (kind) => kind === "Y" ? String((/* @__PURE__ */ new Date()).getFullYear()) : pair[next++] ?? ""
28544
+ );
28545
+ }
28546
+ function dayParts(text2, order) {
28547
+ const match2 = DAY_RE.exec(text2);
28548
+ if (match2) return [match2[1] ?? "", match2[3] ?? "", match2[4] ?? ""];
28549
+ if (COMPACT_RE.test(text2)) return compactParts(text2, order);
28550
+ const pair = PAIR_RE.exec(text2);
28551
+ return pair ? pairParts([pair[1] ?? "", pair[2] ?? ""], order) : void 0;
28552
+ }
28553
+ function inOrder(parts, order) {
28554
+ const date = [0, 0, 0];
28555
+ for (let i2 = 0; i2 < 3; i2++) {
28556
+ const part = parts[i2] ?? "";
28557
+ const kind = order[i2];
28558
+ if (kind === "Y") {
28559
+ if (part.length === 3 || part.length > 4) return void 0;
28560
+ date[0] = fullYear(part);
28561
+ } else if (part.length > 2) return void 0;
28562
+ else date[kind === "M" ? 1 : 2] = Number(part);
28563
+ }
28564
+ return date;
28565
+ }
28566
+ function offsetMinutes(zone) {
28567
+ if (zone === "Z" || zone === "z") return 0;
28568
+ const hours = Number(zone.slice(1, 3));
28569
+ const minutes = zone.length > 3 ? Number(zone.slice(-2)) : 0;
28570
+ if (hours > 23 || minutes > 59) return void 0;
28571
+ return (zone.startsWith("-") ? -1 : 1) * (hours * 60 + minutes);
28572
+ }
28573
+ function parseOrderedDate(text2, order, date1904, decimal = ".") {
28574
+ if (text2.length > MAX_DATE_TEXT) return void 0;
28575
+ const split = splitTime(text2);
28576
+ if (!split) return void 0;
28577
+ let clock = split[1];
28578
+ if (clock !== void 0 && decimal !== ".")
28579
+ clock = clock.includes(".") ? "" : clock.replace(decimal, ".");
28580
+ const tail = clock === void 0 ? void 0 : TIME_RE3.exec(clock);
28581
+ if (clock !== void 0 && !tail) return void 0;
28582
+ const parts = dayParts(split[0], order);
28583
+ const date = parts && inOrder(parts, order);
28584
+ if (!date) return void 0;
28585
+ const serial = serialOf(date[0], date[1], date[2], date1904);
28586
+ if (serial === void 0) return void 0;
28587
+ if (!tail) return { value: serial, numFmt: "yyyy-mm-dd", zoned: false };
28588
+ const time = parseTime(tail[1] ?? "");
28589
+ if (!time || time.fraction >= 1) return void 0;
28590
+ const zone = tail[2];
28591
+ const offset2 = zone === void 0 ? 0 : offsetMinutes(zone);
28592
+ if (offset2 === void 0) return void 0;
28593
+ const value2 = serial + time.fraction - offset2 / 1440;
28594
+ if (value2 < (date1904 ? 0 : 1)) return void 0;
28595
+ const digits2 = Math.min(3, FRACTION_RE.exec(tail[1] ?? "")?.[1]?.length ?? 0);
28596
+ const format = digits2 ? `h:mm:ss.${"0".repeat(digits2)}` : time.format;
28597
+ return { value: value2, numFmt: `yyyy-mm-dd ${format}`, zoned: zone !== void 0 };
28598
+ }
28599
+
28600
+ // xlsx/load/csv-separators.ts
28601
+ function separatorsOf(decimal = ".", thousands = decimal === "," ? "." : ",") {
28602
+ for (const separator of [decimal, thousands])
28603
+ if (separator.length !== 1 || /[\d+-]/.test(separator))
28604
+ throw new RangeError(`"${separator}" cannot be a decimal or thousands separator.`);
28605
+ if (decimal === thousands)
28606
+ throw new RangeError("The decimal and thousands separators must differ.");
28607
+ return { decimal, thousands };
28608
+ }
28609
+ function separatorNormalizer({
28610
+ decimal,
28611
+ thousands
28612
+ }) {
28613
+ if (decimal === "." && thousands === ",") return void 0;
28614
+ const escape2 = (char) => char.replace(/[\\^$.*+?()[\]{}|]/g, "\\$&");
28615
+ const pattern = new RegExp(`(${escape2(decimal)})|(\\d)${escape2(thousands)}(?=\\d)|[.,]`, "g");
28616
+ const swap = (_, point, digit) => {
28617
+ if (point !== void 0) return ".";
28618
+ if (digit !== void 0) return `${digit},`;
28619
+ return "";
28620
+ };
28621
+ return (text2) => text2.replace(pattern, swap);
28622
+ }
28623
+
28624
+ // xlsx/load/csv-traits.ts
28625
+ var LEADING_ZEROS = 1;
28626
+ var LONG_NUMBER = 2;
28627
+ var SCIENTIFIC = 4;
28628
+ var LETTER_DATE = 8;
28629
+ var TIME_ZONE = 16;
28630
+ var DATE_FALLBACK = 32;
28631
+ var isDigit4 = (code) => code >= 48 && code <= 57;
28632
+ var isLetter2 = (code) => (code | 32) >= 97 && (code | 32) <= 122;
28633
+ function numberTraits(text2, decimal, thousands) {
28634
+ let traits = 0;
28635
+ let digits2 = 0;
28636
+ let first2 = true;
28637
+ for (let i2 = 0; i2 < text2.length; i2++) {
28638
+ const code = text2.charCodeAt(i2);
28639
+ if (isDigit4(code)) {
28640
+ if (first2 && code === 48) {
28641
+ const next = text2.charCodeAt(i2 + 1);
28642
+ if (isDigit4(next) || next === thousands && isDigit4(text2.charCodeAt(i2 + 2)))
28643
+ traits |= LEADING_ZEROS;
28644
+ }
28645
+ first2 = false;
28646
+ if (digits2 > 0 || code !== 48) digits2++;
28647
+ } else if (code === decimal) first2 = false;
28648
+ else if (code === 69 || code === 101) {
28649
+ traits |= SCIENTIFIC;
28650
+ break;
28651
+ }
28652
+ }
28653
+ return digits2 > 15 ? traits | LONG_NUMBER : traits;
28654
+ }
28655
+ function significantDigits(text2) {
28656
+ let digits2 = "";
28657
+ for (const char of text2) {
28658
+ if (char === "e" || char === "E") break;
28659
+ if (char >= "0" && char <= "9" && (digits2 !== "" || char !== "0")) digits2 += char;
28660
+ }
28661
+ let end = digits2.length;
28662
+ while (end > 0 && digits2[end - 1] === "0") end--;
28663
+ return digits2.slice(0, end);
28664
+ }
28665
+ var keepsDigits = (field, value2) => significantDigits(field) === significantDigits(String(Math.abs(value2)));
28666
+ function dateTraits(field) {
28667
+ const text2 = field.trimStart();
28668
+ let i2 = 0;
28669
+ while (isLetter2(text2.charCodeAt(i2))) i2++;
28670
+ return i2 > 0 && isDigit4(text2.charCodeAt(i2)) ? LETTER_DATE : 0;
28671
+ }
28672
+
28673
+ // xlsx/load/csv-import.ts
28674
+ var KINDS2 = [
28675
+ {
28676
+ conversion: "leadingZeros",
28677
+ one: "value lost its leading zeros when converted to a number",
28678
+ many: "values lost their leading zeros when converted to numbers"
28679
+ },
28680
+ {
28681
+ conversion: "longNumbers",
28682
+ one: "value with more than 15 digits lost digits when converted to a number",
28683
+ many: "values with more than 15 digits lost digits when converted to numbers"
28684
+ },
28685
+ {
28686
+ conversion: "scientific",
28687
+ one: "value with the letter E lost digits when converted to a number",
28688
+ many: "values with the letter E lost digits when converted to numbers"
28689
+ },
28690
+ {
28691
+ conversion: "letterDates",
28692
+ one: "value of letters and digits such as JAN1 was converted to a date",
28693
+ many: "values of letters and digits such as JAN1 were converted to dates"
28694
+ },
28695
+ {
28696
+ conversion: void 0,
28697
+ one: "date-time with a time zone was converted to UTC",
28698
+ many: "date-times with a time zone were converted to UTC"
28699
+ },
28700
+ {
28701
+ conversion: void 0,
28702
+ one: "value could not be read as a date in {order} order and was read as General",
28703
+ many: "values could not be read as dates in {order} order and were read as General"
28704
+ }
28705
+ ];
28706
+ var FORMATS = /* @__PURE__ */ new Set(["general", "text", "skip", "MDY", "DMY", "YMD", "MYD", "DYM", "YDM"]);
28707
+ var DAY_FIRST = /* @__PURE__ */ new Set(["DMY", "DYM", "YDM"]);
28708
+ var MONTH_FIRST_RE = /^\d{1,2}[-/]\d{1,2}(?:[-/]\d{1,4})?(?:$|[\sT])/;
28709
+ var FRACTION_FORMATS = /* @__PURE__ */ new Set(["# ?/?", "# ??/??"]);
28710
+ var EN_US_SEPARATORS_RE = /[.,]/;
28711
+ var SIGNED_RE = /^\s*(?:[$€£]\s*)?[-+(]/;
28712
+ function columnFormats(columns) {
28713
+ const formats = [];
28714
+ for (const [key, format] of Object.entries(columns ?? {})) {
28715
+ const col = Number(key);
28716
+ if (!Number.isInteger(col) || col < 0 || col > MAX_COL)
28717
+ throw new RangeError(`CSV column ${key} is not a zero-based column index.`);
28718
+ if (!FORMATS.has(format))
28719
+ throw new RangeError(`Unknown CSV column format "${String(format)}" for column ${col}.`);
28720
+ formats[col] = format;
28721
+ }
28722
+ return formats;
28723
+ }
28724
+ function createFieldReader(options, date1904) {
28725
+ const formats = columnFormats(options.columns);
28726
+ const targets = [];
28727
+ let skipped = 0;
28728
+ for (let col = 0; col < formats.length; col++) {
28729
+ if (formats[col] === "skip") {
28730
+ targets.push(-1);
28731
+ skipped++;
28732
+ } else targets.push(col - skipped);
28733
+ }
28734
+ const target = (col) => col < targets.length ? targets[col] ?? -1 : col - skipped;
28735
+ let keepText = 0;
28736
+ KINDS2.forEach(({ conversion }, kind) => {
28737
+ if (conversion && options.conversions?.[conversion] === false) keepText |= 1 << kind;
28738
+ });
28739
+ const separators = separatorsOf(options.decimalSeparator, options.thousandsSeparator);
28740
+ const normalize = separatorNormalizer(separators);
28741
+ const decimal = separators.decimal.charCodeAt(0);
28742
+ const thousands = separators.thousands.charCodeAt(0);
28743
+ const { formulas = false, trailingMinus = false } = options;
28744
+ const counts = [];
28745
+ const firstRows = [];
28746
+ const report = (traits, row2, col) => {
28747
+ if (options.reportConversions === false) return;
28748
+ for (let kind = 0; kind < KINDS2.length; kind++) {
28749
+ if (!(traits & 1 << kind)) continue;
28750
+ const key = col * KINDS2.length + kind;
28751
+ const count2 = counts[key];
28752
+ if (count2 === void 0) firstRows[key] = row2;
28753
+ counts[key] = (count2 ?? 0) + 1;
28754
+ }
28755
+ };
28756
+ const dateFormats = /* @__PURE__ */ new Map();
28757
+ const isDate = (numFmt) => {
28758
+ if (numFmt === void 0) return false;
28759
+ let known = dateFormats.get(numFmt);
28760
+ if (known === void 0) {
28761
+ known = isDateFormat(numFmt);
28762
+ dateFormats.set(numFmt, known);
28763
+ }
28764
+ return known;
28765
+ };
28766
+ const isNumber = (parsed) => typeof parsed.value === "number" && parsed.formula === void 0 && !isDate(parsed.numFmt);
28767
+ const localized = (text2, normalized) => {
28768
+ const parsed = parseCellInput(normalized);
28769
+ if (normalized === text2 || isNumber(parsed)) return parsed;
28770
+ const plain3 = parseCellInput(text2);
28771
+ if (isNumber(plain3) && EN_US_SEPARATORS_RE.test(text2)) return { value: text2 };
28772
+ const dated = typeof parsed.value === "number" && parsed.formula === void 0;
28773
+ return dated && typeof plain3.value === "string" ? parsed : plain3;
28774
+ };
28775
+ const type = normalize ? (text2) => localized(text2, normalize(text2)) : (text2) => parseCellInput(text2);
28776
+ const negative = (field) => {
28777
+ const text2 = field.trimEnd();
28778
+ if (text2.length < 2 || !text2.endsWith("-")) return void 0;
28779
+ const body = text2.slice(0, -1);
28780
+ if (SIGNED_RE.test(body)) return void 0;
28781
+ const parsed = type(body);
28782
+ if (!isNumber(parsed)) return void 0;
28783
+ return { ...parsed, value: parsed.value === 0 ? 0 : -parsed.value };
28784
+ };
28785
+ const general = (field, row2, col) => {
28786
+ if (!formulas && field.startsWith("=")) return { value: field };
28787
+ const parsed = (trailingMinus ? negative(field) : void 0) ?? type(field);
28788
+ if (typeof parsed.value !== "number" || parsed.formula !== void 0) return parsed;
28789
+ const grouping = FRACTION_FORMATS.has(parsed.numFmt ?? "") ? -1 : thousands;
28790
+ const traits = isDate(parsed.numFmt) ? dateTraits(field) : numberTraits(field, decimal, grouping);
28791
+ if (traits === 0) return parsed;
28792
+ if (traits & keepText) return { value: field };
28793
+ let lost = traits;
28794
+ if (traits & (LONG_NUMBER | SCIENTIFIC)) {
28795
+ if (keepsDigits(field, parsed.value)) lost &= -7;
28796
+ else if (traits & LONG_NUMBER) lost &= ~SCIENTIFIC;
28797
+ }
28798
+ if (lost) report(lost, row2, col);
28799
+ return parsed;
28800
+ };
28801
+ return {
28802
+ target,
28803
+ read(field, row2, col) {
28804
+ const format = col < formats.length ? formats[col] : void 0;
28805
+ if (format === void 0 || format === "general") return general(field, row2, col);
28806
+ if (format === "text") return { value: field, numFmt: "@" };
28807
+ if (format === "skip") return { value: null };
28808
+ const date = parseOrderedDate(field.trim(), format, date1904, separators.decimal);
28809
+ if (!date) {
28810
+ const parsed = general(field, row2, col);
28811
+ const dated = typeof parsed.value === "number" && isDate(parsed.numFmt);
28812
+ if (dated && DAY_FIRST.has(format) && MONTH_FIRST_RE.test(field.trim()))
28813
+ report(DATE_FALLBACK, row2, col);
28814
+ return parsed;
28815
+ }
28816
+ if (date.zoned) report(TIME_ZONE, row2, col);
28817
+ return { value: date.value, numFmt: date.numFmt };
28818
+ },
28819
+ warnings() {
28820
+ const warnings = [];
28821
+ counts.forEach((count2, key) => {
28822
+ const kind = KINDS2[key % KINDS2.length];
28823
+ const col = Math.floor(key / KINDS2.length);
28824
+ const label2 = columnLabel(target(col));
28825
+ const what = (count2 === 1 ? kind?.one : kind?.many)?.replace("{order}", formats[col] ?? "");
28826
+ const row2 = (firstRows[key] ?? 0) + 1;
28827
+ warnings.push(`Column ${label2}: ${count2} ${what} (first: ${label2}${row2}).`);
28828
+ });
28829
+ return warnings;
28830
+ }
28831
+ };
28832
+ }
28833
+
28396
28834
  // xlsx/load/csv.ts
28397
28835
  var CANDIDATES = [",", ";", " "];
28398
28836
  function delimiterCounts(text2, maxLines = 20) {
@@ -28489,6 +28927,7 @@ function csvToWorkbook(text2, options = {}) {
28489
28927
  workbook.format = "csv";
28490
28928
  const sheet = workbook.sheets[0];
28491
28929
  if (!sheet) return workbook;
28930
+ const reader = createFieldReader(options, workbook.date1904);
28492
28931
  const base = styleAt(workbook, 0);
28493
28932
  const formats = /* @__PURE__ */ new Map();
28494
28933
  const rows = parseCsv(
@@ -28496,9 +28935,11 @@ function csvToWorkbook(text2, options = {}) {
28496
28935
  options.delimiter === void 0 ? {} : { delimiter: options.delimiter }
28497
28936
  );
28498
28937
  rows.forEach((fields, row2) => {
28499
- fields.forEach((field, col) => {
28938
+ fields.forEach((field, source2) => {
28500
28939
  if (field === "") return;
28501
- const parsed = !options.formulas && field.startsWith("=") ? { value: field } : parseCellInput(field);
28940
+ const col = reader.target(source2);
28941
+ if (col < 0) return;
28942
+ const parsed = reader.read(field, row2, source2);
28502
28943
  const cell = { value: parsed.value };
28503
28944
  if (parsed.formula !== void 0) cell.formula = parsed.formula;
28504
28945
  if (parsed.numFmt && parsed.numFmt !== "General") {
@@ -28517,6 +28958,7 @@ function csvToWorkbook(text2, options = {}) {
28517
28958
  cells.set(col, cell);
28518
28959
  });
28519
28960
  });
28961
+ workbook.warnings.push(...reader.warnings());
28520
28962
  return workbook;
28521
28963
  }
28522
28964
  var FORMULA_TRIGGER = /^[=+\-@\t\r]/;
@@ -29767,7 +30209,7 @@ var RT = {
29767
30209
  OBPROJ: 211,
29768
30210
  SXSTREAMID: 213};
29769
30211
  var STATES = ["visible", "hidden", "veryHidden"];
29770
- var KINDS2 = {
30212
+ var KINDS3 = {
29771
30213
  0: "worksheet",
29772
30214
  1: "macro",
29773
30215
  2: "chart",
@@ -29902,7 +30344,7 @@ function parseGlobals(records) {
29902
30344
  case RT.BOUNDSHEET: {
29903
30345
  const offset2 = r.u32();
29904
30346
  const state = STATES[r.u8() & 3] ?? "visible";
29905
- const kind = KINDS2[r.u8()] ?? "unknown";
30347
+ const kind = KINDS3[r.u8()] ?? "unknown";
29906
30348
  out.sheets.push({ offset: offset2, state, kind, name: r.shortXlString() });
29907
30349
  break;
29908
30350
  }
@@ -31205,6 +31647,7 @@ async function decryptWorkbook(bytes, password) {
31205
31647
  return plain3;
31206
31648
  }
31207
31649
  async function loadWorkbook(input, options = {}) {
31650
+ const limits = options.limits && resolveLoadLimits(options.limits);
31208
31651
  let bytes = toBytes3(input);
31209
31652
  let format = detectWorkbookFormat(bytes, options.fileName);
31210
31653
  const encrypted = format === "encrypted";
@@ -31216,12 +31659,13 @@ async function loadWorkbook(input, options = {}) {
31216
31659
  if (format === "xls") return loadLegacyXls(bytes);
31217
31660
  if (format === "csv") {
31218
31661
  return csvToWorkbook(decodeText(bytes), {
31662
+ ...options.csv,
31219
31663
  sheetName: sheetNameFromFileName(options.fileName),
31220
31664
  ...options.delimiter === void 0 ? {} : { delimiter: options.delimiter },
31221
31665
  ...options.formulas === void 0 ? {} : { formulas: options.formulas }
31222
31666
  });
31223
31667
  }
31224
- const workbook = await loadXlsx(bytes);
31668
+ const workbook = await loadXlsx(bytes, limits ? { limits } : {});
31225
31669
  if (format === "xlsm" && workbook.format === "xlsx") workbook.format = "xlsm";
31226
31670
  if (encrypted) workbook.warnings.push(ENCRYPTED_WARNING);
31227
31671
  return workbook;
@@ -31245,6 +31689,7 @@ exports.IncorrectPasswordError = IncorrectPasswordError;
31245
31689
  exports.LegacyXlsError = LegacyXlsError;
31246
31690
  exports.PasswordRequiredError = PasswordRequiredError;
31247
31691
  exports.UnsupportedWorkbookError = UnsupportedWorkbookError;
31692
+ exports.WorkbookTooLargeError = WorkbookTooLargeError;
31248
31693
  exports.csvToWorkbook = csvToWorkbook;
31249
31694
  exports.decodeSpreadsheetText = decodeSpreadsheetText;
31250
31695
  exports.decodeText = decodeText;
@@ -31252,6 +31697,7 @@ exports.detectDelimiter = detectDelimiter;
31252
31697
  exports.detectWorkbookFormat = detectWorkbookFormat;
31253
31698
  exports.isEncryptedOoxmlPackage = isEncryptedOoxmlPackage;
31254
31699
  exports.isOoxmlCryptoError = isOoxmlCryptoError;
31700
+ exports.isWorkbookTooLargeError = isWorkbookTooLargeError;
31255
31701
  exports.loadLegacyXls = loadLegacyXls;
31256
31702
  exports.loadWorkbook = loadWorkbook;
31257
31703
  exports.neutraliseCsvFormula = neutraliseCsvFormula;