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
@@ -4,46 +4,46 @@ var xmldom = require('@xmldom/xmldom');
4
4
 
5
5
  // chart/regression.ts
6
6
  function computeLinearRegression(xVals, yVals) {
7
- const n = xVals.length;
8
- if (n < 2) {
7
+ const n2 = xVals.length;
8
+ if (n2 < 2) {
9
9
  return { slope: 0, intercept: 0, rSquared: 0 };
10
10
  }
11
11
  let sumX = 0;
12
12
  let sumY = 0;
13
13
  let sumXY = 0;
14
14
  let sumXX = 0;
15
- for (let i = 0; i < n; i++) {
15
+ for (let i = 0; i < n2; i++) {
16
16
  sumX += xVals[i];
17
17
  sumY += yVals[i];
18
18
  sumXY += xVals[i] * yVals[i];
19
19
  sumXX += xVals[i] * xVals[i];
20
20
  }
21
- const denom = n * sumXX - sumX * sumX;
21
+ const denom = n2 * sumXX - sumX * sumX;
22
22
  if (Math.abs(denom) < 1e-12) {
23
- return { slope: 0, intercept: sumY / n, rSquared: 0 };
23
+ return { slope: 0, intercept: sumY / n2, rSquared: 0 };
24
24
  }
25
- const slope = (n * sumXY - sumX * sumY) / denom;
26
- const intercept = (sumY - slope * sumX) / n;
25
+ const slope = (n2 * sumXY - sumX * sumY) / denom;
26
+ const intercept = (sumY - slope * sumX) / n2;
27
27
  const ssRes = yVals.reduce((s, y, i) => s + (y - (slope * xVals[i] + intercept)) ** 2, 0);
28
- const meanY = sumY / n;
28
+ const meanY = sumY / n2;
29
29
  const ssTot = yVals.reduce((s, y) => s + (y - meanY) ** 2, 0);
30
30
  const rSquared = ssTot > 0 ? 1 - ssRes / ssTot : 0;
31
31
  return { slope, intercept, rSquared };
32
32
  }
33
33
  function fitPolynomial(xVals, yVals, order) {
34
- const n = xVals.length;
34
+ const n2 = xVals.length;
35
35
  const m = order + 1;
36
36
  const matrix = Array.from({ length: m }, () => Array(m + 1).fill(0));
37
37
  for (let i = 0; i < m; i++) {
38
38
  for (let j = 0; j < m; j++) {
39
39
  let sum2 = 0;
40
- for (let k = 0; k < n; k++) {
40
+ for (let k = 0; k < n2; k++) {
41
41
  sum2 += xVals[k] ** (i + j);
42
42
  }
43
43
  matrix[i][j] = sum2;
44
44
  }
45
45
  let sum = 0;
46
- for (let k = 0; k < n; k++) {
46
+ for (let k = 0; k < n2; k++) {
47
47
  sum += yVals[k] * xVals[k] ** i;
48
48
  }
49
49
  matrix[i][m] = sum;
@@ -76,14 +76,14 @@ function fitPolynomial(xVals, yVals, order) {
76
76
  return matrix.map((row) => row[m]);
77
77
  }
78
78
  function computeRSquared(xVals, yVals, evalFn) {
79
- const n = xVals.length;
80
- if (n === 0) {
79
+ const n2 = xVals.length;
80
+ if (n2 === 0) {
81
81
  return 0;
82
82
  }
83
- const meanY = yVals.reduce((s, y) => s + y, 0) / n;
83
+ const meanY = yVals.reduce((s, y) => s + y, 0) / n2;
84
84
  let ssRes = 0;
85
85
  let ssTot = 0;
86
- for (let i = 0; i < n; i++) {
86
+ for (let i = 0; i < n2; i++) {
87
87
  ssRes += (yVals[i] - evalFn(xVals[i])) ** 2;
88
88
  ssTot += (yVals[i] - meanY) ** 2;
89
89
  }
@@ -207,7 +207,7 @@ function computeStackedSeriesPlots(seriesValues, catCount, percent) {
207
207
  return seriesValues.map((values) => {
208
208
  const cumulative = [], base = [], own = [];
209
209
  for (let ci = 0; ci < catCount; ci++) {
210
- const raw = values[ci] ?? 0, total = totals?.[ci] ?? 0, val = percent ? total > 0 ? raw / total * 100 : 0 : raw, isNeg = val < 0, from = isNeg ? negRunning[ci] : posRunning[ci], to = from + val;
210
+ const raw2 = values[ci] ?? 0, total = totals?.[ci] ?? 0, val = percent ? total > 0 ? raw2 / total * 100 : 0 : raw2, isNeg = val < 0, from = isNeg ? negRunning[ci] : posRunning[ci], to = from + val;
211
211
  base.push(from);
212
212
  cumulative.push(to);
213
213
  own.push(val);
@@ -235,8 +235,8 @@ function axisTargetIntervals(plotHeightPx) {
235
235
  return DEFAULT_TARGET_INTERVALS;
236
236
  }
237
237
  const plotHeightPt = plotHeightPx / PX_PER_POINT;
238
- const raw = Math.round(plotHeightPt / POINTS_PER_GRIDLINE);
239
- return Math.min(MAX_TARGET_INTERVALS, Math.max(MIN_TARGET_INTERVALS, raw));
238
+ const raw2 = Math.round(plotHeightPt / POINTS_PER_GRIDLINE);
239
+ return Math.min(MAX_TARGET_INTERVALS, Math.max(MIN_TARGET_INTERVALS, raw2));
240
240
  }
241
241
  function niceAxisStep(value) {
242
242
  if (!Number.isFinite(value) || value <= 0) {
@@ -397,10 +397,10 @@ function squarify(nodes, box) {
397
397
  const scale = total > 0 ? box.w * box.h / total : box.w * box.h / sorted.length;
398
398
  const items = sorted.map((node) => ({ node, area: (total > 0 ? node.weight : 1) * scale }));
399
399
  const result = [];
400
- let rect = { ...box };
400
+ let rect2 = { ...box };
401
401
  let remaining = items;
402
402
  for (let first2 = remaining[0]; first2 !== void 0; first2 = remaining[0]) {
403
- const side = Math.min(rect.w, rect.h);
403
+ const side = Math.min(rect2.w, rect2.h);
404
404
  let row = [first2];
405
405
  let rowAreas = [first2.area];
406
406
  let worst = worstAspectRatio(rowAreas, side);
@@ -418,18 +418,18 @@ function squarify(nodes, box) {
418
418
  }
419
419
  const rowTotalArea = rowAreas.reduce((sum, area) => sum + area, 0);
420
420
  const thickness = side > 0 ? rowTotalArea / side : 0;
421
- const layoutVertically = rect.w >= rect.h;
422
- let offset = layoutVertically ? rect.y : rect.x;
421
+ const layoutVertically = rect2.w >= rect2.h;
422
+ let offset = layoutVertically ? rect2.y : rect2.x;
423
423
  for (const item of row) {
424
424
  const length = thickness > 0 ? item.area / thickness : 0;
425
425
  if (layoutVertically) {
426
- result.push([item.node, { x: rect.x, y: offset, w: thickness, h: length }]);
426
+ result.push([item.node, { x: rect2.x, y: offset, w: thickness, h: length }]);
427
427
  } else {
428
- result.push([item.node, { x: offset, y: rect.y, w: length, h: thickness }]);
428
+ result.push([item.node, { x: offset, y: rect2.y, w: length, h: thickness }]);
429
429
  }
430
430
  offset += length;
431
431
  }
432
- rect = layoutVertically ? { ...rect, x: rect.x + thickness, w: rect.w - thickness } : { ...rect, y: rect.y + thickness, h: rect.h - thickness };
432
+ rect2 = layoutVertically ? { ...rect2, x: rect2.x + thickness, w: rect2.w - thickness } : { ...rect2, y: rect2.y + thickness, h: rect2.h - thickness };
433
433
  remaining = remaining.slice(row.length);
434
434
  }
435
435
  return result;
@@ -475,8 +475,8 @@ function formatPolynomialEquation(coeffsAscending) {
475
475
 
476
476
  // chart/radar-geometry.ts
477
477
  function radarAngle(index, catCount) {
478
- const n = Math.max(catCount, 1);
479
- return Math.PI * 2 * index / n - Math.PI / 2;
478
+ const n2 = Math.max(catCount, 1);
479
+ return Math.PI * 2 * index / n2 - Math.PI / 2;
480
480
  }
481
481
  function computeRadarPoints(values, maxVal, radius, cx, cy, catCount) {
482
482
  const denom = maxVal > 0 ? maxVal : 1;
@@ -486,9 +486,9 @@ function computeRadarPoints(values, maxVal, radius, cx, cy, catCount) {
486
486
  });
487
487
  }
488
488
  function radarRingPoints(cx, cy, rr, catCount) {
489
- const n = Math.max(catCount, 1);
490
- return Array.from({ length: n }, (_, i) => {
491
- const angle = radarAngle(i, n);
489
+ const n2 = Math.max(catCount, 1);
490
+ return Array.from({ length: n2 }, (_, i) => {
491
+ const angle = radarAngle(i, n2);
492
492
  return `${(cx + rr * Math.cos(angle)).toFixed(2)},${(cy + rr * Math.sin(angle)).toFixed(2)}`;
493
493
  }).join(" ");
494
494
  }
@@ -623,13 +623,13 @@ function hexToRgbChannels(color) {
623
623
  b: Number.parseInt(normalized.slice(4, 6), 16)
624
624
  };
625
625
  }
626
- function percentDivisorFor(text) {
627
- return text.endsWith("%") ? 100 : 1e5;
626
+ function percentDivisorFor(text2) {
627
+ return text2.endsWith("%") ? 100 : 1e5;
628
628
  }
629
629
  function parseOoxmlPercent(value) {
630
- const text = String(value ?? "").trim();
631
- const divisor = percentDivisorFor(text);
632
- const magnitude = Number.parseFloat(divisor === 100 ? text.slice(0, -1) : text);
630
+ const text2 = String(value ?? "").trim();
631
+ const divisor = percentDivisorFor(text2);
632
+ const magnitude = Number.parseFloat(divisor === 100 ? text2.slice(0, -1) : text2);
633
633
  if (!Number.isFinite(magnitude)) {
634
634
  return void 0;
635
635
  }
@@ -675,7 +675,7 @@ function rgbToHsl(r, g, b) {
675
675
  return { h, s: clampUnitInterval(s), l: clampUnitInterval(l) };
676
676
  }
677
677
  function hslToRgb(h, s, l, roundChannel = Math.round, options) {
678
- const sC = clampUnitInterval(s);
678
+ const sC = options?.clampSaturation === false ? s : clampUnitInterval(s);
679
679
  const lC = clampUnitInterval(l);
680
680
  const hN = (h % 360 + 360) % 360;
681
681
  const c2 = (1 - Math.abs(2 * lC - 1)) * sC;
@@ -1014,6 +1014,16 @@ function sigmaGradientStops(stops) {
1014
1014
  });
1015
1015
  }
1016
1016
 
1017
+ // color/hex-rgb.ts
1018
+ function parseArgbHex(hex) {
1019
+ const clean2 = hex.replace(/^#/, "");
1020
+ const rgb = clean2.length === 8 ? clean2.slice(2) : clean2;
1021
+ if (!/^[0-9a-fA-F]{6}$/.test(rgb)) return void 0;
1022
+ return [0, 2, 4].map((i) => parseInt(rgb.slice(i, i + 2), 16));
1023
+ }
1024
+ var clamp255 = (v) => Math.max(0, Math.min(255, v));
1025
+ var rgbToUpperHex = (rgb) => `#${rgb.map((v) => clamp255(Math.round(v)).toString(16).padStart(2, "0")).join("").toUpperCase()}`;
1026
+
1017
1027
  // xml/namespaces.ts
1018
1028
  var NS = {
1019
1029
  /** DrawingML main. */
@@ -1057,6 +1067,10 @@ function named(element, local, ns, lenient = true) {
1057
1067
  }
1058
1068
  var children = (parent, local, ns, lenient = true) => elements(parent).filter((element) => named(element, local, ns, lenient));
1059
1069
  var first = (parent, local, ns, lenient = true) => parent ? children(parent, local, ns, lenient)[0] : void 0;
1070
+ function attr(element, local, ns, prefix) {
1071
+ return element?.getAttributeNS(ns, local) ?? element?.getAttribute(`${prefix}:${local}`) ?? void 0;
1072
+ }
1073
+ var relAttr = (element, local) => attr(element, local, NS.r, "r");
1060
1074
 
1061
1075
  // drawingml/dom.ts
1062
1076
  function attributeReader(element) {
@@ -1079,6 +1093,54 @@ function booleanAttribute(element, name) {
1079
1093
  return void 0;
1080
1094
  }
1081
1095
 
1096
+ // drawingml/ordered-color-transforms.ts
1097
+ function orderedColorTransforms(channels, transforms) {
1098
+ let { r, g, b } = channels;
1099
+ let alpha = 1;
1100
+ const wrap2 = (value) => (value % 360 + 360) % 360;
1101
+ for (const transform of transforms) {
1102
+ const { name, value } = transform;
1103
+ const fraction = parseDrawingFraction(value);
1104
+ if (name === "alpha" && fraction !== void 0) alpha = clampUnitInterval(fraction);
1105
+ else if (name === "alphaMod" && fraction !== void 0)
1106
+ alpha = clampUnitInterval(alpha * fraction);
1107
+ else if (name === "alphaOff" && fraction !== void 0)
1108
+ alpha = clampUnitInterval(alpha + fraction);
1109
+ else if (name === "inv") [r, g, b] = [255 - r, 255 - g, 255 - b];
1110
+ else if (name === "gray") r = g = b = 0.299 * r + 0.587 * g + 0.114 * b;
1111
+ else if ((name === "shade" || name === "tint") && fraction !== void 0) {
1112
+ const mix = (channel) => linearToSrgb255(
1113
+ name === "shade" ? srgb255ToLinear(channel) * fraction : 1 - (1 - srgb255ToLinear(channel)) * fraction
1114
+ );
1115
+ [r, g, b] = [mix(r), mix(g), mix(b)];
1116
+ } else {
1117
+ const hsl = rgbToHsl(r, g, b);
1118
+ if (name === "comp") hsl.h = wrap2(hsl.h + 180);
1119
+ else if (name === "hue") {
1120
+ const hue = parseDrawingHueDegrees(value);
1121
+ if (hue !== void 0) hsl.h = wrap2(hue);
1122
+ } else if (name === "hueOff") {
1123
+ const hue = parseDrawingHueDegrees(value);
1124
+ if (hue !== void 0) hsl.h = wrap2(hsl.h + hue);
1125
+ } else if (name === "hueMod" && fraction !== void 0) hsl.h = wrap2(hsl.h * fraction);
1126
+ else if (name === "sat" && fraction !== void 0) hsl.s = clampUnitInterval(fraction);
1127
+ else if (name === "satMod" && fraction !== void 0) hsl.s *= fraction;
1128
+ else if (name === "satOff" && fraction !== void 0)
1129
+ hsl.s = clampUnitInterval(hsl.s + fraction);
1130
+ else if (name === "lum" && fraction !== void 0) hsl.l = clampUnitInterval(fraction);
1131
+ else if (name === "lumMod" && fraction !== void 0)
1132
+ hsl.l = clampUnitInterval(hsl.l * fraction);
1133
+ else if (name === "lumOff" && fraction !== void 0)
1134
+ hsl.l = clampUnitInterval(hsl.l + fraction);
1135
+ else continue;
1136
+ ({ r, g, b } = hslToRgb(hsl.h, hsl.s, hsl.l, (channel) => channel, {
1137
+ clampSaturation: false
1138
+ }));
1139
+ }
1140
+ }
1141
+ return { r, g, b, alpha };
1142
+ }
1143
+
1082
1144
  // drawingml/drawing-color.ts
1083
1145
  var COLOR_ELEMENTS = {
1084
1146
  srgbClr: "srgb",
@@ -1089,10 +1151,10 @@ var COLOR_ELEMENTS = {
1089
1151
  hslClr: "hsl"
1090
1152
  };
1091
1153
  function colorValue(kind, element) {
1092
- const attribute = (name) => element.getAttribute(name) ?? "";
1093
- if (kind === "scrgb") return `${attribute("r")},${attribute("g")},${attribute("b")}`;
1094
- if (kind === "hsl") return `${attribute("hue")},${attribute("sat")},${attribute("lum")}`;
1095
- return attribute("val");
1154
+ const attribute2 = (name) => element.getAttribute(name) ?? "";
1155
+ if (kind === "scrgb") return `${attribute2("r")},${attribute2("g")},${attribute2("b")}`;
1156
+ if (kind === "hsl") return `${attribute2("hue")},${attribute2("sat")},${attribute2("lum")}`;
1157
+ return attribute2("val");
1096
1158
  }
1097
1159
  function parseDrawingColorIn(container) {
1098
1160
  if (!container) return void 0;
@@ -1177,6 +1239,17 @@ function resolveDrawingColor(color, theme, options) {
1177
1239
  const base = baseHex(color, theme);
1178
1240
  const rgb = base ? hexToRgbChannels(base) : null;
1179
1241
  if (!rgb) return void 0;
1242
+ if (options?.transformOrder === "document") {
1243
+ const value = orderedColorTransforms(rgb, color.transforms);
1244
+ const round = options.hslRounding === "halfDown" ? (channel) => Math.ceil(channel - 0.5) : Math.round;
1245
+ return {
1246
+ hex: `#${toHex(round(value.r))}${toHex(round(value.g))}${toHex(round(value.b))}`,
1247
+ alpha: value.alpha,
1248
+ unapplied: [...new Set(color.transforms.map((transform) => transform.name))].filter(
1249
+ (name) => !APPLIED.has(name)
1250
+ )
1251
+ };
1252
+ }
1180
1253
  let { r, g, b } = rgb;
1181
1254
  const find = (name) => color.transforms.find((entry3) => entry3.name === name)?.value;
1182
1255
  const has = (name) => color.transforms.some((entry3) => entry3.name === name);
@@ -1200,13 +1273,13 @@ function resolveDrawingColor(color, theme, options) {
1200
1273
  }
1201
1274
  if (["hue", "hueMod", "hueOff", "sat", "satMod", "satOff", "lum", "lumMod", "lumOff"].some(has)) {
1202
1275
  const hsl = rgbToHsl(r, g, b);
1203
- const wrap = (degrees) => (degrees % 360 + 360) % 360;
1276
+ const wrap2 = (degrees) => (degrees % 360 + 360) % 360;
1204
1277
  const hueAbs = parseDrawingHueDegrees(find("hue"));
1205
- if (hueAbs !== void 0) hsl.h = wrap(hueAbs);
1278
+ if (hueAbs !== void 0) hsl.h = wrap2(hueAbs);
1206
1279
  const hueMod = parseDrawingFraction(find("hueMod"));
1207
- if (hueMod !== void 0) hsl.h = wrap(hsl.h * hueMod);
1280
+ if (hueMod !== void 0) hsl.h = wrap2(hsl.h * hueMod);
1208
1281
  const hueOff = parseDrawingHueDegrees(find("hueOff"));
1209
- if (hueOff !== void 0) hsl.h = wrap(hsl.h + hueOff);
1282
+ if (hueOff !== void 0) hsl.h = wrap2(hsl.h + hueOff);
1210
1283
  const satAbs = parseDrawingFraction(find("sat"));
1211
1284
  if (satAbs !== void 0) hsl.s = clampUnitInterval(satAbs);
1212
1285
  const satMod = parseDrawingFraction(find("satMod"));
@@ -1219,7 +1292,7 @@ function resolveDrawingColor(color, theme, options) {
1219
1292
  if (lumMod !== void 0) hsl.l = clampUnitInterval(hsl.l * lumMod);
1220
1293
  const lumOff = parseDrawingFraction(find("lumOff"));
1221
1294
  if (lumOff !== void 0) hsl.l = clampUnitInterval(hsl.l + lumOff);
1222
- const round = Math.round;
1295
+ const round = options?.hslRounding === "halfDown" ? (value) => Math.ceil(value - 0.5) : Math.round;
1223
1296
  ({ r, g, b } = hslToRgb(hsl.h, hsl.s, hsl.l, round));
1224
1297
  }
1225
1298
  let alpha = parseDrawingPercent(find("alpha")) ?? 1;
@@ -1283,12 +1356,12 @@ var CHART_COLOR_PALETTES = [
1283
1356
  function findChartColorPalette(id) {
1284
1357
  return CHART_COLOR_PALETTES.find((palette) => palette.id === id);
1285
1358
  }
1286
- function withinLinearTransform(i, n) {
1287
- if (n <= 1) {
1359
+ function withinLinearTransform(i, n2) {
1360
+ if (n2 <= 1) {
1288
1361
  return {};
1289
1362
  }
1290
- const step = 140 / (n + 1);
1291
- const centre = (n - 1) / 2;
1363
+ const step = 140 / (n2 + 1);
1364
+ const centre = (n2 - 1) / 2;
1292
1365
  const value = 100 - step * Math.abs(i - centre);
1293
1366
  if (i < centre) {
1294
1367
  return { shade: Math.floor(value + 1e-9) * 1e3 };
@@ -1298,7 +1371,7 @@ function withinLinearTransform(i, n) {
1298
1371
  }
1299
1372
  return {};
1300
1373
  }
1301
- function chartPaletteSeriesColorChoice(palette, i, n) {
1374
+ function chartPaletteSeriesColorChoice(palette, i, n2) {
1302
1375
  let base;
1303
1376
  let transform;
1304
1377
  if (palette.meth === "cycle") {
@@ -1306,9 +1379,9 @@ function chartPaletteSeriesColorChoice(palette, i, n) {
1306
1379
  const round = Math.floor(i / palette.base.length);
1307
1380
  transform = (palette.variations.length ? palette.variations[round % palette.variations.length] : {}) ?? {};
1308
1381
  } else {
1309
- const index = palette.meth === "withinLinearReversed" ? n - 1 - i : i;
1382
+ const index = palette.meth === "withinLinearReversed" ? n2 - 1 - i : i;
1310
1383
  base = palette.base[0];
1311
- transform = withinLinearTransform(index, n);
1384
+ transform = withinLinearTransform(index, n2);
1312
1385
  }
1313
1386
  if (!base) throw new RangeError("A chart palette must have a base color");
1314
1387
  return {
@@ -1317,12 +1390,12 @@ function chartPaletteSeriesColorChoice(palette, i, n) {
1317
1390
  transforms: Object.entries(transform).map(([name, value]) => ({ name, value: String(value) }))
1318
1391
  };
1319
1392
  }
1320
- function chartPaletteSeriesColor(palette, i, n, scheme) {
1321
- const choice = chartPaletteSeriesColorChoice(palette, i, n);
1393
+ function chartPaletteSeriesColor(palette, i, n2, scheme) {
1394
+ const choice = chartPaletteSeriesColorChoice(palette, i, n2);
1322
1395
  return (resolveDrawingColor(choice, { scheme: (name) => scheme[name] })?.hex ?? scheme[choice.value]).toUpperCase();
1323
1396
  }
1324
- function chartPaletteColors(palette, n, scheme) {
1325
- return Array.from({ length: n }, (_, i) => chartPaletteSeriesColor(palette, i, n, scheme));
1397
+ function chartPaletteColors(palette, n2, scheme) {
1398
+ return Array.from({ length: n2 }, (_, i) => chartPaletteSeriesColor(palette, i, n2, scheme));
1326
1399
  }
1327
1400
 
1328
1401
  // chart/color-style.ts
@@ -1393,11 +1466,11 @@ function resolveChartStyleDefinition(style, resolve) {
1393
1466
  const value = source[key];
1394
1467
  if (value !== void 0) Object.assign(entry3, { [key]: value });
1395
1468
  }
1396
- const line = fillColor(source.line?.fill) ?? (source.lineRef?.color && resolve(source.lineRef.color));
1469
+ const line2 = fillColor(source.line?.fill) ?? (source.lineRef?.color && resolve(source.lineRef.color));
1397
1470
  const fill = fillColor(source.fill) ?? (source.fillRef?.color && resolve(source.fillRef.color));
1398
1471
  const color = (source.textColor && resolve(source.textColor)) ?? (source.fontRef?.color && resolve(source.fontRef.color));
1399
1472
  if (color !== void 0) entry3.color = color;
1400
- if (line !== void 0) entry3.lineColor = line;
1473
+ if (line2 !== void 0) entry3.lineColor = line2;
1401
1474
  if (fill !== void 0) entry3.fillColor = fill;
1402
1475
  if (source.line?.widthEmu !== void 0 && source.line.widthEmu > 0)
1403
1476
  entry3.lineWidth = source.line.widthEmu / 12700;
@@ -1464,13 +1537,13 @@ var FILL_ELEMENTS = /* @__PURE__ */ new Set([
1464
1537
  "blipFill",
1465
1538
  "grpFill"
1466
1539
  ]);
1467
- function fillElementOf(properties) {
1468
- return properties ? elements(properties).find(
1540
+ function fillElementOf(properties2) {
1541
+ return properties2 ? elements(properties2).find(
1469
1542
  (element) => FILL_ELEMENTS.has(element.localName) && (!element.namespaceURI || element.namespaceURI === NS.a)
1470
1543
  ) : void 0;
1471
1544
  }
1472
- function parseDrawingFill(properties) {
1473
- const fill = fillElementOf(properties);
1545
+ function parseDrawingFill(properties2) {
1546
+ const fill = fillElementOf(properties2);
1474
1547
  if (!fill) return void 0;
1475
1548
  switch (fill.localName) {
1476
1549
  case "noFill":
@@ -1487,7 +1560,7 @@ function parseDrawingFill(properties) {
1487
1560
  });
1488
1561
  const angle = Number.parseInt(first(fill, "lin", NS.a)?.getAttribute("ang") ?? "", 10);
1489
1562
  const scaled = first(fill, "lin", NS.a)?.getAttribute("scaled");
1490
- const path = first(fill, "path", NS.a)?.getAttribute("path");
1563
+ const path2 = first(fill, "path", NS.a)?.getAttribute("path");
1491
1564
  const focus = first(first(fill, "path", NS.a), "fillToRect", NS.a);
1492
1565
  const tile = first(fill, "tileRect", NS.a);
1493
1566
  const tileRect = tile ? {
@@ -1509,7 +1582,7 @@ function parseDrawingFill(properties) {
1509
1582
  ...Number.isFinite(angle) ? { angle: angle / 6e4 } : {},
1510
1583
  ...scaled === "1" || scaled === "true" ? { scaled: true } : {},
1511
1584
  ...scaled === "0" || scaled === "false" ? { scaled: false } : {},
1512
- ...path ? { path } : {},
1585
+ ...path2 ? { path: path2 } : {},
1513
1586
  ...fillToRect && Object.values(fillToRect).every(Number.isFinite) ? { fillToRect } : {},
1514
1587
  ...tileRect && Object.values(tileRect).every(Number.isFinite) ? { tileRect } : {}
1515
1588
  };
@@ -1535,41 +1608,41 @@ function parseDrawingFill(properties) {
1535
1608
  }
1536
1609
  function parseDrawingLine(ln) {
1537
1610
  if (!ln) return void 0;
1538
- const line = {};
1611
+ const line2 = {};
1539
1612
  const width = Number.parseInt(ln.getAttribute("w") ?? "", 10);
1540
- if (Number.isFinite(width)) line.widthEmu = width;
1613
+ if (Number.isFinite(width)) line2.widthEmu = width;
1541
1614
  const fill = parseDrawingFill(ln);
1542
- if (fill) line.fill = fill;
1615
+ if (fill) line2.fill = fill;
1543
1616
  const dash = first(ln, "prstDash", NS.a)?.getAttribute("val");
1544
- if (dash) line.dash = dash;
1617
+ if (dash) line2.dash = dash;
1545
1618
  const cap = ln.getAttribute("cap");
1546
- if (cap) line.cap = cap;
1547
- return line;
1619
+ if (cap) line2.cap = cap;
1620
+ return line2;
1548
1621
  }
1549
1622
 
1550
1623
  // chart/read-appearance.ts
1551
- function readChartAppearance(text, properties) {
1624
+ function readChartAppearance(text2, properties2) {
1552
1625
  const out = {};
1553
- const size = Number(text?.getAttribute("sz") ?? NaN);
1626
+ const size = Number(text2?.getAttribute("sz") ?? NaN);
1554
1627
  if (Number.isFinite(size) && size > 0) out.fontSize = size / 100;
1555
- for (const [attribute, key] of [
1628
+ for (const [attribute2, key] of [
1556
1629
  ["b", "bold"],
1557
1630
  ["i", "italic"]
1558
1631
  ]) {
1559
- const value = text?.getAttribute(attribute);
1632
+ const value = text2?.getAttribute(attribute2);
1560
1633
  if (value !== null && value !== void 0) out[key] = value === "1" || value === "true";
1561
1634
  }
1562
- const typeface = first(text, "latin", NS.a)?.getAttribute("typeface");
1563
- const underline = text?.getAttribute("u");
1635
+ const typeface2 = first(text2, "latin", NS.a)?.getAttribute("typeface");
1636
+ const underline = text2?.getAttribute("u");
1564
1637
  if (underline) out.underline = underline !== "none";
1565
- if (typeface) out.typeface = typeface;
1566
- const color = parseDrawingColorIn(first(text, "solidFill", NS.a));
1638
+ if (typeface2) out.typeface = typeface2;
1639
+ const color = parseDrawingColorIn(first(text2, "solidFill", NS.a));
1567
1640
  if (color) out.textColor = color;
1568
- const fill = parseDrawingFill(properties);
1569
- const line = parseDrawingLine(first(properties, "ln", NS.a));
1641
+ const fill = parseDrawingFill(properties2);
1642
+ const line2 = parseDrawingLine(first(properties2, "ln", NS.a));
1570
1643
  if (fill) out.fill = fill;
1571
- if (line) out.line = line;
1572
- const effects = first(text, "effectLst", NS.a);
1644
+ if (line2) out.line = line2;
1645
+ const effects = first(text2, "effectLst", NS.a);
1573
1646
  if (effects) out.textEffectsXml = buildXml(effects);
1574
1647
  return out;
1575
1648
  }
@@ -1631,46 +1704,46 @@ function parseSpacing(parent) {
1631
1704
  ["spcPts", "points", 100],
1632
1705
  ["spcPct", "percent", 1e5]
1633
1706
  ]) {
1634
- const raw = first(parent, name, NS.a)?.getAttribute("val");
1635
- if (raw == null || !/^\d+$/.test(raw)) continue;
1636
- const value = Number(raw) / divisor;
1707
+ const raw2 = first(parent, name, NS.a)?.getAttribute("val");
1708
+ if (raw2 == null || !/^\d+$/.test(raw2)) continue;
1709
+ const value = Number(raw2) / divisor;
1637
1710
  if (Number.isFinite(value)) return { unit, value };
1638
1711
  }
1639
1712
  return void 0;
1640
1713
  }
1641
- function parseProperties(properties) {
1714
+ function parseProperties(properties2) {
1642
1715
  const parsed = {};
1643
- const size = Number.parseInt(properties?.getAttribute("sz") ?? "", 10);
1716
+ const size = Number.parseInt(properties2?.getAttribute("sz") ?? "", 10);
1644
1717
  if (Number.isFinite(size)) parsed.sizePt = size / 100;
1645
- const bold = booleanAttribute(properties, "b");
1718
+ const bold = booleanAttribute(properties2, "b");
1646
1719
  if (bold !== void 0) parsed.bold = bold;
1647
- const italic = booleanAttribute(properties, "i");
1720
+ const italic = booleanAttribute(properties2, "i");
1648
1721
  if (italic !== void 0) parsed.italic = italic;
1649
- const underline = properties?.getAttribute("u");
1722
+ const underline = properties2?.getAttribute("u");
1650
1723
  if (underline) parsed.underline = underline !== "none";
1651
- const color = parseDrawingColorIn(first(properties, "solidFill", NS.a));
1724
+ const color = parseDrawingColorIn(first(properties2, "solidFill", NS.a));
1652
1725
  if (color) parsed.color = color;
1653
- const typeface = first(properties, "latin", NS.a)?.getAttribute("typeface");
1654
- if (typeface) parsed.typeface = typeface;
1726
+ const typeface2 = first(properties2, "latin", NS.a)?.getAttribute("typeface");
1727
+ if (typeface2) parsed.typeface = typeface2;
1655
1728
  return parsed;
1656
1729
  }
1657
- function parseRun(run) {
1730
+ function parseRun(run2) {
1658
1731
  return {
1659
- text: run.localName === "br" ? "\n" : first(run, "t", NS.a)?.textContent ?? "",
1660
- ...parseProperties(first(run, "rPr", NS.a))
1732
+ text: run2.localName === "br" ? "\n" : first(run2, "t", NS.a)?.textContent ?? "",
1733
+ ...parseProperties(first(run2, "rPr", NS.a))
1661
1734
  };
1662
1735
  }
1663
- function parseParagraph(paragraph) {
1736
+ function parseParagraph(paragraph2) {
1664
1737
  const runs = [];
1665
- for (const child2 of elements(paragraph))
1738
+ for (const child2 of elements(paragraph2))
1666
1739
  if (child2.namespaceURI === NS.a && ["r", "fld", "br"].includes(child2.localName))
1667
1740
  runs.push(parseRun(child2));
1668
- const properties = first(paragraph, "pPr", NS.a);
1669
- const align = properties?.getAttribute("algn");
1670
- const defaults = parseProperties(first(properties, "defRPr", NS.a));
1671
- const lineSpacing = parseSpacing(first(properties, "lnSpc", NS.a));
1672
- const spaceBefore = parseSpacing(first(properties, "spcBef", NS.a));
1673
- const spaceAfter = parseSpacing(first(properties, "spcAft", NS.a));
1741
+ const properties2 = first(paragraph2, "pPr", NS.a);
1742
+ const align = properties2?.getAttribute("algn");
1743
+ const defaults = parseProperties(first(properties2, "defRPr", NS.a));
1744
+ const lineSpacing = parseSpacing(first(properties2, "lnSpc", NS.a));
1745
+ const spaceBefore = parseSpacing(first(properties2, "spcBef", NS.a));
1746
+ const spaceAfter = parseSpacing(first(properties2, "spcAft", NS.a));
1674
1747
  return {
1675
1748
  ...align ? { align } : {},
1676
1749
  ...Object.keys(defaults).length ? { defaultProperties: defaults } : {},
@@ -1682,22 +1755,22 @@ function parseParagraph(paragraph) {
1682
1755
  }
1683
1756
  function parseDrawingTextBody(body) {
1684
1757
  if (!body) return void 0;
1685
- const properties = first(body, "bodyPr", NS.a);
1758
+ const properties2 = first(body, "bodyPr", NS.a);
1686
1759
  const paragraphs = children(body, "p", NS.a).map(parseParagraph);
1687
1760
  const result = {
1688
1761
  paragraphs,
1689
- text: paragraphs.map((paragraph) => paragraph.runs.map((run) => run.text).join("")).join("\n")
1762
+ text: paragraphs.map((paragraph2) => paragraph2.runs.map((run2) => run2.text).join("")).join("\n")
1690
1763
  };
1691
- const anchor = properties?.getAttribute("anchor");
1764
+ const anchor = properties2?.getAttribute("anchor");
1692
1765
  if (anchor) result.anchor = anchor;
1693
1766
  const insets = {};
1694
- for (const [key, attribute] of [
1767
+ for (const [key, attribute2] of [
1695
1768
  ["left", "lIns"],
1696
1769
  ["top", "tIns"],
1697
1770
  ["right", "rIns"],
1698
1771
  ["bottom", "bIns"]
1699
1772
  ]) {
1700
- const value = Number.parseInt(properties?.getAttribute(attribute) ?? "", 10);
1773
+ const value = Number.parseInt(properties2?.getAttribute(attribute2) ?? "", 10);
1701
1774
  if (Number.isFinite(value)) insets[key] = value;
1702
1775
  }
1703
1776
  if (Object.keys(insets).length > 0) result.insetsEmu = insets;
@@ -1708,8 +1781,8 @@ function parseDrawingTextBody(body) {
1708
1781
  function readChartManualLayoutValues(value) {
1709
1782
  const result = {};
1710
1783
  const enumeration = (name, values) => {
1711
- const raw = value(name);
1712
- return values.includes(raw) ? raw : void 0;
1784
+ const raw2 = value(name);
1785
+ return values.includes(raw2) ? raw2 : void 0;
1713
1786
  };
1714
1787
  const target = enumeration("layoutTarget", ["inner", "outer"]);
1715
1788
  if (target) result.layoutTarget = target;
@@ -1728,10 +1801,10 @@ function readChartManualLayoutValues(value) {
1728
1801
  ["w", "width"],
1729
1802
  ["h", "height"]
1730
1803
  ]) {
1731
- const raw = value(xml);
1732
- if (typeof raw !== "string" && typeof raw !== "number" || typeof raw === "string" && !raw.trim())
1804
+ const raw2 = value(xml);
1805
+ if (typeof raw2 !== "string" && typeof raw2 !== "number" || typeof raw2 === "string" && !raw2.trim())
1733
1806
  continue;
1734
- const number = Number(raw);
1807
+ const number = Number(raw2);
1735
1808
  if (Number.isFinite(number)) result[key] = number;
1736
1809
  }
1737
1810
  return Object.keys(result).length ? result : void 0;
@@ -1753,8 +1826,8 @@ var c = (parent, name) => first(parent, name, NS.c);
1753
1826
  var a = (parent, name) => first(parent, name, NS.a);
1754
1827
  function entry2(node) {
1755
1828
  const body = c(node, "txPr");
1756
- const paragraph = a(body, "p");
1757
- const defaults = a(a(paragraph, "pPr"), "defRPr");
1829
+ const paragraph2 = a(body, "p");
1830
+ const defaults = a(a(paragraph2, "pPr"), "defRPr");
1758
1831
  const rich = c(c(node, "tx"), "rich");
1759
1832
  const richParagraph = a(rich, "p");
1760
1833
  const textBody = parseDrawingTextBody(rich);
@@ -1903,26 +1976,26 @@ function drawingColorXml(color) {
1903
1976
  }
1904
1977
 
1905
1978
  // drawingml/write-fill.ts
1906
- function setDrawingFillXml(properties, xml) {
1907
- const doc = properties.ownerDocument;
1979
+ function setDrawingFillXml(properties2, xml) {
1980
+ const doc = properties2.ownerDocument;
1908
1981
  const wrapper = parseXml(`<w xmlns:a="${NS.a}">${xml}</w>`);
1909
1982
  const fill = elements(wrapper.documentElement)[0];
1910
1983
  const names = ["solidFill", "gradFill", "pattFill", "blipFill", "grpFill", "noFill"];
1911
1984
  if (elements(wrapper.documentElement).length !== 1 || !fill || fill.namespaceURI !== NS.a || !names.includes(fill.localName))
1912
1985
  throw new Error("Invalid DrawingML fill XML");
1913
- const existing = elements(properties).filter(
1986
+ const existing = elements(properties2).filter(
1914
1987
  (node) => node.namespaceURI === NS.a && names.includes(node.localName)
1915
1988
  );
1916
1989
  const next = doc.importNode(fill, true);
1917
- if (existing[0]) properties.replaceChild(next, existing[0]);
1990
+ if (existing[0]) properties2.replaceChild(next, existing[0]);
1918
1991
  else
1919
- properties.insertBefore(
1992
+ properties2.insertBefore(
1920
1993
  next,
1921
- elements(properties).find(
1994
+ elements(properties2).find(
1922
1995
  (node) => node.namespaceURI === NS.a && ["ln", "effectLst", "effectDag", "scene3d", "sp3d", "extLst"].includes(node.localName)
1923
1996
  ) ?? null
1924
1997
  );
1925
- for (const extra of existing.slice(1)) properties.removeChild(extra);
1998
+ for (const extra of existing.slice(1)) properties2.removeChild(extra);
1926
1999
  }
1927
2000
  function drawingFillXml(fill) {
1928
2001
  if (fill.kind === "none") return "<a:noFill/>";
@@ -1966,20 +2039,20 @@ function drawingFillXml(fill) {
1966
2039
  if (fill.scaled !== void 0) linear.setAttribute("scaled", fill.scaled ? "1" : "0");
1967
2040
  }
1968
2041
  if (fill.path !== void 0) {
1969
- let path = first(root, "path", NS.a);
1970
- if (!path) {
1971
- path = doc.createElementNS(NS.a, "a:path");
1972
- root.insertBefore(path, first(root, "tileRect", NS.a) ?? first(root, "extLst", NS.a) ?? null);
2042
+ let path2 = first(root, "path", NS.a);
2043
+ if (!path2) {
2044
+ path2 = doc.createElementNS(NS.a, "a:path");
2045
+ root.insertBefore(path2, first(root, "tileRect", NS.a) ?? first(root, "extLst", NS.a) ?? null);
1973
2046
  }
1974
- path.setAttribute("path", fill.path);
2047
+ path2.setAttribute("path", fill.path);
1975
2048
  if (!fill.fillToRect) {
1976
- const old = first(path, "fillToRect", NS.a);
1977
- if (old) path.removeChild(old);
2049
+ const old = first(path2, "fillToRect", NS.a);
2050
+ if (old) path2.removeChild(old);
1978
2051
  } else {
1979
- let focus = first(path, "fillToRect", NS.a);
2052
+ let focus = first(path2, "fillToRect", NS.a);
1980
2053
  if (!focus) {
1981
2054
  focus = doc.createElementNS(NS.a, "a:fillToRect");
1982
- path.appendChild(focus);
2055
+ path2.appendChild(focus);
1983
2056
  }
1984
2057
  for (const [key, value] of Object.entries(fill.fillToRect))
1985
2058
  focus.setAttribute(key, String(Math.round(value * 1e5)));
@@ -2004,12 +2077,12 @@ function writeChartFillFormatting(root, formatting) {
2004
2077
  for (const [part, node] of Object.entries(chartFormattingNodes(root))) {
2005
2078
  const fill = formatting.entries[part]?.fill;
2006
2079
  if (!node || !fill) continue;
2007
- let properties = first(node, "spPr", NS.c);
2008
- if (JSON.stringify(parseDrawingFill(properties)) === JSON.stringify(fill)) continue;
2080
+ let properties2 = first(node, "spPr", NS.c);
2081
+ if (JSON.stringify(parseDrawingFill(properties2)) === JSON.stringify(fill)) continue;
2009
2082
  const xml = drawingFillXml(fill);
2010
2083
  if (xml === void 0) continue;
2011
- if (!properties) {
2012
- properties = root.ownerDocument.createElementNS(NS.c, "c:spPr");
2084
+ if (!properties2) {
2085
+ properties2 = root.ownerDocument.createElementNS(NS.c, "c:spPr");
2013
2086
  const successors = [
2014
2087
  "txPr",
2015
2088
  "crossAx",
@@ -2028,13 +2101,13 @@ function writeChartFillFormatting(root, formatting) {
2028
2101
  "extLst"
2029
2102
  ];
2030
2103
  node.insertBefore(
2031
- properties,
2104
+ properties2,
2032
2105
  elements(node).find(
2033
2106
  (child2) => child2.namespaceURI === NS.c && successors.includes(child2.localName)
2034
2107
  ) ?? null
2035
2108
  );
2036
2109
  }
2037
- setDrawingFillXml(properties, xml);
2110
+ setDrawingFillXml(properties2, xml);
2038
2111
  changed = true;
2039
2112
  }
2040
2113
  return changed;
@@ -2051,6 +2124,27 @@ function removeGradientStop(stops, index) {
2051
2124
  return stops.length <= 2 ? void 0 : stops.filter((_, i) => i !== index);
2052
2125
  }
2053
2126
 
2127
+ // chart/gradient-coincident-stops.ts
2128
+ var NATIVE_COINCIDENT_STOP_RAMP = 1 / 256;
2129
+ function spreadCoincidentStops(stops) {
2130
+ const out = [];
2131
+ for (const [index, stop] of stops.entries()) {
2132
+ const source = stops[index - 1];
2133
+ const previous = out.at(-1);
2134
+ const next = stops[index + 1];
2135
+ if (!source || !previous || stop.offset !== source.offset || stop.color === source.color && (stop.opacity ?? 1) === (source.opacity ?? 1)) {
2136
+ out.push(stop);
2137
+ continue;
2138
+ }
2139
+ const limit = Math.min(1, next ? next.offset : 1);
2140
+ out.push({
2141
+ ...stop,
2142
+ offset: Math.max(stop.offset, Math.min(previous.offset + NATIVE_COINCIDENT_STOP_RAMP, limit))
2143
+ });
2144
+ }
2145
+ return out;
2146
+ }
2147
+
2054
2148
  // drawingml/gradient-geometry.ts
2055
2149
  var RECT_GRADIENT_DIRECTIONS = [
2056
2150
  { id: "center", label: "From Center", x: 0.5, y: 0.5 },
@@ -2238,7 +2332,7 @@ function buildChartGradientDef(id, fill, bounds) {
2238
2332
  y1: round(0.5 - dy),
2239
2333
  x2: round(0.5 + dx),
2240
2334
  y2: round(0.5 + dy),
2241
- stops
2335
+ stops: spreadCoincidentStops(stops)
2242
2336
  };
2243
2337
  }
2244
2338
 
@@ -2260,6 +2354,7 @@ function chartGradientMarkup(def) {
2260
2354
  }
2261
2355
 
2262
2356
  // chart/bar-cluster-geometry.ts
2357
+ var DEFAULT_BAR_GAP_WIDTH = 150;
2263
2358
  function assertBarClusterOptions(options) {
2264
2359
  for (const [field, min, max] of [
2265
2360
  ["barGapWidth", 0, 500],
@@ -2273,7 +2368,8 @@ function assertBarClusterOptions(options) {
2273
2368
  function clusteredBarGeometry(barGroupWidth, seriesCount, chartData) {
2274
2369
  const overlap = chartData.barOverlap ?? 0;
2275
2370
  const overlapSpan = 1 + (seriesCount - 1) * (1 - overlap / 100);
2276
- const singleBarWidth = chartData.barGapWidth !== void 0 ? barGroupWidth / (overlapSpan + Math.max(chartData.barGapWidth, 0) / 100) : barGroupWidth * 0.7 / seriesCount;
2371
+ const gapWidth = chartData.barGapWidth ?? DEFAULT_BAR_GAP_WIDTH;
2372
+ const singleBarWidth = barGroupWidth / (overlapSpan + Math.max(gapWidth, 0) / 100);
2277
2373
  const step = singleBarWidth * (1 - overlap / 100);
2278
2374
  return { singleBarWidth, step, clusterWidth: singleBarWidth + step * (seriesCount - 1) };
2279
2375
  }
@@ -2311,6 +2407,2817 @@ function writeChartLayoutFormatting(root, formatting) {
2311
2407
  return changed;
2312
2408
  }
2313
2409
 
2410
+ // chart/data-cache.ts
2411
+ function chartCacheValues(cache) {
2412
+ if (!cache) return [];
2413
+ const numeric = cache.type === "number";
2414
+ const out = [];
2415
+ for (const point of cache.points) {
2416
+ const text2 = point.value;
2417
+ out[point.index ?? out.length] = numeric && text2.trim() !== "" && Number.isFinite(Number(text2)) ? Number(text2) : text2;
2418
+ }
2419
+ const size = Math.max(cache.pointCount ?? 0, out.length);
2420
+ for (let index = 0; index < size; index++) if (out[index] === void 0) out[index] = "";
2421
+ return out;
2422
+ }
2423
+ var chartSourceValues = (source) => chartCacheValues(source?.cache ?? source?.levels?.[0]);
2424
+
2425
+ // chart/xml-fragment.ts
2426
+ var CHART_ROOT_BINDINGS = /* @__PURE__ */ new Map([
2427
+ ["c", NS.c],
2428
+ ["a", NS.a],
2429
+ ["r", NS.r]
2430
+ ]);
2431
+ var DECLARATION = / xmlns:([A-Za-z_][\w.-]*)="([^"]*)"/g;
2432
+ function stripDeclarations(xml, bindings) {
2433
+ const conflicting = /* @__PURE__ */ new Set();
2434
+ for (const [, prefix, uri] of xml.matchAll(DECLARATION))
2435
+ if (prefix !== void 0 && bindings.has(prefix) && bindings.get(prefix) !== uri)
2436
+ conflicting.add(prefix);
2437
+ return xml.replace(
2438
+ DECLARATION,
2439
+ (match, prefix, uri) => bindings.get(prefix) === uri && !conflicting.has(prefix) ? "" : match
2440
+ );
2441
+ }
2442
+ var innerXml = (element) => stripDeclarations(elements(element).map(buildXml).join(""), CHART_ROOT_BINDINGS);
2443
+
2444
+ // chart/parse-util.ts
2445
+ var cChild = (parent, local) => first(parent, local, NS.c);
2446
+ var attribute = (element, name) => element?.hasAttribute(name) ? element.getAttribute(name) ?? void 0 : void 0;
2447
+ var cVal = (parent, local) => attribute(cChild(parent, local), "val");
2448
+ var path = (element) => `c:${element.parentNode?.localName ?? ""}/c:${element.localName}`;
2449
+ function malformed(context, element, value) {
2450
+ context.issues.push({
2451
+ code: "CHART_VALUE_INVALID",
2452
+ message: `${path(element)} has an unreadable value "${value}".`
2453
+ });
2454
+ }
2455
+ function cBool(context, parent, local) {
2456
+ const element = cChild(parent, local);
2457
+ if (!element) return void 0;
2458
+ const raw2 = attribute(element, "val");
2459
+ if (raw2 === void 0) return true;
2460
+ const value = raw2.trim().toLowerCase();
2461
+ if (value === "1" || value === "true") return true;
2462
+ if (value === "0" || value === "false") return false;
2463
+ malformed(context, element, raw2);
2464
+ return void 0;
2465
+ }
2466
+ function cNumber(context, parent, local) {
2467
+ const element = cChild(parent, local);
2468
+ const raw2 = attribute(element, "val");
2469
+ if (!element || raw2 === void 0) return void 0;
2470
+ const value = raw2.trim() ? Number(raw2) : Number.NaN;
2471
+ if (Number.isFinite(value)) return value;
2472
+ malformed(context, element, raw2);
2473
+ return void 0;
2474
+ }
2475
+ function reportUnmodelled(context, element, handled) {
2476
+ for (const child2 of elements(element)) {
2477
+ if (handled.has(child2.localName)) continue;
2478
+ context.issues.push({
2479
+ code: "CHART_ELEMENT_NOT_MODELLED",
2480
+ message: `${path(child2)} is not modelled; it is kept only in the source part.`
2481
+ });
2482
+ }
2483
+ }
2484
+ function extensionList(parent) {
2485
+ const extLst = cChild(parent, "extLst");
2486
+ return extLst ? buildXml(extLst) : void 0;
2487
+ }
2488
+ function readShapeFields(spPr) {
2489
+ const out = {};
2490
+ const fill = parseDrawingFill(spPr);
2491
+ if (fill) out.fill = fill;
2492
+ const line2 = parseDrawingLine(first(spPr, "ln", NS.a));
2493
+ if (line2) out.line = line2;
2494
+ const effects = first(spPr, "effectLst", NS.a);
2495
+ if (effects) out.effectsXml = buildXml(effects);
2496
+ return out;
2497
+ }
2498
+ function shapeProperties(parent) {
2499
+ const spPr = cChild(parent, "spPr");
2500
+ if (!spPr) return void 0;
2501
+ const out = readShapeFields(spPr);
2502
+ const source = innerXml(spPr);
2503
+ if (source) out.sourceXml = source;
2504
+ return out;
2505
+ }
2506
+ function chartTextBody(element) {
2507
+ const body = parseDrawingTextBody(element);
2508
+ if (!body || !element) return body;
2509
+ const source = innerXml(element);
2510
+ if (source) body.sourceXml = source;
2511
+ return body;
2512
+ }
2513
+ var textProperties = (parent) => chartTextBody(cChild(parent, "txPr"));
2514
+ function chartLines(parent, local) {
2515
+ const element = cChild(parent, local);
2516
+ if (!element) return void 0;
2517
+ const spPr = shapeProperties(element);
2518
+ return spPr ? { spPr } : {};
2519
+ }
2520
+ function numberFormat(parent) {
2521
+ const element = cChild(parent, "numFmt");
2522
+ const formatCode = attribute(element, "formatCode");
2523
+ if (formatCode === void 0) return void 0;
2524
+ const linked = attribute(element, "sourceLinked");
2525
+ return {
2526
+ formatCode,
2527
+ ...linked === "1" || linked === "true" ? { sourceLinked: true } : {},
2528
+ ...linked === "0" || linked === "false" ? { sourceLinked: false } : {}
2529
+ };
2530
+ }
2531
+ function readLayoutFields(layout) {
2532
+ const manual = cChild(layout, "manualLayout");
2533
+ return (manual && readChartManualLayoutValues((name) => cVal(manual, name))) ?? {};
2534
+ }
2535
+ function manualLayout(parent) {
2536
+ const layout = cChild(parent, "layout");
2537
+ if (!layout) return void 0;
2538
+ const out = readLayoutFields(layout);
2539
+ const source = innerXml(layout);
2540
+ if (source) out.sourceXml = source;
2541
+ return out;
2542
+ }
2543
+ function assignDefined(target, values) {
2544
+ for (const [key, value] of Object.entries(values))
2545
+ if (value !== void 0) target[key] = value;
2546
+ return target;
2547
+ }
2548
+
2549
+ // chart/parse-text.ts
2550
+ function parseCache(node) {
2551
+ const cache = {
2552
+ type: node.localName === "numCache" || node.localName === "numLit" ? "number" : "string",
2553
+ points: children(node, "pt", NS.c).map((pt) => {
2554
+ const point = { value: cChild(pt, "v")?.textContent ?? "" };
2555
+ const index = Number(attribute(pt, "idx") ?? Number.NaN);
2556
+ if (Number.isInteger(index) && index >= 0) point.index = index;
2557
+ const formatCode2 = attribute(pt, "formatCode");
2558
+ if (formatCode2 !== void 0) point.formatCode = formatCode2;
2559
+ return point;
2560
+ })
2561
+ };
2562
+ const count = Number(cVal(node, "ptCount") ?? Number.NaN);
2563
+ if (Number.isInteger(count) && count >= 0) cache.pointCount = count;
2564
+ const formatCode = cChild(node, "formatCode")?.textContent;
2565
+ if (formatCode) cache.formatCode = formatCode;
2566
+ return cache;
2567
+ }
2568
+ function parseDataSource(element) {
2569
+ if (!element) return void 0;
2570
+ const source = {};
2571
+ const ref = cChild(element, "numRef") ?? cChild(element, "strRef") ?? cChild(element, "multiLvlStrRef");
2572
+ if (ref) {
2573
+ source.kind = ref.localName;
2574
+ const formula = cChild(ref, "f")?.textContent;
2575
+ if (formula) source.formula = formula;
2576
+ const cache = cChild(ref, "numCache") ?? cChild(ref, "strCache");
2577
+ if (cache) source.cache = parseCache(cache);
2578
+ const levels = cChild(ref, "multiLvlStrCache");
2579
+ if (levels) {
2580
+ source.levels = children(levels, "lvl", NS.c).map(parseCache);
2581
+ const count = Number(cVal(levels, "ptCount") ?? Number.NaN);
2582
+ if (Number.isInteger(count) && count >= 0) source.levelPointCount = count;
2583
+ }
2584
+ return source;
2585
+ }
2586
+ const literal = cChild(element, "numLit") ?? cChild(element, "strLit");
2587
+ if (literal) {
2588
+ source.kind = literal.localName;
2589
+ source.cache = parseCache(literal);
2590
+ }
2591
+ return source;
2592
+ }
2593
+ function parseChartText(context, tx, allowValue) {
2594
+ if (!tx) return void 0;
2595
+ const text2 = {};
2596
+ const rich = chartTextBody(cChild(tx, "rich"));
2597
+ if (rich) text2.rich = rich;
2598
+ if (cChild(tx, "strRef")) {
2599
+ const reference2 = parseDataSource(tx);
2600
+ if (reference2) text2.reference = reference2;
2601
+ }
2602
+ const value = allowValue ? cChild(tx, "v")?.textContent : void 0;
2603
+ if (value !== void 0 && value !== null) text2.value = value;
2604
+ const cached = chartCacheValues(text2.reference?.cache)[0];
2605
+ const flat = text2.value ?? (rich ? rich.text : cached === void 0 ? void 0 : String(cached));
2606
+ if (flat !== void 0) text2.text = flat;
2607
+ reportUnmodelled(context, tx, new Set(allowValue ? ["strRef", "v"] : ["rich", "strRef"]));
2608
+ return text2;
2609
+ }
2610
+ var TITLE = /* @__PURE__ */ new Set(["tx", "layout", "overlay", "spPr", "txPr", "extLst"]);
2611
+ function parseTitle(context, element) {
2612
+ const tx = parseChartText(context, cChild(element, "tx"), false);
2613
+ reportUnmodelled(context, element, TITLE);
2614
+ return assignDefined(
2615
+ {},
2616
+ {
2617
+ tx,
2618
+ text: tx?.text,
2619
+ overlay: cBool(context, element, "overlay"),
2620
+ layout: manualLayout(element),
2621
+ spPr: shapeProperties(element),
2622
+ txPr: textProperties(element),
2623
+ extLst: extensionList(element)
2624
+ }
2625
+ );
2626
+ }
2627
+ var LABEL_OPTIONS = [
2628
+ "delete",
2629
+ "showLegendKey",
2630
+ "showVal",
2631
+ "showCatName",
2632
+ "showSerName",
2633
+ "showPercent",
2634
+ "showBubbleSize",
2635
+ "separator",
2636
+ "dLblPos",
2637
+ "numFmt",
2638
+ "spPr",
2639
+ "txPr",
2640
+ "extLst"
2641
+ ];
2642
+ function labelOptions(context, element) {
2643
+ const flag = (local) => cBool(context, element, local);
2644
+ return assignDefined(
2645
+ {},
2646
+ {
2647
+ deleted: flag("delete"),
2648
+ showLegendKey: flag("showLegendKey"),
2649
+ showValue: flag("showVal"),
2650
+ showCategoryName: flag("showCatName"),
2651
+ showSeriesName: flag("showSerName"),
2652
+ showPercent: flag("showPercent"),
2653
+ showBubbleSize: flag("showBubbleSize"),
2654
+ separator: cChild(element, "separator")?.textContent ?? void 0,
2655
+ position: cVal(element, "dLblPos"),
2656
+ numberFormat: numberFormat(element),
2657
+ spPr: shapeProperties(element),
2658
+ txPr: textProperties(element),
2659
+ extLst: extensionList(element)
2660
+ }
2661
+ );
2662
+ }
2663
+ var LABEL = /* @__PURE__ */ new Set([...LABEL_OPTIONS, "idx", "layout", "tx"]);
2664
+ var LABELS = /* @__PURE__ */ new Set([...LABEL_OPTIONS, "dLbl", "showLeaderLines", "leaderLines"]);
2665
+ function parseDataLabels(context, element) {
2666
+ if (!element) return void 0;
2667
+ const labels = children(element, "dLbl", NS.c).map((node) => {
2668
+ reportUnmodelled(context, node, LABEL);
2669
+ return assignDefined(labelOptions(context, node), {
2670
+ index: cNumber(context, node, "idx"),
2671
+ tx: parseChartText(context, cChild(node, "tx"), false),
2672
+ layout: manualLayout(node)
2673
+ });
2674
+ });
2675
+ reportUnmodelled(context, element, LABELS);
2676
+ return assignDefined(
2677
+ { ...labelOptions(context, element), labels },
2678
+ {
2679
+ showLeaderLines: cBool(context, element, "showLeaderLines"),
2680
+ leaderLines: chartLines(element, "leaderLines")
2681
+ }
2682
+ );
2683
+ }
2684
+
2685
+ // chart/parse-chrome.ts
2686
+ var SURFACE = /* @__PURE__ */ new Set(["thickness", "spPr", "pictureOptions", "extLst"]);
2687
+ function parseSurface(context, element) {
2688
+ if (!element) return void 0;
2689
+ reportUnmodelled(context, element, SURFACE);
2690
+ const pictureOptions = cChild(element, "pictureOptions");
2691
+ return assignDefined(
2692
+ {},
2693
+ {
2694
+ thickness: cNumber(context, element, "thickness"),
2695
+ spPr: shapeProperties(element),
2696
+ pictureOptionsXml: pictureOptions ? buildXml(pictureOptions) : void 0,
2697
+ extLst: extensionList(element)
2698
+ }
2699
+ );
2700
+ }
2701
+ var DATA_TABLE = /* @__PURE__ */ new Set([
2702
+ "showHorzBorder",
2703
+ "showVertBorder",
2704
+ "showOutline",
2705
+ "showKeys",
2706
+ "spPr",
2707
+ "txPr",
2708
+ "extLst"
2709
+ ]);
2710
+ function parseDataTable(context, element) {
2711
+ if (!element) return void 0;
2712
+ reportUnmodelled(context, element, DATA_TABLE);
2713
+ return assignDefined(
2714
+ {},
2715
+ {
2716
+ showHorizontalBorder: cBool(context, element, "showHorzBorder"),
2717
+ showVerticalBorder: cBool(context, element, "showVertBorder"),
2718
+ showOutline: cBool(context, element, "showOutline"),
2719
+ showKeys: cBool(context, element, "showKeys"),
2720
+ spPr: shapeProperties(element),
2721
+ txPr: textProperties(element),
2722
+ extLst: extensionList(element)
2723
+ }
2724
+ );
2725
+ }
2726
+ var DISPLAY_UNITS = /* @__PURE__ */ new Set(["custUnit", "builtInUnit", "dispUnitsLbl", "extLst"]);
2727
+ var DISPLAY_UNITS_LABEL = /* @__PURE__ */ new Set(["layout", "tx", "spPr", "txPr"]);
2728
+ function parseDisplayUnits(context, element) {
2729
+ if (!element) return void 0;
2730
+ reportUnmodelled(context, element, DISPLAY_UNITS);
2731
+ const labelElement = cChild(element, "dispUnitsLbl");
2732
+ let label;
2733
+ if (labelElement) {
2734
+ reportUnmodelled(context, labelElement, DISPLAY_UNITS_LABEL);
2735
+ label = assignDefined(
2736
+ {},
2737
+ {
2738
+ layout: manualLayout(labelElement),
2739
+ tx: parseChartText(context, cChild(labelElement, "tx"), false),
2740
+ spPr: shapeProperties(labelElement),
2741
+ txPr: textProperties(labelElement)
2742
+ }
2743
+ );
2744
+ }
2745
+ return assignDefined(
2746
+ {},
2747
+ {
2748
+ builtInUnit: cVal(element, "builtInUnit"),
2749
+ customUnit: cNumber(context, element, "custUnit"),
2750
+ label,
2751
+ extLst: extensionList(element)
2752
+ }
2753
+ );
2754
+ }
2755
+ var DATA_DISPLAY_OPTIONS_URI = "{56B9EC1D-385E-4148-901F-78D8002777C0}";
2756
+ var C16R3 = "http://schemas.microsoft.com/office/drawing/2017/03/chart";
2757
+ function readDisplayNaAsBlank(chartExtLst) {
2758
+ if (!chartExtLst?.includes(DATA_DISPLAY_OPTIONS_URI)) return void 0;
2759
+ let root;
2760
+ try {
2761
+ root = parseXml(chartExtLst, { label: "Chart extension list" }).documentElement;
2762
+ } catch {
2763
+ return void 0;
2764
+ }
2765
+ for (const ext of elements(root)) {
2766
+ if (ext.localName !== "ext" || attribute(ext, "uri") !== DATA_DISPLAY_OPTIONS_URI) continue;
2767
+ const flag = first(first(ext, "dataDisplayOptions16", C16R3), "dispNaAsBlank", C16R3);
2768
+ if (!flag) continue;
2769
+ const raw2 = attribute(flag, "val")?.trim().toLowerCase();
2770
+ return raw2 === void 0 || raw2 === "1" || raw2 === "true";
2771
+ }
2772
+ return void 0;
2773
+ }
2774
+
2775
+ // chart/parse-series.ts
2776
+ var MARKER = /* @__PURE__ */ new Set(["symbol", "size", "spPr", "extLst"]);
2777
+ function parseMarker(context, element) {
2778
+ if (!element) return void 0;
2779
+ reportUnmodelled(context, element, MARKER);
2780
+ return assignDefined(
2781
+ {},
2782
+ {
2783
+ symbol: cVal(element, "symbol"),
2784
+ size: cNumber(context, element, "size"),
2785
+ spPr: shapeProperties(element),
2786
+ extLst: extensionList(element)
2787
+ }
2788
+ );
2789
+ }
2790
+ var POINT = /* @__PURE__ */ new Set([
2791
+ "idx",
2792
+ "invertIfNegative",
2793
+ "marker",
2794
+ "bubble3D",
2795
+ "explosion",
2796
+ "spPr",
2797
+ "extLst"
2798
+ ]);
2799
+ function parseDataPoint(context, element) {
2800
+ reportUnmodelled(context, element, POINT);
2801
+ const index = cNumber(context, element, "idx");
2802
+ return assignDefined(
2803
+ {},
2804
+ {
2805
+ index: index !== void 0 && Number.isInteger(index) && index >= 0 ? index : void 0,
2806
+ invertIfNegative: cBool(context, element, "invertIfNegative"),
2807
+ bubble3D: cBool(context, element, "bubble3D"),
2808
+ explosion: cNumber(context, element, "explosion"),
2809
+ marker: parseMarker(context, cChild(element, "marker")),
2810
+ spPr: shapeProperties(element),
2811
+ extLst: extensionList(element)
2812
+ }
2813
+ );
2814
+ }
2815
+ var SERIES = /* @__PURE__ */ new Set([
2816
+ "idx",
2817
+ "order",
2818
+ "tx",
2819
+ "spPr",
2820
+ "invertIfNegative",
2821
+ "dPt",
2822
+ "dLbls",
2823
+ "cat",
2824
+ "val",
2825
+ "xVal",
2826
+ "yVal",
2827
+ "smooth",
2828
+ "marker",
2829
+ "explosion",
2830
+ "bubbleSize",
2831
+ "bubble3D",
2832
+ "shape",
2833
+ "extLst"
2834
+ ]);
2835
+ function parseSeries(context, element) {
2836
+ reportUnmodelled(context, element, SERIES);
2837
+ return assignDefined(
2838
+ { dataPoints: children(element, "dPt", NS.c).map((point) => parseDataPoint(context, point)) },
2839
+ {
2840
+ index: cNumber(context, element, "idx"),
2841
+ order: cNumber(context, element, "order"),
2842
+ tx: parseChartText(context, cChild(element, "tx"), true),
2843
+ spPr: shapeProperties(element),
2844
+ marker: parseMarker(context, cChild(element, "marker")),
2845
+ dataLabels: parseDataLabels(context, cChild(element, "dLbls")),
2846
+ categories: parseDataSource(cChild(element, "cat")),
2847
+ values: parseDataSource(cChild(element, "val")),
2848
+ xValues: parseDataSource(cChild(element, "xVal")),
2849
+ yValues: parseDataSource(cChild(element, "yVal")),
2850
+ bubbleSizes: parseDataSource(cChild(element, "bubbleSize")),
2851
+ smooth: cBool(context, element, "smooth"),
2852
+ invertIfNegative: cBool(context, element, "invertIfNegative"),
2853
+ explosion: cNumber(context, element, "explosion"),
2854
+ bubble3D: cBool(context, element, "bubble3D"),
2855
+ shape: cVal(element, "shape"),
2856
+ extLst: extensionList(element)
2857
+ }
2858
+ );
2859
+ }
2860
+
2861
+ // chart/parse-plot.ts
2862
+ var CHART_GROUP_ELEMENTS = {
2863
+ barChart: { kind: "bar", is3D: false },
2864
+ bar3DChart: { kind: "bar", is3D: true },
2865
+ lineChart: { kind: "line", is3D: false },
2866
+ line3DChart: { kind: "line", is3D: true },
2867
+ areaChart: { kind: "area", is3D: false },
2868
+ area3DChart: { kind: "area", is3D: true },
2869
+ pieChart: { kind: "pie", is3D: false },
2870
+ pie3DChart: { kind: "pie", is3D: true },
2871
+ ofPieChart: { kind: "ofPie", is3D: false },
2872
+ doughnutChart: { kind: "doughnut", is3D: false },
2873
+ scatterChart: { kind: "scatter", is3D: false },
2874
+ radarChart: { kind: "radar", is3D: false },
2875
+ bubbleChart: { kind: "bubble", is3D: false },
2876
+ stockChart: { kind: "stock", is3D: false },
2877
+ surfaceChart: { kind: "surface", is3D: false },
2878
+ surface3DChart: { kind: "surface", is3D: true }
2879
+ };
2880
+ var AXIS_ELEMENTS = {
2881
+ catAx: "cat",
2882
+ valAx: "val",
2883
+ dateAx: "date",
2884
+ serAx: "ser"
2885
+ };
2886
+ var GROUP = /* @__PURE__ */ new Set([
2887
+ "ser",
2888
+ "axId",
2889
+ "varyColors",
2890
+ "dLbls",
2891
+ "barDir",
2892
+ "grouping",
2893
+ "gapWidth",
2894
+ "overlap",
2895
+ "gapDepth",
2896
+ "shape",
2897
+ "marker",
2898
+ "smooth",
2899
+ "dropLines",
2900
+ "hiLowLines",
2901
+ "upDownBars",
2902
+ "serLines",
2903
+ "firstSliceAng",
2904
+ "holeSize",
2905
+ "ofPieType",
2906
+ "scatterStyle",
2907
+ "radarStyle",
2908
+ "bubble3D",
2909
+ "bubbleScale",
2910
+ "showNegBubbles",
2911
+ "sizeRepresents",
2912
+ "wireframe",
2913
+ "extLst"
2914
+ ]);
2915
+ function parseGroup(context, element) {
2916
+ const { kind, is3D } = CHART_GROUP_ELEMENTS[element.localName] ?? { kind: "bar", is3D: false };
2917
+ reportUnmodelled(context, element, GROUP);
2918
+ const number = (local) => cNumber(context, element, local);
2919
+ const flag = (local) => cBool(context, element, local);
2920
+ const barDir = cVal(element, "barDir");
2921
+ const present = (local) => cChild(element, local) ? true : void 0;
2922
+ const linesShape = (local) => chartLines(element, local)?.spPr;
2923
+ const bars2 = cChild(element, "upDownBars");
2924
+ return assignDefined(
2925
+ {
2926
+ kind,
2927
+ element: element.localName,
2928
+ is3D,
2929
+ series: children(element, "ser", NS.c).map((ser) => parseSeries(context, ser)),
2930
+ axisIds: children(element, "axId", NS.c).flatMap((axis) => {
2931
+ const raw2 = attribute(axis, "val")?.trim();
2932
+ const id = raw2 ? Number(raw2) : Number.NaN;
2933
+ return Number.isFinite(id) ? [id] : [];
2934
+ })
2935
+ },
2936
+ {
2937
+ varyColors: flag("varyColors"),
2938
+ dataLabels: parseDataLabels(context, cChild(element, "dLbls")),
2939
+ barDirection: barDir === "bar" || barDir === "col" ? barDir : void 0,
2940
+ grouping: cVal(element, "grouping"),
2941
+ gapWidth: number("gapWidth"),
2942
+ overlap: number("overlap"),
2943
+ gapDepth: number("gapDepth"),
2944
+ shape: cVal(element, "shape"),
2945
+ marker: flag("marker"),
2946
+ smooth: flag("smooth"),
2947
+ dropLines: present("dropLines"),
2948
+ hiLowLines: present("hiLowLines"),
2949
+ upDownBars: present("upDownBars"),
2950
+ seriesLines: present("serLines"),
2951
+ dropLinesSpPr: linesShape("dropLines"),
2952
+ hiLowLinesSpPr: linesShape("hiLowLines"),
2953
+ seriesLinesSpPr: linesShape("serLines"),
2954
+ upDownBarsGapWidth: cNumber(context, bars2, "gapWidth"),
2955
+ upBars: chartLines(bars2, "upBars"),
2956
+ downBars: chartLines(bars2, "downBars"),
2957
+ firstSliceAngle: number("firstSliceAng"),
2958
+ holeSize: number("holeSize"),
2959
+ ofPieType: cVal(element, "ofPieType"),
2960
+ scatterStyle: cVal(element, "scatterStyle"),
2961
+ radarStyle: cVal(element, "radarStyle"),
2962
+ bubble3D: flag("bubble3D"),
2963
+ bubbleScale: number("bubbleScale"),
2964
+ showNegativeBubbles: flag("showNegBubbles"),
2965
+ sizeRepresents: cVal(element, "sizeRepresents"),
2966
+ wireframe: flag("wireframe"),
2967
+ extLst: extensionList(element)
2968
+ }
2969
+ );
2970
+ }
2971
+ var SCALING = /* @__PURE__ */ new Set(["orientation", "logBase", "min", "max", "extLst"]);
2972
+ var AXIS = /* @__PURE__ */ new Set([
2973
+ "axId",
2974
+ "scaling",
2975
+ "delete",
2976
+ "axPos",
2977
+ "majorGridlines",
2978
+ "minorGridlines",
2979
+ "title",
2980
+ "numFmt",
2981
+ "majorTickMark",
2982
+ "minorTickMark",
2983
+ "tickLblPos",
2984
+ "spPr",
2985
+ "txPr",
2986
+ "crossAx",
2987
+ "crosses",
2988
+ "crossesAt",
2989
+ "crossBetween",
2990
+ "majorUnit",
2991
+ "minorUnit",
2992
+ "auto",
2993
+ "lblAlgn",
2994
+ "lblOffset",
2995
+ "tickLblSkip",
2996
+ "tickMarkSkip",
2997
+ "noMultiLvlLbl",
2998
+ "baseTimeUnit",
2999
+ "dispUnits",
3000
+ "extLst"
3001
+ ]);
3002
+ function parseAxis(context, element, kind) {
3003
+ reportUnmodelled(context, element, AXIS);
3004
+ const number = (local) => cNumber(context, element, local);
3005
+ const scalingElement = cChild(element, "scaling");
3006
+ if (scalingElement) reportUnmodelled(context, scalingElement, SCALING);
3007
+ const scaling = assignDefined(
3008
+ {},
3009
+ {
3010
+ orientation: cVal(scalingElement, "orientation"),
3011
+ min: cNumber(context, scalingElement, "min"),
3012
+ max: cNumber(context, scalingElement, "max"),
3013
+ logBase: cNumber(context, scalingElement, "logBase")
3014
+ }
3015
+ );
3016
+ const title = cChild(element, "title");
3017
+ return assignDefined(
3018
+ {
3019
+ kind,
3020
+ scaling,
3021
+ majorGridlines: cChild(element, "majorGridlines") !== void 0,
3022
+ minorGridlines: cChild(element, "minorGridlines") !== void 0
3023
+ },
3024
+ {
3025
+ majorGridlinesSpPr: chartLines(element, "majorGridlines")?.spPr,
3026
+ minorGridlinesSpPr: chartLines(element, "minorGridlines")?.spPr,
3027
+ id: number("axId"),
3028
+ crossAxisId: number("crossAx"),
3029
+ position: cVal(element, "axPos"),
3030
+ deleted: cBool(context, element, "delete"),
3031
+ title: title ? parseTitle(context, title) : void 0,
3032
+ numberFormat: numberFormat(element),
3033
+ majorTickMark: cVal(element, "majorTickMark"),
3034
+ minorTickMark: cVal(element, "minorTickMark"),
3035
+ tickLabelPosition: cVal(element, "tickLblPos"),
3036
+ crosses: cVal(element, "crosses"),
3037
+ crossesAt: number("crossesAt"),
3038
+ crossBetween: cVal(element, "crossBetween"),
3039
+ majorUnit: number("majorUnit"),
3040
+ minorUnit: number("minorUnit"),
3041
+ auto: cBool(context, element, "auto"),
3042
+ labelAlign: cVal(element, "lblAlgn"),
3043
+ labelOffset: number("lblOffset"),
3044
+ tickLabelSkip: number("tickLblSkip"),
3045
+ tickMarkSkip: number("tickMarkSkip"),
3046
+ noMultiLevelLabels: cBool(context, element, "noMultiLvlLbl"),
3047
+ baseTimeUnit: cVal(element, "baseTimeUnit"),
3048
+ displayUnits: parseDisplayUnits(context, cChild(element, "dispUnits")),
3049
+ spPr: shapeProperties(element),
3050
+ txPr: textProperties(element),
3051
+ extLst: extensionList(element)
3052
+ }
3053
+ );
3054
+ }
3055
+ var PLOT_AREA = /* @__PURE__ */ new Set(["layout", "dTable", "spPr", "extLst"]);
3056
+ function parsePlotArea(context, element) {
3057
+ const plotArea = { groups: [], axes: [] };
3058
+ if (!element) {
3059
+ context.issues.push({
3060
+ code: "CHART_PLOT_AREA_MISSING",
3061
+ message: "The chart has no c:plotArea."
3062
+ });
3063
+ return plotArea;
3064
+ }
3065
+ const handled = new Set(PLOT_AREA);
3066
+ for (const child2 of elements(element)) {
3067
+ if (CHART_GROUP_ELEMENTS[child2.localName]) {
3068
+ plotArea.groups.push(parseGroup(context, child2));
3069
+ handled.add(child2.localName);
3070
+ }
3071
+ const axis = AXIS_ELEMENTS[child2.localName];
3072
+ if (axis) {
3073
+ plotArea.axes.push(parseAxis(context, child2, axis));
3074
+ handled.add(child2.localName);
3075
+ }
3076
+ }
3077
+ reportUnmodelled(context, element, handled);
3078
+ return assignDefined(plotArea, {
3079
+ layout: manualLayout(element),
3080
+ dataTable: parseDataTable(context, cChild(element, "dTable")),
3081
+ spPr: shapeProperties(element),
3082
+ extLst: extensionList(element)
3083
+ });
3084
+ }
3085
+
3086
+ // chart/parse-space.ts
3087
+ var LEGEND = /* @__PURE__ */ new Set(["legendPos", "legendEntry", "layout", "overlay", "spPr", "txPr", "extLst"]);
3088
+ function parseLegend(context, element) {
3089
+ reportUnmodelled(context, element, LEGEND);
3090
+ const entries = children(element, "legendEntry", NS.c).map(
3091
+ (entry3) => assignDefined(
3092
+ {},
3093
+ {
3094
+ index: cNumber(context, entry3, "idx"),
3095
+ deleted: cBool(context, entry3, "delete"),
3096
+ txPr: textProperties(entry3)
3097
+ }
3098
+ )
3099
+ );
3100
+ return assignDefined(
3101
+ { entries },
3102
+ {
3103
+ position: cVal(element, "legendPos"),
3104
+ overlay: cBool(context, element, "overlay"),
3105
+ layout: manualLayout(element),
3106
+ spPr: shapeProperties(element),
3107
+ txPr: textProperties(element),
3108
+ extLst: extensionList(element)
3109
+ }
3110
+ );
3111
+ }
3112
+ var VIEW_3D = /* @__PURE__ */ new Set(["rotX", "rotY", "depthPercent", "hPercent", "rAngAx", "perspective"]);
3113
+ function parseView3D(context, element) {
3114
+ reportUnmodelled(context, element, VIEW_3D);
3115
+ return assignDefined(
3116
+ {},
3117
+ {
3118
+ rotX: cNumber(context, element, "rotX"),
3119
+ rotY: cNumber(context, element, "rotY"),
3120
+ depthPercent: cNumber(context, element, "depthPercent"),
3121
+ heightPercent: cNumber(context, element, "hPercent"),
3122
+ rightAngleAxes: cBool(context, element, "rAngAx"),
3123
+ perspective: cNumber(context, element, "perspective")
3124
+ }
3125
+ );
3126
+ }
3127
+ function chartStyle(context, space) {
3128
+ const direct = cNumber(context, space, "style");
3129
+ if (direct !== void 0) return direct;
3130
+ for (const alternate of children(space, "AlternateContent", NS.mc)) {
3131
+ const style = cNumber(context, first(alternate, "Fallback", NS.mc), "style");
3132
+ if (style !== void 0) return style;
3133
+ }
3134
+ return void 0;
3135
+ }
3136
+ function c14Style(space) {
3137
+ for (const alternate of children(space, "AlternateContent", NS.mc)) {
3138
+ const raw2 = attribute(first(first(alternate, "Choice", NS.mc), "style", NS.c14, false), "val");
3139
+ const value = raw2?.trim() ? Number(raw2) : Number.NaN;
3140
+ if (Number.isFinite(value)) return value;
3141
+ }
3142
+ return void 0;
3143
+ }
3144
+ function namespaceDeclarations(root) {
3145
+ const out = [];
3146
+ for (const item of Array.from(root.attributes)) {
3147
+ if (item.prefix !== "xmlns" || CHART_ROOT_BINDINGS.get(item.localName) === item.value) continue;
3148
+ out.push({ prefix: item.localName, uri: item.value });
3149
+ }
3150
+ return out.length ? out : void 0;
3151
+ }
3152
+ var CHART = /* @__PURE__ */ new Set([
3153
+ "title",
3154
+ "autoTitleDeleted",
3155
+ "view3D",
3156
+ "floor",
3157
+ "sideWall",
3158
+ "backWall",
3159
+ "plotArea",
3160
+ "legend",
3161
+ "plotVisOnly",
3162
+ "dispBlanksAs",
3163
+ "showDLblsOverMax",
3164
+ "extLst"
3165
+ ]);
3166
+ var SPACE = /* @__PURE__ */ new Set([
3167
+ "date1904",
3168
+ "lang",
3169
+ "roundedCorners",
3170
+ "AlternateContent",
3171
+ "style",
3172
+ "chart",
3173
+ "spPr",
3174
+ "txPr",
3175
+ "externalData",
3176
+ "printSettings",
3177
+ "userShapes",
3178
+ "extLst"
3179
+ ]);
3180
+ function parseChartSpace(source) {
3181
+ const context = { issues: [] };
3182
+ const root = typeof source === "string" ? parseXml(source, { label: "Chart part" }).documentElement : source;
3183
+ if (root.localName !== "chartSpace" || root.namespaceURI && root.namespaceURI !== NS.c) {
3184
+ context.issues.push({
3185
+ code: "CHART_ROOT_UNEXPECTED",
3186
+ message: `The part root is {${root.namespaceURI ?? ""}}${root.localName}, not c:chartSpace (chartex parts are not modelled).`
3187
+ });
3188
+ return { chartSpace: { plotArea: { groups: [], axes: [] } }, issues: context.issues };
3189
+ }
3190
+ reportUnmodelled(context, root, SPACE);
3191
+ const chart = cChild(root, "chart");
3192
+ if (!chart)
3193
+ context.issues.push({ code: "CHART_CHART_MISSING", message: "The part has no c:chart." });
3194
+ else reportUnmodelled(context, chart, CHART);
3195
+ const title = cChild(chart, "title");
3196
+ const legend = cChild(chart, "legend");
3197
+ const view3D = cChild(chart, "view3D");
3198
+ const printSettings = cChild(root, "printSettings");
3199
+ const chartSpace = assignDefined(
3200
+ { plotArea: parsePlotArea(context, cChild(chart, "plotArea")) },
3201
+ {
3202
+ date1904: cBool(context, root, "date1904"),
3203
+ language: cVal(root, "lang"),
3204
+ roundedCorners: cBool(context, root, "roundedCorners"),
3205
+ style: chartStyle(context, root),
3206
+ c14Style: c14Style(root),
3207
+ title: title ? parseTitle(context, title) : void 0,
3208
+ autoTitleDeleted: cBool(context, chart, "autoTitleDeleted"),
3209
+ view3D: view3D ? parseView3D(context, view3D) : void 0,
3210
+ floor: parseSurface(context, cChild(chart, "floor")),
3211
+ sideWall: parseSurface(context, cChild(chart, "sideWall")),
3212
+ backWall: parseSurface(context, cChild(chart, "backWall")),
3213
+ legend: legend ? parseLegend(context, legend) : void 0,
3214
+ plotVisibleOnly: cBool(context, chart, "plotVisOnly"),
3215
+ displayBlanksAs: cVal(chart, "dispBlanksAs"),
3216
+ showDataLabelsOverMax: cBool(context, chart, "showDLblsOverMax"),
3217
+ spPr: shapeProperties(root),
3218
+ txPr: textProperties(root),
3219
+ externalDataRelId: relAttr(cChild(root, "externalData"), "id") || void 0,
3220
+ externalDataAutoUpdate: cBool(context, cChild(root, "externalData"), "autoUpdate"),
3221
+ printSettings: printSettings ? buildXml(printSettings) : void 0,
3222
+ userShapesRelId: relAttr(cChild(root, "userShapes"), "id") || void 0,
3223
+ chartExtLst: extensionList(chart),
3224
+ extLst: extensionList(root),
3225
+ namespaceDeclarations: namespaceDeclarations(root)
3226
+ }
3227
+ );
3228
+ return { chartSpace, issues: context.issues };
3229
+ }
3230
+
3231
+ // drawingml/write-line.ts
3232
+ var FILLS = /* @__PURE__ */ new Set(["noFill", "solidFill", "gradFill", "pattFill"]);
3233
+ function dropDrawingDeclarations(element) {
3234
+ if (element.getAttribute("xmlns:a") === NS.a) element.removeAttribute("xmlns:a");
3235
+ for (const child2 of elements(element)) dropDrawingDeclarations(child2);
3236
+ }
3237
+ function patchDrawingLine(ln, line2) {
3238
+ if (line2.widthEmu === void 0) ln.removeAttribute("w");
3239
+ else ln.setAttribute("w", String(Math.round(line2.widthEmu)));
3240
+ if (line2.cap === void 0) ln.removeAttribute("cap");
3241
+ else ln.setAttribute("cap", line2.cap);
3242
+ const fill = line2.fill && drawingFillXml(line2.fill);
3243
+ if (fill || !line2.fill) {
3244
+ for (const node of elements(ln))
3245
+ if (node.namespaceURI === NS.a && FILLS.has(node.localName)) ln.removeChild(node);
3246
+ }
3247
+ if (fill) {
3248
+ const parsed = parseXml(`<w xmlns:a="${NS.a}">${fill}</w>`).documentElement;
3249
+ for (const node of elements(parsed).reverse()) {
3250
+ const imported = ln.ownerDocument.importNode(node, true);
3251
+ dropDrawingDeclarations(imported);
3252
+ ln.insertBefore(imported, ln.firstChild);
3253
+ }
3254
+ }
3255
+ const dashes = elements(ln).filter(
3256
+ (node) => node.namespaceURI === NS.a && (node.localName === "prstDash" || node.localName === "custDash")
3257
+ );
3258
+ if (line2.dash === void 0) {
3259
+ for (const node of dashes) if (node.localName === "prstDash") ln.removeChild(node);
3260
+ return;
3261
+ }
3262
+ const dash = ln.ownerDocument.createElementNS(NS.a, "a:prstDash");
3263
+ dash.setAttribute("val", line2.dash);
3264
+ for (const node of dashes) ln.removeChild(node);
3265
+ const afterFill = elements(ln).find(
3266
+ (node) => node.namespaceURI !== NS.a || !FILLS.has(node.localName)
3267
+ );
3268
+ ln.insertBefore(dash, afterFill ?? null);
3269
+ }
3270
+ function drawingLineXml(line2) {
3271
+ const doc = parseXml(`<a:ln xmlns:a="${NS.a}"/>`);
3272
+ patchDrawingLine(doc.documentElement, line2);
3273
+ return buildXml(doc);
3274
+ }
3275
+
3276
+ // chart/write-util.ts
3277
+ var INVALID_XML = /[\u0000-\u0008\u000B\u000C\u000E-\u001F\uFFFE\uFFFF]/g;
3278
+ var escapeText = (value) => value.replace(INVALID_XML, "").replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
3279
+ var escapeAttribute = (value) => escapeText(value).replace(/"/g, "&quot;").replace(/\r/g, "&#13;").replace(/\n/g, "&#10;").replace(/\t/g, "&#9;");
3280
+ function chartNumber(value) {
3281
+ if (!Number.isFinite(value)) throw new Error(`Chart number ${value} is not finite`);
3282
+ const text2 = String(value);
3283
+ const match = /^(-?)(\d+)(?:\.(\d+))?e([+-]\d+)$/i.exec(text2);
3284
+ if (!match) return text2;
3285
+ const [, sign = "", whole = "", fraction = "", exponent = "0"] = match;
3286
+ const digits = whole + fraction;
3287
+ const point = whole.length + Number(exponent);
3288
+ const body = point <= 0 ? `0.${"0".repeat(-point)}${digits}` : point >= digits.length ? digits + "0".repeat(point - digits.length) : `${digits.slice(0, point)}.${digits.slice(point)}`;
3289
+ return sign + body.replace(/^0+(?=\d)/, "");
3290
+ }
3291
+ function valXml(local, value) {
3292
+ if (value === void 0) return "";
3293
+ const text2 = typeof value === "boolean" ? value ? "1" : "0" : typeof value === "number" ? chartNumber(value) : escapeAttribute(value);
3294
+ return `<c:${local} val="${text2}"/>`;
3295
+ }
3296
+ var elementXml = (local, content, attributes = "") => content ? `<c:${local}${attributes}>${content}</c:${local}>` : `<c:${local}${attributes}/>`;
3297
+ var raw = (context, xml) => xml ? stripDeclarations(xml, context.bindings) : "";
3298
+ function sameValue(left, right) {
3299
+ if (left === right) return true;
3300
+ if (typeof left !== "object" || typeof right !== "object" || !left || !right) return false;
3301
+ if (Array.isArray(left) !== Array.isArray(right)) return false;
3302
+ const entries = (value) => Object.entries(value).filter(([, item]) => item !== void 0);
3303
+ const a2 = entries(left);
3304
+ const b = new Map(entries(right));
3305
+ return a2.length === b.size && a2.every(([key, item]) => b.has(key) && sameValue(item, b.get(key)));
3306
+ }
3307
+
3308
+ // chart/write-text-body.ts
3309
+ function runProperties(local, properties2) {
3310
+ const p = properties2 ?? {};
3311
+ const attributes = [
3312
+ p.sizePt === void 0 ? "" : ` sz="${Math.round(p.sizePt * 100)}"`,
3313
+ p.bold === void 0 ? "" : ` b="${p.bold ? 1 : 0}"`,
3314
+ p.italic === void 0 ? "" : ` i="${p.italic ? 1 : 0}"`,
3315
+ p.underline === void 0 ? "" : ` u="${p.underline ? "sng" : "none"}"`
3316
+ ].join("");
3317
+ const children2 = (p.color ? `<a:solidFill>${drawingColorXml(p.color)}</a:solidFill>` : "") + (p.typeface ? `<a:latin typeface="${escapeAttribute(p.typeface)}"/>` : "");
3318
+ return children2 ? `<a:${local}${attributes}>${children2}</a:${local}>` : `<a:${local}${attributes}/>`;
3319
+ }
3320
+ function spacing(local, value) {
3321
+ if (!value) return "";
3322
+ const inner = value.unit === "points" ? `<a:spcPts val="${Math.round(value.value * 100)}"/>` : `<a:spcPct val="${Math.round(value.value * 1e5)}"/>`;
3323
+ return `<a:${local}>${inner}</a:${local}>`;
3324
+ }
3325
+ function run(value) {
3326
+ const { text: text2, ...properties2 } = value;
3327
+ const hasProperties = Object.keys(properties2).length > 0;
3328
+ if (text2 === "\n")
3329
+ return hasProperties ? `<a:br>${runProperties("rPr", properties2)}</a:br>` : "<a:br/>";
3330
+ return `<a:r>${hasProperties ? runProperties("rPr", properties2) : ""}<a:t>${escapeText(text2)}</a:t></a:r>`;
3331
+ }
3332
+ function paragraph(value) {
3333
+ const align = value.align ? ` algn="${escapeAttribute(value.align)}"` : "";
3334
+ const properties2 = spacing("lnSpc", value.lineSpacing) + spacing("spcBef", value.spaceBefore) + spacing("spcAft", value.spaceAfter) + runProperties("defRPr", value.defaultProperties);
3335
+ return `<a:p><a:pPr${align}>${properties2}</a:pPr>${value.runs.map(run).join("")}</a:p>`;
3336
+ }
3337
+ function writeTextBody(body) {
3338
+ const insets = body.insetsEmu ?? {};
3339
+ const attributes = [
3340
+ ["lIns", insets.left],
3341
+ ["tIns", insets.top],
3342
+ ["rIns", insets.right],
3343
+ ["bIns", insets.bottom]
3344
+ ].map(([name, value]) => value === void 0 ? "" : ` ${name}="${Math.round(Number(value))}"`).join("");
3345
+ const anchor = body.anchor ? ` anchor="${escapeAttribute(body.anchor)}"` : "";
3346
+ const paragraphs = body.paragraphs.length ? body.paragraphs.map(paragraph).join("") : paragraph({ runs: [] });
3347
+ return `<a:bodyPr${attributes}${anchor}/><a:lstStyle/>${paragraphs}`;
3348
+ }
3349
+
3350
+ // chart/write-shape.ts
3351
+ var ROOT_DECLARATIONS = [...CHART_ROOT_BINDINGS].map(([prefix, uri]) => ` xmlns:${prefix}="${uri}"`).join("");
3352
+ var wrap = (local, xml) => parseXml(`<c:${local}${ROOT_DECLARATIONS}>${xml}</c:${local}>`, { label: "Chart" }).documentElement;
3353
+ function chartFillXml(fill) {
3354
+ if (fill.kind !== "pattern") return drawingFillXml(fill);
3355
+ const color = (local, value) => {
3356
+ const choice = local === "fgClr" ? value.foreground : value.background;
3357
+ return choice ? `<a:${local}>${drawingColorXml(choice)}</a:${local}>` : "";
3358
+ };
3359
+ return `<a:pattFill prst="${escapeAttribute(fill.preset)}">${color("fgClr", fill)}${color("bgClr", fill)}</a:pattFill>`;
3360
+ }
3361
+ var AFTER_LINE = ["effectLst", "effectDag", "scene3d", "sp3d", "extLst"];
3362
+ var AFTER_EFFECTS = ["effectDag", "scene3d", "sp3d", "extLst"];
3363
+ var firstOf = (parent, names) => elements(parent).find((node) => node.namespaceURI === NS.a && names.includes(node.localName)) ?? null;
3364
+ function patchShape(root, shape, read) {
3365
+ const doc = root.ownerDocument;
3366
+ if (!sameValue(read.fill, shape.fill)) {
3367
+ const xml = shape.fill && chartFillXml(shape.fill);
3368
+ if (xml) setDrawingFillXml(root, xml);
3369
+ else if (!shape.fill)
3370
+ for (let fill = fillElementOf(root); fill; fill = fillElementOf(root)) root.removeChild(fill);
3371
+ }
3372
+ if (!sameValue(read.line, shape.line)) {
3373
+ let ln = first(root, "ln", NS.a);
3374
+ if (!shape.line) {
3375
+ if (ln) root.removeChild(ln);
3376
+ } else {
3377
+ if (!ln) {
3378
+ ln = doc.createElementNS(NS.a, "a:ln");
3379
+ root.insertBefore(ln, firstOf(root, AFTER_LINE));
3380
+ }
3381
+ patchDrawingLine(ln, shape.line);
3382
+ }
3383
+ }
3384
+ if (read.effectsXml !== shape.effectsXml) {
3385
+ const old = first(root, "effectLst", NS.a);
3386
+ if (old) root.removeChild(old);
3387
+ if (shape.effectsXml) {
3388
+ const effects = elements(wrap("w", shape.effectsXml))[0];
3389
+ if (effects?.namespaceURI !== NS.a || effects.localName !== "effectLst")
3390
+ throw new Error("Invalid chart effects XML");
3391
+ root.insertBefore(doc.importNode(effects, true), firstOf(root, AFTER_EFFECTS));
3392
+ }
3393
+ }
3394
+ }
3395
+ function shapePropertiesXml(context, shape) {
3396
+ if (!shape) return "";
3397
+ const { sourceXml, ...fields } = shape;
3398
+ let inner;
3399
+ if (sourceXml !== void 0) {
3400
+ const root = wrap("spPr", sourceXml);
3401
+ const read = readShapeFields(root);
3402
+ if (sameValue(read, fields)) inner = sourceXml;
3403
+ else {
3404
+ patchShape(root, fields, read);
3405
+ inner = innerXml(root);
3406
+ }
3407
+ } else {
3408
+ const fill = fields.fill && chartFillXml(fields.fill);
3409
+ inner = (fill ?? "") + (fields.line ? drawingLineXml(fields.line) : "") + (fields.effectsXml ?? "");
3410
+ }
3411
+ return elementXml("spPr", raw(context, inner));
3412
+ }
3413
+ function textBodyInnerXml(context, body) {
3414
+ const { sourceXml, ...fields } = body;
3415
+ if (sourceXml !== void 0) {
3416
+ const read = parseDrawingTextBody(wrap("txPr", sourceXml));
3417
+ if (sameValue(read, fields)) return raw(context, sourceXml);
3418
+ }
3419
+ return raw(context, writeTextBody(fields));
3420
+ }
3421
+ var textBodyXml = (context, body, local = "txPr") => body ? elementXml(local, textBodyInnerXml(context, body)) : "";
3422
+ var LAYOUT_FIELDS = [
3423
+ ["layoutTarget", "layoutTarget"],
3424
+ ["xMode", "xMode"],
3425
+ ["yMode", "yMode"],
3426
+ ["wMode", "widthMode"],
3427
+ ["hMode", "heightMode"],
3428
+ ["x", "x"],
3429
+ ["y", "y"],
3430
+ ["w", "width"],
3431
+ ["h", "height"]
3432
+ ];
3433
+ function layoutXml(context, value) {
3434
+ if (!value) return "";
3435
+ const { sourceXml, ...layout } = value;
3436
+ if (sourceXml !== void 0 && sameValue(readLayoutFields(wrap("layout", sourceXml)), layout))
3437
+ return elementXml("layout", raw(context, sourceXml));
3438
+ const manual = LAYOUT_FIELDS.map(([local, key]) => {
3439
+ const value2 = layout[key];
3440
+ if (value2 === void 0) return "";
3441
+ const text2 = typeof value2 === "number" ? chartNumber(value2) : value2;
3442
+ return `<c:${local} val="${text2}"/>`;
3443
+ }).join("");
3444
+ return elementXml("layout", manual ? `<c:manualLayout>${manual}</c:manualLayout>` : "");
3445
+ }
3446
+ function numberFormatXml(format) {
3447
+ if (!format) return "";
3448
+ const linked = format.sourceLinked === void 0 ? "" : ` sourceLinked="${format.sourceLinked ? 1 : 0}"`;
3449
+ return `<c:numFmt formatCode="${escapeAttribute(format.formatCode)}"${linked}/>`;
3450
+ }
3451
+
3452
+ // chart/write-text.ts
3453
+ var textElement = (local, value) => `<c:${local}>${escapeText(value)}</c:${local}>`;
3454
+ function cachePoints(cache) {
3455
+ return cache.points.map((point, position) => {
3456
+ const format = point.formatCode === void 0 ? "" : ` formatCode="${escapeAttribute(point.formatCode)}"`;
3457
+ return `<c:pt idx="${point.index ?? position}"${format}>${textElement("v", point.value)}</c:pt>`;
3458
+ }).join("");
3459
+ }
3460
+ function cacheXml(local, cache, withFormat) {
3461
+ if (!cache) return "";
3462
+ const format = withFormat && cache.formatCode !== void 0 ? textElement("formatCode", cache.formatCode) : "";
3463
+ return elementXml(local, format + valXml("ptCount", cache.pointCount) + cachePoints(cache));
3464
+ }
3465
+ function dataSourceInner(source) {
3466
+ const formula = textElement("f", source.formula ?? "");
3467
+ switch (source.kind) {
3468
+ case "numRef":
3469
+ return `<c:numRef>${formula}${cacheXml("numCache", source.cache, true)}</c:numRef>`;
3470
+ case "strRef":
3471
+ return `<c:strRef>${formula}${cacheXml("strCache", source.cache, false)}</c:strRef>`;
3472
+ case "multiLvlStrRef": {
3473
+ const levels = source.levels ? elementXml(
3474
+ "multiLvlStrCache",
3475
+ valXml("ptCount", source.levelPointCount) + source.levels.map((level) => elementXml("lvl", cachePoints(level))).join("")
3476
+ ) : "";
3477
+ return `<c:multiLvlStrRef>${formula}${levels}</c:multiLvlStrRef>`;
3478
+ }
3479
+ case "numLit":
3480
+ return cacheXml("numLit", source.cache ?? { points: [] }, true);
3481
+ case "strLit":
3482
+ return cacheXml("strLit", source.cache ?? { points: [] }, false);
3483
+ default:
3484
+ return "";
3485
+ }
3486
+ }
3487
+ var dataSourceXml = (local, source) => source ? elementXml(local, dataSourceInner(source)) : "";
3488
+ function chartTextXml(context, text2, seriesName2) {
3489
+ if (!text2) return "";
3490
+ if (text2.reference) return elementXml("tx", dataSourceInner(text2.reference));
3491
+ if (seriesName2) {
3492
+ const value = text2.value ?? text2.text;
3493
+ return elementXml("tx", value === void 0 ? "" : textElement("v", value));
3494
+ }
3495
+ if (text2.rich) return elementXml("tx", textBodyXml(context, text2.rich, "rich"));
3496
+ if (text2.text === void 0) return "<c:tx/>";
3497
+ const paragraphs = text2.text.split("\n").map((line2) => ({ runs: [{ text: line2 }] }));
3498
+ return `<c:tx><c:rich>${writeTextBody({ paragraphs })}</c:rich></c:tx>`;
3499
+ }
3500
+ function titleXml(context, title) {
3501
+ if (!title) return "";
3502
+ const tx = title.tx ?? (title.text === void 0 ? void 0 : { text: title.text });
3503
+ return elementXml(
3504
+ "title",
3505
+ chartTextXml(context, tx, false) + layoutXml(context, title.layout) + valXml("overlay", title.overlay) + shapePropertiesXml(context, title.spPr) + textBodyXml(context, title.txPr) + raw(context, title.extLst)
3506
+ );
3507
+ }
3508
+ function labelOptionsXml(context, options) {
3509
+ return numberFormatXml(options.numberFormat) + shapePropertiesXml(context, options.spPr) + textBodyXml(context, options.txPr) + valXml("dLblPos", options.position) + valXml("showLegendKey", options.showLegendKey) + valXml("showVal", options.showValue) + valXml("showCatName", options.showCategoryName) + valXml("showSerName", options.showSeriesName) + valXml("showPercent", options.showPercent) + valXml("showBubbleSize", options.showBubbleSize) + (options.separator === void 0 ? "" : textElement("separator", options.separator));
3510
+ }
3511
+ function labelXml(context, label) {
3512
+ return elementXml(
3513
+ "dLbl",
3514
+ valXml("idx", label.index) + valXml("delete", label.deleted) + layoutXml(context, label.layout) + chartTextXml(context, label.tx, false) + labelOptionsXml(context, label) + raw(context, label.extLst)
3515
+ );
3516
+ }
3517
+ function dataLabelsXml(context, labels) {
3518
+ if (!labels) return "";
3519
+ const leaderLines = labels.leaderLines ? elementXml("leaderLines", shapePropertiesXml(context, labels.leaderLines.spPr)) : "";
3520
+ return elementXml(
3521
+ "dLbls",
3522
+ labels.labels.map((label) => labelXml(context, label)).join("") + valXml("delete", labels.deleted) + labelOptionsXml(context, labels) + valXml("showLeaderLines", labels.showLeaderLines) + leaderLines + raw(context, labels.extLst)
3523
+ );
3524
+ }
3525
+
3526
+ // chart/write-chrome.ts
3527
+ function surfaceXml(context, local, surface) {
3528
+ if (!surface) return "";
3529
+ return elementXml(
3530
+ local,
3531
+ valXml("thickness", surface.thickness) + shapePropertiesXml(context, surface.spPr) + raw(context, surface.pictureOptionsXml) + raw(context, surface.extLst)
3532
+ );
3533
+ }
3534
+ function dataTableXml(context, table) {
3535
+ if (!table) return "";
3536
+ return elementXml(
3537
+ "dTable",
3538
+ valXml("showHorzBorder", table.showHorizontalBorder) + valXml("showVertBorder", table.showVerticalBorder) + valXml("showOutline", table.showOutline) + valXml("showKeys", table.showKeys) + shapePropertiesXml(context, table.spPr) + textBodyXml(context, table.txPr) + raw(context, table.extLst)
3539
+ );
3540
+ }
3541
+ function displayUnitsXml(context, units2) {
3542
+ if (!units2) return "";
3543
+ const label = units2.label;
3544
+ return elementXml(
3545
+ "dispUnits",
3546
+ valXml("custUnit", units2.customUnit) + (units2.customUnit === void 0 ? valXml("builtInUnit", units2.builtInUnit) : "") + (label ? elementXml(
3547
+ "dispUnitsLbl",
3548
+ layoutXml(context, label.layout) + chartTextXml(context, label.tx, false) + shapePropertiesXml(context, label.spPr) + textBodyXml(context, label.txPr)
3549
+ ) : "") + raw(context, units2.extLst)
3550
+ );
3551
+ }
3552
+
3553
+ // chart/write-axes.ts
3554
+ var AXIS_ELEMENTS2 = {
3555
+ cat: "catAx",
3556
+ val: "valAx",
3557
+ date: "dateAx",
3558
+ ser: "serAx"
3559
+ };
3560
+ var gridlinesXml = (context, local, present, shape) => present ? elementXml(local, shapePropertiesXml(context, shape)) : "";
3561
+ function axisXml(context, axis) {
3562
+ const { scaling } = axis;
3563
+ return elementXml(
3564
+ AXIS_ELEMENTS2[axis.kind],
3565
+ valXml("axId", axis.id) + elementXml(
3566
+ "scaling",
3567
+ valXml("logBase", scaling.logBase) + valXml("orientation", scaling.orientation) + valXml("max", scaling.max) + valXml("min", scaling.min)
3568
+ ) + valXml("delete", axis.deleted) + valXml("axPos", axis.position) + gridlinesXml(context, "majorGridlines", axis.majorGridlines, axis.majorGridlinesSpPr) + gridlinesXml(context, "minorGridlines", axis.minorGridlines, axis.minorGridlinesSpPr) + titleXml(context, axis.title) + numberFormatXml(axis.numberFormat) + valXml("majorTickMark", axis.majorTickMark) + valXml("minorTickMark", axis.minorTickMark) + valXml("tickLblPos", axis.tickLabelPosition) + shapePropertiesXml(context, axis.spPr) + textBodyXml(context, axis.txPr) + valXml("crossAx", axis.crossAxisId) + valXml("crosses", axis.crosses) + valXml("crossesAt", axis.crossesAt) + valXml("crossBetween", axis.crossBetween) + valXml("auto", axis.auto) + valXml("lblAlgn", axis.labelAlign) + valXml("lblOffset", axis.labelOffset) + valXml("baseTimeUnit", axis.baseTimeUnit) + valXml("majorUnit", axis.majorUnit) + valXml("minorUnit", axis.minorUnit) + displayUnitsXml(context, axis.displayUnits) + valXml("tickLblSkip", axis.tickLabelSkip) + valXml("tickMarkSkip", axis.tickMarkSkip) + valXml("noMultiLvlLbl", axis.noMultiLevelLabels) + raw(context, axis.extLst)
3569
+ );
3570
+ }
3571
+
3572
+ // chart/write-series.ts
3573
+ function markerXml(context, marker) {
3574
+ if (!marker) return "";
3575
+ return elementXml(
3576
+ "marker",
3577
+ valXml("symbol", marker.symbol) + valXml("size", marker.size) + shapePropertiesXml(context, marker.spPr) + raw(context, marker.extLst)
3578
+ );
3579
+ }
3580
+ function dataPointXml(context, point) {
3581
+ return elementXml(
3582
+ "dPt",
3583
+ valXml("idx", point.index) + valXml("invertIfNegative", point.invertIfNegative) + markerXml(context, point.marker) + valXml("bubble3D", point.bubble3D) + valXml("explosion", point.explosion) + shapePropertiesXml(context, point.spPr) + raw(context, point.extLst)
3584
+ );
3585
+ }
3586
+ function seriesXml(context, series, position) {
3587
+ return elementXml(
3588
+ "ser",
3589
+ valXml("idx", series.index ?? position) + valXml("order", series.order ?? position) + chartTextXml(context, series.tx, true) + shapePropertiesXml(context, series.spPr) + valXml("invertIfNegative", series.invertIfNegative) + markerXml(context, series.marker) + valXml("explosion", series.explosion) + series.dataPoints.map((point) => dataPointXml(context, point)).join("") + dataLabelsXml(context, series.dataLabels) + dataSourceXml("cat", series.categories) + dataSourceXml("val", series.values) + dataSourceXml("xVal", series.xValues) + dataSourceXml("yVal", series.yValues) + dataSourceXml("bubbleSize", series.bubbleSizes) + valXml("smooth", series.smooth) + valXml("shape", series.shape) + valXml("bubble3D", series.bubble3D) + raw(context, series.extLst)
3590
+ );
3591
+ }
3592
+
3593
+ // chart/write-plot.ts
3594
+ var linesXml = (context, local, present, shape) => present ? elementXml(local, shapePropertiesXml(context, shape)) : "";
3595
+ var barsXml = (context, local, bars2) => bars2 ? elementXml(local, shapePropertiesXml(context, bars2.spPr)) : "";
3596
+ function upDownBarsXml(context, group) {
3597
+ if (!group.upDownBars) return "";
3598
+ return elementXml(
3599
+ "upDownBars",
3600
+ valXml("gapWidth", group.upDownBarsGapWidth) + barsXml(context, "upBars", group.upBars) + barsXml(context, "downBars", group.downBars)
3601
+ );
3602
+ }
3603
+ function groupElement(group) {
3604
+ if (Object.hasOwn(CHART_GROUP_ELEMENTS, group.element)) return group.element;
3605
+ const match = Object.entries(CHART_GROUP_ELEMENTS).find(
3606
+ ([, value]) => value.kind === group.kind && value.is3D === group.is3D
3607
+ );
3608
+ if (!match) throw new Error(`No chart group element for ${group.kind}`);
3609
+ return match[0];
3610
+ }
3611
+ function groupXml(context, group) {
3612
+ return elementXml(
3613
+ groupElement(group),
3614
+ valXml("ofPieType", group.ofPieType) + valXml("scatterStyle", group.scatterStyle) + valXml("radarStyle", group.radarStyle) + valXml("wireframe", group.wireframe) + valXml("barDir", group.barDirection) + valXml("grouping", group.grouping) + valXml("varyColors", group.varyColors) + group.series.map((series, position) => seriesXml(context, series, position)).join("") + dataLabelsXml(context, group.dataLabels) + valXml("gapWidth", group.gapWidth) + valXml("overlap", group.overlap) + linesXml(context, "dropLines", group.dropLines, group.dropLinesSpPr) + linesXml(context, "hiLowLines", group.hiLowLines, group.hiLowLinesSpPr) + upDownBarsXml(context, group) + valXml("marker", group.marker) + valXml("smooth", group.smooth) + valXml("gapDepth", group.gapDepth) + valXml("shape", group.shape) + valXml("firstSliceAng", group.firstSliceAngle) + valXml("holeSize", group.holeSize) + valXml("bubble3D", group.bubble3D) + valXml("bubbleScale", group.bubbleScale) + valXml("showNegBubbles", group.showNegativeBubbles) + valXml("sizeRepresents", group.sizeRepresents) + linesXml(context, "serLines", group.seriesLines, group.seriesLinesSpPr) + group.axisIds.map((id) => valXml("axId", id)).join("") + raw(context, group.extLst)
3615
+ );
3616
+ }
3617
+ function plotAreaXml(context, plotArea) {
3618
+ return elementXml(
3619
+ "plotArea",
3620
+ layoutXml(context, plotArea.layout) + plotArea.groups.map((group) => groupXml(context, group)).join("") + plotArea.axes.map((axis) => axisXml(context, axis)).join("") + dataTableXml(context, plotArea.dataTable) + shapePropertiesXml(context, plotArea.spPr) + raw(context, plotArea.extLst)
3621
+ );
3622
+ }
3623
+
3624
+ // chart/write-space.ts
3625
+ var DECLARATION2 = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
3626
+ function view3DXml(view) {
3627
+ if (!view) return "";
3628
+ return elementXml(
3629
+ "view3D",
3630
+ valXml("rotX", view.rotX) + valXml("hPercent", view.heightPercent) + valXml("rotY", view.rotY) + valXml("depthPercent", view.depthPercent) + valXml("rAngAx", view.rightAngleAxes) + valXml("perspective", view.perspective)
3631
+ );
3632
+ }
3633
+ function legendXml(context, legend) {
3634
+ if (!legend) return "";
3635
+ const entries = legend.entries.map(
3636
+ (entry3) => elementXml(
3637
+ "legendEntry",
3638
+ valXml("idx", entry3.index) + valXml("delete", entry3.deleted) + textBodyXml(context, entry3.txPr)
3639
+ )
3640
+ ).join("");
3641
+ return elementXml(
3642
+ "legend",
3643
+ valXml("legendPos", legend.position) + entries + layoutXml(context, legend.layout) + valXml("overlay", legend.overlay) + shapePropertiesXml(context, legend.spPr) + textBodyXml(context, legend.txPr) + raw(context, legend.extLst)
3644
+ );
3645
+ }
3646
+ function styleXml(context, space) {
3647
+ const style = valXml("style", space.style);
3648
+ if (space.c14Style === void 0) return style;
3649
+ const choice = `<mc:Choice Requires="c14" xmlns:c14="${NS.c14}"><c14:style val="${space.c14Style}"/></mc:Choice>`;
3650
+ const fallback = style ? `<mc:Fallback>${style}</mc:Fallback>` : "<mc:Fallback/>";
3651
+ return raw(
3652
+ context,
3653
+ `<mc:AlternateContent xmlns:mc="${NS.mc}">${choice}${fallback}</mc:AlternateContent>`
3654
+ );
3655
+ }
3656
+ var relationship = (local, id, content = "") => id === void 0 ? "" : elementXml(local, content, ` r:id="${escapeAttribute(id)}"`);
3657
+ function writeChartSpace(space, options = {}) {
3658
+ const bindings = new Map(CHART_ROOT_BINDINGS);
3659
+ for (const { prefix, uri } of space.namespaceDeclarations ?? [])
3660
+ if (!bindings.has(prefix) && /^[A-Za-z_][\w.-]*$/.test(prefix)) bindings.set(prefix, uri);
3661
+ const context = { bindings };
3662
+ const declarations = [...bindings].map(([prefix, uri]) => ` xmlns:${prefix}="${escapeAttribute(uri)}"`).join("");
3663
+ const chart = elementXml(
3664
+ "chart",
3665
+ titleXml(context, space.title) + valXml("autoTitleDeleted", space.autoTitleDeleted) + view3DXml(space.view3D) + surfaceXml(context, "floor", space.floor) + surfaceXml(context, "sideWall", space.sideWall) + surfaceXml(context, "backWall", space.backWall) + plotAreaXml(context, space.plotArea) + legendXml(context, space.legend) + valXml("plotVisOnly", space.plotVisibleOnly) + valXml("dispBlanksAs", space.displayBlanksAs) + valXml("showDLblsOverMax", space.showDataLabelsOverMax) + raw(context, space.chartExtLst)
3666
+ );
3667
+ const body = valXml("date1904", space.date1904) + valXml("lang", space.language) + valXml("roundedCorners", space.roundedCorners) + styleXml(context, space) + chart + shapePropertiesXml(context, space.spPr) + textBodyXml(context, space.txPr) + relationship(
3668
+ "externalData",
3669
+ space.externalDataRelId,
3670
+ valXml("autoUpdate", space.externalDataAutoUpdate)
3671
+ ) + raw(context, space.printSettings) + relationship("userShapes", space.userShapesRelId) + raw(context, space.extLst);
3672
+ const breakAfter = options.declarationBreak ?? "\r\n";
3673
+ return `${DECLARATION2}${breakAfter}<c:chartSpace${declarations}>${body}</c:chartSpace>`;
3674
+ }
3675
+
3676
+ // chart/render/summary-from-space.ts
3677
+ var solidColor = (fill) => fill?.kind === "solid" ? fill.color : void 0;
3678
+ var isSolidFill = (fill) => fill?.kind === "solid" || fill?.kind === "unsupported" && fill.element === "solidFill";
3679
+ var GROUP_TYPES = {
3680
+ bar: "bar",
3681
+ line: "line",
3682
+ area: "area",
3683
+ pie: "pie",
3684
+ ofPie: "pie",
3685
+ doughnut: "doughnut",
3686
+ scatter: "scatter",
3687
+ radar: "radar",
3688
+ bubble: "bubble",
3689
+ stock: "stock",
3690
+ surface: "surface"
3691
+ };
3692
+ var GROUPINGS = /* @__PURE__ */ new Set(["clustered", "stacked", "percentStacked", "standard"]);
3693
+ function chartSummarySeries(source, chartType) {
3694
+ const categories = source.categories ?? source.xValues;
3695
+ const values = source.values ?? source.yValues;
3696
+ const out = {
3697
+ categories: chartSourceValues(categories),
3698
+ values: chartSourceValues(values).map(
3699
+ (v) => typeof v === "number" ? v : v === "" ? null : Number.isFinite(Number(v)) ? Number(v) : null
3700
+ )
3701
+ };
3702
+ if (source.tx?.text !== void 0) out.name = source.tx.text;
3703
+ const nameRef = source.tx?.reference?.formula;
3704
+ if (nameRef) out.nameRef = nameRef;
3705
+ if (categories?.formula) out.categoriesRef = categories.formula;
3706
+ if (values?.formula) out.valuesRef = values.formula;
3707
+ if (source.spPr?.effectsXml) out.effectsXml = source.spPr.effectsXml;
3708
+ const primary = ["line", "scatter", "radar"].includes(chartType) ? source.spPr?.line?.fill : source.spPr?.fill;
3709
+ const fill = chartType === "scatter" && !isSolidFill(primary) ? source.marker?.spPr?.fill : primary;
3710
+ const drawingColor = solidColor(fill);
3711
+ if (drawingColor) out.drawingColor = drawingColor;
3712
+ if (fill && fill.kind !== "solid" && !(chartType === "scatter" && fill.kind === "none"))
3713
+ out.fill = fill;
3714
+ const points = {};
3715
+ const pointFills = {};
3716
+ for (const point of source.dataPoints) {
3717
+ const properties2 = point.spPr ?? point.marker?.spPr;
3718
+ if (point.index === void 0) continue;
3719
+ const pointColor = solidColor(properties2?.fill);
3720
+ if (pointColor) points[point.index] = pointColor;
3721
+ if (properties2?.fill && properties2.fill.kind !== "solid")
3722
+ pointFills[point.index] = properties2.fill;
3723
+ }
3724
+ if (Object.keys(points).length) out.pointColors = points;
3725
+ if (Object.keys(pointFills).length) out.pointFills = pointFills;
3726
+ return out;
3727
+ }
3728
+ function chartSummaryFromSpace(chartSpace, extras = {}) {
3729
+ const group = chartSpace.plotArea.groups[0];
3730
+ let chartType = group ? GROUP_TYPES[group.kind] : "column";
3731
+ if (chartType === "bar" && group?.barDirection !== "bar") chartType = "column";
3732
+ const series = (group?.series ?? []).map((source) => chartSummarySeries(source, chartType));
3733
+ const summary = {
3734
+ chartType,
3735
+ series,
3736
+ showLegend: chartSpace.legend !== void 0
3737
+ };
3738
+ const grouping = group?.grouping;
3739
+ if (grouping && GROUPINGS.has(grouping))
3740
+ summary.grouping = grouping;
3741
+ if (chartType === "bar" || chartType === "column") {
3742
+ for (const [value, field, fallback, min, max] of [
3743
+ [group?.gapWidth, "barGapWidth", 150, 0, 500],
3744
+ [group?.overlap, "barOverlap", 0, -100, 100]
3745
+ ]) {
3746
+ const resolved = value ?? fallback;
3747
+ if (Number.isInteger(resolved) && resolved >= min && resolved <= max)
3748
+ summary[field] = resolved;
3749
+ }
3750
+ }
3751
+ if (chartSpace.title && chartSpace.autoTitleDeleted !== true) {
3752
+ const title = chartSpace.title.text;
3753
+ if (title !== void 0) summary.title = title;
3754
+ else if (series.length === 1 && series[0]?.name) summary.title = series[0].name;
3755
+ }
3756
+ const legendPos = chartSpace.legend?.position;
3757
+ if (legendPos && ["r", "l", "t", "b", "tr"].includes(legendPos))
3758
+ summary.legendPosition = legendPos;
3759
+ if (extras.formatting) summary.formatting = extras.formatting;
3760
+ if (extras.colorPalette !== void 0) summary.colorPalette = extras.colorPalette;
3761
+ if (extras.styleDefinition) summary.styleDefinition = extras.styleDefinition;
3762
+ return summary;
3763
+ }
3764
+
3765
+ // drawingml/theme-color.ts
3766
+ function themeSlotHex(color) {
3767
+ if (!color) return void 0;
3768
+ const value = color.kind === "srgb" ? color.value : color.kind === "system" ? color.fallback : void 0;
3769
+ return value ? value.toUpperCase() : void 0;
3770
+ }
3771
+
3772
+ // chart/render/chart-scale.ts
3773
+ var clean = (n2) => Number(n2.toPrecision(12));
3774
+ function* units(raw2) {
3775
+ let exp = Math.floor(Math.log10(raw2)) - 1;
3776
+ for (; ; ) {
3777
+ const base = 10 ** exp;
3778
+ for (const m of [1, 2, 5]) yield clean(m * base);
3779
+ exp++;
3780
+ }
3781
+ }
3782
+ function niceScale(dataMin, dataMax, options = {}) {
3783
+ const maxIntervals = Math.max(1, options.maxIntervals ?? 10);
3784
+ let lo = Number.isFinite(dataMin) ? dataMin : 0;
3785
+ let hi = Number.isFinite(dataMax) ? dataMax : 0;
3786
+ if (lo > hi) [lo, hi] = [hi, lo];
3787
+ if (lo === hi) {
3788
+ if (lo === 0) hi = 1;
3789
+ else if (options.noZero) {
3790
+ const pad = Math.abs(lo) * 0.1 || 1;
3791
+ lo -= pad;
3792
+ hi += pad;
3793
+ } else if (lo > 0) lo = 0;
3794
+ else hi = 0;
3795
+ }
3796
+ let fixedLo = false;
3797
+ let fixedHi = false;
3798
+ if (!options.noZero) {
3799
+ if (lo >= 0 && hi - lo >= hi / 6) {
3800
+ lo = 0;
3801
+ fixedLo = true;
3802
+ } else if (hi <= 0 && hi - lo >= -lo / 6) {
3803
+ hi = 0;
3804
+ fixedHi = true;
3805
+ }
3806
+ }
3807
+ const range = hi - lo;
3808
+ const top = fixedHi ? hi : hi + range * 0.05;
3809
+ const bottom = fixedLo ? lo : lo - range * 0.05;
3810
+ for (const unit of units(range / maxIntervals)) {
3811
+ const min = fixedLo ? lo : Math.floor(clean(bottom / unit)) * unit;
3812
+ const max = fixedHi ? hi : Math.ceil(clean(top / unit)) * unit;
3813
+ const intervals = Math.round((max - min) / unit);
3814
+ if (intervals <= maxIntervals && intervals > 0) {
3815
+ const ticks = [];
3816
+ for (let i = 0; i <= intervals; i++) ticks.push(clean(min + i * unit));
3817
+ return { min: clean(min), max: clean(max), majorUnit: unit, ticks };
3818
+ }
3819
+ }
3820
+ return { min: lo, max: hi, majorUnit: range, ticks: [lo, hi] };
3821
+ }
3822
+ var PERCENT_SCALE = {
3823
+ min: 0,
3824
+ max: 1,
3825
+ majorUnit: 0.1,
3826
+ ticks: [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]
3827
+ };
3828
+ function formatAxisValue(value, percent = false) {
3829
+ if (percent) return `${clean(value * 100)}%`;
3830
+ const v = clean(value);
3831
+ if (Math.abs(v) >= 1e15 || v !== 0 && Math.abs(v) < 1e-6)
3832
+ return v.toExponential(2).replace("e+", "E+").replace("e-", "E-");
3833
+ const [int = "0", frac] = String(Math.abs(v)).split(".");
3834
+ const grouped = int.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
3835
+ return `${v < 0 ? "-" : ""}${grouped}${frac ? `.${frac}` : ""}`;
3836
+ }
3837
+
3838
+ // chart/render/chart-svg-util.ts
3839
+ var TEXT_COLOR = "#595959";
3840
+ var GRID_COLOR = "#D9D9D9";
3841
+ var AXIS_COLOR = "#BFBFBF";
3842
+ var FONT_SIZE = 10;
3843
+ function esc(text2) {
3844
+ return text2.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;");
3845
+ }
3846
+ var n = (value) => String(Math.round(value * 100) / 100);
3847
+ var textWidth = (text2, size = FONT_SIZE) => text2.length * size * 0.55;
3848
+ function text(x, y, content, attrs = {}) {
3849
+ const parts = [`x="${n(x)}"`, `y="${n(y)}"`];
3850
+ parts.push(`font-size="${attrs.size ?? FONT_SIZE}"`);
3851
+ parts.push(`fill="${esc(attrs.fill ?? TEXT_COLOR)}"`);
3852
+ if (attrs.anchor && attrs.anchor !== "start") parts.push(`text-anchor="${attrs.anchor}"`);
3853
+ if (attrs.weight) parts.push(`font-weight="${attrs.weight}"`);
3854
+ if (attrs.baseline) parts.push(`dominant-baseline="${attrs.baseline}"`);
3855
+ if (attrs.family) parts.push(`font-family="${esc(attrs.family)}"`);
3856
+ if (attrs.filter) parts.push(`filter="${esc(attrs.filter)}"`);
3857
+ if (attrs.italic !== void 0) parts.push(`font-style="${attrs.italic ? "italic" : "normal"}"`);
3858
+ if (attrs.underline !== void 0)
3859
+ parts.push(`text-decoration="${attrs.underline ? "underline" : "none"}"`);
3860
+ return `<text ${parts.join(" ")}>${esc(content)}</text>`;
3861
+ }
3862
+ var line = (x1, y1, x2, y2, stroke, width = 1) => `<line x1="${n(x1)}" y1="${n(y1)}" x2="${n(x2)}" y2="${n(y2)}" stroke="${stroke}" stroke-width="${width}"/>`;
3863
+ var rect = (x, y, w, h, fill, filter) => `<rect x="${n(x)}" y="${n(y)}" width="${n(Math.max(0, w))}" height="${n(Math.max(0, h))}" fill="${fill}"${filter ? ` filter="${esc(filter)}"` : ""}/>`;
3864
+ function fit(content, maxWidth, size = FONT_SIZE) {
3865
+ if (textWidth(content, size) <= maxWidth) return content;
3866
+ const chars = Math.max(1, Math.floor(maxWidth / (size * 0.55)) - 1);
3867
+ return `${content.slice(0, chars)}\u2026`;
3868
+ }
3869
+
3870
+ // chart/render/theme-palette.ts
3871
+ var THEME_SLOTS = [
3872
+ "lt1",
3873
+ "dk1",
3874
+ "lt2",
3875
+ "dk2",
3876
+ "accent1",
3877
+ "accent2",
3878
+ "accent3",
3879
+ "accent4",
3880
+ "accent5",
3881
+ "accent6",
3882
+ "hlink",
3883
+ "folHlink"
3884
+ ];
3885
+ var DEFAULT_THEME_COLORS = [
3886
+ "FFFFFF",
3887
+ "000000",
3888
+ "E7E6E6",
3889
+ "44546A",
3890
+ "4472C4",
3891
+ "ED7D31",
3892
+ "A5A5A5",
3893
+ "FFC000",
3894
+ "5B9BD5",
3895
+ "70AD47",
3896
+ "0563C1",
3897
+ "954F72"
3898
+ ];
3899
+ function themeColor(theme, index) {
3900
+ const hex = theme.colors[index] ?? DEFAULT_THEME_COLORS[index];
3901
+ return hex && parseArgbHex(hex) ? hex.replace(/^#/, "") : void 0;
3902
+ }
3903
+
3904
+ // chart/render/chart-colors.ts
3905
+ function chartColorScheme(theme) {
3906
+ const slots = Object.fromEntries(
3907
+ THEME_SLOTS.map((slot, index) => [slot, `#${themeColor(theme, index) ?? "000000"}`])
3908
+ );
3909
+ return {
3910
+ ...slots,
3911
+ bg1: slots.lt1,
3912
+ tx1: slots.dk1,
3913
+ bg2: slots.lt2,
3914
+ tx2: slots.dk2
3915
+ };
3916
+ }
3917
+ function modulateLuminance(hex, lumMod, lumOff = 0) {
3918
+ const rgb = parseArgbHex(hex);
3919
+ if (!rgb) return "#000000";
3920
+ if (lumMod === 1 && lumOff === 0) return rgbToUpperHex(rgb);
3921
+ const hsl = rgbToHsl(...rgb);
3922
+ const l = Math.max(0, Math.min(1, hsl.l * lumMod + lumOff));
3923
+ const out = hslToRgb(hsl.h, hsl.s, l);
3924
+ return rgbToUpperHex([out.r, out.g, out.b]);
3925
+ }
3926
+ function autoSeriesColor(theme, index) {
3927
+ const i = Math.max(0, Math.floor(index));
3928
+ return chartPaletteSeriesColor(findChartColorPalette(10), i, i + 1, chartColorScheme(theme));
3929
+ }
3930
+
3931
+ // drawingml/drawing-color-css.ts
3932
+ function drawingColorCss(value) {
3933
+ if (!value || value.alpha === 1) return value?.hex;
3934
+ const channels = [1, 3, 5].map(
3935
+ (offset) => Number.parseInt(value.hex.slice(offset, offset + 2), 16)
3936
+ );
3937
+ return `rgba(${channels.join(",")},${value.alpha})`;
3938
+ }
3939
+
3940
+ // chart/render/chart-value-axis.ts
3941
+ function valueAxis(model) {
3942
+ const stackable = model.type === "bar" || model.type === "column" || model.type === "line" || model.type === "area";
3943
+ if (stackable && model.grouping === "percentStacked")
3944
+ return { ...PERCENT_SCALE, ticks: [...PERCENT_SCALE.ticks], percent: true };
3945
+ let min = Infinity;
3946
+ let max = -Infinity;
3947
+ if (stackable && model.grouping === "stacked") {
3948
+ for (let i = 0; i < model.categories.length; i++) {
3949
+ let pos = 0;
3950
+ let neg = 0;
3951
+ for (const s of model.series) {
3952
+ const v = s.values[i] ?? 0;
3953
+ if (v >= 0) pos += v;
3954
+ else neg += v;
3955
+ }
3956
+ min = Math.min(min, neg);
3957
+ max = Math.max(max, pos);
3958
+ }
3959
+ } else {
3960
+ for (const s of model.series)
3961
+ for (const v of s.values)
3962
+ if (v !== null) {
3963
+ min = Math.min(min, v);
3964
+ max = Math.max(max, v);
3965
+ }
3966
+ }
3967
+ if (min === Infinity) {
3968
+ min = 0;
3969
+ max = 1;
3970
+ }
3971
+ return { ...niceScale(min, max), percent: false };
3972
+ }
3973
+ function categoryTotals(model) {
3974
+ return model.categories.map(
3975
+ (_, i) => model.series.reduce((sum, s) => sum + Math.abs(s.values[i] ?? 0), 0)
3976
+ );
3977
+ }
3978
+
3979
+ // units/constants.ts
3980
+ var EMU_PER_PIXEL = 9525;
3981
+ var EMU_PER_POINT = 12700;
3982
+
3983
+ // drawingml/drawing-shadow.ts
3984
+ function resolveDrawingShadow(effects, theme) {
3985
+ const node = first(effects, "outerShdw", NS.a);
3986
+ if (!node) return void 0;
3987
+ const value = (key, fallback) => Number(node.getAttribute(key) ?? fallback);
3988
+ if (value("sx", 1e5) !== 1e5 || value("sy", 1e5) !== 1e5 || value("kx", 0) !== 0 || value("ky", 0) !== 0)
3989
+ return void 0;
3990
+ const color = parseDrawingColorIn(node);
3991
+ const resolved = color && resolveDrawingColor(color, theme, { transformOrder: "document" });
3992
+ const blur = value("blurRad", 0) / EMU_PER_PIXEL;
3993
+ const distance = value("dist", 0) / EMU_PER_PIXEL;
3994
+ const angle = value("dir", 0) / 6e4 * Math.PI / 180;
3995
+ if (!resolved || ![blur, distance, angle].every(Number.isFinite) || blur < 0 || distance < 0)
3996
+ return void 0;
3997
+ return {
3998
+ color: resolved.hex,
3999
+ opacity: resolved.alpha,
4000
+ blur,
4001
+ dx: Math.cos(angle) * distance,
4002
+ dy: Math.sin(angle) * distance
4003
+ };
4004
+ }
4005
+ function resolveDrawingShadowXml(xml, theme) {
4006
+ return xml ? resolveDrawingShadow(parseXml(xml).documentElement, theme) : void 0;
4007
+ }
4008
+ function svgDropShadowElement(s, format) {
4009
+ const num = format.number;
4010
+ return `<feDropShadow dx="${num(s.dx)}" dy="${num(s.dy)}" stdDeviation="${num(s.blur / 2)}" flood-color="${format.color(s.color, "#000000")}" flood-opacity="${num(s.opacity)}" result="shadow"/>`;
4011
+ }
4012
+
4013
+ // chart/text-inheritance.ts
4014
+ var TEXT_KEYS = [
4015
+ "fontSize",
4016
+ "bold",
4017
+ "italic",
4018
+ "underline",
4019
+ "typeface",
4020
+ "textColor",
4021
+ "fontRef"
4022
+ ];
4023
+ var TEXT_PARTS = [
4024
+ "title",
4025
+ "axisTitle",
4026
+ "categoryAxis",
4027
+ "valueAxis",
4028
+ "legend",
4029
+ "dataLabel"
4030
+ ];
4031
+ function inheritChartText(part, entry3, builtIn, root) {
4032
+ if (!root || !TEXT_PARTS.includes(part)) return entry3;
4033
+ const out = { ...entry3 };
4034
+ for (const key of TEXT_KEYS) {
4035
+ delete out[key];
4036
+ const value = root[key] ?? builtIn?.[key];
4037
+ if (value !== void 0) Object.assign(out, { [key]: value });
4038
+ }
4039
+ if (part === "title" && root.fontSize !== void 0) out.fontSize = root.fontSize * 1.2;
4040
+ if (root.textEffectsXml !== void 0) out.textEffectsXml = root.textEffectsXml;
4041
+ return out;
4042
+ }
4043
+
4044
+ // chart/render/chart-appearance.ts
4045
+ var chartPointsToPixels = (points) => points * EMU_PER_POINT / EMU_PER_PIXEL;
4046
+ function typeface(entry3, theme) {
4047
+ const name = entry3.typeface;
4048
+ if (name?.startsWith("+mj-")) return theme.majorFont;
4049
+ if (name?.startsWith("+mn-")) return theme.minorFont;
4050
+ return name ?? (entry3.fontRef?.index === "major" ? theme.majorFont : entry3.fontRef?.index === "minor" ? theme.minorFont : void 0);
4051
+ }
4052
+ function chartAppearance(chart, theme) {
4053
+ const defaults = builtInChartTextStyle(effectiveBuiltInChartStyle(chart.formatting));
4054
+ const entries = {};
4055
+ for (const part of CHART_STYLE_PARTS) {
4056
+ const base = chart.styleDefinition?.entries[part];
4057
+ const direct = chart.formatting?.entries[part];
4058
+ if (!defaults[part] && !base && !direct) continue;
4059
+ const entry3 = {
4060
+ ...inheritChartText(
4061
+ part,
4062
+ { ...defaults[part], ...base, sourceXml: base?.sourceXml ?? "" },
4063
+ defaults[part],
4064
+ chart.formatting?.textDefaults
4065
+ ),
4066
+ ...direct,
4067
+ sourceXml: direct?.sourceXml ?? base?.sourceXml ?? ""
4068
+ };
4069
+ if (base?.line || direct?.line) entry3.line = { ...base?.line, ...direct?.line };
4070
+ entries[part] = entry3;
4071
+ }
4072
+ const scheme = chartColorScheme(theme);
4073
+ const resolve = (color) => resolveDrawingColor(
4074
+ color,
4075
+ { scheme: (name) => scheme[name] },
4076
+ { hslRounding: "halfDown", transformOrder: "document" }
4077
+ );
4078
+ const out = resolveChartStyleDefinition(
4079
+ { entries},
4080
+ (color) => drawingColorCss(resolve(color))
4081
+ ) ?? {};
4082
+ for (const part of CHART_STYLE_PARTS) {
4083
+ const entry3 = entries[part];
4084
+ if (!entry3) continue;
4085
+ const family = typeface(entry3, theme);
4086
+ const shadow = resolveDrawingShadowXml(entry3.textEffectsXml, {
4087
+ scheme: (name) => scheme[name]
4088
+ });
4089
+ if (shadow) (out[part] ??= {}).textShadow = shadow;
4090
+ if (family) (out[part] ??= {}).typeface = family;
4091
+ if (entry3.axisVisible !== void 0) (out[part] ??= {}).axisVisible = entry3.axisVisible;
4092
+ if (entry3.labelsVisible !== void 0) (out[part] ??= {}).labelsVisible = entry3.labelsVisible;
4093
+ if (entry3.line?.widthEmu === 0) (out[part] ??= {}).lineWidth = 0;
4094
+ if (entry3.fill?.kind === "gradient") {
4095
+ (out[part] ??= {}).gradient = resolveChartGradient(entry3.fill, resolve);
4096
+ }
4097
+ }
4098
+ return out;
4099
+ }
4100
+
4101
+ // chart/render/chart-title-text.ts
4102
+ function properties(run2) {
4103
+ return {
4104
+ ...run2.sizePt === void 0 ? {} : { fontSize: run2.sizePt },
4105
+ ...run2.bold === void 0 ? {} : { bold: run2.bold },
4106
+ ...run2.italic === void 0 ? {} : { italic: run2.italic },
4107
+ ...run2.underline === void 0 ? {} : { underline: run2.underline },
4108
+ ...run2.typeface === void 0 ? {} : { typeface: run2.typeface },
4109
+ ...run2.color === void 0 ? {} : { textColor: run2.color }
4110
+ };
4111
+ }
4112
+ function chartTitleText(chart, theme) {
4113
+ const formatting = chart.formatting;
4114
+ const entry3 = formatting?.entries.title;
4115
+ const body = entry3?.textBody;
4116
+ if (!formatting || !body || body.text !== chart.title) return void 0;
4117
+ if (body.paragraphs.length === 1 && body.paragraphs[0].runs.length <= 1 && !body.text.includes("\n") && !body.paragraphs[0].lineSpacing && !body.paragraphs[0].spaceBefore && !body.paragraphs[0].spaceAfter)
4118
+ return void 0;
4119
+ return {
4120
+ paragraphs: body.paragraphs.map((paragraph2) => ({
4121
+ ...paragraph2.align ? { align: paragraph2.align } : {},
4122
+ ...paragraph2.lineSpacing ? { lineSpacing: paragraph2.lineSpacing } : {},
4123
+ ...paragraph2.spaceBefore ? { spaceBefore: paragraph2.spaceBefore } : {},
4124
+ ...paragraph2.spaceAfter ? { spaceAfter: paragraph2.spaceAfter } : {},
4125
+ runs: paragraph2.runs.map((run2) => {
4126
+ const direct = {
4127
+ sourceXml: "",
4128
+ ...entry3.textBodyStyle,
4129
+ ...properties(paragraph2.defaultProperties ?? {}),
4130
+ ...properties(run2)
4131
+ };
4132
+ const appearance = chartAppearance(
4133
+ {
4134
+ ...chart,
4135
+ formatting: { ...formatting, entries: { ...formatting.entries, title: direct } }
4136
+ },
4137
+ theme
4138
+ )?.title ?? {};
4139
+ return { text: run2.text, appearance };
4140
+ })
4141
+ }))
4142
+ };
4143
+ }
4144
+
4145
+ // chart/render/chart-view.ts
4146
+ var isRefError = (value) => typeof value === "object" && value !== null && "error" in value;
4147
+ var SUPPORTED = /* @__PURE__ */ new Set([
4148
+ "bar",
4149
+ "column",
4150
+ "line",
4151
+ "area",
4152
+ "pie",
4153
+ "doughnut",
4154
+ "scatter",
4155
+ "radar"
4156
+ ]);
4157
+ function toText(value) {
4158
+ if (value === null) return "";
4159
+ if (typeof value === "boolean") return value ? "TRUE" : "FALSE";
4160
+ if (isRefError(value)) return value.error;
4161
+ return String(value);
4162
+ }
4163
+ var toNumber = (value) => typeof value === "number" && Number.isFinite(value) ? value : null;
4164
+ function resolveRef(ref, evaluateRef) {
4165
+ if (!ref) return void 0;
4166
+ try {
4167
+ const values = evaluateRef(ref);
4168
+ return values.length ? values : void 0;
4169
+ } catch {
4170
+ return void 0;
4171
+ }
4172
+ }
4173
+ function seriesName(series, index, evaluateRef) {
4174
+ const fromRef = resolveRef(series.nameRef, evaluateRef)?.map(toText).filter((t) => t !== "").join(" ");
4175
+ return fromRef || series.name || `Series${index + 1}`;
4176
+ }
4177
+ function chartSummaryView(chart, theme, options = {}) {
4178
+ const evaluateRef = options.evaluateRef ?? (() => []);
4179
+ const type = chart.chartType;
4180
+ const radial = type === "pie" || type === "doughnut";
4181
+ const palette = chart.colorPalette === void 0 ? void 0 : findChartColorPalette(chart.colorPalette);
4182
+ const scheme = chartColorScheme(theme);
4183
+ const drawingColor = (color) => color && drawingColorCss(
4184
+ resolveDrawingColor(
4185
+ color,
4186
+ {
4187
+ scheme: (name) => scheme[name]
4188
+ },
4189
+ { transformOrder: "document" }
4190
+ )
4191
+ );
4192
+ const gradient = (fill) => fill?.kind === "gradient" ? resolveChartGradient(
4193
+ fill,
4194
+ (color) => resolveDrawingColor(
4195
+ color,
4196
+ {
4197
+ scheme: (name) => scheme[name]
4198
+ },
4199
+ { transformOrder: "document" }
4200
+ )
4201
+ ) : void 0;
4202
+ const grouping = chart.grouping ?? (type === "bar" || type === "column" ? "clustered" : "standard");
4203
+ let categories = [];
4204
+ const rawCategories = [];
4205
+ const series = chart.series.map((s, i) => {
4206
+ const values = resolveRef(s.valuesRef, evaluateRef)?.map(toNumber) ?? s.values.map(toNumber);
4207
+ const cats = resolveRef(s.categoriesRef, evaluateRef) ?? s.categories;
4208
+ rawCategories.push(cats);
4209
+ const paletteColor = palette && chartPaletteSeriesColor(palette, i, chart.series.length, scheme);
4210
+ const color = s.fill?.kind === "none" ? "none" : drawingColor(s.fill?.kind === "solid" ? s.fill.color : s.drawingColor) ?? options.seriesColor?.(s, i) ?? paletteColor ?? autoSeriesColor(theme, i);
4211
+ const view = { name: seriesName(s, i, evaluateRef), values, color };
4212
+ const shadow = resolveDrawingShadowXml(s.effectsXml, {
4213
+ scheme: (name) => scheme[name]
4214
+ });
4215
+ if (shadow) view.shadow = shadow;
4216
+ const resolvedGradient = gradient(s.fill);
4217
+ if (resolvedGradient) view.gradient = resolvedGradient;
4218
+ const points = Object.fromEntries(
4219
+ Object.entries(s.pointFills ?? {}).flatMap(([key, fill]) => {
4220
+ const value = gradient(fill);
4221
+ return value ? [[key, value]] : [];
4222
+ })
4223
+ );
4224
+ if (Object.keys(points).length) view.pointGradients = points;
4225
+ return view;
4226
+ });
4227
+ const longest = Math.max(0, ...series.map((s) => s.values.length));
4228
+ const firstCats = rawCategories.find((c2) => c2.length > 0) ?? [];
4229
+ categories = Array.from(
4230
+ { length: Math.max(longest, firstCats.length) },
4231
+ (_, i) => firstCats[i] !== void 0 ? toText(firstCats[i] ?? null) : String(i + 1)
4232
+ );
4233
+ if (radial) {
4234
+ series.forEach((s, seriesIndex) => {
4235
+ s.pointColors = s.values.map((_, i) => {
4236
+ const explicit = drawingColor(chart.series[seriesIndex]?.pointColors?.[i]);
4237
+ return explicit ?? (palette ? chartPaletteSeriesColor(palette, i, s.values.length, scheme) : autoSeriesColor(theme, i));
4238
+ });
4239
+ });
4240
+ } else
4241
+ series.forEach((s, seriesIndex) => {
4242
+ const points = chart.series[seriesIndex]?.pointColors;
4243
+ if (points) s.pointColors = s.values.map((_, i) => drawingColor(points[i]) ?? s.color);
4244
+ });
4245
+ series.forEach((s, index) => {
4246
+ const source = chart.series[index];
4247
+ if (s.gradient && !radial && s.pointColors) {
4248
+ for (let i = 0; i < s.pointColors.length; i++)
4249
+ if (!source.pointColors?.[i]) delete s.pointColors[i];
4250
+ }
4251
+ for (const [key, fill] of Object.entries(source.pointFills ?? {})) {
4252
+ if (fill.kind === "none") (s.pointColors ??= [])[Number(key)] = "none";
4253
+ else if (fill.kind === "solid") {
4254
+ const paint = drawingColor(fill.color);
4255
+ if (paint) (s.pointColors ??= [])[Number(key)] = paint;
4256
+ }
4257
+ }
4258
+ });
4259
+ const model = {
4260
+ ...chart.barGapWidth === void 0 ? {} : { barGapWidth: chart.barGapWidth },
4261
+ ...chart.barOverlap === void 0 ? {} : { barOverlap: chart.barOverlap },
4262
+ type,
4263
+ grouping,
4264
+ showLegend: chart.showLegend,
4265
+ legendPosition: chart.legendPosition ?? "r",
4266
+ categories,
4267
+ series,
4268
+ horizontal: type === "bar",
4269
+ supported: SUPPORTED.has(type)
4270
+ };
4271
+ if (chart.title) model.title = chart.title;
4272
+ const titleFormatting = chart.formatting?.entries.title;
4273
+ if (titleFormatting?.layout) model.titleLayout = titleFormatting.layout;
4274
+ if (titleFormatting?.overlay !== void 0) model.titleOverlay = titleFormatting.overlay;
4275
+ const legendFormatting = chart.formatting?.entries.legend;
4276
+ if (legendFormatting?.layout) model.legendLayout = legendFormatting.layout;
4277
+ if (legendFormatting?.overlay !== void 0) model.legendOverlay = legendFormatting.overlay;
4278
+ const titleText = chartTitleText(chart, theme);
4279
+ if (titleText) model.titleText = titleText;
4280
+ const appearance = chartAppearance(chart, theme);
4281
+ if (appearance) model.appearance = appearance;
4282
+ if (type === "scatter") {
4283
+ series.forEach((s, i) => {
4284
+ const cats = rawCategories[i] ?? [];
4285
+ const numeric = cats.length > 0 && cats.every((c2) => typeof c2 === "number");
4286
+ s.xValues = s.values.map((_, k) => numeric ? toNumber(cats[k] ?? null) : k + 1);
4287
+ });
4288
+ const xs = series.flatMap((s) => s.xValues ?? []).filter((x) => x !== null);
4289
+ model.xAxis = xs.length ? niceScale(Math.min(...xs), Math.max(...xs)) : niceScale(0, 1);
4290
+ }
4291
+ if (!radial) model.valueAxis = valueAxis(model);
4292
+ return model;
4293
+ }
4294
+
4295
+ // text/css-font-family.ts
4296
+ var FALLBACKS = {
4297
+ calibri: '"Calibri", "Carlito", "Segoe UI", Arial, sans-serif',
4298
+ "calibri light": '"Calibri Light", "Calibri", "Carlito", "Segoe UI", Arial, sans-serif',
4299
+ cambria: '"Cambria", "Caladea", Georgia, serif',
4300
+ arial: 'Arial, "Liberation Sans", Helvetica, sans-serif',
4301
+ "times new roman": '"Times New Roman", "Liberation Serif", Times, serif',
4302
+ "courier new": '"Courier New", "Liberation Mono", monospace',
4303
+ aptos: '"Aptos", "Calibri", "Carlito", "Segoe UI", sans-serif'
4304
+ };
4305
+ function cssFontFamily(name) {
4306
+ const known = FALLBACKS[name.toLowerCase()];
4307
+ if (known) return known;
4308
+ const quoted = `"${name.replace(/["\\]/g, "")}"`;
4309
+ return `${quoted}, "Calibri", "Carlito", "Segoe UI", sans-serif`;
4310
+ }
4311
+
4312
+ // chart/render/chart-svg-appearance.ts
4313
+ var nextPaintId = 0;
4314
+ function chartGradientPaint(model, width = 1024, height = 768) {
4315
+ const prefix = `xlsx-chart-${++nextPaintId}`;
4316
+ const appearance = { ...model.appearance };
4317
+ const defs = [];
4318
+ const shadowPaint = (shadow, suffix) => {
4319
+ const id = `${prefix}-${suffix}`;
4320
+ const pad = Math.max(4, shadow.blur * 3 + Math.abs(shadow.dx) + Math.abs(shadow.dy));
4321
+ defs.push(
4322
+ `<filter id="${id}" filterUnits="userSpaceOnUse" x="${n(-pad)}" y="${n(-pad)}" width="${n(width + pad * 2)}" height="${n(height + pad * 2)}" color-interpolation-filters="sRGB">${svgDropShadowElement(shadow, { number: n, color: (value) => esc(value) })}</filter>`
4323
+ );
4324
+ return `url(#${id})`;
4325
+ };
4326
+ for (const [part, entry3] of Object.entries(appearance)) {
4327
+ if (entry3?.textShadow)
4328
+ appearance[part] = {
4329
+ ...entry3,
4330
+ textShadowFilter: shadowPaint(entry3.textShadow, `${part}-text-shadow`)
4331
+ };
4332
+ }
4333
+ const paint = (gradient, suffix, bounds) => {
4334
+ const def = buildChartGradientDef(`${prefix}-${suffix}`, gradient, bounds);
4335
+ defs.push(chartGradientMarkup(def));
4336
+ return `url(#${def.id})`;
4337
+ };
4338
+ for (const part of ["chartArea", "plotArea"]) {
4339
+ const entry3 = appearance[part];
4340
+ if (!entry3?.gradient) continue;
4341
+ if (part === "plotArea" && ["circle", "shape"].includes(entry3.gradient.path ?? "")) continue;
4342
+ appearance[part] = {
4343
+ ...entry3,
4344
+ fillColor: paint(entry3.gradient, part, { width, height, shape: "rect" })
4345
+ };
4346
+ }
4347
+ const series = model.series.map((source, index) => {
4348
+ const view = { ...source };
4349
+ if (source.shadow) view.shadowFilter = shadowPaint(source.shadow, `s${index}-shadow`);
4350
+ const bounds = model.type === "bar" || model.type === "column" ? { width: 1, height: 1, shape: "rect" } : void 0;
4351
+ if (source.gradient) view.color = paint(source.gradient, `s${index}`, bounds);
4352
+ if (source.pointGradients) {
4353
+ view.pointColors = [...source.pointColors ?? []];
4354
+ for (const [key, gradient] of Object.entries(source.pointGradients))
4355
+ view.pointColors[Number(key)] = paint(gradient, `s${index}-p${key}`, bounds);
4356
+ }
4357
+ return view;
4358
+ });
4359
+ return defs.length ? { model: { ...model, appearance, series }, defs: `<defs>${defs.join("")}</defs>` } : { model, defs: "" };
4360
+ }
4361
+ function chartTextAttributes(model, part, fallbackSize = FONT_SIZE) {
4362
+ const entry3 = model.appearance?.[part];
4363
+ return {
4364
+ size: entry3?.fontSize === void 0 ? fallbackSize : chartPointsToPixels(entry3.fontSize),
4365
+ ...entry3?.color === void 0 ? {} : { fill: entry3.color },
4366
+ ...entry3?.bold === void 0 ? {} : { weight: entry3.bold ? "bold" : "normal" },
4367
+ ...entry3?.italic === void 0 ? {} : { italic: entry3.italic },
4368
+ ...entry3?.underline === void 0 ? {} : { underline: entry3.underline },
4369
+ ...entry3?.typeface === void 0 ? {} : { family: cssFontFamily(entry3.typeface) },
4370
+ ...entry3?.textShadowFilter === void 0 ? {} : { filter: entry3.textShadowFilter }
4371
+ };
4372
+ }
4373
+ function chartStroke(model, part) {
4374
+ const entry3 = model.appearance?.[part];
4375
+ return {
4376
+ color: entry3?.axisVisible === false ? "none" : entry3?.lineColor ?? (part === "gridlineMajor" ? GRID_COLOR : AXIS_COLOR),
4377
+ width: entry3?.lineWidth === void 0 ? 1 : chartPointsToPixels(entry3.lineWidth)
4378
+ };
4379
+ }
4380
+ function chartAreaRect(model, part, area) {
4381
+ if (area.w <= 0 || area.h <= 0) return "";
4382
+ const entry3 = model.appearance?.[part];
4383
+ let fill = entry3?.fillColor ?? (part === "chartArea" ? "#FFFFFF" : "none");
4384
+ let defs = "";
4385
+ if (part !== "chartArea" && entry3?.gradient && (part !== "plotArea" || ["circle", "shape"].includes(entry3.gradient.path ?? ""))) {
4386
+ const def = buildChartGradientDef(`xlsx-chart-${++nextPaintId}-${part}`, entry3.gradient, {
4387
+ width: area.w,
4388
+ height: area.h,
4389
+ shape: "rect"
4390
+ });
4391
+ defs = `<defs>${chartGradientMarkup(def)}</defs>`;
4392
+ fill = `url(#${def.id})`;
4393
+ }
4394
+ const stroke = entry3?.lineColor ?? "none";
4395
+ if (fill === "none" && stroke === "none") return "";
4396
+ const width = entry3?.lineWidth === void 0 ? 1 : chartPointsToPixels(entry3.lineWidth);
4397
+ return `${defs}<rect x="${n(area.x)}" y="${n(area.y)}" width="${n(area.w)}" height="${n(area.h)}" fill="${esc(fill)}" stroke="${esc(stroke)}" stroke-width="${n(width)}" data-chart-part="${part}"/>`;
4398
+ }
4399
+
4400
+ // chart/render/chart-spacing.ts
4401
+ function chartBarSpacing(chart) {
4402
+ const stacked = chart.grouping === "stacked" || chart.grouping === "percentStacked";
4403
+ return {
4404
+ barGapWidth: chart.barGapWidth ?? DEFAULT_BAR_GAP_WIDTH,
4405
+ barOverlap: chart.barOverlap ?? (stacked ? 100 : 0)
4406
+ };
4407
+ }
4408
+
4409
+ // chart/render/chart-svg-bars.ts
4410
+ function bars(model, frame, out, values) {
4411
+ const stacked = model.grouping === "stacked" || model.grouping === "percentStacked";
4412
+ const count = Math.max(1, model.series.length);
4413
+ const geometry = clusteredBarGeometry(frame.bandSize, count, chartBarSpacing(model));
4414
+ const barSize = geometry.singleBarWidth;
4415
+ const base = frame.value(0);
4416
+ const pos = new Array(model.categories.length).fill(0);
4417
+ const neg = new Array(model.categories.length).fill(0);
4418
+ model.series.forEach((s, si) => {
4419
+ values[si]?.forEach((v, i) => {
4420
+ if (v === null || i >= model.categories.length) return;
4421
+ let from = 0;
4422
+ let to = v;
4423
+ if (stacked) {
4424
+ const acc = v >= 0 ? pos : neg;
4425
+ from = acc[i] ?? 0;
4426
+ to = from + v;
4427
+ acc[i] = to;
4428
+ }
4429
+ const a2 = stacked ? frame.value(from) : base;
4430
+ const b = frame.value(to);
4431
+ const offset = model.horizontal ? geometry.clusterWidth / 2 - barSize - si * geometry.step : -geometry.clusterWidth / 2 + si * geometry.step;
4432
+ const center = frame.band(i);
4433
+ const width = model.horizontal ? Math.abs(b - a2) : barSize;
4434
+ const height = model.horizontal ? barSize : Math.abs(b - a2);
4435
+ let color = s.pointColors?.[i] ?? s.color;
4436
+ const gradient = s.pointGradients?.[i] ?? (s.pointColors?.[i] === void 0 ? s.gradient : void 0);
4437
+ if (gradient && (gradient.path === "circle" || gradient.path === "shape")) {
4438
+ const baseId = color.match(/^url\(#(.+)\)$/)?.[1];
4439
+ if (baseId) {
4440
+ const id = baseId.replace(/(-s\d+(?:-p\d+)?)$/, `-mark${i}$1`);
4441
+ const def = buildChartGradientDef(id, gradient, {
4442
+ width: Number(n(width)),
4443
+ height: Number(n(height)),
4444
+ shape: "rect"
4445
+ });
4446
+ out.push(`<defs>${chartGradientMarkup(def)}</defs>`);
4447
+ color = `url(#${id})`;
4448
+ }
4449
+ }
4450
+ out.push(`<g data-chart-series="${si}" data-chart-point="${i}">`);
4451
+ if (model.horizontal)
4452
+ out.push(
4453
+ rect(Math.min(a2, b), center + offset, Math.abs(b - a2), barSize, color, s.shadowFilter)
4454
+ );
4455
+ else
4456
+ out.push(
4457
+ rect(center + offset, Math.min(a2, b), barSize, Math.abs(b - a2), color, s.shadowFilter)
4458
+ );
4459
+ out.push("</g>");
4460
+ });
4461
+ });
4462
+ }
4463
+
4464
+ // chart/render/chart-svg-cartesian.ts
4465
+ function axes(model, area, out) {
4466
+ const scale = model.valueAxis;
4467
+ if (!scale) return void 0;
4468
+ const labels = scale.ticks.map((t) => formatAxisValue(t, scale.percent));
4469
+ const valueAttrs = chartTextAttributes(model, "valueAxis");
4470
+ const categoryAttrs = chartTextAttributes(model, "categoryAxis");
4471
+ const valueSize = valueAttrs.size ?? 10;
4472
+ const categorySize = categoryAttrs.size ?? 10;
4473
+ const grid = chartStroke(model, "gridlineMajor");
4474
+ const axis = chartStroke(model, "categoryAxis");
4475
+ const valueLabels = model.appearance?.valueAxis?.labelsVisible !== false;
4476
+ const categoryLabels = model.appearance?.categoryAxis?.labelsVisible !== false;
4477
+ const labelW = valueLabels ? Math.max(...labels.map((l) => textWidth(l, valueSize)), 8) + 6 : 4;
4478
+ const horizontal = model.horizontal;
4479
+ const cats = Math.max(1, model.categories.length);
4480
+ const catW = Math.min(
4481
+ area.w * 0.3,
4482
+ Math.max(...model.categories.map((c2) => textWidth(c2, categorySize)), 8) + 6
4483
+ );
4484
+ const plot = horizontal ? {
4485
+ x: area.x + catW,
4486
+ y: area.y,
4487
+ w: Math.max(1, area.w - catW - 4),
4488
+ h: Math.max(1, area.h - Math.max(16, valueSize * 1.5))
4489
+ } : {
4490
+ x: area.x + labelW,
4491
+ y: area.y + 4,
4492
+ w: Math.max(1, area.w - labelW - 4),
4493
+ h: Math.max(1, area.h - Math.max(20, categorySize * 1.5))
4494
+ };
4495
+ const span = scale.max - scale.min || 1;
4496
+ const value = horizontal ? (v) => plot.x + (v - scale.min) / span * plot.w : (v) => plot.y + plot.h - (v - scale.min) / span * plot.h;
4497
+ const bandSize = (horizontal ? plot.h : plot.w) / cats;
4498
+ const band = horizontal ? (i) => plot.y + plot.h - bandSize * (i + 0.5) : (i) => plot.x + bandSize * (i + 0.5);
4499
+ out.push(chartAreaRect(model, "plotArea", plot));
4500
+ scale.ticks.forEach((t, i) => {
4501
+ const p = value(t);
4502
+ const label = labels[i] ?? "";
4503
+ if (horizontal) {
4504
+ out.push(line(p, plot.y, p, plot.y + plot.h, grid.color, grid.width));
4505
+ if (valueLabels)
4506
+ out.push(
4507
+ text(p, plot.y + plot.h + valueSize + 2, label, { anchor: "middle", ...valueAttrs })
4508
+ );
4509
+ } else {
4510
+ out.push(line(plot.x, p, plot.x + plot.w, p, grid.color, grid.width));
4511
+ if (valueLabels)
4512
+ out.push(text(plot.x - 4, p + valueSize * 0.3, label, { anchor: "end", ...valueAttrs }));
4513
+ }
4514
+ });
4515
+ const zero = value(Math.min(Math.max(0, scale.min), scale.max));
4516
+ if (horizontal) out.push(line(zero, plot.y, zero, plot.y + plot.h, axis.color, axis.width));
4517
+ else out.push(line(plot.x, zero, plot.x + plot.w, zero, axis.color, axis.width));
4518
+ const step = Math.max(
4519
+ 1,
4520
+ Math.ceil(cats / Math.max(1, Math.floor((horizontal ? plot.h : plot.w) / 14)))
4521
+ );
4522
+ model.categories.forEach((c2, i) => {
4523
+ if (!categoryLabels || i % step !== 0) return;
4524
+ const p = band(i);
4525
+ if (horizontal)
4526
+ out.push(
4527
+ text(plot.x - 4, p + categorySize * 0.3, fit(c2, catW - 6, categorySize), {
4528
+ anchor: "end",
4529
+ ...categoryAttrs
4530
+ })
4531
+ );
4532
+ else
4533
+ out.push(
4534
+ text(p, plot.y + plot.h + categorySize + 3, fit(c2, bandSize * step, categorySize), {
4535
+ anchor: "middle",
4536
+ ...categoryAttrs
4537
+ })
4538
+ );
4539
+ });
4540
+ return { plot, value, band, bandSize };
4541
+ }
4542
+ function plotted(model) {
4543
+ if (model.grouping !== "percentStacked") return model.series.map((s) => s.values);
4544
+ const totals = categoryTotals(model);
4545
+ return model.series.map(
4546
+ (s) => s.values.map((v, i) => v === null ? null : v / (totals[i] || 1))
4547
+ );
4548
+ }
4549
+ function linesAndAreas(model, frame, out) {
4550
+ const values = plotted(model);
4551
+ const stacked = model.grouping === "stacked" || model.grouping === "percentStacked";
4552
+ const acc = new Array(model.categories.length).fill(0);
4553
+ const area = model.type === "area";
4554
+ const layers = [];
4555
+ model.series.forEach((s, si) => {
4556
+ const points = [];
4557
+ const lower = [];
4558
+ model.categories.forEach((_, i) => {
4559
+ const v = values[si]?.[i] ?? null;
4560
+ if (v === null && !area) {
4561
+ points.push([NaN, NaN]);
4562
+ return;
4563
+ }
4564
+ const below = stacked ? acc[i] ?? 0 : 0;
4565
+ const top = below + (v ?? 0);
4566
+ if (stacked) acc[i] = top;
4567
+ points.push([frame.band(i), frame.value(top)]);
4568
+ lower.push([frame.band(i), frame.value(below)]);
4569
+ });
4570
+ layers.push({
4571
+ points,
4572
+ lower,
4573
+ color: s.color,
4574
+ filter: s.shadowFilter ? ` filter="${s.shadowFilter}"` : ""
4575
+ });
4576
+ });
4577
+ for (const { points, lower, color, filter } of area ? [...layers].reverse() : layers) {
4578
+ if (area) {
4579
+ const poly = [...points, ...[...lower].reverse()].map(([x, y]) => `${n(x)},${n(y)}`).join(" ");
4580
+ out.push(`<polygon points="${poly}" fill="${color}" fill-opacity="0.85"${filter}/>`);
4581
+ continue;
4582
+ }
4583
+ let segment = [];
4584
+ const flush = () => {
4585
+ if (segment.length > 1)
4586
+ out.push(
4587
+ `<polyline points="${segment.join(" ")}" fill="none" stroke="${color}" stroke-width="2.25" stroke-linejoin="round"${filter}/>`
4588
+ );
4589
+ segment = [];
4590
+ };
4591
+ for (const [x, y] of points) {
4592
+ if (Number.isNaN(x)) flush();
4593
+ else segment.push(`${n(x)},${n(y)}`);
4594
+ }
4595
+ flush();
4596
+ for (const [x, y] of points)
4597
+ if (!Number.isNaN(x))
4598
+ out.push(`<circle cx="${n(x)}" cy="${n(y)}" r="2.5" fill="${color}"${filter}/>`);
4599
+ }
4600
+ }
4601
+ function scatter(model, area, out) {
4602
+ const ys = model.valueAxis;
4603
+ const xs = model.xAxis;
4604
+ if (!ys || !xs) return;
4605
+ const yLabels = ys.ticks.map((t) => formatAxisValue(t));
4606
+ const valueAttrs = chartTextAttributes(model, "valueAxis");
4607
+ const categoryAttrs = chartTextAttributes(model, "categoryAxis");
4608
+ const valueSize = valueAttrs.size ?? 10;
4609
+ const categorySize = categoryAttrs.size ?? 10;
4610
+ const grid = chartStroke(model, "gridlineMajor");
4611
+ const xAxis = chartStroke(model, "categoryAxis");
4612
+ const yAxis = chartStroke(model, "valueAxis");
4613
+ const valueLabels = model.appearance?.valueAxis?.labelsVisible !== false;
4614
+ const categoryLabels = model.appearance?.categoryAxis?.labelsVisible !== false;
4615
+ const labelW = valueLabels ? Math.max(...yLabels.map((l) => textWidth(l, valueSize)), 8) + 6 : 4;
4616
+ const plot = {
4617
+ x: area.x + labelW,
4618
+ y: area.y + 4,
4619
+ w: Math.max(1, area.w - labelW - 8),
4620
+ h: Math.max(1, area.h - Math.max(20, categorySize * 1.5))
4621
+ };
4622
+ const px = (v, s) => plot.x + (v - s.min) / (s.max - s.min || 1) * plot.w;
4623
+ const py = (v, s) => plot.y + plot.h - (v - s.min) / (s.max - s.min || 1) * plot.h;
4624
+ out.push(chartAreaRect(model, "plotArea", plot));
4625
+ ys.ticks.forEach((t, i) => {
4626
+ out.push(line(plot.x, py(t, ys), plot.x + plot.w, py(t, ys), grid.color, grid.width));
4627
+ if (valueLabels)
4628
+ out.push(
4629
+ text(plot.x - 4, py(t, ys) + valueSize * 0.3, yLabels[i] ?? "", {
4630
+ anchor: "end",
4631
+ ...valueAttrs
4632
+ })
4633
+ );
4634
+ });
4635
+ for (const t of xs.ticks) {
4636
+ out.push(
4637
+ line(px(t, xs), plot.y + plot.h, px(t, xs), plot.y + plot.h + 3, xAxis.color, xAxis.width)
4638
+ );
4639
+ if (categoryLabels)
4640
+ out.push(
4641
+ text(px(t, xs), plot.y + plot.h + categorySize + 3, formatAxisValue(t), {
4642
+ anchor: "middle",
4643
+ ...categoryAttrs
4644
+ })
4645
+ );
4646
+ }
4647
+ out.push(
4648
+ line(plot.x, plot.y + plot.h, plot.x + plot.w, plot.y + plot.h, xAxis.color, xAxis.width)
4649
+ );
4650
+ out.push(line(plot.x, plot.y, plot.x, plot.y + plot.h, yAxis.color, yAxis.width));
4651
+ for (const s of model.series)
4652
+ s.values.forEach((v, i) => {
4653
+ const x = s.xValues?.[i] ?? null;
4654
+ if (v === null || x === null) return;
4655
+ out.push(
4656
+ `<circle cx="${n(px(x, xs))}" cy="${n(py(v, ys))}" r="3" fill="${s.pointColors?.[i] ?? s.color}"${s.shadowFilter ? ` filter="${s.shadowFilter}"` : ""}/>`
4657
+ );
4658
+ });
4659
+ }
4660
+ function cartesianSvg(model, area) {
4661
+ const out = [];
4662
+ if (model.type === "scatter") {
4663
+ scatter(model, area, out);
4664
+ return out.join("");
4665
+ }
4666
+ const frame = axes(model, area, out);
4667
+ if (!frame) return "";
4668
+ if (model.type === "bar" || model.type === "column") bars(model, frame, out, plotted(model));
4669
+ else linesAndAreas(model, frame, out);
4670
+ return out.join("");
4671
+ }
4672
+
4673
+ // chart/render/chart-svg-radial.ts
4674
+ var polar = (cx, cy, r, angle) => [
4675
+ cx + r * Math.sin(angle),
4676
+ cy - r * Math.cos(angle)
4677
+ ];
4678
+ function slicePath(cx, cy, r, inner, a0, a1) {
4679
+ const sweep = a1 - a0;
4680
+ if (sweep >= Math.PI * 2 - 1e-9) {
4681
+ const mid = a0 + Math.PI;
4682
+ return slicePath(cx, cy, r, inner, a0, mid) + slicePath(cx, cy, r, inner, mid, a1);
4683
+ }
4684
+ const large = sweep > Math.PI ? 1 : 0;
4685
+ const [x0, y0] = polar(cx, cy, r, a0);
4686
+ const [x1, y1] = polar(cx, cy, r, a1);
4687
+ if (inner <= 0)
4688
+ return `M${n(cx)},${n(cy)} L${n(x0)},${n(y0)} A${n(r)},${n(r)} 0 ${large} 1 ${n(x1)},${n(y1)} Z`;
4689
+ const [ix1, iy1] = polar(cx, cy, inner, a1);
4690
+ const [ix0, iy0] = polar(cx, cy, inner, a0);
4691
+ return `M${n(x0)},${n(y0)} A${n(r)},${n(r)} 0 ${large} 1 ${n(x1)},${n(y1)} L${n(ix1)},${n(iy1)} A${n(inner)},${n(inner)} 0 ${large} 0 ${n(ix0)},${n(iy0)} Z`;
4692
+ }
4693
+ function pieSvg(model, area) {
4694
+ const out = [chartAreaRect(model, "plotArea", area)];
4695
+ const cx = area.x + area.w / 2;
4696
+ const cy = area.y + area.h / 2;
4697
+ const radius = Math.max(1, Math.min(area.w, area.h) / 2 - 4);
4698
+ const rings = model.type === "doughnut" ? model.series : model.series.slice(0, 1);
4699
+ const hole = model.type === "doughnut" ? radius * 0.5 : 0;
4700
+ const ringSize = (radius - hole) / Math.max(1, rings.length);
4701
+ rings.forEach((s, ri) => {
4702
+ const outer = radius - ri * ringSize;
4703
+ const inner = model.type === "doughnut" ? outer - ringSize : 0;
4704
+ const total = s.values.reduce((sum, v) => sum + (v !== null && v > 0 ? v : 0), 0);
4705
+ if (total <= 0) return;
4706
+ let angle = 0;
4707
+ s.values.forEach((v, i) => {
4708
+ if (v === null || v <= 0) return;
4709
+ const sweep = v / total * Math.PI * 2;
4710
+ const color = s.pointColors?.[i] ?? s.color;
4711
+ out.push(
4712
+ `<path d="${slicePath(cx, cy, outer, inner, angle, angle + sweep)}" fill="${color}" stroke="#FFFFFF" stroke-width="1"${s.shadowFilter ? ` filter="${s.shadowFilter}"` : ""}/>`
4713
+ );
4714
+ angle += sweep;
4715
+ });
4716
+ });
4717
+ return out.join("");
4718
+ }
4719
+ function radarSvg(model, area) {
4720
+ const out = [chartAreaRect(model, "plotArea", area)];
4721
+ const scale = model.valueAxis;
4722
+ const count = model.categories.length;
4723
+ if (!scale || count < 1) return "";
4724
+ const valueAttrs = chartTextAttributes(model, "valueAxis", 9);
4725
+ const categoryAttrs = chartTextAttributes(model, "categoryAxis");
4726
+ const valueSize = valueAttrs.size ?? 9;
4727
+ const categorySize = categoryAttrs.size ?? 10;
4728
+ const grid = chartStroke(model, "gridlineMajor");
4729
+ const axis = chartStroke(model, "categoryAxis");
4730
+ const cx = area.x + area.w / 2;
4731
+ const cy = area.y + area.h / 2 + 4;
4732
+ const radius = Math.max(1, Math.min(area.w, area.h) / 2 - Math.max(18, categorySize * 1.8));
4733
+ const angle = (i) => i / count * Math.PI * 2;
4734
+ const r = (v) => (v - scale.min) / (scale.max - scale.min || 1) * radius;
4735
+ const labelEvery = Math.max(
4736
+ 1,
4737
+ Math.ceil(12 / Math.max(1, radius / Math.max(1, scale.ticks.length - 1)))
4738
+ );
4739
+ for (const [k, t] of scale.ticks.entries()) {
4740
+ const ring = Array.from({ length: count }, (_, i) => polar(cx, cy, r(t), angle(i))).map(([x, y]) => `${n(x)},${n(y)}`).join(" ");
4741
+ out.push(
4742
+ `<polygon points="${ring}" fill="none" stroke="${grid.color}" stroke-width="${n(grid.width)}"/>`
4743
+ );
4744
+ if (model.appearance?.valueAxis?.labelsVisible !== false && k % labelEvery === 0)
4745
+ out.push(
4746
+ text(cx + 3, cy - r(t) + valueSize * 0.3, formatAxisValue(t, scale.percent), valueAttrs)
4747
+ );
4748
+ }
4749
+ model.categories.forEach((c2, i) => {
4750
+ const [x, y] = polar(cx, cy, radius, angle(i));
4751
+ out.push(line(cx, cy, x, y, axis.color, axis.width));
4752
+ const [lx, ly] = polar(cx, cy, radius + 10, angle(i));
4753
+ const anchor = Math.abs(lx - cx) < 2 ? "middle" : lx > cx ? "start" : "end";
4754
+ if (model.appearance?.categoryAxis?.labelsVisible !== false)
4755
+ out.push(
4756
+ text(lx, ly + categorySize * 0.3, fit(c2, area.w / 4, categorySize), {
4757
+ anchor,
4758
+ ...categoryAttrs
4759
+ })
4760
+ );
4761
+ });
4762
+ for (const s of model.series) {
4763
+ const points = s.values.slice(0, count).map((v, i) => polar(cx, cy, r(v ?? scale.min), angle(i))).map(([x, y]) => `${n(x)},${n(y)}`).join(" ");
4764
+ out.push(
4765
+ `<polygon points="${points}" fill="none" stroke="${s.color}" stroke-width="2"${s.shadowFilter ? ` filter="${s.shadowFilter}"` : ""}/>`
4766
+ );
4767
+ }
4768
+ return out.join("");
4769
+ }
4770
+
4771
+ // chart/render/chart-svg-text-metrics.ts
4772
+ var CHART_FONT_FAMILY = "Calibri, Carlito, Arial, sans-serif";
4773
+ function cssFont(attrs) {
4774
+ return `${attrs.italic ? "italic" : "normal"} ${attrs.weight ?? "normal"} ${attrs.size ?? 10}px ${attrs.family ?? CHART_FONT_FAMILY}`;
4775
+ }
4776
+ function chartFontMetrics(attrs, options) {
4777
+ const metrics = options.measureFont?.(cssFont(attrs));
4778
+ return metrics && Number.isFinite(metrics.ascent) && Number.isFinite(metrics.descent) && metrics.ascent >= 0 && metrics.descent >= 0 && metrics.ascent + metrics.descent > 0 ? metrics : void 0;
4779
+ }
4780
+ function chartTextWidth(content, attrs, options) {
4781
+ const width = options.measureText?.(content, cssFont(attrs));
4782
+ return width !== void 0 && Number.isFinite(width) && width >= 0 ? width : textWidth(content, attrs.size);
4783
+ }
4784
+ function fitChartText(content, maxWidth, attrs, options) {
4785
+ if (!options.measureText) return fit(content, maxWidth, attrs.size);
4786
+ if (chartTextWidth(content, attrs, options) <= maxWidth) return content;
4787
+ const points = [...content];
4788
+ let low = 0;
4789
+ let high = points.length;
4790
+ while (low < high) {
4791
+ const mid = Math.ceil((low + high) / 2);
4792
+ if (chartTextWidth(`${points.slice(0, mid).join("")}\u2026`, attrs, options) <= maxWidth) low = mid;
4793
+ else high = mid - 1;
4794
+ }
4795
+ return `${points.slice(0, low).join("")}\u2026`;
4796
+ }
4797
+
4798
+ // chart/render/chart-svg-legend.ts
4799
+ function chartLegendSvg(model, area, frame, options) {
4800
+ const automatic = [];
4801
+ const bounds = {};
4802
+ const reserved = automaticLegend(model, area, automatic, options, bounds);
4803
+ const plot = model.legendOverlay ? area : reserved;
4804
+ const box = bounds.box;
4805
+ if (!box) return { plot, markup: "", foreground: false };
4806
+ const manual = resolveManualLayoutRect(model.legendLayout, frame, {
4807
+ x: box.x,
4808
+ y: box.y,
4809
+ width: box.w,
4810
+ height: box.h
4811
+ });
4812
+ if (!manual) return { plot, markup: automatic.join(""), foreground: !!model.legendOverlay };
4813
+ const entries = legendEntries(model);
4814
+ const attrs = chartTextAttributes(model, "legend");
4815
+ const size = attrs.size ?? 10;
4816
+ const font = chartFontMetrics(attrs, options);
4817
+ const keySize = size / 2;
4818
+ const keyGap = size / 4;
4819
+ const widths = entries.map(
4820
+ (entry3) => chartTextWidth(entry3.label, attrs, options) + keySize + keyGap
4821
+ );
4822
+ const horizontal = manual.width > manual.height && widths.reduce((sum, width) => sum + width, 0) + size <= manual.width;
4823
+ const rowWidth = horizontal ? manual.width / entries.length : manual.width;
4824
+ const rowHeight = horizontal ? manual.height : manual.height / entries.length;
4825
+ const horizontalGap = Math.max(
4826
+ 0,
4827
+ (manual.width - widths.reduce((sum, width) => sum + width, 0)) / (entries.length + 1)
4828
+ );
4829
+ let horizontalX = manual.x + horizontalGap;
4830
+ const markup = [
4831
+ chartAreaRect(model, "legend", { x: manual.x, y: manual.y, w: manual.width, h: manual.height })
4832
+ ];
4833
+ const baselineOffset = font ? (font.ascent - font.descent) / 2 : size * 0.35;
4834
+ entries.forEach((entry3, i) => {
4835
+ const available = horizontal ? chartTextWidth(entry3.label, attrs, options) : Math.max(0, rowWidth - size / 2 - keySize - keyGap);
4836
+ const label = fitChartText(entry3.label, available, attrs, options);
4837
+ const contentWidth = Math.min(
4838
+ horizontal ? widths[i] ?? 0 : Math.max(...widths),
4839
+ rowWidth - size / 2
4840
+ );
4841
+ const x = horizontal ? horizontalX : manual.x + Math.max(size / 4, (rowWidth - contentWidth) / 2);
4842
+ const centerY = manual.y + (horizontal ? 0 : i * rowHeight) + rowHeight / 2;
4843
+ markup.push(rect(x, centerY - keySize / 2, keySize, keySize, entry3.color));
4844
+ markup.push(text(x + keySize + keyGap, centerY + baselineOffset, label, attrs));
4845
+ if (horizontal) horizontalX += (widths[i] ?? 0) + horizontalGap;
4846
+ });
4847
+ return {
4848
+ plot,
4849
+ markup: `<g data-chart-legend-layout="true">${markup.join("")}</g>`,
4850
+ foreground: true
4851
+ };
4852
+ }
4853
+ function legendEntries(model) {
4854
+ if (model.type === "pie" || model.type === "doughnut") {
4855
+ const first2 = model.series[0];
4856
+ return model.categories.map((label, i) => ({
4857
+ label,
4858
+ color: first2?.pointColors?.[i] ?? first2?.color ?? "#4472C4"
4859
+ }));
4860
+ }
4861
+ return model.series.map((s) => ({ label: s.name, color: s.color }));
4862
+ }
4863
+ function automaticLegend(model, area, out, options, bounds) {
4864
+ const entries = legendEntries(model);
4865
+ if (!model.showLegend || entries.length === 0) return area;
4866
+ const pos = model.legendPosition;
4867
+ const attrs = chartTextAttributes(model, "legend");
4868
+ const size = attrs.size ?? 10;
4869
+ const rowH = Math.max(16, size * 1.4);
4870
+ if (pos === "t" || pos === "b") {
4871
+ const widths = entries.map(
4872
+ (e) => Math.min(chartTextWidth(e.label, attrs, options) + 20, area.w / 2)
4873
+ );
4874
+ const total = widths.reduce((a2, b) => a2 + b, 0);
4875
+ let x2 = area.x + Math.max(0, (area.w - total) / 2);
4876
+ const y = pos === "t" ? area.y + 4 : area.y + area.h - rowH + 4;
4877
+ bounds.box = { x: x2 - 4, y: y - 4, w: Math.min(total, area.w) + 8, h: rowH + 4 };
4878
+ out.push(
4879
+ chartAreaRect(model, "legend", {
4880
+ x: x2 - 4,
4881
+ y: y - 4,
4882
+ w: Math.min(total, area.w) + 8,
4883
+ h: rowH + 4
4884
+ })
4885
+ );
4886
+ entries.forEach((e, i) => {
4887
+ const w = widths[i] ?? 0;
4888
+ out.push(rect(x2, y, 8, 8, e.color));
4889
+ out.push(text(x2 + 12, y + 8, fitChartText(e.label, w - 16, attrs, options), attrs));
4890
+ x2 += w;
4891
+ });
4892
+ return pos === "t" ? { x: area.x, y: area.y + rowH + 4, w: area.w, h: area.h - rowH - 4 } : { x: area.x, y: area.y, w: area.w, h: area.h - rowH - 4 };
4893
+ }
4894
+ const width = Math.min(
4895
+ area.w * 0.35,
4896
+ Math.max(...entries.map((e) => chartTextWidth(e.label, attrs, options))) + 22
4897
+ );
4898
+ const height = entries.length * rowH;
4899
+ const x = pos === "l" ? area.x + 4 : area.x + area.w - width;
4900
+ const y0 = pos === "tr" ? area.y + 4 : area.y + Math.max(0, (area.h - height) / 2);
4901
+ bounds.box = { x: x - 4, y: y0, w: width + 4, h: Math.min(height, area.y + area.h - y0) };
4902
+ out.push(
4903
+ chartAreaRect(model, "legend", {
4904
+ x: x - 4,
4905
+ y: y0,
4906
+ w: width + 4,
4907
+ h: Math.min(height, area.y + area.h - y0)
4908
+ })
4909
+ );
4910
+ entries.forEach((e, i) => {
4911
+ const y = y0 + i * rowH;
4912
+ if (y + rowH > area.y + area.h + 2) return;
4913
+ out.push(rect(x, y + 3, 8, 8, e.color));
4914
+ out.push(text(x + 12, y + 11, fitChartText(e.label, width - 16, attrs, options), attrs));
4915
+ });
4916
+ return pos === "l" ? { x: area.x + width + 8, y: area.y, w: area.w - width - 8, h: area.h } : { x: area.x, y: area.y, w: area.w - width - 8, h: area.h };
4917
+ }
4918
+
4919
+ // text/wrap-styled-runs.ts
4920
+ var graphemes = new Intl.Segmenter(void 0, { granularity: "grapheme" });
4921
+ function wrapStyledRuns(runs, maxWidth, measure, options = {}) {
4922
+ const groups = [];
4923
+ for (const [source, run2] of runs.entries()) {
4924
+ for (const token of run2.text.split(/(\r\n|[\r\n]|[ \t]+)/u).filter(Boolean)) {
4925
+ const kind = /^[\r\n]+$/u.test(token) ? "break" : /^[ \t]+$/u.test(token) ? "space" : "word";
4926
+ let group = groups.at(-1);
4927
+ if (!group || group.kind !== kind || kind === "break") {
4928
+ group = { kind, pieces: [] };
4929
+ groups.push(group);
4930
+ }
4931
+ if (kind !== "break") group.pieces.push({ run: run2, source, text: token });
4932
+ }
4933
+ }
4934
+ const merged = (left, right) => {
4935
+ const result2 = left.map((piece) => ({ ...piece }));
4936
+ for (const piece of right) {
4937
+ const last = result2.at(-1);
4938
+ if (last?.source === piece.source) last.text += piece.text;
4939
+ else result2.push({ ...piece });
4940
+ }
4941
+ return result2;
4942
+ };
4943
+ const width = (pieces) => pieces.reduce((sum, piece) => {
4944
+ const advance = measure(piece.text, piece.run);
4945
+ return sum + (Number.isFinite(advance) && advance >= 0 ? advance : 0);
4946
+ }, 0);
4947
+ const result = [];
4948
+ let line2 = [];
4949
+ let spaces = [];
4950
+ const flush = () => {
4951
+ result.push(line2.map((piece) => ({ ...piece.run, text: piece.text })));
4952
+ line2 = [];
4953
+ spaces = [];
4954
+ };
4955
+ for (const group of groups) {
4956
+ if (group.kind === "break") {
4957
+ flush();
4958
+ continue;
4959
+ }
4960
+ if (group.kind === "space") {
4961
+ spaces = group.pieces;
4962
+ continue;
4963
+ }
4964
+ const separator = line2.length ? spaces : [];
4965
+ const wordWidth = width(group.pieces);
4966
+ if (line2.length && width(merged(line2, [...separator, ...group.pieces])) > maxWidth) flush();
4967
+ else line2 = merged(line2, separator);
4968
+ spaces = [];
4969
+ if (options.breakWords && wordWidth > maxWidth) {
4970
+ for (const piece of group.pieces) {
4971
+ for (const { segment } of graphemes.segment(piece.text)) {
4972
+ const next = { ...piece, text: segment };
4973
+ if (line2.length && width(merged(line2, [next])) > maxWidth) flush();
4974
+ line2 = merged(line2, [next]);
4975
+ }
4976
+ }
4977
+ } else line2 = merged(line2, group.pieces);
4978
+ }
4979
+ flush();
4980
+ return result;
4981
+ }
4982
+
4983
+ // chart/render/chart-svg-title-text.ts
4984
+ function spacing2(value, naturalHeight, fallback) {
4985
+ return value ? value.unit === "points" ? chartPointsToPixels(value.value) : naturalHeight * value.value : fallback;
4986
+ }
4987
+ function chartRichTitleSvg(model, width, options = {}, frameHeight = 400) {
4988
+ if (!model.title) return void 0;
4989
+ const base = chartTextAttributes(model, "title", 14);
4990
+ const capacity = Math.max(1, width * 0.8 - 8);
4991
+ if (!model.titleText && !hasManualLayoutFields(model.titleLayout) && !model.titleOverlay && !model.title.includes("\n") && chartTextWidth(model.title, base, options) <= capacity)
4992
+ return void 0;
4993
+ const paragraphs = model.titleText?.paragraphs ?? [
4994
+ {
4995
+ runs: [{ text: model.title, appearance: model.appearance?.title ?? {} }]
4996
+ }
4997
+ ];
4998
+ const hardLines = [];
4999
+ for (const paragraph2 of paragraphs) {
5000
+ let line2 = {
5001
+ ...paragraph2,
5002
+ runs: []
5003
+ };
5004
+ hardLines.push(line2);
5005
+ for (const run2 of paragraph2.runs) {
5006
+ const pieces = run2.text.split("\n");
5007
+ for (const [index, piece] of pieces.entries()) {
5008
+ if (index) {
5009
+ line2 = { ...paragraph2, runs: [] };
5010
+ hardLines.push(line2);
5011
+ }
5012
+ if (piece) line2.runs.push({ ...run2, text: piece });
5013
+ }
5014
+ }
5015
+ }
5016
+ const lines = hardLines.flatMap((line2) => {
5017
+ const wrapped = wrapStyledRuns(
5018
+ line2.runs,
5019
+ capacity,
5020
+ (content, run2) => chartTextWidth(
5021
+ content,
5022
+ chartTextAttributes(
5023
+ { ...model, appearance: { title: run2.appearance } },
5024
+ "title",
5025
+ base.size
5026
+ ),
5027
+ options
5028
+ ),
5029
+ { breakWords: true }
5030
+ );
5031
+ const { spaceBefore, spaceAfter, ...properties2 } = line2;
5032
+ return wrapped.map((runs, index) => ({
5033
+ ...properties2,
5034
+ runs,
5035
+ ...index === 0 && spaceBefore ? { spaceBefore } : {},
5036
+ ...index === wrapped.length - 1 && spaceAfter ? { spaceAfter } : {}
5037
+ }));
5038
+ });
5039
+ const metrics = lines.map((line2) => {
5040
+ const runs = line2.runs.map((run2) => ({
5041
+ ...run2,
5042
+ attrs: chartTextAttributes(
5043
+ { ...model, appearance: { title: run2.appearance } },
5044
+ "title",
5045
+ base.size
5046
+ )
5047
+ }));
5048
+ return {
5049
+ ...line2,
5050
+ runs,
5051
+ width: runs.reduce((sum, run2) => sum + chartTextWidth(run2.text, run2.attrs, options), 0),
5052
+ size: runs.length ? Math.max(...runs.map((run2) => run2.attrs.size ?? 14)) : base.size ?? 14,
5053
+ fontMetrics: (runs.length ? runs.map((run2) => run2.attrs) : [base]).map(
5054
+ (attrs) => chartFontMetrics(attrs, options)
5055
+ )
5056
+ };
5057
+ });
5058
+ const measured = metrics.every((line2) => line2.fontMetrics.every((font) => font !== void 0));
5059
+ const vertical = metrics.map((line2) => {
5060
+ const ascent = measured ? Math.max(...line2.fontMetrics.map((font) => font.ascent)) : line2.size;
5061
+ const descent = measured ? Math.max(...line2.fontMetrics.map((font) => font.descent)) : line2.size * 0.4 + 4;
5062
+ const natural = ascent + descent;
5063
+ const height2 = spacing2(line2.lineSpacing, natural, natural);
5064
+ const leading = (height2 - natural) / 2;
5065
+ return {
5066
+ ascent: ascent + leading,
5067
+ descent: descent + leading,
5068
+ height: height2,
5069
+ before: spacing2(line2.spaceBefore, natural, 0),
5070
+ after: spacing2(line2.spaceAfter, natural, 0),
5071
+ leading
5072
+ };
5073
+ });
5074
+ const boxWidth = Math.min(width - 16, Math.max(0, ...metrics.map((line2) => line2.width)) + 8);
5075
+ const height = vertical.reduce(
5076
+ (sum, line2) => sum + line2.height + line2.before + line2.after,
5077
+ measured ? 4 : 0
5078
+ );
5079
+ let baseline = 8 + (metrics[0]?.size ?? base.size ?? 14) + (vertical[0]?.before ?? 0) + (vertical[0]?.leading ?? 0);
5080
+ const spans = [];
5081
+ for (const [index, line2] of metrics.entries()) {
5082
+ if (index)
5083
+ baseline += vertical[index - 1].descent + vertical[index - 1].after + vertical[index].before + vertical[index].ascent;
5084
+ let x = line2.align === "l" ? (width - boxWidth) / 2 + 4 : line2.align === "r" ? (width + boxWidth) / 2 - 4 - line2.width : (width - line2.width) / 2;
5085
+ for (const run2 of line2.runs) {
5086
+ spans.push(
5087
+ text(x, baseline, run2.text, {
5088
+ ...run2.attrs,
5089
+ anchor: "start"
5090
+ }).replace("<text ", '<tspan data-chart-title-run="true" ').replace("</text>", "</tspan>")
5091
+ );
5092
+ x += chartTextWidth(run2.text, run2.attrs, options);
5093
+ }
5094
+ }
5095
+ const parent = text(0, 0, "", { ...base, underline: false }).replace(
5096
+ "</text>",
5097
+ `${spans.join("")}</text>`
5098
+ );
5099
+ const markup = chartAreaRect(model, "title", {
5100
+ x: (width - boxWidth) / 2,
5101
+ y: 4,
5102
+ w: Math.max(0, boxWidth),
5103
+ h: height
5104
+ }) + parent;
5105
+ const automatic = { x: (width - boxWidth) / 2, y: 4, width: boxWidth, height };
5106
+ const manual = resolveManualLayoutRect(
5107
+ model.titleLayout,
5108
+ { width, height: frameHeight },
5109
+ automatic
5110
+ );
5111
+ return {
5112
+ markup: manual ? `<g data-chart-title-layout="true" transform="translate(${n(manual.x - automatic.x)} ${n(manual.y - automatic.y)})">${markup}</g>` : markup,
5113
+ height: Math.max(24, height)
5114
+ };
5115
+ }
5116
+
5117
+ // chart/render/chart-svg.ts
5118
+ function renderChartSvg(model, width, height, options = {}) {
5119
+ const paint = chartGradientPaint(model, Math.max(1, width), Math.max(1, height));
5120
+ model = paint.model;
5121
+ const w = Math.max(1, width);
5122
+ const h = Math.max(1, height);
5123
+ const out = [];
5124
+ let foregroundTitle = "";
5125
+ out.push(
5126
+ `<svg xmlns="http://www.w3.org/2000/svg" width="${n(w)}" height="${n(h)}" viewBox="0 0 ${n(w)} ${n(h)}" font-family="${esc(CHART_FONT_FAMILY)}" role="img">`
5127
+ );
5128
+ if (model.title) out.push(`<title>${esc(model.title)}</title>`);
5129
+ if (paint.defs) out.push(paint.defs);
5130
+ out.push(chartAreaRect(model, "chartArea", { x: 0, y: 0, w, h }));
5131
+ let area = { x: 8, y: 8, w: w - 16, h: h - 16 };
5132
+ const richTitle = chartRichTitleSvg(model, w, options, h);
5133
+ if (richTitle) {
5134
+ if (model.titleLayout || model.titleOverlay) foregroundTitle = richTitle.markup;
5135
+ else out.push(richTitle.markup);
5136
+ if (!model.titleOverlay)
5137
+ area = { ...area, y: area.y + richTitle.height, h: area.h - richTitle.height };
5138
+ } else if (model.title) {
5139
+ const attrs = chartTextAttributes(model, "title", 14);
5140
+ const size = attrs.size ?? 14;
5141
+ const label = fitChartText(model.title, w - 16, attrs, options);
5142
+ const titleWidth = Math.min(w - 16, chartTextWidth(label, attrs, options) + 8);
5143
+ const font = chartFontMetrics(attrs, options);
5144
+ const titleHeight = Math.max(24, font ? font.ascent + font.descent + 4 : size * 1.4 + 4);
5145
+ out.push(
5146
+ chartAreaRect(model, "title", {
5147
+ x: (w - titleWidth) / 2,
5148
+ y: 4,
5149
+ w: Math.max(0, titleWidth),
5150
+ h: font ? font.ascent + font.descent + 4 : size * 1.4 + 4
5151
+ })
5152
+ );
5153
+ out.push(
5154
+ text(w / 2, 8 + size, label, {
5155
+ anchor: "middle",
5156
+ fill: "#404040",
5157
+ ...attrs
5158
+ })
5159
+ );
5160
+ if (!model.titleOverlay)
5161
+ area = { x: area.x, y: area.y + titleHeight, w: area.w, h: area.h - titleHeight };
5162
+ }
5163
+ if (!model.supported) {
5164
+ out.push(
5165
+ text(w / 2, area.y + area.h / 2, `${model.type} charts are not drawn`, { anchor: "middle" })
5166
+ );
5167
+ if (foregroundTitle) out.push(foregroundTitle);
5168
+ out.push("</svg>");
5169
+ return out.join("");
5170
+ }
5171
+ const legend = chartLegendSvg(model, area, { width: w, height: h }, options);
5172
+ area = legend.plot;
5173
+ if (!legend.foreground) out.push(legend.markup);
5174
+ if (area.w > 4 && area.h > 4) {
5175
+ if (model.type === "pie" || model.type === "doughnut") out.push(pieSvg(model, area));
5176
+ else if (model.type === "radar") out.push(radarSvg(model, area));
5177
+ else out.push(cartesianSvg(model, area));
5178
+ }
5179
+ if (legend.foreground) out.push(legend.markup);
5180
+ if (foregroundTitle) out.push(foregroundTitle);
5181
+ out.push("</svg>");
5182
+ return out.join("");
5183
+ }
5184
+
5185
+ // chart/render/render-space.ts
5186
+ var DRAWN_CHART_TYPES = /* @__PURE__ */ new Set([
5187
+ "bar",
5188
+ "column",
5189
+ "line",
5190
+ "area",
5191
+ "pie",
5192
+ "doughnut",
5193
+ "scatter",
5194
+ "radar"
5195
+ ]);
5196
+ function chartThemePalette(theme, fonts = {}) {
5197
+ return {
5198
+ colors: THEME_SLOTS.map(
5199
+ (slot, index) => themeSlotHex(theme?.colors[slot]) ?? DEFAULT_THEME_COLORS[index] ?? "000000"
5200
+ ),
5201
+ majorFont: fonts.major ?? "Calibri Light",
5202
+ minorFont: fonts.minor ?? "Calibri"
5203
+ };
5204
+ }
5205
+ function chartSpaceKind(space) {
5206
+ if (!space.plotArea.groups.length) return { drawn: false };
5207
+ const type = chartSummaryFromSpace(space).chartType;
5208
+ return { type, drawn: DRAWN_CHART_TYPES.has(type) };
5209
+ }
5210
+ function renderChartSpaceSvg(space, options) {
5211
+ const { width, height, theme, fonts, formatting, colorPalette, styleDefinition, ...svg } = options;
5212
+ const summary = chartSummaryFromSpace(space, {
5213
+ ...formatting ? { formatting } : {},
5214
+ ...colorPalette !== void 0 ? { colorPalette } : {},
5215
+ ...styleDefinition ? { styleDefinition } : {}
5216
+ });
5217
+ const view = chartSummaryView(summary, chartThemePalette(theme, fonts));
5218
+ return renderChartSvg(view, width, height, svg);
5219
+ }
5220
+
2314
5221
  exports.BEST_FIT_EDGE_TOLERANCE = BEST_FIT_EDGE_TOLERANCE;
2315
5222
  exports.BEST_FIT_OUTSIDE_GAP = BEST_FIT_OUTSIDE_GAP;
2316
5223
  exports.BEST_FIT_RIM_INSET = BEST_FIT_RIM_INSET;
@@ -2318,20 +5225,35 @@ exports.CHART_COLOR_PALETTES = CHART_COLOR_PALETTES;
2318
5225
  exports.CHART_COLOR_STYLE_CONTENT_TYPE = CHART_COLOR_STYLE_CONTENT_TYPE;
2319
5226
  exports.CHART_COLOR_STYLE_NS = CHART_COLOR_STYLE_NS;
2320
5227
  exports.CHART_COLOR_STYLE_REL = CHART_COLOR_STYLE_REL;
5228
+ exports.CHART_GROUP_ELEMENTS = CHART_GROUP_ELEMENTS;
2321
5229
  exports.CHART_STYLE_PARTS = CHART_STYLE_PARTS;
5230
+ exports.DEFAULT_BAR_GAP_WIDTH = DEFAULT_BAR_GAP_WIDTH;
5231
+ exports.DEFAULT_THEME_COLORS = DEFAULT_THEME_COLORS;
5232
+ exports.DRAWN_CHART_TYPES = DRAWN_CHART_TYPES;
2322
5233
  exports.LABEL_COLLISION_GAP = LABEL_COLLISION_GAP;
5234
+ exports.THEME_SLOTS = THEME_SLOTS;
2323
5235
  exports.aggregateByCategory = aggregateByCategory;
2324
5236
  exports.assertBarClusterOptions = assertBarClusterOptions;
5237
+ exports.autoSeriesColor = autoSeriesColor;
2325
5238
  exports.axisTargetIntervals = axisTargetIntervals;
2326
5239
  exports.buildChartGradientDef = buildChartGradientDef;
2327
5240
  exports.builtInChartStyleXml = builtInChartStyleXml;
2328
5241
  exports.builtInChartTextStyle = builtInChartTextStyle;
5242
+ exports.categoryTotals = categoryTotals;
5243
+ exports.chartCacheValues = chartCacheValues;
5244
+ exports.chartColorScheme = chartColorScheme;
2329
5245
  exports.chartColorStyleId = chartColorStyleId;
2330
5246
  exports.chartColorStyleXml = chartColorStyleXml;
2331
5247
  exports.chartGradientMarkup = chartGradientMarkup;
2332
5248
  exports.chartPaletteColors = chartPaletteColors;
2333
5249
  exports.chartPaletteSeriesColor = chartPaletteSeriesColor;
2334
5250
  exports.chartPaletteSeriesColorChoice = chartPaletteSeriesColorChoice;
5251
+ exports.chartSourceValues = chartSourceValues;
5252
+ exports.chartSpaceKind = chartSpaceKind;
5253
+ exports.chartSummaryFromSpace = chartSummaryFromSpace;
5254
+ exports.chartSummarySeries = chartSummarySeries;
5255
+ exports.chartSummaryView = chartSummaryView;
5256
+ exports.chartThemePalette = chartThemePalette;
2335
5257
  exports.clusteredBarGeometry = clusteredBarGeometry;
2336
5258
  exports.computeBoxStats = computeBoxStats;
2337
5259
  exports.computeHistogramBins = computeHistogramBins;
@@ -2350,9 +5272,11 @@ exports.formatPowerEquation = formatPowerEquation;
2350
5272
  exports.formatTrendlineCoefficient = formatTrendlineCoefficient;
2351
5273
  exports.groupRowsByCategory = groupRowsByCategory;
2352
5274
  exports.hasManualLayoutFields = hasManualLayoutFields;
5275
+ exports.modulateLuminance = modulateLuminance;
2353
5276
  exports.niceAxisStep = niceAxisStep;
2354
5277
  exports.niceValueAxisBounds = niceValueAxisBounds;
2355
5278
  exports.nudgeOutsideLabels = nudgeOutsideLabels;
5279
+ exports.parseChartSpace = parseChartSpace;
2356
5280
  exports.placeBestFitLabel = placeBestFitLabel;
2357
5281
  exports.radarAngle = radarAngle;
2358
5282
  exports.radarRingPoints = radarRingPoints;
@@ -2360,7 +5284,10 @@ exports.readBuiltInChartStyle = readBuiltInChartStyle;
2360
5284
  exports.readChartFormatting = readChartFormatting;
2361
5285
  exports.readChartManualLayoutValues = readChartManualLayoutValues;
2362
5286
  exports.readChartStyle = readChartStyle;
5287
+ exports.readDisplayNaAsBlank = readDisplayNaAsBlank;
2363
5288
  exports.removeGradientStop = removeGradientStop;
5289
+ exports.renderChartSpaceSvg = renderChartSpaceSvg;
5290
+ exports.renderChartSvg = renderChartSvg;
2364
5291
  exports.resolveBlankDisplay = resolveBlankDisplay;
2365
5292
  exports.resolveChartGradient = resolveChartGradient;
2366
5293
  exports.resolveChartStyleDefinition = resolveChartStyleDefinition;
@@ -2368,6 +5295,7 @@ exports.resolveManualLayoutRect = resolveManualLayoutRect;
2368
5295
  exports.scottBinCount = scottBinCount;
2369
5296
  exports.sortGradientStops = sortGradientStops;
2370
5297
  exports.squarify = squarify;
5298
+ exports.themeColor = themeColor;
2371
5299
  exports.updateGradientStop = updateGradientStop;
2372
5300
  exports.visibleRuns = visibleRuns;
2373
5301
  exports.withChartGradientDirection = withChartGradientDirection;
@@ -2375,3 +5303,4 @@ exports.withinLinearTransform = withinLinearTransform;
2375
5303
  exports.writeChartAxisFormatting = writeChartAxisFormatting;
2376
5304
  exports.writeChartFillFormatting = writeChartFillFormatting;
2377
5305
  exports.writeChartLayoutFormatting = writeChartLayoutFormatting;
5306
+ exports.writeChartSpace = writeChartSpace;