ooxml-core 1.1.0 → 1.2.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 (870) hide show
  1. package/README.md +18 -18
  2. package/dist/{PptxHandler-75LOVF7I.mjs → PptxHandler-VQQS4VS6.mjs} +3 -3
  3. package/dist/automation/index.cjs +7567 -4401
  4. package/dist/automation/index.mjs +7567 -4401
  5. package/dist/chart/bar-cluster-geometry.d.ts +6 -0
  6. package/dist/chart/bar-cluster-geometry.d.ts.map +1 -1
  7. package/dist/chart/color-palettes.d.ts +2 -2
  8. package/dist/chart/color-palettes.d.ts.map +1 -1
  9. package/dist/chart/data-cache.d.ts +6 -0
  10. package/dist/chart/data-cache.d.ts.map +1 -0
  11. package/dist/chart/gradient-coincident-stops.d.ts +17 -0
  12. package/dist/chart/gradient-coincident-stops.d.ts.map +1 -0
  13. package/dist/chart/gradient-definition.d.ts +3 -3
  14. package/dist/chart/gradient-definition.d.ts.map +1 -1
  15. package/dist/chart/index.cjs +3069 -140
  16. package/dist/chart/index.d.ts +7 -0
  17. package/dist/chart/index.d.ts.map +1 -1
  18. package/dist/chart/index.mjs +3048 -141
  19. package/dist/chart/model-chrome.d.ts +39 -0
  20. package/dist/chart/model-chrome.d.ts.map +1 -0
  21. package/dist/chart/model-series.d.ts +189 -0
  22. package/dist/chart/model-series.d.ts.map +1 -0
  23. package/dist/chart/model.d.ts +202 -0
  24. package/dist/chart/model.d.ts.map +1 -0
  25. package/dist/chart/parse-chrome.d.ts +16 -0
  26. package/dist/chart/parse-chrome.d.ts.map +1 -0
  27. package/dist/chart/parse-plot.d.ts +11 -0
  28. package/dist/chart/parse-plot.d.ts.map +1 -0
  29. package/dist/chart/parse-series.d.ts +8 -0
  30. package/dist/chart/parse-series.d.ts.map +1 -0
  31. package/dist/chart/parse-space.d.ts +8 -0
  32. package/dist/chart/parse-space.d.ts.map +1 -0
  33. package/dist/chart/parse-text.d.ts +12 -0
  34. package/dist/chart/parse-text.d.ts.map +1 -0
  35. package/dist/chart/parse-util.d.ts +42 -0
  36. package/dist/chart/parse-util.d.ts.map +1 -0
  37. package/dist/{xlsx/layout → chart/render}/chart-appearance.d.ts +4 -4
  38. package/dist/chart/render/chart-appearance.d.ts.map +1 -0
  39. package/dist/chart/render/chart-colors.d.ts +9 -0
  40. package/dist/chart/render/chart-colors.d.ts.map +1 -0
  41. package/dist/chart/render/chart-scale.d.ts.map +1 -0
  42. package/dist/chart/render/chart-spacing.d.ts +6 -0
  43. package/dist/chart/render/chart-spacing.d.ts.map +1 -0
  44. package/dist/{xlsx/layout → chart/render}/chart-svg-appearance.d.ts +1 -1
  45. package/dist/chart/render/chart-svg-appearance.d.ts.map +1 -0
  46. package/dist/chart/render/chart-svg-bars.d.ts.map +1 -0
  47. package/dist/chart/render/chart-svg-cartesian.d.ts.map +1 -0
  48. package/dist/chart/render/chart-svg-legend.d.ts.map +1 -0
  49. package/dist/chart/render/chart-svg-radial.d.ts.map +1 -0
  50. package/dist/chart/render/chart-svg-text-metrics.d.ts.map +1 -0
  51. package/dist/chart/render/chart-svg-title-text.d.ts.map +1 -0
  52. package/dist/chart/render/chart-svg-util.d.ts.map +1 -0
  53. package/dist/chart/render/chart-svg.d.ts.map +1 -0
  54. package/dist/chart/render/chart-title-text.d.ts +14 -0
  55. package/dist/chart/render/chart-title-text.d.ts.map +1 -0
  56. package/dist/chart/render/chart-value-axis.d.ts +6 -0
  57. package/dist/chart/render/chart-value-axis.d.ts.map +1 -0
  58. package/dist/chart/render/chart-view.d.ts +71 -0
  59. package/dist/chart/render/chart-view.d.ts.map +1 -0
  60. package/dist/chart/render/index.d.ts +9 -0
  61. package/dist/chart/render/index.d.ts.map +1 -0
  62. package/dist/chart/render/render-space.d.ts +34 -0
  63. package/dist/chart/render/render-space.d.ts.map +1 -0
  64. package/dist/chart/render/summary-from-space.d.ts +15 -0
  65. package/dist/chart/render/summary-from-space.d.ts.map +1 -0
  66. package/dist/chart/render/summary.d.ts +51 -0
  67. package/dist/chart/render/summary.d.ts.map +1 -0
  68. package/dist/chart/render/theme-palette.d.ts +8 -0
  69. package/dist/chart/render/theme-palette.d.ts.map +1 -0
  70. package/dist/chart/style-definition.d.ts +7 -7
  71. package/dist/chart/style-definition.d.ts.map +1 -1
  72. package/dist/chart/write-axes.d.ts +5 -0
  73. package/dist/chart/write-axes.d.ts.map +1 -0
  74. package/dist/chart/write-chrome.d.ts +9 -0
  75. package/dist/chart/write-chrome.d.ts.map +1 -0
  76. package/dist/chart/write-plot.d.ts +7 -0
  77. package/dist/chart/write-plot.d.ts.map +1 -0
  78. package/dist/chart/write-series.d.ts +7 -0
  79. package/dist/chart/write-series.d.ts.map +1 -0
  80. package/dist/chart/write-shape.d.ts +21 -0
  81. package/dist/chart/write-shape.d.ts.map +1 -0
  82. package/dist/chart/write-space.d.ts +15 -0
  83. package/dist/chart/write-space.d.ts.map +1 -0
  84. package/dist/chart/write-text-body.d.ts +6 -0
  85. package/dist/chart/write-text-body.d.ts.map +1 -0
  86. package/dist/chart/write-text.d.ts +15 -0
  87. package/dist/chart/write-text.d.ts.map +1 -0
  88. package/dist/chart/write-util.d.ts +24 -0
  89. package/dist/chart/write-util.d.ts.map +1 -0
  90. package/dist/chart/xml-fragment.d.ts +13 -0
  91. package/dist/chart/xml-fragment.d.ts.map +1 -0
  92. package/dist/{chunk-HUBK4EOT.mjs → chunk-3IT6ZD7K.mjs} +2 -0
  93. package/dist/{chunk-TS3E27NK.mjs → chunk-3UMDVJRN.mjs} +12 -1
  94. package/dist/{chunk-P22OKTRK.mjs → chunk-54S5A5PZ.mjs} +208 -159
  95. package/dist/{chunk-OMGH6IKY.mjs → chunk-5U27IVB7.mjs} +42 -5
  96. package/dist/{chunk-RFX7AJDZ.mjs → chunk-5VLNF4OX.mjs} +2 -2
  97. package/dist/{chunk-OJI3N5AY.cjs → chunk-FRUB573B.cjs} +2 -0
  98. package/dist/{chunk-75LA7H3F.mjs → chunk-V2BIGIH4.mjs} +27504 -27464
  99. package/dist/{chunk-Q27H4HFS.mjs → chunk-XBNSBDNT.mjs} +1 -1
  100. package/dist/{chunk-2C72N64G.cjs → chunk-XROY25LN.cjs} +12 -0
  101. package/dist/{chunk-LA7D6ZYQ.mjs → chunk-XSFHGZFH.mjs} +3579 -2083
  102. package/dist/collab/index.cjs +1 -0
  103. package/dist/collab/index.mjs +1 -0
  104. package/dist/collab/transport-provider.d.ts.map +1 -1
  105. package/dist/color/hex-rgb.d.ts +5 -0
  106. package/dist/color/hex-rgb.d.ts.map +1 -0
  107. package/dist/color/index.cjs +12 -0
  108. package/dist/color/index.d.ts +1 -0
  109. package/dist/color/index.d.ts.map +1 -1
  110. package/dist/color/index.mjs +11 -1
  111. package/dist/diagram/engine/alg-composite.d.ts +18 -0
  112. package/dist/diagram/engine/alg-composite.d.ts.map +1 -0
  113. package/dist/diagram/engine/alg-connector.d.ts +17 -0
  114. package/dist/diagram/engine/alg-connector.d.ts.map +1 -0
  115. package/dist/diagram/engine/alg-cycle.d.ts +28 -0
  116. package/dist/diagram/engine/alg-cycle.d.ts.map +1 -0
  117. package/dist/diagram/engine/alg-hier.d.ts +33 -0
  118. package/dist/diagram/engine/alg-hier.d.ts.map +1 -0
  119. package/dist/diagram/engine/alg-linear.d.ts +24 -0
  120. package/dist/diagram/engine/alg-linear.d.ts.map +1 -0
  121. package/dist/diagram/engine/alg-pyra.d.ts +117 -0
  122. package/dist/diagram/engine/alg-pyra.d.ts.map +1 -0
  123. package/dist/diagram/engine/alg-snake.d.ts +21 -0
  124. package/dist/diagram/engine/alg-snake.d.ts.map +1 -0
  125. package/dist/diagram/engine/axis.d.ts +24 -0
  126. package/dist/diagram/engine/axis.d.ts.map +1 -0
  127. package/dist/diagram/engine/conditions.d.ts +12 -0
  128. package/dist/diagram/engine/conditions.d.ts.map +1 -0
  129. package/dist/diagram/engine/connector-shape.d.ts +25 -0
  130. package/dist/diagram/engine/connector-shape.d.ts.map +1 -0
  131. package/dist/diagram/engine/connector-size.d.ts +30 -0
  132. package/dist/diagram/engine/connector-size.d.ts.map +1 -0
  133. package/dist/diagram/engine/constraint-eval.d.ts +37 -0
  134. package/dist/diagram/engine/constraint-eval.d.ts.map +1 -0
  135. package/dist/diagram/engine/constraint-fill-idiom.d.ts +61 -0
  136. package/dist/diagram/engine/constraint-fill-idiom.d.ts.map +1 -0
  137. package/dist/diagram/engine/constraint-units.d.ts +35 -0
  138. package/dist/diagram/engine/constraint-units.d.ts.map +1 -0
  139. package/dist/diagram/engine/data-points.d.ts +48 -0
  140. package/dist/diagram/engine/data-points.d.ts.map +1 -0
  141. package/dist/diagram/engine/engine-context.d.ts +21 -0
  142. package/dist/diagram/engine/engine-context.d.ts.map +1 -0
  143. package/dist/diagram/engine/engine-first-allowlist.d.ts +31 -0
  144. package/dist/diagram/engine/engine-first-allowlist.d.ts.map +1 -0
  145. package/dist/diagram/engine/engine-fonts.d.ts +26 -0
  146. package/dist/diagram/engine/engine-fonts.d.ts.map +1 -0
  147. package/dist/diagram/engine/engine-node.d.ts +72 -0
  148. package/dist/diagram/engine/engine-node.d.ts.map +1 -0
  149. package/dist/diagram/engine/engine-to-result.d.ts +43 -0
  150. package/dist/diagram/engine/engine-to-result.d.ts.map +1 -0
  151. package/dist/diagram/engine/engine.d.ts +18 -0
  152. package/dist/diagram/engine/engine.d.ts.map +1 -0
  153. package/dist/diagram/engine/font-groups.d.ts +33 -0
  154. package/dist/diagram/engine/font-groups.d.ts.map +1 -0
  155. package/dist/diagram/engine/font-length.d.ts +26 -0
  156. package/dist/diagram/engine/font-length.d.ts.map +1 -0
  157. package/dist/diagram/engine/font-search.d.ts +38 -0
  158. package/dist/diagram/engine/font-search.d.ts.map +1 -0
  159. package/dist/diagram/engine/hier-assistants.d.ts +47 -0
  160. package/dist/diagram/engine/hier-assistants.d.ts.map +1 -0
  161. package/dist/diagram/engine/hier-hang.d.ts +28 -0
  162. package/dist/diagram/engine/hier-hang.d.ts.map +1 -0
  163. package/dist/diagram/engine/hier-measure.d.ts +33 -0
  164. package/dist/diagram/engine/hier-measure.d.ts.map +1 -0
  165. package/dist/diagram/engine/hier-node-size.d.ts +23 -0
  166. package/dist/diagram/engine/hier-node-size.d.ts.map +1 -0
  167. package/dist/diagram/engine/hier-shape.d.ts +31 -0
  168. package/dist/diagram/engine/hier-shape.d.ts.map +1 -0
  169. package/dist/diagram/engine/index.d.ts +6 -0
  170. package/dist/diagram/engine/index.d.ts.map +1 -0
  171. package/dist/diagram/engine/layout-def-parse.d.ts +13 -0
  172. package/dist/diagram/engine/layout-def-parse.d.ts.map +1 -0
  173. package/dist/diagram/engine/layout-def-types.d.ts +118 -0
  174. package/dist/diagram/engine/layout-def-types.d.ts.map +1 -0
  175. package/dist/diagram/engine/layout-driver.d.ts +41 -0
  176. package/dist/diagram/engine/layout-driver.d.ts.map +1 -0
  177. package/dist/diagram/engine/layout-font.d.ts +27 -0
  178. package/dist/diagram/engine/layout-font.d.ts.map +1 -0
  179. package/dist/diagram/engine/move-with-merge.d.ts +49 -0
  180. package/dist/diagram/engine/move-with-merge.d.ts.map +1 -0
  181. package/dist/diagram/engine/node-text.d.ts +20 -0
  182. package/dist/diagram/engine/node-text.d.ts.map +1 -0
  183. package/dist/diagram/engine/ordered-xml.d.ts +30 -0
  184. package/dist/diagram/engine/ordered-xml.d.ts.map +1 -0
  185. package/dist/diagram/engine/preferred-size.d.ts +28 -0
  186. package/dist/diagram/engine/preferred-size.d.ts.map +1 -0
  187. package/dist/diagram/engine/pres-tree.d.ts +58 -0
  188. package/dist/diagram/engine/pres-tree.d.ts.map +1 -0
  189. package/dist/diagram/engine/registry.d.ts +7 -0
  190. package/dist/diagram/engine/registry.d.ts.map +1 -0
  191. package/dist/diagram/engine/render-filter.d.ts +43 -0
  192. package/dist/diagram/engine/render-filter.d.ts.map +1 -0
  193. package/dist/diagram/engine/shape-adjust.d.ts +16 -0
  194. package/dist/diagram/engine/shape-adjust.d.ts.map +1 -0
  195. package/dist/diagram/engine/shape-transform.d.ts +14 -0
  196. package/dist/diagram/engine/shape-transform.d.ts.map +1 -0
  197. package/dist/diagram/engine/snake-rule-fit.d.ts +34 -0
  198. package/dist/diagram/engine/snake-rule-fit.d.ts.map +1 -0
  199. package/dist/diagram/engine/style-label.d.ts +24 -0
  200. package/dist/diagram/engine/style-label.d.ts.map +1 -0
  201. package/dist/diagram/engine/text-fit.d.ts +61 -0
  202. package/dist/diagram/engine/text-fit.d.ts.map +1 -0
  203. package/dist/diagram/engine/text-grow.d.ts +33 -0
  204. package/dist/diagram/engine/text-grow.d.ts.map +1 -0
  205. package/dist/diagram/engine/text-measure.d.ts +77 -0
  206. package/dist/diagram/engine/text-measure.d.ts.map +1 -0
  207. package/dist/diagram/hierarchy/index.d.ts +5 -0
  208. package/dist/diagram/hierarchy/index.d.ts.map +1 -0
  209. package/dist/diagram/hierarchy/smartart-hierarchy-axis-pitch.d.ts +65 -0
  210. package/dist/diagram/hierarchy/smartart-hierarchy-axis-pitch.d.ts.map +1 -0
  211. package/dist/diagram/hierarchy/smartart-hierarchy-axis-swap-orientation.d.ts +68 -0
  212. package/dist/diagram/hierarchy/smartart-hierarchy-axis-swap-orientation.d.ts.map +1 -0
  213. package/dist/diagram/hierarchy/smartart-hierarchy-branch-mode.d.ts +54 -0
  214. package/dist/diagram/hierarchy/smartart-hierarchy-branch-mode.d.ts.map +1 -0
  215. package/dist/diagram/hierarchy/smartart-hierarchy-cascade.d.ts +58 -0
  216. package/dist/diagram/hierarchy/smartart-hierarchy-cascade.d.ts.map +1 -0
  217. package/dist/diagram/hierarchy/smartart-hierarchy-centered-fan-axis.d.ts +63 -0
  218. package/dist/diagram/hierarchy/smartart-hierarchy-centered-fan-axis.d.ts.map +1 -0
  219. package/dist/diagram/hierarchy/smartart-hierarchy-child-order.d.ts +41 -0
  220. package/dist/diagram/hierarchy/smartart-hierarchy-child-order.d.ts.map +1 -0
  221. package/dist/diagram/hierarchy/smartart-hierarchy-composite-child.d.ts +129 -0
  222. package/dist/diagram/hierarchy/smartart-hierarchy-composite-child.d.ts.map +1 -0
  223. package/dist/diagram/hierarchy/smartart-hierarchy-constraint-lookup.d.ts +76 -0
  224. package/dist/diagram/hierarchy/smartart-hierarchy-constraint-lookup.d.ts.map +1 -0
  225. package/dist/diagram/hierarchy/smartart-hierarchy-corner-plan.d.ts +49 -0
  226. package/dist/diagram/hierarchy/smartart-hierarchy-corner-plan.d.ts.map +1 -0
  227. package/dist/diagram/hierarchy/smartart-hierarchy-dispatch-lindir.d.ts +58 -0
  228. package/dist/diagram/hierarchy/smartart-hierarchy-dispatch-lindir.d.ts.map +1 -0
  229. package/dist/diagram/hierarchy/smartart-hierarchy-fan-aware-width.d.ts +48 -0
  230. package/dist/diagram/hierarchy/smartart-hierarchy-fan-aware-width.d.ts.map +1 -0
  231. package/dist/diagram/hierarchy/smartart-hierarchy-fan.d.ts +97 -0
  232. package/dist/diagram/hierarchy/smartart-hierarchy-fan.d.ts.map +1 -0
  233. package/dist/diagram/hierarchy/smartart-hierarchy-fanned-hang-geometry.d.ts +42 -0
  234. package/dist/diagram/hierarchy/smartart-hierarchy-fanned-hang-geometry.d.ts.map +1 -0
  235. package/dist/diagram/hierarchy/smartart-hierarchy-fanned-hang.d.ts +74 -0
  236. package/dist/diagram/hierarchy/smartart-hierarchy-fanned-hang.d.ts.map +1 -0
  237. package/dist/diagram/hierarchy/smartart-hierarchy-fit-item-box.d.ts +111 -0
  238. package/dist/diagram/hierarchy/smartart-hierarchy-fit-item-box.d.ts.map +1 -0
  239. package/dist/diagram/hierarchy/smartart-hierarchy-fold-depth.d.ts +44 -0
  240. package/dist/diagram/hierarchy/smartart-hierarchy-fold-depth.d.ts.map +1 -0
  241. package/dist/diagram/hierarchy/smartart-hierarchy-generation-gap.d.ts +60 -0
  242. package/dist/diagram/hierarchy/smartart-hierarchy-generation-gap.d.ts.map +1 -0
  243. package/dist/diagram/hierarchy/smartart-hierarchy-generation-templates.d.ts +106 -0
  244. package/dist/diagram/hierarchy/smartart-hierarchy-generation-templates.d.ts.map +1 -0
  245. package/dist/diagram/hierarchy/smartart-hierarchy-hang-depth.d.ts +133 -0
  246. package/dist/diagram/hierarchy/smartart-hierarchy-hang-depth.d.ts.map +1 -0
  247. package/dist/diagram/hierarchy/smartart-hierarchy-hang-dispatch.d.ts +28 -0
  248. package/dist/diagram/hierarchy/smartart-hierarchy-hang-dispatch.d.ts.map +1 -0
  249. package/dist/diagram/hierarchy/smartart-hierarchy-hanging-arrange.d.ts +28 -0
  250. package/dist/diagram/hierarchy/smartart-hierarchy-hanging-arrange.d.ts.map +1 -0
  251. package/dist/diagram/hierarchy/smartart-hierarchy-hanging-box.d.ts +86 -0
  252. package/dist/diagram/hierarchy/smartart-hierarchy-hanging-box.d.ts.map +1 -0
  253. package/dist/diagram/hierarchy/smartart-hierarchy-hanging-fold.d.ts +36 -0
  254. package/dist/diagram/hierarchy/smartart-hierarchy-hanging-fold.d.ts.map +1 -0
  255. package/dist/diagram/hierarchy/smartart-hierarchy-hanging.d.ts +118 -0
  256. package/dist/diagram/hierarchy/smartart-hierarchy-hanging.d.ts.map +1 -0
  257. package/dist/diagram/hierarchy/smartart-hierarchy-item-template.d.ts +64 -0
  258. package/dist/diagram/hierarchy/smartart-hierarchy-item-template.d.ts.map +1 -0
  259. package/dist/diagram/hierarchy/smartart-hierarchy-orgchart-tree.d.ts +53 -0
  260. package/dist/diagram/hierarchy/smartart-hierarchy-orgchart-tree.d.ts.map +1 -0
  261. package/dist/diagram/hierarchy/smartart-hierarchy-orientation-resolve.d.ts +36 -0
  262. package/dist/diagram/hierarchy/smartart-hierarchy-orientation-resolve.d.ts.map +1 -0
  263. package/dist/diagram/hierarchy/smartart-hierarchy-orientation-types.d.ts +81 -0
  264. package/dist/diagram/hierarchy/smartart-hierarchy-orientation-types.d.ts.map +1 -0
  265. package/dist/diagram/hierarchy/smartart-hierarchy-orientation.d.ts +78 -0
  266. package/dist/diagram/hierarchy/smartart-hierarchy-orientation.d.ts.map +1 -0
  267. package/dist/diagram/hierarchy/smartart-hierarchy-pitch.d.ts +140 -0
  268. package/dist/diagram/hierarchy/smartart-hierarchy-pitch.d.ts.map +1 -0
  269. package/dist/diagram/hierarchy/smartart-hierarchy-shared.d.ts +131 -0
  270. package/dist/diagram/hierarchy/smartart-hierarchy-shared.d.ts.map +1 -0
  271. package/dist/diagram/hierarchy/smartart-hierarchy-standard-options.d.ts +91 -0
  272. package/dist/diagram/hierarchy/smartart-hierarchy-standard-options.d.ts.map +1 -0
  273. package/dist/diagram/hierarchy/smartart-hierarchy-standard-rows.d.ts +21 -0
  274. package/dist/diagram/hierarchy/smartart-hierarchy-standard-rows.d.ts.map +1 -0
  275. package/dist/diagram/hierarchy/smartart-hierarchy-standard.d.ts +36 -0
  276. package/dist/diagram/hierarchy/smartart-hierarchy-standard.d.ts.map +1 -0
  277. package/dist/diagram/hierarchy/smartart-hierarchy-tailed-placer.d.ts +20 -0
  278. package/dist/diagram/hierarchy/smartart-hierarchy-tailed-placer.d.ts.map +1 -0
  279. package/dist/diagram/hierarchy/smartart-hierarchy-tailed-transpose.d.ts +50 -0
  280. package/dist/diagram/hierarchy/smartart-hierarchy-tailed-transpose.d.ts.map +1 -0
  281. package/dist/diagram/hierarchy/smartart-hierarchy-transpose.d.ts +23 -0
  282. package/dist/diagram/hierarchy/smartart-hierarchy-transpose.d.ts.map +1 -0
  283. package/dist/diagram/hierarchy/smartart-hierarchy-transposed-orientation.d.ts +22 -0
  284. package/dist/diagram/hierarchy/smartart-hierarchy-transposed-orientation.d.ts.map +1 -0
  285. package/dist/diagram/hierarchy/smartart-hierarchy-wrapped-groups.d.ts +93 -0
  286. package/dist/diagram/hierarchy/smartart-hierarchy-wrapped-groups.d.ts.map +1 -0
  287. package/dist/diagram/hierarchy/smartart-layout-interpreter-hierarchy.d.ts +49 -0
  288. package/dist/diagram/hierarchy/smartart-layout-interpreter-hierarchy.d.ts.map +1 -0
  289. package/dist/diagram/index.cjs +22537 -80
  290. package/dist/diagram/index.d.ts +4 -0
  291. package/dist/diagram/index.d.ts.map +1 -1
  292. package/dist/diagram/index.mjs +22453 -81
  293. package/dist/diagram/layout/index.d.ts +38 -0
  294. package/dist/diagram/layout/index.d.ts.map +1 -0
  295. package/dist/diagram/layout/smartart-choose-xml.d.ts +32 -0
  296. package/dist/diagram/layout/smartart-choose-xml.d.ts.map +1 -0
  297. package/dist/diagram/layout/smartart-constraint-branch-index.d.ts +49 -0
  298. package/dist/diagram/layout/smartart-constraint-branch-index.d.ts.map +1 -0
  299. package/dist/diagram/layout/smartart-constraint-declared-by.d.ts +64 -0
  300. package/dist/diagram/layout/smartart-constraint-declared-by.d.ts.map +1 -0
  301. package/dist/diagram/layout/smartart-constraint-ratio-fallback.d.ts +18 -0
  302. package/dist/diagram/layout/smartart-constraint-ratio-fallback.d.ts.map +1 -0
  303. package/dist/diagram/layout/smartart-constraint-resolve.d.ts +24 -0
  304. package/dist/diagram/layout/smartart-constraint-resolve.d.ts.map +1 -0
  305. package/dist/diagram/layout/smartart-constraint-rules.d.ts +26 -0
  306. package/dist/diagram/layout/smartart-constraint-rules.d.ts.map +1 -0
  307. package/dist/diagram/layout/smartart-constraint-sibling-roles.d.ts +100 -0
  308. package/dist/diagram/layout/smartart-constraint-sibling-roles.d.ts.map +1 -0
  309. package/dist/diagram/layout/smartart-constraint-solver.d.ts +133 -0
  310. package/dist/diagram/layout/smartart-constraint-solver.d.ts.map +1 -0
  311. package/dist/diagram/layout/smartart-constraint-values.d.ts +5 -0
  312. package/dist/diagram/layout/smartart-constraint-values.d.ts.map +1 -0
  313. package/dist/diagram/layout/smartart-font-table.d.ts +14 -0
  314. package/dist/diagram/layout/smartart-font-table.d.ts.map +1 -0
  315. package/dist/diagram/layout/smartart-interpreter-fold-text.d.ts +75 -0
  316. package/dist/diagram/layout/smartart-interpreter-fold-text.d.ts.map +1 -0
  317. package/dist/diagram/layout/smartart-layout-control-flow.d.ts +25 -0
  318. package/dist/diagram/layout/smartart-layout-control-flow.d.ts.map +1 -0
  319. package/dist/diagram/layout/smartart-layout-interpreter-arranged-selection.d.ts +56 -0
  320. package/dist/diagram/layout/smartart-layout-interpreter-arranged-selection.d.ts.map +1 -0
  321. package/dist/diagram/layout/smartart-layout-interpreter-arrangement-kind.d.ts +37 -0
  322. package/dist/diagram/layout/smartart-layout-interpreter-arrangement-kind.d.ts.map +1 -0
  323. package/dist/diagram/layout/smartart-layout-interpreter-aux.d.ts +66 -0
  324. package/dist/diagram/layout/smartart-layout-interpreter-aux.d.ts.map +1 -0
  325. package/dist/diagram/layout/smartart-layout-interpreter-axis-count.d.ts +128 -0
  326. package/dist/diagram/layout/smartart-layout-interpreter-axis-count.d.ts.map +1 -0
  327. package/dist/diagram/layout/smartart-layout-interpreter-axis-depth.d.ts +73 -0
  328. package/dist/diagram/layout/smartart-layout-interpreter-axis-depth.d.ts.map +1 -0
  329. package/dist/diagram/layout/smartart-layout-interpreter-axis-hop.d.ts +48 -0
  330. package/dist/diagram/layout/smartart-layout-interpreter-axis-hop.d.ts.map +1 -0
  331. package/dist/diagram/layout/smartart-layout-interpreter-axis-range.d.ts +19 -0
  332. package/dist/diagram/layout/smartart-layout-interpreter-axis-range.d.ts.map +1 -0
  333. package/dist/diagram/layout/smartart-layout-interpreter-choose-algorithm.d.ts +60 -0
  334. package/dist/diagram/layout/smartart-layout-interpreter-choose-algorithm.d.ts.map +1 -0
  335. package/dist/diagram/layout/smartart-layout-interpreter-choose-branch.d.ts +36 -0
  336. package/dist/diagram/layout/smartart-layout-interpreter-choose-branch.d.ts.map +1 -0
  337. package/dist/diagram/layout/smartart-layout-interpreter-choose-composite.d.ts +42 -0
  338. package/dist/diagram/layout/smartart-layout-interpreter-choose-composite.d.ts.map +1 -0
  339. package/dist/diagram/layout/smartart-layout-interpreter-choose-depth.d.ts +102 -0
  340. package/dist/diagram/layout/smartart-layout-interpreter-choose-depth.d.ts.map +1 -0
  341. package/dist/diagram/layout/smartart-layout-interpreter-choose-resolve.d.ts +32 -0
  342. package/dist/diagram/layout/smartart-layout-interpreter-choose-resolve.d.ts.map +1 -0
  343. package/dist/diagram/layout/smartart-layout-interpreter-composite-alternative.d.ts +33 -0
  344. package/dist/diagram/layout/smartart-layout-interpreter-composite-alternative.d.ts.map +1 -0
  345. package/dist/diagram/layout/smartart-layout-interpreter-composite-anchor.d.ts +95 -0
  346. package/dist/diagram/layout/smartart-layout-interpreter-composite-anchor.d.ts.map +1 -0
  347. package/dist/diagram/layout/smartart-layout-interpreter-composite-aspect.d.ts +84 -0
  348. package/dist/diagram/layout/smartart-layout-interpreter-composite-aspect.d.ts.map +1 -0
  349. package/dist/diagram/layout/smartart-layout-interpreter-composite-candidates.d.ts +60 -0
  350. package/dist/diagram/layout/smartart-layout-interpreter-composite-candidates.d.ts.map +1 -0
  351. package/dist/diagram/layout/smartart-layout-interpreter-composite-children.d.ts +86 -0
  352. package/dist/diagram/layout/smartart-layout-interpreter-composite-children.d.ts.map +1 -0
  353. package/dist/diagram/layout/smartart-layout-interpreter-composite-choose-groups.d.ts +44 -0
  354. package/dist/diagram/layout/smartart-layout-interpreter-composite-choose-groups.d.ts.map +1 -0
  355. package/dist/diagram/layout/smartart-layout-interpreter-composite-choose.d.ts +109 -0
  356. package/dist/diagram/layout/smartart-layout-interpreter-composite-choose.d.ts.map +1 -0
  357. package/dist/diagram/layout/smartart-layout-interpreter-composite-detect.d.ts +182 -0
  358. package/dist/diagram/layout/smartart-layout-interpreter-composite-detect.d.ts.map +1 -0
  359. package/dist/diagram/layout/smartart-layout-interpreter-composite-fontfit.d.ts +60 -0
  360. package/dist/diagram/layout/smartart-layout-interpreter-composite-fontfit.d.ts.map +1 -0
  361. package/dist/diagram/layout/smartart-layout-interpreter-composite-foreach.d.ts +36 -0
  362. package/dist/diagram/layout/smartart-layout-interpreter-composite-foreach.d.ts.map +1 -0
  363. package/dist/diagram/layout/smartart-layout-interpreter-composite-group-slots.d.ts +92 -0
  364. package/dist/diagram/layout/smartart-layout-interpreter-composite-group-slots.d.ts.map +1 -0
  365. package/dist/diagram/layout/smartart-layout-interpreter-composite-iteration.d.ts +45 -0
  366. package/dist/diagram/layout/smartart-layout-interpreter-composite-iteration.d.ts.map +1 -0
  367. package/dist/diagram/layout/smartart-layout-interpreter-composite-nested-cycle.d.ts +57 -0
  368. package/dist/diagram/layout/smartart-layout-interpreter-composite-nested-cycle.d.ts.map +1 -0
  369. package/dist/diagram/layout/smartart-layout-interpreter-composite-order-fallback.d.ts +24 -0
  370. package/dist/diagram/layout/smartart-layout-interpreter-composite-order-fallback.d.ts.map +1 -0
  371. package/dist/diagram/layout/smartart-layout-interpreter-composite-order.d.ts +41 -0
  372. package/dist/diagram/layout/smartart-layout-interpreter-composite-order.d.ts.map +1 -0
  373. package/dist/diagram/layout/smartart-layout-interpreter-composite-pairs.d.ts +34 -0
  374. package/dist/diagram/layout/smartart-layout-interpreter-composite-pairs.d.ts.map +1 -0
  375. package/dist/diagram/layout/smartart-layout-interpreter-composite-render.d.ts +29 -0
  376. package/dist/diagram/layout/smartart-layout-interpreter-composite-render.d.ts.map +1 -0
  377. package/dist/diagram/layout/smartart-layout-interpreter-composite-ring.d.ts +40 -0
  378. package/dist/diagram/layout/smartart-layout-interpreter-composite-ring.d.ts.map +1 -0
  379. package/dist/diagram/layout/smartart-layout-interpreter-composite-slot-dim.d.ts +22 -0
  380. package/dist/diagram/layout/smartart-layout-interpreter-composite-slot-dim.d.ts.map +1 -0
  381. package/dist/diagram/layout/smartart-layout-interpreter-composite-slots.d.ts +69 -0
  382. package/dist/diagram/layout/smartart-layout-interpreter-composite-slots.d.ts.map +1 -0
  383. package/dist/diagram/layout/smartart-layout-interpreter-composite.d.ts +56 -0
  384. package/dist/diagram/layout/smartart-layout-interpreter-composite.d.ts.map +1 -0
  385. package/dist/diagram/layout/smartart-layout-interpreter-conn-path.d.ts +42 -0
  386. package/dist/diagram/layout/smartart-layout-interpreter-conn-path.d.ts.map +1 -0
  387. package/dist/diagram/layout/smartart-layout-interpreter-connector-order.d.ts +23 -0
  388. package/dist/diagram/layout/smartart-layout-interpreter-connector-order.d.ts.map +1 -0
  389. package/dist/diagram/layout/smartart-layout-interpreter-constraints.d.ts +28 -0
  390. package/dist/diagram/layout/smartart-layout-interpreter-constraints.d.ts.map +1 -0
  391. package/dist/diagram/layout/smartart-layout-interpreter-custom.d.ts +31 -0
  392. package/dist/diagram/layout/smartart-layout-interpreter-custom.d.ts.map +1 -0
  393. package/dist/diagram/layout/smartart-layout-interpreter-cycle-boxes.d.ts +36 -0
  394. package/dist/diagram/layout/smartart-layout-interpreter-cycle-boxes.d.ts.map +1 -0
  395. package/dist/diagram/layout/smartart-layout-interpreter-cycle-connectors.d.ts +21 -0
  396. package/dist/diagram/layout/smartart-layout-interpreter-cycle-connectors.d.ts.map +1 -0
  397. package/dist/diagram/layout/smartart-layout-interpreter-cycle-constraints.d.ts +116 -0
  398. package/dist/diagram/layout/smartart-layout-interpreter-cycle-constraints.d.ts.map +1 -0
  399. package/dist/diagram/layout/smartart-layout-interpreter-cycle-extension.d.ts +110 -0
  400. package/dist/diagram/layout/smartart-layout-interpreter-cycle-extension.d.ts.map +1 -0
  401. package/dist/diagram/layout/smartart-layout-interpreter-cycle-fontfit.d.ts +50 -0
  402. package/dist/diagram/layout/smartart-layout-interpreter-cycle-fontfit.d.ts.map +1 -0
  403. package/dist/diagram/layout/smartart-layout-interpreter-cycle-hub-detect.d.ts +66 -0
  404. package/dist/diagram/layout/smartart-layout-interpreter-cycle-hub-detect.d.ts.map +1 -0
  405. package/dist/diagram/layout/smartart-layout-interpreter-cycle-hub-ratio-usersize.d.ts +81 -0
  406. package/dist/diagram/layout/smartart-layout-interpreter-cycle-hub-ratio-usersize.d.ts.map +1 -0
  407. package/dist/diagram/layout/smartart-layout-interpreter-cycle-hub-ratio.d.ts +109 -0
  408. package/dist/diagram/layout/smartart-layout-interpreter-cycle-hub-ratio.d.ts.map +1 -0
  409. package/dist/diagram/layout/smartart-layout-interpreter-cycle-item-aspect.d.ts +121 -0
  410. package/dist/diagram/layout/smartart-layout-interpreter-cycle-item-aspect.d.ts.map +1 -0
  411. package/dist/diagram/layout/smartart-layout-interpreter-cycle-item-node.d.ts +57 -0
  412. package/dist/diagram/layout/smartart-layout-interpreter-cycle-item-node.d.ts.map +1 -0
  413. package/dist/diagram/layout/smartart-layout-interpreter-cycle-ring-bulge.d.ts +34 -0
  414. package/dist/diagram/layout/smartart-layout-interpreter-cycle-ring-bulge.d.ts.map +1 -0
  415. package/dist/diagram/layout/smartart-layout-interpreter-cycle-ring-item.d.ts +39 -0
  416. package/dist/diagram/layout/smartart-layout-interpreter-cycle-ring-item.d.ts.map +1 -0
  417. package/dist/diagram/layout/smartart-layout-interpreter-cycle-ring-nested-hub.d.ts +22 -0
  418. package/dist/diagram/layout/smartart-layout-interpreter-cycle-ring-nested-hub.d.ts.map +1 -0
  419. package/dist/diagram/layout/smartart-layout-interpreter-cycle-ring-offset.d.ts +43 -0
  420. package/dist/diagram/layout/smartart-layout-interpreter-cycle-ring-offset.d.ts.map +1 -0
  421. package/dist/diagram/layout/smartart-layout-interpreter-cycle-ring.d.ts +76 -0
  422. package/dist/diagram/layout/smartart-layout-interpreter-cycle-ring.d.ts.map +1 -0
  423. package/dist/diagram/layout/smartart-layout-interpreter-cycle-sibtrans.d.ts +40 -0
  424. package/dist/diagram/layout/smartart-layout-interpreter-cycle-sibtrans.d.ts.map +1 -0
  425. package/dist/diagram/layout/smartart-layout-interpreter-cycle.d.ts +69 -0
  426. package/dist/diagram/layout/smartart-layout-interpreter-cycle.d.ts.map +1 -0
  427. package/dist/diagram/layout/smartart-layout-interpreter-dispatch.d.ts +18 -0
  428. package/dist/diagram/layout/smartart-layout-interpreter-dispatch.d.ts.map +1 -0
  429. package/dist/diagram/layout/smartart-layout-interpreter-flow-direction.d.ts +29 -0
  430. package/dist/diagram/layout/smartart-layout-interpreter-flow-direction.d.ts.map +1 -0
  431. package/dist/diagram/layout/smartart-layout-interpreter-flow.d.ts +49 -0
  432. package/dist/diagram/layout/smartart-layout-interpreter-flow.d.ts.map +1 -0
  433. package/dist/diagram/layout/smartart-layout-interpreter-hierarchy-descendant.d.ts +60 -0
  434. package/dist/diagram/layout/smartart-layout-interpreter-hierarchy-descendant.d.ts.map +1 -0
  435. package/dist/diagram/layout/smartart-layout-interpreter-hierarchy-fontfit.d.ts +45 -0
  436. package/dist/diagram/layout/smartart-layout-interpreter-hierarchy-fontfit.d.ts.map +1 -0
  437. package/dist/diagram/layout/smartart-layout-interpreter-hub-detect.d.ts +26 -0
  438. package/dist/diagram/layout/smartart-layout-interpreter-hub-detect.d.ts.map +1 -0
  439. package/dist/diagram/layout/smartart-layout-interpreter-hub.d.ts +62 -0
  440. package/dist/diagram/layout/smartart-layout-interpreter-hub.d.ts.map +1 -0
  441. package/dist/diagram/layout/smartart-layout-interpreter-item-role-compound.d.ts +36 -0
  442. package/dist/diagram/layout/smartart-layout-interpreter-item-role-compound.d.ts.map +1 -0
  443. package/dist/diagram/layout/smartart-layout-interpreter-item-role-orientation.d.ts +80 -0
  444. package/dist/diagram/layout/smartart-layout-interpreter-item-role-orientation.d.ts.map +1 -0
  445. package/dist/diagram/layout/smartart-layout-interpreter-item-role-shared.d.ts +102 -0
  446. package/dist/diagram/layout/smartart-layout-interpreter-item-role-shared.d.ts.map +1 -0
  447. package/dist/diagram/layout/smartart-layout-interpreter-item-role-stack-columns.d.ts +23 -0
  448. package/dist/diagram/layout/smartart-layout-interpreter-item-role-stack-columns.d.ts.map +1 -0
  449. package/dist/diagram/layout/smartart-layout-interpreter-item-role-stack-fields.d.ts +77 -0
  450. package/dist/diagram/layout/smartart-layout-interpreter-item-role-stack-fields.d.ts.map +1 -0
  451. package/dist/diagram/layout/smartart-layout-interpreter-item-role-stack-rect.d.ts +20 -0
  452. package/dist/diagram/layout/smartart-layout-interpreter-item-role-stack-rect.d.ts.map +1 -0
  453. package/dist/diagram/layout/smartart-layout-interpreter-item-role-stack.d.ts +53 -0
  454. package/dist/diagram/layout/smartart-layout-interpreter-item-role-stack.d.ts.map +1 -0
  455. package/dist/diagram/layout/smartart-layout-interpreter-item-role-transition.d.ts +50 -0
  456. package/dist/diagram/layout/smartart-layout-interpreter-item-role-transition.d.ts.map +1 -0
  457. package/dist/diagram/layout/smartart-layout-interpreter-item-roles-recursive.d.ts +87 -0
  458. package/dist/diagram/layout/smartart-layout-interpreter-item-roles-recursive.d.ts.map +1 -0
  459. package/dist/diagram/layout/smartart-layout-interpreter-item-roles-unwrap.d.ts +57 -0
  460. package/dist/diagram/layout/smartart-layout-interpreter-item-roles-unwrap.d.ts.map +1 -0
  461. package/dist/diagram/layout/smartart-layout-interpreter-item-roles.d.ts +109 -0
  462. package/dist/diagram/layout/smartart-layout-interpreter-item-roles.d.ts.map +1 -0
  463. package/dist/diagram/layout/smartart-layout-interpreter-linear-content-size.d.ts +42 -0
  464. package/dist/diagram/layout/smartart-layout-interpreter-linear-content-size.d.ts.map +1 -0
  465. package/dist/diagram/layout/smartart-layout-interpreter-linear-item-aspect.d.ts +94 -0
  466. package/dist/diagram/layout/smartart-layout-interpreter-linear-item-aspect.d.ts.map +1 -0
  467. package/dist/diagram/layout/smartart-layout-interpreter-linear-main-axis.d.ts +17 -0
  468. package/dist/diagram/layout/smartart-layout-interpreter-linear-main-axis.d.ts.map +1 -0
  469. package/dist/diagram/layout/smartart-layout-interpreter-linear-shared.d.ts +21 -0
  470. package/dist/diagram/layout/smartart-layout-interpreter-linear-shared.d.ts.map +1 -0
  471. package/dist/diagram/layout/smartart-layout-interpreter-linear-table.d.ts +76 -0
  472. package/dist/diagram/layout/smartart-layout-interpreter-linear-table.d.ts.map +1 -0
  473. package/dist/diagram/layout/smartart-layout-interpreter-linear.d.ts +20 -0
  474. package/dist/diagram/layout/smartart-layout-interpreter-linear.d.ts.map +1 -0
  475. package/dist/diagram/layout/smartart-layout-interpreter-model.d.ts +77 -0
  476. package/dist/diagram/layout/smartart-layout-interpreter-model.d.ts.map +1 -0
  477. package/dist/diagram/layout/smartart-layout-interpreter-named-rules.d.ts +93 -0
  478. package/dist/diagram/layout/smartart-layout-interpreter-named-rules.d.ts.map +1 -0
  479. package/dist/diagram/layout/smartart-layout-interpreter-position-family.d.ts +58 -0
  480. package/dist/diagram/layout/smartart-layout-interpreter-position-family.d.ts.map +1 -0
  481. package/dist/diagram/layout/smartart-layout-interpreter-preset-node.d.ts +61 -0
  482. package/dist/diagram/layout/smartart-layout-interpreter-preset-node.d.ts.map +1 -0
  483. package/dist/diagram/layout/smartart-layout-interpreter-presof-choose.d.ts +29 -0
  484. package/dist/diagram/layout/smartart-layout-interpreter-presof-choose.d.ts.map +1 -0
  485. package/dist/diagram/layout/smartart-layout-interpreter-pyramid-bands.d.ts +41 -0
  486. package/dist/diagram/layout/smartart-layout-interpreter-pyramid-bands.d.ts.map +1 -0
  487. package/dist/diagram/layout/smartart-layout-interpreter-pyramid.d.ts +100 -0
  488. package/dist/diagram/layout/smartart-layout-interpreter-pyramid.d.ts.map +1 -0
  489. package/dist/diagram/layout/smartart-layout-interpreter-render.d.ts +86 -0
  490. package/dist/diagram/layout/smartart-layout-interpreter-render.d.ts.map +1 -0
  491. package/dist/diagram/layout/smartart-layout-interpreter-snake.d.ts +18 -0
  492. package/dist/diagram/layout/smartart-layout-interpreter-snake.d.ts.map +1 -0
  493. package/dist/diagram/layout/smartart-layout-interpreter-tree-location.d.ts +28 -0
  494. package/dist/diagram/layout/smartart-layout-interpreter-tree-location.d.ts.map +1 -0
  495. package/dist/diagram/layout/smartart-layout-interpreter-when-numeric.d.ts +15 -0
  496. package/dist/diagram/layout/smartart-layout-interpreter-when-numeric.d.ts.map +1 -0
  497. package/dist/diagram/layout/smartart-layout-interpreter-when-var.d.ts +12 -0
  498. package/dist/diagram/layout/smartart-layout-interpreter-when-var.d.ts.map +1 -0
  499. package/dist/diagram/layout/smartart-layout-interpreter-when.d.ts +69 -0
  500. package/dist/diagram/layout/smartart-layout-interpreter-when.d.ts.map +1 -0
  501. package/dist/diagram/layout/smartart-layout-interpreter.d.ts +80 -0
  502. package/dist/diagram/layout/smartart-layout-interpreter.d.ts.map +1 -0
  503. package/dist/diagram/layout/smartart-layout-item-font-role.d.ts +80 -0
  504. package/dist/diagram/layout/smartart-layout-item-font-role.d.ts.map +1 -0
  505. package/dist/diagram/layout/smartart-layout-item-font-size.d.ts +129 -0
  506. package/dist/diagram/layout/smartart-layout-item-font-size.d.ts.map +1 -0
  507. package/dist/diagram/layout/smartart-layout-item-font-tier-fit.d.ts +70 -0
  508. package/dist/diagram/layout/smartart-layout-item-font-tier-fit.d.ts.map +1 -0
  509. package/dist/diagram/layout/smartart-layout-item-font-tier.d.ts +139 -0
  510. package/dist/diagram/layout/smartart-layout-item-font-tier.d.ts.map +1 -0
  511. package/dist/diagram/layout/smartart-layout-item-tx-anchor.d.ts +105 -0
  512. package/dist/diagram/layout/smartart-layout-item-tx-anchor.d.ts.map +1 -0
  513. package/dist/diagram/layout/smartart-layout-shape-polygon.d.ts +17 -0
  514. package/dist/diagram/layout/smartart-layout-shape-polygon.d.ts.map +1 -0
  515. package/dist/diagram/layout/smartart-layout-shape-preset.d.ts +127 -0
  516. package/dist/diagram/layout/smartart-layout-shape-preset.d.ts.map +1 -0
  517. package/dist/diagram/layout/smartart-layout-snake-grid.d.ts +43 -0
  518. package/dist/diagram/layout/smartart-layout-snake-grid.d.ts.map +1 -0
  519. package/dist/diagram/layout/smartart-layout-style-helpers.d.ts +84 -0
  520. package/dist/diagram/layout/smartart-layout-style-helpers.d.ts.map +1 -0
  521. package/dist/diagram/layout/smartart-layout-types.d.ts +253 -0
  522. package/dist/diagram/layout/smartart-layout-types.d.ts.map +1 -0
  523. package/dist/diagram/layout/smartart-line-pitch.d.ts +29 -0
  524. package/dist/diagram/layout/smartart-line-pitch.d.ts.map +1 -0
  525. package/dist/diagram/layout/smartart-node-role-colors.d.ts +30 -0
  526. package/dist/diagram/layout/smartart-node-role-colors.d.ts.map +1 -0
  527. package/dist/diagram/layout/smartart-node-tree-axis.d.ts +91 -0
  528. package/dist/diagram/layout/smartart-node-tree-axis.d.ts.map +1 -0
  529. package/dist/diagram/layout/smartart-text-wrap-fit.d.ts +84 -0
  530. package/dist/diagram/layout/smartart-text-wrap-fit.d.ts.map +1 -0
  531. package/dist/diagram/layout/smartart-tree.d.ts +33 -0
  532. package/dist/diagram/layout/smartart-tree.d.ts.map +1 -0
  533. package/dist/diagram/model/constraint-rules.d.ts +31 -0
  534. package/dist/diagram/model/constraint-rules.d.ts.map +1 -0
  535. package/dist/diagram/model/data.d.ts +109 -0
  536. package/dist/diagram/model/data.d.ts.map +1 -0
  537. package/dist/diagram/model/index.d.ts +7 -0
  538. package/dist/diagram/model/index.d.ts.map +1 -0
  539. package/dist/diagram/model/layout-definition.d.ts +276 -0
  540. package/dist/diagram/model/layout-definition.d.ts.map +1 -0
  541. package/dist/diagram/model/layout-primitives.d.ts +82 -0
  542. package/dist/diagram/model/layout-primitives.d.ts.map +1 -0
  543. package/dist/diagram/model/node.d.ts +194 -0
  544. package/dist/diagram/model/node.d.ts.map +1 -0
  545. package/dist/diagram/model/style-definition.d.ts +131 -0
  546. package/dist/diagram/model/style-definition.d.ts.map +1 -0
  547. package/dist/docx/chart-paint.d.ts +14 -0
  548. package/dist/docx/chart-paint.d.ts.map +1 -0
  549. package/dist/docx/chart.d.ts +43 -0
  550. package/dist/docx/chart.d.ts.map +1 -0
  551. package/dist/docx/drawing.d.ts.map +1 -1
  552. package/dist/docx/embedded.cjs +1393 -326
  553. package/dist/docx/embedded.mjs +1393 -326
  554. package/dist/docx/index.cjs +4044 -683
  555. package/dist/docx/index.d.ts +2 -0
  556. package/dist/docx/index.d.ts.map +1 -1
  557. package/dist/docx/index.mjs +4040 -684
  558. package/dist/docx/inline-model.d.ts +3 -0
  559. package/dist/docx/inline-model.d.ts.map +1 -1
  560. package/dist/docx/layout/adapter.d.ts.map +1 -1
  561. package/dist/docx/layout/index.cjs +2674 -88
  562. package/dist/docx/layout/index.mjs +2675 -89
  563. package/dist/docx/layout/input.d.ts +5 -0
  564. package/dist/docx/layout/input.d.ts.map +1 -1
  565. package/dist/docx/load/index.cjs +1616 -549
  566. package/dist/docx/load/index.mjs +1616 -549
  567. package/dist/docx/parse.d.ts.map +1 -1
  568. package/dist/docx/ui/chart-spec.d.ts +10 -0
  569. package/dist/docx/ui/chart-spec.d.ts.map +1 -0
  570. package/dist/docx/ui/index.cjs +2602 -186
  571. package/dist/docx/ui/index.d.ts +1 -0
  572. package/dist/docx/ui/index.d.ts.map +1 -1
  573. package/dist/docx/ui/index.mjs +2601 -188
  574. package/dist/docx/ui/inline-content-schema.d.ts.map +1 -1
  575. package/dist/docx/ui/run-adapter.d.ts.map +1 -1
  576. package/dist/drawingml/write-line.d.ts +7 -0
  577. package/dist/drawingml/write-line.d.ts.map +1 -0
  578. package/dist/geometry/ooxml-arc.d.ts +31 -0
  579. package/dist/geometry/ooxml-arc.d.ts.map +1 -0
  580. package/dist/geometry/preset-shape-evaluator.d.ts +73 -0
  581. package/dist/geometry/preset-shape-evaluator.d.ts.map +1 -0
  582. package/dist/index.cjs +34839 -18368
  583. package/dist/index.mjs +34835 -18368
  584. package/dist/opc/embedded-packages.d.ts +11 -0
  585. package/dist/opc/embedded-packages.d.ts.map +1 -0
  586. package/dist/opc/index.cjs +365 -70
  587. package/dist/opc/index.d.ts +1 -0
  588. package/dist/opc/index.d.ts.map +1 -1
  589. package/dist/opc/index.mjs +353 -71
  590. package/dist/opc/properties/app.d.ts +9 -3
  591. package/dist/opc/properties/app.d.ts.map +1 -1
  592. package/dist/opc/properties/core.d.ts +5 -1
  593. package/dist/opc/properties/core.d.ts.map +1 -1
  594. package/dist/opc/properties/custom.d.ts +19 -0
  595. package/dist/opc/properties/custom.d.ts.map +1 -1
  596. package/dist/opc/properties/index.d.ts +6 -3
  597. package/dist/opc/properties/index.d.ts.map +1 -1
  598. package/dist/opc/properties/patch.d.ts +38 -0
  599. package/dist/opc/properties/patch.d.ts.map +1 -0
  600. package/dist/opc/properties/title-groups.d.ts +30 -0
  601. package/dist/opc/properties/title-groups.d.ts.map +1 -0
  602. package/dist/opc/properties/types.d.ts +15 -0
  603. package/dist/opc/properties/types.d.ts.map +1 -1
  604. package/dist/pptx/automation/index.cjs +9049 -7167
  605. package/dist/pptx/automation/index.d.ts +4 -4
  606. package/dist/pptx/automation/index.mjs +6 -6
  607. package/dist/pptx/chunks/{index-BYkdcS8J.d.ts → index-EZJZ7USt.d.ts} +907 -962
  608. package/dist/pptx/chunks/index-EZJZ7USt.d.ts.map +1 -0
  609. package/dist/pptx/chunks/{index-BHqL5KXH.d.ts → index-JNv7AJx5.d.ts} +163 -210
  610. package/dist/pptx/chunks/index-JNv7AJx5.d.ts.map +1 -0
  611. package/dist/pptx/chunks/{smart-art-CO2jmJFf.d.ts → smart-art-Q2kZQtHh.d.ts} +436 -374
  612. package/dist/pptx/chunks/smart-art-Q2kZQtHh.d.ts.map +1 -0
  613. package/dist/pptx/chunks/{text-operations-DEJ7alZR.d.ts → text-operations-DtCxXrMh.d.ts} +55 -4
  614. package/dist/pptx/chunks/text-operations-DtCxXrMh.d.ts.map +1 -0
  615. package/dist/pptx/cli/index.cjs +8728 -6846
  616. package/dist/pptx/cli/index.d.ts +1 -1
  617. package/dist/pptx/cli/index.mjs +5 -5
  618. package/dist/pptx/converter/index.cjs +7124 -7136
  619. package/dist/pptx/converter/index.d.ts +1 -1
  620. package/dist/pptx/converter/index.mjs +3 -3
  621. package/dist/pptx/editor/render/table-cell-edit.cjs +7 -3
  622. package/dist/pptx/editor/render/table-cell-edit.d.ts +16 -1
  623. package/dist/pptx/editor/render/table-cell-edit.d.ts.map +1 -1
  624. package/dist/pptx/editor/render/table-cell-edit.mjs +1 -1
  625. package/dist/pptx/editor/render/table-cell-merge.cjs +3 -3
  626. package/dist/pptx/editor/render/table-cell-merge.mjs +1 -1
  627. package/dist/pptx/editor/render/table-data-grid-ops.cjs +7 -7
  628. package/dist/pptx/editor/render/table-data-grid-ops.mjs +2 -2
  629. package/dist/pptx/editor/render/table-layout.cjs +6 -6
  630. package/dist/pptx/editor/render/table-layout.d.ts.map +1 -1
  631. package/dist/pptx/editor/render/table-layout.mjs +1 -1
  632. package/dist/pptx/editor/render/table-merge.cjs +5 -5
  633. package/dist/pptx/editor/render/table-merge.mjs +1 -1
  634. package/dist/pptx/index.cjs +9300 -7249
  635. package/dist/pptx/index.d.ts +5 -5
  636. package/dist/pptx/index.mjs +6 -6
  637. package/dist/pptx/smartart-layouts/index.cjs +135 -106
  638. package/dist/pptx/smartart-layouts/index.d.ts +1 -1
  639. package/dist/pptx/smartart-layouts/index.mjs +1 -1
  640. package/dist/teams/content.d.ts.map +1 -1
  641. package/dist/teams/index.cjs +3931 -2077
  642. package/dist/teams/index.d.ts +1 -0
  643. package/dist/teams/index.d.ts.map +1 -1
  644. package/dist/teams/index.mjs +3930 -2077
  645. package/dist/teams/server-file-storage.d.ts +11 -0
  646. package/dist/teams/server-file-storage.d.ts.map +1 -0
  647. package/dist/teams/store.d.ts +2 -0
  648. package/dist/teams/store.d.ts.map +1 -1
  649. package/dist/teams/stored-file.d.ts.map +1 -1
  650. package/dist/{xlsx/layout/font-family.d.ts → text/css-font-family.d.ts} +1 -1
  651. package/dist/text/css-font-family.d.ts.map +1 -0
  652. package/dist/text/font-metrics/font-advance-widths-aptos-display.generated.d.ts +10 -0
  653. package/dist/text/font-metrics/font-advance-widths-aptos-display.generated.d.ts.map +1 -0
  654. package/dist/text/font-metrics/font-advance-widths-aptos.generated.d.ts +10 -0
  655. package/dist/text/font-metrics/font-advance-widths-aptos.generated.d.ts.map +1 -0
  656. package/dist/text/font-metrics/font-advance-widths-arial.generated.d.ts +10 -0
  657. package/dist/text/font-metrics/font-advance-widths-arial.generated.d.ts.map +1 -0
  658. package/dist/text/font-metrics/font-advance-widths-calibri-light.generated.d.ts +10 -0
  659. package/dist/text/font-metrics/font-advance-widths-calibri-light.generated.d.ts.map +1 -0
  660. package/dist/text/font-metrics/font-advance-widths-calibri.generated.d.ts +10 -0
  661. package/dist/text/font-metrics/font-advance-widths-calibri.generated.d.ts.map +1 -0
  662. package/dist/text/font-metrics/font-advance-widths-segoe-ui.generated.d.ts +10 -0
  663. package/dist/text/font-metrics/font-advance-widths-segoe-ui.generated.d.ts.map +1 -0
  664. package/dist/text/font-metrics/font-advance-widths-times-new-roman.generated.d.ts +10 -0
  665. package/dist/text/font-metrics/font-advance-widths-times-new-roman.generated.d.ts.map +1 -0
  666. package/dist/text/font-metrics/font-advance-widths.generated.d.ts +48 -0
  667. package/dist/text/font-metrics/font-advance-widths.generated.d.ts.map +1 -0
  668. package/dist/text/font-metrics/font-kerning.d.ts +19 -0
  669. package/dist/text/font-metrics/font-kerning.d.ts.map +1 -0
  670. package/dist/visio/index.cjs +645 -119
  671. package/dist/visio/index.mjs +645 -119
  672. package/dist/visio/theme-color.d.ts +13 -3
  673. package/dist/visio/theme-color.d.ts.map +1 -1
  674. package/dist/visio/theme-resolve.d.ts +2 -1
  675. package/dist/visio/theme-resolve.d.ts.map +1 -1
  676. package/dist/visio/theme.d.ts +5 -2
  677. package/dist/visio/theme.d.ts.map +1 -1
  678. package/dist/xlsx/collab/adapter.d.ts +18 -0
  679. package/dist/xlsx/collab/adapter.d.ts.map +1 -0
  680. package/dist/xlsx/collab/apply.d.ts +8 -0
  681. package/dist/xlsx/collab/apply.d.ts.map +1 -0
  682. package/dist/xlsx/collab/bind.d.ts +34 -0
  683. package/dist/xlsx/collab/bind.d.ts.map +1 -0
  684. package/dist/xlsx/collab/codec.d.ts +35 -0
  685. package/dist/xlsx/collab/codec.d.ts.map +1 -0
  686. package/dist/xlsx/collab/dirty.d.ts +23 -0
  687. package/dist/xlsx/collab/dirty.d.ts.map +1 -0
  688. package/dist/xlsx/collab/index.cjs +1245 -0
  689. package/dist/xlsx/collab/index.d.ts +10 -0
  690. package/dist/xlsx/collab/index.d.ts.map +1 -0
  691. package/dist/xlsx/collab/index.mjs +1207 -0
  692. package/dist/xlsx/collab/lines.d.ts +22 -0
  693. package/dist/xlsx/collab/lines.d.ts.map +1 -0
  694. package/dist/xlsx/collab/names.d.ts +16 -0
  695. package/dist/xlsx/collab/names.d.ts.map +1 -0
  696. package/dist/xlsx/collab/presence.d.ts +31 -0
  697. package/dist/xlsx/collab/presence.d.ts.map +1 -0
  698. package/dist/xlsx/collab/schema.d.ts +30 -0
  699. package/dist/xlsx/collab/schema.d.ts.map +1 -0
  700. package/dist/xlsx/collab/sheets.d.ts +34 -0
  701. package/dist/xlsx/collab/sheets.d.ts.map +1 -0
  702. package/dist/xlsx/collab/styles.d.ts +26 -0
  703. package/dist/xlsx/collab/styles.d.ts.map +1 -0
  704. package/dist/xlsx/collab/write.d.ts +14 -0
  705. package/dist/xlsx/collab/write.d.ts.map +1 -0
  706. package/dist/xlsx/edit/chart-colors.d.ts +2 -2
  707. package/dist/xlsx/edit/chart-colors.d.ts.map +1 -1
  708. package/dist/xlsx/edit/chart-element-fill.d.ts +3 -3
  709. package/dist/xlsx/edit/chart-element-fill.d.ts.map +1 -1
  710. package/dist/xlsx/edit/chart-series-fill.d.ts +2 -2
  711. package/dist/xlsx/edit/chart-series-fill.d.ts.map +1 -1
  712. package/dist/xlsx/edit/chart-series-gradient.d.ts +3 -3
  713. package/dist/xlsx/edit/chart-series-gradient.d.ts.map +1 -1
  714. package/dist/xlsx/edit/chart-series-target.d.ts +15 -0
  715. package/dist/xlsx/edit/chart-series-target.d.ts.map +1 -0
  716. package/dist/xlsx/edit/chart-series-transparency.d.ts +2 -2
  717. package/dist/xlsx/edit/chart-series-transparency.d.ts.map +1 -1
  718. package/dist/xlsx/edit/context.d.ts +3 -1
  719. package/dist/xlsx/edit/context.d.ts.map +1 -1
  720. package/dist/xlsx/edit/external.d.ts +28 -0
  721. package/dist/xlsx/edit/external.d.ts.map +1 -0
  722. package/dist/xlsx/edit/history.d.ts +18 -0
  723. package/dist/xlsx/edit/history.d.ts.map +1 -1
  724. package/dist/xlsx/edit/index.d.ts +1 -0
  725. package/dist/xlsx/edit/index.d.ts.map +1 -1
  726. package/dist/xlsx/edit/session-calc.d.ts +32 -3
  727. package/dist/xlsx/edit/session-calc.d.ts.map +1 -1
  728. package/dist/xlsx/edit/session.d.ts.map +1 -1
  729. package/dist/xlsx/edit/sheets.d.ts.map +1 -1
  730. package/dist/xlsx/edit/types.d.ts +37 -4
  731. package/dist/xlsx/edit/types.d.ts.map +1 -1
  732. package/dist/xlsx/formula/engine-core.d.ts.map +1 -1
  733. package/dist/xlsx/formula/engine-host.d.ts +6 -2
  734. package/dist/xlsx/formula/engine-host.d.ts.map +1 -1
  735. package/dist/xlsx/formula/engine-prepare.d.ts +33 -0
  736. package/dist/xlsx/formula/engine-prepare.d.ts.map +1 -0
  737. package/dist/xlsx/formula/engine-structure.d.ts +40 -0
  738. package/dist/xlsx/formula/engine-structure.d.ts.map +1 -0
  739. package/dist/xlsx/formula/engine-types.d.ts +26 -0
  740. package/dist/xlsx/formula/engine-types.d.ts.map +1 -1
  741. package/dist/xlsx/formula/engine.d.ts.map +1 -1
  742. package/dist/xlsx/formula/formula-shape.d.ts +28 -0
  743. package/dist/xlsx/formula/formula-shape.d.ts.map +1 -0
  744. package/dist/xlsx/formula/graph-index.d.ts +3 -1
  745. package/dist/xlsx/formula/graph-index.d.ts.map +1 -1
  746. package/dist/xlsx/formula/graph.d.ts +5 -0
  747. package/dist/xlsx/formula/graph.d.ts.map +1 -1
  748. package/dist/xlsx/formula/lexemes.d.ts +6 -0
  749. package/dist/xlsx/formula/lexemes.d.ts.map +1 -1
  750. package/dist/xlsx/formula/parse-cache.d.ts +9 -0
  751. package/dist/xlsx/formula/parse-cache.d.ts.map +1 -0
  752. package/dist/xlsx/formula/parser.d.ts +3 -0
  753. package/dist/xlsx/formula/parser.d.ts.map +1 -1
  754. package/dist/xlsx/formula/ref-text.d.ts +14 -0
  755. package/dist/xlsx/formula/ref-text.d.ts.map +1 -0
  756. package/dist/xlsx/formula/references.d.ts.map +1 -1
  757. package/dist/xlsx/formula/shift-formula.d.ts +19 -0
  758. package/dist/xlsx/formula/shift-formula.d.ts.map +1 -0
  759. package/dist/xlsx/formula/shift-graph.d.ts +42 -0
  760. package/dist/xlsx/formula/shift-graph.d.ts.map +1 -0
  761. package/dist/xlsx/formula/tokenizer.d.ts.map +1 -1
  762. package/dist/xlsx/formula/transform.d.ts +2 -23
  763. package/dist/xlsx/formula/transform.d.ts.map +1 -1
  764. package/dist/xlsx/index.cjs +5620 -2680
  765. package/dist/xlsx/index.mjs +5609 -2681
  766. package/dist/xlsx/layout/cell-view.d.ts.map +1 -1
  767. package/dist/xlsx/layout/chart-view.d.ts +3 -54
  768. package/dist/xlsx/layout/chart-view.d.ts.map +1 -1
  769. package/dist/xlsx/layout/colors.d.ts +1 -4
  770. package/dist/xlsx/layout/colors.d.ts.map +1 -1
  771. package/dist/xlsx/layout/index.d.ts +8 -5
  772. package/dist/xlsx/layout/index.d.ts.map +1 -1
  773. package/dist/xlsx/layout/remote-selections.d.ts +40 -0
  774. package/dist/xlsx/layout/remote-selections.d.ts.map +1 -0
  775. package/dist/xlsx/layout/sheet-queries.d.ts +7 -0
  776. package/dist/xlsx/layout/sheet-queries.d.ts.map +1 -1
  777. package/dist/xlsx/layout/sparkline-data.d.ts +19 -0
  778. package/dist/xlsx/layout/sparkline-data.d.ts.map +1 -0
  779. package/dist/xlsx/layout/sparkline-view.d.ts +52 -0
  780. package/dist/xlsx/layout/sparkline-view.d.ts.map +1 -0
  781. package/dist/xlsx/layout/tint.d.ts +3 -12
  782. package/dist/xlsx/layout/tint.d.ts.map +1 -1
  783. package/dist/xlsx/layout/types.d.ts +3 -0
  784. package/dist/xlsx/layout/types.d.ts.map +1 -1
  785. package/dist/xlsx/load/index.cjs +3124 -1312
  786. package/dist/xlsx/load/index.mjs +3124 -1312
  787. package/dist/xlsx/model-sparklines.d.ts +52 -0
  788. package/dist/xlsx/model-sparklines.d.ts.map +1 -0
  789. package/dist/xlsx/model.d.ts +10 -47
  790. package/dist/xlsx/model.d.ts.map +1 -1
  791. package/dist/xlsx/read/chart.d.ts +1 -4
  792. package/dist/xlsx/read/chart.d.ts.map +1 -1
  793. package/dist/xlsx/read/index.d.ts +1 -0
  794. package/dist/xlsx/read/index.d.ts.map +1 -1
  795. package/dist/xlsx/read/sheet-data-source.d.ts +10 -0
  796. package/dist/xlsx/read/sheet-data-source.d.ts.map +1 -0
  797. package/dist/xlsx/read/sparklines.d.ts +12 -0
  798. package/dist/xlsx/read/sparklines.d.ts.map +1 -0
  799. package/dist/xlsx/read/worksheet.d.ts.map +1 -1
  800. package/dist/xlsx/ui/commands/i18n/navigation.d.ts.map +1 -1
  801. package/dist/xlsx/ui/context.d.ts +15 -1
  802. package/dist/xlsx/ui/context.d.ts.map +1 -1
  803. package/dist/xlsx/ui/grid/cell-items.d.ts.map +1 -1
  804. package/dist/xlsx/ui/grid/cell-paint.d.ts +1 -1
  805. package/dist/xlsx/ui/grid/cell-paint.d.ts.map +1 -1
  806. package/dist/xlsx/ui/grid/view-cache.d.ts.map +1 -1
  807. package/dist/xlsx/ui/index.cjs +2165 -866
  808. package/dist/xlsx/ui/index.mjs +2165 -867
  809. package/dist/xlsx/ui/locales/de/collab.d.ts +2 -0
  810. package/dist/xlsx/ui/locales/de/collab.d.ts.map +1 -0
  811. package/dist/xlsx/ui/locales/de/index.d.ts.map +1 -1
  812. package/dist/xlsx/ui/locales/en/collab.d.ts +2 -0
  813. package/dist/xlsx/ui/locales/en/collab.d.ts.map +1 -0
  814. package/dist/xlsx/ui/locales/en/index.d.ts.map +1 -1
  815. package/dist/xlsx/ui/locales/es/collab.d.ts +2 -0
  816. package/dist/xlsx/ui/locales/es/collab.d.ts.map +1 -0
  817. package/dist/xlsx/ui/locales/es/index.d.ts.map +1 -1
  818. package/dist/xlsx/ui/locales/fr/collab.d.ts +2 -0
  819. package/dist/xlsx/ui/locales/fr/collab.d.ts.map +1 -0
  820. package/dist/xlsx/ui/locales/fr/index.d.ts.map +1 -1
  821. package/dist/xlsx/ui/locales/zh-CN/collab.d.ts +2 -0
  822. package/dist/xlsx/ui/locales/zh-CN/collab.d.ts.map +1 -0
  823. package/dist/xlsx/ui/locales/zh-CN/index.d.ts.map +1 -1
  824. package/dist/xlsx/ui/ribbon/icon-paths.d.ts.map +1 -1
  825. package/dist/xlsx/write/chart-colors.d.ts +3 -0
  826. package/dist/xlsx/write/chart-colors.d.ts.map +1 -1
  827. package/dist/xlsx/write/chart-space.d.ts +5 -0
  828. package/dist/xlsx/write/chart-space.d.ts.map +1 -0
  829. package/dist/xlsx/write/chart-title.d.ts +4 -1
  830. package/dist/xlsx/write/chart-title.d.ts.map +1 -1
  831. package/dist/xlsx/write/chart.d.ts +4 -1
  832. package/dist/xlsx/write/chart.d.ts.map +1 -1
  833. package/dist/xml/index.cjs +162 -0
  834. package/dist/xml/index.d.ts +1 -0
  835. package/dist/xml/index.d.ts.map +1 -1
  836. package/dist/xml/index.mjs +161 -1
  837. package/dist/xml/lite.d.ts +30 -0
  838. package/dist/xml/lite.d.ts.map +1 -0
  839. package/package.json +6 -1
  840. package/dist/pptx/chunks/index-BHqL5KXH.d.ts.map +0 -1
  841. package/dist/pptx/chunks/index-BYkdcS8J.d.ts.map +0 -1
  842. package/dist/pptx/chunks/smart-art-CO2jmJFf.d.ts.map +0 -1
  843. package/dist/pptx/chunks/text-operations-DEJ7alZR.d.ts.map +0 -1
  844. package/dist/xlsx/layout/chart-appearance.d.ts.map +0 -1
  845. package/dist/xlsx/layout/chart-colors.d.ts +0 -9
  846. package/dist/xlsx/layout/chart-colors.d.ts.map +0 -1
  847. package/dist/xlsx/layout/chart-scale.d.ts.map +0 -1
  848. package/dist/xlsx/layout/chart-spacing.d.ts +0 -6
  849. package/dist/xlsx/layout/chart-spacing.d.ts.map +0 -1
  850. package/dist/xlsx/layout/chart-svg-appearance.d.ts.map +0 -1
  851. package/dist/xlsx/layout/chart-svg-bars.d.ts.map +0 -1
  852. package/dist/xlsx/layout/chart-svg-cartesian.d.ts.map +0 -1
  853. package/dist/xlsx/layout/chart-svg-legend.d.ts.map +0 -1
  854. package/dist/xlsx/layout/chart-svg-radial.d.ts.map +0 -1
  855. package/dist/xlsx/layout/chart-svg-text-metrics.d.ts.map +0 -1
  856. package/dist/xlsx/layout/chart-svg-title-text.d.ts.map +0 -1
  857. package/dist/xlsx/layout/chart-svg-util.d.ts.map +0 -1
  858. package/dist/xlsx/layout/chart-svg.d.ts.map +0 -1
  859. package/dist/xlsx/layout/chart-title-text.d.ts +0 -14
  860. package/dist/xlsx/layout/chart-title-text.d.ts.map +0 -1
  861. package/dist/xlsx/layout/font-family.d.ts.map +0 -1
  862. /package/dist/{xlsx/layout → chart/render}/chart-scale.d.ts +0 -0
  863. /package/dist/{xlsx/layout → chart/render}/chart-svg-bars.d.ts +0 -0
  864. /package/dist/{xlsx/layout → chart/render}/chart-svg-cartesian.d.ts +0 -0
  865. /package/dist/{xlsx/layout → chart/render}/chart-svg-legend.d.ts +0 -0
  866. /package/dist/{xlsx/layout → chart/render}/chart-svg-radial.d.ts +0 -0
  867. /package/dist/{xlsx/layout → chart/render}/chart-svg-text-metrics.d.ts +0 -0
  868. /package/dist/{xlsx/layout → chart/render}/chart-svg-title-text.d.ts +0 -0
  869. /package/dist/{xlsx/layout → chart/render}/chart-svg-util.d.ts +0 -0
  870. /package/dist/{xlsx/layout → chart/render}/chart-svg.d.ts +0 -0
@@ -105,31 +105,31 @@ function quoteSheetName(name) {
105
105
  }
106
106
 
107
107
  // xlsx/address-r1c1.ts
108
- var dimension = (text, base, size) => {
109
- if (!text) return base;
110
- if (text.startsWith("[")) {
111
- const offset2 = Number(text.slice(1, -1));
108
+ var dimension = (text2, base, size) => {
109
+ if (!text2) return base;
110
+ if (text2.startsWith("[")) {
111
+ const offset2 = Number(text2.slice(1, -1));
112
112
  if (Math.abs(offset2) >= size) return void 0;
113
113
  return ((base + offset2) % size + size) % size;
114
114
  }
115
- const at = Number(text) - 1;
115
+ const at = Number(text2) - 1;
116
116
  return at >= 0 && at < size ? at : void 0;
117
117
  };
118
- function corner(text, base) {
119
- const cell = /^R(\[[+-]?\d+\]|\d+)?C(\[[+-]?\d+\]|\d+)?$/i.exec(text);
118
+ function corner(text2, base) {
119
+ const cell = /^R(\[[+-]?\d+\]|\d+)?C(\[[+-]?\d+\]|\d+)?$/i.exec(text2);
120
120
  if (cell) {
121
121
  const row2 = dimension(cell[1], base.row, MAX_ROW + 1);
122
122
  const col = dimension(cell[2], base.col, MAX_COL + 1);
123
123
  if (row2 === void 0 || col === void 0) return void 0;
124
124
  return { kind: "cell", range: { start: { row: row2, col }, end: { row: row2, col } } };
125
125
  }
126
- const rowMatch = /^R(\[[+-]?\d+\]|\d+)?$/i.exec(text);
126
+ const rowMatch = /^R(\[[+-]?\d+\]|\d+)?$/i.exec(text2);
127
127
  if (rowMatch) {
128
128
  const row2 = dimension(rowMatch[1], base.row, MAX_ROW + 1);
129
129
  if (row2 === void 0) return void 0;
130
130
  return { kind: "row", range: { start: { row: row2, col: 0 }, end: { row: row2, col: MAX_COL } } };
131
131
  }
132
- const colMatch = /^C(\[[+-]?\d+\]|\d+)?$/i.exec(text);
132
+ const colMatch = /^C(\[[+-]?\d+\]|\d+)?$/i.exec(text2);
133
133
  if (colMatch) {
134
134
  const col = dimension(colMatch[1], base.col, MAX_COL + 1);
135
135
  if (col === void 0) return void 0;
@@ -137,10 +137,10 @@ function corner(text, base) {
137
137
  }
138
138
  return void 0;
139
139
  }
140
- function parseR1C1Range(text, base) {
140
+ function parseR1C1Range(text2, base) {
141
141
  if (!Number.isInteger(base.row) || !Number.isInteger(base.col) || base.row < 0 || base.row > MAX_ROW || base.col < 0 || base.col > MAX_COL)
142
142
  return void 0;
143
- const parts = text.trim().split(":");
143
+ const parts = text2.trim().split(":");
144
144
  if (parts.length > 2) return void 0;
145
145
  const a = corner(parts[0] ?? "", base);
146
146
  const b = parts.length === 1 ? a : corner(parts[1] ?? "", base);
@@ -325,27 +325,27 @@ function styleAt(workbook, styleId) {
325
325
  }
326
326
  function internStyle(workbook, style2) {
327
327
  const key = styleKey(style2);
328
- const cache2 = styleCache(workbook);
329
- const known = cache2.get(key);
328
+ const cache3 = styleCache(workbook);
329
+ const known = cache3.get(key);
330
330
  if (known !== void 0 && workbook.styles[known] && styleKey(workbook.styles[known]) === key)
331
331
  return known;
332
332
  const index2 = workbook.styles.findIndex((candidate) => styleKey(candidate) === key);
333
333
  if (index2 >= 0) {
334
- cache2.set(key, index2);
334
+ cache3.set(key, index2);
335
335
  return index2;
336
336
  }
337
337
  workbook.styles.push(style2);
338
- cache2.set(key, workbook.styles.length - 1);
338
+ cache3.set(key, workbook.styles.length - 1);
339
339
  return workbook.styles.length - 1;
340
340
  }
341
341
  var caches = /* @__PURE__ */ new WeakMap();
342
342
  function styleCache(workbook) {
343
- let cache2 = caches.get(workbook);
344
- if (!cache2) {
345
- cache2 = /* @__PURE__ */ new Map();
346
- caches.set(workbook, cache2);
343
+ let cache3 = caches.get(workbook);
344
+ if (!cache3) {
345
+ cache3 = /* @__PURE__ */ new Map();
346
+ caches.set(workbook, cache3);
347
347
  }
348
- return cache2;
348
+ return cache3;
349
349
  }
350
350
  function compact(value2) {
351
351
  const out = {};
@@ -671,15 +671,15 @@ function isElapsedOnly(tokens) {
671
671
  }
672
672
  function renderElapsedOnly(serial, tokens) {
673
673
  const seconds = Math.round(Math.abs(serial) * 86400);
674
- let text = "";
674
+ let text2 = "";
675
675
  for (const tok of tokens) {
676
- if (tok.t === "lit") text += tok.v;
676
+ if (tok.t === "lit") text2 += tok.v;
677
677
  else if (tok.t === "elapsed") {
678
678
  const amount = tok.unit === "h" ? Math.floor(seconds / 3600) : tok.unit === "m" ? Math.floor(seconds / 60) : seconds;
679
- text += String(amount).padStart(tok.width, "0");
679
+ text2 += String(amount).padStart(tok.width, "0");
680
680
  }
681
681
  }
682
- return text;
682
+ return text2;
683
683
  }
684
684
  function renderDate(serial, tokens, date1904) {
685
685
  if (!(serial >= 0) || serial >= MAX_DATE_SERIAL + 1) return void 0;
@@ -688,21 +688,21 @@ function renderDate(serial, tokens, date1904) {
688
688
  if (p.year > 9999) return void 0;
689
689
  const twelve = tokens.some((t) => t.t === "ampm");
690
690
  const hour12 = p.hours % 12 === 0 ? 12 : p.hours % 12;
691
- let text = "";
691
+ let text2 = "";
692
692
  for (const tok of tokens) {
693
- if (tok.t === "lit") text += tok.v;
693
+ if (tok.t === "lit") text2 += tok.v;
694
694
  else if (tok.t === "ampm") {
695
695
  const pm = p.hours >= 12;
696
- text += tok.kind === "AM/PM" ? pm ? "PM" : "AM" : tok.kind === "A/P" ? pm ? "P" : "A" : pm ? "p" : "a";
696
+ text2 += tok.kind === "AM/PM" ? pm ? "PM" : "AM" : tok.kind === "A/P" ? pm ? "P" : "A" : pm ? "p" : "a";
697
697
  } else if (tok.t === "subsec") {
698
698
  const digits2 = String(p.subsec).padStart(precision, "0");
699
- text += `.${digits2.slice(0, tok.digits).padEnd(tok.digits, "0")}`;
699
+ text2 += `.${digits2.slice(0, tok.digits).padEnd(tok.digits, "0")}`;
700
700
  } else if (tok.t === "elapsed") {
701
701
  const amount = tok.unit === "h" ? Math.floor(p.totalSeconds / 3600) : tok.unit === "m" ? Math.floor(p.totalSeconds / 60) : p.totalSeconds;
702
- text += String(amount).padStart(tok.width, "0");
703
- } else if (tok.t === "date") text += datePart(tok.part, p, twelve ? hour12 : p.hours);
702
+ text2 += String(amount).padStart(tok.width, "0");
703
+ } else if (tok.t === "date") text2 += datePart(tok.part, p, twelve ? hour12 : p.hours);
704
704
  }
705
- return text;
705
+ return text2;
706
706
  }
707
707
  function datePart(part, p, hour) {
708
708
  switch (part) {
@@ -941,25 +941,25 @@ function renderFraction(value2, plan) {
941
941
  const dropSeparator = hideFraction || hasInt && intText === "" && numHash;
942
942
  const lastInt = plan.tokens.reduce((last, t, i2) => t.r === "int" ? i2 : last, -1);
943
943
  const firstNum = plan.tokens.findIndex((t) => t.r === "num");
944
- let text = "";
944
+ let text2 = "";
945
945
  let intDone = false;
946
946
  plan.tokens.forEach((tok, i2) => {
947
947
  if (tok.r === "lit") {
948
- if (!(dropSeparator && i2 > lastInt && i2 < firstNum)) text += tok.v;
948
+ if (!(dropSeparator && i2 > lastInt && i2 < firstNum)) text2 += tok.v;
949
949
  } else if (tok.r === "int") {
950
- if (!intDone) text += intText;
950
+ if (!intDone) text2 += intText;
951
951
  intDone = true;
952
952
  } else if (hideFraction) ; else if (blank) {
953
- if (tok.r === "num") text += " ";
954
- else if (tok.r === "slash") text += " ";
955
- else text += " ".repeat(plan.fixedDenominator ? plan.denWidth : 1);
953
+ if (tok.r === "num") text2 += " ";
954
+ else if (tok.r === "slash") text2 += " ";
955
+ else text2 += " ".repeat(plan.fixedDenominator ? plan.denWidth : 1);
956
956
  } else if (tok.r === "num") {
957
- if (tok.index === 0) text += padLeft(String(n), plan.numDigits);
958
- } else if (tok.r === "slash") text += "/";
959
- else if (plan.fixedDenominator) text += String(d);
960
- else if (tok.index === 0) text += padRight(String(d), plan.denDigits);
957
+ if (tok.index === 0) text2 += padLeft(String(n), plan.numDigits);
958
+ } else if (tok.r === "slash") text2 += "/";
959
+ else if (plan.fixedDenominator) text2 += String(d);
960
+ else if (tok.index === 0) text2 += padRight(String(d), plan.denDigits);
961
961
  });
962
- return { text, zero };
962
+ return { text: text2, zero };
963
963
  }
964
964
 
965
965
  // xlsx/numfmt/decimal.ts
@@ -1164,18 +1164,18 @@ function renderNumber(value2, plan) {
1164
1164
  } else rounded = roundDecimals(v, plan.fracDigits.length);
1165
1165
  const ints = plan.exponent && isZero(rounded) ? plan.intDigits.map(() => "0") : placeIntegers(integerPart(rounded), plan.intDigits, plan.grouping);
1166
1166
  const fracs = placeFraction(fractionPart(rounded, plan.fracDigits.length), plan.fracDigits);
1167
- let text = "";
1167
+ let text2 = "";
1168
1168
  for (const tok of plan.tokens) {
1169
- if (tok.r === "lit") text += tok.v;
1170
- else if (tok.r === "int") text += ints[tok.index] ?? "";
1171
- else if (tok.r === "frac") text += fracs[tok.index] ?? "";
1172
- else if (tok.r === "point") text += ".";
1169
+ if (tok.r === "lit") text2 += tok.v;
1170
+ else if (tok.r === "int") text2 += ints[tok.index] ?? "";
1171
+ else if (tok.r === "frac") text2 += fracs[tok.index] ?? "";
1172
+ else if (tok.r === "point") text2 += ".";
1173
1173
  else if (plan.exponent) {
1174
1174
  const sign2 = exp2 < 0 ? "-" : plan.exponent.plus ? "+" : "";
1175
- text += `E${sign2}${String(Math.abs(exp2)).padStart(plan.exponent.digits, "0")}`;
1175
+ text2 += `E${sign2}${String(Math.abs(exp2)).padStart(plan.exponent.digits, "0")}`;
1176
1176
  }
1177
1177
  }
1178
- return { text, zero: isZero(rounded) };
1178
+ return { text: text2, zero: isZero(rounded) };
1179
1179
  }
1180
1180
 
1181
1181
  // xlsx/numfmt/tokenizer.ts
@@ -1466,14 +1466,14 @@ function compileFormat(format) {
1466
1466
  const code = format.trim() === "" ? "General" : format;
1467
1467
  const sections = splitSections(code).slice(0, 4).map(compileSection);
1468
1468
  let numeric2;
1469
- let text;
1469
+ let text2;
1470
1470
  const last = sections[sections.length - 1];
1471
1471
  if (sections.length === 4) {
1472
1472
  numeric2 = sections.slice(0, 3);
1473
- text = sections[3];
1473
+ text2 = sections[3];
1474
1474
  } else if (last && last.kind === "text") {
1475
1475
  numeric2 = sections.slice(0, -1);
1476
- text = last;
1476
+ text2 = last;
1477
1477
  } else numeric2 = sections;
1478
1478
  if (numeric2.length === 0) numeric2 = [generalSection()];
1479
1479
  const conditional = numeric2.some((s) => s.condition !== void 0);
@@ -1483,7 +1483,7 @@ function compileFormat(format) {
1483
1483
  conditional,
1484
1484
  isDate: numeric2.some((s) => s.kind === "date")
1485
1485
  };
1486
- if (text) compiled.text = text;
1486
+ if (text2) compiled.text = text2;
1487
1487
  if (cache.size >= CACHE_LIMIT) cache.clear();
1488
1488
  cache.set(format, compiled);
1489
1489
  return compiled;
@@ -1557,16 +1557,16 @@ function generalDigits(v, width) {
1557
1557
  }
1558
1558
  function formatGeneral(value2, width = GENERAL_WIDTH) {
1559
1559
  if (!Number.isFinite(value2)) return "#NUM!";
1560
- const text = generalDigits(
1560
+ const text2 = generalDigits(
1561
1561
  toDigits(value2),
1562
1562
  Math.max(1, Math.min(GENERAL_WIDTH, Math.floor(width)))
1563
1563
  );
1564
- return value2 < 0 && text !== "0" ? `-${text}` : text;
1564
+ return value2 < 0 && text2 !== "0" ? `-${text2}` : text2;
1565
1565
  }
1566
1566
 
1567
1567
  // xlsx/numfmt/format.ts
1568
1568
  var OVERFLOW_TEXT = "########";
1569
- var result = (text, section) => section?.color ? { text, color: section.color } : { text };
1569
+ var result = (text2, section) => section?.color ? { text: text2, color: section.color } : { text: text2 };
1570
1570
  function tokenSource(tok) {
1571
1571
  switch (tok.t) {
1572
1572
  case "lit":
@@ -1599,21 +1599,21 @@ function tokenSource(tok) {
1599
1599
  return "";
1600
1600
  }
1601
1601
  }
1602
- function formatText(text, section) {
1603
- if (!section) return { text };
1602
+ function formatText(text2, section) {
1603
+ if (!section) return { text: text2 };
1604
1604
  let out = "";
1605
- for (const tok of section.tokens) out += tok.t === "text" ? text : tokenSource(tok);
1605
+ for (const tok of section.tokens) out += tok.t === "text" ? text2 : tokenSource(tok);
1606
1606
  return result(out, section);
1607
1607
  }
1608
1608
  function renderAbs(v, section, generalWidth) {
1609
1609
  if (section.fraction) return renderFraction(v, section.fraction);
1610
1610
  if (section.number) return renderNumber(v, section.number);
1611
1611
  const general = formatGeneral(Math.abs(v), generalWidth);
1612
- let text = "";
1612
+ let text2 = "";
1613
1613
  for (const tok of section.tokens) {
1614
- text += tok.t === "general" || tok.t === "text" ? general : tokenSource(tok);
1614
+ text2 += tok.t === "general" || tok.t === "text" ? general : tokenSource(tok);
1615
1615
  }
1616
- return { text, zero: general === "0" };
1616
+ return { text: text2, zero: general === "0" };
1617
1617
  }
1618
1618
  function hashFill(options) {
1619
1619
  const width = options.width ?? 0;
@@ -1623,7 +1623,7 @@ function hashFill(options) {
1623
1623
  function fitNumber(value2, format, options) {
1624
1624
  const date1904 = options.date1904 ?? false;
1625
1625
  const width = options.width ?? 0;
1626
- const fits = (text) => (options.measure ? options.measure(text) : text.length) <= width;
1626
+ const fits = (text2) => (options.measure ? options.measure(text2) : text2.length) <= width;
1627
1627
  const first2 = formatNumber(value2, format, date1904);
1628
1628
  if (fits(first2.text) || first2.text === OVERFLOW_TEXT) return first2;
1629
1629
  const choice = chooseSection(compileFormat(format), value2);
@@ -1646,15 +1646,15 @@ function formatNumber(value2, format, date1904, generalWidth) {
1646
1646
  if (section.kind === "date") {
1647
1647
  const serial = abs2 ? Math.abs(value2) : value2;
1648
1648
  if (isElapsedOnly(section.tokens)) {
1649
- const text3 = renderElapsedOnly(serial, section.tokens);
1650
- return result(serial < 0 ? `-${text3}` : text3, section);
1649
+ const text4 = renderElapsedOnly(serial, section.tokens);
1650
+ return result(serial < 0 ? `-${text4}` : text4, section);
1651
1651
  }
1652
- const text2 = renderDate(serial, section.tokens, date1904);
1653
- return text2 === void 0 ? { text: OVERFLOW_TEXT } : result(text2, section);
1652
+ const text3 = renderDate(serial, section.tokens, date1904);
1653
+ return text3 === void 0 ? { text: OVERFLOW_TEXT } : result(text3, section);
1654
1654
  }
1655
- const { text, zero } = renderAbs(value2, section, generalWidth);
1655
+ const { text: text2, zero } = renderAbs(value2, section, generalWidth);
1656
1656
  const minus = value2 < 0 && !abs2 && !zero;
1657
- return result(minus ? `-${text}` : text, section);
1657
+ return result(minus ? `-${text2}` : text2, section);
1658
1658
  }
1659
1659
  function formatValue(value2, format, options = {}) {
1660
1660
  if (value2 === null) return { text: "" };
@@ -1691,9 +1691,9 @@ function monthFromName(name) {
1691
1691
  );
1692
1692
  return index2 < 0 ? void 0 : index2 + 1;
1693
1693
  }
1694
- function fullYear(text) {
1695
- const y = Number(text);
1696
- if (text.length > 2) return y;
1694
+ function fullYear(text2) {
1695
+ const y = Number(text2);
1696
+ if (text2.length > 2) return y;
1697
1697
  return y < 30 ? 2e3 + y : 1900 + y;
1698
1698
  }
1699
1699
  function serialOf(year, month, day, date1904) {
@@ -1707,8 +1707,8 @@ function serialOf(year, month, day, date1904) {
1707
1707
  return serial < minimum ? void 0 : serial;
1708
1708
  }
1709
1709
  var TIME_RE = /^(\d{1,5}):(\d{1,2})(?::(\d{1,2}))?(?:\.(\d+))?\s*(am|pm|a|p)?$/i;
1710
- function parseTime(text) {
1711
- const m = TIME_RE.exec(text);
1710
+ function parseTime(text2) {
1711
+ const m = TIME_RE.exec(text2);
1712
1712
  if (!m) return void 0;
1713
1713
  const [, a = "0", b = "0", c, frac, ampm] = m;
1714
1714
  let hours = Number(a);
@@ -1735,11 +1735,11 @@ function parseTime(text) {
1735
1735
  return { fraction: (hours * 3600 + minutes * 60 + seconds) / 86400, format };
1736
1736
  }
1737
1737
  var currentYear = () => (/* @__PURE__ */ new Date()).getFullYear();
1738
- function parseDay(text) {
1739
- let m = /^(\d{4})[-/](\d{1,2})[-/](\d{1,2})$/.exec(text);
1738
+ function parseDay(text2) {
1739
+ let m = /^(\d{4})[-/](\d{1,2})[-/](\d{1,2})$/.exec(text2);
1740
1740
  if (m)
1741
1741
  return { year: Number(m[1]), month: Number(m[2]), day: Number(m[3]), format: "yyyy-mm-dd" };
1742
- m = /^(\d{1,2})([-/])(\d{1,2})\2(\d{2}|\d{4})$/.exec(text);
1742
+ m = /^(\d{1,2})([-/])(\d{1,2})\2(\d{2}|\d{4})$/.exec(text2);
1743
1743
  if (m)
1744
1744
  return {
1745
1745
  year: fullYear(m[4] ?? ""),
@@ -1747,9 +1747,9 @@ function parseDay(text) {
1747
1747
  day: Number(m[3]),
1748
1748
  format: "m/d/yyyy"
1749
1749
  };
1750
- m = /^(\d{1,2})\/(\d{1,2})$/.exec(text);
1750
+ m = /^(\d{1,2})\/(\d{1,2})$/.exec(text2);
1751
1751
  if (m) return { year: currentYear(), month: Number(m[1]), day: Number(m[2]), format: "d-mmm" };
1752
- m = /^(\d{1,2})[- ]([a-z]+)\.?(?:[- ,]+(\d{2}|\d{4}))?$/i.exec(text);
1752
+ m = /^(\d{1,2})[- ]([a-z]+)\.?(?:[- ,]+(\d{2}|\d{4}))?$/i.exec(text2);
1753
1753
  if (m) {
1754
1754
  const month = monthFromName(m[2] ?? "");
1755
1755
  if (!month) return void 0;
@@ -1757,12 +1757,12 @@ function parseDay(text) {
1757
1757
  return { year: currentYear(), month, day: Number(m[1]), format: "d-mmm" };
1758
1758
  return { year: fullYear(m[3]), month, day: Number(m[1]), format: "d-mmm-yy" };
1759
1759
  }
1760
- m = /^([a-z]+)\.?[- ](\d{1,2}),?[- ](\d{4})$/i.exec(text);
1760
+ m = /^([a-z]+)\.?[- ](\d{1,2}),?[- ](\d{4})$/i.exec(text2);
1761
1761
  if (m) {
1762
1762
  const month = monthFromName(m[1] ?? "");
1763
1763
  return month ? { year: Number(m[3]), month, day: Number(m[2]), format: "d-mmm-yy" } : void 0;
1764
1764
  }
1765
- m = /^([a-z]{3,})[- ]?(\d{1,2})$/i.exec(text);
1765
+ m = /^([a-z]{3,})[- ]?(\d{1,2})$/i.exec(text2);
1766
1766
  if (m) {
1767
1767
  const month = monthFromName(m[1] ?? "");
1768
1768
  if (!month) return void 0;
@@ -1772,19 +1772,19 @@ function parseDay(text) {
1772
1772
  return { year, month, day: n, format: "d-mmm" };
1773
1773
  return { year: fullYear(m[2] ?? ""), month, day: 1, format: "mmm-yy" };
1774
1774
  }
1775
- m = /^([a-z]+)\.?[- ](\d{4})$/i.exec(text);
1775
+ m = /^([a-z]+)\.?[- ](\d{4})$/i.exec(text2);
1776
1776
  if (m) {
1777
1777
  const month = monthFromName(m[1] ?? "");
1778
1778
  return month ? { year: Number(m[2]), month, day: 1, format: "mmm-yy" } : void 0;
1779
1779
  }
1780
1780
  return void 0;
1781
1781
  }
1782
- function parseDateTimeInput(text, date1904) {
1783
- const time = parseTime(text);
1782
+ function parseDateTimeInput(text2, date1904) {
1783
+ const time = parseTime(text2);
1784
1784
  if (time) return { value: time.fraction, numFmt: time.format };
1785
- const tail = /(?:\s{1,8}|T)(\d{1,2}:\d{1,2}(?::\d{1,2})?(?:\s{0,8}(?:am|pm|a|p))?)$/i.exec(text);
1786
- const split = tail && tail.index > 0 ? [tail[0], text.slice(0, tail.index), tail[1]] : null;
1787
- const dayText = split ? split[1] ?? "" : text;
1785
+ const tail = /(?:\s{1,8}|T)(\d{1,2}:\d{1,2}(?::\d{1,2})?(?:\s{0,8}(?:am|pm|a|p))?)$/i.exec(text2);
1786
+ const split = tail && tail.index > 0 ? [tail[0], text2.slice(0, tail.index), tail[1]] : null;
1787
+ const dayText = split ? split[1] ?? "" : text2;
1788
1788
  const day = parseDay(dayText);
1789
1789
  if (!day) return void 0;
1790
1790
  const serial = serialOf(day.year, day.month, day.day, date1904);
@@ -1803,8 +1803,8 @@ function currencyFormat(symbol2, decimals2) {
1803
1803
  if (symbol2 === "$") return `$${body2}_);[Red]($${body2})`;
1804
1804
  return `${symbol2}${body2}`;
1805
1805
  }
1806
- function parseNumberInput(text) {
1807
- let s = text.trim();
1806
+ function parseNumberInput(text2) {
1807
+ let s = text2.trim();
1808
1808
  let negative = false;
1809
1809
  let parenthesized = false;
1810
1810
  if (s.startsWith("(") && s.endsWith(")")) {
@@ -1861,8 +1861,8 @@ function parseNumberInput(text) {
1861
1861
  if (grouped) return { value: value2, numFmt: decimals2 ? "#,##0.00" : "#,##0" };
1862
1862
  return { value: value2 };
1863
1863
  }
1864
- function parseFractionInput(text) {
1865
- const m = /^([-+]?)(\d+)\s+(\d+)\/(\d+)$/.exec(text.trim());
1864
+ function parseFractionInput(text2) {
1865
+ const m = /^([-+]?)(\d+)\s+(\d+)\/(\d+)$/.exec(text2.trim());
1866
1866
  if (!m) return void 0;
1867
1867
  const den = Number(m[4]);
1868
1868
  const num2 = Number(m[3]);
@@ -1873,27 +1873,27 @@ function parseFractionInput(text) {
1873
1873
  numFmt: den < 10 ? "# ?/?" : "# ??/??"
1874
1874
  };
1875
1875
  }
1876
- function parseCellInput(text, options = {}) {
1877
- if (text === "") return { value: null };
1878
- if (text.startsWith("=") && text.length > 1) return { value: null, formula: text.slice(1) };
1879
- if (text.startsWith("'")) return { value: text.slice(1) };
1880
- const trimmed = text.trim();
1881
- if (trimmed === "") return { value: text };
1876
+ function parseCellInput(text2, options = {}) {
1877
+ if (text2 === "") return { value: null };
1878
+ if (text2.startsWith("=") && text2.length > 1) return { value: null, formula: text2.slice(1) };
1879
+ if (text2.startsWith("'")) return { value: text2.slice(1) };
1880
+ const trimmed = text2.trim();
1881
+ if (trimmed === "") return { value: text2 };
1882
1882
  const upper2 = trimmed.toUpperCase();
1883
- if (trimmed === text) {
1883
+ if (trimmed === text2) {
1884
1884
  if (upper2 === "TRUE" || upper2 === "FALSE") return { value: upper2 === "TRUE" };
1885
1885
  if (isErrorCode(upper2)) return { value: cellError(upper2) };
1886
1886
  }
1887
1887
  const parsed = parseNumberInput(trimmed) ?? parseFractionInput(trimmed) ?? parseDateTimeInput(trimmed, options.date1904 ?? false);
1888
- if (!parsed) return { value: text };
1888
+ if (!parsed) return { value: text2 };
1889
1889
  return parsed.numFmt ? { value: parsed.value, numFmt: parsed.numFmt } : { value: parsed.value };
1890
1890
  }
1891
1891
 
1892
1892
  // xlsx/numfmt/decimals.ts
1893
1893
  function fromGeneral(delta, sample) {
1894
- const text = typeof sample === "number" ? formatGeneral(Math.abs(sample)) : "";
1895
- const sci = /^(\d)(?:\.(\d+))?E/.exec(text);
1896
- const shown = sci ? sci[2]?.length ?? 0 : /\.(\d+)/.exec(text)?.[1]?.length ?? 0;
1894
+ const text2 = typeof sample === "number" ? formatGeneral(Math.abs(sample)) : "";
1895
+ const sci = /^(\d)(?:\.(\d+))?E/.exec(text2);
1896
+ const shown = sci ? sci[2]?.length ?? 0 : /\.(\d+)/.exec(text2)?.[1]?.length ?? 0;
1897
1897
  const next = Math.max(0, shown + delta);
1898
1898
  const body2 = next ? `0.${"0".repeat(next)}` : "0";
1899
1899
  return sci ? `${body2}E+00` : body2;
@@ -1967,15 +1967,15 @@ var SPECIALS = {
1967
1967
  "#totals": "#Totals",
1968
1968
  "#this row": "#This Row"
1969
1969
  };
1970
- var unescape = (text) => text.replace(/'(.)/g, "$1");
1971
- function splitItems(text) {
1970
+ var unescape = (text2) => text2.replace(/'(.)/g, "$1");
1971
+ function splitItems(text2) {
1972
1972
  const items = [];
1973
1973
  let depth = 0;
1974
1974
  let current = "";
1975
- for (let i2 = 0; i2 < text.length; i2++) {
1976
- const ch = text[i2] ?? "";
1975
+ for (let i2 = 0; i2 < text2.length; i2++) {
1976
+ const ch = text2[i2] ?? "";
1977
1977
  if (ch === "'") {
1978
- current += ch + (text[i2 + 1] ?? "");
1978
+ current += ch + (text2[i2 + 1] ?? "");
1979
1979
  i2++;
1980
1980
  continue;
1981
1981
  }
@@ -1992,9 +1992,9 @@ function splitItems(text) {
1992
1992
  return items;
1993
1993
  }
1994
1994
  var strip = (item) => item.startsWith("[") && item.endsWith("]") ? item.slice(1, -1) : item;
1995
- function parseStructured(text, tableName) {
1996
- const open = text.indexOf("[");
1997
- const inner2 = text.slice(open + 1, -1);
1995
+ function parseStructured(text2, tableName) {
1996
+ const open = text2.indexOf("[");
1997
+ const inner2 = text2.slice(open + 1, -1);
1998
1998
  const out = { specials: [] };
1999
1999
  if (tableName) out.table = tableName;
2000
2000
  const addColumns = (spec2) => {
@@ -2019,7 +2019,7 @@ function parseStructured(text, tableName) {
2019
2019
  out.specials.push(special);
2020
2020
  return;
2021
2021
  }
2022
- if (out.column !== void 0) throw new FormulaError(`Invalid structured reference ${text}`);
2022
+ if (out.column !== void 0) throw new FormulaError(`Invalid structured reference ${text2}`);
2023
2023
  addColumns(item);
2024
2024
  };
2025
2025
  if (!inner2.includes("[")) {
@@ -2038,13 +2038,28 @@ function parseStructured(text, tableName) {
2038
2038
 
2039
2039
  // xlsx/formula/lexemes.ts
2040
2040
  var ERRORS_BY_LENGTH = [...ERROR_CODES].sort((a, b) => b.length - a.length);
2041
- var NAME_START = /[A-Za-z_\\\u00A1-\uFFFF]/;
2042
- var NAME_CHAR = /[A-Za-z0-9_.?\\\u00A1-\uFFFF]/;
2043
2041
  var NAME_RE = /^[A-Za-z_\\\u00A1-\uFFFF][A-Za-z0-9_.?\\\u00A1-\uFFFF]*/;
2044
2042
  var CELL_RE = /^(\$?)([A-Za-z]{1,3})(\$?)(\d{1,7})/;
2045
2043
  var COLS_RE = /^(\$?)([A-Za-z]{1,3}):(\$?)([A-Za-z]{1,3})/;
2046
2044
  var ROWS_RE = /^(\$?)(\d{1,7}):(\$?)(\d{1,7})/;
2047
- var NUMBER_RE2 = /^(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/;
2045
+ var NUMBER_RE2 = /^(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?/;
2046
+ var sticky = (re) => new RegExp(re.source.replace(/^\^/, ""), "y");
2047
+ var CELL_AT = sticky(CELL_RE);
2048
+ var COLS_AT = sticky(COLS_RE);
2049
+ var ROWS_AT = sticky(ROWS_RE);
2050
+ var NAME_AT = sticky(NAME_RE);
2051
+ var NUMBER_AT = sticky(NUMBER_RE2);
2052
+ function matchAt(re, source, at) {
2053
+ re.lastIndex = at;
2054
+ return re.exec(source);
2055
+ }
2056
+ var isDigitAt = (source, at) => isDigitCode(source.charCodeAt(at));
2057
+ function rangeStartAt(source, at, accept, max) {
2058
+ let i2 = source[at] === "$" ? at + 1 : at;
2059
+ const from = i2;
2060
+ while (i2 - from <= max && accept(source.charCodeAt(i2))) i2++;
2061
+ return i2 > from && i2 - from <= max && source[i2] === ":";
2062
+ }
2048
2063
  var OPERATORS = [
2049
2064
  "<=",
2050
2065
  ">=",
@@ -2062,7 +2077,12 @@ var OPERATORS = [
2062
2077
  ":",
2063
2078
  "@"
2064
2079
  ];
2065
- var isNameChar = (ch) => ch !== void 0 && NAME_CHAR.test(ch);
2080
+ var isLetterCode = (code) => code >= 65 && code <= 90 || code >= 97 && code <= 122;
2081
+ var isDigitCode = (code) => code >= 48 && code <= 57;
2082
+ var isNameStartCode = (code) => isLetterCode(code) || code === 95 || code === 92 || code >= 161;
2083
+ var isNameCharCode = (code) => isNameStartCode(code) || isDigitCode(code) || code === 46 || code === 63;
2084
+ var isSheetCharCode = (code) => isLetterCode(code) || isDigitCode(code) || code === 95 || code === 46 || code >= 161;
2085
+ var isNameChar = (ch) => ch !== void 0 && ch !== "" && isNameCharCode(ch.charCodeAt(0));
2066
2086
  function matchError(source, at) {
2067
2087
  const upper2 = source.slice(at, at + 14).toUpperCase();
2068
2088
  return ERRORS_BY_LENGTH.find((code) => upper2.startsWith(code));
@@ -2078,14 +2098,13 @@ var boundary = (source, end) => {
2078
2098
  return !isNameChar(next) && next !== "(" && next !== "!" && next !== "[";
2079
2099
  };
2080
2100
  function readReference(source, at) {
2081
- const rest = source.slice(at);
2082
- const cell = CELL_RE.exec(rest);
2101
+ const cell = matchAt(CELL_AT, source, at);
2083
2102
  if (cell) {
2084
2103
  const start = corner2(cell[1] ?? "", cell[2] ?? "", cell[3] ?? "", cell[4] ?? "");
2085
2104
  let length = cell[0].length;
2086
2105
  if (start) {
2087
- if (rest[length] === ":") {
2088
- const second = CELL_RE.exec(rest.slice(length + 1));
2106
+ if (source[at + length] === ":") {
2107
+ const second = matchAt(CELL_AT, source, at + length + 1);
2089
2108
  if (second) {
2090
2109
  const end = corner2(second[1] ?? "", second[2] ?? "", second[3] ?? "", second[4] ?? "");
2091
2110
  const total2 = length + 1 + second[0].length;
@@ -2099,8 +2118,8 @@ function readReference(source, at) {
2099
2118
  }
2100
2119
  length = 0;
2101
2120
  }
2102
- const cols = COLS_RE.exec(rest);
2103
- if (cols && boundary(source, at + cols[0].length) && !/^\d/.test(rest.slice(cols[0].length))) {
2121
+ const cols = rangeStartAt(source, at, isLetterCode, 3) ? matchAt(COLS_AT, source, at) : null;
2122
+ if (cols && boundary(source, at + cols[0].length) && !isDigitAt(source, at + cols[0].length)) {
2104
2123
  const c1 = columnIndex(cols[2] ?? "");
2105
2124
  const c2 = columnIndex(cols[4] ?? "");
2106
2125
  if (c1 >= 0 && c1 <= MAX_COL && c2 >= 0 && c2 <= MAX_COL) {
@@ -2114,7 +2133,7 @@ function readReference(source, at) {
2114
2133
  };
2115
2134
  }
2116
2135
  }
2117
- const rows2 = ROWS_RE.exec(rest);
2136
+ const rows2 = rangeStartAt(source, at, isDigitCode, 7) ? matchAt(ROWS_AT, source, at) : null;
2118
2137
  if (rows2 && boundary(source, at + rows2[0].length) && source[at + rows2[0].length] !== ".") {
2119
2138
  const r1 = Number(rows2[2]) - 1;
2120
2139
  const r2 = Number(rows2[4]) - 1;
@@ -2167,8 +2186,8 @@ function readBrackets(source, at) {
2167
2186
  }
2168
2187
  throw new FormulaError("Unterminated structured reference", at);
2169
2188
  }
2170
- function splitSheets(text) {
2171
- let rest = text;
2189
+ function splitSheets(text2) {
2190
+ let rest = text2;
2172
2191
  let book;
2173
2192
  const bookMatch = /^\[([^\]]*)\]/.exec(rest);
2174
2193
  if (bookMatch) {
@@ -2183,6 +2202,7 @@ function splitSheets(text) {
2183
2202
  if (book !== void 0) out.book = book;
2184
2203
  return out;
2185
2204
  }
2205
+ var PREFIX_AT = /(\[\d+\])?([A-Za-z0-9_.\u00A1-\uFFFF]+)(?::([A-Za-z0-9_.\u00A1-\uFFFF]+))?!/y;
2186
2206
  function readPrefix(source, at) {
2187
2207
  const ch = source[at];
2188
2208
  if (ch === "'") {
@@ -2191,19 +2211,27 @@ function readPrefix(source, at) {
2191
2211
  const length = quoted.length + 1;
2192
2212
  return { prefix: { text: source.slice(at, at + length), ...splitSheets(quoted.name) }, length };
2193
2213
  }
2194
- const m = /^(\[\d+\])?([A-Za-z0-9_.\u00A1-\uFFFF]+)(?::([A-Za-z0-9_.\u00A1-\uFFFF]+))?!/.exec(
2195
- source.slice(at)
2196
- );
2214
+ let i2 = at;
2215
+ if (ch === "[") {
2216
+ i2++;
2217
+ while (isDigitCode(source.charCodeAt(i2))) i2++;
2218
+ if (i2 === at + 1 || source[i2] !== "]") return void 0;
2219
+ i2++;
2220
+ }
2221
+ while (i2 < source.length && isSheetCharCode(source.charCodeAt(i2))) i2++;
2222
+ if (source[i2] !== "!" && source[i2] !== ":") return void 0;
2223
+ const m = matchAt(PREFIX_AT, source, at);
2197
2224
  if (!m) return void 0;
2198
2225
  if (!m[1] && /^\d/.test(m[2] ?? "") && !m[3]) return void 0;
2199
2226
  const raw = m[0].slice(0, -1);
2200
2227
  return { prefix: { text: m[0], ...splitSheets(raw) }, length: m[0].length };
2201
2228
  }
2202
- function numberLiteral(text) {
2203
- const [mantissa = "", exponent] = text.toLowerCase().split("e");
2229
+ function numberLiteral(text2) {
2230
+ if (text2.length <= 15) return Number(text2);
2231
+ const [mantissa = "", exponent] = text2.toLowerCase().split("e");
2204
2232
  const digits2 = mantissa.replace(".", "");
2205
2233
  const firstSignificant = digits2.search(/[1-9]/);
2206
- if (firstSignificant < 0 || digits2.length - firstSignificant <= 15) return Number(text);
2234
+ if (firstSignificant < 0 || digits2.length - firstSignificant <= 15) return Number(text2);
2207
2235
  const point = mantissa.includes(".") ? mantissa.indexOf(".") : mantissa.length;
2208
2236
  const kept = digits2.slice(0, firstSignificant + 15);
2209
2237
  const truncated = kept.length >= point ? `${kept.slice(0, point)}.${kept.slice(point)}` : kept + "0".repeat(point - kept.length);
@@ -2211,6 +2239,17 @@ function numberLiteral(text) {
2211
2239
  }
2212
2240
 
2213
2241
  // xlsx/formula/tokenizer.ts
2242
+ var SINGLE = {
2243
+ "(": "open",
2244
+ ")": "close",
2245
+ ",": "comma",
2246
+ ";": "semicolon",
2247
+ "{": "lbrace",
2248
+ "}": "rbrace"
2249
+ };
2250
+ var BOOK_INDEX = /\[\d+\]/y;
2251
+ var isSpace = (code) => code === 32 || code === 9 || code === 13 || code === 10;
2252
+ var isDigit3 = (code) => code >= 48 && code <= 57;
2214
2253
  function tokenize(formula) {
2215
2254
  const source = formula;
2216
2255
  const tokens = [];
@@ -2222,61 +2261,55 @@ function tokenize(formula) {
2222
2261
  };
2223
2262
  while (i2 < source.length) {
2224
2263
  const ch = source[i2] ?? "";
2264
+ const code = source.charCodeAt(i2);
2225
2265
  const start = i2;
2226
- if (/[ \t\r\n]/.test(ch)) {
2227
- const m = /^[ \t\r\n]+/.exec(source.slice(i2));
2228
- push3({ kind: "ws", text: m?.[0] ?? ch, start });
2266
+ if (isSpace(code)) {
2267
+ let j = i2 + 1;
2268
+ while (j < source.length && isSpace(source.charCodeAt(j))) j++;
2269
+ push3({ kind: "ws", text: source.slice(i2, j), start });
2229
2270
  continue;
2230
2271
  }
2231
2272
  if (ch === '"') {
2232
2273
  let j = i2 + 1;
2233
2274
  let value2 = "";
2234
2275
  for (; ; ) {
2235
- if (j >= source.length) throw new FormulaError("Unterminated string", start);
2236
- if (source[j] === '"') {
2237
- if (source[j + 1] === '"') {
2238
- value2 += '"';
2239
- j += 2;
2240
- continue;
2241
- }
2242
- break;
2276
+ const quote = source.indexOf('"', j);
2277
+ if (quote < 0) throw new FormulaError("Unterminated string", start);
2278
+ value2 += source.slice(j, quote);
2279
+ if (source[quote + 1] === '"') {
2280
+ value2 += '"';
2281
+ j = quote + 2;
2282
+ continue;
2243
2283
  }
2244
- value2 += source[j];
2245
- j++;
2284
+ j = quote;
2285
+ break;
2246
2286
  }
2247
2287
  push3({ kind: "string", text: source.slice(start, j + 1), start, value: value2 });
2248
2288
  continue;
2249
2289
  }
2250
2290
  if (ch === "#") {
2251
- const code = matchError(source, i2);
2252
- if (!code) throw new FormulaError(`Unexpected '#'`, start);
2291
+ const code2 = matchError(source, i2);
2292
+ if (!code2) throw new FormulaError(`Unexpected '#'`, start);
2253
2293
  push3({
2254
- kind: code === "#REF!" ? "ref" : "error",
2255
- text: source.slice(i2, i2 + code.length),
2294
+ kind: code2 === "#REF!" ? "ref" : "error",
2295
+ text: source.slice(i2, i2 + code2.length),
2256
2296
  start,
2257
- value: code
2297
+ value: code2
2258
2298
  });
2259
2299
  continue;
2260
2300
  }
2261
- const single = {
2262
- "(": "open",
2263
- ")": "close",
2264
- ",": "comma",
2265
- ";": "semicolon",
2266
- "{": "lbrace",
2267
- "}": "rbrace"
2268
- };
2269
- const kind = single[ch];
2301
+ const kind = SINGLE[ch];
2270
2302
  if (kind) {
2271
2303
  push3({ kind, text: ch, start });
2272
2304
  continue;
2273
2305
  }
2274
- if (ch === "[" && !/^\[\d+\]/.test(source.slice(i2))) {
2306
+ if (ch === "[" && !matchAt(BOOK_INDEX, source, i2)) {
2275
2307
  const length = readBrackets(source, i2);
2276
2308
  push3({ kind: "structured", text: source.slice(i2, i2 + length), start, value: "" });
2277
2309
  continue;
2278
2310
  }
2279
- const prefixed = ch === "'" || ch === "[" || NAME_START.test(ch) || /\d/.test(ch);
2311
+ const nameStart = isNameStartCode(code);
2312
+ const prefixed = ch === "'" || ch === "[" || nameStart || isDigit3(code);
2280
2313
  if (prefixed) {
2281
2314
  const prefix = readPrefix(source, i2);
2282
2315
  if (prefix) {
@@ -2285,14 +2318,15 @@ function tokenize(formula) {
2285
2318
  }
2286
2319
  if (ch === "'" || ch === "[") throw new FormulaError("Malformed sheet reference", start);
2287
2320
  }
2288
- if (/[\d.]/.test(ch) || ch === "$" || NAME_START.test(ch)) {
2321
+ const numeric2 = isDigit3(code) || ch === ".";
2322
+ if (numeric2 || ch === "$" || nameStart) {
2289
2323
  const ref = readReference(source, i2);
2290
2324
  if (ref) {
2291
2325
  push3(refToken(source, start, i2 + ref.length, ref.ref, void 0));
2292
2326
  continue;
2293
2327
  }
2294
- if (/[\d.]/.test(ch)) {
2295
- const m = NUMBER_RE2.exec(source.slice(i2));
2328
+ if (numeric2) {
2329
+ const m = matchAt(NUMBER_AT, source, i2);
2296
2330
  if (!m) throw new FormulaError(`Unexpected '${ch}'`, start);
2297
2331
  push3({ kind: "number", text: m[0], start, value: numberLiteral(m[0]) });
2298
2332
  continue;
@@ -2329,11 +2363,12 @@ function readAfterPrefix(source, at, start, prefix) {
2329
2363
  }
2330
2364
  const ref = readReference(source, at);
2331
2365
  if (ref) return refToken(source, start, at + ref.length, ref.ref, prefix);
2332
- if (NAME_START.test(source[at] ?? "")) return readName(source, at, start, prefix);
2366
+ if (at < source.length && isNameStartCode(source.charCodeAt(at)))
2367
+ return readName(source, at, start, prefix);
2333
2368
  throw new FormulaError("Invalid reference after sheet name", at);
2334
2369
  }
2335
2370
  function readName(source, at, start, prefix) {
2336
- const m = NAME_RE.exec(source.slice(at));
2371
+ const m = matchAt(NAME_AT, source, at);
2337
2372
  if (!m) throw new FormulaError("Invalid name", at);
2338
2373
  const name = m[0];
2339
2374
  let end = at + name.length;
@@ -2379,7 +2414,9 @@ var PREC_INTERSECT = 9;
2379
2414
  var PREC_RANGE = 10;
2380
2415
  var OPERAND_START = /* @__PURE__ */ new Set(["ref", "name", "func", "open", "structured"]);
2381
2416
  function parseFormula(formula) {
2382
- const all2 = tokenize(formula);
2417
+ return parseTokens(tokenize(formula));
2418
+ }
2419
+ function parseTokens(all2) {
2383
2420
  const tokens = [];
2384
2421
  const wsBefore = [];
2385
2422
  let sawWs = false;
@@ -2664,6 +2701,222 @@ function localDateToSerial(date, date1904 = date1904Mode) {
2664
2701
  return base + (utc - dayStart) / DAY_MS;
2665
2702
  }
2666
2703
 
2704
+ // xlsx/formula/area-index.ts
2705
+ var BUCKET_WIDTH = 64;
2706
+ var CHUNK_SHIFT = 6;
2707
+ var CHUNKS = 64;
2708
+ function push(map, key, value2) {
2709
+ const list = map.get(key);
2710
+ if (list) list.push(value2);
2711
+ else map.set(key, [value2]);
2712
+ }
2713
+ function inner(map, sheet) {
2714
+ let found = map.get(sheet);
2715
+ if (!found) map.set(sheet, found = /* @__PURE__ */ new Map());
2716
+ return found;
2717
+ }
2718
+ var AreaIndex = class {
2719
+ cells = /* @__PURE__ */ new Map();
2720
+ chunked = /* @__PURE__ */ new Map();
2721
+ tall = /* @__PURE__ */ new Map();
2722
+ wide = /* @__PURE__ */ new Map();
2723
+ add(area, node) {
2724
+ const { start, end } = area.range;
2725
+ if (start.row === end.row && end.col - start.col + 1 <= BUCKET_WIDTH) {
2726
+ const cells = inner(this.cells, area.sheet);
2727
+ for (let col = start.col; col <= end.col; col++) push(cells, cellKey(start.row, col), node);
2728
+ return;
2729
+ }
2730
+ const entry = { range: area.range, node };
2731
+ if (end.col - start.col + 1 > BUCKET_WIDTH) {
2732
+ const list = this.wide.get(area.sheet);
2733
+ if (list) list.push(entry);
2734
+ else this.wide.set(area.sheet, [entry]);
2735
+ return;
2736
+ }
2737
+ const first2 = start.row >> CHUNK_SHIFT;
2738
+ const last = end.row >> CHUNK_SHIFT;
2739
+ if (last - first2 + 1 > CHUNKS) {
2740
+ const cols2 = inner(this.tall, area.sheet);
2741
+ for (let c = start.col; c <= end.col; c++) push(cols2, c, entry);
2742
+ return;
2743
+ }
2744
+ const cols = inner(this.chunked, area.sheet);
2745
+ for (let c = start.col; c <= end.col; c++) {
2746
+ let chunks = cols.get(c);
2747
+ if (!chunks) cols.set(c, chunks = /* @__PURE__ */ new Map());
2748
+ for (let k = first2; k <= last; k++) push(chunks, k, entry);
2749
+ }
2750
+ }
2751
+ /** Items whose areas intersect `range` on `sheet` (each once). */
2752
+ dependents(sheet, range2, out) {
2753
+ const found = out instanceof Set ? out : /* @__PURE__ */ new Set();
2754
+ this.collect(sheet, range2, found);
2755
+ if (Array.isArray(out)) for (const node of found) out.push(node);
2756
+ }
2757
+ collect(sheet, range2, out) {
2758
+ const { start, end } = range2;
2759
+ const check3 = (list) => {
2760
+ if (list) {
2761
+ for (const entry of list) if (rangesIntersect(entry.range, range2)) out.add(entry.node);
2762
+ }
2763
+ };
2764
+ const cells = this.cells.get(sheet);
2765
+ if (cells) {
2766
+ const size = (end.row - start.row + 1) * (end.col - start.col + 1);
2767
+ if (size <= 4096) {
2768
+ for (let r = start.row; r <= end.row; r++) {
2769
+ for (let c = start.col; c <= end.col; c++) {
2770
+ const list = cells.get(cellKey(r, c));
2771
+ if (list) for (const node of list) out.add(node);
2772
+ }
2773
+ }
2774
+ } else {
2775
+ for (const [key, list] of cells) {
2776
+ const { row: row2, col } = keyToAddress(key);
2777
+ if (row2 >= start.row && row2 <= end.row && col >= start.col && col <= end.col)
2778
+ for (const node of list) out.add(node);
2779
+ }
2780
+ }
2781
+ }
2782
+ const columns = (map, visit2) => {
2783
+ if (!map) return;
2784
+ if (end.col - start.col + 1 <= map.size) {
2785
+ for (let c = start.col; c <= end.col; c++) if (map.has(c)) visit2(c);
2786
+ } else for (const c of map.keys()) if (c >= start.col && c <= end.col) visit2(c);
2787
+ };
2788
+ const chunked = this.chunked.get(sheet);
2789
+ const first2 = start.row >> CHUNK_SHIFT;
2790
+ const last = end.row >> CHUNK_SHIFT;
2791
+ columns(chunked, (c) => {
2792
+ const chunks = chunked?.get(c);
2793
+ if (last - first2 + 1 <= chunks.size) {
2794
+ for (let k = first2; k <= last; k++) check3(chunks.get(k));
2795
+ } else for (const [k, list] of chunks) if (k >= first2 && k <= last) check3(list);
2796
+ });
2797
+ const tall = this.tall.get(sheet);
2798
+ columns(tall, (c) => check3(tall?.get(c)));
2799
+ check3(this.wide.get(sheet));
2800
+ }
2801
+ };
2802
+
2803
+ // xlsx/formula/graph-index.ts
2804
+ var ColumnIndex = class {
2805
+ sheets = /* @__PURE__ */ new Map();
2806
+ constructor(nodes) {
2807
+ for (const node of nodes) {
2808
+ let cols = this.sheets.get(node.sheet);
2809
+ if (!cols) this.sheets.set(node.sheet, cols = /* @__PURE__ */ new Map());
2810
+ let list = cols.get(node.col);
2811
+ if (!list) cols.set(node.col, list = []);
2812
+ list.push(node);
2813
+ }
2814
+ for (const cols of this.sheets.values())
2815
+ for (const list of cols.values()) list.sort((a, b) => a.row - b.row);
2816
+ }
2817
+ nodesIn(area, out) {
2818
+ const cols = this.sheets.get(area.sheet);
2819
+ if (!cols) return;
2820
+ const { start, end } = area.range;
2821
+ const width = end.col - start.col + 1;
2822
+ const scan2 = (list) => {
2823
+ let lo = 0;
2824
+ let hi = list.length;
2825
+ while (lo < hi) {
2826
+ const mid = lo + hi >> 1;
2827
+ if (list[mid].row < start.row) lo = mid + 1;
2828
+ else hi = mid;
2829
+ }
2830
+ for (let i2 = lo; i2 < list.length; i2++) {
2831
+ const node = list[i2];
2832
+ if (node.row > end.row) break;
2833
+ out.push(node);
2834
+ }
2835
+ };
2836
+ if (width <= cols.size) {
2837
+ for (let c = start.col; c <= end.col; c++) {
2838
+ const list = cols.get(c);
2839
+ if (list) scan2(list);
2840
+ }
2841
+ } else {
2842
+ for (const [c, list] of cols) if (c >= start.col && c <= end.col) scan2(list);
2843
+ }
2844
+ }
2845
+ };
2846
+ var ReverseIndex = class extends AreaIndex {
2847
+ constructor(nodes = []) {
2848
+ super();
2849
+ for (const node of nodes) this.addNode(node);
2850
+ }
2851
+ /** Indexes one more formula's precedents. */
2852
+ addNode(node) {
2853
+ for (const dep of node.deps) this.add(dep, node);
2854
+ for (const dep of node.dynamicDeps) this.add(dep, node);
2855
+ }
2856
+ };
2857
+
2858
+ // xlsx/formula/engine-prepare.ts
2859
+ var CHECK_EVERY = 32;
2860
+ var GraphPreparation = class {
2861
+ constructor(workbook, create) {
2862
+ this.workbook = workbook;
2863
+ this.create = create;
2864
+ }
2865
+ workbook;
2866
+ create;
2867
+ reverse = new ReverseIndex();
2868
+ formulas = { dynamic: [], unvalued: [] };
2869
+ sheet = 0;
2870
+ rows;
2871
+ row = 0;
2872
+ cells;
2873
+ finished = false;
2874
+ /**
2875
+ * Adds formulas to the graph until `timeRemaining` (milliseconds, as an idle deadline reports
2876
+ * them) reaches zero, or until every formula is in. Returns true when the graph is complete.
2877
+ */
2878
+ run(timeRemaining) {
2879
+ let visited = 0;
2880
+ while (!this.finished) {
2881
+ const cells = this.cells ?? this.nextRow();
2882
+ if (!cells) continue;
2883
+ const next = cells.next();
2884
+ if (next.done) {
2885
+ this.cells = void 0;
2886
+ continue;
2887
+ }
2888
+ const [col, cell] = next.value;
2889
+ if (cell.formula) this.add(this.create(this.sheet, this.row, col, cell), cell);
2890
+ if (timeRemaining && ++visited % CHECK_EVERY === 0 && timeRemaining() <= 0) break;
2891
+ }
2892
+ return this.finished;
2893
+ }
2894
+ add(node, cell) {
2895
+ this.reverse.addNode(node);
2896
+ if (!node.legacy && !node.arrayRange) this.formulas.dynamic.push(node);
2897
+ if (cell.value === null && !node.keepCached) this.formulas.unvalued.push(node);
2898
+ }
2899
+ /** Moves to the next stored row (and sheet), or marks the walk finished. */
2900
+ nextRow() {
2901
+ for (; ; ) {
2902
+ const sheet = this.workbook.sheets[this.sheet];
2903
+ if (!sheet) {
2904
+ this.finished = true;
2905
+ return void 0;
2906
+ }
2907
+ this.rows ??= sheet.rows.entries();
2908
+ const next = this.rows.next();
2909
+ if (!next.done) {
2910
+ this.row = next.value[0];
2911
+ this.cells = next.value[1].entries();
2912
+ return this.cells;
2913
+ }
2914
+ this.rows = void 0;
2915
+ this.sheet++;
2916
+ }
2917
+ }
2918
+ };
2919
+
2667
2920
  // xlsx/formula/text-number.ts
2668
2921
  var MONTHS2 = [
2669
2922
  "jan",
@@ -2689,8 +2942,8 @@ function monthFromName2(name) {
2689
2942
  }
2690
2943
  var NUMBER_RE3 = /^(\d+(?:,\d{3,})+|\d*)(\.\d*)?(?:e([+-]?\d+))?$/i;
2691
2944
  var TIME_RE2 = /^(\d{1,4})(?::(\d+))?(?::(\d+(?:\.\d*)?))?(?:\s+(am|pm|a|p))?$/i;
2692
- function parsePlainNumber(text) {
2693
- const match2 = NUMBER_RE3.exec(text);
2945
+ function parsePlainNumber(text2) {
2946
+ const match2 = NUMBER_RE3.exec(text2);
2694
2947
  if (!match2) return void 0;
2695
2948
  const int2 = (match2[1] ?? "").replace(/,/g, "");
2696
2949
  const frac = match2[2] ?? "";
@@ -2698,8 +2951,8 @@ function parsePlainNumber(text) {
2698
2951
  const value2 = Number(`${int2 || "0"}${frac === "." ? "" : frac}${match2[3] ? `e${match2[3]}` : ""}`);
2699
2952
  return Number.isFinite(value2) ? value2 : void 0;
2700
2953
  }
2701
- function parseTime2(text) {
2702
- const match2 = TIME_RE2.exec(text);
2954
+ function parseTime2(text2) {
2955
+ const match2 = TIME_RE2.exec(text2);
2703
2956
  if (!match2) return void 0;
2704
2957
  let hours = Number(match2[1]);
2705
2958
  const minutes = Number(match2[2] ?? 0);
@@ -2722,28 +2975,28 @@ function serialOrUndefined(year, month, day) {
2722
2975
  }
2723
2976
  return ymdToSerial(year, month, day, currentDate1904());
2724
2977
  }
2725
- var fullYear2 = (text) => {
2726
- const year = Number(text);
2727
- if (text.length > 2) return year;
2978
+ var fullYear2 = (text2) => {
2979
+ const year = Number(text2);
2980
+ if (text2.length > 2) return year;
2728
2981
  return year < 30 ? 2e3 + year : 1900 + year;
2729
2982
  };
2730
- function parseDate(text) {
2983
+ function parseDate(text2) {
2731
2984
  const thisYear = (/* @__PURE__ */ new Date()).getFullYear();
2732
- let m = /^(\d{4})[-/](\d{1,2})[-/](\d{1,2})$/.exec(text);
2985
+ let m = /^(\d{4})[-/](\d{1,2})[-/](\d{1,2})$/.exec(text2);
2733
2986
  if (m) return serialOrUndefined(Number(m[1]), Number(m[2]), Number(m[3]));
2734
- m = /^(\d{1,2})\/(\d{1,2})(?:\/(\d{2}|\d{4}))?$/.exec(text);
2987
+ m = /^(\d{1,2})\/(\d{1,2})(?:\/(\d{2}|\d{4}))?$/.exec(text2);
2735
2988
  if (m) return serialOrUndefined(m[3] ? fullYear2(m[3]) : thisYear, Number(m[1]), Number(m[2]));
2736
- m = /^(\d{1,2})[-\s]([a-z]+)\.?(?:[-\s,]+(\d{2}|\d{4}))?$/i.exec(text);
2989
+ m = /^(\d{1,2})[-\s]([a-z]+)\.?(?:[-\s,]+(\d{2}|\d{4}))?$/i.exec(text2);
2737
2990
  if (m) {
2738
2991
  const month = monthFromName2(m[2] ?? "");
2739
2992
  if (month) return serialOrUndefined(m[3] ? fullYear2(m[3]) : thisYear, month, Number(m[1]));
2740
2993
  }
2741
- m = /^([a-z]+)\.?[-\s](\d{1,2})(?:,?\s*(\d{4}))?$/i.exec(text);
2994
+ m = /^([a-z]+)\.?[-\s](\d{1,2})(?:,?\s*(\d{4}))?$/i.exec(text2);
2742
2995
  if (m) {
2743
2996
  const month = monthFromName2(m[1] ?? "");
2744
2997
  if (month) return serialOrUndefined(m[3] ? Number(m[3]) : thisYear, month, Number(m[2]));
2745
2998
  }
2746
- m = /^([a-z]+)\.?[-\s](\d{4})$/i.exec(text);
2999
+ m = /^([a-z]+)\.?[-\s](\d{4})$/i.exec(text2);
2747
3000
  if (m) {
2748
3001
  const month = monthFromName2(m[1] ?? "");
2749
3002
  if (month) return serialOrUndefined(Number(m[2]), month, 1);
@@ -2751,43 +3004,43 @@ function parseDate(text) {
2751
3004
  return void 0;
2752
3005
  }
2753
3006
  function parseNumberText(input) {
2754
- let text = input.trim();
2755
- if (text === "") return void 0;
3007
+ let text2 = input.trim();
3008
+ if (text2 === "") return void 0;
2756
3009
  let scale2 = 1;
2757
- if (text.endsWith("%")) {
3010
+ if (text2.endsWith("%")) {
2758
3011
  scale2 = 0.01;
2759
- text = text.slice(0, -1).trimEnd();
3012
+ text2 = text2.slice(0, -1).trimEnd();
2760
3013
  }
2761
3014
  let sign2 = 1;
2762
- if (text.startsWith("(") && text.endsWith(")")) {
3015
+ if (text2.startsWith("(") && text2.endsWith(")")) {
2763
3016
  sign2 = -1;
2764
- text = text.slice(1, -1).trim();
3017
+ text2 = text2.slice(1, -1).trim();
2765
3018
  }
2766
- const signed = /^([+-]?)\s*\$?\s*([+-]?)\s*/.exec(text);
3019
+ const signed = /^([+-]?)\s*\$?\s*([+-]?)\s*/.exec(text2);
2767
3020
  const signText = `${signed?.[1] ?? ""}${signed?.[2] ?? ""}`;
2768
3021
  if (signText.length <= 1) {
2769
- const body2 = text.slice(signed?.[0].length ?? 0);
3022
+ const body2 = text2.slice(signed?.[0].length ?? 0);
2770
3023
  const plain2 = parsePlainNumber(body2);
2771
3024
  if (plain2 !== void 0) return (signText === "-" ? -1 : 1) * sign2 * plain2 * scale2;
2772
3025
  }
2773
3026
  if (scale2 !== 1 || sign2 !== 1) return void 0;
2774
- const fraction = /^([+-]?)(?:(\d+)\s+)?(\d+)\/(\d+)$/.exec(text);
3027
+ const fraction = /^([+-]?)(?:(\d+)\s+)?(\d+)\/(\d+)$/.exec(text2);
2775
3028
  if (fraction && fraction[2] !== void 0) {
2776
3029
  const den = Number(fraction[4]);
2777
3030
  if (den === 0) return void 0;
2778
3031
  const value2 = Number(fraction[2]) + Number(fraction[3]) / den;
2779
3032
  return fraction[1] === "-" ? -value2 : value2;
2780
3033
  }
2781
- const time = parseTime2(text);
3034
+ const time = parseTime2(text2);
2782
3035
  if (time !== void 0) return time;
2783
- const date = parseDate(text);
3036
+ const date = parseDate(text2);
2784
3037
  if (date !== void 0) return date;
2785
- const space = text.lastIndexOf(" ");
3038
+ const space = text2.lastIndexOf(" ");
2786
3039
  if (space > 0) {
2787
- const datePart2 = parseDate(text.slice(0, space).trim());
2788
- const timePart = parseTime2(text.slice(space + 1).trim());
3040
+ const datePart2 = parseDate(text2.slice(0, space).trim());
3041
+ const timePart = parseTime2(text2.slice(space + 1).trim());
2789
3042
  if (datePart2 !== void 0 && timePart !== void 0) return datePart2 + timePart;
2790
- const amPm = /^(.*\S)\s+(\S+\s*(?:am|pm))$/i.exec(text);
3043
+ const amPm = /^(.*\S)\s+(\S+\s*(?:am|pm))$/i.exec(text2);
2791
3044
  if (amPm) {
2792
3045
  const d = parseDate(amPm[1] ?? "");
2793
3046
  const t = parseTime2(amPm[2] ?? "");
@@ -3111,8 +3364,8 @@ function wildcardRegex(pattern) {
3111
3364
  }
3112
3365
  return new RegExp(`^${source}$`, "i");
3113
3366
  }
3114
- var escapeRegex = (text) => text.replace(/[.*+?^${}()|[\]\\/]/g, "\\$&");
3115
- var hasWildcards = (text) => /[*?~]/.test(text);
3367
+ var escapeRegex = (text2) => text2.replace(/[.*+?^${}()|[\]\\/]/g, "\\$&");
3368
+ var hasWildcards = (text2) => /[*?~]/.test(text2);
3116
3369
  function makeCriteria(criteria) {
3117
3370
  if (isError(criteria)) return (value2) => isError(value2) && value2.error === criteria.error;
3118
3371
  if (typeof criteria === "number") {
@@ -4364,22 +4617,22 @@ var NUMBER = String.raw`(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?`;
4364
4617
  var REAL_ONLY = new RegExp(`^([+-]?${NUMBER})$`);
4365
4618
  var IMAGINARY_ONLY = new RegExp(`^([+-]?(?:${NUMBER})?)([ij])$`);
4366
4619
  var BOTH = new RegExp(`^([+-]?${NUMBER})([+-])((?:${NUMBER})?)([ij])$`);
4367
- var coefficient = (text) => text === "" || text === "+" ? 1 : text === "-" ? -1 : Number(text);
4620
+ var coefficient = (text2) => text2 === "" || text2 === "+" ? 1 : text2 === "-" ? -1 : Number(text2);
4368
4621
  function parseComplex(value2) {
4369
4622
  if (isError(value2)) fail(value2);
4370
4623
  if (typeof value2 === "number") return { re: value2, im: 0, suffix: "i" };
4371
- const text = toText(value2);
4372
- if (text === "") return { re: 0, im: 0, suffix: "i" };
4373
- const real = REAL_ONLY.exec(text);
4624
+ const text2 = toText(value2);
4625
+ if (text2 === "") return { re: 0, im: 0, suffix: "i" };
4626
+ const real = REAL_ONLY.exec(text2);
4374
4627
  if (real) return { re: Number(real[1]), im: 0, suffix: "i" };
4375
- const imaginary = IMAGINARY_ONLY.exec(text);
4628
+ const imaginary = IMAGINARY_ONLY.exec(text2);
4376
4629
  if (imaginary)
4377
4630
  return {
4378
4631
  re: 0,
4379
4632
  im: coefficient(imaginary[1] ?? ""),
4380
4633
  suffix: imaginary[2] === "j" ? "j" : "i"
4381
4634
  };
4382
- const both = BOTH.exec(text);
4635
+ const both = BOTH.exec(text2);
4383
4636
  if (!both) return fail(ERR.NUM);
4384
4637
  const sign2 = both[2] === "-" ? -1 : 1;
4385
4638
  return {
@@ -4389,9 +4642,9 @@ function parseComplex(value2) {
4389
4642
  };
4390
4643
  }
4391
4644
  function digits(n) {
4392
- const text = Number(n.toPrecision(15)).toString();
4393
- const match2 = /^(-?[\d.]+)e([+-])(\d+)$/.exec(text);
4394
- return match2 ? `${match2[1]}E${match2[2]}${(match2[3] ?? "").padStart(2, "0")}` : text;
4645
+ const text2 = Number(n.toPrecision(15)).toString();
4646
+ const match2 = /^(-?[\d.]+)e([+-])(\d+)$/.exec(text2);
4647
+ return match2 ? `${match2[1]}E${match2[2]}${(match2[3] ?? "").padStart(2, "0")}` : text2;
4395
4648
  }
4396
4649
  function formatComplex({ re, im, suffix }) {
4397
4650
  const r = Math.abs(re) < 1e-15 * Math.max(1, Math.abs(im)) ? 0 : re;
@@ -4743,15 +4996,15 @@ var C7 = "Engineering";
4743
4996
  var BASES = { BIN: 2, OCT: 8, DEC: 10, HEX: 16 };
4744
4997
  var BITS = { BIN: 10, OCT: 30, DEC: 0, HEX: 40 };
4745
4998
  function parseBase(value2, base) {
4746
- const text = toText(scalar(value2)).trim().toUpperCase();
4999
+ const text2 = toText(scalar(value2)).trim().toUpperCase();
4747
5000
  if (base === "DEC") return Math.trunc(num(value2));
4748
5001
  const radix = BASES[base];
4749
5002
  const digits2 = radix === 2 ? /^[01]{1,10}$/ : radix === 8 ? /^[0-7]{1,10}$/ : /^[0-9A-F]{1,10}$/;
4750
- if (text === "") return 0;
4751
- if (!digits2.test(text)) fail(ERR.NUM);
4752
- let n = parseInt(text, radix);
5003
+ if (text2 === "") return 0;
5004
+ if (!digits2.test(text2)) fail(ERR.NUM);
5005
+ let n = parseInt(text2, radix);
4753
5006
  const bits = BITS[base];
4754
- if (text.length === 10 && n >= Math.pow(2, bits - 1)) n -= Math.pow(2, bits);
5007
+ if (text2.length === 10 && n >= Math.pow(2, bits - 1)) n -= Math.pow(2, bits);
4755
5008
  return n;
4756
5009
  }
4757
5010
  function formatBase(n, base, places) {
@@ -4760,10 +5013,10 @@ function formatBase(n, base, places) {
4760
5013
  const limit2 = Math.pow(2, bits - 1);
4761
5014
  if (n < -limit2 || n >= limit2) fail(ERR.NUM);
4762
5015
  if (n < 0) return (Math.pow(2, bits) + n).toString(radix).toUpperCase();
4763
- const text = n.toString(radix).toUpperCase();
4764
- if (places === void 0) return text;
4765
- if (places < text.length || places > 10) fail(ERR.NUM);
4766
- return text.padStart(Math.trunc(places), "0");
5016
+ const text2 = n.toString(radix).toUpperCase();
5017
+ if (places === void 0) return text2;
5018
+ if (places < text2.length || places > 10) fail(ERR.NUM);
5019
+ return text2.padStart(Math.trunc(places), "0");
4767
5020
  }
4768
5021
  var conversions = [];
4769
5022
  for (const from of Object.keys(BASES)) {
@@ -4898,9 +5151,9 @@ var ENGINEERING_FUNCTIONS = [
4898
5151
  1,
4899
5152
  1,
4900
5153
  (args) => {
4901
- const text = str(args[0]).trim().toUpperCase();
4902
- const negative = text.startsWith("-");
4903
- const body2 = negative ? text.slice(1) : text;
5154
+ const text2 = str(args[0]).trim().toUpperCase();
5155
+ const negative = text2.startsWith("-");
5156
+ const body2 = negative ? text2.slice(1) : text2;
4904
5157
  if (!/^[MDCLXVI]*$/.test(body2)) fail(ERR.VALUE);
4905
5158
  const value2 = { M: 1e3, D: 500, C: 100, L: 50, X: 10, V: 5, I: 1 };
4906
5159
  let total2 = 0;
@@ -4934,11 +5187,11 @@ var ENGINEERING_FUNCTIONS = [
4934
5187
  2,
4935
5188
  2,
4936
5189
  (args) => {
4937
- const text = str(args[0]).trim().toLowerCase();
5190
+ const text2 = str(args[0]).trim().toLowerCase();
4938
5191
  const radix = Math.trunc(num(args[1]));
4939
5192
  if (radix < 2 || radix > 36) fail(ERR.NUM);
4940
5193
  let total2 = 0;
4941
- for (const ch of text) {
5194
+ for (const ch of text2) {
4942
5195
  const d = parseInt(ch, 36);
4943
5196
  if (Number.isNaN(d) || d >= radix) fail(ERR.NUM);
4944
5197
  total2 = total2 * radix + d;
@@ -4975,14 +5228,14 @@ function couponFacts(settlement, maturity, frequency2, basis, ctx) {
4975
5228
  const daysToNext = basis === 0 ? daysInPeriod - daysSincePrevious : basis === 4 ? days360(s, next, true, ctx) : next - s;
4976
5229
  return { previous, next, count: count2, daysSincePrevious, daysInPeriod, daysToNext };
4977
5230
  }
4978
- var security = (name, description, pick2) => spec(
5231
+ var security = (name, description, pick3) => spec(
4979
5232
  name,
4980
5233
  C8,
4981
5234
  `${name}(settlement, maturity, frequency, [basis])`,
4982
5235
  description,
4983
5236
  3,
4984
5237
  4,
4985
- (args, ctx) => pick2(
5238
+ (args, ctx) => pick3(
4986
5239
  couponFacts(
4987
5240
  serialArg(args[0]),
4988
5241
  serialArg(args[1]),
@@ -5798,8 +6051,10 @@ var FINANCIAL_FUNCTIONS = [
5798
6051
 
5799
6052
  // xlsx/formula/references.ts
5800
6053
  function sheetIndex(host, name) {
6054
+ const sheets = host.workbook.sheets;
6055
+ for (let i2 = 0; i2 < sheets.length; i2++) if (sheets[i2]?.name === name) return i2;
5801
6056
  const lower2 = name.toLowerCase();
5802
- return host.workbook.sheets.findIndex((sheet) => sheet.name.toLowerCase() === lower2);
6057
+ return sheets.findIndex((sheet) => sheet.name.toLowerCase() === lower2);
5803
6058
  }
5804
6059
  function prefixSheets(host, prefix, current) {
5805
6060
  if (!prefix) return [current];
@@ -6859,15 +7114,15 @@ function offset(args) {
6859
7114
  { sheet: area.sheet, range: { start: { row: r1, col: c1 }, end: { row: r2, col: c2 } } }
6860
7115
  ]);
6861
7116
  }
6862
- function parseR1C1(text, ctx) {
6863
- const bang = text.lastIndexOf("!");
7117
+ function parseR1C1(text2, ctx) {
7118
+ const bang = text2.lastIndexOf("!");
6864
7119
  let sheet = ctx.sheet;
6865
- let body2 = text;
7120
+ let body2 = text2;
6866
7121
  if (bang >= 0) {
6867
- const name = text.slice(0, bang).replace(/^'(.*)'$/, "$1").replace(/''/g, "'");
7122
+ const name = text2.slice(0, bang).replace(/^'(.*)'$/, "$1").replace(/''/g, "'");
6868
7123
  sheet = sheetIndex(ctx.frame.host, name);
6869
7124
  if (sheet < 0) return void 0;
6870
- body2 = text.slice(bang + 1);
7125
+ body2 = text2.slice(bang + 1);
6871
7126
  }
6872
7127
  const range2 = parseR1C1Range(body2, { row: ctx.row, col: ctx.col });
6873
7128
  if (!range2) return void 0;
@@ -6930,9 +7185,9 @@ var REFERENCE_FUNCTIONS = [
6930
7185
  1,
6931
7186
  2,
6932
7187
  (args, ctx) => {
6933
- const text = str(args[0]).trim();
7188
+ const text2 = str(args[0]).trim();
6934
7189
  const a1 = args.length > 1 ? bool(args[1]) : true;
6935
- const ref = a1 ? ctx.parseReference(text) : parseR1C1(text, ctx);
7190
+ const ref = a1 ? ctx.parseReference(text2) : parseR1C1(text2, ctx);
6936
7191
  return ref ?? ERR.REF;
6937
7192
  },
6938
7193
  void 0,
@@ -7303,13 +7558,13 @@ var numberKey = (n) => `n${round15(n)}`;
7303
7558
  function equalityKey(criteria) {
7304
7559
  if (typeof criteria === "number") return numberKey(criteria);
7305
7560
  if (typeof criteria !== "string") return void 0;
7306
- const text = criteria.startsWith("=") ? criteria.slice(1) : criteria;
7307
- if (/^(<|>)/.test(text) || text === "" || hasWildcards(text) || text.startsWith("#"))
7561
+ const text2 = criteria.startsWith("=") ? criteria.slice(1) : criteria;
7562
+ if (/^(<|>)/.test(text2) || text2 === "" || hasWildcards(text2) || text2.startsWith("#"))
7308
7563
  return void 0;
7309
- const upper2 = text.toUpperCase();
7564
+ const upper2 = text2.toUpperCase();
7310
7565
  if (upper2 === "TRUE" || upper2 === "FALSE") return void 0;
7311
- const n = parseNumberText(text);
7312
- return n !== void 0 ? numberKey(n) : `s${text.toLowerCase()}`;
7566
+ const n = parseNumberText(text2);
7567
+ return n !== void 0 ? numberKey(n) : `s${text2.toLowerCase()}`;
7313
7568
  }
7314
7569
  function valueKeys(value2, out) {
7315
7570
  out.length = 0;
@@ -7369,9 +7624,9 @@ function readBlock(ctx, area, rows2, cols) {
7369
7624
  if (host.readBlock) return host.readBlock(area.sheet, range2);
7370
7625
  return Matrix.build(rows2, cols, (r, c) => ctx.readCell(area.sheet, row2 + r, col + c));
7371
7626
  }
7372
- function shapedMatrices(ctx, values2, sameShape) {
7627
+ function shapedMatrices(ctx, values2, sameShape2) {
7373
7628
  let { rows: rows2, cols } = shapeOf(values2[0] ?? null);
7374
- if (sameShape) {
7629
+ if (sameShape2) {
7375
7630
  for (const value2 of values2) {
7376
7631
  const shape2 = shapeOf(value2);
7377
7632
  if (shape2.rows !== rows2 || shape2.cols !== cols) fail(ERR.VALUE);
@@ -7397,12 +7652,12 @@ function shapedMatrices(ctx, values2, sameShape) {
7397
7652
  });
7398
7653
  return { matrices, total: total2, block: rows2 * cols };
7399
7654
  }
7400
- function matchingCells(ctx, pairs, target2, sameShape) {
7655
+ function matchingCells(ctx, pairs, target2, sameShape2) {
7401
7656
  const ranges = pairs.map((p) => p.range);
7402
7657
  const { matrices, total: total2, block } = shapedMatrices(
7403
7658
  ctx,
7404
7659
  target2 === void 0 ? ranges : [...ranges, target2],
7405
- sameShape
7660
+ sameShape2
7406
7661
  );
7407
7662
  const tests = pairs.map((p) => makeCriteria(scalar(p.criteria)));
7408
7663
  const values2 = matrices[matrices.length - 1];
@@ -7441,7 +7696,7 @@ function indexedCandidates(pairs, matrices) {
7441
7696
  }
7442
7697
  return void 0;
7443
7698
  }
7444
- var matchingValues = (ctx, pairs, target2, sameShape) => matchingCells(ctx, pairs, target2, sameShape).values;
7699
+ var matchingValues = (ctx, pairs, target2, sameShape2) => matchingCells(ctx, pairs, target2, sameShape2).values;
7445
7700
  function criteriaPairs(args, from) {
7446
7701
  if ((args.length - from) % 2 !== 0) fail(ERR.VALUE);
7447
7702
  const pairs = [];
@@ -10415,12 +10670,12 @@ function fixed(value2, decimals2, commas) {
10415
10670
  const d = Math.trunc(decimals2);
10416
10671
  const rounded = roundTo(value2, d, "half");
10417
10672
  const abs2 = Math.abs(rounded);
10418
- let text = abs2.toFixed(Math.max(0, Math.min(d, 99)));
10673
+ let text2 = abs2.toFixed(Math.max(0, Math.min(d, 99)));
10419
10674
  if (commas) {
10420
- const [int2 = "", frac] = text.split(".");
10421
- text = int2.replace(/\B(?=(\d{3})+(?!\d))/g, ",") + (frac !== void 0 ? `.${frac}` : "");
10675
+ const [int2 = "", frac] = text2.split(".");
10676
+ text2 = int2.replace(/\B(?=(\d{3})+(?!\d))/g, ",") + (frac !== void 0 ? `.${frac}` : "");
10422
10677
  }
10423
- return rounded < 0 ? `-${text}` : text;
10678
+ return rounded < 0 ? `-${text2}` : text2;
10424
10679
  }
10425
10680
  var TEXT_CONVERT = [
10426
10681
  spec(
@@ -10456,19 +10711,19 @@ var TEXT_CONVERT = [
10456
10711
  (args) => {
10457
10712
  const decimal = (args.length > 1 ? str(args[1]) : ".").charAt(0) || ".";
10458
10713
  const group = (args.length > 2 ? str(args[2]) : ",").charAt(0) || ",";
10459
- let text = str(args[0]).replace(/\s+/g, "");
10460
- if (text === "") return 0;
10714
+ let text2 = str(args[0]).replace(/\s+/g, "");
10715
+ if (text2 === "") return 0;
10461
10716
  let percent = 0;
10462
- while (text.endsWith("%")) {
10717
+ while (text2.endsWith("%")) {
10463
10718
  percent++;
10464
- text = text.slice(0, -1);
10719
+ text2 = text2.slice(0, -1);
10465
10720
  }
10466
- const decimalAt = text.indexOf(decimal);
10467
- if (decimalAt >= 0 && text.slice(decimalAt + 1).includes(group)) fail(ERR.VALUE);
10468
- text = text.split(group).join("");
10469
- if (decimal !== ".") text = text.replace(decimal, ".");
10470
- const value2 = Number(text);
10471
- if (!/^[+-]?(\d+\.?\d*|\.\d+)(e[+-]?\d+)?$/i.test(text) || !Number.isFinite(value2))
10721
+ const decimalAt = text2.indexOf(decimal);
10722
+ if (decimalAt >= 0 && text2.slice(decimalAt + 1).includes(group)) fail(ERR.VALUE);
10723
+ text2 = text2.split(group).join("");
10724
+ if (decimal !== ".") text2 = text2.replace(decimal, ".");
10725
+ const value2 = Number(text2);
10726
+ if (!/^[+-]?(\d+\.?\d*|\.\d+)(e[+-]?\d+)?$/i.test(text2) || !Number.isFinite(value2))
10472
10727
  fail(ERR.VALUE);
10473
10728
  return value2 / Math.pow(100, percent);
10474
10729
  }
@@ -10491,8 +10746,8 @@ var TEXT_CONVERT = [
10491
10746
  2,
10492
10747
  (args) => {
10493
10748
  const value2 = num(args[0]);
10494
- const text = fixed(Math.abs(value2), optNum(args, 1, 2), true);
10495
- return value2 < 0 && text.replace(/[0.,]/g, "") !== "" ? `($${text})` : `$${text}`;
10749
+ const text2 = fixed(Math.abs(value2), optNum(args, 1, 2), true);
10750
+ return value2 < 0 && text2.replace(/[0.,]/g, "") !== "" ? `($${text2})` : `$${text2}`;
10496
10751
  }
10497
10752
  ),
10498
10753
  spec("CHAR", C33, "CHAR(number)", "The character for a code (Windows-1252).", 1, 1, (args) => {
@@ -10501,9 +10756,9 @@ var TEXT_CONVERT = [
10501
10756
  return String.fromCharCode(CP1252[n] ?? n);
10502
10757
  }),
10503
10758
  spec("CODE", C33, "CODE(text)", "The code of the first character (Windows-1252).", 1, 1, (args) => {
10504
- const text = str(args[0]);
10505
- if (text === "") fail(ERR.VALUE);
10506
- const code = text.charCodeAt(0);
10759
+ const text2 = str(args[0]);
10760
+ if (text2 === "") fail(ERR.VALUE);
10761
+ const code = text2.charCodeAt(0);
10507
10762
  return CP1252_REVERSE.get(code) ?? (code <= 255 ? code : 63);
10508
10763
  }),
10509
10764
  spec("UNICHAR", C33, "UNICHAR(number)", "The Unicode character for a code point.", 1, 1, (args) => {
@@ -10512,9 +10767,9 @@ var TEXT_CONVERT = [
10512
10767
  return String.fromCodePoint(n);
10513
10768
  }),
10514
10769
  spec("UNICODE", C33, "UNICODE(text)", "The code point of the first character.", 1, 1, (args) => {
10515
- const text = str(args[0]);
10516
- if (text === "") fail(ERR.VALUE);
10517
- return text.codePointAt(0) ?? fail(ERR.VALUE);
10770
+ const text2 = str(args[0]);
10771
+ if (text2 === "") fail(ERR.VALUE);
10772
+ return text2.codePointAt(0) ?? fail(ERR.VALUE);
10518
10773
  }),
10519
10774
  spec("T", C33, "T(value)", "The text of a value, or empty text.", 1, 1, (args) => {
10520
10775
  const v = scalar(args[0]);
@@ -10538,37 +10793,37 @@ function lowerChar(ch, before, after) {
10538
10793
  const points = [...low];
10539
10794
  return points.length === 1 ? low : points[0] ?? ch;
10540
10795
  }
10541
- function mapChars(text, fn) {
10542
- const chars = [...text];
10796
+ function mapChars(text2, fn) {
10797
+ const chars = [...text2];
10543
10798
  let out = "";
10544
10799
  for (let i2 = 0; i2 < chars.length; i2++) out += fn(chars[i2], i2, chars);
10545
10800
  return out;
10546
10801
  }
10547
- var upper = (text) => mapChars(text, upperChar);
10548
- var lower = (text) => mapChars(text, (ch, i2, all2) => lowerChar(ch, all2[i2 - 1], all2[i2 + 1]));
10549
- var proper = (text) => mapChars(text, (ch, i2, all2) => {
10802
+ var upper = (text2) => mapChars(text2, upperChar);
10803
+ var lower = (text2) => mapChars(text2, (ch, i2, all2) => lowerChar(ch, all2[i2 - 1], all2[i2 + 1]));
10804
+ var proper = (text2) => mapChars(text2, (ch, i2, all2) => {
10550
10805
  if (!isLetter(ch)) return ch;
10551
10806
  const before = all2[i2 - 1];
10552
10807
  return before !== void 0 && isLetter(before) ? lowerChar(ch, before, all2[i2 + 1]) : upperChar(ch);
10553
10808
  });
10554
10809
  var isHigh = (code) => code >= 55296 && code <= 56319;
10555
10810
  var isLow = (code) => code >= 56320 && code <= 57343;
10556
- function left(text, n) {
10557
- let end = Math.min(n, text.length);
10558
- if (end > 0 && end < text.length && isHigh(text.charCodeAt(end - 1))) end++;
10559
- return text.slice(0, end);
10811
+ function left(text2, n) {
10812
+ let end = Math.min(n, text2.length);
10813
+ if (end > 0 && end < text2.length && isHigh(text2.charCodeAt(end - 1))) end++;
10814
+ return text2.slice(0, end);
10560
10815
  }
10561
- function right(text, n) {
10816
+ function right(text2, n) {
10562
10817
  if (n <= 0) return "";
10563
- let start = Math.max(0, text.length - n);
10564
- if (start > 0 && isLow(text.charCodeAt(start))) start--;
10565
- return text.slice(start);
10818
+ let start = Math.max(0, text2.length - n);
10819
+ if (start > 0 && isLow(text2.charCodeAt(start))) start--;
10820
+ return text2.slice(start);
10566
10821
  }
10567
10822
 
10568
10823
  // xlsx/formula/functions/text.ts
10569
10824
  var C34 = "Text";
10570
10825
  var MAX_TEXT = 32767;
10571
- var limit = (text) => text.length > MAX_TEXT ? fail(ERR.VALUE) : text;
10826
+ var limit = (text2) => text2.length > MAX_TEXT ? fail(ERR.VALUE) : text2;
10572
10827
  function find(args, insensitive) {
10573
10828
  const needle = str(args[0]);
10574
10829
  const haystack = str(args[1]);
@@ -10733,19 +10988,19 @@ var TEXT_FUNCTIONS = [
10733
10988
  3,
10734
10989
  4,
10735
10990
  (args) => {
10736
- const text = str(args[0]);
10991
+ const text2 = str(args[0]);
10737
10992
  const oldText = str(args[1]);
10738
10993
  const newText = str(args[2]);
10739
- if (oldText === "") return text;
10740
- if (args.length < 4) return limit(text.split(oldText).join(newText));
10994
+ if (oldText === "") return text2;
10995
+ if (args.length < 4) return limit(text2.split(oldText).join(newText));
10741
10996
  const instance = Math.trunc(num(args[3]));
10742
10997
  if (instance < 1) fail(ERR.VALUE);
10743
10998
  let at = -1;
10744
10999
  for (let i2 = 0; i2 < instance; i2++) {
10745
- at = text.indexOf(oldText, at + 1);
10746
- if (at < 0) return text;
11000
+ at = text2.indexOf(oldText, at + 1);
11001
+ if (at < 0) return text2;
10747
11002
  }
10748
- return limit(text.slice(0, at) + newText + text.slice(at + oldText.length));
11003
+ return limit(text2.slice(0, at) + newText + text2.slice(at + oldText.length));
10749
11004
  }
10750
11005
  ),
10751
11006
  ...["REPLACE", "REPLACEB"].map(
@@ -10757,11 +11012,11 @@ var TEXT_FUNCTIONS = [
10757
11012
  4,
10758
11013
  4,
10759
11014
  (args) => {
10760
- const text = str(args[0]);
11015
+ const text2 = str(args[0]);
10761
11016
  const start = Math.trunc(num(args[1]));
10762
11017
  const n = Math.trunc(num(args[2]));
10763
11018
  if (start < 1 || n < 0) fail(ERR.VALUE);
10764
- return limit(text.slice(0, start - 1) + str(args[3]) + text.slice(start - 1 + n));
11019
+ return limit(text2.slice(0, start - 1) + str(args[3]) + text2.slice(start - 1 + n));
10765
11020
  }
10766
11021
  )
10767
11022
  ),
@@ -10789,9 +11044,9 @@ var TEXT_FUNCTIONS = [
10789
11044
  ),
10790
11045
  spec("REPT", C34, "REPT(text, number_times)", "Repeats a text.", 2, 2, (args) => {
10791
11046
  const n = Math.trunc(num(args[1]));
10792
- const text = str(args[0]);
10793
- if (n < 0 || text.length * n > MAX_TEXT) fail(ERR.VALUE);
10794
- return text.repeat(n);
11047
+ const text2 = str(args[0]);
11048
+ if (n < 0 || text2.length * n > MAX_TEXT) fail(ERR.VALUE);
11049
+ return text2.repeat(n);
10795
11050
  }),
10796
11051
  spec(
10797
11052
  "EXACT",
@@ -10815,8 +11070,8 @@ function compile(pattern, caseMode2, global) {
10815
11070
  }
10816
11071
  }
10817
11072
  var caseMode = (args, index2) => optNum(args, index2, 0);
10818
- function encodeUrl(text) {
10819
- return encodeURIComponent(text).replace(
11073
+ function encodeUrl(text2) {
11074
+ return encodeURIComponent(text2).replace(
10820
11075
  /[!'()*]/g,
10821
11076
  (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`
10822
11077
  );
@@ -10861,15 +11116,15 @@ var TEXT_REGEX_FUNCTIONS = [
10861
11116
  3,
10862
11117
  5,
10863
11118
  (args) => {
10864
- const text = str(args[0]);
11119
+ const text2 = str(args[0]);
10865
11120
  const regex = compile(str(args[1]), caseMode(args, 4), true);
10866
11121
  const replacement = str(args[2]);
10867
11122
  const occurrence = args.length > 3 && args[3] !== null ? int(args[3]) : 0;
10868
- if (occurrence === 0) return text.replace(regex, replacement);
10869
- const matches2 = [...text.matchAll(regex)];
11123
+ if (occurrence === 0) return text2.replace(regex, replacement);
11124
+ const matches2 = [...text2.matchAll(regex)];
10870
11125
  const picked = occurrence > 0 ? matches2[occurrence - 1] : matches2.at(occurrence);
10871
- if (!picked || picked.index === void 0) return text;
10872
- return text.slice(0, picked.index) + picked[0].replace(new RegExp(regex.source, regex.flags.replace("g", "")), replacement) + text.slice(picked.index + picked[0].length);
11126
+ if (!picked || picked.index === void 0) return text2;
11127
+ return text2.slice(0, picked.index) + picked[0].replace(new RegExp(regex.source, regex.flags.replace("g", "")), replacement) + text2.slice(picked.index + picked[0].length);
10873
11128
  }
10874
11129
  )
10875
11130
  ];
@@ -10883,8 +11138,8 @@ function delimitersOf(ctx, value2) {
10883
11138
  return toText(v);
10884
11139
  });
10885
11140
  }
10886
- function occurrences(text, delimiters, insensitive) {
10887
- const hay = insensitive ? text.toLowerCase() : text;
11141
+ function occurrences(text2, delimiters, insensitive) {
11142
+ const hay = insensitive ? text2.toLowerCase() : text2;
10888
11143
  const needles = delimiters.map((d) => insensitive ? d.toLowerCase() : d);
10889
11144
  const out = [];
10890
11145
  let i2 = 0;
@@ -10904,35 +11159,35 @@ function occurrences(text, delimiters, insensitive) {
10904
11159
  return out;
10905
11160
  }
10906
11161
  function textAround(args, ctx, before) {
10907
- const text = str(args[0]);
11162
+ const text2 = str(args[0]);
10908
11163
  const delimiters = delimitersOf(ctx, args[1]);
10909
11164
  const instance = Math.trunc(optNum(args, 2, 1));
10910
11165
  const insensitive = optNum(args, 3, 0) === 1;
10911
11166
  const matchEnd = optBool(args, 4, false);
10912
11167
  const notFound = args.length > 5 ? scalar(args[5]) ?? ERR.NA : ERR.NA;
10913
- if (instance === 0 || Math.abs(instance) > text.length + 1) fail(ERR.VALUE);
11168
+ if (instance === 0 || Math.abs(instance) > text2.length + 1) fail(ERR.VALUE);
10914
11169
  if (delimiters.length === 0 || delimiters.every((d) => d === "")) {
10915
- return before ? instance > 0 ? "" : text : instance > 0 ? text : "";
11170
+ return before ? instance > 0 ? "" : text2 : instance > 0 ? text2 : "";
10916
11171
  }
10917
- const found = occurrences(text, delimiters, insensitive);
11172
+ const found = occurrences(text2, delimiters, insensitive);
10918
11173
  if (matchEnd) {
10919
- if (instance > 0) found.push({ at: text.length, length: 0 });
11174
+ if (instance > 0) found.push({ at: text2.length, length: 0 });
10920
11175
  else found.unshift({ at: 0, length: 0 });
10921
11176
  }
10922
11177
  const index2 = instance > 0 ? instance - 1 : found.length + instance;
10923
11178
  const hit = found[index2];
10924
11179
  if (!hit || index2 < 0) return notFound;
10925
- return before ? text.slice(0, hit.at) : text.slice(hit.at + hit.length);
11180
+ return before ? text2.slice(0, hit.at) : text2.slice(hit.at + hit.length);
10926
11181
  }
10927
- function splitText(text, delimiters, insensitive, ignoreEmpty) {
10928
- if (delimiters.length === 0) return [text];
11182
+ function splitText(text2, delimiters, insensitive, ignoreEmpty) {
11183
+ if (delimiters.length === 0) return [text2];
10929
11184
  const parts = [];
10930
11185
  let last = 0;
10931
- for (const hit of occurrences(text, delimiters, insensitive)) {
10932
- parts.push(text.slice(last, hit.at));
11186
+ for (const hit of occurrences(text2, delimiters, insensitive)) {
11187
+ parts.push(text2.slice(last, hit.at));
10933
11188
  last = hit.at + hit.length;
10934
11189
  }
10935
- parts.push(text.slice(last));
11190
+ parts.push(text2.slice(last));
10936
11191
  return ignoreEmpty ? parts.filter((p) => p !== "") : parts;
10937
11192
  }
10938
11193
  function valueToText(value2, strict) {
@@ -10970,14 +11225,14 @@ var TEXT_EXTRA_FUNCTIONS = [
10970
11225
  2,
10971
11226
  6,
10972
11227
  (args, ctx) => {
10973
- const text = str(ctx.toScalar(args[0] ?? null));
11228
+ const text2 = str(ctx.toScalar(args[0] ?? null));
10974
11229
  const colDelims = delimitersOf(ctx, args[1]);
10975
11230
  const rowDelims = delimitersOf(ctx, args[2]);
10976
11231
  const ignoreEmpty = args.length > 3 && args[3] !== null && Boolean(scalar(ctx.toScalar(args[3] ?? null)));
10977
11232
  const insensitive = args.length > 4 && optNum([ctx.toScalar(args[4] ?? null)], 0, 0) === 1;
10978
11233
  const pad4 = args.length > 5 ? ctx.toScalar(args[5] ?? null) : ERR.NA;
10979
11234
  if (colDelims.length === 0 && rowDelims.length === 0) fail(ERR.VALUE);
10980
- const rows2 = splitText(text, rowDelims, insensitive, ignoreEmpty).map(
11235
+ const rows2 = splitText(text2, rowDelims, insensitive, ignoreEmpty).map(
10981
11236
  (line2) => splitText(line2, colDelims, insensitive, ignoreEmpty)
10982
11237
  );
10983
11238
  const width = rows2.reduce((w, r) => Math.max(w, r.length), 0);
@@ -11171,10 +11426,10 @@ function createContext(frame) {
11171
11426
  scope ? { ...frame, scope, root: void 0 } : { ...frame, root: void 0 }
11172
11427
  ),
11173
11428
  callLambda: (fn, args) => invokeLambda(fn, args, frame),
11174
- parseReference(text) {
11429
+ parseReference(text2) {
11175
11430
  let ast;
11176
11431
  try {
11177
- ast = parseFormula(text.trim());
11432
+ ast = parseFormula(text2.trim());
11178
11433
  } catch (e) {
11179
11434
  if (e instanceof FormulaError) return void 0;
11180
11435
  throw e;
@@ -11335,7 +11590,7 @@ var REFERENCE_ARGUMENT = /* @__PURE__ */ new Set([
11335
11590
  "AREAS",
11336
11591
  "ISREF"
11337
11592
  ]);
11338
- var push = (c, area) => {
11593
+ var push2 = (c, area) => {
11339
11594
  (c.dynamic > 0 ? c.dynamicDeps : c.deps).push(area);
11340
11595
  };
11341
11596
  function spans(areas) {
@@ -11361,7 +11616,7 @@ function visit(node, c) {
11361
11616
  if (!sheets) return;
11362
11617
  const range2 = specRange(node.ref);
11363
11618
  const target2 = node.spill ? { start: range2.start, end: { ...range2.start } } : range2;
11364
- for (const sheet of sheets) push(c, { sheet, range: target2 });
11619
+ for (const sheet of sheets) push2(c, { sheet, range: target2 });
11365
11620
  return;
11366
11621
  }
11367
11622
  case "name": {
@@ -11435,7 +11690,7 @@ function visitBinary(node, c) {
11435
11690
  const list = c.dynamic > 0 ? c.dynamicDeps : c.deps;
11436
11691
  const l = list[list.length - 2];
11437
11692
  const r = list[list.length - 1];
11438
- if (l && r && l.sheet === r.sheet) push(c, spans([l, r])[0]);
11693
+ if (l && r && l.sheet === r.sheet) push2(c, spans([l, r])[0]);
11439
11694
  continue;
11440
11695
  }
11441
11696
  const mentioned = [...c.deps.slice(staticStart), ...c.dynamicDeps.slice(dynamicStart)];
@@ -11451,7 +11706,7 @@ function addStructured(ref, c) {
11451
11706
  sheet: c.sheet,
11452
11707
  row: c.row,
11453
11708
  col: c.col});
11454
- if (value2 instanceof RefValue) for (const area of value2.areas) push(c, area);
11709
+ if (value2 instanceof RefValue) for (const area of value2.areas) push2(c, area);
11455
11710
  }
11456
11711
  function analyze(ast, host, sheet, row2, col) {
11457
11712
  const c = {
@@ -11475,155 +11730,191 @@ function analyze(ast, host, sheet, row2, col) {
11475
11730
  };
11476
11731
  }
11477
11732
 
11478
- // xlsx/formula/area-index.ts
11479
- var BUCKET_WIDTH = 64;
11480
- var CHUNK_SHIFT = 6;
11481
- var CHUNKS = 64;
11482
- function push2(map, key, value2) {
11483
- const list = map.get(key);
11484
- if (list) list.push(value2);
11485
- else map.set(key, [value2]);
11733
+ // xlsx/formula/formula-shape.ts
11734
+ var isDigit4 = (code) => code >= 48 && code <= 57;
11735
+ function formulaShape(formula) {
11736
+ const starts = [];
11737
+ const ends = [];
11738
+ let hash = 2166136261;
11739
+ for (let i2 = 0; i2 < formula.length; i2++) {
11740
+ let code = formula.charCodeAt(i2);
11741
+ if (isDigit4(code)) {
11742
+ let j = i2 + 1;
11743
+ while (j < formula.length && isDigit4(formula.charCodeAt(j))) j++;
11744
+ starts.push(i2);
11745
+ ends.push(j);
11746
+ i2 = j - 1;
11747
+ code = 0;
11748
+ }
11749
+ hash = Math.imul(hash ^ code, 16777619);
11750
+ }
11751
+ return { hash: hash >>> 0, starts, ends };
11486
11752
  }
11487
- function inner(map, sheet) {
11488
- let found = map.get(sheet);
11489
- if (!found) map.set(sheet, found = /* @__PURE__ */ new Map());
11490
- return found;
11753
+ function sameText(a, from, b, at, length) {
11754
+ for (let k = 0; k < length; k++)
11755
+ if (a.charCodeAt(from + k) !== b.charCodeAt(at + k)) return false;
11756
+ return true;
11491
11757
  }
11492
- var AreaIndex = class {
11493
- cells = /* @__PURE__ */ new Map();
11494
- chunked = /* @__PURE__ */ new Map();
11495
- tall = /* @__PURE__ */ new Map();
11496
- wide = /* @__PURE__ */ new Map();
11497
- add(area, node) {
11498
- const { start, end } = area.range;
11499
- if (start.row === end.row && end.col - start.col + 1 <= BUCKET_WIDTH) {
11500
- const cells = inner(this.cells, area.sheet);
11501
- for (let col = start.col; col <= end.col; col++) push2(cells, cellKey(start.row, col), node);
11502
- return;
11758
+ function sameShape(a, as, b, bs) {
11759
+ const runs = as.starts.length;
11760
+ if (runs !== bs.starts.length) return false;
11761
+ let fromA = 0;
11762
+ let fromB = 0;
11763
+ for (let i2 = 0; i2 <= runs; i2++) {
11764
+ const toA = i2 < runs ? as.starts[i2] : a.length;
11765
+ const toB = i2 < runs ? bs.starts[i2] : b.length;
11766
+ if (toA - fromA !== toB - fromB || !sameText(a, fromA, b, fromB, toA - fromA)) return false;
11767
+ fromA = as.ends[i2] ?? 0;
11768
+ fromB = bs.ends[i2] ?? 0;
11769
+ }
11770
+ return true;
11771
+ }
11772
+ function makeTemplate(formula, shape2) {
11773
+ let tokens;
11774
+ let ast;
11775
+ try {
11776
+ tokens = tokenize(formula);
11777
+ ast = parseTokens(tokens);
11778
+ } catch (e) {
11779
+ if (e instanceof RangeError) return new FormulaError(e.message, -1, "#VALUE!");
11780
+ if (e instanceof FormulaError) return e;
11781
+ throw e;
11782
+ }
11783
+ const { starts } = shape2;
11784
+ const slotted = starts.map(() => false);
11785
+ const refs = /* @__PURE__ */ new Map();
11786
+ let run = 0;
11787
+ for (const token of tokens) {
11788
+ const end = token.start + token.text.length;
11789
+ const first2 = run;
11790
+ while (run < starts.length && starts[run] < end) run++;
11791
+ const ref = token.kind === "ref" ? token.ref : void 0;
11792
+ if (!ref || ref.kind === "cols") continue;
11793
+ const count2 = ref.kind === "cell" ? 1 : 2;
11794
+ if (run - first2 < count2) continue;
11795
+ const at = run - count2;
11796
+ const indexes2 = count2 === 1 ? [at] : [at, at + 1];
11797
+ if (indexes2.some((i2) => formula.charCodeAt(starts[i2]) === 48)) continue;
11798
+ for (const i2 of indexes2) slotted[i2] = true;
11799
+ refs.set(ref, count2 === 1 ? { start: at } : { start: at, end: at + 1 });
11800
+ }
11801
+ return { formula, shape: shape2, ast, slotted, refs };
11802
+ }
11803
+ function rowsFor(t, formula, shape2) {
11804
+ if (!sameShape(t.formula, t.shape, formula, shape2)) return void 0;
11805
+ const rows2 = [];
11806
+ for (let i2 = 0; i2 < shape2.starts.length; i2++) {
11807
+ const start = shape2.starts[i2];
11808
+ const length = shape2.ends[i2] - start;
11809
+ if (!t.slotted[i2]) {
11810
+ const own = t.shape.starts[i2];
11811
+ if (t.shape.ends[i2] - own !== length) return void 0;
11812
+ if (!sameText(t.formula, own, formula, start, length)) return void 0;
11813
+ rows2.push(-1);
11814
+ continue;
11503
11815
  }
11504
- const entry = { range: area.range, node };
11505
- if (end.col - start.col + 1 > BUCKET_WIDTH) {
11506
- const list = this.wide.get(area.sheet);
11507
- if (list) list.push(entry);
11508
- else this.wide.set(area.sheet, [entry]);
11509
- return;
11816
+ if (length > 7 || formula.charCodeAt(start) === 48) return void 0;
11817
+ let row2 = 0;
11818
+ for (let k = start; k < start + length; k++) row2 = row2 * 10 + formula.charCodeAt(k) - 48;
11819
+ if (row2 < 1 || row2 > MAX_ROW + 1) return void 0;
11820
+ rows2.push(row2 - 1);
11821
+ }
11822
+ return rows2;
11823
+ }
11824
+ function shiftSpec(spec2, slots, rows2) {
11825
+ const startRow = rows2[slots.start];
11826
+ const endRow = slots.end === void 0 ? startRow : rows2[slots.end];
11827
+ if (startRow === spec2.start.row && endRow === spec2.end.row) return spec2;
11828
+ const { start: from, end: to } = spec2;
11829
+ const start = { row: startRow, col: from.col, rowAbs: from.rowAbs, colAbs: from.colAbs };
11830
+ if (slots.end === void 0) return { kind: spec2.kind, start, end: start };
11831
+ const end = { row: endRow, col: to.col, rowAbs: to.rowAbs, colAbs: to.colAbs };
11832
+ return { kind: spec2.kind, start, end };
11833
+ }
11834
+ function copyTree(node, t, rows2) {
11835
+ switch (node.type) {
11836
+ case "ref": {
11837
+ const slots = node.ref ? t.refs.get(node.ref) : void 0;
11838
+ if (!slots || !node.ref) return node;
11839
+ const ref = shiftSpec(node.ref, slots, rows2);
11840
+ if (ref === node.ref) return node;
11841
+ const copy2 = { type: "ref" };
11842
+ if (node.prefix) copy2.prefix = node.prefix;
11843
+ copy2.ref = ref;
11844
+ if (node.spill) copy2.spill = true;
11845
+ return copy2;
11510
11846
  }
11511
- const first2 = start.row >> CHUNK_SHIFT;
11512
- const last = end.row >> CHUNK_SHIFT;
11513
- if (last - first2 + 1 > CHUNKS) {
11514
- const cols2 = inner(this.tall, area.sheet);
11515
- for (let c = start.col; c <= end.col; c++) push2(cols2, c, entry);
11516
- return;
11847
+ case "unary":
11848
+ case "percent": {
11849
+ const operand4 = copyTree(node.operand, t, rows2);
11850
+ if (operand4 === node.operand) return node;
11851
+ return node.type === "unary" ? { type: "unary", op: node.op, operand: operand4 } : { type: "percent", operand: operand4 };
11517
11852
  }
11518
- const cols = inner(this.chunked, area.sheet);
11519
- for (let c = start.col; c <= end.col; c++) {
11520
- let chunks = cols.get(c);
11521
- if (!chunks) cols.set(c, chunks = /* @__PURE__ */ new Map());
11522
- for (let k = first2; k <= last; k++) push2(chunks, k, entry);
11853
+ case "binary": {
11854
+ const left2 = copyTree(node.left, t, rows2);
11855
+ const right2 = copyTree(node.right, t, rows2);
11856
+ if (left2 === node.left && right2 === node.right) return node;
11857
+ return { type: "binary", op: node.op, left: left2, right: right2 };
11858
+ }
11859
+ case "call": {
11860
+ const args = copyAll(node.args, t, rows2);
11861
+ if (args === node.args) return node;
11862
+ return { type: "call", name: node.name, rawName: node.rawName, args };
11863
+ }
11864
+ case "invoke": {
11865
+ const callee = copyTree(node.callee, t, rows2);
11866
+ const args = copyAll(node.args, t, rows2);
11867
+ if (callee === node.callee && args === node.args) return node;
11868
+ return { type: "invoke", callee, args };
11523
11869
  }
11870
+ default:
11871
+ return node;
11524
11872
  }
11525
- /** Items whose areas intersect `range` on `sheet` (each once). */
11526
- dependents(sheet, range2, out) {
11527
- const found = out instanceof Set ? out : /* @__PURE__ */ new Set();
11528
- this.collect(sheet, range2, found);
11529
- if (Array.isArray(out)) for (const node of found) out.push(node);
11873
+ }
11874
+ function copyAll(nodes, t, rows2) {
11875
+ let out;
11876
+ for (let i2 = 0; i2 < nodes.length; i2++) {
11877
+ const node = nodes[i2];
11878
+ const copy2 = copyTree(node, t, rows2);
11879
+ if (copy2 !== node && !out) out = nodes.slice(0, i2);
11880
+ out?.push(copy2);
11881
+ }
11882
+ return out ?? nodes;
11883
+ }
11884
+ function fromTemplate(t, formula, shape2) {
11885
+ const rows2 = rowsFor(t, formula, shape2);
11886
+ return rows2 ? copyTree(t.ast, t, rows2) : void 0;
11887
+ }
11888
+
11889
+ // xlsx/formula/parse-cache.ts
11890
+ var MAX_TEMPLATE_LENGTH = 2048;
11891
+ var MAX_ENTRIES = 1e5;
11892
+ var MAX_TEMPLATES = 1e4;
11893
+ var NO_RUNS = { hash: 0, starts: [], ends: [] };
11894
+ var treeOf = (made) => "ast" in made ? made.ast : made;
11895
+ var ParseCache = class {
11896
+ byText = /* @__PURE__ */ new Map();
11897
+ templates = /* @__PURE__ */ new Map();
11898
+ parse(formula) {
11899
+ let ast = this.byText.get(formula);
11900
+ if (ast) return ast;
11901
+ ast = this.parseNew(formula);
11902
+ if (this.byText.size > MAX_ENTRIES) this.byText.clear();
11903
+ this.byText.set(formula, ast);
11904
+ return ast;
11530
11905
  }
11531
- collect(sheet, range2, out) {
11532
- const { start, end } = range2;
11533
- const check3 = (list) => {
11534
- if (list) {
11535
- for (const entry of list) if (rangesIntersect(entry.range, range2)) out.add(entry.node);
11536
- }
11537
- };
11538
- const cells = this.cells.get(sheet);
11539
- if (cells) {
11540
- const size = (end.row - start.row + 1) * (end.col - start.col + 1);
11541
- if (size <= 4096) {
11542
- for (let r = start.row; r <= end.row; r++) {
11543
- for (let c = start.col; c <= end.col; c++) {
11544
- const list = cells.get(cellKey(r, c));
11545
- if (list) for (const node of list) out.add(node);
11546
- }
11547
- }
11548
- } else {
11549
- for (const [key, list] of cells) {
11550
- const { row: row2, col } = keyToAddress(key);
11551
- if (row2 >= start.row && row2 <= end.row && col >= start.col && col <= end.col)
11552
- for (const node of list) out.add(node);
11553
- }
11554
- }
11555
- }
11556
- const columns = (map, visit2) => {
11557
- if (!map) return;
11558
- if (end.col - start.col + 1 <= map.size) {
11559
- for (let c = start.col; c <= end.col; c++) if (map.has(c)) visit2(c);
11560
- } else for (const c of map.keys()) if (c >= start.col && c <= end.col) visit2(c);
11561
- };
11562
- const chunked = this.chunked.get(sheet);
11563
- const first2 = start.row >> CHUNK_SHIFT;
11564
- const last = end.row >> CHUNK_SHIFT;
11565
- columns(chunked, (c) => {
11566
- const chunks = chunked?.get(c);
11567
- if (last - first2 + 1 <= chunks.size) {
11568
- for (let k = first2; k <= last; k++) check3(chunks.get(k));
11569
- } else for (const [k, list] of chunks) if (k >= first2 && k <= last) check3(list);
11570
- });
11571
- const tall = this.tall.get(sheet);
11572
- columns(tall, (c) => check3(tall?.get(c)));
11573
- check3(this.wide.get(sheet));
11574
- }
11575
- };
11576
-
11577
- // xlsx/formula/graph-index.ts
11578
- var ColumnIndex = class {
11579
- sheets = /* @__PURE__ */ new Map();
11580
- constructor(nodes) {
11581
- for (const node of nodes) {
11582
- let cols = this.sheets.get(node.sheet);
11583
- if (!cols) this.sheets.set(node.sheet, cols = /* @__PURE__ */ new Map());
11584
- let list = cols.get(node.col);
11585
- if (!list) cols.set(node.col, list = []);
11586
- list.push(node);
11587
- }
11588
- for (const cols of this.sheets.values())
11589
- for (const list of cols.values()) list.sort((a, b) => a.row - b.row);
11590
- }
11591
- nodesIn(area, out) {
11592
- const cols = this.sheets.get(area.sheet);
11593
- if (!cols) return;
11594
- const { start, end } = area.range;
11595
- const width = end.col - start.col + 1;
11596
- const scan2 = (list) => {
11597
- let lo = 0;
11598
- let hi = list.length;
11599
- while (lo < hi) {
11600
- const mid = lo + hi >> 1;
11601
- if (list[mid].row < start.row) lo = mid + 1;
11602
- else hi = mid;
11603
- }
11604
- for (let i2 = lo; i2 < list.length; i2++) {
11605
- const node = list[i2];
11606
- if (node.row > end.row) break;
11607
- out.push(node);
11608
- }
11609
- };
11610
- if (width <= cols.size) {
11611
- for (let c = start.col; c <= end.col; c++) {
11612
- const list = cols.get(c);
11613
- if (list) scan2(list);
11614
- }
11615
- } else {
11616
- for (const [c, list] of cols) if (c >= start.col && c <= end.col) scan2(list);
11617
- }
11618
- }
11619
- };
11620
- var ReverseIndex = class extends AreaIndex {
11621
- constructor(nodes) {
11622
- super();
11623
- for (const node of nodes) {
11624
- for (const dep of node.deps) this.add(dep, node);
11625
- for (const dep of node.dynamicDeps) this.add(dep, node);
11906
+ parseNew(formula) {
11907
+ if (formula.length > MAX_TEMPLATE_LENGTH) return treeOf(makeTemplate(formula, NO_RUNS));
11908
+ const shape2 = formulaShape(formula);
11909
+ const template = this.templates.get(shape2.hash);
11910
+ const reused = template && fromTemplate(template, formula, shape2);
11911
+ if (reused) return reused;
11912
+ const made = makeTemplate(formula, shape2);
11913
+ if (!template && "ast" in made) {
11914
+ if (this.templates.size > MAX_TEMPLATES) this.templates.clear();
11915
+ this.templates.set(shape2.hash, made);
11626
11916
  }
11917
+ return treeOf(made);
11627
11918
  }
11628
11919
  };
11629
11920
 
@@ -11763,7 +12054,7 @@ var EngineHost = class {
11763
12054
  options;
11764
12055
  nodes = /* @__PURE__ */ new Map();
11765
12056
  footprints = /* @__PURE__ */ new Set();
11766
- astCache = /* @__PURE__ */ new Map();
12057
+ parsed = new ParseCache();
11767
12058
  boundsCache = /* @__PURE__ */ new Map();
11768
12059
  inProgress = /* @__PURE__ */ new Set();
11769
12060
  cycles = /* @__PURE__ */ new Set();
@@ -11787,6 +12078,8 @@ var EngineHost = class {
11787
12078
  evaluations = 0;
11788
12079
  built = false;
11789
12080
  needsFull = false;
12081
+ /** No recalculation has run since the workbook was opened: stored values may stand. */
12082
+ fresh = true;
11790
12083
  // ---- EvalHost ----
11791
12084
  readCell(sheet, row2, col) {
11792
12085
  const cell = this.workbook.sheets[sheet]?.rows.get(row2)?.get(col);
@@ -11875,19 +12168,7 @@ var EngineHost = class {
11875
12168
  return this.workbook.sheets[sheet]?.rows.get(row2)?.get(col)?.formula;
11876
12169
  }
11877
12170
  parse(formula) {
11878
- let ast = this.astCache.get(formula);
11879
- if (!ast) {
11880
- try {
11881
- ast = parseFormula(formula);
11882
- } catch (e) {
11883
- if (e instanceof RangeError) ast = new FormulaError(e.message, -1, "#VALUE!");
11884
- else if (!(e instanceof FormulaError)) throw e;
11885
- else ast = e;
11886
- }
11887
- if (this.astCache.size > 1e5) this.astCache.clear();
11888
- this.astCache.set(formula, ast);
11889
- }
11890
- return ast;
12171
+ return this.parsed.parse(formula);
11891
12172
  }
11892
12173
  now() {
11893
12174
  return this.options.now ? this.options.now() : /* @__PURE__ */ new Date();
@@ -11896,20 +12177,6 @@ var EngineHost = class {
11896
12177
  return this.options.random ? this.options.random() : Math.random();
11897
12178
  }
11898
12179
  // ---- graph ----
11899
- build() {
11900
- this.nodes.clear();
11901
- this.footprints.clear();
11902
- this.footprintIndex = void 0;
11903
- this.workbook.sheets.forEach((sheet, s) => {
11904
- for (const [row2, cells] of sheet.rows) {
11905
- for (const [col, cell] of cells) {
11906
- if (cell.formula) this.createNode(s, row2, col, cell, true);
11907
- }
11908
- }
11909
- });
11910
- this.built = true;
11911
- this.graphChanged();
11912
- }
11913
12180
  createNode(sheet, row2, col, cell, initial) {
11914
12181
  const formula = cell.formula ?? "";
11915
12182
  const parsed = this.parse(formula);
@@ -11938,6 +12205,14 @@ var EngineHost = class {
11938
12205
  map.set(cellKey(row2, col), node);
11939
12206
  return node;
11940
12207
  }
12208
+ /** Parses a node's text again after a structural edit rewrote it (see `FormulaNode.stale`). */
12209
+ refreshAst(node) {
12210
+ const parsed = this.parse(node.formula);
12211
+ delete node.stale;
12212
+ delete node.parseError;
12213
+ node.ast = parsed instanceof FormulaError ? void 0 : parsed;
12214
+ if (parsed instanceof FormulaError && parsed.code) node.parseError = err(parsed.code);
12215
+ }
11941
12216
  removeNode(node, changed) {
11942
12217
  const sheet = this.workbook.sheets[node.sheet];
11943
12218
  if (node.spill && sheet) {
@@ -12368,6 +12643,7 @@ var EngineCore = class extends EngineHost {
12368
12643
  return { host: this, sheet, row: row2, col, scope: void 0, depth: 0, root, legacy };
12369
12644
  }
12370
12645
  evaluateFormula(node) {
12646
+ if (node.stale) this.refreshAst(node);
12371
12647
  if (!node.ast) return node.parseError ?? ERR.NAME;
12372
12648
  const ast = node.ast;
12373
12649
  const frame = this.frameFor(node.sheet, node.row, node.col, ast, node.legacy);
@@ -12385,22 +12661,371 @@ var EngineCore = class extends EngineHost {
12385
12661
  }
12386
12662
  };
12387
12663
 
12664
+ // xlsx/formula/shift-graph.ts
12665
+ var POSITIONAL = /* @__PURE__ */ new Set(["ROW", "COLUMN"]);
12666
+ var DESCRIPTIVE = /* @__PURE__ */ new Set(["FORMULATEXT", "CELL", "SHEET"]);
12667
+ var traitsCache = /* @__PURE__ */ new WeakMap();
12668
+ function astTraits(ast) {
12669
+ const cached = traitsCache.get(ast);
12670
+ if (cached) return cached;
12671
+ const sheets = /* @__PURE__ */ new Set();
12672
+ const traits = { complex: false, opaque: false, positional: false, descriptive: false, sheets };
12673
+ const stack2 = [ast];
12674
+ while (stack2.length) {
12675
+ const node = stack2.pop();
12676
+ switch (node.type) {
12677
+ case "ref":
12678
+ if (node.prefix) {
12679
+ sheets.add(node.prefix.sheet.toLowerCase());
12680
+ if (node.prefix.sheet2 !== void 0) {
12681
+ sheets.add(node.prefix.sheet2.toLowerCase());
12682
+ traits.complex = true;
12683
+ }
12684
+ }
12685
+ break;
12686
+ case "name":
12687
+ if (node.prefix) sheets.add(node.prefix.sheet.toLowerCase());
12688
+ traits.complex = true;
12689
+ break;
12690
+ case "structured":
12691
+ traits.complex = true;
12692
+ break;
12693
+ case "unary":
12694
+ case "percent":
12695
+ stack2.push(node.operand);
12696
+ break;
12697
+ case "binary":
12698
+ stack2.push(node.left, node.right);
12699
+ break;
12700
+ case "call":
12701
+ if (POSITIONAL.has(node.name)) traits.positional = true;
12702
+ if (DESCRIPTIVE.has(node.name)) traits.descriptive = true;
12703
+ if (!getFunction(node.name)) traits.complex = traits.opaque = true;
12704
+ stack2.push(...node.args);
12705
+ break;
12706
+ case "invoke":
12707
+ stack2.push(node.callee, ...node.args);
12708
+ break;
12709
+ }
12710
+ }
12711
+ traitsCache.set(ast, traits);
12712
+ return traits;
12713
+ }
12714
+ function intervalDelta(a, b, shift2) {
12715
+ const { at, count: count2 } = shift2;
12716
+ if (count2 > 0) {
12717
+ if (b < at) return 0;
12718
+ if (a < at) return void 0;
12719
+ return b + count2 > (shift2.axis === "row" ? MAX_ROW : MAX_COL) ? void 0 : count2;
12720
+ }
12721
+ const last = at - count2 - 1;
12722
+ if (b < at) return 0;
12723
+ if (a > last) return count2;
12724
+ return void 0;
12725
+ }
12726
+ function areaDelta(area, sheet, shift2) {
12727
+ if (area.sheet !== sheet) return 0;
12728
+ const { start, end } = area.range;
12729
+ return shift2.axis === "row" ? intervalDelta(start.row, end.row, shift2) : intervalDelta(start.col, end.col, shift2);
12730
+ }
12731
+ function movedRange(range2, axis, delta) {
12732
+ if (delta === 0) return range2;
12733
+ return axis === "row" ? {
12734
+ start: { row: range2.start.row + delta, col: range2.start.col },
12735
+ end: { row: range2.end.row + delta, col: range2.end.col }
12736
+ } : {
12737
+ start: { row: range2.start.row, col: range2.start.col + delta },
12738
+ end: { row: range2.end.row, col: range2.end.col + delta }
12739
+ };
12740
+ }
12741
+ function reachesEdit(areas, sheet, shift2) {
12742
+ for (const area of areas) {
12743
+ if (area.sheet !== sheet) continue;
12744
+ if ((shift2.axis === "row" ? area.range.end.row : area.range.end.col) >= shift2.at) return true;
12745
+ }
12746
+ return false;
12747
+ }
12748
+ function intersectionMoves(area, delta, pos, nodeDelta, axis) {
12749
+ if (delta === nodeDelta) return false;
12750
+ const { start, end } = area.range;
12751
+ const a = axis === "row" ? start.row : start.col;
12752
+ const b = axis === "row" ? end.row : end.col;
12753
+ if (a === b) return false;
12754
+ return pos >= a && pos <= b || pos + nodeDelta >= a + delta && pos + nodeDelta <= b + delta;
12755
+ }
12756
+
12757
+ // xlsx/formula/engine-structure.ts
12758
+ var sameAreas = (a, b) => a.length === b.length && a.every((x, i2) => {
12759
+ const y = b[i2];
12760
+ return x.sheet === y.sheet && sameRange(x.range, y.range);
12761
+ });
12762
+ var EngineStructure = class extends EngineCore {
12763
+ /** Formulas a structural edit left to recalculate (with their dependents) on the next pass. */
12764
+ structuralSeeds = /* @__PURE__ */ new Set();
12765
+ /** Whether the graph describes the workbook as it was before the edit just reported. */
12766
+ graphReady() {
12767
+ return this.built && !this.needsFull;
12768
+ }
12769
+ /** Parses a node's current text again and recomputes its precedents. */
12770
+ reanalyze(node) {
12771
+ const parsed = this.parse(node.formula);
12772
+ delete node.stale;
12773
+ delete node.parseError;
12774
+ if (parsed instanceof FormulaError) {
12775
+ node.ast = void 0;
12776
+ if (parsed.code) node.parseError = err(parsed.code);
12777
+ node.deps = [];
12778
+ node.dynamicDeps = [];
12779
+ return;
12780
+ }
12781
+ node.ast = parsed;
12782
+ const found = analyze(parsed, this, node.sheet, node.row, node.col);
12783
+ node.deps = found.deps;
12784
+ node.dynamicDeps = found.dynamicDeps;
12785
+ node.volatile = found.volatile;
12786
+ node.unsupported = found.unsupported;
12787
+ }
12788
+ /**
12789
+ * Moves the graph for rows or columns inserted or deleted on `sheet`, after the workbook was
12790
+ * changed (cells moved, formulas rewritten). Spills on the sheet, array formulas the edit cuts
12791
+ * and anything unexpected fall back to a rebuild on the next recalculation.
12792
+ */
12793
+ shiftCells(sheet, shift2) {
12794
+ if (!this.graphReady() || !this.shiftable(sheet, shift2)) {
12795
+ this.invalidate();
12796
+ return;
12797
+ }
12798
+ const ws = this.workbook.sheets[sheet];
12799
+ const own = this.nodes.get(sheet);
12800
+ if (!ws) return;
12801
+ const moved = /* @__PURE__ */ new Map();
12802
+ if (own) {
12803
+ const next = /* @__PURE__ */ new Map();
12804
+ for (const node of own.values()) {
12805
+ const pos = shift2.axis === "row" ? node.row : node.col;
12806
+ const delta = intervalDelta(pos, pos, shift2);
12807
+ if (delta === void 0) {
12808
+ this.dropNode(node);
12809
+ continue;
12810
+ }
12811
+ if (delta !== 0) {
12812
+ moved.set(node, delta);
12813
+ if (shift2.axis === "row") node.row += delta;
12814
+ else node.col += delta;
12815
+ }
12816
+ next.set(cellKey(node.row, node.col), node);
12817
+ }
12818
+ this.nodes.set(sheet, next);
12819
+ }
12820
+ for (const map of this.nodes.values())
12821
+ for (const node of map.values()) {
12822
+ if (!this.shiftNode(node, sheet, shift2, moved.get(node) ?? 0)) {
12823
+ this.invalidate();
12824
+ return;
12825
+ }
12826
+ }
12827
+ this.boundsCache.clear();
12828
+ this.graphChanged();
12829
+ }
12830
+ /** No spill or stale spilled value on the sheet, and no array formula the edit cuts. */
12831
+ shiftable(sheet, shift2) {
12832
+ for (const node of this.footprints) {
12833
+ if (node.sheet !== sheet) continue;
12834
+ if (node.spill || node.blockedSpill) return false;
12835
+ if (node.arrayRange && areaDelta({ sheet, range: node.arrayRange }, sheet, shift2) === void 0)
12836
+ return false;
12837
+ }
12838
+ const ws = this.workbook.sheets[sheet];
12839
+ let spilled = false;
12840
+ ws?.rows.forEach((cells) => {
12841
+ if (!spilled) cells.forEach((cell) => spilled ||= isSpilledCell(cell));
12842
+ });
12843
+ return !spilled;
12844
+ }
12845
+ dropNode(node) {
12846
+ this.structuralSeeds.delete(node);
12847
+ this.cycles.delete(node);
12848
+ this.footprints.delete(node);
12849
+ }
12850
+ /** Updates one formula for the edit; false when the graph cannot follow it. */
12851
+ shiftNode(node, sheet, shift2, nodeDelta) {
12852
+ const cell = this.workbook.sheets[node.sheet]?.rows.get(node.row)?.get(node.col);
12853
+ if (cell?.formula === void 0) return false;
12854
+ if (node.arrayRange) {
12855
+ const delta = areaDelta({ sheet: node.sheet, range: node.arrayRange }, sheet, shift2);
12856
+ if (delta === void 0) return false;
12857
+ node.arrayRange = movedRange(node.arrayRange, shift2.axis, delta);
12858
+ if (!cell.arrayRange || !sameRange(node.arrayRange, normalizeRange(cell.arrayRange)))
12859
+ return false;
12860
+ }
12861
+ const changed = cell.formula !== node.formula;
12862
+ const traits = node.ast && astTraits(node.ast);
12863
+ const reached = reachesEdit(node.deps, sheet, shift2) || reachesEdit(node.dynamicDeps, sheet, shift2);
12864
+ if (!changed && !reached && nodeDelta === 0 && !traits?.descriptive && !traits?.opaque)
12865
+ return true;
12866
+ if (traits?.complex) {
12867
+ node.formula = cell.formula;
12868
+ this.reanalyze(node);
12869
+ this.structuralSeeds.add(node);
12870
+ return true;
12871
+ }
12872
+ const pos = shift2.axis === "row" ? node.row - nodeDelta : node.col - nodeDelta;
12873
+ const moves = { seed: !!traits?.descriptive, moved: false, cut: false };
12874
+ const deps = this.moveAreas(node.deps, sheet, shift2, pos, nodeDelta, moves);
12875
+ const dynamicDeps = this.moveAreas(node.dynamicDeps, sheet, shift2, pos, nodeDelta, moves);
12876
+ const { cut, moved: anyMoved } = moves;
12877
+ let seed = moves.seed;
12878
+ if (cut || changed !== anyMoved) {
12879
+ node.formula = cell.formula;
12880
+ this.reanalyze(node);
12881
+ this.structuralSeeds.add(node);
12882
+ return true;
12883
+ }
12884
+ if (traits?.positional && (anyMoved || nodeDelta !== 0)) seed = true;
12885
+ node.deps = deps;
12886
+ node.dynamicDeps = dynamicDeps;
12887
+ if (changed) {
12888
+ node.formula = cell.formula;
12889
+ node.stale = true;
12890
+ }
12891
+ if (seed) this.structuralSeeds.add(node);
12892
+ return true;
12893
+ }
12894
+ /**
12895
+ * Areas moved for the edit (the same list when none moves). Records in `moves` whether one
12896
+ * moved, one was cut (deleted, widened, pushed off the grid) and whether implicit intersection
12897
+ * with one can now pick another cell.
12898
+ */
12899
+ moveAreas(list, sheet, shift2, pos, nodeDelta, moves) {
12900
+ let out;
12901
+ for (let i2 = 0; i2 < list.length; i2++) {
12902
+ const area = list[i2];
12903
+ const delta = areaDelta(area, sheet, shift2);
12904
+ if (delta === void 0) {
12905
+ moves.cut = true;
12906
+ continue;
12907
+ }
12908
+ if (intersectionMoves(area, delta, pos, nodeDelta, shift2.axis)) moves.seed = true;
12909
+ if (delta === 0) continue;
12910
+ moves.moved = true;
12911
+ out ??= list.slice();
12912
+ out[i2] = { sheet: area.sheet, range: movedRange(area.range, shift2.axis, delta) };
12913
+ }
12914
+ return out ?? list;
12915
+ }
12916
+ /**
12917
+ * Follows a sheet rename (`from` to `to`, formulas already rewritten): precedents are kept by
12918
+ * sheet index, so only rewritten formulas need their text parsed again, and only formulas that
12919
+ * name the new sheet without having been rewritten (previously unresolved), describe sheets
12920
+ * (CELL, SHEET, FORMULATEXT) or read defined names whose areas changed are recalculated.
12921
+ */
12922
+ renameSheet(from, to) {
12923
+ if (!this.graphReady()) {
12924
+ this.invalidate();
12925
+ return;
12926
+ }
12927
+ const target2 = to.toLowerCase();
12928
+ let depsChanged = false;
12929
+ for (const map of this.nodes.values())
12930
+ for (const node of map.values()) {
12931
+ const cell = this.workbook.sheets[node.sheet]?.rows.get(node.row)?.get(node.col);
12932
+ if (cell?.formula === void 0) {
12933
+ this.invalidate();
12934
+ return;
12935
+ }
12936
+ const changed = cell.formula !== node.formula;
12937
+ const traits = node.ast && astTraits(node.ast);
12938
+ node.formula = cell.formula;
12939
+ if (traits?.complex || !changed && traits?.sheets.has(target2)) {
12940
+ const deps = node.deps;
12941
+ const dynamicDeps = node.dynamicDeps;
12942
+ this.reanalyze(node);
12943
+ const same4 = sameAreas(deps, node.deps) && sameAreas(dynamicDeps, node.dynamicDeps);
12944
+ if (!same4) depsChanged = true;
12945
+ if (!same4 || !traits?.complex) this.structuralSeeds.add(node);
12946
+ } else if (changed) node.stale = true;
12947
+ if (traits?.descriptive || traits?.opaque) this.structuralSeeds.add(node);
12948
+ }
12949
+ if (depsChanged) this.graphChanged();
12950
+ }
12951
+ /** Takes the formulas queued by structural edits. */
12952
+ takeStructuralSeeds(into) {
12953
+ for (const node of this.structuralSeeds)
12954
+ if (this.nodes.get(node.sheet)?.get(cellKey(node.row, node.col)) === node) into.add(node);
12955
+ this.structuralSeeds.clear();
12956
+ }
12957
+ };
12958
+
12388
12959
  // xlsx/formula/engine.ts
12389
- var Engine = class extends EngineCore {
12960
+ var Engine = class extends EngineStructure {
12961
+ preparation;
12962
+ /** The prepared formulas the first recalculation checks (see `trustsStoredValues`). */
12963
+ prepared;
12964
+ // ---- the graph ----
12965
+ prepare(timeRemaining) {
12966
+ if (this.built || this.needsFull) return true;
12967
+ this.preparation ??= this.startPreparation();
12968
+ if (!this.preparation.run(timeRemaining)) return false;
12969
+ this.finishPreparation(this.preparation);
12970
+ return true;
12971
+ }
12972
+ discardPreparation() {
12973
+ if (!this.fresh || this.needsFull) return;
12974
+ this.preparation = void 0;
12975
+ this.prepared = void 0;
12976
+ this.structuralSeeds.clear();
12977
+ this.nodes.clear();
12978
+ this.footprints.clear();
12979
+ this.graphChanged();
12980
+ this.built = false;
12981
+ }
12982
+ /** Completes the graph, continuing a preparation that is under way. */
12983
+ build() {
12984
+ const preparation = this.preparation ?? this.startPreparation();
12985
+ preparation.run();
12986
+ this.finishPreparation(preparation);
12987
+ }
12988
+ startPreparation() {
12989
+ this.nodes.clear();
12990
+ this.footprints.clear();
12991
+ this.footprintIndex = void 0;
12992
+ this.prepared = void 0;
12993
+ return new GraphPreparation(
12994
+ this.workbook,
12995
+ (s, row2, col, cell) => this.createNode(s, row2, col, cell, true)
12996
+ );
12997
+ }
12998
+ finishPreparation(preparation) {
12999
+ this.preparation = void 0;
13000
+ this.built = true;
13001
+ this.graphChanged();
13002
+ this.reverseIndex = preparation.reverse;
13003
+ this.prepared = preparation.formulas;
13004
+ }
12390
13005
  // ---- recalculation ----
12391
13006
  recalculateAll() {
13007
+ this.fresh = false;
13008
+ this.prepared = void 0;
12392
13009
  if (this.needsFull) this.releaseAllSpills();
12393
13010
  if (!this.built || this.needsFull) this.build();
12394
13011
  this.needsFull = false;
13012
+ this.structuralSeeds.clear();
12395
13013
  this.cycles = /* @__PURE__ */ new Set();
12396
13014
  this.run(new Set(this.allNodes()), true);
12397
13015
  }
12398
13016
  recalculateFrom(changes) {
12399
- if (!this.built || this.needsFull) {
13017
+ const seeds = /* @__PURE__ */ new Set();
13018
+ if (this.fresh && !this.needsFull) {
13019
+ this.fresh = false;
13020
+ if (!this.built) this.build();
13021
+ if (!this.trustsStoredValues(changes, seeds)) {
13022
+ this.recalculateAll();
13023
+ return;
13024
+ }
13025
+ } else if (!this.built || this.needsFull) {
12400
13026
  this.recalculateAll();
12401
13027
  return;
12402
13028
  }
12403
- const seeds = /* @__PURE__ */ new Set();
12404
13029
  const changed = [];
12405
13030
  let structural = false;
12406
13031
  for (const change of changes) {
@@ -12436,11 +13061,33 @@ var Engine = class extends EngineCore {
12436
13061
  }
12437
13062
  }
12438
13063
  if (structural) this.graphChanged();
13064
+ this.takeStructuralSeeds(seeds);
12439
13065
  const reverse = this.reverse();
12440
13066
  for (const area of changed) reverse.dependents(area.sheet, area.range, seeds);
12441
13067
  for (const node of this.allNodes()) if (node.volatile) seeds.add(node);
12442
13068
  this.run(seeds, false);
12443
13069
  }
13070
+ /**
13071
+ * Whether the stored results can stand for a fresh graph: apart from the changed cells, every
13072
+ * formula has legacy or CSE array semantics (none can spill). Collects the formulas stored
13073
+ * without a value into `missing`.
13074
+ */
13075
+ trustsStoredValues(changes, missing) {
13076
+ const prepared = this.prepared;
13077
+ this.prepared = void 0;
13078
+ if (!prepared) return false;
13079
+ const changed = new Set(changes.map((c) => `${c.sheet}:${cellKey(c.row, c.col)}`));
13080
+ const current = (node) => this.nodes.get(node.sheet)?.get(cellKey(node.row, node.col)) === node;
13081
+ for (const node of prepared.dynamic) {
13082
+ if (current(node) && !changed.has(`${node.sheet}:${cellKey(node.row, node.col)}`))
13083
+ return false;
13084
+ }
13085
+ for (const node of prepared.unvalued) {
13086
+ const cell = this.workbook.sheets[node.sheet]?.rows.get(node.row)?.get(node.col);
13087
+ if (current(node) && cell && cell.value === null) missing.add(node);
13088
+ }
13089
+ return true;
13090
+ }
12444
13091
  /**
12445
13092
  * Whether a spilled cell is still part of its anchor's live spill, so a change reported for it
12446
13093
  * is a user overwrite. A cell whose anchor is blocked (or gone) keeps its marker: it was
@@ -12451,7 +13098,10 @@ var Engine = class extends EngineCore {
12451
13098
  return !!anchor?.spill && rangeHas(anchor.spill, row2, col);
12452
13099
  }
12453
13100
  invalidate() {
13101
+ this.structuralSeeds.clear();
12454
13102
  this.releaseAllSpills();
13103
+ this.preparation = void 0;
13104
+ this.prepared = void 0;
12455
13105
  this.nodes.clear();
12456
13106
  this.footprints.clear();
12457
13107
  this.graphChanged();
@@ -12496,7 +13146,7 @@ function createCalcEngine(workbook, options = {}) {
12496
13146
  return new Engine(workbook, options);
12497
13147
  }
12498
13148
 
12499
- // xlsx/formula/transform.ts
13149
+ // xlsx/formula/ref-text.ts
12500
13150
  function safeTokens(formula) {
12501
13151
  try {
12502
13152
  return tokenize(formula);
@@ -12515,50 +13165,26 @@ function formatRefSpec(spec2) {
12515
13165
  if (spec2.kind === "cell") return a;
12516
13166
  return `${a}:${cornerText(spec2.end, spec2.kind)}`;
12517
13167
  }
12518
- function rewrite(token, ref) {
13168
+ function rewriteRef(token, ref) {
12519
13169
  const prefix = token.prefix?.text ?? "";
12520
13170
  if (!ref) return `${prefix}#REF!`;
12521
13171
  return `${prefix}${formatRefSpec(ref)}${token.spill ? "#" : ""}`;
12522
13172
  }
12523
13173
  var sameSpec = (a, b) => a.kind === b.kind && a.start.row === b.start.row && a.start.col === b.start.col && a.end.row === b.end.row && a.end.col === b.end.col;
12524
- function translateFormula(formula, dRow, dCol) {
12525
- const tokens = safeTokens(formula);
12526
- if (!tokens) return formula;
12527
- for (const token of tokens) {
12528
- if (token.kind !== "ref" || !token.ref) continue;
12529
- const spec2 = token.ref;
12530
- const move = (c) => {
12531
- const row2 = spec2.kind === "cols" || c.rowAbs ? c.row : c.row + dRow;
12532
- const col = spec2.kind === "rows" || c.colAbs ? c.col : c.col + dCol;
12533
- if (row2 < 0 || row2 > MAX_ROW || col < 0 || col > MAX_COL) return void 0;
12534
- return { ...c, row: row2, col };
12535
- };
12536
- const start = move(spec2.start);
12537
- const end = move(spec2.end);
12538
- const next = start && end ? { kind: spec2.kind, start, end } : void 0;
12539
- if (next && sameSpec(next, spec2)) continue;
12540
- token.text = rewrite(token, next);
12541
- }
12542
- return joinTokens(tokens);
13174
+ var needsQuote = (name) => !/^[A-Za-z_¡-￿][A-Za-z0-9_.¡-￿]*$/.test(name) || /^[A-Za-z]{1,3}\d+$/.test(name) || /^(?:R\d*C?\d*|C\d*)$/i.test(name) || /^(?:TRUE|FALSE)$/i.test(name);
13175
+ function prefixText(prefix) {
13176
+ const sheets = prefix.sheet2 !== void 0 ? `${prefix.sheet}:${prefix.sheet2}` : prefix.sheet;
13177
+ const book = prefix.book !== void 0 ? `[${prefix.book}]` : "";
13178
+ const quote = needsQuote(prefix.sheet) || prefix.sheet2 !== void 0 && needsQuote(prefix.sheet2);
13179
+ return quote ? `'${(book + sheets).replace(/'/g, "''")}'!` : `${book}${sheets}!`;
12543
13180
  }
12544
- var sheetMatches = (prefix, formulaSheet, sheet) => {
12545
- if (prefix?.book !== void 0) return false;
12546
- const name = prefix ? prefix.sheet : formulaSheet;
12547
- return name.toLowerCase() === sheet.toLowerCase();
12548
- };
12549
- function shiftInterval(a, b, at, count2, max) {
12550
- if (count2 > 0) {
12551
- const na2 = a >= at ? a + count2 : a;
12552
- const nb2 = b >= at ? b + count2 : b;
12553
- if (nb2 > max) return na2 > max ? void 0 : [na2, max];
12554
- return [na2, nb2];
12555
- }
12556
- const n = -count2;
12557
- const last = at + n - 1;
12558
- if (a >= at && b <= last) return void 0;
12559
- const na = a < at ? a : a <= last ? at : a - n;
12560
- const nb = b < at ? b : b <= last ? at - 1 : b - n;
12561
- return [na, nb];
13181
+
13182
+ // xlsx/formula/shift-formula.ts
13183
+ var templates = /* @__PURE__ */ new Map();
13184
+ var MAX_TEMPLATES2 = 2e5;
13185
+ function remember(text2, template) {
13186
+ if (templates.size >= MAX_TEMPLATES2) templates.clear();
13187
+ templates.set(text2, template);
12562
13188
  }
12563
13189
  function mergeSpacedAreas(tokens) {
12564
13190
  const out = [];
@@ -12572,10 +13198,10 @@ function mergeSpacedAreas(tokens) {
12572
13198
  const colon = tokens[j];
12573
13199
  const last = tokens[k];
12574
13200
  if (plainCell(first2) && colon?.kind === "op" && colon.text === ":" && plainCell(last) && !last?.prefix && k > i2 + 2 && first2.ref && last?.ref) {
12575
- const text = tokens.slice(i2, k + 1).map((t) => t.text).join("");
13201
+ const text2 = tokens.slice(i2, k + 1).map((t) => t.text).join("");
12576
13202
  out.push({
12577
13203
  ...first2,
12578
- text,
13204
+ text: text2,
12579
13205
  ref: { kind: "area", start: first2.ref.start, end: last.ref.start }
12580
13206
  });
12581
13207
  i2 = k;
@@ -12585,63 +13211,145 @@ function mergeSpacedAreas(tokens) {
12585
13211
  }
12586
13212
  return out;
12587
13213
  }
12588
- function shiftFormula(formula, formulaSheet, spec2) {
12589
- if (spec2.count === 0) return formula;
13214
+ function templateOf(formula) {
13215
+ const cached = templates.get(formula);
13216
+ if (cached !== void 0) return cached;
12590
13217
  const raw = safeTokens(formula);
12591
- if (!raw) return formula;
12592
- const tokens = mergeSpacedAreas(raw);
12593
- const isRow = spec2.axis === "row";
12594
- for (const token of tokens) {
12595
- if (token.kind !== "ref" || !token.ref || !sheetMatches(token.prefix, formulaSheet, spec2.sheet))
12596
- continue;
12597
- const ref = token.ref;
12598
- if (isRow && ref.kind === "cols" || !isRow && ref.kind === "rows") continue;
12599
- const startFirst = isRow ? ref.start.row <= ref.end.row : ref.start.col <= ref.end.col;
12600
- const lo = startFirst ? ref.start : ref.end;
12601
- const hi = startFirst ? ref.end : ref.start;
12602
- const shifted2 = shiftInterval(
12603
- isRow ? lo.row : lo.col,
12604
- isRow ? hi.row : hi.col,
12605
- spec2.at,
12606
- spec2.count,
12607
- isRow ? MAX_ROW : MAX_COL
12608
- );
12609
- let next;
12610
- if (shifted2) {
12611
- const [a, b] = shifted2;
12612
- const nlo = isRow ? { ...lo, row: a } : { ...lo, col: a };
12613
- const nhi = isRow ? { ...hi, row: b } : { ...hi, col: b };
12614
- next = { kind: ref.kind, start: startFirst ? nlo : nhi, end: startFirst ? nhi : nlo };
12615
- if (ref.kind === "cell") next.end = next.start;
12616
- }
12617
- if (next && sameSpec(next, ref)) continue;
12618
- token.text = rewrite(token, next);
13218
+ let template = null;
13219
+ if (raw) {
13220
+ template = [];
13221
+ let literal2 = "";
13222
+ for (const token of mergeSpacedAreas(raw)) {
13223
+ if (token.kind !== "ref" && !(token.kind === "name" && token.prefix)) {
13224
+ literal2 += token.text;
13225
+ continue;
13226
+ }
13227
+ if (literal2) template.push(literal2);
13228
+ literal2 = "";
13229
+ const part = { kind: token.kind, text: token.text };
13230
+ if (token.prefix) {
13231
+ part.prefix = token.prefix;
13232
+ if (token.prefix.book === void 0) part.sheet = token.prefix.sheet.toLowerCase();
13233
+ }
13234
+ if (token.ref) part.ref = token.ref;
13235
+ if (token.spill) part.spill = true;
13236
+ template.push(part);
13237
+ }
13238
+ if (literal2) template.push(literal2);
13239
+ }
13240
+ remember(formula, template);
13241
+ return template;
13242
+ }
13243
+ function rewriteTemplate(formula, rewrite) {
13244
+ const template = templateOf(formula);
13245
+ if (!template) return formula;
13246
+ let next;
13247
+ for (let i2 = 0; i2 < template.length; i2++) {
13248
+ const part = template[i2];
13249
+ if (typeof part === "string") continue;
13250
+ const changed = rewrite(part);
13251
+ if (!changed) continue;
13252
+ next ??= template.slice();
13253
+ next[i2] = changed;
13254
+ }
13255
+ if (!next) return formula;
13256
+ const text2 = next.map((part) => typeof part === "string" ? part : part.text).join("");
13257
+ remember(text2, next);
13258
+ return text2;
13259
+ }
13260
+ function shiftInterval(a, b, at, count2, max) {
13261
+ if (count2 > 0) {
13262
+ const na2 = a >= at ? a + count2 : a;
13263
+ const nb2 = b >= at ? b + count2 : b;
13264
+ if (nb2 > max) return na2 > max ? void 0 : [na2, max];
13265
+ return [na2, nb2];
12619
13266
  }
12620
- return joinTokens(tokens);
13267
+ const n = -count2;
13268
+ const last = at + n - 1;
13269
+ if (a >= at && b <= last) return void 0;
13270
+ const na = a < at ? a : a <= last ? at : a - n;
13271
+ const nb = b < at ? b : b <= last ? at - 1 : b - n;
13272
+ return [na, nb];
12621
13273
  }
12622
- var needsQuote = (name) => !/^[A-Za-z_\u00A1-\uFFFF][A-Za-z0-9_.\u00A1-\uFFFF]*$/.test(name) || /^[A-Za-z]{1,3}\d+$/.test(name) || /^(?:R\d*C?\d*|C\d*)$/i.test(name) || /^(?:TRUE|FALSE)$/i.test(name);
12623
- function prefixText(prefix) {
12624
- const sheets = prefix.sheet2 !== void 0 ? `${prefix.sheet}:${prefix.sheet2}` : prefix.sheet;
12625
- const book = prefix.book !== void 0 ? `[${prefix.book}]` : "";
12626
- const quote = needsQuote(prefix.sheet) || prefix.sheet2 !== void 0 && needsQuote(prefix.sheet2);
12627
- return quote ? `'${(book + sheets).replace(/'/g, "''")}'!` : `${book}${sheets}!`;
13274
+ function shiftRef(ref, spec2) {
13275
+ const isRow = spec2.axis === "row";
13276
+ if (isRow && ref.kind === "cols" || !isRow && ref.kind === "rows") return ref;
13277
+ const startFirst = isRow ? ref.start.row <= ref.end.row : ref.start.col <= ref.end.col;
13278
+ const lo = startFirst ? ref.start : ref.end;
13279
+ const hi = startFirst ? ref.end : ref.start;
13280
+ const shifted2 = shiftInterval(
13281
+ isRow ? lo.row : lo.col,
13282
+ isRow ? hi.row : hi.col,
13283
+ spec2.at,
13284
+ spec2.count,
13285
+ isRow ? MAX_ROW : MAX_COL
13286
+ );
13287
+ if (!shifted2) return void 0;
13288
+ const [a, b] = shifted2;
13289
+ const nlo = isRow ? { ...lo, row: a } : { ...lo, col: a };
13290
+ const nhi = isRow ? { ...hi, row: b } : { ...hi, col: b };
13291
+ const next = {
13292
+ kind: ref.kind,
13293
+ start: startFirst ? nlo : nhi,
13294
+ end: startFirst ? nhi : nlo
13295
+ };
13296
+ if (ref.kind === "cell") next.end = next.start;
13297
+ return sameSpec(next, ref) ? ref : next;
13298
+ }
13299
+ function shiftFormula(formula, formulaSheet, spec2) {
13300
+ if (spec2.count === 0) return formula;
13301
+ const sheet = spec2.sheet.toLowerCase();
13302
+ const own = formulaSheet.toLowerCase() === sheet;
13303
+ return rewriteTemplate(formula, (part) => {
13304
+ if (part.kind !== "ref" || !part.ref || (part.prefix ? part.sheet !== sheet : !own))
13305
+ return void 0;
13306
+ const next = shiftRef(part.ref, spec2);
13307
+ if (next === part.ref) return void 0;
13308
+ const out = { kind: "ref", text: rewriteRef(part, next) };
13309
+ if (part.prefix) out.prefix = part.prefix;
13310
+ if (part.sheet !== void 0) out.sheet = part.sheet;
13311
+ if (next) out.ref = next;
13312
+ if (part.spill) out.spill = true;
13313
+ return out;
13314
+ });
12628
13315
  }
12629
13316
  function renameSheetInFormula(formula, oldName, newName) {
12630
- const tokens = safeTokens(formula);
12631
- if (!tokens) return formula;
12632
13317
  const lower2 = oldName.toLowerCase();
12633
- for (const token of tokens) {
12634
- const prefix = token.prefix;
12635
- if (!prefix || prefix.book !== void 0) continue;
12636
- const first2 = prefix.sheet.toLowerCase() === lower2;
13318
+ return rewriteTemplate(formula, (part) => {
13319
+ const prefix = part.prefix;
13320
+ if (!prefix || part.sheet === void 0) return void 0;
13321
+ const first2 = part.sheet === lower2;
12637
13322
  const second = prefix.sheet2?.toLowerCase() === lower2;
12638
- if (!first2 && !second) continue;
13323
+ if (!first2 && !second) return void 0;
12639
13324
  const renamed = { ...prefix, sheet: first2 ? newName : prefix.sheet };
12640
13325
  if (prefix.sheet2 !== void 0) renamed.sheet2 = second ? newName : prefix.sheet2;
12641
- const text = prefixText(renamed);
12642
- token.text = text + token.text.slice(prefix.text.length);
12643
- renamed.text = text;
12644
- token.prefix = renamed;
13326
+ const text2 = prefixText(renamed);
13327
+ renamed.text = text2;
13328
+ const out = { ...part, text: text2 + part.text.slice(prefix.text.length) };
13329
+ out.prefix = renamed;
13330
+ out.sheet = renamed.sheet.toLowerCase();
13331
+ return out;
13332
+ });
13333
+ }
13334
+
13335
+ // xlsx/formula/transform.ts
13336
+ function translateFormula(formula, dRow, dCol) {
13337
+ const tokens = safeTokens(formula);
13338
+ if (!tokens) return formula;
13339
+ for (const token of tokens) {
13340
+ if (token.kind !== "ref" || !token.ref) continue;
13341
+ const spec2 = token.ref;
13342
+ const move = (c) => {
13343
+ const row2 = spec2.kind === "cols" || c.rowAbs ? c.row : c.row + dRow;
13344
+ const col = spec2.kind === "rows" || c.colAbs ? c.col : c.col + dCol;
13345
+ if (row2 < 0 || row2 > MAX_ROW || col < 0 || col > MAX_COL) return void 0;
13346
+ return { ...c, row: row2, col };
13347
+ };
13348
+ const start = move(spec2.start);
13349
+ const end = move(spec2.end);
13350
+ const next = start && end ? { kind: spec2.kind, start, end } : void 0;
13351
+ if (next && sameSpec(next, spec2)) continue;
13352
+ token.text = rewriteRef(token, next);
12645
13353
  }
12646
13354
  return joinTokens(tokens);
12647
13355
  }
@@ -12940,6 +13648,16 @@ function parseColor(element2, palette) {
12940
13648
  return Object.keys(color).length ? color : void 0;
12941
13649
  }
12942
13650
 
13651
+ // color/hex-rgb.ts
13652
+ function parseArgbHex(hex2) {
13653
+ const clean2 = hex2.replace(/^#/, "");
13654
+ const rgb2 = clean2.length === 8 ? clean2.slice(2) : clean2;
13655
+ if (!/^[0-9a-fA-F]{6}$/.test(rgb2)) return void 0;
13656
+ return [0, 2, 4].map((i2) => parseInt(rgb2.slice(i2, i2 + 2), 16));
13657
+ }
13658
+ var clamp255 = (v) => Math.max(0, Math.min(255, v));
13659
+ var rgbToUpperHex = (rgb2) => `#${rgb2.map((v) => clamp255(Math.round(v)).toString(16).padStart(2, "0")).join("").toUpperCase()}`;
13660
+
12943
13661
  // xlsx/read/sheet-props.ts
12944
13662
  function parseSqref(sqref) {
12945
13663
  if (!sqref) return [];
@@ -12955,13 +13673,13 @@ function dataBarLengths(rule, node) {
12955
13673
  maxLength: rule.maxLength ?? numAttr(bar, "maxLength") ?? 90
12956
13674
  };
12957
13675
  }
12958
- function rewriteConditionalExtension(rule, rewrite2) {
13676
+ function rewriteConditionalExtension(rule, rewrite) {
12959
13677
  if (!rule.extensionXml) return;
12960
13678
  const doc = parseXml(rule.extensionXml);
12961
13679
  let changed = false;
12962
13680
  for (const formula of descendants(doc.documentElement, "f", XM)) {
12963
13681
  const before = formula.textContent ?? "";
12964
- const next = rewrite2(before);
13682
+ const next = rewrite(before);
12965
13683
  if (before !== next) {
12966
13684
  formula.textContent = next;
12967
13685
  changed = true;
@@ -12970,6 +13688,104 @@ function rewriteConditionalExtension(rule, rewrite2) {
12970
13688
  if (changed) rule.extensionXml = buildXml(doc);
12971
13689
  }
12972
13690
 
13691
+ // xlsx/read/sparklines.ts
13692
+ var XM2 = "http://schemas.microsoft.com/office/excel/2006/main";
13693
+ var TYPES = ["line", "column", "stacked"];
13694
+ var EMPTY = ["gap", "zero", "span"];
13695
+ var AXES = ["individual", "group", "custom"];
13696
+ var COLORS = [
13697
+ "colorSeries",
13698
+ "colorNegative",
13699
+ "colorAxis",
13700
+ "colorMarkers",
13701
+ "colorFirst",
13702
+ "colorLast",
13703
+ "colorHigh",
13704
+ "colorLow"
13705
+ ];
13706
+ function pick2(value2, allowed, fallback) {
13707
+ return allowed.includes(value2) ? value2 : fallback;
13708
+ }
13709
+ var text = (element2) => {
13710
+ const value2 = element2?.textContent?.trim();
13711
+ return value2 ? value2 : void 0;
13712
+ };
13713
+ function readSparklineGroup(node) {
13714
+ const attr = (name) => node.hasAttribute(name) ? node.getAttribute(name) : null;
13715
+ const group = {
13716
+ type: pick2(attr("type"), TYPES, "line"),
13717
+ lineWeight: numAttr(node, "lineWeight") ?? 0.75,
13718
+ dateAxis: boolAttr(node, "dateAxis", false),
13719
+ markers: boolAttr(node, "markers", false),
13720
+ high: boolAttr(node, "high", false),
13721
+ low: boolAttr(node, "low", false),
13722
+ first: boolAttr(node, "first", false),
13723
+ last: boolAttr(node, "last", false),
13724
+ negative: boolAttr(node, "negative", false),
13725
+ displayEmptyCellsAs: pick2(attr("displayEmptyCellsAs"), EMPTY, "zero"),
13726
+ displayXAxis: boolAttr(node, "displayXAxis", false),
13727
+ displayHidden: boolAttr(node, "displayHidden", false),
13728
+ rightToLeft: boolAttr(node, "rightToLeft", false),
13729
+ minAxisType: pick2(attr("minAxisType"), AXES, "individual"),
13730
+ maxAxisType: pick2(attr("maxAxisType"), AXES, "individual"),
13731
+ sparklines: []
13732
+ };
13733
+ const manualMin = numAttr(node, "manualMin");
13734
+ const manualMax = numAttr(node, "manualMax");
13735
+ if (manualMin !== void 0) group.manualMin = manualMin;
13736
+ if (manualMax !== void 0) group.manualMax = manualMax;
13737
+ for (const name of COLORS) {
13738
+ const color = parseColor(first(node, name, NS.x14));
13739
+ if (color) group[name] = color;
13740
+ }
13741
+ const dates = text(first(node, "f", XM2));
13742
+ if (dates) group.dateFormula = dates;
13743
+ for (const line2 of children(first(node, "sparklines", NS.x14) ?? node, "sparkline", NS.x14)) {
13744
+ const host = parseRange(text(first(line2, "sqref", XM2)) ?? "");
13745
+ if (!host) continue;
13746
+ const formula = text(first(line2, "f", XM2));
13747
+ group.sparklines.push(formula ? { formula, host } : { host });
13748
+ }
13749
+ return group;
13750
+ }
13751
+ function readSparklineGroups(extLst) {
13752
+ const groups = [];
13753
+ for (const xml of extLst) {
13754
+ if (!xml.includes("sparklineGroup")) continue;
13755
+ let root;
13756
+ try {
13757
+ root = parseXml(xml).documentElement;
13758
+ } catch {
13759
+ continue;
13760
+ }
13761
+ for (const node of descendants(root, "sparklineGroup", NS.x14))
13762
+ groups.push(readSparklineGroup(node));
13763
+ }
13764
+ return groups;
13765
+ }
13766
+ var cache2 = /* @__PURE__ */ new WeakMap();
13767
+ function sheetSparklineGroups(sheet) {
13768
+ const source = sheet.preserved.get("extLst") ?? [];
13769
+ const hit = cache2.get(sheet);
13770
+ if (hit && hit.source.length === source.length && hit.source.every((xml, i2) => xml === source[i2]))
13771
+ return hit.groups;
13772
+ const groups = readSparklineGroups(source);
13773
+ cache2.set(sheet, { source: [...source], groups });
13774
+ return groups;
13775
+ }
13776
+
13777
+ // chart/bar-cluster-geometry.ts
13778
+ function assertBarClusterOptions(options) {
13779
+ for (const [field, min, max] of [
13780
+ ["barGapWidth", 0, 500],
13781
+ ["barOverlap", -100, 100]
13782
+ ]) {
13783
+ const value2 = options[field];
13784
+ if (value2 !== void 0 && (!Number.isInteger(value2) || value2 < min || value2 > max))
13785
+ throw new RangeError(`${field} must be an integer from ${min} to ${max}`);
13786
+ }
13787
+ }
13788
+
12973
13789
  // chart/color-palettes.ts
12974
13790
  var COLORFUL_VARIATIONS = [
12975
13791
  {},
@@ -13155,24 +13971,19 @@ function hueToRgb(n1, n2, hue) {
13155
13971
  return n1 + idiv((n2 - n1) * (idiv(HLSMAX * 2, 3) - h2) + idiv(HLSMAX, 12), sixth);
13156
13972
  return n1;
13157
13973
  }
13158
- var clamp255 = (v) => Math.max(0, Math.min(255, v));
13974
+ var clamp2552 = (v) => Math.max(0, Math.min(255, v));
13159
13975
  function hls240ToRgb({ h: h2, l, s }) {
13160
13976
  if (s === 0) {
13161
- const v = clamp255(Math.round(l * RGBMAX / HLSMAX));
13977
+ const v = clamp2552(Math.round(l * RGBMAX / HLSMAX));
13162
13978
  return [v, v, v];
13163
13979
  }
13164
13980
  const m2 = l <= HLSMAX / 2 ? idiv(l * (HLSMAX + s) + idiv(HLSMAX, 2), HLSMAX) : l + s - idiv(l * s + idiv(HLSMAX, 2), HLSMAX);
13165
13981
  const m1 = 2 * l - m2;
13166
- const channel = (hue) => clamp255(idiv(hueToRgb(m1, m2, hue) * RGBMAX + idiv(HLSMAX, 2), HLSMAX));
13982
+ const channel = (hue) => clamp2552(idiv(hueToRgb(m1, m2, hue) * RGBMAX + idiv(HLSMAX, 2), HLSMAX));
13167
13983
  return [channel(h2 + idiv(HLSMAX, 3)), channel(h2), channel(h2 - idiv(HLSMAX, 3))];
13168
13984
  }
13169
- function parseHex(hex2) {
13170
- const clean2 = hex2.replace(/^#/, "");
13171
- const rgb2 = clean2.length === 8 ? clean2.slice(2) : clean2;
13172
- if (!/^[0-9a-fA-F]{6}$/.test(rgb2)) return void 0;
13173
- return [0, 2, 4].map((i2) => parseInt(rgb2.slice(i2, i2 + 2), 16));
13174
- }
13175
- var toHexColor = (rgb2) => `#${rgb2.map((v) => clamp255(Math.round(v)).toString(16).padStart(2, "0")).join("").toUpperCase()}`;
13985
+ var parseHex = parseArgbHex;
13986
+ var toHexColor = rgbToUpperHex;
13176
13987
  function applyTint(hex2, tint) {
13177
13988
  const rgb2 = parseHex(hex2) ?? [0, 0, 0];
13178
13989
  if (!tint) return toHexColor(rgb2);
@@ -13182,6 +13993,40 @@ function applyTint(hex2, tint) {
13182
13993
  return toHexColor(hls240ToRgb({ ...hls, l: Math.max(0, Math.min(HLSMAX, l)) }));
13183
13994
  }
13184
13995
 
13996
+ // chart/render/theme-palette.ts
13997
+ var THEME_SLOTS = [
13998
+ "lt1",
13999
+ "dk1",
14000
+ "lt2",
14001
+ "dk2",
14002
+ "accent1",
14003
+ "accent2",
14004
+ "accent3",
14005
+ "accent4",
14006
+ "accent5",
14007
+ "accent6",
14008
+ "hlink",
14009
+ "folHlink"
14010
+ ];
14011
+ var DEFAULT_THEME_COLORS = [
14012
+ "FFFFFF",
14013
+ "000000",
14014
+ "E7E6E6",
14015
+ "44546A",
14016
+ "4472C4",
14017
+ "ED7D31",
14018
+ "A5A5A5",
14019
+ "FFC000",
14020
+ "5B9BD5",
14021
+ "70AD47",
14022
+ "0563C1",
14023
+ "954F72"
14024
+ ];
14025
+ function themeColor(theme2, index2) {
14026
+ const hex2 = theme2.colors[index2] ?? DEFAULT_THEME_COLORS[index2];
14027
+ return hex2 && parseArgbHex(hex2) ? hex2.replace(/^#/, "") : void 0;
14028
+ }
14029
+
13185
14030
  // xlsx/layout/colors.ts
13186
14031
  var INDEXED_COLORS = [
13187
14032
  "000000",
@@ -13251,38 +14096,6 @@ var INDEXED_COLORS = [
13251
14096
  "000000",
13252
14097
  "FFFFFF"
13253
14098
  ];
13254
- var THEME_SLOTS = [
13255
- "lt1",
13256
- "dk1",
13257
- "lt2",
13258
- "dk2",
13259
- "accent1",
13260
- "accent2",
13261
- "accent3",
13262
- "accent4",
13263
- "accent5",
13264
- "accent6",
13265
- "hlink",
13266
- "folHlink"
13267
- ];
13268
- var FALLBACK_THEME = [
13269
- "FFFFFF",
13270
- "000000",
13271
- "E7E6E6",
13272
- "44546A",
13273
- "4472C4",
13274
- "ED7D31",
13275
- "A5A5A5",
13276
- "FFC000",
13277
- "5B9BD5",
13278
- "70AD47",
13279
- "0563C1",
13280
- "954F72"
13281
- ];
13282
- function themeColor(theme2, index2) {
13283
- const hex2 = theme2.colors[index2] ?? FALLBACK_THEME[index2];
13284
- return hex2 && parseHex(hex2) ? hex2.replace(/^#/, "") : void 0;
13285
- }
13286
14099
  function resolveColor(color, theme2, fallback, indexed = INDEXED_COLORS) {
13287
14100
  if (!color) return fallback;
13288
14101
  let base;
@@ -13305,18 +14118,6 @@ function mixColors(a, b, t, rounding = "nearest") {
13305
14118
  );
13306
14119
  }
13307
14120
 
13308
- // chart/bar-cluster-geometry.ts
13309
- function assertBarClusterOptions(options) {
13310
- for (const [field, min, max] of [
13311
- ["barGapWidth", 0, 500],
13312
- ["barOverlap", -100, 100]
13313
- ]) {
13314
- const value2 = options[field];
13315
- if (value2 !== void 0 && (!Number.isInteger(value2) || value2 < min || value2 > max))
13316
- throw new RangeError(`${field} must be an integer from ${min} to ${max}`);
13317
- }
13318
- }
13319
-
13320
14121
  // xlsx/edit/range-math.ts
13321
14122
  var axisMax = (axis) => axis === "row" ? MAX_ROW : MAX_COL;
13322
14123
  function shiftSpan(start, end, shift2) {
@@ -13525,8 +14326,8 @@ function syncTableHeader(ctx, sheet, row2, col) {
13525
14326
  if (!table2) return;
13526
14327
  const column = table2.columns[col - table2.range.start.col];
13527
14328
  if (!column) return;
13528
- const text = displayText(ctx.workbook, getCell(sheet, row2, col)).trim();
13529
- if (text) column.name = text;
14329
+ const text2 = displayText(ctx.workbook, getCell(sheet, row2, col)).trim();
14330
+ if (text2) column.name = text2;
13530
14331
  }
13531
14332
  function writeScopes(sheet, index2, range2, parts = []) {
13532
14333
  const r = normalizeRange(range2);
@@ -13541,11 +14342,11 @@ function writeScopes(sheet, index2, range2, parts = []) {
13541
14342
  if (all2.length) scopes.push({ kind: "parts", sheet: index2, parts: all2 });
13542
14343
  return scopes;
13543
14344
  }
13544
- function writeInput(ctx, sheet, row2, col, text) {
14345
+ function writeInput(ctx, sheet, row2, col, text2) {
13545
14346
  const { workbook } = ctx;
13546
14347
  const existing = getCell(sheet, row2, col);
13547
14348
  const format = styleAt(workbook, existing?.styleId ?? baseStyleId(sheet, row2, col)).numFmt;
13548
- if (text === "") {
14349
+ if (text2 === "") {
13549
14350
  if (existing) clearContents(existing);
13550
14351
  pruneCell(sheet, row2, col);
13551
14352
  return;
@@ -13553,10 +14354,10 @@ function writeInput(ctx, sheet, row2, col, text) {
13553
14354
  const cell = ensureCell(sheet, row2, col);
13554
14355
  clearContents(cell);
13555
14356
  if (format === "@") {
13556
- cell.value = text;
14357
+ cell.value = text2;
13557
14358
  return;
13558
14359
  }
13559
- const parsed = parseCellInput(text, { date1904: workbook.date1904 });
14360
+ const parsed = parseCellInput(text2, { date1904: workbook.date1904 });
13560
14361
  if (parsed.formula !== void 0) cell.formula = parsed.formula;
13561
14362
  else cell.value = parsed.value;
13562
14363
  if (parsed.numFmt && format === "General")
@@ -13582,7 +14383,7 @@ function clearContents(cell) {
13582
14383
  delete cell.legacyFormula;
13583
14384
  delete cell.spillAnchor;
13584
14385
  }
13585
- function setCellInput(ctx, s, row2, col, text) {
14386
+ function setCellInput(ctx, s, row2, col, text2) {
13586
14387
  const sheet = sheetAt(ctx.workbook, s);
13587
14388
  const range2 = cellRange(row2, col);
13588
14389
  ctx.run(
@@ -13590,7 +14391,7 @@ function setCellInput(ctx, s, row2, col, text) {
13590
14391
  "cells",
13591
14392
  writeScopes(sheet, s, range2),
13592
14393
  () => {
13593
- writeInput(ctx, sheet, row2, col, text);
14394
+ writeInput(ctx, sheet, row2, col, text2);
13594
14395
  syncTableHeader(ctx, sheet, row2, col);
13595
14396
  },
13596
14397
  { sheet: s, ranges: [range2] }
@@ -13658,10 +14459,10 @@ function clearRange(ctx, s, range2, what) {
13658
14459
  );
13659
14460
  }
13660
14461
  function clearIn(ctx, sheet, r, what) {
13661
- const positions = [];
13662
- forEachCellInRange(sheet, r, (_cell, row2, col) => positions.push([row2, col]));
14462
+ const positions2 = [];
14463
+ forEachCellInRange(sheet, r, (_cell, row2, col) => positions2.push([row2, col]));
13663
14464
  if (what === "contents" || what === "all" || what === "formats") {
13664
- for (const [row2, col] of positions) {
14465
+ for (const [row2, col] of positions2) {
13665
14466
  const cell = getCell(sheet, row2, col);
13666
14467
  if (!cell) continue;
13667
14468
  if (what === "all") deleteCell(sheet, row2, col);
@@ -13672,7 +14473,7 @@ function clearIn(ctx, sheet, r, what) {
13672
14473
  }
13673
14474
  }
13674
14475
  if (what === "contents")
13675
- for (const [row2, col] of positions) syncTableHeader(ctx, sheet, row2, col);
14476
+ for (const [row2, col] of positions2) syncTableHeader(ctx, sheet, row2, col);
13676
14477
  }
13677
14478
  if (what === "all" || what === "formats") {
13678
14479
  sheet.merges = sheet.merges.filter((m) => !rangesIntersect(m, r));
@@ -13879,8 +14680,8 @@ var LISTS = [
13879
14680
  "December"
13880
14681
  ]
13881
14682
  ];
13882
- function listMatch(text) {
13883
- const lower2 = text.toLowerCase();
14683
+ function listMatch(text2) {
14684
+ const lower2 = text2.toLowerCase();
13884
14685
  for (const list of LISTS) {
13885
14686
  const index2 = list.findIndex((item) => item.toLowerCase() === lower2);
13886
14687
  if (index2 >= 0) return { list, index: index2 };
@@ -13905,14 +14706,14 @@ function linearTrend(values2) {
13905
14706
  const slope = den ? num2 / den : 0;
13906
14707
  return (k) => Number((meanY + slope * (k - meanX)).toPrecision(15));
13907
14708
  }
13908
- var isDigit3 = (ch) => ch !== void 0 && ch >= "0" && ch <= "9";
13909
- function matchTextNumber(text) {
13910
- let end = text.length;
13911
- while (end > 0 && !isDigit3(text[end - 1])) end--;
14709
+ var isDigit5 = (ch) => ch !== void 0 && ch >= "0" && ch <= "9";
14710
+ function matchTextNumber(text2) {
14711
+ let end = text2.length;
14712
+ while (end > 0 && !isDigit5(text2[end - 1])) end--;
13912
14713
  if (end === 0) return null;
13913
14714
  let start = end;
13914
- while (start > 0 && isDigit3(text[start - 1])) start--;
13915
- return [text, text.slice(0, start), text.slice(start, end), text.slice(end)];
14715
+ while (start > 0 && isDigit5(text2[start - 1])) start--;
14716
+ return [text2, text2.slice(0, start), text2.slice(start, end), text2.slice(end)];
13916
14717
  }
13917
14718
  var QUARTER = /^(q|qtr|quarter)(\s?)([1-4])$/i;
13918
14719
  function textSeries(texts) {
@@ -14094,10 +14895,10 @@ function removeValidationArea(rules, area) {
14094
14895
  }
14095
14896
 
14096
14897
  // xlsx/edit/conditional-formulas.ts
14097
- function rewriteConditionalRule(rule, rewrite2) {
14898
+ function rewriteConditionalRule(rule, rewrite) {
14098
14899
  const safe2 = (formula) => {
14099
14900
  try {
14100
- return rewrite2(formula);
14901
+ return rewrite(formula);
14101
14902
  } catch {
14102
14903
  return formula;
14103
14904
  }
@@ -14317,26 +15118,26 @@ function pasteConditionalFormats(sheet, dest, cells, transpose2, skipBlanks, cut
14317
15118
  }
14318
15119
 
14319
15120
  // xlsx/edit/annotations.ts
14320
- function setComment(ctx, s, at, text, author) {
15121
+ function setComment(ctx, s, at, text2, author) {
14321
15122
  const sheet = sheetAt(ctx.workbook, s);
14322
15123
  const index2 = sheet.comments.findIndex(
14323
15124
  (c) => c.address.row === at.row && c.address.col === at.col
14324
15125
  );
14325
- if (index2 < 0 && text === void 0) return;
15126
+ if (index2 < 0 && text2 === void 0) return;
14326
15127
  ctx.run(
14327
- text === void 0 ? "Delete comment" : index2 < 0 ? "New comment" : "Edit comment",
15128
+ text2 === void 0 ? "Delete comment" : index2 < 0 ? "New comment" : "Edit comment",
14328
15129
  "annotations",
14329
15130
  [{ kind: "sheet", sheet: s }],
14330
15131
  () => {
14331
- if (text === void 0) {
15132
+ if (text2 === void 0) {
14332
15133
  sheet.comments.splice(index2, 1);
14333
15134
  return;
14334
15135
  }
14335
15136
  const existing = sheet.comments[index2];
14336
15137
  if (existing) {
14337
- existing.text = text;
15138
+ existing.text = text2;
14338
15139
  existing.author = author;
14339
- } else sheet.comments.push({ address: { row: at.row, col: at.col }, author, text });
15140
+ } else sheet.comments.push({ address: { row: at.row, col: at.col }, author, text: text2 });
14340
15141
  },
14341
15142
  { sheet: s, ranges: [{ start: at, end: at }] }
14342
15143
  );
@@ -14525,7 +15326,7 @@ function setBorders(ctx, s, range2, preset, edge = { style: "thin" }) {
14525
15326
  }
14526
15327
 
14527
15328
  // xlsx/edit/shift-preserved.ts
14528
- var XM2 = "http://schemas.microsoft.com/office/excel/2006/main";
15329
+ var XM3 = "http://schemas.microsoft.com/office/excel/2006/main";
14529
15330
  function descendants2(root, ns, local) {
14530
15331
  return Array.from(root.getElementsByTagNameNS(ns, local));
14531
15332
  }
@@ -14585,14 +15386,14 @@ function removeUpwards(node, root) {
14585
15386
  }
14586
15387
  function shiftSqrefs(root, moveRange) {
14587
15388
  let changed = false;
14588
- for (const sqref of descendants2(root, XM2, "sqref")) {
15389
+ for (const sqref of descendants2(root, XM3, "sqref")) {
14589
15390
  const old = sqref.textContent ?? "";
14590
15391
  const ranges = parseSqref(old).map(moveRange).filter((r) => !!r);
14591
- const text = ranges.map(formatRange).join(" ");
14592
- if (text === old.trim()) continue;
15392
+ const text2 = ranges.map(formatRange).join(" ");
15393
+ if (text2 === old.trim()) continue;
14593
15394
  changed = true;
14594
15395
  const owner = sqref.parentNode;
14595
- if (ranges.length) sqref.textContent = text;
15396
+ if (ranges.length) sqref.textContent = text2;
14596
15397
  else if (owner) removeUpwards(owner, root);
14597
15398
  }
14598
15399
  if (!changed) return "same";
@@ -14616,21 +15417,21 @@ function shiftPreservedXml(sheet, shift2, moveRange, banded) {
14616
15417
  (xml) => xml.includes("sqref")
14617
15418
  );
14618
15419
  }
14619
- function rewritePreservedFormulas(sheet, rewrite2) {
15420
+ function rewritePreservedFormulas(sheet, rewrite) {
14620
15421
  editEntries(
14621
15422
  sheet,
14622
15423
  "extLst",
14623
15424
  (root) => {
14624
15425
  let changed = false;
14625
- for (const f6 of descendants2(root, XM2, "f")) {
14626
- const text = f6.textContent ?? "";
14627
- let next = text;
15426
+ for (const f6 of descendants2(root, XM3, "f")) {
15427
+ const text2 = f6.textContent ?? "";
15428
+ let next = text2;
14628
15429
  try {
14629
- next = rewrite2(text, sheet.name);
15430
+ next = rewrite(text2, sheet.name);
14630
15431
  } catch {
14631
- next = text;
15432
+ next = text2;
14632
15433
  }
14633
- if (next === text) continue;
15434
+ if (next === text2) continue;
14634
15435
  f6.textContent = next;
14635
15436
  changed = true;
14636
15437
  }
@@ -14641,46 +15442,46 @@ function rewritePreservedFormulas(sheet, rewrite2) {
14641
15442
  }
14642
15443
 
14643
15444
  // xlsx/edit/shift-formulas.ts
14644
- function safe(rewrite2, formula, formulaSheet) {
15445
+ function safe(rewrite, formula, formulaSheet) {
14645
15446
  try {
14646
- return rewrite2(formula, formulaSheet);
15447
+ return rewrite(formula, formulaSheet);
14647
15448
  } catch {
14648
15449
  return formula;
14649
15450
  }
14650
15451
  }
14651
- function rewriteFormulas(workbook, rewrite2) {
14652
- for (const sheet of workbook.sheets) rewriteSheetFormulas(sheet, rewrite2);
15452
+ function rewriteFormulas(workbook, rewrite) {
15453
+ for (const sheet of workbook.sheets) rewriteSheetFormulas(sheet, rewrite);
14653
15454
  for (const definedName of workbook.definedNames) {
14654
15455
  const local = definedName.localSheet === void 0 ? void 0 : workbook.sheets[definedName.localSheet];
14655
- definedName.formula = safe(rewrite2, definedName.formula, local?.name ?? "");
15456
+ definedName.formula = safe(rewrite, definedName.formula, local?.name ?? "");
14656
15457
  }
14657
15458
  }
14658
- function rewriteSheetFormulas(sheet, rewrite2) {
14659
- rewritePreservedFormulas(sheet, rewrite2);
15459
+ function rewriteSheetFormulas(sheet, rewrite) {
15460
+ rewritePreservedFormulas(sheet, rewrite);
14660
15461
  {
14661
15462
  const name = sheet.name;
14662
15463
  for (const table2 of sheet.tables)
14663
15464
  for (const column of table2.columns)
14664
15465
  if (column.calculatedColumnFormula !== void 0)
14665
- column.calculatedColumnFormula = safe(rewrite2, column.calculatedColumnFormula, name);
15466
+ column.calculatedColumnFormula = safe(rewrite, column.calculatedColumnFormula, name);
14666
15467
  for (const cells of sheet.rows.values())
14667
15468
  for (const cell of cells.values())
14668
- if (cell.formula !== void 0) cell.formula = safe(rewrite2, cell.formula, name);
15469
+ if (cell.formula !== void 0) cell.formula = safe(rewrite, cell.formula, name);
14669
15470
  for (const cf of sheet.conditionalFormats)
14670
- for (const rule of cf.rules) rewriteConditionalRule(rule, (f6) => rewrite2(f6, name));
15471
+ for (const rule of cf.rules) rewriteConditionalRule(rule, (f6) => rewrite(f6, name));
14671
15472
  for (const dv of sheet.dataValidations) {
14672
- if (dv.formula1 !== void 0) dv.formula1 = safe(rewrite2, dv.formula1, name);
14673
- if (dv.formula2 !== void 0) dv.formula2 = safe(rewrite2, dv.formula2, name);
15473
+ if (dv.formula1 !== void 0) dv.formula1 = safe(rewrite, dv.formula1, name);
15474
+ if (dv.formula2 !== void 0) dv.formula2 = safe(rewrite, dv.formula2, name);
14674
15475
  }
14675
15476
  for (const link of sheet.hyperlinks)
14676
15477
  if (link.location && /![A-Za-z$]/.test(link.location))
14677
- link.location = safe(rewrite2, link.location, name);
15478
+ link.location = safe(rewrite, link.location, name);
14678
15479
  for (const drawing of sheet.drawings) {
14679
15480
  if (drawing.kind !== "chart") continue;
14680
15481
  for (const series of drawing.series) {
14681
- if (series.nameRef) series.nameRef = safe(rewrite2, series.nameRef, name);
14682
- if (series.categoriesRef) series.categoriesRef = safe(rewrite2, series.categoriesRef, name);
14683
- if (series.valuesRef) series.valuesRef = safe(rewrite2, series.valuesRef, name);
15482
+ if (series.nameRef) series.nameRef = safe(rewrite, series.nameRef, name);
15483
+ if (series.categoriesRef) series.categoriesRef = safe(rewrite, series.categoriesRef, name);
15484
+ if (series.valuesRef) series.valuesRef = safe(rewrite, series.valuesRef, name);
14684
15485
  }
14685
15486
  }
14686
15487
  }
@@ -14867,7 +15668,7 @@ function shiftAxis(ctx, s, axis, at, count2, insert) {
14867
15668
  applyAxisShift(ctx, sheet, shift2);
14868
15669
  if (insert) inheritFormats(sheet, axis, at, count2);
14869
15670
  },
14870
- { sheet: s, structural: true }
15671
+ { sheet: s, structural: true, calc: { kind: "shift", sheet: s, shift: shift2 } }
14871
15672
  );
14872
15673
  }
14873
15674
  var insertRows = (ctx, s, at, count2) => shiftAxis(ctx, s, "row", at, count2, true);
@@ -14981,7 +15782,7 @@ function pasteHyperlinks(sheet, dest, cells, transpose2, skipBlanks, cutLocation
14981
15782
  }
14982
15783
 
14983
15784
  // xlsx/edit/clipboard-html.ts
14984
- var escapeHtml = (text) => text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
15785
+ var escapeHtml = (text2) => text2.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
14985
15786
  function cssColor(color, theme2) {
14986
15787
  if (!color || color.auto) return void 0;
14987
15788
  if (color.rgb) return `#${color.rgb.slice(-6)}`;
@@ -15046,12 +15847,12 @@ function toHtml(cells, theme2) {
15046
15847
  if (cell && typeof cell.value === "number") attrs.push(`x:num="${cell.value}"`);
15047
15848
  const css = cssFor(cell?.style, theme2);
15048
15849
  if (css) attrs.push(`style="${escapeHtml(css)}"`);
15049
- let text = escapeHtml(cell?.text ?? "").replace(/\n/g, "<br>");
15850
+ let text2 = escapeHtml(cell?.text ?? "").replace(/\n/g, "<br>");
15050
15851
  const link = links.get(`${r},${c}`);
15051
15852
  const href = htmlHref(link);
15052
15853
  if (href)
15053
- text = `<a href="${escapeHtml(href)}"${link?.tooltip ? ` title="${escapeHtml(link.tooltip)}"` : ""}>${text}</a>`;
15054
- tds.push(`<td${attrs.length ? ` ${attrs.join(" ")}` : ""}>${text}</td>`);
15854
+ text2 = `<a href="${escapeHtml(href)}"${link?.tooltip ? ` title="${escapeHtml(link.tooltip)}"` : ""}>${text2}</a>`;
15855
+ tds.push(`<td${attrs.length ? ` ${attrs.join(" ")}` : ""}>${text2}</td>`);
15055
15856
  }
15056
15857
  rows2.push(`<tr>${tds.join("")}</tr>`);
15057
15858
  }
@@ -15079,8 +15880,8 @@ var NAMED_COLORS2 = {
15079
15880
  aqua: "00FFFF",
15080
15881
  fuchsia: "FF00FF"
15081
15882
  };
15082
- function parseCssColor(text) {
15083
- const value2 = text.trim().toLowerCase();
15883
+ function parseCssColor(text2) {
15884
+ const value2 = text2.trim().toLowerCase();
15084
15885
  const hex2 = /^#([0-9a-f]{3}|[0-9a-f]{6})$/.exec(value2)?.[1];
15085
15886
  if (hex2)
15086
15887
  return {
@@ -15102,33 +15903,33 @@ var ENTITIES = {
15102
15903
  apos: "'",
15103
15904
  nbsp: " "
15104
15905
  };
15105
- function decodeEntities(text) {
15106
- return text.replace(/&(#x[0-9a-f]+|#\d+|[a-z]+);/gi, (whole, name) => {
15906
+ function decodeEntities(text2) {
15907
+ return text2.replace(/&(#x[0-9a-f]+|#\d+|[a-z]+);/gi, (whole, name) => {
15107
15908
  if (name.startsWith("#x") || name.startsWith("#X"))
15108
15909
  return String.fromCodePoint(parseInt(name.slice(2), 16));
15109
15910
  if (name.startsWith("#")) return String.fromCodePoint(Number(name.slice(1)));
15110
15911
  return ENTITIES[name.toLowerCase()] ?? whole;
15111
15912
  });
15112
15913
  }
15113
- function parseAttributes(text) {
15914
+ function parseAttributes(text2) {
15114
15915
  const attrs = /* @__PURE__ */ new Map();
15115
- for (const m of text.matchAll(
15916
+ for (const m of text2.matchAll(
15116
15917
  /([\w:-]{1,64})\s{0,16}=\s{0,16}(?:"([^"]*)"|'([^']*)'|([^\s>]+))/g
15117
15918
  ))
15118
15919
  attrs.set((m[1] ?? "").toLowerCase(), decodeEntities(m[2] ?? m[3] ?? m[4] ?? ""));
15119
15920
  return attrs;
15120
15921
  }
15121
- function parseCss(text) {
15922
+ function parseCss(text2) {
15122
15923
  const out = /* @__PURE__ */ new Map();
15123
- for (const decl of text.split(";")) {
15924
+ for (const decl of text2.split(";")) {
15124
15925
  const colon = decl.indexOf(":");
15125
15926
  if (colon < 0) continue;
15126
15927
  out.set(decl.slice(0, colon).trim().toLowerCase(), decl.slice(colon + 1).trim());
15127
15928
  }
15128
15929
  return out;
15129
15930
  }
15130
- function decodeNumberFormat(text) {
15131
- return text.replace(/^["']|["']$/g, "").replace(/\\([0-9A-Fa-f]{4})/g, (_m, hex2) => String.fromCharCode(parseInt(hex2, 16))).replace(/\\(.)/g, "$1");
15931
+ function decodeNumberFormat(text2) {
15932
+ return text2.replace(/^["']|["']$/g, "").replace(/\\([0-9A-Fa-f]{4})/g, (_m, hex2) => String.fromCharCode(parseInt(hex2, 16))).replace(/\\(.)/g, "$1");
15132
15933
  }
15133
15934
  var H_ALIGN = {
15134
15935
  left: "left",
@@ -15169,26 +15970,26 @@ function stylePatchFromCss(css, inner2) {
15169
15970
  if (numFmt) patch.numFmt = decodeNumberFormat(numFmt);
15170
15971
  return patch;
15171
15972
  }
15172
- function removeComments(text) {
15973
+ function removeComments(text2) {
15173
15974
  let out = "";
15174
15975
  let from = 0;
15175
15976
  for (; ; ) {
15176
- const open = text.indexOf("<!--", from);
15177
- const close = open < 0 ? -1 : text.indexOf("-->", open + 4);
15178
- if (close < 0) return out + text.slice(from);
15179
- out += text.slice(from, open);
15977
+ const open = text2.indexOf("<!--", from);
15978
+ const close = open < 0 ? -1 : text2.indexOf("-->", open + 4);
15979
+ if (close < 0) return out + text2.slice(from);
15980
+ out += text2.slice(from, open);
15180
15981
  from = close + 3;
15181
15982
  }
15182
15983
  }
15183
- function removeTags(text) {
15984
+ function removeTags(text2) {
15184
15985
  let out = "";
15185
15986
  let i2 = 0;
15186
- while (i2 < text.length) {
15187
- const ch = text[i2];
15987
+ while (i2 < text2.length) {
15988
+ const ch = text2[i2];
15188
15989
  if (ch === "<") {
15189
15990
  let j = i2 + 1;
15190
- while (j < text.length && text[j] !== "<" && text[j] !== ">") j++;
15191
- if (text[j] === ">") {
15991
+ while (j < text2.length && text2[j] !== "<" && text2[j] !== ">") j++;
15992
+ if (text2[j] === ">") {
15192
15993
  i2 = j + 1;
15193
15994
  continue;
15194
15995
  }
@@ -15200,15 +16001,15 @@ function removeTags(text) {
15200
16001
  }
15201
16002
  function stripTags(markup) {
15202
16003
  let previous;
15203
- let text = markup;
16004
+ let text2 = markup;
15204
16005
  do {
15205
- previous = text;
15206
- text = removeTags(removeComments(text));
15207
- } while (text !== previous);
15208
- return removeAll(text, ["<!--", "-->"]);
16006
+ previous = text2;
16007
+ text2 = removeTags(removeComments(text2));
16008
+ } while (text2 !== previous);
16009
+ return removeAll(text2, ["<!--", "-->"]);
15209
16010
  }
15210
- function removeAll(text, tokens) {
15211
- let current = text;
16011
+ function removeAll(text2, tokens) {
16012
+ let current = text2;
15212
16013
  let previous;
15213
16014
  do {
15214
16015
  previous = current;
@@ -15250,8 +16051,8 @@ function parseHtmlTable(html, base) {
15250
16051
  for (const [k, v] of parseCss(attrs.get("style") ?? "")) css.set(k, v);
15251
16052
  const patch = stylePatchFromCss(css, inner2);
15252
16053
  if (td[1]?.toLowerCase() === "h") patch.font = { bold: true, ...patch.font };
15253
- const text = cellText(inner2);
15254
- row2[c] = text === "" && !Object.keys(patch).length ? null : toCell(text, attrs, patch, base);
16054
+ const text2 = cellText(inner2);
16055
+ row2[c] = text2 === "" && !Object.keys(patch).length ? null : toCell(text2, attrs, patch, base);
15255
16056
  const rowSpan = Math.max(1, Number(attrs.get("rowspan") ?? 1) || 1);
15256
16057
  const colSpan = Math.max(1, Number(attrs.get("colspan") ?? 1) || 1);
15257
16058
  const anchor = /<a\b([^>]*)>/i.exec(inner2);
@@ -15283,35 +16084,35 @@ function parseHtmlTable(html, base) {
15283
16084
  );
15284
16085
  return rows2 && cols ? { rows: rows2, cols, data, merges, hyperlinks } : void 0;
15285
16086
  }
15286
- function toCell(text, attrs, patch, base) {
15287
- let value2 = text;
16087
+ function toCell(text2, attrs, patch, base) {
16088
+ let value2 = text2;
15288
16089
  const num2 = attrs.get("x:num");
15289
16090
  if (num2 !== void 0 && num2 !== "" && Number.isFinite(Number(num2))) value2 = Number(num2);
15290
- else if (attrs.has("x:bool")) value2 = text.toUpperCase() === "TRUE";
15291
- else if (patch.numFmt !== "@" && text !== "") {
15292
- const parsed = parseCellInput(text);
16091
+ else if (attrs.has("x:bool")) value2 = text2.toUpperCase() === "TRUE";
16092
+ else if (patch.numFmt !== "@" && text2 !== "") {
16093
+ const parsed = parseCellInput(text2);
15293
16094
  if (parsed.formula === void 0) value2 = parsed.value;
15294
16095
  if (!patch.numFmt && parsed.numFmt && typeof value2 === "number") patch.numFmt = parsed.numFmt;
15295
16096
  }
15296
- return { value: value2, text, style: patchStyle(base, patch) };
16097
+ return { value: value2, text: text2, style: patchStyle(base, patch) };
15297
16098
  }
15298
16099
 
15299
16100
  // xlsx/edit/clipboard-text.ts
15300
- function quoteField(text) {
15301
- return /[\t\r\n"]/.test(text) ? `"${text.replace(/"/g, '""')}"` : text;
16101
+ function quoteField(text2) {
16102
+ return /[\t\r\n"]/.test(text2) ? `"${text2.replace(/"/g, '""')}"` : text2;
15302
16103
  }
15303
16104
  function toTsv(rows2) {
15304
16105
  if (!rows2.length) return "";
15305
16106
  return rows2.map((row2) => row2.map(quoteField).join(" ")).join("\r\n") + "\r\n";
15306
16107
  }
15307
- function parseTsv(text) {
16108
+ function parseTsv(text2) {
15308
16109
  const rows2 = [];
15309
16110
  let row2 = [];
15310
16111
  let field = "";
15311
16112
  let i2 = 0;
15312
16113
  let atFieldStart = true;
15313
- const body2 = text.replace(/\r\n?/g, "\n").replace(/\n$/, "");
15314
- if (body2 === "") return text === "" ? [] : [[""]];
16114
+ const body2 = text2.replace(/\r\n?/g, "\n").replace(/\n$/, "");
16115
+ if (body2 === "") return text2 === "" ? [] : [[""]];
15315
16116
  while (i2 < body2.length) {
15316
16117
  const ch = body2[i2] ?? "";
15317
16118
  if (atFieldStart && ch === '"') {
@@ -15346,10 +16147,10 @@ function parseTsv(text) {
15346
16147
  for (const r of rows2) while (r.length < width) r.push("");
15347
16148
  return rows2;
15348
16149
  }
15349
- function findClosingQuote(text, from) {
15350
- for (let i2 = from; i2 < text.length; i2++) {
15351
- if (text[i2] !== '"') continue;
15352
- if (text[i2 + 1] === '"') {
16150
+ function findClosingQuote(text2, from) {
16151
+ for (let i2 = from; i2 < text2.length; i2++) {
16152
+ if (text2[i2] !== '"') continue;
16153
+ if (text2[i2 + 1] === '"') {
15353
16154
  i2++;
15354
16155
  continue;
15355
16156
  }
@@ -15626,12 +16427,12 @@ function copyRange(workbook, s, range2) {
15626
16427
  cells
15627
16428
  };
15628
16429
  }
15629
- function cellsFromText(workbook, text) {
15630
- if (/<table\b/i.test(text)) {
15631
- const parsed = parseHtmlTable(text, styleAt(workbook, 0));
16430
+ function cellsFromText(workbook, text2) {
16431
+ if (/<table\b/i.test(text2)) {
16432
+ const parsed = parseHtmlTable(text2, styleAt(workbook, 0));
15632
16433
  if (parsed) return parsed;
15633
16434
  }
15634
- const grid6 = parseTsv(text);
16435
+ const grid6 = parseTsv(text2);
15635
16436
  const data = grid6.map(
15636
16437
  (line2) => line2.map((field) => {
15637
16438
  if (field === "") return null;
@@ -15826,13 +16627,32 @@ function pasteSelection(ctx, sheet, selection, payload, request) {
15826
16627
  );
15827
16628
  }
15828
16629
 
16630
+ // xlsx/edit/external.ts
16631
+ function applyExternal(host, apply) {
16632
+ if (host.busy()) throw new Error("Cannot apply an external change inside an edit");
16633
+ const change = apply();
16634
+ if (!change) return false;
16635
+ const structural = change.structural ?? false;
16636
+ host.calculator.afterExternal(structural, change.cells ?? []);
16637
+ const out = {
16638
+ kind: change.kind ?? "remote",
16639
+ label: change.label,
16640
+ structural,
16641
+ external: true
16642
+ };
16643
+ if (change.sheet !== void 0) out.sheet = change.sheet;
16644
+ if (change.ranges?.length) out.ranges = change.ranges;
16645
+ host.emit(out);
16646
+ return true;
16647
+ }
16648
+
15829
16649
  // xlsx/edit/dimensions.ts
15830
16650
  var MDW = 7;
15831
16651
  var MAX_WIDTH = 255;
15832
16652
  var MAX_HEIGHT = 409;
15833
- function estimateWidth(text, style2) {
16653
+ function estimateWidth(text2, style2) {
15834
16654
  const scale2 = (style2.font.size ?? 11) / 11;
15835
- const longest = Math.max(...text.split("\n").map((line2) => line2.length));
16655
+ const longest = Math.max(...text2.split("\n").map((line2) => line2.length));
15836
16656
  return longest * MDW * scale2 * (style2.font.bold ? 1.1 : 1);
15837
16657
  }
15838
16658
  var pixelsToWidth = (px) => Math.round((px + 5) / MDW * 256) / 256;
@@ -15841,9 +16661,9 @@ function fitColumnWidth(ctx, sheet, col, measure2) {
15841
16661
  for (const [row2, cells] of sheet.rows) {
15842
16662
  const cell = cells.get(col);
15843
16663
  if (!cell || sheet.rowInfo.get(row2)?.hidden) continue;
15844
- const text = displayText(ctx.workbook, cell);
15845
- if (!text) continue;
15846
- widest = Math.max(widest, measure2(text, styleAt(ctx.workbook, cell.styleId)));
16664
+ const text2 = displayText(ctx.workbook, cell);
16665
+ if (!text2) continue;
16666
+ widest = Math.max(widest, measure2(text2, styleAt(ctx.workbook, cell.styleId)));
15847
16667
  }
15848
16668
  return widest < 0 ? void 0 : Math.min(MAX_WIDTH, pixelsToWidth(widest));
15849
16669
  }
@@ -16094,8 +16914,8 @@ function applyFilter(ctx, sheet, filter2) {
16094
16914
  for (let row2 = range2.start.row + 1; row2 <= range2.end.row; row2++) {
16095
16915
  const visible = (filter2.columns ?? []).every((fc) => {
16096
16916
  if (!fc.values && !fc.blank) return true;
16097
- const text = displayText(ctx.workbook, getCell(sheet, row2, range2.start.col + fc.offset));
16098
- return text === "" ? !!fc.blank : (fc.values ?? []).includes(text);
16917
+ const text2 = displayText(ctx.workbook, getCell(sheet, row2, range2.start.col + fc.offset));
16918
+ return text2 === "" ? !!fc.blank : (fc.values ?? []).includes(text2);
16099
16919
  });
16100
16920
  const info = { ...sheet.rowInfo.get(row2) };
16101
16921
  if (visible) delete info.hidden;
@@ -16194,11 +17014,11 @@ function formulaBarText(workbook, cell, options = {}) {
16194
17014
  styleAt(workbook, cell.styleId).numFmt || "General",
16195
17015
  workbook.date1904
16196
17016
  );
16197
- const text = cell.richText?.length ? cell.richText.map((run) => run.text).join("") : value2;
16198
- if (text === "" || options.quote === false) return text;
16199
- const parsed = parseCellInput(text, { date1904: workbook.date1904 });
16200
- const literal2 = parsed.formula === void 0 && parsed.value === text;
16201
- return literal2 ? text : `'${text}`;
17017
+ const text2 = cell.richText?.length ? cell.richText.map((run) => run.text).join("") : value2;
17018
+ if (text2 === "" || options.quote === false) return text2;
17019
+ const parsed = parseCellInput(text2, { date1904: workbook.date1904 });
17020
+ const literal2 = parsed.formula === void 0 && parsed.value === text2;
17021
+ return literal2 ? text2 : `'${text2}`;
16202
17022
  }
16203
17023
 
16204
17024
  // xlsx/edit/find.ts
@@ -16217,7 +17037,7 @@ function queryPattern(query, global = false) {
16217
17037
  if (query.wholeCell) source = `^(?:${source})$`;
16218
17038
  return new RegExp(source, `${query.matchCase ? "" : "i"}${global ? "g" : ""}`);
16219
17039
  }
16220
- var escapeRegex2 = (text) => text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
17040
+ var escapeRegex2 = (text2) => text2.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
16221
17041
  function searchText(workbook, query, sheet, row2, col) {
16222
17042
  const ws = workbook.sheets[sheet];
16223
17043
  if (!ws) return "";
@@ -16234,25 +17054,25 @@ function findAll(workbook, query) {
16234
17054
  for (const s of indices) {
16235
17055
  const sheet = workbook.sheets[s];
16236
17056
  if (!sheet) continue;
16237
- const positions = [];
17057
+ const positions2 = [];
16238
17058
  if (query.lookIn === "comments")
16239
- for (const c of sheet.comments) positions.push([c.address.row, c.address.col]);
16240
- else forEachCell(sheet, (_cell, row2, col) => positions.push([row2, col]));
16241
- if (query.order === "columns") positions.sort((a, b) => a[1] - b[1] || a[0] - b[0]);
16242
- else positions.sort((a, b) => a[0] - b[0] || a[1] - b[1]);
16243
- for (const [row2, col] of positions) {
17059
+ for (const c of sheet.comments) positions2.push([c.address.row, c.address.col]);
17060
+ else forEachCell(sheet, (_cell, row2, col) => positions2.push([row2, col]));
17061
+ if (query.order === "columns") positions2.sort((a, b) => a[1] - b[1] || a[0] - b[0]);
17062
+ else positions2.sort((a, b) => a[0] - b[0] || a[1] - b[1]);
17063
+ for (const [row2, col] of positions2) {
16244
17064
  if (query.range && query.sheet !== void 0 && !rangeContains(query.range, { row: row2, col }))
16245
17065
  continue;
16246
- const text = searchText(workbook, query, s, row2, col);
16247
- if (text && pattern.test(text)) matches2.push({ sheet: s, row: row2, col, text });
17066
+ const text2 = searchText(workbook, query, s, row2, col);
17067
+ if (text2 && pattern.test(text2)) matches2.push({ sheet: s, row: row2, col, text: text2 });
16248
17068
  }
16249
17069
  }
16250
17070
  return matches2;
16251
17071
  }
16252
- function replaceText(text, query, replacement) {
17072
+ function replaceText(text2, query, replacement) {
16253
17073
  const pattern = queryPattern(query, true);
16254
- if (!pattern) return text;
16255
- return text.replace(pattern, (match2) => match2 === "" ? "" : replacement);
17074
+ if (!pattern) return text2;
17075
+ return text2.replace(pattern, (match2) => match2 === "" ? "" : replacement);
16256
17076
  }
16257
17077
  var isSpilledAt = (workbook, at) => {
16258
17078
  const sheet = workbook.sheets[at.sheet];
@@ -16311,10 +17131,10 @@ function replaceOne(ctx, query, replacement, at) {
16311
17131
  const q = replaceQuery(query);
16312
17132
  if (q.lookIn !== "comments" && isSpilledAt(ctx.workbook, at)) return false;
16313
17133
  const pattern = queryPattern(q);
16314
- const text = searchText(ctx.workbook, q, at.sheet, at.row, at.col);
16315
- if (!pattern || !text || !pattern.test(text)) return false;
16316
- const match2 = { ...at, text };
16317
- if (replaceText(text, q, replacement) === text) return false;
17134
+ const text2 = searchText(ctx.workbook, q, at.sheet, at.row, at.col);
17135
+ if (!pattern || !text2 || !pattern.test(text2)) return false;
17136
+ const match2 = { ...at, text: text2 };
17137
+ if (replaceText(text2, q, replacement) === text2) return false;
16318
17138
  ctx.run(
16319
17139
  "Replace",
16320
17140
  "cells",
@@ -16662,6 +17482,14 @@ function setCalcMode(ctx, mode) {
16662
17482
 
16663
17483
  // xlsx/edit/session-calc.ts
16664
17484
  var isStructural = (step) => step.structural || step.entries.some((entry) => entry.before.kind !== "cells");
17485
+ function hintFor(step, mode) {
17486
+ const hint = step.calc;
17487
+ if (!hint) return void 0;
17488
+ if (hint.kind === "rename")
17489
+ return mode === "undo" ? { kind: "rename", from: hint.to, to: hint.from } : hint;
17490
+ return mode === "undo" ? void 0 : hint;
17491
+ }
17492
+ var settingsOf = (workbook) => `${workbook.iterate ? `${workbook.iterate.count}:${workbook.iterate.delta}` : ""}|${workbook.date1904}`;
16665
17493
  var SessionCalculator = class {
16666
17494
  constructor(workbook, calc, enabled) {
16667
17495
  this.workbook = workbook;
@@ -16671,31 +17499,113 @@ var SessionCalculator = class {
16671
17499
  workbook;
16672
17500
  calc;
16673
17501
  enabled;
16674
- /** Structural edits made in manual mode leave the dependency graph stale until a full pass. */
17502
+ /** Structural edits the engine could not follow leave the dependency graph stale (manual mode). */
16675
17503
  staleGraph = false;
17504
+ /** Cells changed in manual mode since the last calculation. */
17505
+ dirty = [];
17506
+ /** The settings at the last calculation; undefined before the first. */
17507
+ calculated;
16676
17508
  /** Recalculates after an applied, undone or redone step (failures become warnings). */
16677
- afterStep(step) {
16678
- if (!this.enabled) return;
17509
+ afterStep(step, mode = "apply") {
17510
+ if (!this.enabled) {
17511
+ this.calc.discardPreparation();
17512
+ return;
17513
+ }
17514
+ const structural = isStructural(step);
17515
+ const hint = structural ? hintFor(step, mode) : void 0;
16679
17516
  if (calcModeOf(this.workbook) === "manual") {
16680
- if (isStructural(step)) this.staleGraph = true;
17517
+ if (hint && !this.staleGraph && !this.dirty.length) {
17518
+ this.guard(() => this.follow(hint));
17519
+ return;
17520
+ }
17521
+ this.calc.discardPreparation();
17522
+ if (structural) this.staleGraph = true;
17523
+ else this.dirty.push(...touchedCells(step));
17524
+ return;
17525
+ }
17526
+ if (hint && !this.staleGraph) {
17527
+ this.guard(() => {
17528
+ this.follow(hint);
17529
+ this.calc.recalculateFrom(touchedCells(step));
17530
+ this.calculated = settingsOf(this.workbook);
17531
+ });
17532
+ return;
17533
+ }
17534
+ this.recalc(structural, () => touchedCells(step));
17535
+ }
17536
+ /** Recalculates after a change applied outside the history (a collaborator's edit). */
17537
+ afterExternal(structural, cells) {
17538
+ if (!this.enabled || calcModeOf(this.workbook) === "manual") {
17539
+ this.calc.discardPreparation();
17540
+ if (!this.enabled) return;
17541
+ if (structural) this.staleGraph = true;
17542
+ else this.dirty.push(...cells);
16681
17543
  return;
16682
17544
  }
17545
+ this.recalc(structural, () => cells);
17546
+ }
17547
+ follow(hint) {
17548
+ if (hint.kind === "shift") this.calc.shiftCells(hint.sheet, hint.shift);
17549
+ else this.calc.renameSheet(hint.from, hint.to);
17550
+ }
17551
+ guard(run) {
16683
17552
  try {
16684
- if (this.staleGraph || isStructural(step)) this.full();
16685
- else {
16686
- const changed = touchedCells(step);
16687
- if (changed.length) this.calc.recalculateFrom(changed);
16688
- }
17553
+ run();
16689
17554
  } catch (error) {
16690
17555
  const message = `Recalculation failed: ${error instanceof Error ? error.message : String(error)}`;
16691
17556
  if (!this.workbook.warnings.includes(message)) this.workbook.warnings.push(message);
16692
17557
  }
16693
17558
  }
16694
- /** Rebuilds the dependency graph and recalculates every formula (F9). */
17559
+ /** Builds the dependency graph ahead of the first edit (see `EditSession.prepareCalculation`). */
17560
+ prepare(timeRemaining) {
17561
+ if (!this.enabled || calcModeOf(this.workbook) === "manual" || this.staleGraph) return true;
17562
+ try {
17563
+ return this.calc.prepare(timeRemaining);
17564
+ } catch {
17565
+ this.calc.discardPreparation();
17566
+ return true;
17567
+ }
17568
+ }
17569
+ /**
17570
+ * Before a structural edit the graph can follow in place: finishes a graph being prepared (or
17571
+ * builds it) while it still matches the workbook, so the edit moves it instead of rebuilding.
17572
+ */
17573
+ beforeStructural() {
17574
+ if (!this.enabled || calcModeOf(this.workbook) === "manual" || this.staleGraph) return;
17575
+ this.prepare();
17576
+ }
17577
+ recalc(structural, cells) {
17578
+ this.guard(() => {
17579
+ if (this.staleGraph || structural) this.full();
17580
+ else {
17581
+ const changed = cells();
17582
+ if (changed.length) this.calc.recalculateFrom(changed);
17583
+ this.calculated = settingsOf(this.workbook);
17584
+ }
17585
+ });
17586
+ }
17587
+ /** Rebuilds the dependency graph and recalculates every formula (Ctrl+Alt+F9). */
16695
17588
  full() {
16696
17589
  this.staleGraph = false;
17590
+ this.dirty = [];
16697
17591
  this.calc.invalidate();
16698
17592
  this.calc.recalculateAll();
17593
+ this.calculated = settingsOf(this.workbook);
17594
+ }
17595
+ /**
17596
+ * Calculate Now (F9): the cells changed since the last calculation, the formulas structural
17597
+ * edits queued, their dependents and the volatile functions. Everything when `full`, before
17598
+ * the session's first calculation, after the iteration settings changed or while the graph
17599
+ * is stale.
17600
+ */
17601
+ now(full) {
17602
+ if (full || this.staleGraph || this.calculated !== settingsOf(this.workbook)) {
17603
+ this.full();
17604
+ return;
17605
+ }
17606
+ const changed = this.dirty;
17607
+ this.dirty = [];
17608
+ this.calc.recalculateFrom(changed);
16699
17609
  }
16700
17610
  /**
16701
17611
  * Recalculates one sheet's formulas and their dependents (Shift+F9); after structural edits
@@ -17016,8 +17926,8 @@ function nextTableName(workbook) {
17016
17926
  }
17017
17927
  function uniqueHeaders(texts) {
17018
17928
  const used = /* @__PURE__ */ new Set();
17019
- return texts.map((text, i2) => {
17020
- let base = text.trim() || `Column${i2 + 1}`;
17929
+ return texts.map((text2, i2) => {
17930
+ let base = text2.trim() || `Column${i2 + 1}`;
17021
17931
  if (!used.has(base.toLowerCase())) {
17022
17932
  used.add(base.toLowerCase());
17023
17933
  return base;
@@ -17492,8 +18402,8 @@ function normalizeDigestAlgorithmName(name) {
17492
18402
  // digest/base64.ts
17493
18403
  var ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
17494
18404
  var VALUES = new Map([...ALPHABET].map((char, index2) => [char, index2]));
17495
- function decodeBase64(text) {
17496
- const compact3 = text.replace(/\s+/g, "");
18405
+ function decodeBase64(text2) {
18406
+ const compact3 = text2.replace(/\s+/g, "");
17497
18407
  const body2 = compact3.replace(/={1,2}$/, "");
17498
18408
  if (body2.length % 4 === 1) return void 0;
17499
18409
  if (compact3.length !== body2.length && compact3.length % 4 !== 0) return void 0;
@@ -19502,6 +20412,222 @@ function bordersView(border, theme2) {
19502
20412
  return out;
19503
20413
  }
19504
20414
 
20415
+ // xlsx/layout/sparkline-view.ts
20416
+ var DEFAULTS = {
20417
+ colorSeries: "#376092",
20418
+ colorNegative: "#D00000",
20419
+ colorAxis: "#000000",
20420
+ colorMarkers: "#D00000",
20421
+ colorFirst: "#D00000",
20422
+ colorLast: "#D00000",
20423
+ colorHigh: "#D00000",
20424
+ colorLow: "#D00000"
20425
+ };
20426
+ var COLUMN_GAP = 0.2;
20427
+ function extent(values2) {
20428
+ let min = Infinity;
20429
+ let max = -Infinity;
20430
+ for (const v of values2) {
20431
+ if (v === null) continue;
20432
+ if (v < min) min = v;
20433
+ if (v > max) max = v;
20434
+ }
20435
+ return min <= max ? { min, max } : void 0;
20436
+ }
20437
+ function sparklineValues(group, values2) {
20438
+ return group.displayEmptyCellsAs === "zero" ? values2.map((v) => v ?? 0) : [...values2];
20439
+ }
20440
+ function sparklineScale(group, all2, index2) {
20441
+ const own = extent(sparklineValues(group, all2[index2]?.values ?? []));
20442
+ const needsGroup = group.minAxisType === "group" || group.maxAxisType === "group";
20443
+ const shared = needsGroup ? extent(all2.flatMap((data) => sparklineValues(group, data.values))) : void 0;
20444
+ const end = (type, manual, key) => {
20445
+ if (type === "custom" && manual !== void 0) return manual;
20446
+ if (type === "group" && shared) return shared[key];
20447
+ return own?.[key];
20448
+ };
20449
+ const min = end(group.minAxisType, group.manualMin, "min");
20450
+ const max = end(group.maxAxisType, group.manualMax, "max");
20451
+ return min === void 0 || max === void 0 ? void 0 : { min, max };
20452
+ }
20453
+ function positions(group, data, n) {
20454
+ const dates = data.dates;
20455
+ if (group.dateAxis && dates && dates.length === n) {
20456
+ const span4 = extent(dates);
20457
+ if (span4) {
20458
+ const width = span4.max - span4.min;
20459
+ return dates.map((d) => d === null ? null : width ? (d - span4.min) / width : 0.5);
20460
+ }
20461
+ }
20462
+ return Array.from({ length: n }, (_, i2) => n === 1 ? 0.5 : i2 / (n - 1));
20463
+ }
20464
+ function pointFacts(values2) {
20465
+ const numbers3 = values2.filter((x) => x !== null);
20466
+ let last = values2.length - 1;
20467
+ while (last >= 0 && values2[last] === null) last--;
20468
+ return {
20469
+ high: Math.max(...numbers3),
20470
+ low: Math.min(...numbers3),
20471
+ first: values2.findIndex((x) => x !== null),
20472
+ last
20473
+ };
20474
+ }
20475
+ function pointColor(group, v, i2, facts, colors, markers) {
20476
+ let color = markers && group.markers ? colors.colorMarkers : void 0;
20477
+ if (group.negative && v < 0) color = colors.colorNegative;
20478
+ if (group.high && v === facts.high) color = colors.colorHigh;
20479
+ if (group.low && v === facts.low) color = colors.colorLow;
20480
+ if (group.first && i2 === facts.first) color = colors.colorFirst;
20481
+ if (group.last && i2 === facts.last) color = colors.colorLast;
20482
+ return color;
20483
+ }
20484
+ function resolveColors(group, theme2) {
20485
+ const out = { ...DEFAULTS };
20486
+ for (const key of Object.keys(DEFAULTS)) {
20487
+ const color = group[key];
20488
+ out[key] = resolveColor(color, theme2, DEFAULTS[key]) ?? DEFAULTS[key];
20489
+ }
20490
+ return out;
20491
+ }
20492
+ function sparklineView(group, data, scale2, theme2) {
20493
+ const colors = resolveColors(group, theme2);
20494
+ const view = {
20495
+ type: group.type,
20496
+ color: colors.colorSeries,
20497
+ lineWeightPt: group.lineWeight,
20498
+ lines: [],
20499
+ markers: [],
20500
+ columns: []
20501
+ };
20502
+ const values2 = sparklineValues(group, data.values);
20503
+ const n = values2.length;
20504
+ if (!n || !scale2) return view;
20505
+ const facts = pointFacts(values2);
20506
+ const xs = positions(group, data, n);
20507
+ const flip = (x) => group.rightToLeft ? 1 - x : x;
20508
+ const range2 = scale2.max - scale2.min;
20509
+ const yOf = (v) => range2 ? Math.max(0, Math.min(1, (scale2.max - v) / range2)) : 0.5;
20510
+ if (group.type === "line") {
20511
+ let segment = [];
20512
+ values2.forEach((v, i2) => {
20513
+ const x = xs[i2];
20514
+ if (v === null || x === null || x === void 0) {
20515
+ if (group.displayEmptyCellsAs === "gap" && segment.length) {
20516
+ view.lines.push(segment);
20517
+ segment = [];
20518
+ }
20519
+ return;
20520
+ }
20521
+ const point = { x: flip(x), y: yOf(v) };
20522
+ segment.push(point);
20523
+ const color = pointColor(group, v, i2, facts, colors, true);
20524
+ if (color) view.markers.push({ ...point, color });
20525
+ });
20526
+ if (segment.length) view.lines.push(segment);
20527
+ } else {
20528
+ const slot = 1 / n;
20529
+ const w = slot * (1 - COLUMN_GAP);
20530
+ const base = yOf(Math.max(scale2.min, Math.min(scale2.max, 0)));
20531
+ values2.forEach((v, i2) => {
20532
+ const position = xs[i2];
20533
+ if (v === null || position === null || position === void 0) return;
20534
+ if (v === 0) return;
20535
+ let top;
20536
+ let bottom;
20537
+ if (group.type === "stacked") [top, bottom] = v > 0 ? [0, 0.5] : [0.5, 1];
20538
+ else if (!range2) [top, bottom] = [0, 1];
20539
+ else [top, bottom] = [Math.min(base, yOf(v)), Math.max(base, yOf(v))];
20540
+ const centre = flip(slot / 2 + position * (1 - slot));
20541
+ const color = pointColor(group, v, i2, facts, colors, false) ?? view.color;
20542
+ view.columns.push({ x: centre - w / 2, y: top, w, h: bottom - top, color });
20543
+ });
20544
+ }
20545
+ if (group.type === "stacked") {
20546
+ if (group.displayXAxis) view.axis = { y: 0.5, color: colors.colorAxis };
20547
+ } else if (group.displayXAxis && range2 && scale2.min <= 0 && scale2.max >= 0)
20548
+ view.axis = { y: yOf(0), color: colors.colorAxis };
20549
+ return view;
20550
+ }
20551
+
20552
+ // xlsx/layout/sparkline-data.ts
20553
+ var MAX_POINTS = 1e4;
20554
+ var hostIndex = /* @__PURE__ */ new WeakMap();
20555
+ function hosts(sheet) {
20556
+ const groups = sheetSparklineGroups(sheet);
20557
+ let index2 = hostIndex.get(groups);
20558
+ if (!index2) {
20559
+ index2 = /* @__PURE__ */ new Map();
20560
+ for (const group of groups)
20561
+ group.sparklines.forEach((line2, i2) => {
20562
+ const key = cellKey(line2.host.start.row, line2.host.start.col);
20563
+ if (!index2.has(key)) index2.set(key, { group, index: i2 });
20564
+ });
20565
+ hostIndex.set(groups, index2);
20566
+ }
20567
+ return index2;
20568
+ }
20569
+ function hasSparklineAt(sheet, row2, col) {
20570
+ return hosts(sheet).has(cellKey(row2, col));
20571
+ }
20572
+ function resolveSparklineRange(workbook, sheet, formula) {
20573
+ const ref = formula.trim().replace(/^=/, "");
20574
+ const bang = ref.lastIndexOf("!");
20575
+ let target2 = sheet;
20576
+ if (bang >= 0) {
20577
+ const raw = ref.slice(0, bang);
20578
+ const name = /^'.*'$/.test(raw) ? raw.slice(1, -1).replace(/''/g, "'") : raw;
20579
+ target2 = sheetByName(workbook, name);
20580
+ }
20581
+ const range2 = parseRange(ref.slice(bang + 1).replace(/\$/g, ""));
20582
+ return target2 && range2 ? { sheet: target2, range: normalizeRange(range2) } : void 0;
20583
+ }
20584
+ var rowHidden = (sheet, row2) => sheet.rowInfo.get(row2)?.hidden === true;
20585
+ var colHidden = (sheet, col) => sheet.columns.some((c) => c.hidden === true && col >= c.min && col <= c.max);
20586
+ function readSparklineValues(sheet, range2, displayHidden) {
20587
+ let endRow = range2.end.row;
20588
+ if (endRow - range2.start.row >= MAX_POINTS) {
20589
+ let lastRow = range2.start.row;
20590
+ for (const row2 of sheet.rows.keys()) if (row2 > lastRow) lastRow = row2;
20591
+ endRow = Math.min(endRow, lastRow);
20592
+ }
20593
+ const out = [];
20594
+ for (let row2 = range2.start.row; row2 <= endRow && out.length < MAX_POINTS; row2++) {
20595
+ if (!displayHidden && rowHidden(sheet, row2)) continue;
20596
+ for (let col = range2.start.col; col <= range2.end.col && out.length < MAX_POINTS; col++) {
20597
+ if (!displayHidden && colHidden(sheet, col)) continue;
20598
+ const value2 = getCell(sheet, row2, col)?.value;
20599
+ out.push(typeof value2 === "number" && Number.isFinite(value2) ? value2 : null);
20600
+ }
20601
+ }
20602
+ return out;
20603
+ }
20604
+ function groupData(workbook, sheet, group) {
20605
+ const dateRange = group.dateAxis && group.dateFormula;
20606
+ const dates = dateRange ? resolveSparklineRange(workbook, sheet, dateRange) : void 0;
20607
+ const dateValues = dates ? readSparklineValues(dates.sheet, dates.range, group.displayHidden) : void 0;
20608
+ return group.sparklines.map((line2) => {
20609
+ const source = line2.formula ? resolveSparklineRange(workbook, sheet, line2.formula) : void 0;
20610
+ const values2 = source ? readSparklineValues(source.sheet, source.range, group.displayHidden) : [];
20611
+ return dateValues ? { values: values2, dates: dateValues } : { values: values2 };
20612
+ });
20613
+ }
20614
+ function sparklineViewAt(workbook, sheetIndex2, row2, col) {
20615
+ const sheet = workbook.sheets[sheetIndex2];
20616
+ if (!sheet) return void 0;
20617
+ const entry = hosts(sheet).get(cellKey(row2, col));
20618
+ if (!entry) return void 0;
20619
+ const { group, index: index2 } = entry;
20620
+ const needsGroup = group.minAxisType === "group" || group.maxAxisType === "group";
20621
+ const data = needsGroup ? groupData(workbook, sheet, group) : groupData(workbook, sheet, { ...group, sparklines: [group.sparklines[index2]] });
20622
+ const at = needsGroup ? index2 : 0;
20623
+ return sparklineView(
20624
+ group,
20625
+ data[at] ?? { values: [] },
20626
+ sparklineScale(group, data, at),
20627
+ workbook.theme
20628
+ );
20629
+ }
20630
+
19505
20631
  // xlsx/layout/units.ts
19506
20632
  var DEFAULT_MAX_DIGIT_WIDTH = 7;
19507
20633
  var DEFAULT_BASE_COL_WIDTH = 8;
@@ -19605,6 +20731,8 @@ function cellView(workbook, sheetIndex2, row2, col, cf, options = {}) {
19605
20731
  if (fill) view.fill = fill;
19606
20732
  if (conditional?.dataBar) view.dataBar = conditional.dataBar;
19607
20733
  if (conditional?.icon) view.icon = conditional.icon;
20734
+ const sparkline = sparklineViewAt(workbook, sheetIndex2, row2, col);
20735
+ if (sparkline) view.sparkline = sparkline;
19608
20736
  const link = sheet.hyperlinks.find((h2) => rangeContains(h2.range, { row: row2, col }));
19609
20737
  if (link) {
19610
20738
  view.hasHyperlink = true;
@@ -19811,9 +20939,9 @@ function lineHeightPoints(sizePt) {
19811
20939
  }
19812
20940
  return Math.max(0.75, Math.ceil(height / 0.75 - 1e-9) * 0.75);
19813
20941
  }
19814
- function wrappedLineCount(text, width, measure2) {
20942
+ function wrappedLineCount(text2, width, measure2) {
19815
20943
  let lines = 0;
19816
- for (const paragraph of text.split(/\r?\n/)) {
20944
+ for (const paragraph of text2.split(/\r?\n/)) {
19817
20945
  lines++;
19818
20946
  if (width <= 0) continue;
19819
20947
  let current = "";
@@ -19854,13 +20982,13 @@ function autoFitRowHeight(workbook, sheetIndex2, row2, measure2) {
19854
20982
  let lines = 1;
19855
20983
  if (view.wrap) {
19856
20984
  const width = metrics.colWidth(col) - COLUMN_PADDING_PX - 1 - view.indentPx;
19857
- lines = wrappedLineCount(view.text, width, (text) => measure2(text, view.font));
20985
+ lines = wrappedLineCount(view.text, width, (text2) => measure2(text2, view.font));
19858
20986
  }
19859
20987
  tallest = Math.max(tallest, lines * lineHeightPoints(sizePt));
19860
20988
  }
19861
20989
  return tallest > 0 ? tallest : sheet.defaultRowHeight;
19862
20990
  }
19863
- var approximateMeasure = (text, font) => text.length * font.sizePx * (font.bold ? 0.58 : 0.53);
20991
+ var approximateMeasure = (text2, font) => text2.length * font.sizePx * (font.bold ? 0.58 : 0.53);
19864
20992
 
19865
20993
  // xlsx/edit/row-autofit.ts
19866
20994
  var MAX_HEIGHT2 = 409;
@@ -19986,12 +21114,12 @@ function renameSheet(ctx, index2, name) {
19986
21114
  ctx.run(
19987
21115
  "Rename sheet",
19988
21116
  "sheets",
19989
- [{ kind: "workbook" }],
21117
+ [{ kind: "refs" }],
19990
21118
  () => {
19991
21119
  rewriteFormulas(workbook, (formula) => renameSheetInFormula(formula, old, name));
19992
21120
  sheet.name = name;
19993
21121
  },
19994
- { sheet: index2, structural: true }
21122
+ { sheet: index2, structural: true, calc: { kind: "rename", from: old, to: name } }
19995
21123
  );
19996
21124
  }
19997
21125
  function moveSheet(ctx, from, to) {
@@ -20123,19 +21251,19 @@ function setTabColor(ctx, index2, color) {
20123
21251
 
20124
21252
  // xlsx/edit/validation-list.ts
20125
21253
  function listSource(workbook, sheet, formula, evaluate, at, depth = 0) {
20126
- const text = formula.replace(/^=/, "").trim();
20127
- const literal2 = /^"((?:[^"]|"")*)"$/.exec(text);
21254
+ const text2 = formula.replace(/^=/, "").trim();
21255
+ const literal2 = /^"((?:[^"]|"")*)"$/.exec(text2);
20128
21256
  if (literal2)
20129
21257
  return (literal2[1] ?? "").replace(/""/g, '"').split(",").map((s) => s.trim()).filter((s) => s !== "").map((s) => ({ text: s, value: parseCellInput(s, { date1904: workbook.date1904 }).value }));
20130
21258
  const named2 = workbook.definedNames.find(
20131
- (n) => n.name.toLowerCase() === text.toLowerCase() && (n.localSheet === void 0 || n.localSheet === sheet)
21259
+ (n) => n.name.toLowerCase() === text2.toLowerCase() && (n.localSheet === void 0 || n.localSheet === sheet)
20132
21260
  );
20133
21261
  if (named2 && depth < 4)
20134
21262
  return listSource(workbook, sheet, named2.formula, evaluate, at, depth + 1);
20135
- const ref = /^(?:'((?:[^']|'')+)'|([^'!]+))!(.+)$/.exec(text);
21263
+ const ref = /^(?:'((?:[^']|'')+)'|([^'!]+))!(.+)$/.exec(text2);
20136
21264
  const sheetName = ref ? ref[1]?.replace(/''/g, "'") ?? ref[2] : void 0;
20137
21265
  const target2 = sheetName ? sheetByName(workbook, sheetName) : workbook.sheets[sheet];
20138
- const range2 = parseRange((ref ? ref[3] ?? "" : text).replace(/\$/g, ""));
21266
+ const range2 = parseRange((ref ? ref[3] ?? "" : text2).replace(/\$/g, ""));
20139
21267
  if (target2 && range2) {
20140
21268
  const out = [];
20141
21269
  forEachCellInRange(target2, range2, (cell) => {
@@ -20146,7 +21274,7 @@ function listSource(workbook, sheet, formula, evaluate, at, depth = 0) {
20146
21274
  }
20147
21275
  if (!evaluate) return void 0;
20148
21276
  try {
20149
- const value2 = evaluate(text, at);
21277
+ const value2 = evaluate(text2, at);
20150
21278
  return value2 === null ? [] : [{ text: rawText(value2), value: value2 }];
20151
21279
  } catch {
20152
21280
  return void 0;
@@ -20185,12 +21313,12 @@ function validationAt(workbook, sheet, row2, col) {
20185
21313
  }
20186
21314
  function operand3(formula, evaluate, at) {
20187
21315
  if (formula === void 0) return void 0;
20188
- const text = formula.replace(/^=/, "").trim();
20189
- if (text !== "" && Number.isFinite(Number(text))) return Number(text);
20190
- const quoted = /^"((?:[^"]|"")*)"$/.exec(text);
21316
+ const text2 = formula.replace(/^=/, "").trim();
21317
+ if (text2 !== "" && Number.isFinite(Number(text2))) return Number(text2);
21318
+ const quoted = /^"((?:[^"]|"")*)"$/.exec(text2);
20191
21319
  if (quoted) return (quoted[1] ?? "").replace(/""/g, '"');
20192
21320
  try {
20193
- return evaluate(text, at);
21321
+ return evaluate(text2, at);
20194
21322
  } catch {
20195
21323
  return void 0;
20196
21324
  }
@@ -20232,8 +21360,8 @@ function relativeTo(dv, formula, at) {
20232
21360
  const dRow = at.row - top;
20233
21361
  const dCol = at.col - left2;
20234
21362
  if (dRow === 0 && dCol === 0) return formula;
20235
- const text = formula.replace(/^=/, "");
20236
- return translateFormula(text, dRow, dCol);
21363
+ const text2 = formula.replace(/^=/, "");
21364
+ return translateFormula(text2, dRow, dCol);
20237
21365
  }
20238
21366
  function withProposedValue(workbook, at, value2, fn) {
20239
21367
  const sheet = workbook.sheets[at.sheet];
@@ -20367,13 +21495,12 @@ function createEditSession(workbook, options = {}) {
20367
21495
  for (const listener of [...listeners2]) listener(change);
20368
21496
  };
20369
21497
  const calculator = new SessionCalculator(workbook, calc, autoRecalc);
20370
- const recalc = (step) => calculator.afterStep(step);
20371
- const begin = (label2, kind, info) => ({
20372
- step: { label: label2, entries: [], structural: info.structural ?? false },
20373
- kind,
20374
- sheet: info.sheet,
20375
- ranges: [...info.ranges ?? []]
20376
- });
21498
+ const recalc = (step, mode = "apply") => calculator.afterStep(step, mode);
21499
+ const begin = (label2, kind, info) => {
21500
+ const step = { label: label2, entries: [], structural: info.structural ?? false };
21501
+ if (info.calc) step.calc = info.calc;
21502
+ return { step, kind, sheet: info.sheet, ranges: [...info.ranges ?? []] };
21503
+ };
20377
21504
  const finish = (current) => {
20378
21505
  if (!current.step.entries.length) return;
20379
21506
  history.push(current.step);
@@ -20398,10 +21525,12 @@ function createEditSession(workbook, options = {}) {
20398
21525
  const outer = !open;
20399
21526
  const current = open ?? begin(label2, kind, info);
20400
21527
  if (!outer) {
21528
+ delete current.step.calc;
20401
21529
  if (info.structural) current.step.structural = true;
20402
21530
  if (current.sheet === void 0 && info.sheet !== void 0) current.sheet = info.sheet;
20403
21531
  current.ranges.push(...info.ranges ?? []);
20404
21532
  }
21533
+ if (outer && info.calc) calculator.beforeStructural();
20405
21534
  open = current;
20406
21535
  const mark = current.step.entries.length;
20407
21536
  const befores = scopes.map((scope) => captureScope(workbook, scope));
@@ -20449,14 +21578,14 @@ function createEditSession(workbook, options = {}) {
20449
21578
  if (open) throw new Error(`Cannot ${kind} inside a batch`);
20450
21579
  const step = kind === "undo" ? history.undo(workbook) : history.redo(workbook);
20451
21580
  if (!step) return false;
20452
- recalc(step);
21581
+ recalc(step, kind);
20453
21582
  emit({ kind, label: step.label, structural: step.structural });
20454
21583
  return true;
20455
21584
  };
20456
21585
  return {
20457
21586
  workbook,
20458
21587
  calc,
20459
- setCellInput: (s, r, c, text) => setCellInput(ctx, s, r, c, text),
21588
+ setCellInput: (s, r, c, text2) => setCellInput(ctx, s, r, c, text2),
20460
21589
  setCellValue: (s, r, c, value2) => setCellValue(ctx, s, r, c, value2),
20461
21590
  setRangeValues: (s, at, rows2) => setRangeValues(ctx, s, at, rows2),
20462
21591
  clearRange: (s, range2, what) => clearRange(ctx, s, range2, what),
@@ -20489,7 +21618,7 @@ function createEditSession(workbook, options = {}) {
20489
21618
  setSheetState: (i2, state) => setSheetState(ctx, i2, state),
20490
21619
  setTabColor: (i2, color) => setTabColor(ctx, i2, color),
20491
21620
  setFreeze: (s, freeze) => setFreeze(ctx, s, freeze),
20492
- setComment: (s, at, text, author) => setComment(ctx, s, at, text, author),
21621
+ setComment: (s, at, text2, author) => setComment(ctx, s, at, text2, author),
20493
21622
  setHyperlink: (s, range2, link) => setHyperlink(ctx, s, range2, link),
20494
21623
  addConditionalFormat: (s, cf) => addConditionalFormat(ctx, s, cf),
20495
21624
  clearConditionalFormats: (s, range2) => clearConditionalFormats(ctx, s, range2),
@@ -20528,10 +21657,11 @@ function createEditSession(workbook, options = {}) {
20528
21657
  setDocumentProperties: (patch) => setDocumentProperties(ctx, patch),
20529
21658
  setAutoRecalc: (enabled) => setCalcMode(ctx, enabled ? "auto" : "manual"),
20530
21659
  autoRecalc: () => autoRecalc && calcModeOf(workbook) === "auto",
20531
- calculateNow() {
20532
- calculator.full();
21660
+ calculateNow(options2) {
21661
+ calculator.now(options2?.full ?? false);
20533
21662
  emit({ kind: "cells", label: "Calculate now", structural: false });
20534
21663
  },
21664
+ prepareCalculation: (opts) => calculator.prepare(opts?.timeRemaining),
20535
21665
  calculateSheet(s) {
20536
21666
  calculator.sheet(s);
20537
21667
  emit({ kind: "cells", label: "Calculate sheet", sheet: s, structural: false });
@@ -20566,18 +21696,19 @@ function createEditSession(workbook, options = {}) {
20566
21696
  onChange(listener) {
20567
21697
  listeners2.add(listener);
20568
21698
  return () => listeners2.delete(listener);
20569
- }
21699
+ },
21700
+ applyExternal: (apply) => applyExternal({ calculator, emit, busy: () => !!open }, apply)
20570
21701
  };
20571
21702
  }
20572
21703
 
20573
21704
  // xlsx/layout/cf-helpers.ts
20574
21705
  function literal(formula) {
20575
- const text = formula.trim();
20576
- if (/^[+-]?(\d+\.?\d*|\.\d+)(e[+-]?\d+)?$/i.test(text)) return Number(text);
20577
- const quoted = /^"((?:[^"]|"")*)"$/.exec(text);
21706
+ const text2 = formula.trim();
21707
+ if (/^[+-]?(\d+\.?\d*|\.\d+)(e[+-]?\d+)?$/i.test(text2)) return Number(text2);
21708
+ const quoted = /^"((?:[^"]|"")*)"$/.exec(text2);
20578
21709
  if (quoted) return (quoted[1] ?? "").replace(/""/g, '"');
20579
- if (/^TRUE$/i.test(text)) return true;
20580
- if (/^FALSE$/i.test(text)) return false;
21710
+ if (/^TRUE$/i.test(text2)) return true;
21711
+ if (/^FALSE$/i.test(text2)) return false;
20581
21712
  return void 0;
20582
21713
  }
20583
21714
  function localTodaySerial(date1904) {
@@ -20924,12 +22055,12 @@ function createConditionalFormatEvaluator(workbook, sheetIndex2, evaluate, optio
20924
22055
  case "beginsWith":
20925
22056
  case "endsWith": {
20926
22057
  if (isCellError(value2)) return false;
20927
- const text = valueText(value2).toLowerCase();
22058
+ const text2 = valueText(value2).toLowerCase();
20928
22059
  const needle = rule.text.toLowerCase();
20929
- if (rule.type === "containsText") return text.includes(needle);
20930
- if (rule.type === "notContainsText") return !text.includes(needle);
20931
- if (rule.type === "beginsWith") return text.startsWith(needle);
20932
- return text.endsWith(needle);
22060
+ if (rule.type === "containsText") return text2.includes(needle);
22061
+ if (rule.type === "notContainsText") return !text2.includes(needle);
22062
+ if (rule.type === "beginsWith") return text2.startsWith(needle);
22063
+ return text2.endsWith(needle);
20933
22064
  }
20934
22065
  case "timePeriod":
20935
22066
  return typeof value2 === "number" && inTimePeriod(rule.timePeriod, value2, today(), workbook.date1904);
@@ -21060,7 +22191,7 @@ function overflowExtent(sheet, metrics, row2, col, textWidth, hAlign, maxSpan =
21060
22191
  return result2();
21061
22192
  }
21062
22193
 
21063
- // xlsx/layout/font-family.ts
22194
+ // text/css-font-family.ts
21064
22195
  var FALLBACKS = {
21065
22196
  calibri: '"Calibri", "Carlito", "Segoe UI", Arial, sans-serif',
21066
22197
  "calibri light": '"Calibri Light", "Calibri", "Carlito", "Segoe UI", Arial, sans-serif',
@@ -21461,7 +22592,7 @@ function styleCssFont(style2) {
21461
22592
  }
21462
22593
  function measure(ctx) {
21463
22594
  const grid6 = ctx.grid();
21464
- return grid6 ? (text, style2) => grid6.measureText(text, styleCssFont(style2)) : void 0;
22595
+ return grid6 ? (text2, style2) => grid6.measureText(text2, styleCssFont(style2)) : void 0;
21465
22596
  }
21466
22597
  var UNSET = void 0;
21467
22598
 
@@ -21840,19 +22971,19 @@ function mergeMessageModules(modules) {
21840
22971
  for (const value2 of Object.values(module)) {
21841
22972
  if (!value2 || typeof value2 !== "object" || Array.isArray(value2)) continue;
21842
22973
  const entries = Object.entries(value2);
21843
- if (!entries.every(([, text]) => typeof text === "string")) continue;
21844
- for (const [key, text] of entries) merged[key] = text;
22974
+ if (!entries.every(([, text2]) => typeof text2 === "string")) continue;
22975
+ for (const [key, text2] of entries) merged[key] = text2;
21845
22976
  }
21846
22977
  }
21847
22978
  return merged;
21848
22979
  }
21849
22980
 
21850
22981
  // i18n/translator.ts
21851
- var SINGLE = /\{(\w+)\}/g;
22982
+ var SINGLE2 = /\{(\w+)\}/g;
21852
22983
  var DOUBLE = /\{\{\s*(\w+)\s*\}\}/g;
21853
22984
  function interpolate(template, params, placeholder = "single") {
21854
22985
  if (!params) return template;
21855
- const pattern = placeholder === "double" ? DOUBLE : SINGLE;
22986
+ const pattern = placeholder === "double" ? DOUBLE : SINGLE2;
21856
22987
  return template.replace(
21857
22988
  pattern,
21858
22989
  (match2, name) => Object.prototype.hasOwnProperty.call(params, name) && params[name] !== void 0 ? String(params[name]) : match2
@@ -21861,15 +22992,45 @@ function interpolate(template, params, placeholder = "single") {
21861
22992
  function createTranslator(messages, fallbacks = [], options = {}) {
21862
22993
  const placeholder = options.placeholder ?? "single";
21863
22994
  return (key, params) => {
21864
- let text = messages?.[key];
21865
- for (let i2 = 0; text === void 0 && i2 < fallbacks.length; i2++) text = fallbacks[i2]?.[key];
21866
- return interpolate(text ?? options.missing?.(key) ?? key, params, placeholder);
22995
+ let text2 = messages?.[key];
22996
+ for (let i2 = 0; text2 === void 0 && i2 < fallbacks.length; i2++) text2 = fallbacks[i2]?.[key];
22997
+ return interpolate(text2 ?? options.missing?.(key) ?? key, params, placeholder);
21867
22998
  };
21868
22999
  }
21869
23000
 
21870
23001
  // xlsx/ui/locales/merge.ts
21871
23002
  var mergeStringModules = mergeMessageModules;
21872
23003
 
23004
+ // xlsx/ui/locales/de/collab.ts
23005
+ var collab_exports = {};
23006
+ __export(collab_exports, {
23007
+ collab: () => collab
23008
+ });
23009
+ var collab = {
23010
+ Share: "Freigeben",
23011
+ "Session name": "Sitzungsname",
23012
+ "Start sharing": "Freigabe starten",
23013
+ "Stop sharing": "Freigabe beenden",
23014
+ "People in this session": "Personen in dieser Sitzung",
23015
+ "Session: {room}": "Sitzung: {room}",
23016
+ "Not sharing.": "Keine Freigabe aktiv.",
23017
+ "Connecting...": "Verbindung wird hergestellt...",
23018
+ "Connected.": "Verbunden.",
23019
+ "Joining the session...": "Sitzung wird beigetreten...",
23020
+ "Disconnected. Changes are kept and sent when the connection returns.": "Getrennt. \xC4nderungen bleiben erhalten und werden gesendet, sobald die Verbindung zur\xFCck ist.",
23021
+ "The connection failed. Changes are kept and sent when the connection returns.": "Die Verbindung ist fehlgeschlagen. \xC4nderungen bleiben erhalten und werden gesendet, sobald die Verbindung zur\xFCck ist.",
23022
+ "Edit this workbook together with other people. Everyone who joins the same session sees changes as they are made.": "Bearbeiten Sie diese Arbeitsmappe gemeinsam mit anderen. Alle, die derselben Sitzung beitreten, sehen \xC4nderungen sofort.",
23023
+ "Cell values, formulas, formats, sheets, rows, columns, merges and names are shared. Charts, pictures, comments, conditional formats, data validation, tables and page setup stay in this window.": "Zellwerte, Formeln, Formate, Bl\xE4tter, Zeilen, Spalten, verbundene Zellen und Namen werden geteilt. Diagramme, Bilder, Kommentare, bedingte Formatierungen, Daten\xFCberpr\xFCfung, Tabellen und Seiteneinrichtung bleiben in diesem Fenster.",
23024
+ "Without a server set by the page, a session connects only windows and tabs of this browser. Nothing is uploaded.": "Ohne einen von der Seite festgelegten Server verbindet eine Sitzung nur Fenster und Tabs dieses Browsers. Es wird nichts hochgeladen.",
23025
+ "Reconnected. Changes made while offline were sent.": "Wieder verbunden. Offline vorgenommene \xC4nderungen wurden gesendet.",
23026
+ "Connection lost. Keep working; your changes are sent when it returns.": "Verbindung verloren. Arbeiten Sie weiter; Ihre \xC4nderungen werden gesendet, sobald sie zur\xFCck ist.",
23027
+ "Sharing stopped because another workbook was opened.": "Die Freigabe wurde beendet, weil eine andere Arbeitsmappe ge\xF6ffnet wurde.",
23028
+ "Open or create a workbook before sharing it.": "\xD6ffnen oder erstellen Sie eine Arbeitsmappe, bevor Sie sie freigeben.",
23029
+ "Use 1 to 128 letters, digits, hyphens or underscores for the room name.": "Verwenden Sie f\xFCr den Sitzungsnamen 1 bis 128 Buchstaben, Ziffern, Bindestriche oder Unterstriche.",
23030
+ "This browser cannot share between windows; pass a server URL.": "Dieser Browser kann nicht zwischen Fenstern teilen; geben Sie eine Server-URL an.",
23031
+ "Stop the current collaboration session first.": "Beenden Sie zuerst die aktuelle Zusammenarbeitssitzung."
23032
+ };
23033
+
21873
23034
  // xlsx/ui/locales/de/commands.ts
21874
23035
  var commands_exports = {};
21875
23036
  __export(commands_exports, {
@@ -23439,11 +24600,17 @@ var NAVIGATION_STRINGS = {
23439
24600
  Hyperlinks: ["Liens hypertexte", "Hyperlinks", "Hiperv\xEDnculos", "\u8D85\u94FE\u63A5"],
23440
24601
  "Sort and filter": ["Tri et filtre", "Sortieren und Filtern", "Ordenar y filtrar", "\u6392\u5E8F\u548C\u7B5B\u9009"],
23441
24602
  "Freeze panes": ["Figer les volets", "Fenster fixieren", "Inmovilizar paneles", "\u51BB\u7ED3\u7A97\u683C"],
23442
- "Pivot tables and sparklines (kept in the file but not shown)": [
23443
- "Tableaux crois\xE9s dynamiques et graphiques sparkline (conserv\xE9s dans le fichier mais non affich\xE9s)",
23444
- "PivotTables und Sparklines (in der Datei erhalten, aber nicht angezeigt)",
23445
- "Tablas din\xE1micas y minigr\xE1ficos (se conservan en el archivo, pero no se muestran)",
23446
- "\u6570\u636E\u900F\u89C6\u8868\u548C\u8FF7\u4F60\u56FE(\u4FDD\u7559\u5728\u6587\u4EF6\u4E2D\u4F46\u4E0D\u663E\u793A)"
24603
+ "Pivot tables (kept in the file but not shown)": [
24604
+ "Tableaux crois\xE9s dynamiques (conserv\xE9s dans le fichier mais non affich\xE9s)",
24605
+ "PivotTables (in der Datei erhalten, aber nicht angezeigt)",
24606
+ "Tablas din\xE1micas (se conservan en el archivo, pero no se muestran)",
24607
+ "\u6570\u636E\u900F\u89C6\u8868(\u4FDD\u7559\u5728\u6587\u4EF6\u4E2D\u4F46\u4E0D\u663E\u793A)"
24608
+ ],
24609
+ "Creating or editing sparklines (existing ones are shown)": [
24610
+ "Cr\xE9ation ou modification de graphiques sparkline (ceux existants sont affich\xE9s)",
24611
+ "Sparklines erstellen oder bearbeiten (vorhandene werden angezeigt)",
24612
+ "Crear o editar minigr\xE1ficos (los existentes se muestran)",
24613
+ "\u521B\u5EFA\u6216\u7F16\u8F91\u8FF7\u4F60\u56FE(\u73B0\u6709\u8FF7\u4F60\u56FE\u4F1A\u663E\u793A)"
23447
24614
  ],
23448
24615
  "Show Formulas": ["Afficher les formules", "Formeln anzeigen", "Mostrar f\xF3rmulas", "\u663E\u793A\u516C\u5F0F"],
23449
24616
  "Manual calculation": ["Calcul manuel", "Manuelle Berechnung", "C\xE1lculo manual", "\u624B\u52A8\u8BA1\u7B97"],
@@ -25942,7 +27109,7 @@ var shell = {
25942
27109
  "Inspect Workbook": "Arbeitsmappe pr\xFCfen",
25943
27110
  "Compatibility notes": "Kompatibilit\xE4tshinweise",
25944
27111
  "No compatibility notes for this workbook.": "Keine Kompatibilit\xE4tshinweise f\xFCr diese Arbeitsmappe.",
25945
- "Charts are shown but not edited; pivot tables, sparklines, macros and other unsupported parts are kept in the file but not shown.": "Diagramme werden angezeigt, aber nicht bearbeitet; PivotTables, Sparklines, Makros und andere nicht unterst\xFCtzte Teile bleiben in der Datei erhalten, werden aber nicht angezeigt.",
27112
+ "Charts and sparklines are shown but not edited; pivot tables, macros and other unsupported parts are kept in the file but not shown.": "Diagramme und Sparklines werden angezeigt, aber nicht bearbeitet; PivotTables, Makros und andere nicht unterst\xFCtzte Teile bleiben in der Datei erhalten, werden aber nicht angezeigt.",
25946
27113
  "This workbook was opened from an Excel 97-2003 file (.xls). Save writes an Excel Workbook (.xlsx); the original .xls file is not changed.": "Diese Arbeitsmappe wurde aus einer Excel 97-2003-Datei (.xls) ge\xF6ffnet. Beim Speichern entsteht eine Excel-Arbeitsmappe (.xlsx); die urspr\xFCngliche .xls-Datei bleibt unver\xE4ndert.",
25947
27114
  "This workbook was opened from a CSV file, which keeps values only. Save writes an Excel Workbook (.xlsx); use Export to write CSV.": "Diese Arbeitsmappe wurde aus einer CSV-Datei ge\xF6ffnet, die nur Werte enth\xE4lt. Beim Speichern entsteht eine Excel-Arbeitsmappe (.xlsx); verwenden Sie Exportieren, um CSV zu schreiben.",
25948
27115
  "Macros are kept in the file but do not run in this editor.": "Makros bleiben in der Datei erhalten, werden in diesem Editor aber nicht ausgef\xFChrt.",
@@ -26059,11 +27226,42 @@ var shell = {
26059
27226
 
26060
27227
  // xlsx/ui/locales/de/index.ts
26061
27228
  var de = mergeStringModules({
27229
+ "./collab.ts": collab_exports,
26062
27230
  "./commands.ts": commands_exports,
26063
27231
  "./grid.ts": grid_exports,
26064
27232
  "./shell.ts": shell_exports
26065
27233
  });
26066
27234
 
27235
+ // xlsx/ui/locales/en/collab.ts
27236
+ var collab_exports2 = {};
27237
+ __export(collab_exports2, {
27238
+ collab: () => collab2
27239
+ });
27240
+ var collab2 = {
27241
+ Share: "Share",
27242
+ "Session name": "Session name",
27243
+ "Start sharing": "Start sharing",
27244
+ "Stop sharing": "Stop sharing",
27245
+ "People in this session": "People in this session",
27246
+ "Session: {room}": "Session: {room}",
27247
+ "Not sharing.": "Not sharing.",
27248
+ "Connecting...": "Connecting...",
27249
+ "Connected.": "Connected.",
27250
+ "Joining the session...": "Joining the session...",
27251
+ "Disconnected. Changes are kept and sent when the connection returns.": "Disconnected. Changes are kept and sent when the connection returns.",
27252
+ "The connection failed. Changes are kept and sent when the connection returns.": "The connection failed. Changes are kept and sent when the connection returns.",
27253
+ "Edit this workbook together with other people. Everyone who joins the same session sees changes as they are made.": "Edit this workbook together with other people. Everyone who joins the same session sees changes as they are made.",
27254
+ "Cell values, formulas, formats, sheets, rows, columns, merges and names are shared. Charts, pictures, comments, conditional formats, data validation, tables and page setup stay in this window.": "Cell values, formulas, formats, sheets, rows, columns, merges and names are shared. Charts, pictures, comments, conditional formats, data validation, tables and page setup stay in this window.",
27255
+ "Without a server set by the page, a session connects only windows and tabs of this browser. Nothing is uploaded.": "Without a server set by the page, a session connects only windows and tabs of this browser. Nothing is uploaded.",
27256
+ "Reconnected. Changes made while offline were sent.": "Reconnected. Changes made while offline were sent.",
27257
+ "Connection lost. Keep working; your changes are sent when it returns.": "Connection lost. Keep working; your changes are sent when it returns.",
27258
+ "Sharing stopped because another workbook was opened.": "Sharing stopped because another workbook was opened.",
27259
+ "Open or create a workbook before sharing it.": "Open or create a workbook before sharing it.",
27260
+ "Use 1 to 128 letters, digits, hyphens or underscores for the room name.": "Use 1 to 128 letters, digits, hyphens or underscores for the room name.",
27261
+ "This browser cannot share between windows; pass a server URL.": "This browser cannot share between windows; pass a server URL.",
27262
+ "Stop the current collaboration session first.": "Stop the current collaboration session first."
27263
+ };
27264
+
26067
27265
  // xlsx/ui/locales/en/commands.ts
26068
27266
  var commands_exports2 = {};
26069
27267
  __export(commands_exports2, {
@@ -26296,7 +27494,7 @@ var shell2 = {
26296
27494
  "Inspect Workbook": "Inspect Workbook",
26297
27495
  "Compatibility notes": "Compatibility notes",
26298
27496
  "No compatibility notes for this workbook.": "No compatibility notes for this workbook.",
26299
- "Charts are shown but not edited; pivot tables, sparklines, macros and other unsupported parts are kept in the file but not shown.": "Charts are shown but not edited; pivot tables, sparklines, macros and other unsupported parts are kept in the file but not shown.",
27497
+ "Charts and sparklines are shown but not edited; pivot tables, macros and other unsupported parts are kept in the file but not shown.": "Charts and sparklines are shown but not edited; pivot tables, macros and other unsupported parts are kept in the file but not shown.",
26300
27498
  "This workbook was opened from an Excel 97-2003 file (.xls). Save writes an Excel Workbook (.xlsx); the original .xls file is not changed.": "This workbook was opened from an Excel 97-2003 file (.xls). Save writes an Excel Workbook (.xlsx); the original .xls file is not changed.",
26301
27499
  "This workbook was opened from a CSV file, which keeps values only. Save writes an Excel Workbook (.xlsx); use Export to write CSV.": "This workbook was opened from a CSV file, which keeps values only. Save writes an Excel Workbook (.xlsx); use Export to write CSV.",
26302
27500
  "Macros are kept in the file but do not run in this editor.": "Macros are kept in the file but do not run in this editor.",
@@ -26413,11 +27611,42 @@ var shell2 = {
26413
27611
 
26414
27612
  // xlsx/ui/locales/en/index.ts
26415
27613
  var en = mergeStringModules({
27614
+ "./collab.ts": collab_exports2,
26416
27615
  "./commands.ts": commands_exports2,
26417
27616
  "./grid.ts": grid_exports2,
26418
27617
  "./shell.ts": shell_exports2
26419
27618
  });
26420
27619
 
27620
+ // xlsx/ui/locales/es/collab.ts
27621
+ var collab_exports3 = {};
27622
+ __export(collab_exports3, {
27623
+ collab: () => collab3
27624
+ });
27625
+ var collab3 = {
27626
+ Share: "Compartir",
27627
+ "Session name": "Nombre de la sesi\xF3n",
27628
+ "Start sharing": "Empezar a compartir",
27629
+ "Stop sharing": "Dejar de compartir",
27630
+ "People in this session": "Personas en esta sesi\xF3n",
27631
+ "Session: {room}": "Sesi\xF3n: {room}",
27632
+ "Not sharing.": "No se est\xE1 compartiendo.",
27633
+ "Connecting...": "Conectando...",
27634
+ "Connected.": "Conectado.",
27635
+ "Joining the session...": "Uni\xE9ndose a la sesi\xF3n...",
27636
+ "Disconnected. Changes are kept and sent when the connection returns.": "Desconectado. Los cambios se conservan y se env\xEDan cuando vuelva la conexi\xF3n.",
27637
+ "The connection failed. Changes are kept and sent when the connection returns.": "La conexi\xF3n fall\xF3. Los cambios se conservan y se env\xEDan cuando vuelva la conexi\xF3n.",
27638
+ "Edit this workbook together with other people. Everyone who joins the same session sees changes as they are made.": "Edite este libro junto con otras personas. Todos los que se unan a la misma sesi\xF3n ver\xE1n los cambios a medida que se hacen.",
27639
+ "Cell values, formulas, formats, sheets, rows, columns, merges and names are shared. Charts, pictures, comments, conditional formats, data validation, tables and page setup stay in this window.": "Se comparten los valores, f\xF3rmulas, formatos, hojas, filas, columnas, celdas combinadas y nombres. Los gr\xE1ficos, im\xE1genes, comentarios, formatos condicionales, validaci\xF3n de datos, tablas y la configuraci\xF3n de p\xE1gina permanecen en esta ventana.",
27640
+ "Without a server set by the page, a session connects only windows and tabs of this browser. Nothing is uploaded.": "Sin un servidor definido por la p\xE1gina, una sesi\xF3n solo conecta ventanas y pesta\xF1as de este navegador. No se sube nada.",
27641
+ "Reconnected. Changes made while offline were sent.": "Reconectado. Se enviaron los cambios hechos sin conexi\xF3n.",
27642
+ "Connection lost. Keep working; your changes are sent when it returns.": "Se perdi\xF3 la conexi\xF3n. Siga trabajando; sus cambios se enviar\xE1n cuando vuelva.",
27643
+ "Sharing stopped because another workbook was opened.": "Se dej\xF3 de compartir porque se abri\xF3 otro libro.",
27644
+ "Open or create a workbook before sharing it.": "Abra o cree un libro antes de compartirlo.",
27645
+ "Use 1 to 128 letters, digits, hyphens or underscores for the room name.": "Use de 1 a 128 letras, d\xEDgitos, guiones o guiones bajos para el nombre de la sesi\xF3n.",
27646
+ "This browser cannot share between windows; pass a server URL.": "Este navegador no puede compartir entre ventanas; indique la URL de un servidor.",
27647
+ "Stop the current collaboration session first.": "Detenga primero la sesi\xF3n de colaboraci\xF3n actual."
27648
+ };
27649
+
26421
27650
  // xlsx/ui/locales/es/commands.ts
26422
27651
  var commands_exports3 = {};
26423
27652
  __export(commands_exports3, {
@@ -26650,7 +27879,7 @@ var shell3 = {
26650
27879
  "Inspect Workbook": "Inspeccionar libro",
26651
27880
  "Compatibility notes": "Notas de compatibilidad",
26652
27881
  "No compatibility notes for this workbook.": "No hay notas de compatibilidad para este libro.",
26653
- "Charts are shown but not edited; pivot tables, sparklines, macros and other unsupported parts are kept in the file but not shown.": "Los gr\xE1ficos se muestran pero no se editan; las tablas din\xE1micas, minigr\xE1ficos, macros y otras partes no compatibles se conservan en el archivo pero no se muestran.",
27882
+ "Charts and sparklines are shown but not edited; pivot tables, macros and other unsupported parts are kept in the file but not shown.": "Los gr\xE1ficos y minigr\xE1ficos se muestran pero no se editan; las tablas din\xE1micas, macros y otras partes no compatibles se conservan en el archivo pero no se muestran.",
26654
27883
  "This workbook was opened from an Excel 97-2003 file (.xls). Save writes an Excel Workbook (.xlsx); the original .xls file is not changed.": "Este libro se abri\xF3 desde un archivo de Excel 97-2003 (.xls). Al guardar se escribe un libro de Excel (.xlsx); el archivo .xls original no se modifica.",
26655
27884
  "This workbook was opened from a CSV file, which keeps values only. Save writes an Excel Workbook (.xlsx); use Export to write CSV.": "Este libro se abri\xF3 desde un archivo CSV, que solo conserva valores. Al guardar se escribe un libro de Excel (.xlsx); use Exportar para escribir CSV.",
26656
27885
  "Macros are kept in the file but do not run in this editor.": "Las macros se conservan en el archivo pero no se ejecutan en este editor.",
@@ -26767,11 +27996,42 @@ var shell3 = {
26767
27996
 
26768
27997
  // xlsx/ui/locales/es/index.ts
26769
27998
  var es = mergeStringModules({
27999
+ "./collab.ts": collab_exports3,
26770
28000
  "./commands.ts": commands_exports3,
26771
28001
  "./grid.ts": grid_exports3,
26772
28002
  "./shell.ts": shell_exports3
26773
28003
  });
26774
28004
 
28005
+ // xlsx/ui/locales/fr/collab.ts
28006
+ var collab_exports4 = {};
28007
+ __export(collab_exports4, {
28008
+ collab: () => collab4
28009
+ });
28010
+ var collab4 = {
28011
+ Share: "Partager",
28012
+ "Session name": "Nom de la session",
28013
+ "Start sharing": "Commencer le partage",
28014
+ "Stop sharing": "Arr\xEAter le partage",
28015
+ "People in this session": "Personnes dans cette session",
28016
+ "Session: {room}": "Session : {room}",
28017
+ "Not sharing.": "Aucun partage en cours.",
28018
+ "Connecting...": "Connexion...",
28019
+ "Connected.": "Connect\xE9.",
28020
+ "Joining the session...": "Connexion \xE0 la session...",
28021
+ "Disconnected. Changes are kept and sent when the connection returns.": "D\xE9connect\xE9. Les modifications sont conserv\xE9es et envoy\xE9es au retour de la connexion.",
28022
+ "The connection failed. Changes are kept and sent when the connection returns.": "La connexion a \xE9chou\xE9. Les modifications sont conserv\xE9es et envoy\xE9es au retour de la connexion.",
28023
+ "Edit this workbook together with other people. Everyone who joins the same session sees changes as they are made.": "Modifiez ce classeur avec d'autres personnes. Toutes les personnes qui rejoignent la m\xEAme session voient les modifications au fur et \xE0 mesure.",
28024
+ "Cell values, formulas, formats, sheets, rows, columns, merges and names are shared. Charts, pictures, comments, conditional formats, data validation, tables and page setup stay in this window.": "Les valeurs, formules, formats, feuilles, lignes, colonnes, fusions et noms sont partag\xE9s. Les graphiques, images, commentaires, mises en forme conditionnelles, validations des donn\xE9es, tableaux et la mise en page restent dans cette fen\xEAtre.",
28025
+ "Without a server set by the page, a session connects only windows and tabs of this browser. Nothing is uploaded.": "Sans serveur d\xE9fini par la page, une session ne relie que les fen\xEAtres et onglets de ce navigateur. Rien n'est t\xE9l\xE9vers\xE9.",
28026
+ "Reconnected. Changes made while offline were sent.": "Reconnect\xE9. Les modifications faites hors connexion ont \xE9t\xE9 envoy\xE9es.",
28027
+ "Connection lost. Keep working; your changes are sent when it returns.": "Connexion perdue. Continuez \xE0 travailler ; vos modifications seront envoy\xE9es \xE0 son retour.",
28028
+ "Sharing stopped because another workbook was opened.": "Le partage s'est arr\xEAt\xE9 car un autre classeur a \xE9t\xE9 ouvert.",
28029
+ "Open or create a workbook before sharing it.": "Ouvrez ou cr\xE9ez un classeur avant de le partager.",
28030
+ "Use 1 to 128 letters, digits, hyphens or underscores for the room name.": "Utilisez de 1 \xE0 128 lettres, chiffres, traits d'union ou traits de soulignement pour le nom de la session.",
28031
+ "This browser cannot share between windows; pass a server URL.": "Ce navigateur ne peut pas partager entre fen\xEAtres ; indiquez l'URL d'un serveur.",
28032
+ "Stop the current collaboration session first.": "Arr\xEAtez d'abord la session de collaboration en cours."
28033
+ };
28034
+
26775
28035
  // xlsx/ui/locales/fr/commands.ts
26776
28036
  var commands_exports4 = {};
26777
28037
  __export(commands_exports4, {
@@ -27004,7 +28264,7 @@ var shell4 = {
27004
28264
  "Inspect Workbook": "Inspecter le classeur",
27005
28265
  "Compatibility notes": "Notes de compatibilit\xE9",
27006
28266
  "No compatibility notes for this workbook.": "Aucune note de compatibilit\xE9 pour ce classeur.",
27007
- "Charts are shown but not edited; pivot tables, sparklines, macros and other unsupported parts are kept in the file but not shown.": "Les graphiques sont affich\xE9s mais non modifiables ; les tableaux crois\xE9s dynamiques, graphiques sparkline, macros et autres \xE9l\xE9ments non pris en charge sont conserv\xE9s dans le fichier mais pas affich\xE9s.",
28267
+ "Charts and sparklines are shown but not edited; pivot tables, macros and other unsupported parts are kept in the file but not shown.": "Les graphiques et graphiques sparkline sont affich\xE9s mais non modifiables ; les tableaux crois\xE9s dynamiques, macros et autres \xE9l\xE9ments non pris en charge sont conserv\xE9s dans le fichier mais pas affich\xE9s.",
27008
28268
  "This workbook was opened from an Excel 97-2003 file (.xls). Save writes an Excel Workbook (.xlsx); the original .xls file is not changed.": "Ce classeur a \xE9t\xE9 ouvert \xE0 partir d'un fichier Excel 97-2003 (.xls). L'enregistrement cr\xE9e un classeur Excel (.xlsx) ; le fichier .xls d'origine n'est pas modifi\xE9.",
27009
28269
  "This workbook was opened from a CSV file, which keeps values only. Save writes an Excel Workbook (.xlsx); use Export to write CSV.": "Ce classeur a \xE9t\xE9 ouvert \xE0 partir d'un fichier CSV, qui ne conserve que les valeurs. L'enregistrement cr\xE9e un classeur Excel (.xlsx) ; utilisez Exporter pour \xE9crire un CSV.",
27010
28270
  "Macros are kept in the file but do not run in this editor.": "Les macros sont conserv\xE9es dans le fichier mais ne s'ex\xE9cutent pas dans cet \xE9diteur.",
@@ -27121,11 +28381,42 @@ var shell4 = {
27121
28381
 
27122
28382
  // xlsx/ui/locales/fr/index.ts
27123
28383
  var fr = mergeStringModules({
28384
+ "./collab.ts": collab_exports4,
27124
28385
  "./commands.ts": commands_exports4,
27125
28386
  "./grid.ts": grid_exports4,
27126
28387
  "./shell.ts": shell_exports4
27127
28388
  });
27128
28389
 
28390
+ // xlsx/ui/locales/zh-CN/collab.ts
28391
+ var collab_exports5 = {};
28392
+ __export(collab_exports5, {
28393
+ collab: () => collab5
28394
+ });
28395
+ var collab5 = {
28396
+ Share: "\u5171\u4EAB",
28397
+ "Session name": "\u4F1A\u8BDD\u540D\u79F0",
28398
+ "Start sharing": "\u5F00\u59CB\u5171\u4EAB",
28399
+ "Stop sharing": "\u505C\u6B62\u5171\u4EAB",
28400
+ "People in this session": "\u6B64\u4F1A\u8BDD\u4E2D\u7684\u4EBA\u5458",
28401
+ "Session: {room}": "\u4F1A\u8BDD\uFF1A{room}",
28402
+ "Not sharing.": "\u672A\u5728\u5171\u4EAB\u3002",
28403
+ "Connecting...": "\u6B63\u5728\u8FDE\u63A5...",
28404
+ "Connected.": "\u5DF2\u8FDE\u63A5\u3002",
28405
+ "Joining the session...": "\u6B63\u5728\u52A0\u5165\u4F1A\u8BDD...",
28406
+ "Disconnected. Changes are kept and sent when the connection returns.": "\u5DF2\u65AD\u5F00\u8FDE\u63A5\u3002\u66F4\u6539\u4F1A\u88AB\u4FDD\u7559\uFF0C\u5E76\u5728\u8FDE\u63A5\u6062\u590D\u540E\u53D1\u9001\u3002",
28407
+ "The connection failed. Changes are kept and sent when the connection returns.": "\u8FDE\u63A5\u5931\u8D25\u3002\u66F4\u6539\u4F1A\u88AB\u4FDD\u7559\uFF0C\u5E76\u5728\u8FDE\u63A5\u6062\u590D\u540E\u53D1\u9001\u3002",
28408
+ "Edit this workbook together with other people. Everyone who joins the same session sees changes as they are made.": "\u4E0E\u4ED6\u4EBA\u4E00\u8D77\u7F16\u8F91\u6B64\u5DE5\u4F5C\u7C3F\u3002\u52A0\u5165\u540C\u4E00\u4F1A\u8BDD\u7684\u6BCF\u4E2A\u4EBA\u90FD\u4F1A\u5B9E\u65F6\u770B\u5230\u66F4\u6539\u3002",
28409
+ "Cell values, formulas, formats, sheets, rows, columns, merges and names are shared. Charts, pictures, comments, conditional formats, data validation, tables and page setup stay in this window.": "\u5355\u5143\u683C\u503C\u3001\u516C\u5F0F\u3001\u683C\u5F0F\u3001\u5DE5\u4F5C\u8868\u3001\u884C\u3001\u5217\u3001\u5408\u5E76\u5355\u5143\u683C\u548C\u540D\u79F0\u4F1A\u88AB\u5171\u4EAB\u3002\u56FE\u8868\u3001\u56FE\u7247\u3001\u6279\u6CE8\u3001\u6761\u4EF6\u683C\u5F0F\u3001\u6570\u636E\u9A8C\u8BC1\u3001\u8868\u683C\u548C\u9875\u9762\u8BBE\u7F6E\u4EC5\u4FDD\u7559\u5728\u6B64\u7A97\u53E3\u4E2D\u3002",
28410
+ "Without a server set by the page, a session connects only windows and tabs of this browser. Nothing is uploaded.": "\u5982\u679C\u9875\u9762\u672A\u8BBE\u7F6E\u670D\u52A1\u5668\uFF0C\u4F1A\u8BDD\u53EA\u8FDE\u63A5\u6B64\u6D4F\u89C8\u5668\u4E2D\u7684\u7A97\u53E3\u548C\u6807\u7B7E\u9875\u3002\u4E0D\u4F1A\u4E0A\u4F20\u4EFB\u4F55\u5185\u5BB9\u3002",
28411
+ "Reconnected. Changes made while offline were sent.": "\u5DF2\u91CD\u65B0\u8FDE\u63A5\u3002\u79BB\u7EBF\u65F6\u6240\u505A\u7684\u66F4\u6539\u5DF2\u53D1\u9001\u3002",
28412
+ "Connection lost. Keep working; your changes are sent when it returns.": "\u8FDE\u63A5\u5DF2\u65AD\u5F00\u3002\u8BF7\u7EE7\u7EED\u5DE5\u4F5C\uFF0C\u8FDE\u63A5\u6062\u590D\u540E\u4F1A\u53D1\u9001\u60A8\u7684\u66F4\u6539\u3002",
28413
+ "Sharing stopped because another workbook was opened.": "\u7531\u4E8E\u6253\u5F00\u4E86\u53E6\u4E00\u4E2A\u5DE5\u4F5C\u7C3F\uFF0C\u5171\u4EAB\u5DF2\u505C\u6B62\u3002",
28414
+ "Open or create a workbook before sharing it.": "\u8BF7\u5148\u6253\u5F00\u6216\u521B\u5EFA\u5DE5\u4F5C\u7C3F\uFF0C\u7136\u540E\u518D\u5171\u4EAB\u3002",
28415
+ "Use 1 to 128 letters, digits, hyphens or underscores for the room name.": "\u4F1A\u8BDD\u540D\u79F0\u8BF7\u4F7F\u7528 1 \u5230 128 \u4E2A\u5B57\u6BCD\u3001\u6570\u5B57\u3001\u8FDE\u5B57\u7B26\u6216\u4E0B\u5212\u7EBF\u3002",
28416
+ "This browser cannot share between windows; pass a server URL.": "\u6B64\u6D4F\u89C8\u5668\u65E0\u6CD5\u5728\u7A97\u53E3\u4E4B\u95F4\u5171\u4EAB\uFF1B\u8BF7\u63D0\u4F9B\u670D\u52A1\u5668 URL\u3002",
28417
+ "Stop the current collaboration session first.": "\u8BF7\u5148\u505C\u6B62\u5F53\u524D\u534F\u4F5C\u4F1A\u8BDD\u3002"
28418
+ };
28419
+
27129
28420
  // xlsx/ui/locales/zh-CN/commands.ts
27130
28421
  var commands_exports5 = {};
27131
28422
  __export(commands_exports5, {
@@ -27358,7 +28649,7 @@ var shell5 = {
27358
28649
  "Inspect Workbook": "\u68C0\u67E5\u5DE5\u4F5C\u7C3F",
27359
28650
  "Compatibility notes": "\u517C\u5BB9\u6027\u8BF4\u660E",
27360
28651
  "No compatibility notes for this workbook.": "\u6B64\u5DE5\u4F5C\u7C3F\u6CA1\u6709\u517C\u5BB9\u6027\u8BF4\u660E\u3002",
27361
- "Charts are shown but not edited; pivot tables, sparklines, macros and other unsupported parts are kept in the file but not shown.": "\u56FE\u8868\u4EC5\u663E\u793A\uFF0C\u4E0D\u53EF\u7F16\u8F91\uFF1B\u6570\u636E\u900F\u89C6\u8868\u3001\u8FF7\u4F60\u56FE\u3001\u5B8F\u548C\u5176\u4ED6\u4E0D\u652F\u6301\u7684\u90E8\u5206\u4F1A\u4FDD\u7559\u5728\u6587\u4EF6\u4E2D\uFF0C\u4F46\u4E0D\u663E\u793A\u3002",
28652
+ "Charts and sparklines are shown but not edited; pivot tables, macros and other unsupported parts are kept in the file but not shown.": "\u56FE\u8868\u548C\u8FF7\u4F60\u56FE\u4EC5\u663E\u793A\uFF0C\u4E0D\u53EF\u7F16\u8F91\uFF1B\u6570\u636E\u900F\u89C6\u8868\u3001\u5B8F\u548C\u5176\u4ED6\u4E0D\u652F\u6301\u7684\u90E8\u5206\u4F1A\u4FDD\u7559\u5728\u6587\u4EF6\u4E2D\uFF0C\u4F46\u4E0D\u663E\u793A\u3002",
27362
28653
  "This workbook was opened from an Excel 97-2003 file (.xls). Save writes an Excel Workbook (.xlsx); the original .xls file is not changed.": "\u6B64\u5DE5\u4F5C\u7C3F\u662F\u4ECE Excel 97-2003 \u6587\u4EF6 (.xls) \u6253\u5F00\u7684\u3002\u4FDD\u5B58\u65F6\u4F1A\u5199\u5165 Excel \u5DE5\u4F5C\u7C3F (.xlsx)\uFF1B\u539F\u59CB .xls \u6587\u4EF6\u4E0D\u4F1A\u66F4\u6539\u3002",
27363
28654
  "This workbook was opened from a CSV file, which keeps values only. Save writes an Excel Workbook (.xlsx); use Export to write CSV.": "\u6B64\u5DE5\u4F5C\u7C3F\u662F\u4ECE\u4EC5\u4FDD\u7559\u503C\u7684 CSV \u6587\u4EF6\u6253\u5F00\u7684\u3002\u4FDD\u5B58\u65F6\u4F1A\u5199\u5165 Excel \u5DE5\u4F5C\u7C3F (.xlsx)\uFF1B\u4F7F\u7528\u201C\u5BFC\u51FA\u201D\u5199\u5165 CSV\u3002",
27364
28655
  "Macros are kept in the file but do not run in this editor.": "\u5B8F\u4F1A\u4FDD\u7559\u5728\u6587\u4EF6\u4E2D\uFF0C\u4F46\u4E0D\u4F1A\u5728\u6B64\u7F16\u8F91\u5668\u4E2D\u8FD0\u884C\u3002",
@@ -27475,6 +28766,7 @@ var shell5 = {
27475
28766
 
27476
28767
  // xlsx/ui/locales/zh-CN/index.ts
27477
28768
  var zhCN = mergeStringModules({
28769
+ "./collab.ts": collab_exports5,
27478
28770
  "./commands.ts": commands_exports5,
27479
28771
  "./grid.ts": grid_exports5,
27480
28772
  "./shell.ts": shell_exports5
@@ -27492,8 +28784,8 @@ var STRINGS = {
27492
28784
  function normalizeEditorLocale(value2) {
27493
28785
  return normalizeLocale(value2, EDITOR_LOCALES, "en");
27494
28786
  }
27495
- function fillTemplate(text, vars) {
27496
- return interpolate(text, vars);
28787
+ function fillTemplate(text2, vars) {
28788
+ return interpolate(text2, vars);
27497
28789
  }
27498
28790
  function translate(locale, key, vars) {
27499
28791
  return createTranslator(STRINGS[locale], [STRINGS.en])(key, vars);
@@ -27510,8 +28802,8 @@ function formatNumber2(locale, value2, digits2 = 10) {
27510
28802
  }
27511
28803
  function sheetBaseName(t) {
27512
28804
  const key = "sheet.default-name";
27513
- const text = t(key);
27514
- return text && text !== key ? text : "Sheet";
28805
+ const text2 = t(key);
28806
+ return text2 && text2 !== key ? text2 : "Sheet";
27515
28807
  }
27516
28808
 
27517
28809
  // xlsx/ui/commands/cells.ts
@@ -29271,6 +30563,11 @@ function tabMenu(state, actions) {
29271
30563
  );
29272
30564
  }
29273
30565
 
30566
+ // xlsx/ui/context.ts
30567
+ function historyOf(ctx) {
30568
+ return ctx.history ? ctx.history() : ctx.session();
30569
+ }
30570
+
29274
30571
  // xlsx/ui/dialogs.ts
29275
30572
  function createDialogRegistry(context, onError) {
29276
30573
  const openers = /* @__PURE__ */ new Map();
@@ -29526,8 +30823,8 @@ var DirtyState = class {
29526
30823
  };
29527
30824
 
29528
30825
  // xlsx/ui/formula-bar/name-resolve.ts
29529
- function parseSheetReference(workbook, activeSheet, text) {
29530
- const ref = text.trim().replace(/^=/, "");
30826
+ function parseSheetReference(workbook, activeSheet, text2) {
30827
+ const ref = text2.trim().replace(/^=/, "");
29531
30828
  const bang = ref.lastIndexOf("!");
29532
30829
  let sheet = activeSheet;
29533
30830
  if (bang >= 0) {
@@ -29545,8 +30842,8 @@ function findDefinedName2(workbook, sheet, name) {
29545
30842
  const matches2 = workbook.definedNames.filter((d) => d.name.toLowerCase() === lower2);
29546
30843
  return matches2.find((d) => d.localSheet === sheet) ?? matches2.find((d) => d.localSheet === void 0);
29547
30844
  }
29548
- function resolveNameBox(workbook, activeSheet, text) {
29549
- const input = text.trim();
30845
+ function resolveNameBox(workbook, activeSheet, text2) {
30846
+ const input = text2.trim();
29550
30847
  if (!input) return { kind: "invalid" };
29551
30848
  const ref = parseSheetReference(workbook, activeSheet, input);
29552
30849
  if (ref) return { kind: "go", ...ref };
@@ -29657,10 +30954,10 @@ function textAlign(hAlign) {
29657
30954
  if (hAlign === "justify" || hAlign === "distributed") return "justify";
29658
30955
  return "left";
29659
30956
  }
29660
- function repeatToFill(text, textWidth, cellWidth) {
29661
- if (!text || textWidth <= 0) return text;
30957
+ function repeatToFill(text2, textWidth, cellWidth) {
30958
+ if (!text2 || textWidth <= 0) return text2;
29662
30959
  const times = Math.max(1, Math.floor(cellWidth / textWidth));
29663
- return text.repeat(Math.min(times, 500));
30960
+ return text2.repeat(Math.min(times, 500));
29664
30961
  }
29665
30962
  function hashes(cellInnerWidth, hashWidth) {
29666
30963
  const n = Math.max(1, Math.floor(cellInnerWidth / Math.max(1, hashWidth)));
@@ -29670,9 +30967,9 @@ function hashes(cellInnerWidth, hashWidth) {
29670
30967
  // xlsx/ui/grid/cell-items.ts
29671
30968
  var PADDING = 2;
29672
30969
  function isBlankView(view) {
29673
- return view.text === "" && !view.fill && !hasBorders(view.borders) && !view.dataBar && !view.icon && !view.hasComment;
30970
+ return view.text === "" && !view.fill && !hasBorders(view.borders) && !view.dataBar && !view.icon && !view.sparkline && !view.hasComment;
29674
30971
  }
29675
- function textWidthOf(input, view, text) {
30972
+ function textWidthOf(input, view, text2) {
29676
30973
  if (view.rich?.length)
29677
30974
  return view.rich.reduce(
29678
30975
  (sum2, run) => sum2 + input.measure(run.text, cssFont(run.font, input.zoom)),
@@ -29680,7 +30977,7 @@ function textWidthOf(input, view, text) {
29680
30977
  );
29681
30978
  const font = cssFont(view.font, input.zoom);
29682
30979
  let widest = 0;
29683
- for (const line2 of text.split("\n")) widest = Math.max(widest, input.measure(line2, font));
30980
+ for (const line2 of text2.split("\n")) widest = Math.max(widest, input.measure(line2, font));
29684
30981
  return widest;
29685
30982
  }
29686
30983
  function makeItem(input, row2, col, view, merge2) {
@@ -29723,7 +31020,7 @@ function makeItem(input, row2, col, view, merge2) {
29723
31020
  return item;
29724
31021
  }
29725
31022
  if (view.overflow && !merge2 && measured > inner2) {
29726
- const extent = overflowExtent(
31023
+ const extent2 = overflowExtent(
29727
31024
  input.sheet,
29728
31025
  metrics,
29729
31026
  row2,
@@ -29731,9 +31028,9 @@ function makeItem(input, row2, col, view, merge2) {
29731
31028
  measured + 2 * PADDING,
29732
31029
  view.hAlign
29733
31030
  );
29734
- item.textLeft = extent.left - x;
29735
- item.textWidth = extent.right - extent.left;
29736
- item.overflowing = extent.startCol !== col || extent.endCol !== col;
31031
+ item.textLeft = extent2.left - x;
31032
+ item.textWidth = extent2.right - extent2.left;
31033
+ item.overflowing = extent2.startCol !== col || extent2.endCol !== col;
29737
31034
  }
29738
31035
  return item;
29739
31036
  }
@@ -29842,9 +31139,9 @@ function createEditBridge() {
29842
31139
  return () => listeners2.delete(listener);
29843
31140
  },
29844
31141
  begin: (options = {}) => driver?.begin(options) ?? false,
29845
- update(text, caret, source) {
31142
+ update(text2, caret, source) {
29846
31143
  if (!state.editing) return;
29847
- state = { ...state, text, caret, source };
31144
+ state = { ...state, text: text2, caret, source };
29848
31145
  driver?.changed(source);
29849
31146
  emit(source);
29850
31147
  },
@@ -30209,18 +31506,18 @@ function activeRef(selection) {
30209
31506
  return formatAddress(selection.active);
30210
31507
  }
30211
31508
  function parseSelectionRef(ref, workbook) {
30212
- let text = ref.trim();
31509
+ let text2 = ref.trim();
30213
31510
  let sheet;
30214
- const bang = text.lastIndexOf("!");
31511
+ const bang = text2.lastIndexOf("!");
30215
31512
  if (bang > 0) {
30216
- const name = text.slice(0, bang).replace(/^'(.*)'$/, "$1").replace(/''/g, "'");
31513
+ const name = text2.slice(0, bang).replace(/^'(.*)'$/, "$1").replace(/''/g, "'");
30217
31514
  const index2 = workbook?.sheets.findIndex((item) => item.name.toLowerCase() === name.toLowerCase()) ?? -1;
30218
31515
  if (index2 < 0) return void 0;
30219
31516
  sheet = index2;
30220
- text = text.slice(bang + 1);
31517
+ text2 = text2.slice(bang + 1);
30221
31518
  }
30222
31519
  const ranges = [];
30223
- for (const part of text.split(",")) {
31520
+ for (const part of text2.split(",")) {
30224
31521
  const range2 = parseRange(part.trim());
30225
31522
  if (!range2) return void 0;
30226
31523
  ranges.push(range2);
@@ -30386,7 +31683,7 @@ var CellViewCache = class {
30386
31683
  let result2 = null;
30387
31684
  if (workbook && sheet) {
30388
31685
  const stored = getCell(sheet, row2, col);
30389
- const plain2 = !stored && effectiveStyleId(sheet, row2, col) === 0 && !cfCovers(sheet, row2, col);
31686
+ const plain2 = !stored && effectiveStyleId(sheet, row2, col) === 0 && !cfCovers(sheet, row2, col) && !hasSparklineAt(sheet, row2, col);
30390
31687
  if (!plain2) {
30391
31688
  const view = cellView(workbook, this.#source.sheetIndex(), row2, col, this.#evaluator());
30392
31689
  result2 = isBlankView(view) ? null : view;
@@ -30449,6 +31746,7 @@ var ICON_PATHS = {
30449
31746
  link: "M10 14a4 4 0 0 0 5.7 0l3-3a4 4 0 0 0-5.7-5.7l-1 1 M14 10a4 4 0 0 0-5.7 0l-3 3a4 4 0 0 0 5.7 5.7l1-1",
30450
31747
  comment: "M4 5h16v11H10l-4 4v-4H4z M8 9h8 M8 12h5",
30451
31748
  comments: "M3 4h13v9H9l-3 3v-3H3z M9 17h6l3 3v-3h3V8h-3",
31749
+ share: "M14 4l6 6-6 6M20 10h-8a8 8 0 0 0-8 8",
30452
31750
  deleteComment: "M4 5h16v11H10l-4 4v-4H4z M9 8.5l5 5 M14 8.5l-5 5",
30453
31751
  previous: "M6 14l6-6 6 6",
30454
31752
  next: "M6 10l6 6 6-6",
@@ -31009,6 +32307,7 @@ exports.hasBorders = hasBorders;
31009
32307
  exports.hasWorkbook = hasWorkbook;
31010
32308
  exports.hashes = hashes;
31011
32309
  exports.helpTab = helpTab;
32310
+ exports.historyOf = historyOf;
31012
32311
  exports.icon = icon;
31013
32312
  exports.iconCount = iconCount;
31014
32313
  exports.iconSetRule = iconSetRule;