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
@@ -103,31 +103,31 @@ function quoteSheetName(name) {
103
103
  }
104
104
 
105
105
  // xlsx/address-r1c1.ts
106
- var dimension = (text, base, size) => {
107
- if (!text) return base;
108
- if (text.startsWith("[")) {
109
- const offset2 = Number(text.slice(1, -1));
106
+ var dimension = (text2, base, size) => {
107
+ if (!text2) return base;
108
+ if (text2.startsWith("[")) {
109
+ const offset2 = Number(text2.slice(1, -1));
110
110
  if (Math.abs(offset2) >= size) return void 0;
111
111
  return ((base + offset2) % size + size) % size;
112
112
  }
113
- const at = Number(text) - 1;
113
+ const at = Number(text2) - 1;
114
114
  return at >= 0 && at < size ? at : void 0;
115
115
  };
116
- function corner(text, base) {
117
- const cell = /^R(\[[+-]?\d+\]|\d+)?C(\[[+-]?\d+\]|\d+)?$/i.exec(text);
116
+ function corner(text2, base) {
117
+ const cell = /^R(\[[+-]?\d+\]|\d+)?C(\[[+-]?\d+\]|\d+)?$/i.exec(text2);
118
118
  if (cell) {
119
119
  const row2 = dimension(cell[1], base.row, MAX_ROW + 1);
120
120
  const col = dimension(cell[2], base.col, MAX_COL + 1);
121
121
  if (row2 === void 0 || col === void 0) return void 0;
122
122
  return { kind: "cell", range: { start: { row: row2, col }, end: { row: row2, col } } };
123
123
  }
124
- const rowMatch = /^R(\[[+-]?\d+\]|\d+)?$/i.exec(text);
124
+ const rowMatch = /^R(\[[+-]?\d+\]|\d+)?$/i.exec(text2);
125
125
  if (rowMatch) {
126
126
  const row2 = dimension(rowMatch[1], base.row, MAX_ROW + 1);
127
127
  if (row2 === void 0) return void 0;
128
128
  return { kind: "row", range: { start: { row: row2, col: 0 }, end: { row: row2, col: MAX_COL } } };
129
129
  }
130
- const colMatch = /^C(\[[+-]?\d+\]|\d+)?$/i.exec(text);
130
+ const colMatch = /^C(\[[+-]?\d+\]|\d+)?$/i.exec(text2);
131
131
  if (colMatch) {
132
132
  const col = dimension(colMatch[1], base.col, MAX_COL + 1);
133
133
  if (col === void 0) return void 0;
@@ -135,10 +135,10 @@ function corner(text, base) {
135
135
  }
136
136
  return void 0;
137
137
  }
138
- function parseR1C1Range(text, base) {
138
+ function parseR1C1Range(text2, base) {
139
139
  if (!Number.isInteger(base.row) || !Number.isInteger(base.col) || base.row < 0 || base.row > MAX_ROW || base.col < 0 || base.col > MAX_COL)
140
140
  return void 0;
141
- const parts = text.trim().split(":");
141
+ const parts = text2.trim().split(":");
142
142
  if (parts.length > 2) return void 0;
143
143
  const a = corner(parts[0] ?? "", base);
144
144
  const b = parts.length === 1 ? a : corner(parts[1] ?? "", base);
@@ -323,27 +323,27 @@ function styleAt(workbook, styleId) {
323
323
  }
324
324
  function internStyle(workbook, style2) {
325
325
  const key = styleKey(style2);
326
- const cache2 = styleCache(workbook);
327
- const known = cache2.get(key);
326
+ const cache3 = styleCache(workbook);
327
+ const known = cache3.get(key);
328
328
  if (known !== void 0 && workbook.styles[known] && styleKey(workbook.styles[known]) === key)
329
329
  return known;
330
330
  const index2 = workbook.styles.findIndex((candidate) => styleKey(candidate) === key);
331
331
  if (index2 >= 0) {
332
- cache2.set(key, index2);
332
+ cache3.set(key, index2);
333
333
  return index2;
334
334
  }
335
335
  workbook.styles.push(style2);
336
- cache2.set(key, workbook.styles.length - 1);
336
+ cache3.set(key, workbook.styles.length - 1);
337
337
  return workbook.styles.length - 1;
338
338
  }
339
339
  var caches = /* @__PURE__ */ new WeakMap();
340
340
  function styleCache(workbook) {
341
- let cache2 = caches.get(workbook);
342
- if (!cache2) {
343
- cache2 = /* @__PURE__ */ new Map();
344
- caches.set(workbook, cache2);
341
+ let cache3 = caches.get(workbook);
342
+ if (!cache3) {
343
+ cache3 = /* @__PURE__ */ new Map();
344
+ caches.set(workbook, cache3);
345
345
  }
346
- return cache2;
346
+ return cache3;
347
347
  }
348
348
  function compact(value2) {
349
349
  const out = {};
@@ -669,15 +669,15 @@ function isElapsedOnly(tokens) {
669
669
  }
670
670
  function renderElapsedOnly(serial, tokens) {
671
671
  const seconds = Math.round(Math.abs(serial) * 86400);
672
- let text = "";
672
+ let text2 = "";
673
673
  for (const tok of tokens) {
674
- if (tok.t === "lit") text += tok.v;
674
+ if (tok.t === "lit") text2 += tok.v;
675
675
  else if (tok.t === "elapsed") {
676
676
  const amount = tok.unit === "h" ? Math.floor(seconds / 3600) : tok.unit === "m" ? Math.floor(seconds / 60) : seconds;
677
- text += String(amount).padStart(tok.width, "0");
677
+ text2 += String(amount).padStart(tok.width, "0");
678
678
  }
679
679
  }
680
- return text;
680
+ return text2;
681
681
  }
682
682
  function renderDate(serial, tokens, date1904) {
683
683
  if (!(serial >= 0) || serial >= MAX_DATE_SERIAL + 1) return void 0;
@@ -686,21 +686,21 @@ function renderDate(serial, tokens, date1904) {
686
686
  if (p.year > 9999) return void 0;
687
687
  const twelve = tokens.some((t) => t.t === "ampm");
688
688
  const hour12 = p.hours % 12 === 0 ? 12 : p.hours % 12;
689
- let text = "";
689
+ let text2 = "";
690
690
  for (const tok of tokens) {
691
- if (tok.t === "lit") text += tok.v;
691
+ if (tok.t === "lit") text2 += tok.v;
692
692
  else if (tok.t === "ampm") {
693
693
  const pm = p.hours >= 12;
694
- text += tok.kind === "AM/PM" ? pm ? "PM" : "AM" : tok.kind === "A/P" ? pm ? "P" : "A" : pm ? "p" : "a";
694
+ text2 += tok.kind === "AM/PM" ? pm ? "PM" : "AM" : tok.kind === "A/P" ? pm ? "P" : "A" : pm ? "p" : "a";
695
695
  } else if (tok.t === "subsec") {
696
696
  const digits2 = String(p.subsec).padStart(precision, "0");
697
- text += `.${digits2.slice(0, tok.digits).padEnd(tok.digits, "0")}`;
697
+ text2 += `.${digits2.slice(0, tok.digits).padEnd(tok.digits, "0")}`;
698
698
  } else if (tok.t === "elapsed") {
699
699
  const amount = tok.unit === "h" ? Math.floor(p.totalSeconds / 3600) : tok.unit === "m" ? Math.floor(p.totalSeconds / 60) : p.totalSeconds;
700
- text += String(amount).padStart(tok.width, "0");
701
- } else if (tok.t === "date") text += datePart(tok.part, p, twelve ? hour12 : p.hours);
700
+ text2 += String(amount).padStart(tok.width, "0");
701
+ } else if (tok.t === "date") text2 += datePart(tok.part, p, twelve ? hour12 : p.hours);
702
702
  }
703
- return text;
703
+ return text2;
704
704
  }
705
705
  function datePart(part, p, hour) {
706
706
  switch (part) {
@@ -939,25 +939,25 @@ function renderFraction(value2, plan) {
939
939
  const dropSeparator = hideFraction || hasInt && intText === "" && numHash;
940
940
  const lastInt = plan.tokens.reduce((last, t, i2) => t.r === "int" ? i2 : last, -1);
941
941
  const firstNum = plan.tokens.findIndex((t) => t.r === "num");
942
- let text = "";
942
+ let text2 = "";
943
943
  let intDone = false;
944
944
  plan.tokens.forEach((tok, i2) => {
945
945
  if (tok.r === "lit") {
946
- if (!(dropSeparator && i2 > lastInt && i2 < firstNum)) text += tok.v;
946
+ if (!(dropSeparator && i2 > lastInt && i2 < firstNum)) text2 += tok.v;
947
947
  } else if (tok.r === "int") {
948
- if (!intDone) text += intText;
948
+ if (!intDone) text2 += intText;
949
949
  intDone = true;
950
950
  } else if (hideFraction) ; else if (blank) {
951
- if (tok.r === "num") text += " ";
952
- else if (tok.r === "slash") text += " ";
953
- else text += " ".repeat(plan.fixedDenominator ? plan.denWidth : 1);
951
+ if (tok.r === "num") text2 += " ";
952
+ else if (tok.r === "slash") text2 += " ";
953
+ else text2 += " ".repeat(plan.fixedDenominator ? plan.denWidth : 1);
954
954
  } else if (tok.r === "num") {
955
- if (tok.index === 0) text += padLeft(String(n), plan.numDigits);
956
- } else if (tok.r === "slash") text += "/";
957
- else if (plan.fixedDenominator) text += String(d);
958
- else if (tok.index === 0) text += padRight(String(d), plan.denDigits);
955
+ if (tok.index === 0) text2 += padLeft(String(n), plan.numDigits);
956
+ } else if (tok.r === "slash") text2 += "/";
957
+ else if (plan.fixedDenominator) text2 += String(d);
958
+ else if (tok.index === 0) text2 += padRight(String(d), plan.denDigits);
959
959
  });
960
- return { text, zero };
960
+ return { text: text2, zero };
961
961
  }
962
962
 
963
963
  // xlsx/numfmt/decimal.ts
@@ -1162,18 +1162,18 @@ function renderNumber(value2, plan) {
1162
1162
  } else rounded = roundDecimals(v, plan.fracDigits.length);
1163
1163
  const ints = plan.exponent && isZero(rounded) ? plan.intDigits.map(() => "0") : placeIntegers(integerPart(rounded), plan.intDigits, plan.grouping);
1164
1164
  const fracs = placeFraction(fractionPart(rounded, plan.fracDigits.length), plan.fracDigits);
1165
- let text = "";
1165
+ let text2 = "";
1166
1166
  for (const tok of plan.tokens) {
1167
- if (tok.r === "lit") text += tok.v;
1168
- else if (tok.r === "int") text += ints[tok.index] ?? "";
1169
- else if (tok.r === "frac") text += fracs[tok.index] ?? "";
1170
- else if (tok.r === "point") text += ".";
1167
+ if (tok.r === "lit") text2 += tok.v;
1168
+ else if (tok.r === "int") text2 += ints[tok.index] ?? "";
1169
+ else if (tok.r === "frac") text2 += fracs[tok.index] ?? "";
1170
+ else if (tok.r === "point") text2 += ".";
1171
1171
  else if (plan.exponent) {
1172
1172
  const sign2 = exp2 < 0 ? "-" : plan.exponent.plus ? "+" : "";
1173
- text += `E${sign2}${String(Math.abs(exp2)).padStart(plan.exponent.digits, "0")}`;
1173
+ text2 += `E${sign2}${String(Math.abs(exp2)).padStart(plan.exponent.digits, "0")}`;
1174
1174
  }
1175
1175
  }
1176
- return { text, zero: isZero(rounded) };
1176
+ return { text: text2, zero: isZero(rounded) };
1177
1177
  }
1178
1178
 
1179
1179
  // xlsx/numfmt/tokenizer.ts
@@ -1464,14 +1464,14 @@ function compileFormat(format) {
1464
1464
  const code = format.trim() === "" ? "General" : format;
1465
1465
  const sections = splitSections(code).slice(0, 4).map(compileSection);
1466
1466
  let numeric2;
1467
- let text;
1467
+ let text2;
1468
1468
  const last = sections[sections.length - 1];
1469
1469
  if (sections.length === 4) {
1470
1470
  numeric2 = sections.slice(0, 3);
1471
- text = sections[3];
1471
+ text2 = sections[3];
1472
1472
  } else if (last && last.kind === "text") {
1473
1473
  numeric2 = sections.slice(0, -1);
1474
- text = last;
1474
+ text2 = last;
1475
1475
  } else numeric2 = sections;
1476
1476
  if (numeric2.length === 0) numeric2 = [generalSection()];
1477
1477
  const conditional = numeric2.some((s) => s.condition !== void 0);
@@ -1481,7 +1481,7 @@ function compileFormat(format) {
1481
1481
  conditional,
1482
1482
  isDate: numeric2.some((s) => s.kind === "date")
1483
1483
  };
1484
- if (text) compiled.text = text;
1484
+ if (text2) compiled.text = text2;
1485
1485
  if (cache.size >= CACHE_LIMIT) cache.clear();
1486
1486
  cache.set(format, compiled);
1487
1487
  return compiled;
@@ -1555,16 +1555,16 @@ function generalDigits(v, width) {
1555
1555
  }
1556
1556
  function formatGeneral(value2, width = GENERAL_WIDTH) {
1557
1557
  if (!Number.isFinite(value2)) return "#NUM!";
1558
- const text = generalDigits(
1558
+ const text2 = generalDigits(
1559
1559
  toDigits(value2),
1560
1560
  Math.max(1, Math.min(GENERAL_WIDTH, Math.floor(width)))
1561
1561
  );
1562
- return value2 < 0 && text !== "0" ? `-${text}` : text;
1562
+ return value2 < 0 && text2 !== "0" ? `-${text2}` : text2;
1563
1563
  }
1564
1564
 
1565
1565
  // xlsx/numfmt/format.ts
1566
1566
  var OVERFLOW_TEXT = "########";
1567
- var result = (text, section) => section?.color ? { text, color: section.color } : { text };
1567
+ var result = (text2, section) => section?.color ? { text: text2, color: section.color } : { text: text2 };
1568
1568
  function tokenSource(tok) {
1569
1569
  switch (tok.t) {
1570
1570
  case "lit":
@@ -1597,21 +1597,21 @@ function tokenSource(tok) {
1597
1597
  return "";
1598
1598
  }
1599
1599
  }
1600
- function formatText(text, section) {
1601
- if (!section) return { text };
1600
+ function formatText(text2, section) {
1601
+ if (!section) return { text: text2 };
1602
1602
  let out = "";
1603
- for (const tok of section.tokens) out += tok.t === "text" ? text : tokenSource(tok);
1603
+ for (const tok of section.tokens) out += tok.t === "text" ? text2 : tokenSource(tok);
1604
1604
  return result(out, section);
1605
1605
  }
1606
1606
  function renderAbs(v, section, generalWidth) {
1607
1607
  if (section.fraction) return renderFraction(v, section.fraction);
1608
1608
  if (section.number) return renderNumber(v, section.number);
1609
1609
  const general = formatGeneral(Math.abs(v), generalWidth);
1610
- let text = "";
1610
+ let text2 = "";
1611
1611
  for (const tok of section.tokens) {
1612
- text += tok.t === "general" || tok.t === "text" ? general : tokenSource(tok);
1612
+ text2 += tok.t === "general" || tok.t === "text" ? general : tokenSource(tok);
1613
1613
  }
1614
- return { text, zero: general === "0" };
1614
+ return { text: text2, zero: general === "0" };
1615
1615
  }
1616
1616
  function hashFill(options) {
1617
1617
  const width = options.width ?? 0;
@@ -1621,7 +1621,7 @@ function hashFill(options) {
1621
1621
  function fitNumber(value2, format, options) {
1622
1622
  const date1904 = options.date1904 ?? false;
1623
1623
  const width = options.width ?? 0;
1624
- const fits = (text) => (options.measure ? options.measure(text) : text.length) <= width;
1624
+ const fits = (text2) => (options.measure ? options.measure(text2) : text2.length) <= width;
1625
1625
  const first2 = formatNumber(value2, format, date1904);
1626
1626
  if (fits(first2.text) || first2.text === OVERFLOW_TEXT) return first2;
1627
1627
  const choice = chooseSection(compileFormat(format), value2);
@@ -1644,15 +1644,15 @@ function formatNumber(value2, format, date1904, generalWidth) {
1644
1644
  if (section.kind === "date") {
1645
1645
  const serial = abs2 ? Math.abs(value2) : value2;
1646
1646
  if (isElapsedOnly(section.tokens)) {
1647
- const text3 = renderElapsedOnly(serial, section.tokens);
1648
- return result(serial < 0 ? `-${text3}` : text3, section);
1647
+ const text4 = renderElapsedOnly(serial, section.tokens);
1648
+ return result(serial < 0 ? `-${text4}` : text4, section);
1649
1649
  }
1650
- const text2 = renderDate(serial, section.tokens, date1904);
1651
- return text2 === void 0 ? { text: OVERFLOW_TEXT } : result(text2, section);
1650
+ const text3 = renderDate(serial, section.tokens, date1904);
1651
+ return text3 === void 0 ? { text: OVERFLOW_TEXT } : result(text3, section);
1652
1652
  }
1653
- const { text, zero } = renderAbs(value2, section, generalWidth);
1653
+ const { text: text2, zero } = renderAbs(value2, section, generalWidth);
1654
1654
  const minus = value2 < 0 && !abs2 && !zero;
1655
- return result(minus ? `-${text}` : text, section);
1655
+ return result(minus ? `-${text2}` : text2, section);
1656
1656
  }
1657
1657
  function formatValue(value2, format, options = {}) {
1658
1658
  if (value2 === null) return { text: "" };
@@ -1689,9 +1689,9 @@ function monthFromName(name) {
1689
1689
  );
1690
1690
  return index2 < 0 ? void 0 : index2 + 1;
1691
1691
  }
1692
- function fullYear(text) {
1693
- const y = Number(text);
1694
- if (text.length > 2) return y;
1692
+ function fullYear(text2) {
1693
+ const y = Number(text2);
1694
+ if (text2.length > 2) return y;
1695
1695
  return y < 30 ? 2e3 + y : 1900 + y;
1696
1696
  }
1697
1697
  function serialOf(year, month, day, date1904) {
@@ -1705,8 +1705,8 @@ function serialOf(year, month, day, date1904) {
1705
1705
  return serial < minimum ? void 0 : serial;
1706
1706
  }
1707
1707
  var TIME_RE = /^(\d{1,5}):(\d{1,2})(?::(\d{1,2}))?(?:\.(\d+))?\s*(am|pm|a|p)?$/i;
1708
- function parseTime(text) {
1709
- const m = TIME_RE.exec(text);
1708
+ function parseTime(text2) {
1709
+ const m = TIME_RE.exec(text2);
1710
1710
  if (!m) return void 0;
1711
1711
  const [, a = "0", b = "0", c, frac, ampm] = m;
1712
1712
  let hours = Number(a);
@@ -1733,11 +1733,11 @@ function parseTime(text) {
1733
1733
  return { fraction: (hours * 3600 + minutes * 60 + seconds) / 86400, format };
1734
1734
  }
1735
1735
  var currentYear = () => (/* @__PURE__ */ new Date()).getFullYear();
1736
- function parseDay(text) {
1737
- let m = /^(\d{4})[-/](\d{1,2})[-/](\d{1,2})$/.exec(text);
1736
+ function parseDay(text2) {
1737
+ let m = /^(\d{4})[-/](\d{1,2})[-/](\d{1,2})$/.exec(text2);
1738
1738
  if (m)
1739
1739
  return { year: Number(m[1]), month: Number(m[2]), day: Number(m[3]), format: "yyyy-mm-dd" };
1740
- m = /^(\d{1,2})([-/])(\d{1,2})\2(\d{2}|\d{4})$/.exec(text);
1740
+ m = /^(\d{1,2})([-/])(\d{1,2})\2(\d{2}|\d{4})$/.exec(text2);
1741
1741
  if (m)
1742
1742
  return {
1743
1743
  year: fullYear(m[4] ?? ""),
@@ -1745,9 +1745,9 @@ function parseDay(text) {
1745
1745
  day: Number(m[3]),
1746
1746
  format: "m/d/yyyy"
1747
1747
  };
1748
- m = /^(\d{1,2})\/(\d{1,2})$/.exec(text);
1748
+ m = /^(\d{1,2})\/(\d{1,2})$/.exec(text2);
1749
1749
  if (m) return { year: currentYear(), month: Number(m[1]), day: Number(m[2]), format: "d-mmm" };
1750
- m = /^(\d{1,2})[- ]([a-z]+)\.?(?:[- ,]+(\d{2}|\d{4}))?$/i.exec(text);
1750
+ m = /^(\d{1,2})[- ]([a-z]+)\.?(?:[- ,]+(\d{2}|\d{4}))?$/i.exec(text2);
1751
1751
  if (m) {
1752
1752
  const month = monthFromName(m[2] ?? "");
1753
1753
  if (!month) return void 0;
@@ -1755,12 +1755,12 @@ function parseDay(text) {
1755
1755
  return { year: currentYear(), month, day: Number(m[1]), format: "d-mmm" };
1756
1756
  return { year: fullYear(m[3]), month, day: Number(m[1]), format: "d-mmm-yy" };
1757
1757
  }
1758
- m = /^([a-z]+)\.?[- ](\d{1,2}),?[- ](\d{4})$/i.exec(text);
1758
+ m = /^([a-z]+)\.?[- ](\d{1,2}),?[- ](\d{4})$/i.exec(text2);
1759
1759
  if (m) {
1760
1760
  const month = monthFromName(m[1] ?? "");
1761
1761
  return month ? { year: Number(m[3]), month, day: Number(m[2]), format: "d-mmm-yy" } : void 0;
1762
1762
  }
1763
- m = /^([a-z]{3,})[- ]?(\d{1,2})$/i.exec(text);
1763
+ m = /^([a-z]{3,})[- ]?(\d{1,2})$/i.exec(text2);
1764
1764
  if (m) {
1765
1765
  const month = monthFromName(m[1] ?? "");
1766
1766
  if (!month) return void 0;
@@ -1770,19 +1770,19 @@ function parseDay(text) {
1770
1770
  return { year, month, day: n, format: "d-mmm" };
1771
1771
  return { year: fullYear(m[2] ?? ""), month, day: 1, format: "mmm-yy" };
1772
1772
  }
1773
- m = /^([a-z]+)\.?[- ](\d{4})$/i.exec(text);
1773
+ m = /^([a-z]+)\.?[- ](\d{4})$/i.exec(text2);
1774
1774
  if (m) {
1775
1775
  const month = monthFromName(m[1] ?? "");
1776
1776
  return month ? { year: Number(m[2]), month, day: 1, format: "mmm-yy" } : void 0;
1777
1777
  }
1778
1778
  return void 0;
1779
1779
  }
1780
- function parseDateTimeInput(text, date1904) {
1781
- const time = parseTime(text);
1780
+ function parseDateTimeInput(text2, date1904) {
1781
+ const time = parseTime(text2);
1782
1782
  if (time) return { value: time.fraction, numFmt: time.format };
1783
- 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);
1784
- const split = tail && tail.index > 0 ? [tail[0], text.slice(0, tail.index), tail[1]] : null;
1785
- const dayText = split ? split[1] ?? "" : text;
1783
+ 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);
1784
+ const split = tail && tail.index > 0 ? [tail[0], text2.slice(0, tail.index), tail[1]] : null;
1785
+ const dayText = split ? split[1] ?? "" : text2;
1786
1786
  const day = parseDay(dayText);
1787
1787
  if (!day) return void 0;
1788
1788
  const serial = serialOf(day.year, day.month, day.day, date1904);
@@ -1801,8 +1801,8 @@ function currencyFormat(symbol2, decimals2) {
1801
1801
  if (symbol2 === "$") return `$${body2}_);[Red]($${body2})`;
1802
1802
  return `${symbol2}${body2}`;
1803
1803
  }
1804
- function parseNumberInput(text) {
1805
- let s = text.trim();
1804
+ function parseNumberInput(text2) {
1805
+ let s = text2.trim();
1806
1806
  let negative = false;
1807
1807
  let parenthesized = false;
1808
1808
  if (s.startsWith("(") && s.endsWith(")")) {
@@ -1859,8 +1859,8 @@ function parseNumberInput(text) {
1859
1859
  if (grouped) return { value: value2, numFmt: decimals2 ? "#,##0.00" : "#,##0" };
1860
1860
  return { value: value2 };
1861
1861
  }
1862
- function parseFractionInput(text) {
1863
- const m = /^([-+]?)(\d+)\s+(\d+)\/(\d+)$/.exec(text.trim());
1862
+ function parseFractionInput(text2) {
1863
+ const m = /^([-+]?)(\d+)\s+(\d+)\/(\d+)$/.exec(text2.trim());
1864
1864
  if (!m) return void 0;
1865
1865
  const den = Number(m[4]);
1866
1866
  const num2 = Number(m[3]);
@@ -1871,27 +1871,27 @@ function parseFractionInput(text) {
1871
1871
  numFmt: den < 10 ? "# ?/?" : "# ??/??"
1872
1872
  };
1873
1873
  }
1874
- function parseCellInput(text, options = {}) {
1875
- if (text === "") return { value: null };
1876
- if (text.startsWith("=") && text.length > 1) return { value: null, formula: text.slice(1) };
1877
- if (text.startsWith("'")) return { value: text.slice(1) };
1878
- const trimmed = text.trim();
1879
- if (trimmed === "") return { value: text };
1874
+ function parseCellInput(text2, options = {}) {
1875
+ if (text2 === "") return { value: null };
1876
+ if (text2.startsWith("=") && text2.length > 1) return { value: null, formula: text2.slice(1) };
1877
+ if (text2.startsWith("'")) return { value: text2.slice(1) };
1878
+ const trimmed = text2.trim();
1879
+ if (trimmed === "") return { value: text2 };
1880
1880
  const upper2 = trimmed.toUpperCase();
1881
- if (trimmed === text) {
1881
+ if (trimmed === text2) {
1882
1882
  if (upper2 === "TRUE" || upper2 === "FALSE") return { value: upper2 === "TRUE" };
1883
1883
  if (isErrorCode(upper2)) return { value: cellError(upper2) };
1884
1884
  }
1885
1885
  const parsed = parseNumberInput(trimmed) ?? parseFractionInput(trimmed) ?? parseDateTimeInput(trimmed, options.date1904 ?? false);
1886
- if (!parsed) return { value: text };
1886
+ if (!parsed) return { value: text2 };
1887
1887
  return parsed.numFmt ? { value: parsed.value, numFmt: parsed.numFmt } : { value: parsed.value };
1888
1888
  }
1889
1889
 
1890
1890
  // xlsx/numfmt/decimals.ts
1891
1891
  function fromGeneral(delta, sample) {
1892
- const text = typeof sample === "number" ? formatGeneral(Math.abs(sample)) : "";
1893
- const sci = /^(\d)(?:\.(\d+))?E/.exec(text);
1894
- const shown = sci ? sci[2]?.length ?? 0 : /\.(\d+)/.exec(text)?.[1]?.length ?? 0;
1892
+ const text2 = typeof sample === "number" ? formatGeneral(Math.abs(sample)) : "";
1893
+ const sci = /^(\d)(?:\.(\d+))?E/.exec(text2);
1894
+ const shown = sci ? sci[2]?.length ?? 0 : /\.(\d+)/.exec(text2)?.[1]?.length ?? 0;
1895
1895
  const next = Math.max(0, shown + delta);
1896
1896
  const body2 = next ? `0.${"0".repeat(next)}` : "0";
1897
1897
  return sci ? `${body2}E+00` : body2;
@@ -1965,15 +1965,15 @@ var SPECIALS = {
1965
1965
  "#totals": "#Totals",
1966
1966
  "#this row": "#This Row"
1967
1967
  };
1968
- var unescape = (text) => text.replace(/'(.)/g, "$1");
1969
- function splitItems(text) {
1968
+ var unescape = (text2) => text2.replace(/'(.)/g, "$1");
1969
+ function splitItems(text2) {
1970
1970
  const items = [];
1971
1971
  let depth = 0;
1972
1972
  let current = "";
1973
- for (let i2 = 0; i2 < text.length; i2++) {
1974
- const ch = text[i2] ?? "";
1973
+ for (let i2 = 0; i2 < text2.length; i2++) {
1974
+ const ch = text2[i2] ?? "";
1975
1975
  if (ch === "'") {
1976
- current += ch + (text[i2 + 1] ?? "");
1976
+ current += ch + (text2[i2 + 1] ?? "");
1977
1977
  i2++;
1978
1978
  continue;
1979
1979
  }
@@ -1990,9 +1990,9 @@ function splitItems(text) {
1990
1990
  return items;
1991
1991
  }
1992
1992
  var strip = (item) => item.startsWith("[") && item.endsWith("]") ? item.slice(1, -1) : item;
1993
- function parseStructured(text, tableName) {
1994
- const open = text.indexOf("[");
1995
- const inner2 = text.slice(open + 1, -1);
1993
+ function parseStructured(text2, tableName) {
1994
+ const open = text2.indexOf("[");
1995
+ const inner2 = text2.slice(open + 1, -1);
1996
1996
  const out = { specials: [] };
1997
1997
  if (tableName) out.table = tableName;
1998
1998
  const addColumns = (spec2) => {
@@ -2017,7 +2017,7 @@ function parseStructured(text, tableName) {
2017
2017
  out.specials.push(special);
2018
2018
  return;
2019
2019
  }
2020
- if (out.column !== void 0) throw new FormulaError(`Invalid structured reference ${text}`);
2020
+ if (out.column !== void 0) throw new FormulaError(`Invalid structured reference ${text2}`);
2021
2021
  addColumns(item);
2022
2022
  };
2023
2023
  if (!inner2.includes("[")) {
@@ -2036,13 +2036,28 @@ function parseStructured(text, tableName) {
2036
2036
 
2037
2037
  // xlsx/formula/lexemes.ts
2038
2038
  var ERRORS_BY_LENGTH = [...ERROR_CODES].sort((a, b) => b.length - a.length);
2039
- var NAME_START = /[A-Za-z_\\\u00A1-\uFFFF]/;
2040
- var NAME_CHAR = /[A-Za-z0-9_.?\\\u00A1-\uFFFF]/;
2041
2039
  var NAME_RE = /^[A-Za-z_\\\u00A1-\uFFFF][A-Za-z0-9_.?\\\u00A1-\uFFFF]*/;
2042
2040
  var CELL_RE = /^(\$?)([A-Za-z]{1,3})(\$?)(\d{1,7})/;
2043
2041
  var COLS_RE = /^(\$?)([A-Za-z]{1,3}):(\$?)([A-Za-z]{1,3})/;
2044
2042
  var ROWS_RE = /^(\$?)(\d{1,7}):(\$?)(\d{1,7})/;
2045
- var NUMBER_RE2 = /^(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/;
2043
+ var NUMBER_RE2 = /^(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?/;
2044
+ var sticky = (re) => new RegExp(re.source.replace(/^\^/, ""), "y");
2045
+ var CELL_AT = sticky(CELL_RE);
2046
+ var COLS_AT = sticky(COLS_RE);
2047
+ var ROWS_AT = sticky(ROWS_RE);
2048
+ var NAME_AT = sticky(NAME_RE);
2049
+ var NUMBER_AT = sticky(NUMBER_RE2);
2050
+ function matchAt(re, source, at) {
2051
+ re.lastIndex = at;
2052
+ return re.exec(source);
2053
+ }
2054
+ var isDigitAt = (source, at) => isDigitCode(source.charCodeAt(at));
2055
+ function rangeStartAt(source, at, accept, max) {
2056
+ let i2 = source[at] === "$" ? at + 1 : at;
2057
+ const from = i2;
2058
+ while (i2 - from <= max && accept(source.charCodeAt(i2))) i2++;
2059
+ return i2 > from && i2 - from <= max && source[i2] === ":";
2060
+ }
2046
2061
  var OPERATORS = [
2047
2062
  "<=",
2048
2063
  ">=",
@@ -2060,7 +2075,12 @@ var OPERATORS = [
2060
2075
  ":",
2061
2076
  "@"
2062
2077
  ];
2063
- var isNameChar = (ch) => ch !== void 0 && NAME_CHAR.test(ch);
2078
+ var isLetterCode = (code) => code >= 65 && code <= 90 || code >= 97 && code <= 122;
2079
+ var isDigitCode = (code) => code >= 48 && code <= 57;
2080
+ var isNameStartCode = (code) => isLetterCode(code) || code === 95 || code === 92 || code >= 161;
2081
+ var isNameCharCode = (code) => isNameStartCode(code) || isDigitCode(code) || code === 46 || code === 63;
2082
+ var isSheetCharCode = (code) => isLetterCode(code) || isDigitCode(code) || code === 95 || code === 46 || code >= 161;
2083
+ var isNameChar = (ch) => ch !== void 0 && ch !== "" && isNameCharCode(ch.charCodeAt(0));
2064
2084
  function matchError(source, at) {
2065
2085
  const upper2 = source.slice(at, at + 14).toUpperCase();
2066
2086
  return ERRORS_BY_LENGTH.find((code) => upper2.startsWith(code));
@@ -2076,14 +2096,13 @@ var boundary = (source, end) => {
2076
2096
  return !isNameChar(next) && next !== "(" && next !== "!" && next !== "[";
2077
2097
  };
2078
2098
  function readReference(source, at) {
2079
- const rest = source.slice(at);
2080
- const cell = CELL_RE.exec(rest);
2099
+ const cell = matchAt(CELL_AT, source, at);
2081
2100
  if (cell) {
2082
2101
  const start = corner2(cell[1] ?? "", cell[2] ?? "", cell[3] ?? "", cell[4] ?? "");
2083
2102
  let length = cell[0].length;
2084
2103
  if (start) {
2085
- if (rest[length] === ":") {
2086
- const second = CELL_RE.exec(rest.slice(length + 1));
2104
+ if (source[at + length] === ":") {
2105
+ const second = matchAt(CELL_AT, source, at + length + 1);
2087
2106
  if (second) {
2088
2107
  const end = corner2(second[1] ?? "", second[2] ?? "", second[3] ?? "", second[4] ?? "");
2089
2108
  const total2 = length + 1 + second[0].length;
@@ -2097,8 +2116,8 @@ function readReference(source, at) {
2097
2116
  }
2098
2117
  length = 0;
2099
2118
  }
2100
- const cols = COLS_RE.exec(rest);
2101
- if (cols && boundary(source, at + cols[0].length) && !/^\d/.test(rest.slice(cols[0].length))) {
2119
+ const cols = rangeStartAt(source, at, isLetterCode, 3) ? matchAt(COLS_AT, source, at) : null;
2120
+ if (cols && boundary(source, at + cols[0].length) && !isDigitAt(source, at + cols[0].length)) {
2102
2121
  const c1 = columnIndex(cols[2] ?? "");
2103
2122
  const c2 = columnIndex(cols[4] ?? "");
2104
2123
  if (c1 >= 0 && c1 <= MAX_COL && c2 >= 0 && c2 <= MAX_COL) {
@@ -2112,7 +2131,7 @@ function readReference(source, at) {
2112
2131
  };
2113
2132
  }
2114
2133
  }
2115
- const rows2 = ROWS_RE.exec(rest);
2134
+ const rows2 = rangeStartAt(source, at, isDigitCode, 7) ? matchAt(ROWS_AT, source, at) : null;
2116
2135
  if (rows2 && boundary(source, at + rows2[0].length) && source[at + rows2[0].length] !== ".") {
2117
2136
  const r1 = Number(rows2[2]) - 1;
2118
2137
  const r2 = Number(rows2[4]) - 1;
@@ -2165,8 +2184,8 @@ function readBrackets(source, at) {
2165
2184
  }
2166
2185
  throw new FormulaError("Unterminated structured reference", at);
2167
2186
  }
2168
- function splitSheets(text) {
2169
- let rest = text;
2187
+ function splitSheets(text2) {
2188
+ let rest = text2;
2170
2189
  let book;
2171
2190
  const bookMatch = /^\[([^\]]*)\]/.exec(rest);
2172
2191
  if (bookMatch) {
@@ -2181,6 +2200,7 @@ function splitSheets(text) {
2181
2200
  if (book !== void 0) out.book = book;
2182
2201
  return out;
2183
2202
  }
2203
+ var PREFIX_AT = /(\[\d+\])?([A-Za-z0-9_.\u00A1-\uFFFF]+)(?::([A-Za-z0-9_.\u00A1-\uFFFF]+))?!/y;
2184
2204
  function readPrefix(source, at) {
2185
2205
  const ch = source[at];
2186
2206
  if (ch === "'") {
@@ -2189,19 +2209,27 @@ function readPrefix(source, at) {
2189
2209
  const length = quoted.length + 1;
2190
2210
  return { prefix: { text: source.slice(at, at + length), ...splitSheets(quoted.name) }, length };
2191
2211
  }
2192
- const m = /^(\[\d+\])?([A-Za-z0-9_.\u00A1-\uFFFF]+)(?::([A-Za-z0-9_.\u00A1-\uFFFF]+))?!/.exec(
2193
- source.slice(at)
2194
- );
2212
+ let i2 = at;
2213
+ if (ch === "[") {
2214
+ i2++;
2215
+ while (isDigitCode(source.charCodeAt(i2))) i2++;
2216
+ if (i2 === at + 1 || source[i2] !== "]") return void 0;
2217
+ i2++;
2218
+ }
2219
+ while (i2 < source.length && isSheetCharCode(source.charCodeAt(i2))) i2++;
2220
+ if (source[i2] !== "!" && source[i2] !== ":") return void 0;
2221
+ const m = matchAt(PREFIX_AT, source, at);
2195
2222
  if (!m) return void 0;
2196
2223
  if (!m[1] && /^\d/.test(m[2] ?? "") && !m[3]) return void 0;
2197
2224
  const raw = m[0].slice(0, -1);
2198
2225
  return { prefix: { text: m[0], ...splitSheets(raw) }, length: m[0].length };
2199
2226
  }
2200
- function numberLiteral(text) {
2201
- const [mantissa = "", exponent] = text.toLowerCase().split("e");
2227
+ function numberLiteral(text2) {
2228
+ if (text2.length <= 15) return Number(text2);
2229
+ const [mantissa = "", exponent] = text2.toLowerCase().split("e");
2202
2230
  const digits2 = mantissa.replace(".", "");
2203
2231
  const firstSignificant = digits2.search(/[1-9]/);
2204
- if (firstSignificant < 0 || digits2.length - firstSignificant <= 15) return Number(text);
2232
+ if (firstSignificant < 0 || digits2.length - firstSignificant <= 15) return Number(text2);
2205
2233
  const point = mantissa.includes(".") ? mantissa.indexOf(".") : mantissa.length;
2206
2234
  const kept = digits2.slice(0, firstSignificant + 15);
2207
2235
  const truncated = kept.length >= point ? `${kept.slice(0, point)}.${kept.slice(point)}` : kept + "0".repeat(point - kept.length);
@@ -2209,6 +2237,17 @@ function numberLiteral(text) {
2209
2237
  }
2210
2238
 
2211
2239
  // xlsx/formula/tokenizer.ts
2240
+ var SINGLE = {
2241
+ "(": "open",
2242
+ ")": "close",
2243
+ ",": "comma",
2244
+ ";": "semicolon",
2245
+ "{": "lbrace",
2246
+ "}": "rbrace"
2247
+ };
2248
+ var BOOK_INDEX = /\[\d+\]/y;
2249
+ var isSpace = (code) => code === 32 || code === 9 || code === 13 || code === 10;
2250
+ var isDigit3 = (code) => code >= 48 && code <= 57;
2212
2251
  function tokenize(formula) {
2213
2252
  const source = formula;
2214
2253
  const tokens = [];
@@ -2220,61 +2259,55 @@ function tokenize(formula) {
2220
2259
  };
2221
2260
  while (i2 < source.length) {
2222
2261
  const ch = source[i2] ?? "";
2262
+ const code = source.charCodeAt(i2);
2223
2263
  const start = i2;
2224
- if (/[ \t\r\n]/.test(ch)) {
2225
- const m = /^[ \t\r\n]+/.exec(source.slice(i2));
2226
- push3({ kind: "ws", text: m?.[0] ?? ch, start });
2264
+ if (isSpace(code)) {
2265
+ let j = i2 + 1;
2266
+ while (j < source.length && isSpace(source.charCodeAt(j))) j++;
2267
+ push3({ kind: "ws", text: source.slice(i2, j), start });
2227
2268
  continue;
2228
2269
  }
2229
2270
  if (ch === '"') {
2230
2271
  let j = i2 + 1;
2231
2272
  let value2 = "";
2232
2273
  for (; ; ) {
2233
- if (j >= source.length) throw new FormulaError("Unterminated string", start);
2234
- if (source[j] === '"') {
2235
- if (source[j + 1] === '"') {
2236
- value2 += '"';
2237
- j += 2;
2238
- continue;
2239
- }
2240
- break;
2274
+ const quote = source.indexOf('"', j);
2275
+ if (quote < 0) throw new FormulaError("Unterminated string", start);
2276
+ value2 += source.slice(j, quote);
2277
+ if (source[quote + 1] === '"') {
2278
+ value2 += '"';
2279
+ j = quote + 2;
2280
+ continue;
2241
2281
  }
2242
- value2 += source[j];
2243
- j++;
2282
+ j = quote;
2283
+ break;
2244
2284
  }
2245
2285
  push3({ kind: "string", text: source.slice(start, j + 1), start, value: value2 });
2246
2286
  continue;
2247
2287
  }
2248
2288
  if (ch === "#") {
2249
- const code = matchError(source, i2);
2250
- if (!code) throw new FormulaError(`Unexpected '#'`, start);
2289
+ const code2 = matchError(source, i2);
2290
+ if (!code2) throw new FormulaError(`Unexpected '#'`, start);
2251
2291
  push3({
2252
- kind: code === "#REF!" ? "ref" : "error",
2253
- text: source.slice(i2, i2 + code.length),
2292
+ kind: code2 === "#REF!" ? "ref" : "error",
2293
+ text: source.slice(i2, i2 + code2.length),
2254
2294
  start,
2255
- value: code
2295
+ value: code2
2256
2296
  });
2257
2297
  continue;
2258
2298
  }
2259
- const single = {
2260
- "(": "open",
2261
- ")": "close",
2262
- ",": "comma",
2263
- ";": "semicolon",
2264
- "{": "lbrace",
2265
- "}": "rbrace"
2266
- };
2267
- const kind = single[ch];
2299
+ const kind = SINGLE[ch];
2268
2300
  if (kind) {
2269
2301
  push3({ kind, text: ch, start });
2270
2302
  continue;
2271
2303
  }
2272
- if (ch === "[" && !/^\[\d+\]/.test(source.slice(i2))) {
2304
+ if (ch === "[" && !matchAt(BOOK_INDEX, source, i2)) {
2273
2305
  const length = readBrackets(source, i2);
2274
2306
  push3({ kind: "structured", text: source.slice(i2, i2 + length), start, value: "" });
2275
2307
  continue;
2276
2308
  }
2277
- const prefixed = ch === "'" || ch === "[" || NAME_START.test(ch) || /\d/.test(ch);
2309
+ const nameStart = isNameStartCode(code);
2310
+ const prefixed = ch === "'" || ch === "[" || nameStart || isDigit3(code);
2278
2311
  if (prefixed) {
2279
2312
  const prefix = readPrefix(source, i2);
2280
2313
  if (prefix) {
@@ -2283,14 +2316,15 @@ function tokenize(formula) {
2283
2316
  }
2284
2317
  if (ch === "'" || ch === "[") throw new FormulaError("Malformed sheet reference", start);
2285
2318
  }
2286
- if (/[\d.]/.test(ch) || ch === "$" || NAME_START.test(ch)) {
2319
+ const numeric2 = isDigit3(code) || ch === ".";
2320
+ if (numeric2 || ch === "$" || nameStart) {
2287
2321
  const ref = readReference(source, i2);
2288
2322
  if (ref) {
2289
2323
  push3(refToken(source, start, i2 + ref.length, ref.ref, void 0));
2290
2324
  continue;
2291
2325
  }
2292
- if (/[\d.]/.test(ch)) {
2293
- const m = NUMBER_RE2.exec(source.slice(i2));
2326
+ if (numeric2) {
2327
+ const m = matchAt(NUMBER_AT, source, i2);
2294
2328
  if (!m) throw new FormulaError(`Unexpected '${ch}'`, start);
2295
2329
  push3({ kind: "number", text: m[0], start, value: numberLiteral(m[0]) });
2296
2330
  continue;
@@ -2327,11 +2361,12 @@ function readAfterPrefix(source, at, start, prefix) {
2327
2361
  }
2328
2362
  const ref = readReference(source, at);
2329
2363
  if (ref) return refToken(source, start, at + ref.length, ref.ref, prefix);
2330
- if (NAME_START.test(source[at] ?? "")) return readName(source, at, start, prefix);
2364
+ if (at < source.length && isNameStartCode(source.charCodeAt(at)))
2365
+ return readName(source, at, start, prefix);
2331
2366
  throw new FormulaError("Invalid reference after sheet name", at);
2332
2367
  }
2333
2368
  function readName(source, at, start, prefix) {
2334
- const m = NAME_RE.exec(source.slice(at));
2369
+ const m = matchAt(NAME_AT, source, at);
2335
2370
  if (!m) throw new FormulaError("Invalid name", at);
2336
2371
  const name = m[0];
2337
2372
  let end = at + name.length;
@@ -2377,7 +2412,9 @@ var PREC_INTERSECT = 9;
2377
2412
  var PREC_RANGE = 10;
2378
2413
  var OPERAND_START = /* @__PURE__ */ new Set(["ref", "name", "func", "open", "structured"]);
2379
2414
  function parseFormula(formula) {
2380
- const all2 = tokenize(formula);
2415
+ return parseTokens(tokenize(formula));
2416
+ }
2417
+ function parseTokens(all2) {
2381
2418
  const tokens = [];
2382
2419
  const wsBefore = [];
2383
2420
  let sawWs = false;
@@ -2662,6 +2699,222 @@ function localDateToSerial(date, date1904 = date1904Mode) {
2662
2699
  return base + (utc - dayStart) / DAY_MS;
2663
2700
  }
2664
2701
 
2702
+ // xlsx/formula/area-index.ts
2703
+ var BUCKET_WIDTH = 64;
2704
+ var CHUNK_SHIFT = 6;
2705
+ var CHUNKS = 64;
2706
+ function push(map, key, value2) {
2707
+ const list = map.get(key);
2708
+ if (list) list.push(value2);
2709
+ else map.set(key, [value2]);
2710
+ }
2711
+ function inner(map, sheet) {
2712
+ let found = map.get(sheet);
2713
+ if (!found) map.set(sheet, found = /* @__PURE__ */ new Map());
2714
+ return found;
2715
+ }
2716
+ var AreaIndex = class {
2717
+ cells = /* @__PURE__ */ new Map();
2718
+ chunked = /* @__PURE__ */ new Map();
2719
+ tall = /* @__PURE__ */ new Map();
2720
+ wide = /* @__PURE__ */ new Map();
2721
+ add(area, node) {
2722
+ const { start, end } = area.range;
2723
+ if (start.row === end.row && end.col - start.col + 1 <= BUCKET_WIDTH) {
2724
+ const cells = inner(this.cells, area.sheet);
2725
+ for (let col = start.col; col <= end.col; col++) push(cells, cellKey(start.row, col), node);
2726
+ return;
2727
+ }
2728
+ const entry = { range: area.range, node };
2729
+ if (end.col - start.col + 1 > BUCKET_WIDTH) {
2730
+ const list = this.wide.get(area.sheet);
2731
+ if (list) list.push(entry);
2732
+ else this.wide.set(area.sheet, [entry]);
2733
+ return;
2734
+ }
2735
+ const first2 = start.row >> CHUNK_SHIFT;
2736
+ const last = end.row >> CHUNK_SHIFT;
2737
+ if (last - first2 + 1 > CHUNKS) {
2738
+ const cols2 = inner(this.tall, area.sheet);
2739
+ for (let c = start.col; c <= end.col; c++) push(cols2, c, entry);
2740
+ return;
2741
+ }
2742
+ const cols = inner(this.chunked, area.sheet);
2743
+ for (let c = start.col; c <= end.col; c++) {
2744
+ let chunks = cols.get(c);
2745
+ if (!chunks) cols.set(c, chunks = /* @__PURE__ */ new Map());
2746
+ for (let k = first2; k <= last; k++) push(chunks, k, entry);
2747
+ }
2748
+ }
2749
+ /** Items whose areas intersect `range` on `sheet` (each once). */
2750
+ dependents(sheet, range2, out) {
2751
+ const found = out instanceof Set ? out : /* @__PURE__ */ new Set();
2752
+ this.collect(sheet, range2, found);
2753
+ if (Array.isArray(out)) for (const node of found) out.push(node);
2754
+ }
2755
+ collect(sheet, range2, out) {
2756
+ const { start, end } = range2;
2757
+ const check3 = (list) => {
2758
+ if (list) {
2759
+ for (const entry of list) if (rangesIntersect(entry.range, range2)) out.add(entry.node);
2760
+ }
2761
+ };
2762
+ const cells = this.cells.get(sheet);
2763
+ if (cells) {
2764
+ const size = (end.row - start.row + 1) * (end.col - start.col + 1);
2765
+ if (size <= 4096) {
2766
+ for (let r = start.row; r <= end.row; r++) {
2767
+ for (let c = start.col; c <= end.col; c++) {
2768
+ const list = cells.get(cellKey(r, c));
2769
+ if (list) for (const node of list) out.add(node);
2770
+ }
2771
+ }
2772
+ } else {
2773
+ for (const [key, list] of cells) {
2774
+ const { row: row2, col } = keyToAddress(key);
2775
+ if (row2 >= start.row && row2 <= end.row && col >= start.col && col <= end.col)
2776
+ for (const node of list) out.add(node);
2777
+ }
2778
+ }
2779
+ }
2780
+ const columns = (map, visit2) => {
2781
+ if (!map) return;
2782
+ if (end.col - start.col + 1 <= map.size) {
2783
+ for (let c = start.col; c <= end.col; c++) if (map.has(c)) visit2(c);
2784
+ } else for (const c of map.keys()) if (c >= start.col && c <= end.col) visit2(c);
2785
+ };
2786
+ const chunked = this.chunked.get(sheet);
2787
+ const first2 = start.row >> CHUNK_SHIFT;
2788
+ const last = end.row >> CHUNK_SHIFT;
2789
+ columns(chunked, (c) => {
2790
+ const chunks = chunked?.get(c);
2791
+ if (last - first2 + 1 <= chunks.size) {
2792
+ for (let k = first2; k <= last; k++) check3(chunks.get(k));
2793
+ } else for (const [k, list] of chunks) if (k >= first2 && k <= last) check3(list);
2794
+ });
2795
+ const tall = this.tall.get(sheet);
2796
+ columns(tall, (c) => check3(tall?.get(c)));
2797
+ check3(this.wide.get(sheet));
2798
+ }
2799
+ };
2800
+
2801
+ // xlsx/formula/graph-index.ts
2802
+ var ColumnIndex = class {
2803
+ sheets = /* @__PURE__ */ new Map();
2804
+ constructor(nodes) {
2805
+ for (const node of nodes) {
2806
+ let cols = this.sheets.get(node.sheet);
2807
+ if (!cols) this.sheets.set(node.sheet, cols = /* @__PURE__ */ new Map());
2808
+ let list = cols.get(node.col);
2809
+ if (!list) cols.set(node.col, list = []);
2810
+ list.push(node);
2811
+ }
2812
+ for (const cols of this.sheets.values())
2813
+ for (const list of cols.values()) list.sort((a, b) => a.row - b.row);
2814
+ }
2815
+ nodesIn(area, out) {
2816
+ const cols = this.sheets.get(area.sheet);
2817
+ if (!cols) return;
2818
+ const { start, end } = area.range;
2819
+ const width = end.col - start.col + 1;
2820
+ const scan2 = (list) => {
2821
+ let lo = 0;
2822
+ let hi = list.length;
2823
+ while (lo < hi) {
2824
+ const mid = lo + hi >> 1;
2825
+ if (list[mid].row < start.row) lo = mid + 1;
2826
+ else hi = mid;
2827
+ }
2828
+ for (let i2 = lo; i2 < list.length; i2++) {
2829
+ const node = list[i2];
2830
+ if (node.row > end.row) break;
2831
+ out.push(node);
2832
+ }
2833
+ };
2834
+ if (width <= cols.size) {
2835
+ for (let c = start.col; c <= end.col; c++) {
2836
+ const list = cols.get(c);
2837
+ if (list) scan2(list);
2838
+ }
2839
+ } else {
2840
+ for (const [c, list] of cols) if (c >= start.col && c <= end.col) scan2(list);
2841
+ }
2842
+ }
2843
+ };
2844
+ var ReverseIndex = class extends AreaIndex {
2845
+ constructor(nodes = []) {
2846
+ super();
2847
+ for (const node of nodes) this.addNode(node);
2848
+ }
2849
+ /** Indexes one more formula's precedents. */
2850
+ addNode(node) {
2851
+ for (const dep of node.deps) this.add(dep, node);
2852
+ for (const dep of node.dynamicDeps) this.add(dep, node);
2853
+ }
2854
+ };
2855
+
2856
+ // xlsx/formula/engine-prepare.ts
2857
+ var CHECK_EVERY = 32;
2858
+ var GraphPreparation = class {
2859
+ constructor(workbook, create) {
2860
+ this.workbook = workbook;
2861
+ this.create = create;
2862
+ }
2863
+ workbook;
2864
+ create;
2865
+ reverse = new ReverseIndex();
2866
+ formulas = { dynamic: [], unvalued: [] };
2867
+ sheet = 0;
2868
+ rows;
2869
+ row = 0;
2870
+ cells;
2871
+ finished = false;
2872
+ /**
2873
+ * Adds formulas to the graph until `timeRemaining` (milliseconds, as an idle deadline reports
2874
+ * them) reaches zero, or until every formula is in. Returns true when the graph is complete.
2875
+ */
2876
+ run(timeRemaining) {
2877
+ let visited = 0;
2878
+ while (!this.finished) {
2879
+ const cells = this.cells ?? this.nextRow();
2880
+ if (!cells) continue;
2881
+ const next = cells.next();
2882
+ if (next.done) {
2883
+ this.cells = void 0;
2884
+ continue;
2885
+ }
2886
+ const [col, cell] = next.value;
2887
+ if (cell.formula) this.add(this.create(this.sheet, this.row, col, cell), cell);
2888
+ if (timeRemaining && ++visited % CHECK_EVERY === 0 && timeRemaining() <= 0) break;
2889
+ }
2890
+ return this.finished;
2891
+ }
2892
+ add(node, cell) {
2893
+ this.reverse.addNode(node);
2894
+ if (!node.legacy && !node.arrayRange) this.formulas.dynamic.push(node);
2895
+ if (cell.value === null && !node.keepCached) this.formulas.unvalued.push(node);
2896
+ }
2897
+ /** Moves to the next stored row (and sheet), or marks the walk finished. */
2898
+ nextRow() {
2899
+ for (; ; ) {
2900
+ const sheet = this.workbook.sheets[this.sheet];
2901
+ if (!sheet) {
2902
+ this.finished = true;
2903
+ return void 0;
2904
+ }
2905
+ this.rows ??= sheet.rows.entries();
2906
+ const next = this.rows.next();
2907
+ if (!next.done) {
2908
+ this.row = next.value[0];
2909
+ this.cells = next.value[1].entries();
2910
+ return this.cells;
2911
+ }
2912
+ this.rows = void 0;
2913
+ this.sheet++;
2914
+ }
2915
+ }
2916
+ };
2917
+
2665
2918
  // xlsx/formula/text-number.ts
2666
2919
  var MONTHS2 = [
2667
2920
  "jan",
@@ -2687,8 +2940,8 @@ function monthFromName2(name) {
2687
2940
  }
2688
2941
  var NUMBER_RE3 = /^(\d+(?:,\d{3,})+|\d*)(\.\d*)?(?:e([+-]?\d+))?$/i;
2689
2942
  var TIME_RE2 = /^(\d{1,4})(?::(\d+))?(?::(\d+(?:\.\d*)?))?(?:\s+(am|pm|a|p))?$/i;
2690
- function parsePlainNumber(text) {
2691
- const match2 = NUMBER_RE3.exec(text);
2943
+ function parsePlainNumber(text2) {
2944
+ const match2 = NUMBER_RE3.exec(text2);
2692
2945
  if (!match2) return void 0;
2693
2946
  const int2 = (match2[1] ?? "").replace(/,/g, "");
2694
2947
  const frac = match2[2] ?? "";
@@ -2696,8 +2949,8 @@ function parsePlainNumber(text) {
2696
2949
  const value2 = Number(`${int2 || "0"}${frac === "." ? "" : frac}${match2[3] ? `e${match2[3]}` : ""}`);
2697
2950
  return Number.isFinite(value2) ? value2 : void 0;
2698
2951
  }
2699
- function parseTime2(text) {
2700
- const match2 = TIME_RE2.exec(text);
2952
+ function parseTime2(text2) {
2953
+ const match2 = TIME_RE2.exec(text2);
2701
2954
  if (!match2) return void 0;
2702
2955
  let hours = Number(match2[1]);
2703
2956
  const minutes = Number(match2[2] ?? 0);
@@ -2720,28 +2973,28 @@ function serialOrUndefined(year, month, day) {
2720
2973
  }
2721
2974
  return ymdToSerial(year, month, day, currentDate1904());
2722
2975
  }
2723
- var fullYear2 = (text) => {
2724
- const year = Number(text);
2725
- if (text.length > 2) return year;
2976
+ var fullYear2 = (text2) => {
2977
+ const year = Number(text2);
2978
+ if (text2.length > 2) return year;
2726
2979
  return year < 30 ? 2e3 + year : 1900 + year;
2727
2980
  };
2728
- function parseDate(text) {
2981
+ function parseDate(text2) {
2729
2982
  const thisYear = (/* @__PURE__ */ new Date()).getFullYear();
2730
- let m = /^(\d{4})[-/](\d{1,2})[-/](\d{1,2})$/.exec(text);
2983
+ let m = /^(\d{4})[-/](\d{1,2})[-/](\d{1,2})$/.exec(text2);
2731
2984
  if (m) return serialOrUndefined(Number(m[1]), Number(m[2]), Number(m[3]));
2732
- m = /^(\d{1,2})\/(\d{1,2})(?:\/(\d{2}|\d{4}))?$/.exec(text);
2985
+ m = /^(\d{1,2})\/(\d{1,2})(?:\/(\d{2}|\d{4}))?$/.exec(text2);
2733
2986
  if (m) return serialOrUndefined(m[3] ? fullYear2(m[3]) : thisYear, Number(m[1]), Number(m[2]));
2734
- m = /^(\d{1,2})[-\s]([a-z]+)\.?(?:[-\s,]+(\d{2}|\d{4}))?$/i.exec(text);
2987
+ m = /^(\d{1,2})[-\s]([a-z]+)\.?(?:[-\s,]+(\d{2}|\d{4}))?$/i.exec(text2);
2735
2988
  if (m) {
2736
2989
  const month = monthFromName2(m[2] ?? "");
2737
2990
  if (month) return serialOrUndefined(m[3] ? fullYear2(m[3]) : thisYear, month, Number(m[1]));
2738
2991
  }
2739
- m = /^([a-z]+)\.?[-\s](\d{1,2})(?:,?\s*(\d{4}))?$/i.exec(text);
2992
+ m = /^([a-z]+)\.?[-\s](\d{1,2})(?:,?\s*(\d{4}))?$/i.exec(text2);
2740
2993
  if (m) {
2741
2994
  const month = monthFromName2(m[1] ?? "");
2742
2995
  if (month) return serialOrUndefined(m[3] ? Number(m[3]) : thisYear, month, Number(m[2]));
2743
2996
  }
2744
- m = /^([a-z]+)\.?[-\s](\d{4})$/i.exec(text);
2997
+ m = /^([a-z]+)\.?[-\s](\d{4})$/i.exec(text2);
2745
2998
  if (m) {
2746
2999
  const month = monthFromName2(m[1] ?? "");
2747
3000
  if (month) return serialOrUndefined(Number(m[2]), month, 1);
@@ -2749,43 +3002,43 @@ function parseDate(text) {
2749
3002
  return void 0;
2750
3003
  }
2751
3004
  function parseNumberText(input) {
2752
- let text = input.trim();
2753
- if (text === "") return void 0;
3005
+ let text2 = input.trim();
3006
+ if (text2 === "") return void 0;
2754
3007
  let scale2 = 1;
2755
- if (text.endsWith("%")) {
3008
+ if (text2.endsWith("%")) {
2756
3009
  scale2 = 0.01;
2757
- text = text.slice(0, -1).trimEnd();
3010
+ text2 = text2.slice(0, -1).trimEnd();
2758
3011
  }
2759
3012
  let sign2 = 1;
2760
- if (text.startsWith("(") && text.endsWith(")")) {
3013
+ if (text2.startsWith("(") && text2.endsWith(")")) {
2761
3014
  sign2 = -1;
2762
- text = text.slice(1, -1).trim();
3015
+ text2 = text2.slice(1, -1).trim();
2763
3016
  }
2764
- const signed = /^([+-]?)\s*\$?\s*([+-]?)\s*/.exec(text);
3017
+ const signed = /^([+-]?)\s*\$?\s*([+-]?)\s*/.exec(text2);
2765
3018
  const signText = `${signed?.[1] ?? ""}${signed?.[2] ?? ""}`;
2766
3019
  if (signText.length <= 1) {
2767
- const body2 = text.slice(signed?.[0].length ?? 0);
3020
+ const body2 = text2.slice(signed?.[0].length ?? 0);
2768
3021
  const plain2 = parsePlainNumber(body2);
2769
3022
  if (plain2 !== void 0) return (signText === "-" ? -1 : 1) * sign2 * plain2 * scale2;
2770
3023
  }
2771
3024
  if (scale2 !== 1 || sign2 !== 1) return void 0;
2772
- const fraction = /^([+-]?)(?:(\d+)\s+)?(\d+)\/(\d+)$/.exec(text);
3025
+ const fraction = /^([+-]?)(?:(\d+)\s+)?(\d+)\/(\d+)$/.exec(text2);
2773
3026
  if (fraction && fraction[2] !== void 0) {
2774
3027
  const den = Number(fraction[4]);
2775
3028
  if (den === 0) return void 0;
2776
3029
  const value2 = Number(fraction[2]) + Number(fraction[3]) / den;
2777
3030
  return fraction[1] === "-" ? -value2 : value2;
2778
3031
  }
2779
- const time = parseTime2(text);
3032
+ const time = parseTime2(text2);
2780
3033
  if (time !== void 0) return time;
2781
- const date = parseDate(text);
3034
+ const date = parseDate(text2);
2782
3035
  if (date !== void 0) return date;
2783
- const space = text.lastIndexOf(" ");
3036
+ const space = text2.lastIndexOf(" ");
2784
3037
  if (space > 0) {
2785
- const datePart2 = parseDate(text.slice(0, space).trim());
2786
- const timePart = parseTime2(text.slice(space + 1).trim());
3038
+ const datePart2 = parseDate(text2.slice(0, space).trim());
3039
+ const timePart = parseTime2(text2.slice(space + 1).trim());
2787
3040
  if (datePart2 !== void 0 && timePart !== void 0) return datePart2 + timePart;
2788
- const amPm = /^(.*\S)\s+(\S+\s*(?:am|pm))$/i.exec(text);
3041
+ const amPm = /^(.*\S)\s+(\S+\s*(?:am|pm))$/i.exec(text2);
2789
3042
  if (amPm) {
2790
3043
  const d = parseDate(amPm[1] ?? "");
2791
3044
  const t = parseTime2(amPm[2] ?? "");
@@ -3109,8 +3362,8 @@ function wildcardRegex(pattern) {
3109
3362
  }
3110
3363
  return new RegExp(`^${source}$`, "i");
3111
3364
  }
3112
- var escapeRegex = (text) => text.replace(/[.*+?^${}()|[\]\\/]/g, "\\$&");
3113
- var hasWildcards = (text) => /[*?~]/.test(text);
3365
+ var escapeRegex = (text2) => text2.replace(/[.*+?^${}()|[\]\\/]/g, "\\$&");
3366
+ var hasWildcards = (text2) => /[*?~]/.test(text2);
3114
3367
  function makeCriteria(criteria) {
3115
3368
  if (isError(criteria)) return (value2) => isError(value2) && value2.error === criteria.error;
3116
3369
  if (typeof criteria === "number") {
@@ -4362,22 +4615,22 @@ var NUMBER = String.raw`(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?`;
4362
4615
  var REAL_ONLY = new RegExp(`^([+-]?${NUMBER})$`);
4363
4616
  var IMAGINARY_ONLY = new RegExp(`^([+-]?(?:${NUMBER})?)([ij])$`);
4364
4617
  var BOTH = new RegExp(`^([+-]?${NUMBER})([+-])((?:${NUMBER})?)([ij])$`);
4365
- var coefficient = (text) => text === "" || text === "+" ? 1 : text === "-" ? -1 : Number(text);
4618
+ var coefficient = (text2) => text2 === "" || text2 === "+" ? 1 : text2 === "-" ? -1 : Number(text2);
4366
4619
  function parseComplex(value2) {
4367
4620
  if (isError(value2)) fail(value2);
4368
4621
  if (typeof value2 === "number") return { re: value2, im: 0, suffix: "i" };
4369
- const text = toText(value2);
4370
- if (text === "") return { re: 0, im: 0, suffix: "i" };
4371
- const real = REAL_ONLY.exec(text);
4622
+ const text2 = toText(value2);
4623
+ if (text2 === "") return { re: 0, im: 0, suffix: "i" };
4624
+ const real = REAL_ONLY.exec(text2);
4372
4625
  if (real) return { re: Number(real[1]), im: 0, suffix: "i" };
4373
- const imaginary = IMAGINARY_ONLY.exec(text);
4626
+ const imaginary = IMAGINARY_ONLY.exec(text2);
4374
4627
  if (imaginary)
4375
4628
  return {
4376
4629
  re: 0,
4377
4630
  im: coefficient(imaginary[1] ?? ""),
4378
4631
  suffix: imaginary[2] === "j" ? "j" : "i"
4379
4632
  };
4380
- const both = BOTH.exec(text);
4633
+ const both = BOTH.exec(text2);
4381
4634
  if (!both) return fail(ERR.NUM);
4382
4635
  const sign2 = both[2] === "-" ? -1 : 1;
4383
4636
  return {
@@ -4387,9 +4640,9 @@ function parseComplex(value2) {
4387
4640
  };
4388
4641
  }
4389
4642
  function digits(n) {
4390
- const text = Number(n.toPrecision(15)).toString();
4391
- const match2 = /^(-?[\d.]+)e([+-])(\d+)$/.exec(text);
4392
- return match2 ? `${match2[1]}E${match2[2]}${(match2[3] ?? "").padStart(2, "0")}` : text;
4643
+ const text2 = Number(n.toPrecision(15)).toString();
4644
+ const match2 = /^(-?[\d.]+)e([+-])(\d+)$/.exec(text2);
4645
+ return match2 ? `${match2[1]}E${match2[2]}${(match2[3] ?? "").padStart(2, "0")}` : text2;
4393
4646
  }
4394
4647
  function formatComplex({ re, im, suffix }) {
4395
4648
  const r = Math.abs(re) < 1e-15 * Math.max(1, Math.abs(im)) ? 0 : re;
@@ -4741,15 +4994,15 @@ var C7 = "Engineering";
4741
4994
  var BASES = { BIN: 2, OCT: 8, DEC: 10, HEX: 16 };
4742
4995
  var BITS = { BIN: 10, OCT: 30, DEC: 0, HEX: 40 };
4743
4996
  function parseBase(value2, base) {
4744
- const text = toText(scalar(value2)).trim().toUpperCase();
4997
+ const text2 = toText(scalar(value2)).trim().toUpperCase();
4745
4998
  if (base === "DEC") return Math.trunc(num(value2));
4746
4999
  const radix = BASES[base];
4747
5000
  const digits2 = radix === 2 ? /^[01]{1,10}$/ : radix === 8 ? /^[0-7]{1,10}$/ : /^[0-9A-F]{1,10}$/;
4748
- if (text === "") return 0;
4749
- if (!digits2.test(text)) fail(ERR.NUM);
4750
- let n = parseInt(text, radix);
5001
+ if (text2 === "") return 0;
5002
+ if (!digits2.test(text2)) fail(ERR.NUM);
5003
+ let n = parseInt(text2, radix);
4751
5004
  const bits = BITS[base];
4752
- if (text.length === 10 && n >= Math.pow(2, bits - 1)) n -= Math.pow(2, bits);
5005
+ if (text2.length === 10 && n >= Math.pow(2, bits - 1)) n -= Math.pow(2, bits);
4753
5006
  return n;
4754
5007
  }
4755
5008
  function formatBase(n, base, places) {
@@ -4758,10 +5011,10 @@ function formatBase(n, base, places) {
4758
5011
  const limit2 = Math.pow(2, bits - 1);
4759
5012
  if (n < -limit2 || n >= limit2) fail(ERR.NUM);
4760
5013
  if (n < 0) return (Math.pow(2, bits) + n).toString(radix).toUpperCase();
4761
- const text = n.toString(radix).toUpperCase();
4762
- if (places === void 0) return text;
4763
- if (places < text.length || places > 10) fail(ERR.NUM);
4764
- return text.padStart(Math.trunc(places), "0");
5014
+ const text2 = n.toString(radix).toUpperCase();
5015
+ if (places === void 0) return text2;
5016
+ if (places < text2.length || places > 10) fail(ERR.NUM);
5017
+ return text2.padStart(Math.trunc(places), "0");
4765
5018
  }
4766
5019
  var conversions = [];
4767
5020
  for (const from of Object.keys(BASES)) {
@@ -4896,9 +5149,9 @@ var ENGINEERING_FUNCTIONS = [
4896
5149
  1,
4897
5150
  1,
4898
5151
  (args) => {
4899
- const text = str(args[0]).trim().toUpperCase();
4900
- const negative = text.startsWith("-");
4901
- const body2 = negative ? text.slice(1) : text;
5152
+ const text2 = str(args[0]).trim().toUpperCase();
5153
+ const negative = text2.startsWith("-");
5154
+ const body2 = negative ? text2.slice(1) : text2;
4902
5155
  if (!/^[MDCLXVI]*$/.test(body2)) fail(ERR.VALUE);
4903
5156
  const value2 = { M: 1e3, D: 500, C: 100, L: 50, X: 10, V: 5, I: 1 };
4904
5157
  let total2 = 0;
@@ -4932,11 +5185,11 @@ var ENGINEERING_FUNCTIONS = [
4932
5185
  2,
4933
5186
  2,
4934
5187
  (args) => {
4935
- const text = str(args[0]).trim().toLowerCase();
5188
+ const text2 = str(args[0]).trim().toLowerCase();
4936
5189
  const radix = Math.trunc(num(args[1]));
4937
5190
  if (radix < 2 || radix > 36) fail(ERR.NUM);
4938
5191
  let total2 = 0;
4939
- for (const ch of text) {
5192
+ for (const ch of text2) {
4940
5193
  const d = parseInt(ch, 36);
4941
5194
  if (Number.isNaN(d) || d >= radix) fail(ERR.NUM);
4942
5195
  total2 = total2 * radix + d;
@@ -4973,14 +5226,14 @@ function couponFacts(settlement, maturity, frequency2, basis, ctx) {
4973
5226
  const daysToNext = basis === 0 ? daysInPeriod - daysSincePrevious : basis === 4 ? days360(s, next, true, ctx) : next - s;
4974
5227
  return { previous, next, count: count2, daysSincePrevious, daysInPeriod, daysToNext };
4975
5228
  }
4976
- var security = (name, description, pick2) => spec(
5229
+ var security = (name, description, pick3) => spec(
4977
5230
  name,
4978
5231
  C8,
4979
5232
  `${name}(settlement, maturity, frequency, [basis])`,
4980
5233
  description,
4981
5234
  3,
4982
5235
  4,
4983
- (args, ctx) => pick2(
5236
+ (args, ctx) => pick3(
4984
5237
  couponFacts(
4985
5238
  serialArg(args[0]),
4986
5239
  serialArg(args[1]),
@@ -5796,8 +6049,10 @@ var FINANCIAL_FUNCTIONS = [
5796
6049
 
5797
6050
  // xlsx/formula/references.ts
5798
6051
  function sheetIndex(host, name) {
6052
+ const sheets = host.workbook.sheets;
6053
+ for (let i2 = 0; i2 < sheets.length; i2++) if (sheets[i2]?.name === name) return i2;
5799
6054
  const lower2 = name.toLowerCase();
5800
- return host.workbook.sheets.findIndex((sheet) => sheet.name.toLowerCase() === lower2);
6055
+ return sheets.findIndex((sheet) => sheet.name.toLowerCase() === lower2);
5801
6056
  }
5802
6057
  function prefixSheets(host, prefix, current) {
5803
6058
  if (!prefix) return [current];
@@ -6857,15 +7112,15 @@ function offset(args) {
6857
7112
  { sheet: area.sheet, range: { start: { row: r1, col: c1 }, end: { row: r2, col: c2 } } }
6858
7113
  ]);
6859
7114
  }
6860
- function parseR1C1(text, ctx) {
6861
- const bang = text.lastIndexOf("!");
7115
+ function parseR1C1(text2, ctx) {
7116
+ const bang = text2.lastIndexOf("!");
6862
7117
  let sheet = ctx.sheet;
6863
- let body2 = text;
7118
+ let body2 = text2;
6864
7119
  if (bang >= 0) {
6865
- const name = text.slice(0, bang).replace(/^'(.*)'$/, "$1").replace(/''/g, "'");
7120
+ const name = text2.slice(0, bang).replace(/^'(.*)'$/, "$1").replace(/''/g, "'");
6866
7121
  sheet = sheetIndex(ctx.frame.host, name);
6867
7122
  if (sheet < 0) return void 0;
6868
- body2 = text.slice(bang + 1);
7123
+ body2 = text2.slice(bang + 1);
6869
7124
  }
6870
7125
  const range2 = parseR1C1Range(body2, { row: ctx.row, col: ctx.col });
6871
7126
  if (!range2) return void 0;
@@ -6928,9 +7183,9 @@ var REFERENCE_FUNCTIONS = [
6928
7183
  1,
6929
7184
  2,
6930
7185
  (args, ctx) => {
6931
- const text = str(args[0]).trim();
7186
+ const text2 = str(args[0]).trim();
6932
7187
  const a1 = args.length > 1 ? bool(args[1]) : true;
6933
- const ref = a1 ? ctx.parseReference(text) : parseR1C1(text, ctx);
7188
+ const ref = a1 ? ctx.parseReference(text2) : parseR1C1(text2, ctx);
6934
7189
  return ref ?? ERR.REF;
6935
7190
  },
6936
7191
  void 0,
@@ -7301,13 +7556,13 @@ var numberKey = (n) => `n${round15(n)}`;
7301
7556
  function equalityKey(criteria) {
7302
7557
  if (typeof criteria === "number") return numberKey(criteria);
7303
7558
  if (typeof criteria !== "string") return void 0;
7304
- const text = criteria.startsWith("=") ? criteria.slice(1) : criteria;
7305
- if (/^(<|>)/.test(text) || text === "" || hasWildcards(text) || text.startsWith("#"))
7559
+ const text2 = criteria.startsWith("=") ? criteria.slice(1) : criteria;
7560
+ if (/^(<|>)/.test(text2) || text2 === "" || hasWildcards(text2) || text2.startsWith("#"))
7306
7561
  return void 0;
7307
- const upper2 = text.toUpperCase();
7562
+ const upper2 = text2.toUpperCase();
7308
7563
  if (upper2 === "TRUE" || upper2 === "FALSE") return void 0;
7309
- const n = parseNumberText(text);
7310
- return n !== void 0 ? numberKey(n) : `s${text.toLowerCase()}`;
7564
+ const n = parseNumberText(text2);
7565
+ return n !== void 0 ? numberKey(n) : `s${text2.toLowerCase()}`;
7311
7566
  }
7312
7567
  function valueKeys(value2, out) {
7313
7568
  out.length = 0;
@@ -7367,9 +7622,9 @@ function readBlock(ctx, area, rows2, cols) {
7367
7622
  if (host.readBlock) return host.readBlock(area.sheet, range2);
7368
7623
  return Matrix.build(rows2, cols, (r, c) => ctx.readCell(area.sheet, row2 + r, col + c));
7369
7624
  }
7370
- function shapedMatrices(ctx, values2, sameShape) {
7625
+ function shapedMatrices(ctx, values2, sameShape2) {
7371
7626
  let { rows: rows2, cols } = shapeOf(values2[0] ?? null);
7372
- if (sameShape) {
7627
+ if (sameShape2) {
7373
7628
  for (const value2 of values2) {
7374
7629
  const shape2 = shapeOf(value2);
7375
7630
  if (shape2.rows !== rows2 || shape2.cols !== cols) fail(ERR.VALUE);
@@ -7395,12 +7650,12 @@ function shapedMatrices(ctx, values2, sameShape) {
7395
7650
  });
7396
7651
  return { matrices, total: total2, block: rows2 * cols };
7397
7652
  }
7398
- function matchingCells(ctx, pairs, target2, sameShape) {
7653
+ function matchingCells(ctx, pairs, target2, sameShape2) {
7399
7654
  const ranges = pairs.map((p) => p.range);
7400
7655
  const { matrices, total: total2, block } = shapedMatrices(
7401
7656
  ctx,
7402
7657
  target2 === void 0 ? ranges : [...ranges, target2],
7403
- sameShape
7658
+ sameShape2
7404
7659
  );
7405
7660
  const tests = pairs.map((p) => makeCriteria(scalar(p.criteria)));
7406
7661
  const values2 = matrices[matrices.length - 1];
@@ -7439,7 +7694,7 @@ function indexedCandidates(pairs, matrices) {
7439
7694
  }
7440
7695
  return void 0;
7441
7696
  }
7442
- var matchingValues = (ctx, pairs, target2, sameShape) => matchingCells(ctx, pairs, target2, sameShape).values;
7697
+ var matchingValues = (ctx, pairs, target2, sameShape2) => matchingCells(ctx, pairs, target2, sameShape2).values;
7443
7698
  function criteriaPairs(args, from) {
7444
7699
  if ((args.length - from) % 2 !== 0) fail(ERR.VALUE);
7445
7700
  const pairs = [];
@@ -10413,12 +10668,12 @@ function fixed(value2, decimals2, commas) {
10413
10668
  const d = Math.trunc(decimals2);
10414
10669
  const rounded = roundTo(value2, d, "half");
10415
10670
  const abs2 = Math.abs(rounded);
10416
- let text = abs2.toFixed(Math.max(0, Math.min(d, 99)));
10671
+ let text2 = abs2.toFixed(Math.max(0, Math.min(d, 99)));
10417
10672
  if (commas) {
10418
- const [int2 = "", frac] = text.split(".");
10419
- text = int2.replace(/\B(?=(\d{3})+(?!\d))/g, ",") + (frac !== void 0 ? `.${frac}` : "");
10673
+ const [int2 = "", frac] = text2.split(".");
10674
+ text2 = int2.replace(/\B(?=(\d{3})+(?!\d))/g, ",") + (frac !== void 0 ? `.${frac}` : "");
10420
10675
  }
10421
- return rounded < 0 ? `-${text}` : text;
10676
+ return rounded < 0 ? `-${text2}` : text2;
10422
10677
  }
10423
10678
  var TEXT_CONVERT = [
10424
10679
  spec(
@@ -10454,19 +10709,19 @@ var TEXT_CONVERT = [
10454
10709
  (args) => {
10455
10710
  const decimal = (args.length > 1 ? str(args[1]) : ".").charAt(0) || ".";
10456
10711
  const group = (args.length > 2 ? str(args[2]) : ",").charAt(0) || ",";
10457
- let text = str(args[0]).replace(/\s+/g, "");
10458
- if (text === "") return 0;
10712
+ let text2 = str(args[0]).replace(/\s+/g, "");
10713
+ if (text2 === "") return 0;
10459
10714
  let percent = 0;
10460
- while (text.endsWith("%")) {
10715
+ while (text2.endsWith("%")) {
10461
10716
  percent++;
10462
- text = text.slice(0, -1);
10717
+ text2 = text2.slice(0, -1);
10463
10718
  }
10464
- const decimalAt = text.indexOf(decimal);
10465
- if (decimalAt >= 0 && text.slice(decimalAt + 1).includes(group)) fail(ERR.VALUE);
10466
- text = text.split(group).join("");
10467
- if (decimal !== ".") text = text.replace(decimal, ".");
10468
- const value2 = Number(text);
10469
- if (!/^[+-]?(\d+\.?\d*|\.\d+)(e[+-]?\d+)?$/i.test(text) || !Number.isFinite(value2))
10719
+ const decimalAt = text2.indexOf(decimal);
10720
+ if (decimalAt >= 0 && text2.slice(decimalAt + 1).includes(group)) fail(ERR.VALUE);
10721
+ text2 = text2.split(group).join("");
10722
+ if (decimal !== ".") text2 = text2.replace(decimal, ".");
10723
+ const value2 = Number(text2);
10724
+ if (!/^[+-]?(\d+\.?\d*|\.\d+)(e[+-]?\d+)?$/i.test(text2) || !Number.isFinite(value2))
10470
10725
  fail(ERR.VALUE);
10471
10726
  return value2 / Math.pow(100, percent);
10472
10727
  }
@@ -10489,8 +10744,8 @@ var TEXT_CONVERT = [
10489
10744
  2,
10490
10745
  (args) => {
10491
10746
  const value2 = num(args[0]);
10492
- const text = fixed(Math.abs(value2), optNum(args, 1, 2), true);
10493
- return value2 < 0 && text.replace(/[0.,]/g, "") !== "" ? `($${text})` : `$${text}`;
10747
+ const text2 = fixed(Math.abs(value2), optNum(args, 1, 2), true);
10748
+ return value2 < 0 && text2.replace(/[0.,]/g, "") !== "" ? `($${text2})` : `$${text2}`;
10494
10749
  }
10495
10750
  ),
10496
10751
  spec("CHAR", C33, "CHAR(number)", "The character for a code (Windows-1252).", 1, 1, (args) => {
@@ -10499,9 +10754,9 @@ var TEXT_CONVERT = [
10499
10754
  return String.fromCharCode(CP1252[n] ?? n);
10500
10755
  }),
10501
10756
  spec("CODE", C33, "CODE(text)", "The code of the first character (Windows-1252).", 1, 1, (args) => {
10502
- const text = str(args[0]);
10503
- if (text === "") fail(ERR.VALUE);
10504
- const code = text.charCodeAt(0);
10757
+ const text2 = str(args[0]);
10758
+ if (text2 === "") fail(ERR.VALUE);
10759
+ const code = text2.charCodeAt(0);
10505
10760
  return CP1252_REVERSE.get(code) ?? (code <= 255 ? code : 63);
10506
10761
  }),
10507
10762
  spec("UNICHAR", C33, "UNICHAR(number)", "The Unicode character for a code point.", 1, 1, (args) => {
@@ -10510,9 +10765,9 @@ var TEXT_CONVERT = [
10510
10765
  return String.fromCodePoint(n);
10511
10766
  }),
10512
10767
  spec("UNICODE", C33, "UNICODE(text)", "The code point of the first character.", 1, 1, (args) => {
10513
- const text = str(args[0]);
10514
- if (text === "") fail(ERR.VALUE);
10515
- return text.codePointAt(0) ?? fail(ERR.VALUE);
10768
+ const text2 = str(args[0]);
10769
+ if (text2 === "") fail(ERR.VALUE);
10770
+ return text2.codePointAt(0) ?? fail(ERR.VALUE);
10516
10771
  }),
10517
10772
  spec("T", C33, "T(value)", "The text of a value, or empty text.", 1, 1, (args) => {
10518
10773
  const v = scalar(args[0]);
@@ -10536,37 +10791,37 @@ function lowerChar(ch, before, after) {
10536
10791
  const points = [...low];
10537
10792
  return points.length === 1 ? low : points[0] ?? ch;
10538
10793
  }
10539
- function mapChars(text, fn) {
10540
- const chars = [...text];
10794
+ function mapChars(text2, fn) {
10795
+ const chars = [...text2];
10541
10796
  let out = "";
10542
10797
  for (let i2 = 0; i2 < chars.length; i2++) out += fn(chars[i2], i2, chars);
10543
10798
  return out;
10544
10799
  }
10545
- var upper = (text) => mapChars(text, upperChar);
10546
- var lower = (text) => mapChars(text, (ch, i2, all2) => lowerChar(ch, all2[i2 - 1], all2[i2 + 1]));
10547
- var proper = (text) => mapChars(text, (ch, i2, all2) => {
10800
+ var upper = (text2) => mapChars(text2, upperChar);
10801
+ var lower = (text2) => mapChars(text2, (ch, i2, all2) => lowerChar(ch, all2[i2 - 1], all2[i2 + 1]));
10802
+ var proper = (text2) => mapChars(text2, (ch, i2, all2) => {
10548
10803
  if (!isLetter(ch)) return ch;
10549
10804
  const before = all2[i2 - 1];
10550
10805
  return before !== void 0 && isLetter(before) ? lowerChar(ch, before, all2[i2 + 1]) : upperChar(ch);
10551
10806
  });
10552
10807
  var isHigh = (code) => code >= 55296 && code <= 56319;
10553
10808
  var isLow = (code) => code >= 56320 && code <= 57343;
10554
- function left(text, n) {
10555
- let end = Math.min(n, text.length);
10556
- if (end > 0 && end < text.length && isHigh(text.charCodeAt(end - 1))) end++;
10557
- return text.slice(0, end);
10809
+ function left(text2, n) {
10810
+ let end = Math.min(n, text2.length);
10811
+ if (end > 0 && end < text2.length && isHigh(text2.charCodeAt(end - 1))) end++;
10812
+ return text2.slice(0, end);
10558
10813
  }
10559
- function right(text, n) {
10814
+ function right(text2, n) {
10560
10815
  if (n <= 0) return "";
10561
- let start = Math.max(0, text.length - n);
10562
- if (start > 0 && isLow(text.charCodeAt(start))) start--;
10563
- return text.slice(start);
10816
+ let start = Math.max(0, text2.length - n);
10817
+ if (start > 0 && isLow(text2.charCodeAt(start))) start--;
10818
+ return text2.slice(start);
10564
10819
  }
10565
10820
 
10566
10821
  // xlsx/formula/functions/text.ts
10567
10822
  var C34 = "Text";
10568
10823
  var MAX_TEXT = 32767;
10569
- var limit = (text) => text.length > MAX_TEXT ? fail(ERR.VALUE) : text;
10824
+ var limit = (text2) => text2.length > MAX_TEXT ? fail(ERR.VALUE) : text2;
10570
10825
  function find(args, insensitive) {
10571
10826
  const needle = str(args[0]);
10572
10827
  const haystack = str(args[1]);
@@ -10731,19 +10986,19 @@ var TEXT_FUNCTIONS = [
10731
10986
  3,
10732
10987
  4,
10733
10988
  (args) => {
10734
- const text = str(args[0]);
10989
+ const text2 = str(args[0]);
10735
10990
  const oldText = str(args[1]);
10736
10991
  const newText = str(args[2]);
10737
- if (oldText === "") return text;
10738
- if (args.length < 4) return limit(text.split(oldText).join(newText));
10992
+ if (oldText === "") return text2;
10993
+ if (args.length < 4) return limit(text2.split(oldText).join(newText));
10739
10994
  const instance = Math.trunc(num(args[3]));
10740
10995
  if (instance < 1) fail(ERR.VALUE);
10741
10996
  let at = -1;
10742
10997
  for (let i2 = 0; i2 < instance; i2++) {
10743
- at = text.indexOf(oldText, at + 1);
10744
- if (at < 0) return text;
10998
+ at = text2.indexOf(oldText, at + 1);
10999
+ if (at < 0) return text2;
10745
11000
  }
10746
- return limit(text.slice(0, at) + newText + text.slice(at + oldText.length));
11001
+ return limit(text2.slice(0, at) + newText + text2.slice(at + oldText.length));
10747
11002
  }
10748
11003
  ),
10749
11004
  ...["REPLACE", "REPLACEB"].map(
@@ -10755,11 +11010,11 @@ var TEXT_FUNCTIONS = [
10755
11010
  4,
10756
11011
  4,
10757
11012
  (args) => {
10758
- const text = str(args[0]);
11013
+ const text2 = str(args[0]);
10759
11014
  const start = Math.trunc(num(args[1]));
10760
11015
  const n = Math.trunc(num(args[2]));
10761
11016
  if (start < 1 || n < 0) fail(ERR.VALUE);
10762
- return limit(text.slice(0, start - 1) + str(args[3]) + text.slice(start - 1 + n));
11017
+ return limit(text2.slice(0, start - 1) + str(args[3]) + text2.slice(start - 1 + n));
10763
11018
  }
10764
11019
  )
10765
11020
  ),
@@ -10787,9 +11042,9 @@ var TEXT_FUNCTIONS = [
10787
11042
  ),
10788
11043
  spec("REPT", C34, "REPT(text, number_times)", "Repeats a text.", 2, 2, (args) => {
10789
11044
  const n = Math.trunc(num(args[1]));
10790
- const text = str(args[0]);
10791
- if (n < 0 || text.length * n > MAX_TEXT) fail(ERR.VALUE);
10792
- return text.repeat(n);
11045
+ const text2 = str(args[0]);
11046
+ if (n < 0 || text2.length * n > MAX_TEXT) fail(ERR.VALUE);
11047
+ return text2.repeat(n);
10793
11048
  }),
10794
11049
  spec(
10795
11050
  "EXACT",
@@ -10813,8 +11068,8 @@ function compile(pattern, caseMode2, global) {
10813
11068
  }
10814
11069
  }
10815
11070
  var caseMode = (args, index2) => optNum(args, index2, 0);
10816
- function encodeUrl(text) {
10817
- return encodeURIComponent(text).replace(
11071
+ function encodeUrl(text2) {
11072
+ return encodeURIComponent(text2).replace(
10818
11073
  /[!'()*]/g,
10819
11074
  (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`
10820
11075
  );
@@ -10859,15 +11114,15 @@ var TEXT_REGEX_FUNCTIONS = [
10859
11114
  3,
10860
11115
  5,
10861
11116
  (args) => {
10862
- const text = str(args[0]);
11117
+ const text2 = str(args[0]);
10863
11118
  const regex = compile(str(args[1]), caseMode(args, 4), true);
10864
11119
  const replacement = str(args[2]);
10865
11120
  const occurrence = args.length > 3 && args[3] !== null ? int(args[3]) : 0;
10866
- if (occurrence === 0) return text.replace(regex, replacement);
10867
- const matches2 = [...text.matchAll(regex)];
11121
+ if (occurrence === 0) return text2.replace(regex, replacement);
11122
+ const matches2 = [...text2.matchAll(regex)];
10868
11123
  const picked = occurrence > 0 ? matches2[occurrence - 1] : matches2.at(occurrence);
10869
- if (!picked || picked.index === void 0) return text;
10870
- 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);
11124
+ if (!picked || picked.index === void 0) return text2;
11125
+ 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);
10871
11126
  }
10872
11127
  )
10873
11128
  ];
@@ -10881,8 +11136,8 @@ function delimitersOf(ctx, value2) {
10881
11136
  return toText(v);
10882
11137
  });
10883
11138
  }
10884
- function occurrences(text, delimiters, insensitive) {
10885
- const hay = insensitive ? text.toLowerCase() : text;
11139
+ function occurrences(text2, delimiters, insensitive) {
11140
+ const hay = insensitive ? text2.toLowerCase() : text2;
10886
11141
  const needles = delimiters.map((d) => insensitive ? d.toLowerCase() : d);
10887
11142
  const out = [];
10888
11143
  let i2 = 0;
@@ -10902,35 +11157,35 @@ function occurrences(text, delimiters, insensitive) {
10902
11157
  return out;
10903
11158
  }
10904
11159
  function textAround(args, ctx, before) {
10905
- const text = str(args[0]);
11160
+ const text2 = str(args[0]);
10906
11161
  const delimiters = delimitersOf(ctx, args[1]);
10907
11162
  const instance = Math.trunc(optNum(args, 2, 1));
10908
11163
  const insensitive = optNum(args, 3, 0) === 1;
10909
11164
  const matchEnd = optBool(args, 4, false);
10910
11165
  const notFound = args.length > 5 ? scalar(args[5]) ?? ERR.NA : ERR.NA;
10911
- if (instance === 0 || Math.abs(instance) > text.length + 1) fail(ERR.VALUE);
11166
+ if (instance === 0 || Math.abs(instance) > text2.length + 1) fail(ERR.VALUE);
10912
11167
  if (delimiters.length === 0 || delimiters.every((d) => d === "")) {
10913
- return before ? instance > 0 ? "" : text : instance > 0 ? text : "";
11168
+ return before ? instance > 0 ? "" : text2 : instance > 0 ? text2 : "";
10914
11169
  }
10915
- const found = occurrences(text, delimiters, insensitive);
11170
+ const found = occurrences(text2, delimiters, insensitive);
10916
11171
  if (matchEnd) {
10917
- if (instance > 0) found.push({ at: text.length, length: 0 });
11172
+ if (instance > 0) found.push({ at: text2.length, length: 0 });
10918
11173
  else found.unshift({ at: 0, length: 0 });
10919
11174
  }
10920
11175
  const index2 = instance > 0 ? instance - 1 : found.length + instance;
10921
11176
  const hit = found[index2];
10922
11177
  if (!hit || index2 < 0) return notFound;
10923
- return before ? text.slice(0, hit.at) : text.slice(hit.at + hit.length);
11178
+ return before ? text2.slice(0, hit.at) : text2.slice(hit.at + hit.length);
10924
11179
  }
10925
- function splitText(text, delimiters, insensitive, ignoreEmpty) {
10926
- if (delimiters.length === 0) return [text];
11180
+ function splitText(text2, delimiters, insensitive, ignoreEmpty) {
11181
+ if (delimiters.length === 0) return [text2];
10927
11182
  const parts = [];
10928
11183
  let last = 0;
10929
- for (const hit of occurrences(text, delimiters, insensitive)) {
10930
- parts.push(text.slice(last, hit.at));
11184
+ for (const hit of occurrences(text2, delimiters, insensitive)) {
11185
+ parts.push(text2.slice(last, hit.at));
10931
11186
  last = hit.at + hit.length;
10932
11187
  }
10933
- parts.push(text.slice(last));
11188
+ parts.push(text2.slice(last));
10934
11189
  return ignoreEmpty ? parts.filter((p) => p !== "") : parts;
10935
11190
  }
10936
11191
  function valueToText(value2, strict) {
@@ -10968,14 +11223,14 @@ var TEXT_EXTRA_FUNCTIONS = [
10968
11223
  2,
10969
11224
  6,
10970
11225
  (args, ctx) => {
10971
- const text = str(ctx.toScalar(args[0] ?? null));
11226
+ const text2 = str(ctx.toScalar(args[0] ?? null));
10972
11227
  const colDelims = delimitersOf(ctx, args[1]);
10973
11228
  const rowDelims = delimitersOf(ctx, args[2]);
10974
11229
  const ignoreEmpty = args.length > 3 && args[3] !== null && Boolean(scalar(ctx.toScalar(args[3] ?? null)));
10975
11230
  const insensitive = args.length > 4 && optNum([ctx.toScalar(args[4] ?? null)], 0, 0) === 1;
10976
11231
  const pad4 = args.length > 5 ? ctx.toScalar(args[5] ?? null) : ERR.NA;
10977
11232
  if (colDelims.length === 0 && rowDelims.length === 0) fail(ERR.VALUE);
10978
- const rows2 = splitText(text, rowDelims, insensitive, ignoreEmpty).map(
11233
+ const rows2 = splitText(text2, rowDelims, insensitive, ignoreEmpty).map(
10979
11234
  (line2) => splitText(line2, colDelims, insensitive, ignoreEmpty)
10980
11235
  );
10981
11236
  const width = rows2.reduce((w, r) => Math.max(w, r.length), 0);
@@ -11169,10 +11424,10 @@ function createContext(frame) {
11169
11424
  scope ? { ...frame, scope, root: void 0 } : { ...frame, root: void 0 }
11170
11425
  ),
11171
11426
  callLambda: (fn, args) => invokeLambda(fn, args, frame),
11172
- parseReference(text) {
11427
+ parseReference(text2) {
11173
11428
  let ast;
11174
11429
  try {
11175
- ast = parseFormula(text.trim());
11430
+ ast = parseFormula(text2.trim());
11176
11431
  } catch (e) {
11177
11432
  if (e instanceof FormulaError) return void 0;
11178
11433
  throw e;
@@ -11333,7 +11588,7 @@ var REFERENCE_ARGUMENT = /* @__PURE__ */ new Set([
11333
11588
  "AREAS",
11334
11589
  "ISREF"
11335
11590
  ]);
11336
- var push = (c, area) => {
11591
+ var push2 = (c, area) => {
11337
11592
  (c.dynamic > 0 ? c.dynamicDeps : c.deps).push(area);
11338
11593
  };
11339
11594
  function spans(areas) {
@@ -11359,7 +11614,7 @@ function visit(node, c) {
11359
11614
  if (!sheets) return;
11360
11615
  const range2 = specRange(node.ref);
11361
11616
  const target2 = node.spill ? { start: range2.start, end: { ...range2.start } } : range2;
11362
- for (const sheet of sheets) push(c, { sheet, range: target2 });
11617
+ for (const sheet of sheets) push2(c, { sheet, range: target2 });
11363
11618
  return;
11364
11619
  }
11365
11620
  case "name": {
@@ -11433,7 +11688,7 @@ function visitBinary(node, c) {
11433
11688
  const list = c.dynamic > 0 ? c.dynamicDeps : c.deps;
11434
11689
  const l = list[list.length - 2];
11435
11690
  const r = list[list.length - 1];
11436
- if (l && r && l.sheet === r.sheet) push(c, spans([l, r])[0]);
11691
+ if (l && r && l.sheet === r.sheet) push2(c, spans([l, r])[0]);
11437
11692
  continue;
11438
11693
  }
11439
11694
  const mentioned = [...c.deps.slice(staticStart), ...c.dynamicDeps.slice(dynamicStart)];
@@ -11449,7 +11704,7 @@ function addStructured(ref, c) {
11449
11704
  sheet: c.sheet,
11450
11705
  row: c.row,
11451
11706
  col: c.col});
11452
- if (value2 instanceof RefValue) for (const area of value2.areas) push(c, area);
11707
+ if (value2 instanceof RefValue) for (const area of value2.areas) push2(c, area);
11453
11708
  }
11454
11709
  function analyze(ast, host, sheet, row2, col) {
11455
11710
  const c = {
@@ -11473,155 +11728,191 @@ function analyze(ast, host, sheet, row2, col) {
11473
11728
  };
11474
11729
  }
11475
11730
 
11476
- // xlsx/formula/area-index.ts
11477
- var BUCKET_WIDTH = 64;
11478
- var CHUNK_SHIFT = 6;
11479
- var CHUNKS = 64;
11480
- function push2(map, key, value2) {
11481
- const list = map.get(key);
11482
- if (list) list.push(value2);
11483
- else map.set(key, [value2]);
11731
+ // xlsx/formula/formula-shape.ts
11732
+ var isDigit4 = (code) => code >= 48 && code <= 57;
11733
+ function formulaShape(formula) {
11734
+ const starts = [];
11735
+ const ends = [];
11736
+ let hash = 2166136261;
11737
+ for (let i2 = 0; i2 < formula.length; i2++) {
11738
+ let code = formula.charCodeAt(i2);
11739
+ if (isDigit4(code)) {
11740
+ let j = i2 + 1;
11741
+ while (j < formula.length && isDigit4(formula.charCodeAt(j))) j++;
11742
+ starts.push(i2);
11743
+ ends.push(j);
11744
+ i2 = j - 1;
11745
+ code = 0;
11746
+ }
11747
+ hash = Math.imul(hash ^ code, 16777619);
11748
+ }
11749
+ return { hash: hash >>> 0, starts, ends };
11484
11750
  }
11485
- function inner(map, sheet) {
11486
- let found = map.get(sheet);
11487
- if (!found) map.set(sheet, found = /* @__PURE__ */ new Map());
11488
- return found;
11751
+ function sameText(a, from, b, at, length) {
11752
+ for (let k = 0; k < length; k++)
11753
+ if (a.charCodeAt(from + k) !== b.charCodeAt(at + k)) return false;
11754
+ return true;
11489
11755
  }
11490
- var AreaIndex = class {
11491
- cells = /* @__PURE__ */ new Map();
11492
- chunked = /* @__PURE__ */ new Map();
11493
- tall = /* @__PURE__ */ new Map();
11494
- wide = /* @__PURE__ */ new Map();
11495
- add(area, node) {
11496
- const { start, end } = area.range;
11497
- if (start.row === end.row && end.col - start.col + 1 <= BUCKET_WIDTH) {
11498
- const cells = inner(this.cells, area.sheet);
11499
- for (let col = start.col; col <= end.col; col++) push2(cells, cellKey(start.row, col), node);
11500
- return;
11756
+ function sameShape(a, as, b, bs) {
11757
+ const runs = as.starts.length;
11758
+ if (runs !== bs.starts.length) return false;
11759
+ let fromA = 0;
11760
+ let fromB = 0;
11761
+ for (let i2 = 0; i2 <= runs; i2++) {
11762
+ const toA = i2 < runs ? as.starts[i2] : a.length;
11763
+ const toB = i2 < runs ? bs.starts[i2] : b.length;
11764
+ if (toA - fromA !== toB - fromB || !sameText(a, fromA, b, fromB, toA - fromA)) return false;
11765
+ fromA = as.ends[i2] ?? 0;
11766
+ fromB = bs.ends[i2] ?? 0;
11767
+ }
11768
+ return true;
11769
+ }
11770
+ function makeTemplate(formula, shape2) {
11771
+ let tokens;
11772
+ let ast;
11773
+ try {
11774
+ tokens = tokenize(formula);
11775
+ ast = parseTokens(tokens);
11776
+ } catch (e) {
11777
+ if (e instanceof RangeError) return new FormulaError(e.message, -1, "#VALUE!");
11778
+ if (e instanceof FormulaError) return e;
11779
+ throw e;
11780
+ }
11781
+ const { starts } = shape2;
11782
+ const slotted = starts.map(() => false);
11783
+ const refs = /* @__PURE__ */ new Map();
11784
+ let run = 0;
11785
+ for (const token of tokens) {
11786
+ const end = token.start + token.text.length;
11787
+ const first2 = run;
11788
+ while (run < starts.length && starts[run] < end) run++;
11789
+ const ref = token.kind === "ref" ? token.ref : void 0;
11790
+ if (!ref || ref.kind === "cols") continue;
11791
+ const count2 = ref.kind === "cell" ? 1 : 2;
11792
+ if (run - first2 < count2) continue;
11793
+ const at = run - count2;
11794
+ const indexes2 = count2 === 1 ? [at] : [at, at + 1];
11795
+ if (indexes2.some((i2) => formula.charCodeAt(starts[i2]) === 48)) continue;
11796
+ for (const i2 of indexes2) slotted[i2] = true;
11797
+ refs.set(ref, count2 === 1 ? { start: at } : { start: at, end: at + 1 });
11798
+ }
11799
+ return { formula, shape: shape2, ast, slotted, refs };
11800
+ }
11801
+ function rowsFor(t, formula, shape2) {
11802
+ if (!sameShape(t.formula, t.shape, formula, shape2)) return void 0;
11803
+ const rows2 = [];
11804
+ for (let i2 = 0; i2 < shape2.starts.length; i2++) {
11805
+ const start = shape2.starts[i2];
11806
+ const length = shape2.ends[i2] - start;
11807
+ if (!t.slotted[i2]) {
11808
+ const own = t.shape.starts[i2];
11809
+ if (t.shape.ends[i2] - own !== length) return void 0;
11810
+ if (!sameText(t.formula, own, formula, start, length)) return void 0;
11811
+ rows2.push(-1);
11812
+ continue;
11501
11813
  }
11502
- const entry = { range: area.range, node };
11503
- if (end.col - start.col + 1 > BUCKET_WIDTH) {
11504
- const list = this.wide.get(area.sheet);
11505
- if (list) list.push(entry);
11506
- else this.wide.set(area.sheet, [entry]);
11507
- return;
11814
+ if (length > 7 || formula.charCodeAt(start) === 48) return void 0;
11815
+ let row2 = 0;
11816
+ for (let k = start; k < start + length; k++) row2 = row2 * 10 + formula.charCodeAt(k) - 48;
11817
+ if (row2 < 1 || row2 > MAX_ROW + 1) return void 0;
11818
+ rows2.push(row2 - 1);
11819
+ }
11820
+ return rows2;
11821
+ }
11822
+ function shiftSpec(spec2, slots, rows2) {
11823
+ const startRow = rows2[slots.start];
11824
+ const endRow = slots.end === void 0 ? startRow : rows2[slots.end];
11825
+ if (startRow === spec2.start.row && endRow === spec2.end.row) return spec2;
11826
+ const { start: from, end: to } = spec2;
11827
+ const start = { row: startRow, col: from.col, rowAbs: from.rowAbs, colAbs: from.colAbs };
11828
+ if (slots.end === void 0) return { kind: spec2.kind, start, end: start };
11829
+ const end = { row: endRow, col: to.col, rowAbs: to.rowAbs, colAbs: to.colAbs };
11830
+ return { kind: spec2.kind, start, end };
11831
+ }
11832
+ function copyTree(node, t, rows2) {
11833
+ switch (node.type) {
11834
+ case "ref": {
11835
+ const slots = node.ref ? t.refs.get(node.ref) : void 0;
11836
+ if (!slots || !node.ref) return node;
11837
+ const ref = shiftSpec(node.ref, slots, rows2);
11838
+ if (ref === node.ref) return node;
11839
+ const copy2 = { type: "ref" };
11840
+ if (node.prefix) copy2.prefix = node.prefix;
11841
+ copy2.ref = ref;
11842
+ if (node.spill) copy2.spill = true;
11843
+ return copy2;
11508
11844
  }
11509
- const first2 = start.row >> CHUNK_SHIFT;
11510
- const last = end.row >> CHUNK_SHIFT;
11511
- if (last - first2 + 1 > CHUNKS) {
11512
- const cols2 = inner(this.tall, area.sheet);
11513
- for (let c = start.col; c <= end.col; c++) push2(cols2, c, entry);
11514
- return;
11845
+ case "unary":
11846
+ case "percent": {
11847
+ const operand4 = copyTree(node.operand, t, rows2);
11848
+ if (operand4 === node.operand) return node;
11849
+ return node.type === "unary" ? { type: "unary", op: node.op, operand: operand4 } : { type: "percent", operand: operand4 };
11515
11850
  }
11516
- const cols = inner(this.chunked, area.sheet);
11517
- for (let c = start.col; c <= end.col; c++) {
11518
- let chunks = cols.get(c);
11519
- if (!chunks) cols.set(c, chunks = /* @__PURE__ */ new Map());
11520
- for (let k = first2; k <= last; k++) push2(chunks, k, entry);
11851
+ case "binary": {
11852
+ const left2 = copyTree(node.left, t, rows2);
11853
+ const right2 = copyTree(node.right, t, rows2);
11854
+ if (left2 === node.left && right2 === node.right) return node;
11855
+ return { type: "binary", op: node.op, left: left2, right: right2 };
11856
+ }
11857
+ case "call": {
11858
+ const args = copyAll(node.args, t, rows2);
11859
+ if (args === node.args) return node;
11860
+ return { type: "call", name: node.name, rawName: node.rawName, args };
11861
+ }
11862
+ case "invoke": {
11863
+ const callee = copyTree(node.callee, t, rows2);
11864
+ const args = copyAll(node.args, t, rows2);
11865
+ if (callee === node.callee && args === node.args) return node;
11866
+ return { type: "invoke", callee, args };
11521
11867
  }
11868
+ default:
11869
+ return node;
11522
11870
  }
11523
- /** Items whose areas intersect `range` on `sheet` (each once). */
11524
- dependents(sheet, range2, out) {
11525
- const found = out instanceof Set ? out : /* @__PURE__ */ new Set();
11526
- this.collect(sheet, range2, found);
11527
- if (Array.isArray(out)) for (const node of found) out.push(node);
11871
+ }
11872
+ function copyAll(nodes, t, rows2) {
11873
+ let out;
11874
+ for (let i2 = 0; i2 < nodes.length; i2++) {
11875
+ const node = nodes[i2];
11876
+ const copy2 = copyTree(node, t, rows2);
11877
+ if (copy2 !== node && !out) out = nodes.slice(0, i2);
11878
+ out?.push(copy2);
11879
+ }
11880
+ return out ?? nodes;
11881
+ }
11882
+ function fromTemplate(t, formula, shape2) {
11883
+ const rows2 = rowsFor(t, formula, shape2);
11884
+ return rows2 ? copyTree(t.ast, t, rows2) : void 0;
11885
+ }
11886
+
11887
+ // xlsx/formula/parse-cache.ts
11888
+ var MAX_TEMPLATE_LENGTH = 2048;
11889
+ var MAX_ENTRIES = 1e5;
11890
+ var MAX_TEMPLATES = 1e4;
11891
+ var NO_RUNS = { hash: 0, starts: [], ends: [] };
11892
+ var treeOf = (made) => "ast" in made ? made.ast : made;
11893
+ var ParseCache = class {
11894
+ byText = /* @__PURE__ */ new Map();
11895
+ templates = /* @__PURE__ */ new Map();
11896
+ parse(formula) {
11897
+ let ast = this.byText.get(formula);
11898
+ if (ast) return ast;
11899
+ ast = this.parseNew(formula);
11900
+ if (this.byText.size > MAX_ENTRIES) this.byText.clear();
11901
+ this.byText.set(formula, ast);
11902
+ return ast;
11528
11903
  }
11529
- collect(sheet, range2, out) {
11530
- const { start, end } = range2;
11531
- const check3 = (list) => {
11532
- if (list) {
11533
- for (const entry of list) if (rangesIntersect(entry.range, range2)) out.add(entry.node);
11534
- }
11535
- };
11536
- const cells = this.cells.get(sheet);
11537
- if (cells) {
11538
- const size = (end.row - start.row + 1) * (end.col - start.col + 1);
11539
- if (size <= 4096) {
11540
- for (let r = start.row; r <= end.row; r++) {
11541
- for (let c = start.col; c <= end.col; c++) {
11542
- const list = cells.get(cellKey(r, c));
11543
- if (list) for (const node of list) out.add(node);
11544
- }
11545
- }
11546
- } else {
11547
- for (const [key, list] of cells) {
11548
- const { row: row2, col } = keyToAddress(key);
11549
- if (row2 >= start.row && row2 <= end.row && col >= start.col && col <= end.col)
11550
- for (const node of list) out.add(node);
11551
- }
11552
- }
11553
- }
11554
- const columns = (map, visit2) => {
11555
- if (!map) return;
11556
- if (end.col - start.col + 1 <= map.size) {
11557
- for (let c = start.col; c <= end.col; c++) if (map.has(c)) visit2(c);
11558
- } else for (const c of map.keys()) if (c >= start.col && c <= end.col) visit2(c);
11559
- };
11560
- const chunked = this.chunked.get(sheet);
11561
- const first2 = start.row >> CHUNK_SHIFT;
11562
- const last = end.row >> CHUNK_SHIFT;
11563
- columns(chunked, (c) => {
11564
- const chunks = chunked?.get(c);
11565
- if (last - first2 + 1 <= chunks.size) {
11566
- for (let k = first2; k <= last; k++) check3(chunks.get(k));
11567
- } else for (const [k, list] of chunks) if (k >= first2 && k <= last) check3(list);
11568
- });
11569
- const tall = this.tall.get(sheet);
11570
- columns(tall, (c) => check3(tall?.get(c)));
11571
- check3(this.wide.get(sheet));
11572
- }
11573
- };
11574
-
11575
- // xlsx/formula/graph-index.ts
11576
- var ColumnIndex = class {
11577
- sheets = /* @__PURE__ */ new Map();
11578
- constructor(nodes) {
11579
- for (const node of nodes) {
11580
- let cols = this.sheets.get(node.sheet);
11581
- if (!cols) this.sheets.set(node.sheet, cols = /* @__PURE__ */ new Map());
11582
- let list = cols.get(node.col);
11583
- if (!list) cols.set(node.col, list = []);
11584
- list.push(node);
11585
- }
11586
- for (const cols of this.sheets.values())
11587
- for (const list of cols.values()) list.sort((a, b) => a.row - b.row);
11588
- }
11589
- nodesIn(area, out) {
11590
- const cols = this.sheets.get(area.sheet);
11591
- if (!cols) return;
11592
- const { start, end } = area.range;
11593
- const width = end.col - start.col + 1;
11594
- const scan2 = (list) => {
11595
- let lo = 0;
11596
- let hi = list.length;
11597
- while (lo < hi) {
11598
- const mid = lo + hi >> 1;
11599
- if (list[mid].row < start.row) lo = mid + 1;
11600
- else hi = mid;
11601
- }
11602
- for (let i2 = lo; i2 < list.length; i2++) {
11603
- const node = list[i2];
11604
- if (node.row > end.row) break;
11605
- out.push(node);
11606
- }
11607
- };
11608
- if (width <= cols.size) {
11609
- for (let c = start.col; c <= end.col; c++) {
11610
- const list = cols.get(c);
11611
- if (list) scan2(list);
11612
- }
11613
- } else {
11614
- for (const [c, list] of cols) if (c >= start.col && c <= end.col) scan2(list);
11615
- }
11616
- }
11617
- };
11618
- var ReverseIndex = class extends AreaIndex {
11619
- constructor(nodes) {
11620
- super();
11621
- for (const node of nodes) {
11622
- for (const dep of node.deps) this.add(dep, node);
11623
- for (const dep of node.dynamicDeps) this.add(dep, node);
11904
+ parseNew(formula) {
11905
+ if (formula.length > MAX_TEMPLATE_LENGTH) return treeOf(makeTemplate(formula, NO_RUNS));
11906
+ const shape2 = formulaShape(formula);
11907
+ const template = this.templates.get(shape2.hash);
11908
+ const reused = template && fromTemplate(template, formula, shape2);
11909
+ if (reused) return reused;
11910
+ const made = makeTemplate(formula, shape2);
11911
+ if (!template && "ast" in made) {
11912
+ if (this.templates.size > MAX_TEMPLATES) this.templates.clear();
11913
+ this.templates.set(shape2.hash, made);
11624
11914
  }
11915
+ return treeOf(made);
11625
11916
  }
11626
11917
  };
11627
11918
 
@@ -11761,7 +12052,7 @@ var EngineHost = class {
11761
12052
  options;
11762
12053
  nodes = /* @__PURE__ */ new Map();
11763
12054
  footprints = /* @__PURE__ */ new Set();
11764
- astCache = /* @__PURE__ */ new Map();
12055
+ parsed = new ParseCache();
11765
12056
  boundsCache = /* @__PURE__ */ new Map();
11766
12057
  inProgress = /* @__PURE__ */ new Set();
11767
12058
  cycles = /* @__PURE__ */ new Set();
@@ -11785,6 +12076,8 @@ var EngineHost = class {
11785
12076
  evaluations = 0;
11786
12077
  built = false;
11787
12078
  needsFull = false;
12079
+ /** No recalculation has run since the workbook was opened: stored values may stand. */
12080
+ fresh = true;
11788
12081
  // ---- EvalHost ----
11789
12082
  readCell(sheet, row2, col) {
11790
12083
  const cell = this.workbook.sheets[sheet]?.rows.get(row2)?.get(col);
@@ -11873,19 +12166,7 @@ var EngineHost = class {
11873
12166
  return this.workbook.sheets[sheet]?.rows.get(row2)?.get(col)?.formula;
11874
12167
  }
11875
12168
  parse(formula) {
11876
- let ast = this.astCache.get(formula);
11877
- if (!ast) {
11878
- try {
11879
- ast = parseFormula(formula);
11880
- } catch (e) {
11881
- if (e instanceof RangeError) ast = new FormulaError(e.message, -1, "#VALUE!");
11882
- else if (!(e instanceof FormulaError)) throw e;
11883
- else ast = e;
11884
- }
11885
- if (this.astCache.size > 1e5) this.astCache.clear();
11886
- this.astCache.set(formula, ast);
11887
- }
11888
- return ast;
12169
+ return this.parsed.parse(formula);
11889
12170
  }
11890
12171
  now() {
11891
12172
  return this.options.now ? this.options.now() : /* @__PURE__ */ new Date();
@@ -11894,20 +12175,6 @@ var EngineHost = class {
11894
12175
  return this.options.random ? this.options.random() : Math.random();
11895
12176
  }
11896
12177
  // ---- graph ----
11897
- build() {
11898
- this.nodes.clear();
11899
- this.footprints.clear();
11900
- this.footprintIndex = void 0;
11901
- this.workbook.sheets.forEach((sheet, s) => {
11902
- for (const [row2, cells] of sheet.rows) {
11903
- for (const [col, cell] of cells) {
11904
- if (cell.formula) this.createNode(s, row2, col, cell, true);
11905
- }
11906
- }
11907
- });
11908
- this.built = true;
11909
- this.graphChanged();
11910
- }
11911
12178
  createNode(sheet, row2, col, cell, initial) {
11912
12179
  const formula = cell.formula ?? "";
11913
12180
  const parsed = this.parse(formula);
@@ -11936,6 +12203,14 @@ var EngineHost = class {
11936
12203
  map.set(cellKey(row2, col), node);
11937
12204
  return node;
11938
12205
  }
12206
+ /** Parses a node's text again after a structural edit rewrote it (see `FormulaNode.stale`). */
12207
+ refreshAst(node) {
12208
+ const parsed = this.parse(node.formula);
12209
+ delete node.stale;
12210
+ delete node.parseError;
12211
+ node.ast = parsed instanceof FormulaError ? void 0 : parsed;
12212
+ if (parsed instanceof FormulaError && parsed.code) node.parseError = err(parsed.code);
12213
+ }
11939
12214
  removeNode(node, changed) {
11940
12215
  const sheet = this.workbook.sheets[node.sheet];
11941
12216
  if (node.spill && sheet) {
@@ -12366,6 +12641,7 @@ var EngineCore = class extends EngineHost {
12366
12641
  return { host: this, sheet, row: row2, col, scope: void 0, depth: 0, root, legacy };
12367
12642
  }
12368
12643
  evaluateFormula(node) {
12644
+ if (node.stale) this.refreshAst(node);
12369
12645
  if (!node.ast) return node.parseError ?? ERR.NAME;
12370
12646
  const ast = node.ast;
12371
12647
  const frame = this.frameFor(node.sheet, node.row, node.col, ast, node.legacy);
@@ -12383,22 +12659,371 @@ var EngineCore = class extends EngineHost {
12383
12659
  }
12384
12660
  };
12385
12661
 
12662
+ // xlsx/formula/shift-graph.ts
12663
+ var POSITIONAL = /* @__PURE__ */ new Set(["ROW", "COLUMN"]);
12664
+ var DESCRIPTIVE = /* @__PURE__ */ new Set(["FORMULATEXT", "CELL", "SHEET"]);
12665
+ var traitsCache = /* @__PURE__ */ new WeakMap();
12666
+ function astTraits(ast) {
12667
+ const cached = traitsCache.get(ast);
12668
+ if (cached) return cached;
12669
+ const sheets = /* @__PURE__ */ new Set();
12670
+ const traits = { complex: false, opaque: false, positional: false, descriptive: false, sheets };
12671
+ const stack2 = [ast];
12672
+ while (stack2.length) {
12673
+ const node = stack2.pop();
12674
+ switch (node.type) {
12675
+ case "ref":
12676
+ if (node.prefix) {
12677
+ sheets.add(node.prefix.sheet.toLowerCase());
12678
+ if (node.prefix.sheet2 !== void 0) {
12679
+ sheets.add(node.prefix.sheet2.toLowerCase());
12680
+ traits.complex = true;
12681
+ }
12682
+ }
12683
+ break;
12684
+ case "name":
12685
+ if (node.prefix) sheets.add(node.prefix.sheet.toLowerCase());
12686
+ traits.complex = true;
12687
+ break;
12688
+ case "structured":
12689
+ traits.complex = true;
12690
+ break;
12691
+ case "unary":
12692
+ case "percent":
12693
+ stack2.push(node.operand);
12694
+ break;
12695
+ case "binary":
12696
+ stack2.push(node.left, node.right);
12697
+ break;
12698
+ case "call":
12699
+ if (POSITIONAL.has(node.name)) traits.positional = true;
12700
+ if (DESCRIPTIVE.has(node.name)) traits.descriptive = true;
12701
+ if (!getFunction(node.name)) traits.complex = traits.opaque = true;
12702
+ stack2.push(...node.args);
12703
+ break;
12704
+ case "invoke":
12705
+ stack2.push(node.callee, ...node.args);
12706
+ break;
12707
+ }
12708
+ }
12709
+ traitsCache.set(ast, traits);
12710
+ return traits;
12711
+ }
12712
+ function intervalDelta(a, b, shift2) {
12713
+ const { at, count: count2 } = shift2;
12714
+ if (count2 > 0) {
12715
+ if (b < at) return 0;
12716
+ if (a < at) return void 0;
12717
+ return b + count2 > (shift2.axis === "row" ? MAX_ROW : MAX_COL) ? void 0 : count2;
12718
+ }
12719
+ const last = at - count2 - 1;
12720
+ if (b < at) return 0;
12721
+ if (a > last) return count2;
12722
+ return void 0;
12723
+ }
12724
+ function areaDelta(area, sheet, shift2) {
12725
+ if (area.sheet !== sheet) return 0;
12726
+ const { start, end } = area.range;
12727
+ return shift2.axis === "row" ? intervalDelta(start.row, end.row, shift2) : intervalDelta(start.col, end.col, shift2);
12728
+ }
12729
+ function movedRange(range2, axis, delta) {
12730
+ if (delta === 0) return range2;
12731
+ return axis === "row" ? {
12732
+ start: { row: range2.start.row + delta, col: range2.start.col },
12733
+ end: { row: range2.end.row + delta, col: range2.end.col }
12734
+ } : {
12735
+ start: { row: range2.start.row, col: range2.start.col + delta },
12736
+ end: { row: range2.end.row, col: range2.end.col + delta }
12737
+ };
12738
+ }
12739
+ function reachesEdit(areas, sheet, shift2) {
12740
+ for (const area of areas) {
12741
+ if (area.sheet !== sheet) continue;
12742
+ if ((shift2.axis === "row" ? area.range.end.row : area.range.end.col) >= shift2.at) return true;
12743
+ }
12744
+ return false;
12745
+ }
12746
+ function intersectionMoves(area, delta, pos, nodeDelta, axis) {
12747
+ if (delta === nodeDelta) return false;
12748
+ const { start, end } = area.range;
12749
+ const a = axis === "row" ? start.row : start.col;
12750
+ const b = axis === "row" ? end.row : end.col;
12751
+ if (a === b) return false;
12752
+ return pos >= a && pos <= b || pos + nodeDelta >= a + delta && pos + nodeDelta <= b + delta;
12753
+ }
12754
+
12755
+ // xlsx/formula/engine-structure.ts
12756
+ var sameAreas = (a, b) => a.length === b.length && a.every((x, i2) => {
12757
+ const y = b[i2];
12758
+ return x.sheet === y.sheet && sameRange(x.range, y.range);
12759
+ });
12760
+ var EngineStructure = class extends EngineCore {
12761
+ /** Formulas a structural edit left to recalculate (with their dependents) on the next pass. */
12762
+ structuralSeeds = /* @__PURE__ */ new Set();
12763
+ /** Whether the graph describes the workbook as it was before the edit just reported. */
12764
+ graphReady() {
12765
+ return this.built && !this.needsFull;
12766
+ }
12767
+ /** Parses a node's current text again and recomputes its precedents. */
12768
+ reanalyze(node) {
12769
+ const parsed = this.parse(node.formula);
12770
+ delete node.stale;
12771
+ delete node.parseError;
12772
+ if (parsed instanceof FormulaError) {
12773
+ node.ast = void 0;
12774
+ if (parsed.code) node.parseError = err(parsed.code);
12775
+ node.deps = [];
12776
+ node.dynamicDeps = [];
12777
+ return;
12778
+ }
12779
+ node.ast = parsed;
12780
+ const found = analyze(parsed, this, node.sheet, node.row, node.col);
12781
+ node.deps = found.deps;
12782
+ node.dynamicDeps = found.dynamicDeps;
12783
+ node.volatile = found.volatile;
12784
+ node.unsupported = found.unsupported;
12785
+ }
12786
+ /**
12787
+ * Moves the graph for rows or columns inserted or deleted on `sheet`, after the workbook was
12788
+ * changed (cells moved, formulas rewritten). Spills on the sheet, array formulas the edit cuts
12789
+ * and anything unexpected fall back to a rebuild on the next recalculation.
12790
+ */
12791
+ shiftCells(sheet, shift2) {
12792
+ if (!this.graphReady() || !this.shiftable(sheet, shift2)) {
12793
+ this.invalidate();
12794
+ return;
12795
+ }
12796
+ const ws = this.workbook.sheets[sheet];
12797
+ const own = this.nodes.get(sheet);
12798
+ if (!ws) return;
12799
+ const moved = /* @__PURE__ */ new Map();
12800
+ if (own) {
12801
+ const next = /* @__PURE__ */ new Map();
12802
+ for (const node of own.values()) {
12803
+ const pos = shift2.axis === "row" ? node.row : node.col;
12804
+ const delta = intervalDelta(pos, pos, shift2);
12805
+ if (delta === void 0) {
12806
+ this.dropNode(node);
12807
+ continue;
12808
+ }
12809
+ if (delta !== 0) {
12810
+ moved.set(node, delta);
12811
+ if (shift2.axis === "row") node.row += delta;
12812
+ else node.col += delta;
12813
+ }
12814
+ next.set(cellKey(node.row, node.col), node);
12815
+ }
12816
+ this.nodes.set(sheet, next);
12817
+ }
12818
+ for (const map of this.nodes.values())
12819
+ for (const node of map.values()) {
12820
+ if (!this.shiftNode(node, sheet, shift2, moved.get(node) ?? 0)) {
12821
+ this.invalidate();
12822
+ return;
12823
+ }
12824
+ }
12825
+ this.boundsCache.clear();
12826
+ this.graphChanged();
12827
+ }
12828
+ /** No spill or stale spilled value on the sheet, and no array formula the edit cuts. */
12829
+ shiftable(sheet, shift2) {
12830
+ for (const node of this.footprints) {
12831
+ if (node.sheet !== sheet) continue;
12832
+ if (node.spill || node.blockedSpill) return false;
12833
+ if (node.arrayRange && areaDelta({ sheet, range: node.arrayRange }, sheet, shift2) === void 0)
12834
+ return false;
12835
+ }
12836
+ const ws = this.workbook.sheets[sheet];
12837
+ let spilled = false;
12838
+ ws?.rows.forEach((cells) => {
12839
+ if (!spilled) cells.forEach((cell) => spilled ||= isSpilledCell(cell));
12840
+ });
12841
+ return !spilled;
12842
+ }
12843
+ dropNode(node) {
12844
+ this.structuralSeeds.delete(node);
12845
+ this.cycles.delete(node);
12846
+ this.footprints.delete(node);
12847
+ }
12848
+ /** Updates one formula for the edit; false when the graph cannot follow it. */
12849
+ shiftNode(node, sheet, shift2, nodeDelta) {
12850
+ const cell = this.workbook.sheets[node.sheet]?.rows.get(node.row)?.get(node.col);
12851
+ if (cell?.formula === void 0) return false;
12852
+ if (node.arrayRange) {
12853
+ const delta = areaDelta({ sheet: node.sheet, range: node.arrayRange }, sheet, shift2);
12854
+ if (delta === void 0) return false;
12855
+ node.arrayRange = movedRange(node.arrayRange, shift2.axis, delta);
12856
+ if (!cell.arrayRange || !sameRange(node.arrayRange, normalizeRange(cell.arrayRange)))
12857
+ return false;
12858
+ }
12859
+ const changed = cell.formula !== node.formula;
12860
+ const traits = node.ast && astTraits(node.ast);
12861
+ const reached = reachesEdit(node.deps, sheet, shift2) || reachesEdit(node.dynamicDeps, sheet, shift2);
12862
+ if (!changed && !reached && nodeDelta === 0 && !traits?.descriptive && !traits?.opaque)
12863
+ return true;
12864
+ if (traits?.complex) {
12865
+ node.formula = cell.formula;
12866
+ this.reanalyze(node);
12867
+ this.structuralSeeds.add(node);
12868
+ return true;
12869
+ }
12870
+ const pos = shift2.axis === "row" ? node.row - nodeDelta : node.col - nodeDelta;
12871
+ const moves = { seed: !!traits?.descriptive, moved: false, cut: false };
12872
+ const deps = this.moveAreas(node.deps, sheet, shift2, pos, nodeDelta, moves);
12873
+ const dynamicDeps = this.moveAreas(node.dynamicDeps, sheet, shift2, pos, nodeDelta, moves);
12874
+ const { cut, moved: anyMoved } = moves;
12875
+ let seed = moves.seed;
12876
+ if (cut || changed !== anyMoved) {
12877
+ node.formula = cell.formula;
12878
+ this.reanalyze(node);
12879
+ this.structuralSeeds.add(node);
12880
+ return true;
12881
+ }
12882
+ if (traits?.positional && (anyMoved || nodeDelta !== 0)) seed = true;
12883
+ node.deps = deps;
12884
+ node.dynamicDeps = dynamicDeps;
12885
+ if (changed) {
12886
+ node.formula = cell.formula;
12887
+ node.stale = true;
12888
+ }
12889
+ if (seed) this.structuralSeeds.add(node);
12890
+ return true;
12891
+ }
12892
+ /**
12893
+ * Areas moved for the edit (the same list when none moves). Records in `moves` whether one
12894
+ * moved, one was cut (deleted, widened, pushed off the grid) and whether implicit intersection
12895
+ * with one can now pick another cell.
12896
+ */
12897
+ moveAreas(list, sheet, shift2, pos, nodeDelta, moves) {
12898
+ let out;
12899
+ for (let i2 = 0; i2 < list.length; i2++) {
12900
+ const area = list[i2];
12901
+ const delta = areaDelta(area, sheet, shift2);
12902
+ if (delta === void 0) {
12903
+ moves.cut = true;
12904
+ continue;
12905
+ }
12906
+ if (intersectionMoves(area, delta, pos, nodeDelta, shift2.axis)) moves.seed = true;
12907
+ if (delta === 0) continue;
12908
+ moves.moved = true;
12909
+ out ??= list.slice();
12910
+ out[i2] = { sheet: area.sheet, range: movedRange(area.range, shift2.axis, delta) };
12911
+ }
12912
+ return out ?? list;
12913
+ }
12914
+ /**
12915
+ * Follows a sheet rename (`from` to `to`, formulas already rewritten): precedents are kept by
12916
+ * sheet index, so only rewritten formulas need their text parsed again, and only formulas that
12917
+ * name the new sheet without having been rewritten (previously unresolved), describe sheets
12918
+ * (CELL, SHEET, FORMULATEXT) or read defined names whose areas changed are recalculated.
12919
+ */
12920
+ renameSheet(from, to) {
12921
+ if (!this.graphReady()) {
12922
+ this.invalidate();
12923
+ return;
12924
+ }
12925
+ const target2 = to.toLowerCase();
12926
+ let depsChanged = false;
12927
+ for (const map of this.nodes.values())
12928
+ for (const node of map.values()) {
12929
+ const cell = this.workbook.sheets[node.sheet]?.rows.get(node.row)?.get(node.col);
12930
+ if (cell?.formula === void 0) {
12931
+ this.invalidate();
12932
+ return;
12933
+ }
12934
+ const changed = cell.formula !== node.formula;
12935
+ const traits = node.ast && astTraits(node.ast);
12936
+ node.formula = cell.formula;
12937
+ if (traits?.complex || !changed && traits?.sheets.has(target2)) {
12938
+ const deps = node.deps;
12939
+ const dynamicDeps = node.dynamicDeps;
12940
+ this.reanalyze(node);
12941
+ const same4 = sameAreas(deps, node.deps) && sameAreas(dynamicDeps, node.dynamicDeps);
12942
+ if (!same4) depsChanged = true;
12943
+ if (!same4 || !traits?.complex) this.structuralSeeds.add(node);
12944
+ } else if (changed) node.stale = true;
12945
+ if (traits?.descriptive || traits?.opaque) this.structuralSeeds.add(node);
12946
+ }
12947
+ if (depsChanged) this.graphChanged();
12948
+ }
12949
+ /** Takes the formulas queued by structural edits. */
12950
+ takeStructuralSeeds(into) {
12951
+ for (const node of this.structuralSeeds)
12952
+ if (this.nodes.get(node.sheet)?.get(cellKey(node.row, node.col)) === node) into.add(node);
12953
+ this.structuralSeeds.clear();
12954
+ }
12955
+ };
12956
+
12386
12957
  // xlsx/formula/engine.ts
12387
- var Engine = class extends EngineCore {
12958
+ var Engine = class extends EngineStructure {
12959
+ preparation;
12960
+ /** The prepared formulas the first recalculation checks (see `trustsStoredValues`). */
12961
+ prepared;
12962
+ // ---- the graph ----
12963
+ prepare(timeRemaining) {
12964
+ if (this.built || this.needsFull) return true;
12965
+ this.preparation ??= this.startPreparation();
12966
+ if (!this.preparation.run(timeRemaining)) return false;
12967
+ this.finishPreparation(this.preparation);
12968
+ return true;
12969
+ }
12970
+ discardPreparation() {
12971
+ if (!this.fresh || this.needsFull) return;
12972
+ this.preparation = void 0;
12973
+ this.prepared = void 0;
12974
+ this.structuralSeeds.clear();
12975
+ this.nodes.clear();
12976
+ this.footprints.clear();
12977
+ this.graphChanged();
12978
+ this.built = false;
12979
+ }
12980
+ /** Completes the graph, continuing a preparation that is under way. */
12981
+ build() {
12982
+ const preparation = this.preparation ?? this.startPreparation();
12983
+ preparation.run();
12984
+ this.finishPreparation(preparation);
12985
+ }
12986
+ startPreparation() {
12987
+ this.nodes.clear();
12988
+ this.footprints.clear();
12989
+ this.footprintIndex = void 0;
12990
+ this.prepared = void 0;
12991
+ return new GraphPreparation(
12992
+ this.workbook,
12993
+ (s, row2, col, cell) => this.createNode(s, row2, col, cell, true)
12994
+ );
12995
+ }
12996
+ finishPreparation(preparation) {
12997
+ this.preparation = void 0;
12998
+ this.built = true;
12999
+ this.graphChanged();
13000
+ this.reverseIndex = preparation.reverse;
13001
+ this.prepared = preparation.formulas;
13002
+ }
12388
13003
  // ---- recalculation ----
12389
13004
  recalculateAll() {
13005
+ this.fresh = false;
13006
+ this.prepared = void 0;
12390
13007
  if (this.needsFull) this.releaseAllSpills();
12391
13008
  if (!this.built || this.needsFull) this.build();
12392
13009
  this.needsFull = false;
13010
+ this.structuralSeeds.clear();
12393
13011
  this.cycles = /* @__PURE__ */ new Set();
12394
13012
  this.run(new Set(this.allNodes()), true);
12395
13013
  }
12396
13014
  recalculateFrom(changes) {
12397
- if (!this.built || this.needsFull) {
13015
+ const seeds = /* @__PURE__ */ new Set();
13016
+ if (this.fresh && !this.needsFull) {
13017
+ this.fresh = false;
13018
+ if (!this.built) this.build();
13019
+ if (!this.trustsStoredValues(changes, seeds)) {
13020
+ this.recalculateAll();
13021
+ return;
13022
+ }
13023
+ } else if (!this.built || this.needsFull) {
12398
13024
  this.recalculateAll();
12399
13025
  return;
12400
13026
  }
12401
- const seeds = /* @__PURE__ */ new Set();
12402
13027
  const changed = [];
12403
13028
  let structural = false;
12404
13029
  for (const change of changes) {
@@ -12434,11 +13059,33 @@ var Engine = class extends EngineCore {
12434
13059
  }
12435
13060
  }
12436
13061
  if (structural) this.graphChanged();
13062
+ this.takeStructuralSeeds(seeds);
12437
13063
  const reverse = this.reverse();
12438
13064
  for (const area of changed) reverse.dependents(area.sheet, area.range, seeds);
12439
13065
  for (const node of this.allNodes()) if (node.volatile) seeds.add(node);
12440
13066
  this.run(seeds, false);
12441
13067
  }
13068
+ /**
13069
+ * Whether the stored results can stand for a fresh graph: apart from the changed cells, every
13070
+ * formula has legacy or CSE array semantics (none can spill). Collects the formulas stored
13071
+ * without a value into `missing`.
13072
+ */
13073
+ trustsStoredValues(changes, missing) {
13074
+ const prepared = this.prepared;
13075
+ this.prepared = void 0;
13076
+ if (!prepared) return false;
13077
+ const changed = new Set(changes.map((c) => `${c.sheet}:${cellKey(c.row, c.col)}`));
13078
+ const current = (node) => this.nodes.get(node.sheet)?.get(cellKey(node.row, node.col)) === node;
13079
+ for (const node of prepared.dynamic) {
13080
+ if (current(node) && !changed.has(`${node.sheet}:${cellKey(node.row, node.col)}`))
13081
+ return false;
13082
+ }
13083
+ for (const node of prepared.unvalued) {
13084
+ const cell = this.workbook.sheets[node.sheet]?.rows.get(node.row)?.get(node.col);
13085
+ if (current(node) && cell && cell.value === null) missing.add(node);
13086
+ }
13087
+ return true;
13088
+ }
12442
13089
  /**
12443
13090
  * Whether a spilled cell is still part of its anchor's live spill, so a change reported for it
12444
13091
  * is a user overwrite. A cell whose anchor is blocked (or gone) keeps its marker: it was
@@ -12449,7 +13096,10 @@ var Engine = class extends EngineCore {
12449
13096
  return !!anchor?.spill && rangeHas(anchor.spill, row2, col);
12450
13097
  }
12451
13098
  invalidate() {
13099
+ this.structuralSeeds.clear();
12452
13100
  this.releaseAllSpills();
13101
+ this.preparation = void 0;
13102
+ this.prepared = void 0;
12453
13103
  this.nodes.clear();
12454
13104
  this.footprints.clear();
12455
13105
  this.graphChanged();
@@ -12494,7 +13144,7 @@ function createCalcEngine(workbook, options = {}) {
12494
13144
  return new Engine(workbook, options);
12495
13145
  }
12496
13146
 
12497
- // xlsx/formula/transform.ts
13147
+ // xlsx/formula/ref-text.ts
12498
13148
  function safeTokens(formula) {
12499
13149
  try {
12500
13150
  return tokenize(formula);
@@ -12513,50 +13163,26 @@ function formatRefSpec(spec2) {
12513
13163
  if (spec2.kind === "cell") return a;
12514
13164
  return `${a}:${cornerText(spec2.end, spec2.kind)}`;
12515
13165
  }
12516
- function rewrite(token, ref) {
13166
+ function rewriteRef(token, ref) {
12517
13167
  const prefix = token.prefix?.text ?? "";
12518
13168
  if (!ref) return `${prefix}#REF!`;
12519
13169
  return `${prefix}${formatRefSpec(ref)}${token.spill ? "#" : ""}`;
12520
13170
  }
12521
13171
  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;
12522
- function translateFormula(formula, dRow, dCol) {
12523
- const tokens = safeTokens(formula);
12524
- if (!tokens) return formula;
12525
- for (const token of tokens) {
12526
- if (token.kind !== "ref" || !token.ref) continue;
12527
- const spec2 = token.ref;
12528
- const move = (c) => {
12529
- const row2 = spec2.kind === "cols" || c.rowAbs ? c.row : c.row + dRow;
12530
- const col = spec2.kind === "rows" || c.colAbs ? c.col : c.col + dCol;
12531
- if (row2 < 0 || row2 > MAX_ROW || col < 0 || col > MAX_COL) return void 0;
12532
- return { ...c, row: row2, col };
12533
- };
12534
- const start = move(spec2.start);
12535
- const end = move(spec2.end);
12536
- const next = start && end ? { kind: spec2.kind, start, end } : void 0;
12537
- if (next && sameSpec(next, spec2)) continue;
12538
- token.text = rewrite(token, next);
12539
- }
12540
- return joinTokens(tokens);
13172
+ 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);
13173
+ function prefixText(prefix) {
13174
+ const sheets = prefix.sheet2 !== void 0 ? `${prefix.sheet}:${prefix.sheet2}` : prefix.sheet;
13175
+ const book = prefix.book !== void 0 ? `[${prefix.book}]` : "";
13176
+ const quote = needsQuote(prefix.sheet) || prefix.sheet2 !== void 0 && needsQuote(prefix.sheet2);
13177
+ return quote ? `'${(book + sheets).replace(/'/g, "''")}'!` : `${book}${sheets}!`;
12541
13178
  }
12542
- var sheetMatches = (prefix, formulaSheet, sheet) => {
12543
- if (prefix?.book !== void 0) return false;
12544
- const name = prefix ? prefix.sheet : formulaSheet;
12545
- return name.toLowerCase() === sheet.toLowerCase();
12546
- };
12547
- function shiftInterval(a, b, at, count2, max) {
12548
- if (count2 > 0) {
12549
- const na2 = a >= at ? a + count2 : a;
12550
- const nb2 = b >= at ? b + count2 : b;
12551
- if (nb2 > max) return na2 > max ? void 0 : [na2, max];
12552
- return [na2, nb2];
12553
- }
12554
- const n = -count2;
12555
- const last = at + n - 1;
12556
- if (a >= at && b <= last) return void 0;
12557
- const na = a < at ? a : a <= last ? at : a - n;
12558
- const nb = b < at ? b : b <= last ? at - 1 : b - n;
12559
- return [na, nb];
13179
+
13180
+ // xlsx/formula/shift-formula.ts
13181
+ var templates = /* @__PURE__ */ new Map();
13182
+ var MAX_TEMPLATES2 = 2e5;
13183
+ function remember(text2, template) {
13184
+ if (templates.size >= MAX_TEMPLATES2) templates.clear();
13185
+ templates.set(text2, template);
12560
13186
  }
12561
13187
  function mergeSpacedAreas(tokens) {
12562
13188
  const out = [];
@@ -12570,10 +13196,10 @@ function mergeSpacedAreas(tokens) {
12570
13196
  const colon = tokens[j];
12571
13197
  const last = tokens[k];
12572
13198
  if (plainCell(first2) && colon?.kind === "op" && colon.text === ":" && plainCell(last) && !last?.prefix && k > i2 + 2 && first2.ref && last?.ref) {
12573
- const text = tokens.slice(i2, k + 1).map((t) => t.text).join("");
13199
+ const text2 = tokens.slice(i2, k + 1).map((t) => t.text).join("");
12574
13200
  out.push({
12575
13201
  ...first2,
12576
- text,
13202
+ text: text2,
12577
13203
  ref: { kind: "area", start: first2.ref.start, end: last.ref.start }
12578
13204
  });
12579
13205
  i2 = k;
@@ -12583,63 +13209,145 @@ function mergeSpacedAreas(tokens) {
12583
13209
  }
12584
13210
  return out;
12585
13211
  }
12586
- function shiftFormula(formula, formulaSheet, spec2) {
12587
- if (spec2.count === 0) return formula;
13212
+ function templateOf(formula) {
13213
+ const cached = templates.get(formula);
13214
+ if (cached !== void 0) return cached;
12588
13215
  const raw = safeTokens(formula);
12589
- if (!raw) return formula;
12590
- const tokens = mergeSpacedAreas(raw);
12591
- const isRow = spec2.axis === "row";
12592
- for (const token of tokens) {
12593
- if (token.kind !== "ref" || !token.ref || !sheetMatches(token.prefix, formulaSheet, spec2.sheet))
12594
- continue;
12595
- const ref = token.ref;
12596
- if (isRow && ref.kind === "cols" || !isRow && ref.kind === "rows") continue;
12597
- const startFirst = isRow ? ref.start.row <= ref.end.row : ref.start.col <= ref.end.col;
12598
- const lo = startFirst ? ref.start : ref.end;
12599
- const hi = startFirst ? ref.end : ref.start;
12600
- const shifted2 = shiftInterval(
12601
- isRow ? lo.row : lo.col,
12602
- isRow ? hi.row : hi.col,
12603
- spec2.at,
12604
- spec2.count,
12605
- isRow ? MAX_ROW : MAX_COL
12606
- );
12607
- let next;
12608
- if (shifted2) {
12609
- const [a, b] = shifted2;
12610
- const nlo = isRow ? { ...lo, row: a } : { ...lo, col: a };
12611
- const nhi = isRow ? { ...hi, row: b } : { ...hi, col: b };
12612
- next = { kind: ref.kind, start: startFirst ? nlo : nhi, end: startFirst ? nhi : nlo };
12613
- if (ref.kind === "cell") next.end = next.start;
12614
- }
12615
- if (next && sameSpec(next, ref)) continue;
12616
- token.text = rewrite(token, next);
13216
+ let template = null;
13217
+ if (raw) {
13218
+ template = [];
13219
+ let literal2 = "";
13220
+ for (const token of mergeSpacedAreas(raw)) {
13221
+ if (token.kind !== "ref" && !(token.kind === "name" && token.prefix)) {
13222
+ literal2 += token.text;
13223
+ continue;
13224
+ }
13225
+ if (literal2) template.push(literal2);
13226
+ literal2 = "";
13227
+ const part = { kind: token.kind, text: token.text };
13228
+ if (token.prefix) {
13229
+ part.prefix = token.prefix;
13230
+ if (token.prefix.book === void 0) part.sheet = token.prefix.sheet.toLowerCase();
13231
+ }
13232
+ if (token.ref) part.ref = token.ref;
13233
+ if (token.spill) part.spill = true;
13234
+ template.push(part);
13235
+ }
13236
+ if (literal2) template.push(literal2);
13237
+ }
13238
+ remember(formula, template);
13239
+ return template;
13240
+ }
13241
+ function rewriteTemplate(formula, rewrite) {
13242
+ const template = templateOf(formula);
13243
+ if (!template) return formula;
13244
+ let next;
13245
+ for (let i2 = 0; i2 < template.length; i2++) {
13246
+ const part = template[i2];
13247
+ if (typeof part === "string") continue;
13248
+ const changed = rewrite(part);
13249
+ if (!changed) continue;
13250
+ next ??= template.slice();
13251
+ next[i2] = changed;
13252
+ }
13253
+ if (!next) return formula;
13254
+ const text2 = next.map((part) => typeof part === "string" ? part : part.text).join("");
13255
+ remember(text2, next);
13256
+ return text2;
13257
+ }
13258
+ function shiftInterval(a, b, at, count2, max) {
13259
+ if (count2 > 0) {
13260
+ const na2 = a >= at ? a + count2 : a;
13261
+ const nb2 = b >= at ? b + count2 : b;
13262
+ if (nb2 > max) return na2 > max ? void 0 : [na2, max];
13263
+ return [na2, nb2];
12617
13264
  }
12618
- return joinTokens(tokens);
13265
+ const n = -count2;
13266
+ const last = at + n - 1;
13267
+ if (a >= at && b <= last) return void 0;
13268
+ const na = a < at ? a : a <= last ? at : a - n;
13269
+ const nb = b < at ? b : b <= last ? at - 1 : b - n;
13270
+ return [na, nb];
12619
13271
  }
12620
- 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);
12621
- function prefixText(prefix) {
12622
- const sheets = prefix.sheet2 !== void 0 ? `${prefix.sheet}:${prefix.sheet2}` : prefix.sheet;
12623
- const book = prefix.book !== void 0 ? `[${prefix.book}]` : "";
12624
- const quote = needsQuote(prefix.sheet) || prefix.sheet2 !== void 0 && needsQuote(prefix.sheet2);
12625
- return quote ? `'${(book + sheets).replace(/'/g, "''")}'!` : `${book}${sheets}!`;
13272
+ function shiftRef(ref, spec2) {
13273
+ const isRow = spec2.axis === "row";
13274
+ if (isRow && ref.kind === "cols" || !isRow && ref.kind === "rows") return ref;
13275
+ const startFirst = isRow ? ref.start.row <= ref.end.row : ref.start.col <= ref.end.col;
13276
+ const lo = startFirst ? ref.start : ref.end;
13277
+ const hi = startFirst ? ref.end : ref.start;
13278
+ const shifted2 = shiftInterval(
13279
+ isRow ? lo.row : lo.col,
13280
+ isRow ? hi.row : hi.col,
13281
+ spec2.at,
13282
+ spec2.count,
13283
+ isRow ? MAX_ROW : MAX_COL
13284
+ );
13285
+ if (!shifted2) return void 0;
13286
+ const [a, b] = shifted2;
13287
+ const nlo = isRow ? { ...lo, row: a } : { ...lo, col: a };
13288
+ const nhi = isRow ? { ...hi, row: b } : { ...hi, col: b };
13289
+ const next = {
13290
+ kind: ref.kind,
13291
+ start: startFirst ? nlo : nhi,
13292
+ end: startFirst ? nhi : nlo
13293
+ };
13294
+ if (ref.kind === "cell") next.end = next.start;
13295
+ return sameSpec(next, ref) ? ref : next;
13296
+ }
13297
+ function shiftFormula(formula, formulaSheet, spec2) {
13298
+ if (spec2.count === 0) return formula;
13299
+ const sheet = spec2.sheet.toLowerCase();
13300
+ const own = formulaSheet.toLowerCase() === sheet;
13301
+ return rewriteTemplate(formula, (part) => {
13302
+ if (part.kind !== "ref" || !part.ref || (part.prefix ? part.sheet !== sheet : !own))
13303
+ return void 0;
13304
+ const next = shiftRef(part.ref, spec2);
13305
+ if (next === part.ref) return void 0;
13306
+ const out = { kind: "ref", text: rewriteRef(part, next) };
13307
+ if (part.prefix) out.prefix = part.prefix;
13308
+ if (part.sheet !== void 0) out.sheet = part.sheet;
13309
+ if (next) out.ref = next;
13310
+ if (part.spill) out.spill = true;
13311
+ return out;
13312
+ });
12626
13313
  }
12627
13314
  function renameSheetInFormula(formula, oldName, newName) {
12628
- const tokens = safeTokens(formula);
12629
- if (!tokens) return formula;
12630
13315
  const lower2 = oldName.toLowerCase();
12631
- for (const token of tokens) {
12632
- const prefix = token.prefix;
12633
- if (!prefix || prefix.book !== void 0) continue;
12634
- const first2 = prefix.sheet.toLowerCase() === lower2;
13316
+ return rewriteTemplate(formula, (part) => {
13317
+ const prefix = part.prefix;
13318
+ if (!prefix || part.sheet === void 0) return void 0;
13319
+ const first2 = part.sheet === lower2;
12635
13320
  const second = prefix.sheet2?.toLowerCase() === lower2;
12636
- if (!first2 && !second) continue;
13321
+ if (!first2 && !second) return void 0;
12637
13322
  const renamed = { ...prefix, sheet: first2 ? newName : prefix.sheet };
12638
13323
  if (prefix.sheet2 !== void 0) renamed.sheet2 = second ? newName : prefix.sheet2;
12639
- const text = prefixText(renamed);
12640
- token.text = text + token.text.slice(prefix.text.length);
12641
- renamed.text = text;
12642
- token.prefix = renamed;
13324
+ const text2 = prefixText(renamed);
13325
+ renamed.text = text2;
13326
+ const out = { ...part, text: text2 + part.text.slice(prefix.text.length) };
13327
+ out.prefix = renamed;
13328
+ out.sheet = renamed.sheet.toLowerCase();
13329
+ return out;
13330
+ });
13331
+ }
13332
+
13333
+ // xlsx/formula/transform.ts
13334
+ function translateFormula(formula, dRow, dCol) {
13335
+ const tokens = safeTokens(formula);
13336
+ if (!tokens) return formula;
13337
+ for (const token of tokens) {
13338
+ if (token.kind !== "ref" || !token.ref) continue;
13339
+ const spec2 = token.ref;
13340
+ const move = (c) => {
13341
+ const row2 = spec2.kind === "cols" || c.rowAbs ? c.row : c.row + dRow;
13342
+ const col = spec2.kind === "rows" || c.colAbs ? c.col : c.col + dCol;
13343
+ if (row2 < 0 || row2 > MAX_ROW || col < 0 || col > MAX_COL) return void 0;
13344
+ return { ...c, row: row2, col };
13345
+ };
13346
+ const start = move(spec2.start);
13347
+ const end = move(spec2.end);
13348
+ const next = start && end ? { kind: spec2.kind, start, end } : void 0;
13349
+ if (next && sameSpec(next, spec2)) continue;
13350
+ token.text = rewriteRef(token, next);
12643
13351
  }
12644
13352
  return joinTokens(tokens);
12645
13353
  }
@@ -12938,6 +13646,16 @@ function parseColor(element2, palette) {
12938
13646
  return Object.keys(color).length ? color : void 0;
12939
13647
  }
12940
13648
 
13649
+ // color/hex-rgb.ts
13650
+ function parseArgbHex(hex2) {
13651
+ const clean2 = hex2.replace(/^#/, "");
13652
+ const rgb2 = clean2.length === 8 ? clean2.slice(2) : clean2;
13653
+ if (!/^[0-9a-fA-F]{6}$/.test(rgb2)) return void 0;
13654
+ return [0, 2, 4].map((i2) => parseInt(rgb2.slice(i2, i2 + 2), 16));
13655
+ }
13656
+ var clamp255 = (v) => Math.max(0, Math.min(255, v));
13657
+ var rgbToUpperHex = (rgb2) => `#${rgb2.map((v) => clamp255(Math.round(v)).toString(16).padStart(2, "0")).join("").toUpperCase()}`;
13658
+
12941
13659
  // xlsx/read/sheet-props.ts
12942
13660
  function parseSqref(sqref) {
12943
13661
  if (!sqref) return [];
@@ -12953,13 +13671,13 @@ function dataBarLengths(rule, node) {
12953
13671
  maxLength: rule.maxLength ?? numAttr(bar, "maxLength") ?? 90
12954
13672
  };
12955
13673
  }
12956
- function rewriteConditionalExtension(rule, rewrite2) {
13674
+ function rewriteConditionalExtension(rule, rewrite) {
12957
13675
  if (!rule.extensionXml) return;
12958
13676
  const doc = parseXml(rule.extensionXml);
12959
13677
  let changed = false;
12960
13678
  for (const formula of descendants(doc.documentElement, "f", XM)) {
12961
13679
  const before = formula.textContent ?? "";
12962
- const next = rewrite2(before);
13680
+ const next = rewrite(before);
12963
13681
  if (before !== next) {
12964
13682
  formula.textContent = next;
12965
13683
  changed = true;
@@ -12968,6 +13686,104 @@ function rewriteConditionalExtension(rule, rewrite2) {
12968
13686
  if (changed) rule.extensionXml = buildXml(doc);
12969
13687
  }
12970
13688
 
13689
+ // xlsx/read/sparklines.ts
13690
+ var XM2 = "http://schemas.microsoft.com/office/excel/2006/main";
13691
+ var TYPES = ["line", "column", "stacked"];
13692
+ var EMPTY = ["gap", "zero", "span"];
13693
+ var AXES = ["individual", "group", "custom"];
13694
+ var COLORS = [
13695
+ "colorSeries",
13696
+ "colorNegative",
13697
+ "colorAxis",
13698
+ "colorMarkers",
13699
+ "colorFirst",
13700
+ "colorLast",
13701
+ "colorHigh",
13702
+ "colorLow"
13703
+ ];
13704
+ function pick2(value2, allowed, fallback) {
13705
+ return allowed.includes(value2) ? value2 : fallback;
13706
+ }
13707
+ var text = (element2) => {
13708
+ const value2 = element2?.textContent?.trim();
13709
+ return value2 ? value2 : void 0;
13710
+ };
13711
+ function readSparklineGroup(node) {
13712
+ const attr = (name) => node.hasAttribute(name) ? node.getAttribute(name) : null;
13713
+ const group = {
13714
+ type: pick2(attr("type"), TYPES, "line"),
13715
+ lineWeight: numAttr(node, "lineWeight") ?? 0.75,
13716
+ dateAxis: boolAttr(node, "dateAxis", false),
13717
+ markers: boolAttr(node, "markers", false),
13718
+ high: boolAttr(node, "high", false),
13719
+ low: boolAttr(node, "low", false),
13720
+ first: boolAttr(node, "first", false),
13721
+ last: boolAttr(node, "last", false),
13722
+ negative: boolAttr(node, "negative", false),
13723
+ displayEmptyCellsAs: pick2(attr("displayEmptyCellsAs"), EMPTY, "zero"),
13724
+ displayXAxis: boolAttr(node, "displayXAxis", false),
13725
+ displayHidden: boolAttr(node, "displayHidden", false),
13726
+ rightToLeft: boolAttr(node, "rightToLeft", false),
13727
+ minAxisType: pick2(attr("minAxisType"), AXES, "individual"),
13728
+ maxAxisType: pick2(attr("maxAxisType"), AXES, "individual"),
13729
+ sparklines: []
13730
+ };
13731
+ const manualMin = numAttr(node, "manualMin");
13732
+ const manualMax = numAttr(node, "manualMax");
13733
+ if (manualMin !== void 0) group.manualMin = manualMin;
13734
+ if (manualMax !== void 0) group.manualMax = manualMax;
13735
+ for (const name of COLORS) {
13736
+ const color = parseColor(first(node, name, NS.x14));
13737
+ if (color) group[name] = color;
13738
+ }
13739
+ const dates = text(first(node, "f", XM2));
13740
+ if (dates) group.dateFormula = dates;
13741
+ for (const line2 of children(first(node, "sparklines", NS.x14) ?? node, "sparkline", NS.x14)) {
13742
+ const host = parseRange(text(first(line2, "sqref", XM2)) ?? "");
13743
+ if (!host) continue;
13744
+ const formula = text(first(line2, "f", XM2));
13745
+ group.sparklines.push(formula ? { formula, host } : { host });
13746
+ }
13747
+ return group;
13748
+ }
13749
+ function readSparklineGroups(extLst) {
13750
+ const groups = [];
13751
+ for (const xml of extLst) {
13752
+ if (!xml.includes("sparklineGroup")) continue;
13753
+ let root;
13754
+ try {
13755
+ root = parseXml(xml).documentElement;
13756
+ } catch {
13757
+ continue;
13758
+ }
13759
+ for (const node of descendants(root, "sparklineGroup", NS.x14))
13760
+ groups.push(readSparklineGroup(node));
13761
+ }
13762
+ return groups;
13763
+ }
13764
+ var cache2 = /* @__PURE__ */ new WeakMap();
13765
+ function sheetSparklineGroups(sheet) {
13766
+ const source = sheet.preserved.get("extLst") ?? [];
13767
+ const hit = cache2.get(sheet);
13768
+ if (hit && hit.source.length === source.length && hit.source.every((xml, i2) => xml === source[i2]))
13769
+ return hit.groups;
13770
+ const groups = readSparklineGroups(source);
13771
+ cache2.set(sheet, { source: [...source], groups });
13772
+ return groups;
13773
+ }
13774
+
13775
+ // chart/bar-cluster-geometry.ts
13776
+ function assertBarClusterOptions(options) {
13777
+ for (const [field, min, max] of [
13778
+ ["barGapWidth", 0, 500],
13779
+ ["barOverlap", -100, 100]
13780
+ ]) {
13781
+ const value2 = options[field];
13782
+ if (value2 !== void 0 && (!Number.isInteger(value2) || value2 < min || value2 > max))
13783
+ throw new RangeError(`${field} must be an integer from ${min} to ${max}`);
13784
+ }
13785
+ }
13786
+
12971
13787
  // chart/color-palettes.ts
12972
13788
  var COLORFUL_VARIATIONS = [
12973
13789
  {},
@@ -13153,24 +13969,19 @@ function hueToRgb(n1, n2, hue) {
13153
13969
  return n1 + idiv((n2 - n1) * (idiv(HLSMAX * 2, 3) - h2) + idiv(HLSMAX, 12), sixth);
13154
13970
  return n1;
13155
13971
  }
13156
- var clamp255 = (v) => Math.max(0, Math.min(255, v));
13972
+ var clamp2552 = (v) => Math.max(0, Math.min(255, v));
13157
13973
  function hls240ToRgb({ h: h2, l, s }) {
13158
13974
  if (s === 0) {
13159
- const v = clamp255(Math.round(l * RGBMAX / HLSMAX));
13975
+ const v = clamp2552(Math.round(l * RGBMAX / HLSMAX));
13160
13976
  return [v, v, v];
13161
13977
  }
13162
13978
  const m2 = l <= HLSMAX / 2 ? idiv(l * (HLSMAX + s) + idiv(HLSMAX, 2), HLSMAX) : l + s - idiv(l * s + idiv(HLSMAX, 2), HLSMAX);
13163
13979
  const m1 = 2 * l - m2;
13164
- const channel = (hue) => clamp255(idiv(hueToRgb(m1, m2, hue) * RGBMAX + idiv(HLSMAX, 2), HLSMAX));
13980
+ const channel = (hue) => clamp2552(idiv(hueToRgb(m1, m2, hue) * RGBMAX + idiv(HLSMAX, 2), HLSMAX));
13165
13981
  return [channel(h2 + idiv(HLSMAX, 3)), channel(h2), channel(h2 - idiv(HLSMAX, 3))];
13166
13982
  }
13167
- function parseHex(hex2) {
13168
- const clean2 = hex2.replace(/^#/, "");
13169
- const rgb2 = clean2.length === 8 ? clean2.slice(2) : clean2;
13170
- if (!/^[0-9a-fA-F]{6}$/.test(rgb2)) return void 0;
13171
- return [0, 2, 4].map((i2) => parseInt(rgb2.slice(i2, i2 + 2), 16));
13172
- }
13173
- var toHexColor = (rgb2) => `#${rgb2.map((v) => clamp255(Math.round(v)).toString(16).padStart(2, "0")).join("").toUpperCase()}`;
13983
+ var parseHex = parseArgbHex;
13984
+ var toHexColor = rgbToUpperHex;
13174
13985
  function applyTint(hex2, tint) {
13175
13986
  const rgb2 = parseHex(hex2) ?? [0, 0, 0];
13176
13987
  if (!tint) return toHexColor(rgb2);
@@ -13180,6 +13991,40 @@ function applyTint(hex2, tint) {
13180
13991
  return toHexColor(hls240ToRgb({ ...hls, l: Math.max(0, Math.min(HLSMAX, l)) }));
13181
13992
  }
13182
13993
 
13994
+ // chart/render/theme-palette.ts
13995
+ var THEME_SLOTS = [
13996
+ "lt1",
13997
+ "dk1",
13998
+ "lt2",
13999
+ "dk2",
14000
+ "accent1",
14001
+ "accent2",
14002
+ "accent3",
14003
+ "accent4",
14004
+ "accent5",
14005
+ "accent6",
14006
+ "hlink",
14007
+ "folHlink"
14008
+ ];
14009
+ var DEFAULT_THEME_COLORS = [
14010
+ "FFFFFF",
14011
+ "000000",
14012
+ "E7E6E6",
14013
+ "44546A",
14014
+ "4472C4",
14015
+ "ED7D31",
14016
+ "A5A5A5",
14017
+ "FFC000",
14018
+ "5B9BD5",
14019
+ "70AD47",
14020
+ "0563C1",
14021
+ "954F72"
14022
+ ];
14023
+ function themeColor(theme2, index2) {
14024
+ const hex2 = theme2.colors[index2] ?? DEFAULT_THEME_COLORS[index2];
14025
+ return hex2 && parseArgbHex(hex2) ? hex2.replace(/^#/, "") : void 0;
14026
+ }
14027
+
13183
14028
  // xlsx/layout/colors.ts
13184
14029
  var INDEXED_COLORS = [
13185
14030
  "000000",
@@ -13249,38 +14094,6 @@ var INDEXED_COLORS = [
13249
14094
  "000000",
13250
14095
  "FFFFFF"
13251
14096
  ];
13252
- var THEME_SLOTS = [
13253
- "lt1",
13254
- "dk1",
13255
- "lt2",
13256
- "dk2",
13257
- "accent1",
13258
- "accent2",
13259
- "accent3",
13260
- "accent4",
13261
- "accent5",
13262
- "accent6",
13263
- "hlink",
13264
- "folHlink"
13265
- ];
13266
- var FALLBACK_THEME = [
13267
- "FFFFFF",
13268
- "000000",
13269
- "E7E6E6",
13270
- "44546A",
13271
- "4472C4",
13272
- "ED7D31",
13273
- "A5A5A5",
13274
- "FFC000",
13275
- "5B9BD5",
13276
- "70AD47",
13277
- "0563C1",
13278
- "954F72"
13279
- ];
13280
- function themeColor(theme2, index2) {
13281
- const hex2 = theme2.colors[index2] ?? FALLBACK_THEME[index2];
13282
- return hex2 && parseHex(hex2) ? hex2.replace(/^#/, "") : void 0;
13283
- }
13284
14097
  function resolveColor(color, theme2, fallback, indexed = INDEXED_COLORS) {
13285
14098
  if (!color) return fallback;
13286
14099
  let base;
@@ -13303,18 +14116,6 @@ function mixColors(a, b, t, rounding = "nearest") {
13303
14116
  );
13304
14117
  }
13305
14118
 
13306
- // chart/bar-cluster-geometry.ts
13307
- function assertBarClusterOptions(options) {
13308
- for (const [field, min, max] of [
13309
- ["barGapWidth", 0, 500],
13310
- ["barOverlap", -100, 100]
13311
- ]) {
13312
- const value2 = options[field];
13313
- if (value2 !== void 0 && (!Number.isInteger(value2) || value2 < min || value2 > max))
13314
- throw new RangeError(`${field} must be an integer from ${min} to ${max}`);
13315
- }
13316
- }
13317
-
13318
14119
  // xlsx/edit/range-math.ts
13319
14120
  var axisMax = (axis) => axis === "row" ? MAX_ROW : MAX_COL;
13320
14121
  function shiftSpan(start, end, shift2) {
@@ -13523,8 +14324,8 @@ function syncTableHeader(ctx, sheet, row2, col) {
13523
14324
  if (!table2) return;
13524
14325
  const column = table2.columns[col - table2.range.start.col];
13525
14326
  if (!column) return;
13526
- const text = displayText(ctx.workbook, getCell(sheet, row2, col)).trim();
13527
- if (text) column.name = text;
14327
+ const text2 = displayText(ctx.workbook, getCell(sheet, row2, col)).trim();
14328
+ if (text2) column.name = text2;
13528
14329
  }
13529
14330
  function writeScopes(sheet, index2, range2, parts = []) {
13530
14331
  const r = normalizeRange(range2);
@@ -13539,11 +14340,11 @@ function writeScopes(sheet, index2, range2, parts = []) {
13539
14340
  if (all2.length) scopes.push({ kind: "parts", sheet: index2, parts: all2 });
13540
14341
  return scopes;
13541
14342
  }
13542
- function writeInput(ctx, sheet, row2, col, text) {
14343
+ function writeInput(ctx, sheet, row2, col, text2) {
13543
14344
  const { workbook } = ctx;
13544
14345
  const existing = getCell(sheet, row2, col);
13545
14346
  const format = styleAt(workbook, existing?.styleId ?? baseStyleId(sheet, row2, col)).numFmt;
13546
- if (text === "") {
14347
+ if (text2 === "") {
13547
14348
  if (existing) clearContents(existing);
13548
14349
  pruneCell(sheet, row2, col);
13549
14350
  return;
@@ -13551,10 +14352,10 @@ function writeInput(ctx, sheet, row2, col, text) {
13551
14352
  const cell = ensureCell(sheet, row2, col);
13552
14353
  clearContents(cell);
13553
14354
  if (format === "@") {
13554
- cell.value = text;
14355
+ cell.value = text2;
13555
14356
  return;
13556
14357
  }
13557
- const parsed = parseCellInput(text, { date1904: workbook.date1904 });
14358
+ const parsed = parseCellInput(text2, { date1904: workbook.date1904 });
13558
14359
  if (parsed.formula !== void 0) cell.formula = parsed.formula;
13559
14360
  else cell.value = parsed.value;
13560
14361
  if (parsed.numFmt && format === "General")
@@ -13580,7 +14381,7 @@ function clearContents(cell) {
13580
14381
  delete cell.legacyFormula;
13581
14382
  delete cell.spillAnchor;
13582
14383
  }
13583
- function setCellInput(ctx, s, row2, col, text) {
14384
+ function setCellInput(ctx, s, row2, col, text2) {
13584
14385
  const sheet = sheetAt(ctx.workbook, s);
13585
14386
  const range2 = cellRange(row2, col);
13586
14387
  ctx.run(
@@ -13588,7 +14389,7 @@ function setCellInput(ctx, s, row2, col, text) {
13588
14389
  "cells",
13589
14390
  writeScopes(sheet, s, range2),
13590
14391
  () => {
13591
- writeInput(ctx, sheet, row2, col, text);
14392
+ writeInput(ctx, sheet, row2, col, text2);
13592
14393
  syncTableHeader(ctx, sheet, row2, col);
13593
14394
  },
13594
14395
  { sheet: s, ranges: [range2] }
@@ -13656,10 +14457,10 @@ function clearRange(ctx, s, range2, what) {
13656
14457
  );
13657
14458
  }
13658
14459
  function clearIn(ctx, sheet, r, what) {
13659
- const positions = [];
13660
- forEachCellInRange(sheet, r, (_cell, row2, col) => positions.push([row2, col]));
14460
+ const positions2 = [];
14461
+ forEachCellInRange(sheet, r, (_cell, row2, col) => positions2.push([row2, col]));
13661
14462
  if (what === "contents" || what === "all" || what === "formats") {
13662
- for (const [row2, col] of positions) {
14463
+ for (const [row2, col] of positions2) {
13663
14464
  const cell = getCell(sheet, row2, col);
13664
14465
  if (!cell) continue;
13665
14466
  if (what === "all") deleteCell(sheet, row2, col);
@@ -13670,7 +14471,7 @@ function clearIn(ctx, sheet, r, what) {
13670
14471
  }
13671
14472
  }
13672
14473
  if (what === "contents")
13673
- for (const [row2, col] of positions) syncTableHeader(ctx, sheet, row2, col);
14474
+ for (const [row2, col] of positions2) syncTableHeader(ctx, sheet, row2, col);
13674
14475
  }
13675
14476
  if (what === "all" || what === "formats") {
13676
14477
  sheet.merges = sheet.merges.filter((m) => !rangesIntersect(m, r));
@@ -13877,8 +14678,8 @@ var LISTS = [
13877
14678
  "December"
13878
14679
  ]
13879
14680
  ];
13880
- function listMatch(text) {
13881
- const lower2 = text.toLowerCase();
14681
+ function listMatch(text2) {
14682
+ const lower2 = text2.toLowerCase();
13882
14683
  for (const list of LISTS) {
13883
14684
  const index2 = list.findIndex((item) => item.toLowerCase() === lower2);
13884
14685
  if (index2 >= 0) return { list, index: index2 };
@@ -13903,14 +14704,14 @@ function linearTrend(values2) {
13903
14704
  const slope = den ? num2 / den : 0;
13904
14705
  return (k) => Number((meanY + slope * (k - meanX)).toPrecision(15));
13905
14706
  }
13906
- var isDigit3 = (ch) => ch !== void 0 && ch >= "0" && ch <= "9";
13907
- function matchTextNumber(text) {
13908
- let end = text.length;
13909
- while (end > 0 && !isDigit3(text[end - 1])) end--;
14707
+ var isDigit5 = (ch) => ch !== void 0 && ch >= "0" && ch <= "9";
14708
+ function matchTextNumber(text2) {
14709
+ let end = text2.length;
14710
+ while (end > 0 && !isDigit5(text2[end - 1])) end--;
13910
14711
  if (end === 0) return null;
13911
14712
  let start = end;
13912
- while (start > 0 && isDigit3(text[start - 1])) start--;
13913
- return [text, text.slice(0, start), text.slice(start, end), text.slice(end)];
14713
+ while (start > 0 && isDigit5(text2[start - 1])) start--;
14714
+ return [text2, text2.slice(0, start), text2.slice(start, end), text2.slice(end)];
13914
14715
  }
13915
14716
  var QUARTER = /^(q|qtr|quarter)(\s?)([1-4])$/i;
13916
14717
  function textSeries(texts) {
@@ -14092,10 +14893,10 @@ function removeValidationArea(rules, area) {
14092
14893
  }
14093
14894
 
14094
14895
  // xlsx/edit/conditional-formulas.ts
14095
- function rewriteConditionalRule(rule, rewrite2) {
14896
+ function rewriteConditionalRule(rule, rewrite) {
14096
14897
  const safe2 = (formula) => {
14097
14898
  try {
14098
- return rewrite2(formula);
14899
+ return rewrite(formula);
14099
14900
  } catch {
14100
14901
  return formula;
14101
14902
  }
@@ -14315,26 +15116,26 @@ function pasteConditionalFormats(sheet, dest, cells, transpose2, skipBlanks, cut
14315
15116
  }
14316
15117
 
14317
15118
  // xlsx/edit/annotations.ts
14318
- function setComment(ctx, s, at, text, author) {
15119
+ function setComment(ctx, s, at, text2, author) {
14319
15120
  const sheet = sheetAt(ctx.workbook, s);
14320
15121
  const index2 = sheet.comments.findIndex(
14321
15122
  (c) => c.address.row === at.row && c.address.col === at.col
14322
15123
  );
14323
- if (index2 < 0 && text === void 0) return;
15124
+ if (index2 < 0 && text2 === void 0) return;
14324
15125
  ctx.run(
14325
- text === void 0 ? "Delete comment" : index2 < 0 ? "New comment" : "Edit comment",
15126
+ text2 === void 0 ? "Delete comment" : index2 < 0 ? "New comment" : "Edit comment",
14326
15127
  "annotations",
14327
15128
  [{ kind: "sheet", sheet: s }],
14328
15129
  () => {
14329
- if (text === void 0) {
15130
+ if (text2 === void 0) {
14330
15131
  sheet.comments.splice(index2, 1);
14331
15132
  return;
14332
15133
  }
14333
15134
  const existing = sheet.comments[index2];
14334
15135
  if (existing) {
14335
- existing.text = text;
15136
+ existing.text = text2;
14336
15137
  existing.author = author;
14337
- } else sheet.comments.push({ address: { row: at.row, col: at.col }, author, text });
15138
+ } else sheet.comments.push({ address: { row: at.row, col: at.col }, author, text: text2 });
14338
15139
  },
14339
15140
  { sheet: s, ranges: [{ start: at, end: at }] }
14340
15141
  );
@@ -14523,7 +15324,7 @@ function setBorders(ctx, s, range2, preset, edge = { style: "thin" }) {
14523
15324
  }
14524
15325
 
14525
15326
  // xlsx/edit/shift-preserved.ts
14526
- var XM2 = "http://schemas.microsoft.com/office/excel/2006/main";
15327
+ var XM3 = "http://schemas.microsoft.com/office/excel/2006/main";
14527
15328
  function descendants2(root, ns, local) {
14528
15329
  return Array.from(root.getElementsByTagNameNS(ns, local));
14529
15330
  }
@@ -14583,14 +15384,14 @@ function removeUpwards(node, root) {
14583
15384
  }
14584
15385
  function shiftSqrefs(root, moveRange) {
14585
15386
  let changed = false;
14586
- for (const sqref of descendants2(root, XM2, "sqref")) {
15387
+ for (const sqref of descendants2(root, XM3, "sqref")) {
14587
15388
  const old = sqref.textContent ?? "";
14588
15389
  const ranges = parseSqref(old).map(moveRange).filter((r) => !!r);
14589
- const text = ranges.map(formatRange).join(" ");
14590
- if (text === old.trim()) continue;
15390
+ const text2 = ranges.map(formatRange).join(" ");
15391
+ if (text2 === old.trim()) continue;
14591
15392
  changed = true;
14592
15393
  const owner = sqref.parentNode;
14593
- if (ranges.length) sqref.textContent = text;
15394
+ if (ranges.length) sqref.textContent = text2;
14594
15395
  else if (owner) removeUpwards(owner, root);
14595
15396
  }
14596
15397
  if (!changed) return "same";
@@ -14614,21 +15415,21 @@ function shiftPreservedXml(sheet, shift2, moveRange, banded) {
14614
15415
  (xml) => xml.includes("sqref")
14615
15416
  );
14616
15417
  }
14617
- function rewritePreservedFormulas(sheet, rewrite2) {
15418
+ function rewritePreservedFormulas(sheet, rewrite) {
14618
15419
  editEntries(
14619
15420
  sheet,
14620
15421
  "extLst",
14621
15422
  (root) => {
14622
15423
  let changed = false;
14623
- for (const f6 of descendants2(root, XM2, "f")) {
14624
- const text = f6.textContent ?? "";
14625
- let next = text;
15424
+ for (const f6 of descendants2(root, XM3, "f")) {
15425
+ const text2 = f6.textContent ?? "";
15426
+ let next = text2;
14626
15427
  try {
14627
- next = rewrite2(text, sheet.name);
15428
+ next = rewrite(text2, sheet.name);
14628
15429
  } catch {
14629
- next = text;
15430
+ next = text2;
14630
15431
  }
14631
- if (next === text) continue;
15432
+ if (next === text2) continue;
14632
15433
  f6.textContent = next;
14633
15434
  changed = true;
14634
15435
  }
@@ -14639,46 +15440,46 @@ function rewritePreservedFormulas(sheet, rewrite2) {
14639
15440
  }
14640
15441
 
14641
15442
  // xlsx/edit/shift-formulas.ts
14642
- function safe(rewrite2, formula, formulaSheet) {
15443
+ function safe(rewrite, formula, formulaSheet) {
14643
15444
  try {
14644
- return rewrite2(formula, formulaSheet);
15445
+ return rewrite(formula, formulaSheet);
14645
15446
  } catch {
14646
15447
  return formula;
14647
15448
  }
14648
15449
  }
14649
- function rewriteFormulas(workbook, rewrite2) {
14650
- for (const sheet of workbook.sheets) rewriteSheetFormulas(sheet, rewrite2);
15450
+ function rewriteFormulas(workbook, rewrite) {
15451
+ for (const sheet of workbook.sheets) rewriteSheetFormulas(sheet, rewrite);
14651
15452
  for (const definedName of workbook.definedNames) {
14652
15453
  const local = definedName.localSheet === void 0 ? void 0 : workbook.sheets[definedName.localSheet];
14653
- definedName.formula = safe(rewrite2, definedName.formula, local?.name ?? "");
15454
+ definedName.formula = safe(rewrite, definedName.formula, local?.name ?? "");
14654
15455
  }
14655
15456
  }
14656
- function rewriteSheetFormulas(sheet, rewrite2) {
14657
- rewritePreservedFormulas(sheet, rewrite2);
15457
+ function rewriteSheetFormulas(sheet, rewrite) {
15458
+ rewritePreservedFormulas(sheet, rewrite);
14658
15459
  {
14659
15460
  const name = sheet.name;
14660
15461
  for (const table2 of sheet.tables)
14661
15462
  for (const column of table2.columns)
14662
15463
  if (column.calculatedColumnFormula !== void 0)
14663
- column.calculatedColumnFormula = safe(rewrite2, column.calculatedColumnFormula, name);
15464
+ column.calculatedColumnFormula = safe(rewrite, column.calculatedColumnFormula, name);
14664
15465
  for (const cells of sheet.rows.values())
14665
15466
  for (const cell of cells.values())
14666
- if (cell.formula !== void 0) cell.formula = safe(rewrite2, cell.formula, name);
15467
+ if (cell.formula !== void 0) cell.formula = safe(rewrite, cell.formula, name);
14667
15468
  for (const cf of sheet.conditionalFormats)
14668
- for (const rule of cf.rules) rewriteConditionalRule(rule, (f6) => rewrite2(f6, name));
15469
+ for (const rule of cf.rules) rewriteConditionalRule(rule, (f6) => rewrite(f6, name));
14669
15470
  for (const dv of sheet.dataValidations) {
14670
- if (dv.formula1 !== void 0) dv.formula1 = safe(rewrite2, dv.formula1, name);
14671
- if (dv.formula2 !== void 0) dv.formula2 = safe(rewrite2, dv.formula2, name);
15471
+ if (dv.formula1 !== void 0) dv.formula1 = safe(rewrite, dv.formula1, name);
15472
+ if (dv.formula2 !== void 0) dv.formula2 = safe(rewrite, dv.formula2, name);
14672
15473
  }
14673
15474
  for (const link of sheet.hyperlinks)
14674
15475
  if (link.location && /![A-Za-z$]/.test(link.location))
14675
- link.location = safe(rewrite2, link.location, name);
15476
+ link.location = safe(rewrite, link.location, name);
14676
15477
  for (const drawing of sheet.drawings) {
14677
15478
  if (drawing.kind !== "chart") continue;
14678
15479
  for (const series of drawing.series) {
14679
- if (series.nameRef) series.nameRef = safe(rewrite2, series.nameRef, name);
14680
- if (series.categoriesRef) series.categoriesRef = safe(rewrite2, series.categoriesRef, name);
14681
- if (series.valuesRef) series.valuesRef = safe(rewrite2, series.valuesRef, name);
15480
+ if (series.nameRef) series.nameRef = safe(rewrite, series.nameRef, name);
15481
+ if (series.categoriesRef) series.categoriesRef = safe(rewrite, series.categoriesRef, name);
15482
+ if (series.valuesRef) series.valuesRef = safe(rewrite, series.valuesRef, name);
14682
15483
  }
14683
15484
  }
14684
15485
  }
@@ -14865,7 +15666,7 @@ function shiftAxis(ctx, s, axis, at, count2, insert) {
14865
15666
  applyAxisShift(ctx, sheet, shift2);
14866
15667
  if (insert) inheritFormats(sheet, axis, at, count2);
14867
15668
  },
14868
- { sheet: s, structural: true }
15669
+ { sheet: s, structural: true, calc: { kind: "shift", sheet: s, shift: shift2 } }
14869
15670
  );
14870
15671
  }
14871
15672
  var insertRows = (ctx, s, at, count2) => shiftAxis(ctx, s, "row", at, count2, true);
@@ -14979,7 +15780,7 @@ function pasteHyperlinks(sheet, dest, cells, transpose2, skipBlanks, cutLocation
14979
15780
  }
14980
15781
 
14981
15782
  // xlsx/edit/clipboard-html.ts
14982
- var escapeHtml = (text) => text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
15783
+ var escapeHtml = (text2) => text2.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
14983
15784
  function cssColor(color, theme2) {
14984
15785
  if (!color || color.auto) return void 0;
14985
15786
  if (color.rgb) return `#${color.rgb.slice(-6)}`;
@@ -15044,12 +15845,12 @@ function toHtml(cells, theme2) {
15044
15845
  if (cell && typeof cell.value === "number") attrs.push(`x:num="${cell.value}"`);
15045
15846
  const css = cssFor(cell?.style, theme2);
15046
15847
  if (css) attrs.push(`style="${escapeHtml(css)}"`);
15047
- let text = escapeHtml(cell?.text ?? "").replace(/\n/g, "<br>");
15848
+ let text2 = escapeHtml(cell?.text ?? "").replace(/\n/g, "<br>");
15048
15849
  const link = links.get(`${r},${c}`);
15049
15850
  const href = htmlHref(link);
15050
15851
  if (href)
15051
- text = `<a href="${escapeHtml(href)}"${link?.tooltip ? ` title="${escapeHtml(link.tooltip)}"` : ""}>${text}</a>`;
15052
- tds.push(`<td${attrs.length ? ` ${attrs.join(" ")}` : ""}>${text}</td>`);
15852
+ text2 = `<a href="${escapeHtml(href)}"${link?.tooltip ? ` title="${escapeHtml(link.tooltip)}"` : ""}>${text2}</a>`;
15853
+ tds.push(`<td${attrs.length ? ` ${attrs.join(" ")}` : ""}>${text2}</td>`);
15053
15854
  }
15054
15855
  rows2.push(`<tr>${tds.join("")}</tr>`);
15055
15856
  }
@@ -15077,8 +15878,8 @@ var NAMED_COLORS2 = {
15077
15878
  aqua: "00FFFF",
15078
15879
  fuchsia: "FF00FF"
15079
15880
  };
15080
- function parseCssColor(text) {
15081
- const value2 = text.trim().toLowerCase();
15881
+ function parseCssColor(text2) {
15882
+ const value2 = text2.trim().toLowerCase();
15082
15883
  const hex2 = /^#([0-9a-f]{3}|[0-9a-f]{6})$/.exec(value2)?.[1];
15083
15884
  if (hex2)
15084
15885
  return {
@@ -15100,33 +15901,33 @@ var ENTITIES = {
15100
15901
  apos: "'",
15101
15902
  nbsp: " "
15102
15903
  };
15103
- function decodeEntities(text) {
15104
- return text.replace(/&(#x[0-9a-f]+|#\d+|[a-z]+);/gi, (whole, name) => {
15904
+ function decodeEntities(text2) {
15905
+ return text2.replace(/&(#x[0-9a-f]+|#\d+|[a-z]+);/gi, (whole, name) => {
15105
15906
  if (name.startsWith("#x") || name.startsWith("#X"))
15106
15907
  return String.fromCodePoint(parseInt(name.slice(2), 16));
15107
15908
  if (name.startsWith("#")) return String.fromCodePoint(Number(name.slice(1)));
15108
15909
  return ENTITIES[name.toLowerCase()] ?? whole;
15109
15910
  });
15110
15911
  }
15111
- function parseAttributes(text) {
15912
+ function parseAttributes(text2) {
15112
15913
  const attrs = /* @__PURE__ */ new Map();
15113
- for (const m of text.matchAll(
15914
+ for (const m of text2.matchAll(
15114
15915
  /([\w:-]{1,64})\s{0,16}=\s{0,16}(?:"([^"]*)"|'([^']*)'|([^\s>]+))/g
15115
15916
  ))
15116
15917
  attrs.set((m[1] ?? "").toLowerCase(), decodeEntities(m[2] ?? m[3] ?? m[4] ?? ""));
15117
15918
  return attrs;
15118
15919
  }
15119
- function parseCss(text) {
15920
+ function parseCss(text2) {
15120
15921
  const out = /* @__PURE__ */ new Map();
15121
- for (const decl of text.split(";")) {
15922
+ for (const decl of text2.split(";")) {
15122
15923
  const colon = decl.indexOf(":");
15123
15924
  if (colon < 0) continue;
15124
15925
  out.set(decl.slice(0, colon).trim().toLowerCase(), decl.slice(colon + 1).trim());
15125
15926
  }
15126
15927
  return out;
15127
15928
  }
15128
- function decodeNumberFormat(text) {
15129
- return text.replace(/^["']|["']$/g, "").replace(/\\([0-9A-Fa-f]{4})/g, (_m, hex2) => String.fromCharCode(parseInt(hex2, 16))).replace(/\\(.)/g, "$1");
15929
+ function decodeNumberFormat(text2) {
15930
+ return text2.replace(/^["']|["']$/g, "").replace(/\\([0-9A-Fa-f]{4})/g, (_m, hex2) => String.fromCharCode(parseInt(hex2, 16))).replace(/\\(.)/g, "$1");
15130
15931
  }
15131
15932
  var H_ALIGN = {
15132
15933
  left: "left",
@@ -15167,26 +15968,26 @@ function stylePatchFromCss(css, inner2) {
15167
15968
  if (numFmt) patch.numFmt = decodeNumberFormat(numFmt);
15168
15969
  return patch;
15169
15970
  }
15170
- function removeComments(text) {
15971
+ function removeComments(text2) {
15171
15972
  let out = "";
15172
15973
  let from = 0;
15173
15974
  for (; ; ) {
15174
- const open = text.indexOf("<!--", from);
15175
- const close = open < 0 ? -1 : text.indexOf("-->", open + 4);
15176
- if (close < 0) return out + text.slice(from);
15177
- out += text.slice(from, open);
15975
+ const open = text2.indexOf("<!--", from);
15976
+ const close = open < 0 ? -1 : text2.indexOf("-->", open + 4);
15977
+ if (close < 0) return out + text2.slice(from);
15978
+ out += text2.slice(from, open);
15178
15979
  from = close + 3;
15179
15980
  }
15180
15981
  }
15181
- function removeTags(text) {
15982
+ function removeTags(text2) {
15182
15983
  let out = "";
15183
15984
  let i2 = 0;
15184
- while (i2 < text.length) {
15185
- const ch = text[i2];
15985
+ while (i2 < text2.length) {
15986
+ const ch = text2[i2];
15186
15987
  if (ch === "<") {
15187
15988
  let j = i2 + 1;
15188
- while (j < text.length && text[j] !== "<" && text[j] !== ">") j++;
15189
- if (text[j] === ">") {
15989
+ while (j < text2.length && text2[j] !== "<" && text2[j] !== ">") j++;
15990
+ if (text2[j] === ">") {
15190
15991
  i2 = j + 1;
15191
15992
  continue;
15192
15993
  }
@@ -15198,15 +15999,15 @@ function removeTags(text) {
15198
15999
  }
15199
16000
  function stripTags(markup) {
15200
16001
  let previous;
15201
- let text = markup;
16002
+ let text2 = markup;
15202
16003
  do {
15203
- previous = text;
15204
- text = removeTags(removeComments(text));
15205
- } while (text !== previous);
15206
- return removeAll(text, ["<!--", "-->"]);
16004
+ previous = text2;
16005
+ text2 = removeTags(removeComments(text2));
16006
+ } while (text2 !== previous);
16007
+ return removeAll(text2, ["<!--", "-->"]);
15207
16008
  }
15208
- function removeAll(text, tokens) {
15209
- let current = text;
16009
+ function removeAll(text2, tokens) {
16010
+ let current = text2;
15210
16011
  let previous;
15211
16012
  do {
15212
16013
  previous = current;
@@ -15248,8 +16049,8 @@ function parseHtmlTable(html, base) {
15248
16049
  for (const [k, v] of parseCss(attrs.get("style") ?? "")) css.set(k, v);
15249
16050
  const patch = stylePatchFromCss(css, inner2);
15250
16051
  if (td[1]?.toLowerCase() === "h") patch.font = { bold: true, ...patch.font };
15251
- const text = cellText(inner2);
15252
- row2[c] = text === "" && !Object.keys(patch).length ? null : toCell(text, attrs, patch, base);
16052
+ const text2 = cellText(inner2);
16053
+ row2[c] = text2 === "" && !Object.keys(patch).length ? null : toCell(text2, attrs, patch, base);
15253
16054
  const rowSpan = Math.max(1, Number(attrs.get("rowspan") ?? 1) || 1);
15254
16055
  const colSpan = Math.max(1, Number(attrs.get("colspan") ?? 1) || 1);
15255
16056
  const anchor = /<a\b([^>]*)>/i.exec(inner2);
@@ -15281,35 +16082,35 @@ function parseHtmlTable(html, base) {
15281
16082
  );
15282
16083
  return rows2 && cols ? { rows: rows2, cols, data, merges, hyperlinks } : void 0;
15283
16084
  }
15284
- function toCell(text, attrs, patch, base) {
15285
- let value2 = text;
16085
+ function toCell(text2, attrs, patch, base) {
16086
+ let value2 = text2;
15286
16087
  const num2 = attrs.get("x:num");
15287
16088
  if (num2 !== void 0 && num2 !== "" && Number.isFinite(Number(num2))) value2 = Number(num2);
15288
- else if (attrs.has("x:bool")) value2 = text.toUpperCase() === "TRUE";
15289
- else if (patch.numFmt !== "@" && text !== "") {
15290
- const parsed = parseCellInput(text);
16089
+ else if (attrs.has("x:bool")) value2 = text2.toUpperCase() === "TRUE";
16090
+ else if (patch.numFmt !== "@" && text2 !== "") {
16091
+ const parsed = parseCellInput(text2);
15291
16092
  if (parsed.formula === void 0) value2 = parsed.value;
15292
16093
  if (!patch.numFmt && parsed.numFmt && typeof value2 === "number") patch.numFmt = parsed.numFmt;
15293
16094
  }
15294
- return { value: value2, text, style: patchStyle(base, patch) };
16095
+ return { value: value2, text: text2, style: patchStyle(base, patch) };
15295
16096
  }
15296
16097
 
15297
16098
  // xlsx/edit/clipboard-text.ts
15298
- function quoteField(text) {
15299
- return /[\t\r\n"]/.test(text) ? `"${text.replace(/"/g, '""')}"` : text;
16099
+ function quoteField(text2) {
16100
+ return /[\t\r\n"]/.test(text2) ? `"${text2.replace(/"/g, '""')}"` : text2;
15300
16101
  }
15301
16102
  function toTsv(rows2) {
15302
16103
  if (!rows2.length) return "";
15303
16104
  return rows2.map((row2) => row2.map(quoteField).join(" ")).join("\r\n") + "\r\n";
15304
16105
  }
15305
- function parseTsv(text) {
16106
+ function parseTsv(text2) {
15306
16107
  const rows2 = [];
15307
16108
  let row2 = [];
15308
16109
  let field = "";
15309
16110
  let i2 = 0;
15310
16111
  let atFieldStart = true;
15311
- const body2 = text.replace(/\r\n?/g, "\n").replace(/\n$/, "");
15312
- if (body2 === "") return text === "" ? [] : [[""]];
16112
+ const body2 = text2.replace(/\r\n?/g, "\n").replace(/\n$/, "");
16113
+ if (body2 === "") return text2 === "" ? [] : [[""]];
15313
16114
  while (i2 < body2.length) {
15314
16115
  const ch = body2[i2] ?? "";
15315
16116
  if (atFieldStart && ch === '"') {
@@ -15344,10 +16145,10 @@ function parseTsv(text) {
15344
16145
  for (const r of rows2) while (r.length < width) r.push("");
15345
16146
  return rows2;
15346
16147
  }
15347
- function findClosingQuote(text, from) {
15348
- for (let i2 = from; i2 < text.length; i2++) {
15349
- if (text[i2] !== '"') continue;
15350
- if (text[i2 + 1] === '"') {
16148
+ function findClosingQuote(text2, from) {
16149
+ for (let i2 = from; i2 < text2.length; i2++) {
16150
+ if (text2[i2] !== '"') continue;
16151
+ if (text2[i2 + 1] === '"') {
15351
16152
  i2++;
15352
16153
  continue;
15353
16154
  }
@@ -15624,12 +16425,12 @@ function copyRange(workbook, s, range2) {
15624
16425
  cells
15625
16426
  };
15626
16427
  }
15627
- function cellsFromText(workbook, text) {
15628
- if (/<table\b/i.test(text)) {
15629
- const parsed = parseHtmlTable(text, styleAt(workbook, 0));
16428
+ function cellsFromText(workbook, text2) {
16429
+ if (/<table\b/i.test(text2)) {
16430
+ const parsed = parseHtmlTable(text2, styleAt(workbook, 0));
15630
16431
  if (parsed) return parsed;
15631
16432
  }
15632
- const grid6 = parseTsv(text);
16433
+ const grid6 = parseTsv(text2);
15633
16434
  const data = grid6.map(
15634
16435
  (line2) => line2.map((field) => {
15635
16436
  if (field === "") return null;
@@ -15824,13 +16625,32 @@ function pasteSelection(ctx, sheet, selection, payload, request) {
15824
16625
  );
15825
16626
  }
15826
16627
 
16628
+ // xlsx/edit/external.ts
16629
+ function applyExternal(host, apply) {
16630
+ if (host.busy()) throw new Error("Cannot apply an external change inside an edit");
16631
+ const change = apply();
16632
+ if (!change) return false;
16633
+ const structural = change.structural ?? false;
16634
+ host.calculator.afterExternal(structural, change.cells ?? []);
16635
+ const out = {
16636
+ kind: change.kind ?? "remote",
16637
+ label: change.label,
16638
+ structural,
16639
+ external: true
16640
+ };
16641
+ if (change.sheet !== void 0) out.sheet = change.sheet;
16642
+ if (change.ranges?.length) out.ranges = change.ranges;
16643
+ host.emit(out);
16644
+ return true;
16645
+ }
16646
+
15827
16647
  // xlsx/edit/dimensions.ts
15828
16648
  var MDW = 7;
15829
16649
  var MAX_WIDTH = 255;
15830
16650
  var MAX_HEIGHT = 409;
15831
- function estimateWidth(text, style2) {
16651
+ function estimateWidth(text2, style2) {
15832
16652
  const scale2 = (style2.font.size ?? 11) / 11;
15833
- const longest = Math.max(...text.split("\n").map((line2) => line2.length));
16653
+ const longest = Math.max(...text2.split("\n").map((line2) => line2.length));
15834
16654
  return longest * MDW * scale2 * (style2.font.bold ? 1.1 : 1);
15835
16655
  }
15836
16656
  var pixelsToWidth = (px) => Math.round((px + 5) / MDW * 256) / 256;
@@ -15839,9 +16659,9 @@ function fitColumnWidth(ctx, sheet, col, measure2) {
15839
16659
  for (const [row2, cells] of sheet.rows) {
15840
16660
  const cell = cells.get(col);
15841
16661
  if (!cell || sheet.rowInfo.get(row2)?.hidden) continue;
15842
- const text = displayText(ctx.workbook, cell);
15843
- if (!text) continue;
15844
- widest = Math.max(widest, measure2(text, styleAt(ctx.workbook, cell.styleId)));
16662
+ const text2 = displayText(ctx.workbook, cell);
16663
+ if (!text2) continue;
16664
+ widest = Math.max(widest, measure2(text2, styleAt(ctx.workbook, cell.styleId)));
15845
16665
  }
15846
16666
  return widest < 0 ? void 0 : Math.min(MAX_WIDTH, pixelsToWidth(widest));
15847
16667
  }
@@ -16092,8 +16912,8 @@ function applyFilter(ctx, sheet, filter2) {
16092
16912
  for (let row2 = range2.start.row + 1; row2 <= range2.end.row; row2++) {
16093
16913
  const visible = (filter2.columns ?? []).every((fc) => {
16094
16914
  if (!fc.values && !fc.blank) return true;
16095
- const text = displayText(ctx.workbook, getCell(sheet, row2, range2.start.col + fc.offset));
16096
- return text === "" ? !!fc.blank : (fc.values ?? []).includes(text);
16915
+ const text2 = displayText(ctx.workbook, getCell(sheet, row2, range2.start.col + fc.offset));
16916
+ return text2 === "" ? !!fc.blank : (fc.values ?? []).includes(text2);
16097
16917
  });
16098
16918
  const info = { ...sheet.rowInfo.get(row2) };
16099
16919
  if (visible) delete info.hidden;
@@ -16192,11 +17012,11 @@ function formulaBarText(workbook, cell, options = {}) {
16192
17012
  styleAt(workbook, cell.styleId).numFmt || "General",
16193
17013
  workbook.date1904
16194
17014
  );
16195
- const text = cell.richText?.length ? cell.richText.map((run) => run.text).join("") : value2;
16196
- if (text === "" || options.quote === false) return text;
16197
- const parsed = parseCellInput(text, { date1904: workbook.date1904 });
16198
- const literal2 = parsed.formula === void 0 && parsed.value === text;
16199
- return literal2 ? text : `'${text}`;
17015
+ const text2 = cell.richText?.length ? cell.richText.map((run) => run.text).join("") : value2;
17016
+ if (text2 === "" || options.quote === false) return text2;
17017
+ const parsed = parseCellInput(text2, { date1904: workbook.date1904 });
17018
+ const literal2 = parsed.formula === void 0 && parsed.value === text2;
17019
+ return literal2 ? text2 : `'${text2}`;
16200
17020
  }
16201
17021
 
16202
17022
  // xlsx/edit/find.ts
@@ -16215,7 +17035,7 @@ function queryPattern(query, global = false) {
16215
17035
  if (query.wholeCell) source = `^(?:${source})$`;
16216
17036
  return new RegExp(source, `${query.matchCase ? "" : "i"}${global ? "g" : ""}`);
16217
17037
  }
16218
- var escapeRegex2 = (text) => text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
17038
+ var escapeRegex2 = (text2) => text2.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
16219
17039
  function searchText(workbook, query, sheet, row2, col) {
16220
17040
  const ws = workbook.sheets[sheet];
16221
17041
  if (!ws) return "";
@@ -16232,25 +17052,25 @@ function findAll(workbook, query) {
16232
17052
  for (const s of indices) {
16233
17053
  const sheet = workbook.sheets[s];
16234
17054
  if (!sheet) continue;
16235
- const positions = [];
17055
+ const positions2 = [];
16236
17056
  if (query.lookIn === "comments")
16237
- for (const c of sheet.comments) positions.push([c.address.row, c.address.col]);
16238
- else forEachCell(sheet, (_cell, row2, col) => positions.push([row2, col]));
16239
- if (query.order === "columns") positions.sort((a, b) => a[1] - b[1] || a[0] - b[0]);
16240
- else positions.sort((a, b) => a[0] - b[0] || a[1] - b[1]);
16241
- for (const [row2, col] of positions) {
17057
+ for (const c of sheet.comments) positions2.push([c.address.row, c.address.col]);
17058
+ else forEachCell(sheet, (_cell, row2, col) => positions2.push([row2, col]));
17059
+ if (query.order === "columns") positions2.sort((a, b) => a[1] - b[1] || a[0] - b[0]);
17060
+ else positions2.sort((a, b) => a[0] - b[0] || a[1] - b[1]);
17061
+ for (const [row2, col] of positions2) {
16242
17062
  if (query.range && query.sheet !== void 0 && !rangeContains(query.range, { row: row2, col }))
16243
17063
  continue;
16244
- const text = searchText(workbook, query, s, row2, col);
16245
- if (text && pattern.test(text)) matches2.push({ sheet: s, row: row2, col, text });
17064
+ const text2 = searchText(workbook, query, s, row2, col);
17065
+ if (text2 && pattern.test(text2)) matches2.push({ sheet: s, row: row2, col, text: text2 });
16246
17066
  }
16247
17067
  }
16248
17068
  return matches2;
16249
17069
  }
16250
- function replaceText(text, query, replacement) {
17070
+ function replaceText(text2, query, replacement) {
16251
17071
  const pattern = queryPattern(query, true);
16252
- if (!pattern) return text;
16253
- return text.replace(pattern, (match2) => match2 === "" ? "" : replacement);
17072
+ if (!pattern) return text2;
17073
+ return text2.replace(pattern, (match2) => match2 === "" ? "" : replacement);
16254
17074
  }
16255
17075
  var isSpilledAt = (workbook, at) => {
16256
17076
  const sheet = workbook.sheets[at.sheet];
@@ -16309,10 +17129,10 @@ function replaceOne(ctx, query, replacement, at) {
16309
17129
  const q = replaceQuery(query);
16310
17130
  if (q.lookIn !== "comments" && isSpilledAt(ctx.workbook, at)) return false;
16311
17131
  const pattern = queryPattern(q);
16312
- const text = searchText(ctx.workbook, q, at.sheet, at.row, at.col);
16313
- if (!pattern || !text || !pattern.test(text)) return false;
16314
- const match2 = { ...at, text };
16315
- if (replaceText(text, q, replacement) === text) return false;
17132
+ const text2 = searchText(ctx.workbook, q, at.sheet, at.row, at.col);
17133
+ if (!pattern || !text2 || !pattern.test(text2)) return false;
17134
+ const match2 = { ...at, text: text2 };
17135
+ if (replaceText(text2, q, replacement) === text2) return false;
16316
17136
  ctx.run(
16317
17137
  "Replace",
16318
17138
  "cells",
@@ -16660,6 +17480,14 @@ function setCalcMode(ctx, mode) {
16660
17480
 
16661
17481
  // xlsx/edit/session-calc.ts
16662
17482
  var isStructural = (step) => step.structural || step.entries.some((entry) => entry.before.kind !== "cells");
17483
+ function hintFor(step, mode) {
17484
+ const hint = step.calc;
17485
+ if (!hint) return void 0;
17486
+ if (hint.kind === "rename")
17487
+ return mode === "undo" ? { kind: "rename", from: hint.to, to: hint.from } : hint;
17488
+ return mode === "undo" ? void 0 : hint;
17489
+ }
17490
+ var settingsOf = (workbook) => `${workbook.iterate ? `${workbook.iterate.count}:${workbook.iterate.delta}` : ""}|${workbook.date1904}`;
16663
17491
  var SessionCalculator = class {
16664
17492
  constructor(workbook, calc, enabled) {
16665
17493
  this.workbook = workbook;
@@ -16669,31 +17497,113 @@ var SessionCalculator = class {
16669
17497
  workbook;
16670
17498
  calc;
16671
17499
  enabled;
16672
- /** Structural edits made in manual mode leave the dependency graph stale until a full pass. */
17500
+ /** Structural edits the engine could not follow leave the dependency graph stale (manual mode). */
16673
17501
  staleGraph = false;
17502
+ /** Cells changed in manual mode since the last calculation. */
17503
+ dirty = [];
17504
+ /** The settings at the last calculation; undefined before the first. */
17505
+ calculated;
16674
17506
  /** Recalculates after an applied, undone or redone step (failures become warnings). */
16675
- afterStep(step) {
16676
- if (!this.enabled) return;
17507
+ afterStep(step, mode = "apply") {
17508
+ if (!this.enabled) {
17509
+ this.calc.discardPreparation();
17510
+ return;
17511
+ }
17512
+ const structural = isStructural(step);
17513
+ const hint = structural ? hintFor(step, mode) : void 0;
16677
17514
  if (calcModeOf(this.workbook) === "manual") {
16678
- if (isStructural(step)) this.staleGraph = true;
17515
+ if (hint && !this.staleGraph && !this.dirty.length) {
17516
+ this.guard(() => this.follow(hint));
17517
+ return;
17518
+ }
17519
+ this.calc.discardPreparation();
17520
+ if (structural) this.staleGraph = true;
17521
+ else this.dirty.push(...touchedCells(step));
17522
+ return;
17523
+ }
17524
+ if (hint && !this.staleGraph) {
17525
+ this.guard(() => {
17526
+ this.follow(hint);
17527
+ this.calc.recalculateFrom(touchedCells(step));
17528
+ this.calculated = settingsOf(this.workbook);
17529
+ });
17530
+ return;
17531
+ }
17532
+ this.recalc(structural, () => touchedCells(step));
17533
+ }
17534
+ /** Recalculates after a change applied outside the history (a collaborator's edit). */
17535
+ afterExternal(structural, cells) {
17536
+ if (!this.enabled || calcModeOf(this.workbook) === "manual") {
17537
+ this.calc.discardPreparation();
17538
+ if (!this.enabled) return;
17539
+ if (structural) this.staleGraph = true;
17540
+ else this.dirty.push(...cells);
16679
17541
  return;
16680
17542
  }
17543
+ this.recalc(structural, () => cells);
17544
+ }
17545
+ follow(hint) {
17546
+ if (hint.kind === "shift") this.calc.shiftCells(hint.sheet, hint.shift);
17547
+ else this.calc.renameSheet(hint.from, hint.to);
17548
+ }
17549
+ guard(run) {
16681
17550
  try {
16682
- if (this.staleGraph || isStructural(step)) this.full();
16683
- else {
16684
- const changed = touchedCells(step);
16685
- if (changed.length) this.calc.recalculateFrom(changed);
16686
- }
17551
+ run();
16687
17552
  } catch (error) {
16688
17553
  const message = `Recalculation failed: ${error instanceof Error ? error.message : String(error)}`;
16689
17554
  if (!this.workbook.warnings.includes(message)) this.workbook.warnings.push(message);
16690
17555
  }
16691
17556
  }
16692
- /** Rebuilds the dependency graph and recalculates every formula (F9). */
17557
+ /** Builds the dependency graph ahead of the first edit (see `EditSession.prepareCalculation`). */
17558
+ prepare(timeRemaining) {
17559
+ if (!this.enabled || calcModeOf(this.workbook) === "manual" || this.staleGraph) return true;
17560
+ try {
17561
+ return this.calc.prepare(timeRemaining);
17562
+ } catch {
17563
+ this.calc.discardPreparation();
17564
+ return true;
17565
+ }
17566
+ }
17567
+ /**
17568
+ * Before a structural edit the graph can follow in place: finishes a graph being prepared (or
17569
+ * builds it) while it still matches the workbook, so the edit moves it instead of rebuilding.
17570
+ */
17571
+ beforeStructural() {
17572
+ if (!this.enabled || calcModeOf(this.workbook) === "manual" || this.staleGraph) return;
17573
+ this.prepare();
17574
+ }
17575
+ recalc(structural, cells) {
17576
+ this.guard(() => {
17577
+ if (this.staleGraph || structural) this.full();
17578
+ else {
17579
+ const changed = cells();
17580
+ if (changed.length) this.calc.recalculateFrom(changed);
17581
+ this.calculated = settingsOf(this.workbook);
17582
+ }
17583
+ });
17584
+ }
17585
+ /** Rebuilds the dependency graph and recalculates every formula (Ctrl+Alt+F9). */
16693
17586
  full() {
16694
17587
  this.staleGraph = false;
17588
+ this.dirty = [];
16695
17589
  this.calc.invalidate();
16696
17590
  this.calc.recalculateAll();
17591
+ this.calculated = settingsOf(this.workbook);
17592
+ }
17593
+ /**
17594
+ * Calculate Now (F9): the cells changed since the last calculation, the formulas structural
17595
+ * edits queued, their dependents and the volatile functions. Everything when `full`, before
17596
+ * the session's first calculation, after the iteration settings changed or while the graph
17597
+ * is stale.
17598
+ */
17599
+ now(full) {
17600
+ if (full || this.staleGraph || this.calculated !== settingsOf(this.workbook)) {
17601
+ this.full();
17602
+ return;
17603
+ }
17604
+ const changed = this.dirty;
17605
+ this.dirty = [];
17606
+ this.calc.recalculateFrom(changed);
16697
17607
  }
16698
17608
  /**
16699
17609
  * Recalculates one sheet's formulas and their dependents (Shift+F9); after structural edits
@@ -17014,8 +17924,8 @@ function nextTableName(workbook) {
17014
17924
  }
17015
17925
  function uniqueHeaders(texts) {
17016
17926
  const used = /* @__PURE__ */ new Set();
17017
- return texts.map((text, i2) => {
17018
- let base = text.trim() || `Column${i2 + 1}`;
17927
+ return texts.map((text2, i2) => {
17928
+ let base = text2.trim() || `Column${i2 + 1}`;
17019
17929
  if (!used.has(base.toLowerCase())) {
17020
17930
  used.add(base.toLowerCase());
17021
17931
  return base;
@@ -17490,8 +18400,8 @@ function normalizeDigestAlgorithmName(name) {
17490
18400
  // digest/base64.ts
17491
18401
  var ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
17492
18402
  var VALUES = new Map([...ALPHABET].map((char, index2) => [char, index2]));
17493
- function decodeBase64(text) {
17494
- const compact3 = text.replace(/\s+/g, "");
18403
+ function decodeBase64(text2) {
18404
+ const compact3 = text2.replace(/\s+/g, "");
17495
18405
  const body2 = compact3.replace(/={1,2}$/, "");
17496
18406
  if (body2.length % 4 === 1) return void 0;
17497
18407
  if (compact3.length !== body2.length && compact3.length % 4 !== 0) return void 0;
@@ -19500,6 +20410,222 @@ function bordersView(border, theme2) {
19500
20410
  return out;
19501
20411
  }
19502
20412
 
20413
+ // xlsx/layout/sparkline-view.ts
20414
+ var DEFAULTS = {
20415
+ colorSeries: "#376092",
20416
+ colorNegative: "#D00000",
20417
+ colorAxis: "#000000",
20418
+ colorMarkers: "#D00000",
20419
+ colorFirst: "#D00000",
20420
+ colorLast: "#D00000",
20421
+ colorHigh: "#D00000",
20422
+ colorLow: "#D00000"
20423
+ };
20424
+ var COLUMN_GAP = 0.2;
20425
+ function extent(values2) {
20426
+ let min = Infinity;
20427
+ let max = -Infinity;
20428
+ for (const v of values2) {
20429
+ if (v === null) continue;
20430
+ if (v < min) min = v;
20431
+ if (v > max) max = v;
20432
+ }
20433
+ return min <= max ? { min, max } : void 0;
20434
+ }
20435
+ function sparklineValues(group, values2) {
20436
+ return group.displayEmptyCellsAs === "zero" ? values2.map((v) => v ?? 0) : [...values2];
20437
+ }
20438
+ function sparklineScale(group, all2, index2) {
20439
+ const own = extent(sparklineValues(group, all2[index2]?.values ?? []));
20440
+ const needsGroup = group.minAxisType === "group" || group.maxAxisType === "group";
20441
+ const shared = needsGroup ? extent(all2.flatMap((data) => sparklineValues(group, data.values))) : void 0;
20442
+ const end = (type, manual, key) => {
20443
+ if (type === "custom" && manual !== void 0) return manual;
20444
+ if (type === "group" && shared) return shared[key];
20445
+ return own?.[key];
20446
+ };
20447
+ const min = end(group.minAxisType, group.manualMin, "min");
20448
+ const max = end(group.maxAxisType, group.manualMax, "max");
20449
+ return min === void 0 || max === void 0 ? void 0 : { min, max };
20450
+ }
20451
+ function positions(group, data, n) {
20452
+ const dates = data.dates;
20453
+ if (group.dateAxis && dates && dates.length === n) {
20454
+ const span4 = extent(dates);
20455
+ if (span4) {
20456
+ const width = span4.max - span4.min;
20457
+ return dates.map((d) => d === null ? null : width ? (d - span4.min) / width : 0.5);
20458
+ }
20459
+ }
20460
+ return Array.from({ length: n }, (_, i2) => n === 1 ? 0.5 : i2 / (n - 1));
20461
+ }
20462
+ function pointFacts(values2) {
20463
+ const numbers3 = values2.filter((x) => x !== null);
20464
+ let last = values2.length - 1;
20465
+ while (last >= 0 && values2[last] === null) last--;
20466
+ return {
20467
+ high: Math.max(...numbers3),
20468
+ low: Math.min(...numbers3),
20469
+ first: values2.findIndex((x) => x !== null),
20470
+ last
20471
+ };
20472
+ }
20473
+ function pointColor(group, v, i2, facts, colors, markers) {
20474
+ let color = markers && group.markers ? colors.colorMarkers : void 0;
20475
+ if (group.negative && v < 0) color = colors.colorNegative;
20476
+ if (group.high && v === facts.high) color = colors.colorHigh;
20477
+ if (group.low && v === facts.low) color = colors.colorLow;
20478
+ if (group.first && i2 === facts.first) color = colors.colorFirst;
20479
+ if (group.last && i2 === facts.last) color = colors.colorLast;
20480
+ return color;
20481
+ }
20482
+ function resolveColors(group, theme2) {
20483
+ const out = { ...DEFAULTS };
20484
+ for (const key of Object.keys(DEFAULTS)) {
20485
+ const color = group[key];
20486
+ out[key] = resolveColor(color, theme2, DEFAULTS[key]) ?? DEFAULTS[key];
20487
+ }
20488
+ return out;
20489
+ }
20490
+ function sparklineView(group, data, scale2, theme2) {
20491
+ const colors = resolveColors(group, theme2);
20492
+ const view = {
20493
+ type: group.type,
20494
+ color: colors.colorSeries,
20495
+ lineWeightPt: group.lineWeight,
20496
+ lines: [],
20497
+ markers: [],
20498
+ columns: []
20499
+ };
20500
+ const values2 = sparklineValues(group, data.values);
20501
+ const n = values2.length;
20502
+ if (!n || !scale2) return view;
20503
+ const facts = pointFacts(values2);
20504
+ const xs = positions(group, data, n);
20505
+ const flip = (x) => group.rightToLeft ? 1 - x : x;
20506
+ const range2 = scale2.max - scale2.min;
20507
+ const yOf = (v) => range2 ? Math.max(0, Math.min(1, (scale2.max - v) / range2)) : 0.5;
20508
+ if (group.type === "line") {
20509
+ let segment = [];
20510
+ values2.forEach((v, i2) => {
20511
+ const x = xs[i2];
20512
+ if (v === null || x === null || x === void 0) {
20513
+ if (group.displayEmptyCellsAs === "gap" && segment.length) {
20514
+ view.lines.push(segment);
20515
+ segment = [];
20516
+ }
20517
+ return;
20518
+ }
20519
+ const point = { x: flip(x), y: yOf(v) };
20520
+ segment.push(point);
20521
+ const color = pointColor(group, v, i2, facts, colors, true);
20522
+ if (color) view.markers.push({ ...point, color });
20523
+ });
20524
+ if (segment.length) view.lines.push(segment);
20525
+ } else {
20526
+ const slot = 1 / n;
20527
+ const w = slot * (1 - COLUMN_GAP);
20528
+ const base = yOf(Math.max(scale2.min, Math.min(scale2.max, 0)));
20529
+ values2.forEach((v, i2) => {
20530
+ const position = xs[i2];
20531
+ if (v === null || position === null || position === void 0) return;
20532
+ if (v === 0) return;
20533
+ let top;
20534
+ let bottom;
20535
+ if (group.type === "stacked") [top, bottom] = v > 0 ? [0, 0.5] : [0.5, 1];
20536
+ else if (!range2) [top, bottom] = [0, 1];
20537
+ else [top, bottom] = [Math.min(base, yOf(v)), Math.max(base, yOf(v))];
20538
+ const centre = flip(slot / 2 + position * (1 - slot));
20539
+ const color = pointColor(group, v, i2, facts, colors, false) ?? view.color;
20540
+ view.columns.push({ x: centre - w / 2, y: top, w, h: bottom - top, color });
20541
+ });
20542
+ }
20543
+ if (group.type === "stacked") {
20544
+ if (group.displayXAxis) view.axis = { y: 0.5, color: colors.colorAxis };
20545
+ } else if (group.displayXAxis && range2 && scale2.min <= 0 && scale2.max >= 0)
20546
+ view.axis = { y: yOf(0), color: colors.colorAxis };
20547
+ return view;
20548
+ }
20549
+
20550
+ // xlsx/layout/sparkline-data.ts
20551
+ var MAX_POINTS = 1e4;
20552
+ var hostIndex = /* @__PURE__ */ new WeakMap();
20553
+ function hosts(sheet) {
20554
+ const groups = sheetSparklineGroups(sheet);
20555
+ let index2 = hostIndex.get(groups);
20556
+ if (!index2) {
20557
+ index2 = /* @__PURE__ */ new Map();
20558
+ for (const group of groups)
20559
+ group.sparklines.forEach((line2, i2) => {
20560
+ const key = cellKey(line2.host.start.row, line2.host.start.col);
20561
+ if (!index2.has(key)) index2.set(key, { group, index: i2 });
20562
+ });
20563
+ hostIndex.set(groups, index2);
20564
+ }
20565
+ return index2;
20566
+ }
20567
+ function hasSparklineAt(sheet, row2, col) {
20568
+ return hosts(sheet).has(cellKey(row2, col));
20569
+ }
20570
+ function resolveSparklineRange(workbook, sheet, formula) {
20571
+ const ref = formula.trim().replace(/^=/, "");
20572
+ const bang = ref.lastIndexOf("!");
20573
+ let target2 = sheet;
20574
+ if (bang >= 0) {
20575
+ const raw = ref.slice(0, bang);
20576
+ const name = /^'.*'$/.test(raw) ? raw.slice(1, -1).replace(/''/g, "'") : raw;
20577
+ target2 = sheetByName(workbook, name);
20578
+ }
20579
+ const range2 = parseRange(ref.slice(bang + 1).replace(/\$/g, ""));
20580
+ return target2 && range2 ? { sheet: target2, range: normalizeRange(range2) } : void 0;
20581
+ }
20582
+ var rowHidden = (sheet, row2) => sheet.rowInfo.get(row2)?.hidden === true;
20583
+ var colHidden = (sheet, col) => sheet.columns.some((c) => c.hidden === true && col >= c.min && col <= c.max);
20584
+ function readSparklineValues(sheet, range2, displayHidden) {
20585
+ let endRow = range2.end.row;
20586
+ if (endRow - range2.start.row >= MAX_POINTS) {
20587
+ let lastRow = range2.start.row;
20588
+ for (const row2 of sheet.rows.keys()) if (row2 > lastRow) lastRow = row2;
20589
+ endRow = Math.min(endRow, lastRow);
20590
+ }
20591
+ const out = [];
20592
+ for (let row2 = range2.start.row; row2 <= endRow && out.length < MAX_POINTS; row2++) {
20593
+ if (!displayHidden && rowHidden(sheet, row2)) continue;
20594
+ for (let col = range2.start.col; col <= range2.end.col && out.length < MAX_POINTS; col++) {
20595
+ if (!displayHidden && colHidden(sheet, col)) continue;
20596
+ const value2 = getCell(sheet, row2, col)?.value;
20597
+ out.push(typeof value2 === "number" && Number.isFinite(value2) ? value2 : null);
20598
+ }
20599
+ }
20600
+ return out;
20601
+ }
20602
+ function groupData(workbook, sheet, group) {
20603
+ const dateRange = group.dateAxis && group.dateFormula;
20604
+ const dates = dateRange ? resolveSparklineRange(workbook, sheet, dateRange) : void 0;
20605
+ const dateValues = dates ? readSparklineValues(dates.sheet, dates.range, group.displayHidden) : void 0;
20606
+ return group.sparklines.map((line2) => {
20607
+ const source = line2.formula ? resolveSparklineRange(workbook, sheet, line2.formula) : void 0;
20608
+ const values2 = source ? readSparklineValues(source.sheet, source.range, group.displayHidden) : [];
20609
+ return dateValues ? { values: values2, dates: dateValues } : { values: values2 };
20610
+ });
20611
+ }
20612
+ function sparklineViewAt(workbook, sheetIndex2, row2, col) {
20613
+ const sheet = workbook.sheets[sheetIndex2];
20614
+ if (!sheet) return void 0;
20615
+ const entry = hosts(sheet).get(cellKey(row2, col));
20616
+ if (!entry) return void 0;
20617
+ const { group, index: index2 } = entry;
20618
+ const needsGroup = group.minAxisType === "group" || group.maxAxisType === "group";
20619
+ const data = needsGroup ? groupData(workbook, sheet, group) : groupData(workbook, sheet, { ...group, sparklines: [group.sparklines[index2]] });
20620
+ const at = needsGroup ? index2 : 0;
20621
+ return sparklineView(
20622
+ group,
20623
+ data[at] ?? { values: [] },
20624
+ sparklineScale(group, data, at),
20625
+ workbook.theme
20626
+ );
20627
+ }
20628
+
19503
20629
  // xlsx/layout/units.ts
19504
20630
  var DEFAULT_MAX_DIGIT_WIDTH = 7;
19505
20631
  var DEFAULT_BASE_COL_WIDTH = 8;
@@ -19603,6 +20729,8 @@ function cellView(workbook, sheetIndex2, row2, col, cf, options = {}) {
19603
20729
  if (fill) view.fill = fill;
19604
20730
  if (conditional?.dataBar) view.dataBar = conditional.dataBar;
19605
20731
  if (conditional?.icon) view.icon = conditional.icon;
20732
+ const sparkline = sparklineViewAt(workbook, sheetIndex2, row2, col);
20733
+ if (sparkline) view.sparkline = sparkline;
19606
20734
  const link = sheet.hyperlinks.find((h2) => rangeContains(h2.range, { row: row2, col }));
19607
20735
  if (link) {
19608
20736
  view.hasHyperlink = true;
@@ -19809,9 +20937,9 @@ function lineHeightPoints(sizePt) {
19809
20937
  }
19810
20938
  return Math.max(0.75, Math.ceil(height / 0.75 - 1e-9) * 0.75);
19811
20939
  }
19812
- function wrappedLineCount(text, width, measure2) {
20940
+ function wrappedLineCount(text2, width, measure2) {
19813
20941
  let lines = 0;
19814
- for (const paragraph of text.split(/\r?\n/)) {
20942
+ for (const paragraph of text2.split(/\r?\n/)) {
19815
20943
  lines++;
19816
20944
  if (width <= 0) continue;
19817
20945
  let current = "";
@@ -19852,13 +20980,13 @@ function autoFitRowHeight(workbook, sheetIndex2, row2, measure2) {
19852
20980
  let lines = 1;
19853
20981
  if (view.wrap) {
19854
20982
  const width = metrics.colWidth(col) - COLUMN_PADDING_PX - 1 - view.indentPx;
19855
- lines = wrappedLineCount(view.text, width, (text) => measure2(text, view.font));
20983
+ lines = wrappedLineCount(view.text, width, (text2) => measure2(text2, view.font));
19856
20984
  }
19857
20985
  tallest = Math.max(tallest, lines * lineHeightPoints(sizePt));
19858
20986
  }
19859
20987
  return tallest > 0 ? tallest : sheet.defaultRowHeight;
19860
20988
  }
19861
- var approximateMeasure = (text, font) => text.length * font.sizePx * (font.bold ? 0.58 : 0.53);
20989
+ var approximateMeasure = (text2, font) => text2.length * font.sizePx * (font.bold ? 0.58 : 0.53);
19862
20990
 
19863
20991
  // xlsx/edit/row-autofit.ts
19864
20992
  var MAX_HEIGHT2 = 409;
@@ -19984,12 +21112,12 @@ function renameSheet(ctx, index2, name) {
19984
21112
  ctx.run(
19985
21113
  "Rename sheet",
19986
21114
  "sheets",
19987
- [{ kind: "workbook" }],
21115
+ [{ kind: "refs" }],
19988
21116
  () => {
19989
21117
  rewriteFormulas(workbook, (formula) => renameSheetInFormula(formula, old, name));
19990
21118
  sheet.name = name;
19991
21119
  },
19992
- { sheet: index2, structural: true }
21120
+ { sheet: index2, structural: true, calc: { kind: "rename", from: old, to: name } }
19993
21121
  );
19994
21122
  }
19995
21123
  function moveSheet(ctx, from, to) {
@@ -20121,19 +21249,19 @@ function setTabColor(ctx, index2, color) {
20121
21249
 
20122
21250
  // xlsx/edit/validation-list.ts
20123
21251
  function listSource(workbook, sheet, formula, evaluate, at, depth = 0) {
20124
- const text = formula.replace(/^=/, "").trim();
20125
- const literal2 = /^"((?:[^"]|"")*)"$/.exec(text);
21252
+ const text2 = formula.replace(/^=/, "").trim();
21253
+ const literal2 = /^"((?:[^"]|"")*)"$/.exec(text2);
20126
21254
  if (literal2)
20127
21255
  return (literal2[1] ?? "").replace(/""/g, '"').split(",").map((s) => s.trim()).filter((s) => s !== "").map((s) => ({ text: s, value: parseCellInput(s, { date1904: workbook.date1904 }).value }));
20128
21256
  const named2 = workbook.definedNames.find(
20129
- (n) => n.name.toLowerCase() === text.toLowerCase() && (n.localSheet === void 0 || n.localSheet === sheet)
21257
+ (n) => n.name.toLowerCase() === text2.toLowerCase() && (n.localSheet === void 0 || n.localSheet === sheet)
20130
21258
  );
20131
21259
  if (named2 && depth < 4)
20132
21260
  return listSource(workbook, sheet, named2.formula, evaluate, at, depth + 1);
20133
- const ref = /^(?:'((?:[^']|'')+)'|([^'!]+))!(.+)$/.exec(text);
21261
+ const ref = /^(?:'((?:[^']|'')+)'|([^'!]+))!(.+)$/.exec(text2);
20134
21262
  const sheetName = ref ? ref[1]?.replace(/''/g, "'") ?? ref[2] : void 0;
20135
21263
  const target2 = sheetName ? sheetByName(workbook, sheetName) : workbook.sheets[sheet];
20136
- const range2 = parseRange((ref ? ref[3] ?? "" : text).replace(/\$/g, ""));
21264
+ const range2 = parseRange((ref ? ref[3] ?? "" : text2).replace(/\$/g, ""));
20137
21265
  if (target2 && range2) {
20138
21266
  const out = [];
20139
21267
  forEachCellInRange(target2, range2, (cell) => {
@@ -20144,7 +21272,7 @@ function listSource(workbook, sheet, formula, evaluate, at, depth = 0) {
20144
21272
  }
20145
21273
  if (!evaluate) return void 0;
20146
21274
  try {
20147
- const value2 = evaluate(text, at);
21275
+ const value2 = evaluate(text2, at);
20148
21276
  return value2 === null ? [] : [{ text: rawText(value2), value: value2 }];
20149
21277
  } catch {
20150
21278
  return void 0;
@@ -20183,12 +21311,12 @@ function validationAt(workbook, sheet, row2, col) {
20183
21311
  }
20184
21312
  function operand3(formula, evaluate, at) {
20185
21313
  if (formula === void 0) return void 0;
20186
- const text = formula.replace(/^=/, "").trim();
20187
- if (text !== "" && Number.isFinite(Number(text))) return Number(text);
20188
- const quoted = /^"((?:[^"]|"")*)"$/.exec(text);
21314
+ const text2 = formula.replace(/^=/, "").trim();
21315
+ if (text2 !== "" && Number.isFinite(Number(text2))) return Number(text2);
21316
+ const quoted = /^"((?:[^"]|"")*)"$/.exec(text2);
20189
21317
  if (quoted) return (quoted[1] ?? "").replace(/""/g, '"');
20190
21318
  try {
20191
- return evaluate(text, at);
21319
+ return evaluate(text2, at);
20192
21320
  } catch {
20193
21321
  return void 0;
20194
21322
  }
@@ -20230,8 +21358,8 @@ function relativeTo(dv, formula, at) {
20230
21358
  const dRow = at.row - top;
20231
21359
  const dCol = at.col - left2;
20232
21360
  if (dRow === 0 && dCol === 0) return formula;
20233
- const text = formula.replace(/^=/, "");
20234
- return translateFormula(text, dRow, dCol);
21361
+ const text2 = formula.replace(/^=/, "");
21362
+ return translateFormula(text2, dRow, dCol);
20235
21363
  }
20236
21364
  function withProposedValue(workbook, at, value2, fn) {
20237
21365
  const sheet = workbook.sheets[at.sheet];
@@ -20365,13 +21493,12 @@ function createEditSession(workbook, options = {}) {
20365
21493
  for (const listener of [...listeners2]) listener(change);
20366
21494
  };
20367
21495
  const calculator = new SessionCalculator(workbook, calc, autoRecalc);
20368
- const recalc = (step) => calculator.afterStep(step);
20369
- const begin = (label2, kind, info) => ({
20370
- step: { label: label2, entries: [], structural: info.structural ?? false },
20371
- kind,
20372
- sheet: info.sheet,
20373
- ranges: [...info.ranges ?? []]
20374
- });
21496
+ const recalc = (step, mode = "apply") => calculator.afterStep(step, mode);
21497
+ const begin = (label2, kind, info) => {
21498
+ const step = { label: label2, entries: [], structural: info.structural ?? false };
21499
+ if (info.calc) step.calc = info.calc;
21500
+ return { step, kind, sheet: info.sheet, ranges: [...info.ranges ?? []] };
21501
+ };
20375
21502
  const finish = (current) => {
20376
21503
  if (!current.step.entries.length) return;
20377
21504
  history.push(current.step);
@@ -20396,10 +21523,12 @@ function createEditSession(workbook, options = {}) {
20396
21523
  const outer = !open;
20397
21524
  const current = open ?? begin(label2, kind, info);
20398
21525
  if (!outer) {
21526
+ delete current.step.calc;
20399
21527
  if (info.structural) current.step.structural = true;
20400
21528
  if (current.sheet === void 0 && info.sheet !== void 0) current.sheet = info.sheet;
20401
21529
  current.ranges.push(...info.ranges ?? []);
20402
21530
  }
21531
+ if (outer && info.calc) calculator.beforeStructural();
20403
21532
  open = current;
20404
21533
  const mark = current.step.entries.length;
20405
21534
  const befores = scopes.map((scope) => captureScope(workbook, scope));
@@ -20447,14 +21576,14 @@ function createEditSession(workbook, options = {}) {
20447
21576
  if (open) throw new Error(`Cannot ${kind} inside a batch`);
20448
21577
  const step = kind === "undo" ? history.undo(workbook) : history.redo(workbook);
20449
21578
  if (!step) return false;
20450
- recalc(step);
21579
+ recalc(step, kind);
20451
21580
  emit({ kind, label: step.label, structural: step.structural });
20452
21581
  return true;
20453
21582
  };
20454
21583
  return {
20455
21584
  workbook,
20456
21585
  calc,
20457
- setCellInput: (s, r, c, text) => setCellInput(ctx, s, r, c, text),
21586
+ setCellInput: (s, r, c, text2) => setCellInput(ctx, s, r, c, text2),
20458
21587
  setCellValue: (s, r, c, value2) => setCellValue(ctx, s, r, c, value2),
20459
21588
  setRangeValues: (s, at, rows2) => setRangeValues(ctx, s, at, rows2),
20460
21589
  clearRange: (s, range2, what) => clearRange(ctx, s, range2, what),
@@ -20487,7 +21616,7 @@ function createEditSession(workbook, options = {}) {
20487
21616
  setSheetState: (i2, state) => setSheetState(ctx, i2, state),
20488
21617
  setTabColor: (i2, color) => setTabColor(ctx, i2, color),
20489
21618
  setFreeze: (s, freeze) => setFreeze(ctx, s, freeze),
20490
- setComment: (s, at, text, author) => setComment(ctx, s, at, text, author),
21619
+ setComment: (s, at, text2, author) => setComment(ctx, s, at, text2, author),
20491
21620
  setHyperlink: (s, range2, link) => setHyperlink(ctx, s, range2, link),
20492
21621
  addConditionalFormat: (s, cf) => addConditionalFormat(ctx, s, cf),
20493
21622
  clearConditionalFormats: (s, range2) => clearConditionalFormats(ctx, s, range2),
@@ -20526,10 +21655,11 @@ function createEditSession(workbook, options = {}) {
20526
21655
  setDocumentProperties: (patch) => setDocumentProperties(ctx, patch),
20527
21656
  setAutoRecalc: (enabled) => setCalcMode(ctx, enabled ? "auto" : "manual"),
20528
21657
  autoRecalc: () => autoRecalc && calcModeOf(workbook) === "auto",
20529
- calculateNow() {
20530
- calculator.full();
21658
+ calculateNow(options2) {
21659
+ calculator.now(options2?.full ?? false);
20531
21660
  emit({ kind: "cells", label: "Calculate now", structural: false });
20532
21661
  },
21662
+ prepareCalculation: (opts) => calculator.prepare(opts?.timeRemaining),
20533
21663
  calculateSheet(s) {
20534
21664
  calculator.sheet(s);
20535
21665
  emit({ kind: "cells", label: "Calculate sheet", sheet: s, structural: false });
@@ -20564,18 +21694,19 @@ function createEditSession(workbook, options = {}) {
20564
21694
  onChange(listener) {
20565
21695
  listeners2.add(listener);
20566
21696
  return () => listeners2.delete(listener);
20567
- }
21697
+ },
21698
+ applyExternal: (apply) => applyExternal({ calculator, emit, busy: () => !!open }, apply)
20568
21699
  };
20569
21700
  }
20570
21701
 
20571
21702
  // xlsx/layout/cf-helpers.ts
20572
21703
  function literal(formula) {
20573
- const text = formula.trim();
20574
- if (/^[+-]?(\d+\.?\d*|\.\d+)(e[+-]?\d+)?$/i.test(text)) return Number(text);
20575
- const quoted = /^"((?:[^"]|"")*)"$/.exec(text);
21704
+ const text2 = formula.trim();
21705
+ if (/^[+-]?(\d+\.?\d*|\.\d+)(e[+-]?\d+)?$/i.test(text2)) return Number(text2);
21706
+ const quoted = /^"((?:[^"]|"")*)"$/.exec(text2);
20576
21707
  if (quoted) return (quoted[1] ?? "").replace(/""/g, '"');
20577
- if (/^TRUE$/i.test(text)) return true;
20578
- if (/^FALSE$/i.test(text)) return false;
21708
+ if (/^TRUE$/i.test(text2)) return true;
21709
+ if (/^FALSE$/i.test(text2)) return false;
20579
21710
  return void 0;
20580
21711
  }
20581
21712
  function localTodaySerial(date1904) {
@@ -20922,12 +22053,12 @@ function createConditionalFormatEvaluator(workbook, sheetIndex2, evaluate, optio
20922
22053
  case "beginsWith":
20923
22054
  case "endsWith": {
20924
22055
  if (isCellError(value2)) return false;
20925
- const text = valueText(value2).toLowerCase();
22056
+ const text2 = valueText(value2).toLowerCase();
20926
22057
  const needle = rule.text.toLowerCase();
20927
- if (rule.type === "containsText") return text.includes(needle);
20928
- if (rule.type === "notContainsText") return !text.includes(needle);
20929
- if (rule.type === "beginsWith") return text.startsWith(needle);
20930
- return text.endsWith(needle);
22058
+ if (rule.type === "containsText") return text2.includes(needle);
22059
+ if (rule.type === "notContainsText") return !text2.includes(needle);
22060
+ if (rule.type === "beginsWith") return text2.startsWith(needle);
22061
+ return text2.endsWith(needle);
20931
22062
  }
20932
22063
  case "timePeriod":
20933
22064
  return typeof value2 === "number" && inTimePeriod(rule.timePeriod, value2, today(), workbook.date1904);
@@ -21058,7 +22189,7 @@ function overflowExtent(sheet, metrics, row2, col, textWidth, hAlign, maxSpan =
21058
22189
  return result2();
21059
22190
  }
21060
22191
 
21061
- // xlsx/layout/font-family.ts
22192
+ // text/css-font-family.ts
21062
22193
  var FALLBACKS = {
21063
22194
  calibri: '"Calibri", "Carlito", "Segoe UI", Arial, sans-serif',
21064
22195
  "calibri light": '"Calibri Light", "Calibri", "Carlito", "Segoe UI", Arial, sans-serif',
@@ -21459,7 +22590,7 @@ function styleCssFont(style2) {
21459
22590
  }
21460
22591
  function measure(ctx) {
21461
22592
  const grid6 = ctx.grid();
21462
- return grid6 ? (text, style2) => grid6.measureText(text, styleCssFont(style2)) : void 0;
22593
+ return grid6 ? (text2, style2) => grid6.measureText(text2, styleCssFont(style2)) : void 0;
21463
22594
  }
21464
22595
  var UNSET = void 0;
21465
22596
 
@@ -21838,19 +22969,19 @@ function mergeMessageModules(modules) {
21838
22969
  for (const value2 of Object.values(module)) {
21839
22970
  if (!value2 || typeof value2 !== "object" || Array.isArray(value2)) continue;
21840
22971
  const entries = Object.entries(value2);
21841
- if (!entries.every(([, text]) => typeof text === "string")) continue;
21842
- for (const [key, text] of entries) merged[key] = text;
22972
+ if (!entries.every(([, text2]) => typeof text2 === "string")) continue;
22973
+ for (const [key, text2] of entries) merged[key] = text2;
21843
22974
  }
21844
22975
  }
21845
22976
  return merged;
21846
22977
  }
21847
22978
 
21848
22979
  // i18n/translator.ts
21849
- var SINGLE = /\{(\w+)\}/g;
22980
+ var SINGLE2 = /\{(\w+)\}/g;
21850
22981
  var DOUBLE = /\{\{\s*(\w+)\s*\}\}/g;
21851
22982
  function interpolate(template, params, placeholder = "single") {
21852
22983
  if (!params) return template;
21853
- const pattern = placeholder === "double" ? DOUBLE : SINGLE;
22984
+ const pattern = placeholder === "double" ? DOUBLE : SINGLE2;
21854
22985
  return template.replace(
21855
22986
  pattern,
21856
22987
  (match2, name) => Object.prototype.hasOwnProperty.call(params, name) && params[name] !== void 0 ? String(params[name]) : match2
@@ -21859,15 +22990,45 @@ function interpolate(template, params, placeholder = "single") {
21859
22990
  function createTranslator(messages, fallbacks = [], options = {}) {
21860
22991
  const placeholder = options.placeholder ?? "single";
21861
22992
  return (key, params) => {
21862
- let text = messages?.[key];
21863
- for (let i2 = 0; text === void 0 && i2 < fallbacks.length; i2++) text = fallbacks[i2]?.[key];
21864
- return interpolate(text ?? options.missing?.(key) ?? key, params, placeholder);
22993
+ let text2 = messages?.[key];
22994
+ for (let i2 = 0; text2 === void 0 && i2 < fallbacks.length; i2++) text2 = fallbacks[i2]?.[key];
22995
+ return interpolate(text2 ?? options.missing?.(key) ?? key, params, placeholder);
21865
22996
  };
21866
22997
  }
21867
22998
 
21868
22999
  // xlsx/ui/locales/merge.ts
21869
23000
  var mergeStringModules = mergeMessageModules;
21870
23001
 
23002
+ // xlsx/ui/locales/de/collab.ts
23003
+ var collab_exports = {};
23004
+ __export(collab_exports, {
23005
+ collab: () => collab
23006
+ });
23007
+ var collab = {
23008
+ Share: "Freigeben",
23009
+ "Session name": "Sitzungsname",
23010
+ "Start sharing": "Freigabe starten",
23011
+ "Stop sharing": "Freigabe beenden",
23012
+ "People in this session": "Personen in dieser Sitzung",
23013
+ "Session: {room}": "Sitzung: {room}",
23014
+ "Not sharing.": "Keine Freigabe aktiv.",
23015
+ "Connecting...": "Verbindung wird hergestellt...",
23016
+ "Connected.": "Verbunden.",
23017
+ "Joining the session...": "Sitzung wird beigetreten...",
23018
+ "Disconnected. Changes are kept and sent when the connection returns.": "Getrennt. \xC4nderungen bleiben erhalten und werden gesendet, sobald die Verbindung zur\xFCck ist.",
23019
+ "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.",
23020
+ "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.",
23021
+ "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.",
23022
+ "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.",
23023
+ "Reconnected. Changes made while offline were sent.": "Wieder verbunden. Offline vorgenommene \xC4nderungen wurden gesendet.",
23024
+ "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.",
23025
+ "Sharing stopped because another workbook was opened.": "Die Freigabe wurde beendet, weil eine andere Arbeitsmappe ge\xF6ffnet wurde.",
23026
+ "Open or create a workbook before sharing it.": "\xD6ffnen oder erstellen Sie eine Arbeitsmappe, bevor Sie sie freigeben.",
23027
+ "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.",
23028
+ "This browser cannot share between windows; pass a server URL.": "Dieser Browser kann nicht zwischen Fenstern teilen; geben Sie eine Server-URL an.",
23029
+ "Stop the current collaboration session first.": "Beenden Sie zuerst die aktuelle Zusammenarbeitssitzung."
23030
+ };
23031
+
21871
23032
  // xlsx/ui/locales/de/commands.ts
21872
23033
  var commands_exports = {};
21873
23034
  __export(commands_exports, {
@@ -23437,11 +24598,17 @@ var NAVIGATION_STRINGS = {
23437
24598
  Hyperlinks: ["Liens hypertexte", "Hyperlinks", "Hiperv\xEDnculos", "\u8D85\u94FE\u63A5"],
23438
24599
  "Sort and filter": ["Tri et filtre", "Sortieren und Filtern", "Ordenar y filtrar", "\u6392\u5E8F\u548C\u7B5B\u9009"],
23439
24600
  "Freeze panes": ["Figer les volets", "Fenster fixieren", "Inmovilizar paneles", "\u51BB\u7ED3\u7A97\u683C"],
23440
- "Pivot tables and sparklines (kept in the file but not shown)": [
23441
- "Tableaux crois\xE9s dynamiques et graphiques sparkline (conserv\xE9s dans le fichier mais non affich\xE9s)",
23442
- "PivotTables und Sparklines (in der Datei erhalten, aber nicht angezeigt)",
23443
- "Tablas din\xE1micas y minigr\xE1ficos (se conservan en el archivo, pero no se muestran)",
23444
- "\u6570\u636E\u900F\u89C6\u8868\u548C\u8FF7\u4F60\u56FE(\u4FDD\u7559\u5728\u6587\u4EF6\u4E2D\u4F46\u4E0D\u663E\u793A)"
24601
+ "Pivot tables (kept in the file but not shown)": [
24602
+ "Tableaux crois\xE9s dynamiques (conserv\xE9s dans le fichier mais non affich\xE9s)",
24603
+ "PivotTables (in der Datei erhalten, aber nicht angezeigt)",
24604
+ "Tablas din\xE1micas (se conservan en el archivo, pero no se muestran)",
24605
+ "\u6570\u636E\u900F\u89C6\u8868(\u4FDD\u7559\u5728\u6587\u4EF6\u4E2D\u4F46\u4E0D\u663E\u793A)"
24606
+ ],
24607
+ "Creating or editing sparklines (existing ones are shown)": [
24608
+ "Cr\xE9ation ou modification de graphiques sparkline (ceux existants sont affich\xE9s)",
24609
+ "Sparklines erstellen oder bearbeiten (vorhandene werden angezeigt)",
24610
+ "Crear o editar minigr\xE1ficos (los existentes se muestran)",
24611
+ "\u521B\u5EFA\u6216\u7F16\u8F91\u8FF7\u4F60\u56FE(\u73B0\u6709\u8FF7\u4F60\u56FE\u4F1A\u663E\u793A)"
23445
24612
  ],
23446
24613
  "Show Formulas": ["Afficher les formules", "Formeln anzeigen", "Mostrar f\xF3rmulas", "\u663E\u793A\u516C\u5F0F"],
23447
24614
  "Manual calculation": ["Calcul manuel", "Manuelle Berechnung", "C\xE1lculo manual", "\u624B\u52A8\u8BA1\u7B97"],
@@ -25940,7 +27107,7 @@ var shell = {
25940
27107
  "Inspect Workbook": "Arbeitsmappe pr\xFCfen",
25941
27108
  "Compatibility notes": "Kompatibilit\xE4tshinweise",
25942
27109
  "No compatibility notes for this workbook.": "Keine Kompatibilit\xE4tshinweise f\xFCr diese Arbeitsmappe.",
25943
- "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.",
27110
+ "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.",
25944
27111
  "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.",
25945
27112
  "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.",
25946
27113
  "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.",
@@ -26057,11 +27224,42 @@ var shell = {
26057
27224
 
26058
27225
  // xlsx/ui/locales/de/index.ts
26059
27226
  var de = mergeStringModules({
27227
+ "./collab.ts": collab_exports,
26060
27228
  "./commands.ts": commands_exports,
26061
27229
  "./grid.ts": grid_exports,
26062
27230
  "./shell.ts": shell_exports
26063
27231
  });
26064
27232
 
27233
+ // xlsx/ui/locales/en/collab.ts
27234
+ var collab_exports2 = {};
27235
+ __export(collab_exports2, {
27236
+ collab: () => collab2
27237
+ });
27238
+ var collab2 = {
27239
+ Share: "Share",
27240
+ "Session name": "Session name",
27241
+ "Start sharing": "Start sharing",
27242
+ "Stop sharing": "Stop sharing",
27243
+ "People in this session": "People in this session",
27244
+ "Session: {room}": "Session: {room}",
27245
+ "Not sharing.": "Not sharing.",
27246
+ "Connecting...": "Connecting...",
27247
+ "Connected.": "Connected.",
27248
+ "Joining the session...": "Joining the session...",
27249
+ "Disconnected. Changes are kept and sent when the connection returns.": "Disconnected. Changes are kept and sent when the connection returns.",
27250
+ "The connection failed. Changes are kept and sent when the connection returns.": "The connection failed. Changes are kept and sent when the connection returns.",
27251
+ "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.",
27252
+ "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.",
27253
+ "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.",
27254
+ "Reconnected. Changes made while offline were sent.": "Reconnected. Changes made while offline were sent.",
27255
+ "Connection lost. Keep working; your changes are sent when it returns.": "Connection lost. Keep working; your changes are sent when it returns.",
27256
+ "Sharing stopped because another workbook was opened.": "Sharing stopped because another workbook was opened.",
27257
+ "Open or create a workbook before sharing it.": "Open or create a workbook before sharing it.",
27258
+ "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.",
27259
+ "This browser cannot share between windows; pass a server URL.": "This browser cannot share between windows; pass a server URL.",
27260
+ "Stop the current collaboration session first.": "Stop the current collaboration session first."
27261
+ };
27262
+
26065
27263
  // xlsx/ui/locales/en/commands.ts
26066
27264
  var commands_exports2 = {};
26067
27265
  __export(commands_exports2, {
@@ -26294,7 +27492,7 @@ var shell2 = {
26294
27492
  "Inspect Workbook": "Inspect Workbook",
26295
27493
  "Compatibility notes": "Compatibility notes",
26296
27494
  "No compatibility notes for this workbook.": "No compatibility notes for this workbook.",
26297
- "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.",
27495
+ "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.",
26298
27496
  "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.",
26299
27497
  "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.",
26300
27498
  "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.",
@@ -26411,11 +27609,42 @@ var shell2 = {
26411
27609
 
26412
27610
  // xlsx/ui/locales/en/index.ts
26413
27611
  var en = mergeStringModules({
27612
+ "./collab.ts": collab_exports2,
26414
27613
  "./commands.ts": commands_exports2,
26415
27614
  "./grid.ts": grid_exports2,
26416
27615
  "./shell.ts": shell_exports2
26417
27616
  });
26418
27617
 
27618
+ // xlsx/ui/locales/es/collab.ts
27619
+ var collab_exports3 = {};
27620
+ __export(collab_exports3, {
27621
+ collab: () => collab3
27622
+ });
27623
+ var collab3 = {
27624
+ Share: "Compartir",
27625
+ "Session name": "Nombre de la sesi\xF3n",
27626
+ "Start sharing": "Empezar a compartir",
27627
+ "Stop sharing": "Dejar de compartir",
27628
+ "People in this session": "Personas en esta sesi\xF3n",
27629
+ "Session: {room}": "Sesi\xF3n: {room}",
27630
+ "Not sharing.": "No se est\xE1 compartiendo.",
27631
+ "Connecting...": "Conectando...",
27632
+ "Connected.": "Conectado.",
27633
+ "Joining the session...": "Uni\xE9ndose a la sesi\xF3n...",
27634
+ "Disconnected. Changes are kept and sent when the connection returns.": "Desconectado. Los cambios se conservan y se env\xEDan cuando vuelva la conexi\xF3n.",
27635
+ "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.",
27636
+ "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.",
27637
+ "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.",
27638
+ "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.",
27639
+ "Reconnected. Changes made while offline were sent.": "Reconectado. Se enviaron los cambios hechos sin conexi\xF3n.",
27640
+ "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.",
27641
+ "Sharing stopped because another workbook was opened.": "Se dej\xF3 de compartir porque se abri\xF3 otro libro.",
27642
+ "Open or create a workbook before sharing it.": "Abra o cree un libro antes de compartirlo.",
27643
+ "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.",
27644
+ "This browser cannot share between windows; pass a server URL.": "Este navegador no puede compartir entre ventanas; indique la URL de un servidor.",
27645
+ "Stop the current collaboration session first.": "Detenga primero la sesi\xF3n de colaboraci\xF3n actual."
27646
+ };
27647
+
26419
27648
  // xlsx/ui/locales/es/commands.ts
26420
27649
  var commands_exports3 = {};
26421
27650
  __export(commands_exports3, {
@@ -26648,7 +27877,7 @@ var shell3 = {
26648
27877
  "Inspect Workbook": "Inspeccionar libro",
26649
27878
  "Compatibility notes": "Notas de compatibilidad",
26650
27879
  "No compatibility notes for this workbook.": "No hay notas de compatibilidad para este libro.",
26651
- "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.",
27880
+ "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.",
26652
27881
  "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.",
26653
27882
  "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.",
26654
27883
  "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.",
@@ -26765,11 +27994,42 @@ var shell3 = {
26765
27994
 
26766
27995
  // xlsx/ui/locales/es/index.ts
26767
27996
  var es = mergeStringModules({
27997
+ "./collab.ts": collab_exports3,
26768
27998
  "./commands.ts": commands_exports3,
26769
27999
  "./grid.ts": grid_exports3,
26770
28000
  "./shell.ts": shell_exports3
26771
28001
  });
26772
28002
 
28003
+ // xlsx/ui/locales/fr/collab.ts
28004
+ var collab_exports4 = {};
28005
+ __export(collab_exports4, {
28006
+ collab: () => collab4
28007
+ });
28008
+ var collab4 = {
28009
+ Share: "Partager",
28010
+ "Session name": "Nom de la session",
28011
+ "Start sharing": "Commencer le partage",
28012
+ "Stop sharing": "Arr\xEAter le partage",
28013
+ "People in this session": "Personnes dans cette session",
28014
+ "Session: {room}": "Session : {room}",
28015
+ "Not sharing.": "Aucun partage en cours.",
28016
+ "Connecting...": "Connexion...",
28017
+ "Connected.": "Connect\xE9.",
28018
+ "Joining the session...": "Connexion \xE0 la session...",
28019
+ "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.",
28020
+ "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.",
28021
+ "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.",
28022
+ "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.",
28023
+ "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.",
28024
+ "Reconnected. Changes made while offline were sent.": "Reconnect\xE9. Les modifications faites hors connexion ont \xE9t\xE9 envoy\xE9es.",
28025
+ "Connection lost. Keep working; your changes are sent when it returns.": "Connexion perdue. Continuez \xE0 travailler ; vos modifications seront envoy\xE9es \xE0 son retour.",
28026
+ "Sharing stopped because another workbook was opened.": "Le partage s'est arr\xEAt\xE9 car un autre classeur a \xE9t\xE9 ouvert.",
28027
+ "Open or create a workbook before sharing it.": "Ouvrez ou cr\xE9ez un classeur avant de le partager.",
28028
+ "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.",
28029
+ "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.",
28030
+ "Stop the current collaboration session first.": "Arr\xEAtez d'abord la session de collaboration en cours."
28031
+ };
28032
+
26773
28033
  // xlsx/ui/locales/fr/commands.ts
26774
28034
  var commands_exports4 = {};
26775
28035
  __export(commands_exports4, {
@@ -27002,7 +28262,7 @@ var shell4 = {
27002
28262
  "Inspect Workbook": "Inspecter le classeur",
27003
28263
  "Compatibility notes": "Notes de compatibilit\xE9",
27004
28264
  "No compatibility notes for this workbook.": "Aucune note de compatibilit\xE9 pour ce classeur.",
27005
- "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.",
28265
+ "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.",
27006
28266
  "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.",
27007
28267
  "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.",
27008
28268
  "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.",
@@ -27119,11 +28379,42 @@ var shell4 = {
27119
28379
 
27120
28380
  // xlsx/ui/locales/fr/index.ts
27121
28381
  var fr = mergeStringModules({
28382
+ "./collab.ts": collab_exports4,
27122
28383
  "./commands.ts": commands_exports4,
27123
28384
  "./grid.ts": grid_exports4,
27124
28385
  "./shell.ts": shell_exports4
27125
28386
  });
27126
28387
 
28388
+ // xlsx/ui/locales/zh-CN/collab.ts
28389
+ var collab_exports5 = {};
28390
+ __export(collab_exports5, {
28391
+ collab: () => collab5
28392
+ });
28393
+ var collab5 = {
28394
+ Share: "\u5171\u4EAB",
28395
+ "Session name": "\u4F1A\u8BDD\u540D\u79F0",
28396
+ "Start sharing": "\u5F00\u59CB\u5171\u4EAB",
28397
+ "Stop sharing": "\u505C\u6B62\u5171\u4EAB",
28398
+ "People in this session": "\u6B64\u4F1A\u8BDD\u4E2D\u7684\u4EBA\u5458",
28399
+ "Session: {room}": "\u4F1A\u8BDD\uFF1A{room}",
28400
+ "Not sharing.": "\u672A\u5728\u5171\u4EAB\u3002",
28401
+ "Connecting...": "\u6B63\u5728\u8FDE\u63A5...",
28402
+ "Connected.": "\u5DF2\u8FDE\u63A5\u3002",
28403
+ "Joining the session...": "\u6B63\u5728\u52A0\u5165\u4F1A\u8BDD...",
28404
+ "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",
28405
+ "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",
28406
+ "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",
28407
+ "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",
28408
+ "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",
28409
+ "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",
28410
+ "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",
28411
+ "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",
28412
+ "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",
28413
+ "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",
28414
+ "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",
28415
+ "Stop the current collaboration session first.": "\u8BF7\u5148\u505C\u6B62\u5F53\u524D\u534F\u4F5C\u4F1A\u8BDD\u3002"
28416
+ };
28417
+
27127
28418
  // xlsx/ui/locales/zh-CN/commands.ts
27128
28419
  var commands_exports5 = {};
27129
28420
  __export(commands_exports5, {
@@ -27356,7 +28647,7 @@ var shell5 = {
27356
28647
  "Inspect Workbook": "\u68C0\u67E5\u5DE5\u4F5C\u7C3F",
27357
28648
  "Compatibility notes": "\u517C\u5BB9\u6027\u8BF4\u660E",
27358
28649
  "No compatibility notes for this workbook.": "\u6B64\u5DE5\u4F5C\u7C3F\u6CA1\u6709\u517C\u5BB9\u6027\u8BF4\u660E\u3002",
27359
- "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",
28650
+ "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",
27360
28651
  "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",
27361
28652
  "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",
27362
28653
  "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",
@@ -27473,6 +28764,7 @@ var shell5 = {
27473
28764
 
27474
28765
  // xlsx/ui/locales/zh-CN/index.ts
27475
28766
  var zhCN = mergeStringModules({
28767
+ "./collab.ts": collab_exports5,
27476
28768
  "./commands.ts": commands_exports5,
27477
28769
  "./grid.ts": grid_exports5,
27478
28770
  "./shell.ts": shell_exports5
@@ -27490,8 +28782,8 @@ var STRINGS = {
27490
28782
  function normalizeEditorLocale(value2) {
27491
28783
  return normalizeLocale(value2, EDITOR_LOCALES, "en");
27492
28784
  }
27493
- function fillTemplate(text, vars) {
27494
- return interpolate(text, vars);
28785
+ function fillTemplate(text2, vars) {
28786
+ return interpolate(text2, vars);
27495
28787
  }
27496
28788
  function translate(locale, key, vars) {
27497
28789
  return createTranslator(STRINGS[locale], [STRINGS.en])(key, vars);
@@ -27508,8 +28800,8 @@ function formatNumber2(locale, value2, digits2 = 10) {
27508
28800
  }
27509
28801
  function sheetBaseName(t) {
27510
28802
  const key = "sheet.default-name";
27511
- const text = t(key);
27512
- return text && text !== key ? text : "Sheet";
28803
+ const text2 = t(key);
28804
+ return text2 && text2 !== key ? text2 : "Sheet";
27513
28805
  }
27514
28806
 
27515
28807
  // xlsx/ui/commands/cells.ts
@@ -29269,6 +30561,11 @@ function tabMenu(state, actions) {
29269
30561
  );
29270
30562
  }
29271
30563
 
30564
+ // xlsx/ui/context.ts
30565
+ function historyOf(ctx) {
30566
+ return ctx.history ? ctx.history() : ctx.session();
30567
+ }
30568
+
29272
30569
  // xlsx/ui/dialogs.ts
29273
30570
  function createDialogRegistry(context, onError) {
29274
30571
  const openers = /* @__PURE__ */ new Map();
@@ -29524,8 +30821,8 @@ var DirtyState = class {
29524
30821
  };
29525
30822
 
29526
30823
  // xlsx/ui/formula-bar/name-resolve.ts
29527
- function parseSheetReference(workbook, activeSheet, text) {
29528
- const ref = text.trim().replace(/^=/, "");
30824
+ function parseSheetReference(workbook, activeSheet, text2) {
30825
+ const ref = text2.trim().replace(/^=/, "");
29529
30826
  const bang = ref.lastIndexOf("!");
29530
30827
  let sheet = activeSheet;
29531
30828
  if (bang >= 0) {
@@ -29543,8 +30840,8 @@ function findDefinedName2(workbook, sheet, name) {
29543
30840
  const matches2 = workbook.definedNames.filter((d) => d.name.toLowerCase() === lower2);
29544
30841
  return matches2.find((d) => d.localSheet === sheet) ?? matches2.find((d) => d.localSheet === void 0);
29545
30842
  }
29546
- function resolveNameBox(workbook, activeSheet, text) {
29547
- const input = text.trim();
30843
+ function resolveNameBox(workbook, activeSheet, text2) {
30844
+ const input = text2.trim();
29548
30845
  if (!input) return { kind: "invalid" };
29549
30846
  const ref = parseSheetReference(workbook, activeSheet, input);
29550
30847
  if (ref) return { kind: "go", ...ref };
@@ -29655,10 +30952,10 @@ function textAlign(hAlign) {
29655
30952
  if (hAlign === "justify" || hAlign === "distributed") return "justify";
29656
30953
  return "left";
29657
30954
  }
29658
- function repeatToFill(text, textWidth, cellWidth) {
29659
- if (!text || textWidth <= 0) return text;
30955
+ function repeatToFill(text2, textWidth, cellWidth) {
30956
+ if (!text2 || textWidth <= 0) return text2;
29660
30957
  const times = Math.max(1, Math.floor(cellWidth / textWidth));
29661
- return text.repeat(Math.min(times, 500));
30958
+ return text2.repeat(Math.min(times, 500));
29662
30959
  }
29663
30960
  function hashes(cellInnerWidth, hashWidth) {
29664
30961
  const n = Math.max(1, Math.floor(cellInnerWidth / Math.max(1, hashWidth)));
@@ -29668,9 +30965,9 @@ function hashes(cellInnerWidth, hashWidth) {
29668
30965
  // xlsx/ui/grid/cell-items.ts
29669
30966
  var PADDING = 2;
29670
30967
  function isBlankView(view) {
29671
- return view.text === "" && !view.fill && !hasBorders(view.borders) && !view.dataBar && !view.icon && !view.hasComment;
30968
+ return view.text === "" && !view.fill && !hasBorders(view.borders) && !view.dataBar && !view.icon && !view.sparkline && !view.hasComment;
29672
30969
  }
29673
- function textWidthOf(input, view, text) {
30970
+ function textWidthOf(input, view, text2) {
29674
30971
  if (view.rich?.length)
29675
30972
  return view.rich.reduce(
29676
30973
  (sum2, run) => sum2 + input.measure(run.text, cssFont(run.font, input.zoom)),
@@ -29678,7 +30975,7 @@ function textWidthOf(input, view, text) {
29678
30975
  );
29679
30976
  const font = cssFont(view.font, input.zoom);
29680
30977
  let widest = 0;
29681
- for (const line2 of text.split("\n")) widest = Math.max(widest, input.measure(line2, font));
30978
+ for (const line2 of text2.split("\n")) widest = Math.max(widest, input.measure(line2, font));
29682
30979
  return widest;
29683
30980
  }
29684
30981
  function makeItem(input, row2, col, view, merge2) {
@@ -29721,7 +31018,7 @@ function makeItem(input, row2, col, view, merge2) {
29721
31018
  return item;
29722
31019
  }
29723
31020
  if (view.overflow && !merge2 && measured > inner2) {
29724
- const extent = overflowExtent(
31021
+ const extent2 = overflowExtent(
29725
31022
  input.sheet,
29726
31023
  metrics,
29727
31024
  row2,
@@ -29729,9 +31026,9 @@ function makeItem(input, row2, col, view, merge2) {
29729
31026
  measured + 2 * PADDING,
29730
31027
  view.hAlign
29731
31028
  );
29732
- item.textLeft = extent.left - x;
29733
- item.textWidth = extent.right - extent.left;
29734
- item.overflowing = extent.startCol !== col || extent.endCol !== col;
31029
+ item.textLeft = extent2.left - x;
31030
+ item.textWidth = extent2.right - extent2.left;
31031
+ item.overflowing = extent2.startCol !== col || extent2.endCol !== col;
29735
31032
  }
29736
31033
  return item;
29737
31034
  }
@@ -29840,9 +31137,9 @@ function createEditBridge() {
29840
31137
  return () => listeners2.delete(listener);
29841
31138
  },
29842
31139
  begin: (options = {}) => driver?.begin(options) ?? false,
29843
- update(text, caret, source) {
31140
+ update(text2, caret, source) {
29844
31141
  if (!state.editing) return;
29845
- state = { ...state, text, caret, source };
31142
+ state = { ...state, text: text2, caret, source };
29846
31143
  driver?.changed(source);
29847
31144
  emit(source);
29848
31145
  },
@@ -30207,18 +31504,18 @@ function activeRef(selection) {
30207
31504
  return formatAddress(selection.active);
30208
31505
  }
30209
31506
  function parseSelectionRef(ref, workbook) {
30210
- let text = ref.trim();
31507
+ let text2 = ref.trim();
30211
31508
  let sheet;
30212
- const bang = text.lastIndexOf("!");
31509
+ const bang = text2.lastIndexOf("!");
30213
31510
  if (bang > 0) {
30214
- const name = text.slice(0, bang).replace(/^'(.*)'$/, "$1").replace(/''/g, "'");
31511
+ const name = text2.slice(0, bang).replace(/^'(.*)'$/, "$1").replace(/''/g, "'");
30215
31512
  const index2 = workbook?.sheets.findIndex((item) => item.name.toLowerCase() === name.toLowerCase()) ?? -1;
30216
31513
  if (index2 < 0) return void 0;
30217
31514
  sheet = index2;
30218
- text = text.slice(bang + 1);
31515
+ text2 = text2.slice(bang + 1);
30219
31516
  }
30220
31517
  const ranges = [];
30221
- for (const part of text.split(",")) {
31518
+ for (const part of text2.split(",")) {
30222
31519
  const range2 = parseRange(part.trim());
30223
31520
  if (!range2) return void 0;
30224
31521
  ranges.push(range2);
@@ -30384,7 +31681,7 @@ var CellViewCache = class {
30384
31681
  let result2 = null;
30385
31682
  if (workbook && sheet) {
30386
31683
  const stored = getCell(sheet, row2, col);
30387
- const plain2 = !stored && effectiveStyleId(sheet, row2, col) === 0 && !cfCovers(sheet, row2, col);
31684
+ const plain2 = !stored && effectiveStyleId(sheet, row2, col) === 0 && !cfCovers(sheet, row2, col) && !hasSparklineAt(sheet, row2, col);
30388
31685
  if (!plain2) {
30389
31686
  const view = cellView(workbook, this.#source.sheetIndex(), row2, col, this.#evaluator());
30390
31687
  result2 = isBlankView(view) ? null : view;
@@ -30447,6 +31744,7 @@ var ICON_PATHS = {
30447
31744
  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",
30448
31745
  comment: "M4 5h16v11H10l-4 4v-4H4z M8 9h8 M8 12h5",
30449
31746
  comments: "M3 4h13v9H9l-3 3v-3H3z M9 17h6l3 3v-3h3V8h-3",
31747
+ share: "M14 4l6 6-6 6M20 10h-8a8 8 0 0 0-8 8",
30450
31748
  deleteComment: "M4 5h16v11H10l-4 4v-4H4z M9 8.5l5 5 M14 8.5l-5 5",
30451
31749
  previous: "M6 14l6-6 6 6",
30452
31750
  next: "M6 10l6 6 6-6",
@@ -30897,4 +32195,4 @@ function applyThemeColors(host, previous, colors) {
30897
32195
  return Object.keys(vars);
30898
32196
  }
30899
32197
 
30900
- export { ACCOUNTING_FORMATS, ALL_RANGE, AUTOSUM_FUNCTIONS, BORDER_PRESETS, CATEGORIES, COLOR_SCALES, COMMAND_TABLES, CORE_FEATURE_STRINGS, CellViewCache, DATA_BAR_COLORS, DATE_CODES, DEFAULT_OPTIONS, DirtyState, EDITOR_LOCALES, EDITOR_THEME_MODES, FONT_NAMES, FONT_SIZES, FORMAT_CELLS_STRINGS, FRACTION_CODES, FUNCTION_MENUS, GridGeometry, HIGHLIGHT_STYLES, ICON_ACCENTS, ICON_PATHS, ICON_SETS, MARGIN_PRESETS, MESSAGE_STRINGS, MORE_FUNCTION_CATEGORIES, NAVIGATION_STRINGS, ORIENTATIONS, PAPER_SIZES, QUADRANTS, RIBBON_HOME_STRINGS, RIBBON_TAB_STRINGS, RULES_STRINGS, SHEET_ICONS, SPECIAL_CODES, STRINGS, SYMBOLS, SheetSelections, TABLE_STYLES, TEMPLATES, THEME_KEYS, TIME_CODES, TOOLS_STRINGS, UNSET, absoluteReference, activeChart, activeRef, activeStyle, activeTable, addRange, alignItems, alignmentCommands, applyThemeColors, autoSumRange, buildChart, buildCode, buildItems, cellCommands, cellMenu, cellRange3 as cellRange, cellStyleItems, clampAddress, clipState, clipboardCommands, colSelected, colorScaleRule, colsOf, colsRange, columnHeaderHeight, columnHeaderMenu, commandStrings, contextualCommands, createCommandRegistry, createDialogRegistry, createEditBridge, createSelectionModel, createTemplateWorkbook, cssFont, cssFontFamily, darkTheme, dataBarRule, dataCommands, detectCategory, diagonalSvg, dxfCss, edgeCss, editBridge, editChart, editing, editingCommands, evaluateRef, expandForMerges, extendSelection, fillPaint, fillSource, fillTemplate, findDefinedName2 as findDefinedName, findSpecial, fitNumber2 as fitNumber, fontCommands, formatNumber2 as formatNumber, formulaCommands, functionsIn, guessHeader, hasBorders, hasWorkbook, hashes, helpTab, icon, iconCount, iconSetRule, iconSvg, iconThresholds, initialSelection, insertFunctionCall, installFormatPainter, isBlankView, isMenuSeparator, isSingleCell, isTabHidden, isWholeCols, isWholeRows2 as isWholeRows, justify, lightTheme, measure, moveWithinSelection, movingEnd, nameForRange, negativeCodes, normalizeEditorLocale, normalizeThemeMode, noteFunctionUse, numberCommands, numberFormatOptions, onRibbonTabsChange, pageLayoutCommands, parseBorderArg, parseSelectionRef, parseSheetReference, pasteWith, patternImage, pickColor, rangeRef, recentFunctions, refresh, regionOf, registerRibbonTabs, repeatToFill, resetRibbonTabs, resolveNameBox, reviewTab, ribbonTabs, rowHeaderMenu, rowHeaderWidth, rowSelected, rowsOf, rowsRange, scrollToReveal, searchCommands, selectCell, selectSpecial, selectTab, selectionCellCount, selectionRef, setTabHidden, sheetBaseName, sheetLocked, sortCommands, span3 as span, spanRange, stepFontSize, structureLocked, style, styleCssFont, tabButton, tabMenu, tableAt, tableStyleColor, tableStylePreview, target, textAlign, textDecoration, themePaletteItems, themeToCssVars, translate, translator, viewTab, viewing, wholeColumns, wholeRows, withTarget };
32198
+ export { ACCOUNTING_FORMATS, ALL_RANGE, AUTOSUM_FUNCTIONS, BORDER_PRESETS, CATEGORIES, COLOR_SCALES, COMMAND_TABLES, CORE_FEATURE_STRINGS, CellViewCache, DATA_BAR_COLORS, DATE_CODES, DEFAULT_OPTIONS, DirtyState, EDITOR_LOCALES, EDITOR_THEME_MODES, FONT_NAMES, FONT_SIZES, FORMAT_CELLS_STRINGS, FRACTION_CODES, FUNCTION_MENUS, GridGeometry, HIGHLIGHT_STYLES, ICON_ACCENTS, ICON_PATHS, ICON_SETS, MARGIN_PRESETS, MESSAGE_STRINGS, MORE_FUNCTION_CATEGORIES, NAVIGATION_STRINGS, ORIENTATIONS, PAPER_SIZES, QUADRANTS, RIBBON_HOME_STRINGS, RIBBON_TAB_STRINGS, RULES_STRINGS, SHEET_ICONS, SPECIAL_CODES, STRINGS, SYMBOLS, SheetSelections, TABLE_STYLES, TEMPLATES, THEME_KEYS, TIME_CODES, TOOLS_STRINGS, UNSET, absoluteReference, activeChart, activeRef, activeStyle, activeTable, addRange, alignItems, alignmentCommands, applyThemeColors, autoSumRange, buildChart, buildCode, buildItems, cellCommands, cellMenu, cellRange3 as cellRange, cellStyleItems, clampAddress, clipState, clipboardCommands, colSelected, colorScaleRule, colsOf, colsRange, columnHeaderHeight, columnHeaderMenu, commandStrings, contextualCommands, createCommandRegistry, createDialogRegistry, createEditBridge, createSelectionModel, createTemplateWorkbook, cssFont, cssFontFamily, darkTheme, dataBarRule, dataCommands, detectCategory, diagonalSvg, dxfCss, edgeCss, editBridge, editChart, editing, editingCommands, evaluateRef, expandForMerges, extendSelection, fillPaint, fillSource, fillTemplate, findDefinedName2 as findDefinedName, findSpecial, fitNumber2 as fitNumber, fontCommands, formatNumber2 as formatNumber, formulaCommands, functionsIn, guessHeader, hasBorders, hasWorkbook, hashes, helpTab, historyOf, icon, iconCount, iconSetRule, iconSvg, iconThresholds, initialSelection, insertFunctionCall, installFormatPainter, isBlankView, isMenuSeparator, isSingleCell, isTabHidden, isWholeCols, isWholeRows2 as isWholeRows, justify, lightTheme, measure, moveWithinSelection, movingEnd, nameForRange, negativeCodes, normalizeEditorLocale, normalizeThemeMode, noteFunctionUse, numberCommands, numberFormatOptions, onRibbonTabsChange, pageLayoutCommands, parseBorderArg, parseSelectionRef, parseSheetReference, pasteWith, patternImage, pickColor, rangeRef, recentFunctions, refresh, regionOf, registerRibbonTabs, repeatToFill, resetRibbonTabs, resolveNameBox, reviewTab, ribbonTabs, rowHeaderMenu, rowHeaderWidth, rowSelected, rowsOf, rowsRange, scrollToReveal, searchCommands, selectCell, selectSpecial, selectTab, selectionCellCount, selectionRef, setTabHidden, sheetBaseName, sheetLocked, sortCommands, span3 as span, spanRange, stepFontSize, structureLocked, style, styleCssFont, tabButton, tabMenu, tableAt, tableStyleColor, tableStylePreview, target, textAlign, textDecoration, themePaletteItems, themeToCssVars, translate, translator, viewTab, viewing, wholeColumns, wholeRows, withTarget };