ooxml-core 1.1.0 → 1.2.0

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