ooxml-ui 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 (159) hide show
  1. package/README.md +38 -36
  2. package/custom-elements.json +211 -4
  3. package/dist/chrome/ruler.d.ts +60 -2
  4. package/dist/chrome/ruler.d.ts.map +1 -1
  5. package/dist/chrome/status-bar.d.ts +3 -1
  6. package/dist/chrome/status-bar.d.ts.map +1 -1
  7. package/dist/{chunk-M5DTJSOV.js → chunk-7FNDOWTX.js} +393 -15
  8. package/dist/{chunk-KVKKXRL7.js → chunk-AYXFLBSV.js} +92 -13
  9. package/dist/{chunk-X7RINDJQ.js → chunk-JAJFLFAV.js} +1 -1
  10. package/dist/{chunk-3FPW7M6U.js → chunk-VUB44CAJ.js} +1 -1
  11. package/dist/{chunk-JFJXBYRD.js → chunk-XNCWB2X6.js} +5 -0
  12. package/dist/{chunk-BEN3453I.js → chunk-Y2E22JVO.js} +1 -1
  13. package/dist/{chunk-USDLALB5.js → chunk-YK2DPYMU.js} +1 -1
  14. package/dist/{chunk-ZU7GX4SY.js → chunk-YP5S7DTT.js} +6 -5
  15. package/dist/comments/comments-pane.d.ts +116 -0
  16. package/dist/comments/comments-pane.d.ts.map +1 -0
  17. package/dist/comments/types.d.ts +80 -0
  18. package/dist/comments/types.d.ts.map +1 -0
  19. package/dist/controls.d.ts +4 -2
  20. package/dist/controls.d.ts.map +1 -1
  21. package/dist/controls.js +4 -4
  22. package/dist/docx/comments-panel.d.ts +8 -1
  23. package/dist/docx/image-media.d.ts +1 -1
  24. package/dist/docx/locales/en-ribbon.d.ts +1 -0
  25. package/dist/docx/locales/en.d.ts +1 -0
  26. package/dist/docx/localization-strings.d.ts +1 -0
  27. package/dist/docx/localization.d.ts +7 -0
  28. package/dist/docx/print-layout.d.ts +2 -2
  29. package/dist/docx/print-picture.d.ts +12 -0
  30. package/dist/docx/review-controller.d.ts +2 -0
  31. package/dist/docx/ruler.d.ts +7 -10
  32. package/dist/docx.js +282 -322
  33. package/dist/form/gradient-preset-gallery.d.ts +2 -2
  34. package/dist/index.d.ts +1 -1
  35. package/dist/index.js +8 -8
  36. package/dist/pptx/{chart-3d-view-scene-2KRQ5667.mjs → chart-3d-view-scene-6B5TOWB6.mjs} +3 -3
  37. package/dist/pptx/{chart-3d-view-scene-36DMZWZ3.cjs → chart-3d-view-scene-MJ6YNT56.cjs} +37 -37
  38. package/dist/pptx/{chunk-YOGDIDPB.mjs → chunk-AWKKC3VW.mjs} +8 -2
  39. package/dist/pptx/{chunk-CJU4P5FT.cjs → chunk-STKGUT5S.cjs} +18 -12
  40. package/dist/pptx/{chunk-YHA6XAB3.cjs → chunk-XIQMFSNG.cjs} +1 -1
  41. package/dist/pptx/{chunk-YARCML7O.mjs → chunk-XQVKQD5Z.mjs} +294 -265
  42. package/dist/pptx/{chunk-Y2W4SZER.mjs → chunk-YI5LH5NN.mjs} +479 -336
  43. package/dist/pptx/{chunk-ADOC5JLI.mjs → chunk-YMTQLZ2I.mjs} +1 -1
  44. package/dist/pptx/{chunk-AIL3BNZS.cjs → chunk-YRHK45AB.cjs} +301 -265
  45. package/dist/pptx/{chunk-KPZWYF44.cjs → chunk-ZK344LOB.cjs} +629 -479
  46. package/dist/pptx/dom/elements/chart.d.ts +2 -3
  47. package/dist/pptx/dom/elements/chart.d.ts.map +1 -1
  48. package/dist/pptx/dom/elements/table.d.ts.map +1 -1
  49. package/dist/pptx/dom/index.cjs +254 -243
  50. package/dist/pptx/dom/index.mjs +26 -15
  51. package/dist/pptx/export/html2canvas-clone.cjs +2 -2
  52. package/dist/pptx/export/html2canvas-clone.mjs +1 -1
  53. package/dist/pptx/index.cjs +3025 -2993
  54. package/dist/pptx/index.mjs +4 -4
  55. package/dist/pptx/render/chart-axis-range.d.ts +7 -0
  56. package/dist/pptx/render/chart-axis-range.d.ts.map +1 -1
  57. package/dist/pptx/render/chart-axis-render.d.ts +3 -1
  58. package/dist/pptx/render/chart-axis-render.d.ts.map +1 -1
  59. package/dist/pptx/render/chart-axis-style.d.ts +5 -0
  60. package/dist/pptx/render/chart-axis-style.d.ts.map +1 -1
  61. package/dist/pptx/render/chart-axis.d.ts +1 -1
  62. package/dist/pptx/render/chart-axis.d.ts.map +1 -1
  63. package/dist/pptx/render/chart-cartesian-axes.d.ts.map +1 -1
  64. package/dist/pptx/render/chart-cartesian-bars.d.ts +3 -3
  65. package/dist/pptx/render/chart-cartesian-bars.d.ts.map +1 -1
  66. package/dist/pptx/render/chart-cartesian-percent-stacked.d.ts.map +1 -1
  67. package/dist/pptx/render/chart-cartesian.d.ts.map +1 -1
  68. package/dist/pptx/render/chart-combo-stock.cjs +3 -3
  69. package/dist/pptx/render/chart-combo-stock.mjs +1 -1
  70. package/dist/pptx/render/chart-combo.d.ts.map +1 -1
  71. package/dist/pptx/render/chart-gridlines-toggle.d.ts +13 -1
  72. package/dist/pptx/render/chart-gridlines-toggle.d.ts.map +1 -1
  73. package/dist/pptx/render/chart-helpers.d.ts +13 -13
  74. package/dist/pptx/render/chart-helpers.d.ts.map +1 -1
  75. package/dist/pptx/render/chart-horizontal-bars-helpers.d.ts +7 -3
  76. package/dist/pptx/render/chart-horizontal-bars-helpers.d.ts.map +1 -1
  77. package/dist/pptx/render/chart-horizontal-bars.d.ts.map +1 -1
  78. package/dist/pptx/render/chart-interaction-stacked.d.ts.map +1 -1
  79. package/dist/pptx/render/chart-overlays.cjs +7 -7
  80. package/dist/pptx/render/chart-overlays.mjs +1 -1
  81. package/dist/pptx/render/chart-palette.d.ts +5 -14
  82. package/dist/pptx/render/chart-palette.d.ts.map +1 -1
  83. package/dist/pptx/render/chart-quick-action-styles.d.ts +5 -3
  84. package/dist/pptx/render/chart-quick-action-styles.d.ts.map +1 -1
  85. package/dist/pptx/render/chart-scatter-x-axis.d.ts.map +1 -1
  86. package/dist/pptx/render/chart-style-palette.d.ts +52 -0
  87. package/dist/pptx/render/chart-style-palette.d.ts.map +1 -0
  88. package/dist/pptx/render/chart-surface-treemap.cjs +4 -4
  89. package/dist/pptx/render/chart-surface-treemap.mjs +1 -1
  90. package/dist/pptx/render/chart-view-model-bars.d.ts +31 -1
  91. package/dist/pptx/render/chart-view-model-bars.d.ts.map +1 -1
  92. package/dist/pptx/render/chart-view-model-build.d.ts.map +1 -1
  93. package/dist/pptx/render/chart-view-model.cjs +53 -41
  94. package/dist/pptx/render/chart-view-model.mjs +1 -1
  95. package/dist/pptx/render/chart-waterfall-map.cjs +6 -6
  96. package/dist/pptx/render/chart-waterfall-map.mjs +1 -1
  97. package/dist/pptx/render/foreign-object-svg-document.d.ts +12 -0
  98. package/dist/pptx/render/foreign-object-svg-document.d.ts.map +1 -1
  99. package/dist/pptx/render/index.d.ts +1 -0
  100. package/dist/pptx/render/index.d.ts.map +1 -1
  101. package/dist/pptx/render/table-cell-css.d.ts +3 -2
  102. package/dist/pptx/render/table-cell-css.d.ts.map +1 -1
  103. package/dist/pptx/render/table-cell-edit.d.ts +1 -1
  104. package/dist/pptx/render/table-cell-edit.d.ts.map +1 -1
  105. package/dist/pptx/render/table-cell-paragraphs.d.ts +29 -0
  106. package/dist/pptx/render/table-cell-paragraphs.d.ts.map +1 -0
  107. package/dist/pptx/render/table-style.d.ts +2 -0
  108. package/dist/pptx/render/table-style.d.ts.map +1 -1
  109. package/dist/pptx/render/title-bar.d.ts +5 -0
  110. package/dist/pptx/render/title-bar.d.ts.map +1 -1
  111. package/dist/pptx/render/viewer-root-options.d.ts +11 -3
  112. package/dist/pptx/render/viewer-root-options.d.ts.map +1 -1
  113. package/dist/pptx/web-components/office-token-bridge.d.ts.map +1 -1
  114. package/dist/presence.js +3 -3
  115. package/dist/ribbon/ribbon-tabs.d.ts +2 -1
  116. package/dist/ribbon/ribbon-tabs.d.ts.map +1 -1
  117. package/dist/smartart/smartart-svg.d.ts +3 -2
  118. package/dist/smartart.js +3 -3
  119. package/dist/suite/attachment-store.d.ts +13 -0
  120. package/dist/suite/document-store.d.ts +31 -0
  121. package/dist/suite/index.d.ts +2 -0
  122. package/dist/suite.js +132 -1
  123. package/dist/teams/app/channel-tab.d.ts +5 -0
  124. package/dist/teams/chat-composer.d.ts +3 -0
  125. package/dist/teams.js +6 -6
  126. package/dist/theme.js +2 -2
  127. package/dist/tokens.d.ts +5 -0
  128. package/dist/tokens.d.ts.map +1 -1
  129. package/dist/visio/styles/index.d.ts +2 -0
  130. package/dist/visio/styles/theme.d.ts +11 -0
  131. package/dist/visio/styles.d.ts +2 -2
  132. package/dist/visio.js +65 -20
  133. package/dist/xlsx/backstage/index.d.ts +4 -1
  134. package/dist/xlsx/backstage/pages-share.d.ts +19 -0
  135. package/dist/xlsx/backstage/parts.d.ts +3 -0
  136. package/dist/xlsx/chart-fill-binding.d.ts +2 -2
  137. package/dist/xlsx/chart-series-gradient-type.d.ts +3 -2
  138. package/dist/xlsx/collaboration-session.d.ts +9 -0
  139. package/dist/xlsx/collaboration-types.d.ts +41 -0
  140. package/dist/xlsx/collaboration.d.ts +56 -0
  141. package/dist/xlsx/component.d.ts +8 -0
  142. package/dist/xlsx/dialogs/comments-list.d.ts +4 -0
  143. package/dist/xlsx/dialogs/help-dialogs.d.ts +1 -1
  144. package/dist/xlsx/editor-core.d.ts +3 -0
  145. package/dist/xlsx/element-api.d.ts +19 -1
  146. package/dist/xlsx/events.d.ts +4 -1
  147. package/dist/xlsx/grid/remote-layer.d.ts +3 -0
  148. package/dist/xlsx/grid/sparkline.d.ts +3 -0
  149. package/dist/xlsx/grid/styles.d.ts +1 -1
  150. package/dist/xlsx/index.d.ts +1 -0
  151. package/dist/xlsx/ribbon-actions.d.ts +21 -0
  152. package/dist/xlsx/shell-commands.d.ts +1 -1
  153. package/dist/xlsx/title-bar.d.ts +4 -2
  154. package/dist/xlsx.js +712 -90
  155. package/package.json +2 -2
  156. package/dist/pptx/web-components/status-bar-styles.d.ts +0 -3
  157. package/dist/pptx/web-components/status-bar-styles.d.ts.map +0 -1
  158. package/dist/pptx/web-components/title-bar-styles.d.ts +0 -7
  159. package/dist/pptx/web-components/title-bar-styles.d.ts.map +0 -1
@@ -3,7 +3,7 @@ import { colorWithOpacity, clampUnitInterval, normalizeHexColor, hexToRgbChannel
3
3
  export { clampUnitInterval, colorWithOpacity, hexToRgbChannels, normalizeHexColor } from 'ooxml-core/color';
4
4
  import { buildRectPathGradientImage } from 'ooxml-core/diagram';
5
5
  export { buildRectPathGradientImage, buildRectPathGradientSvg } from 'ooxml-core/diagram';
6
- import { niceValueAxisBounds, axisTargetIntervals, hasManualLayoutFields, resolveManualLayoutRect, groupRowsByCategory, computeBoxStats, computeHistogramBins as computeHistogramBins$1, aggregateByCategory, radarRingPoints, radarAngle, computeRadarPoints, clusteredBarGeometry, resolveBlankDisplay, computeStackedSeriesPlots, visibleRuns, placeBestFitLabel, nudgeOutsideLabels, buildChartGradientDef, fitPolynomial, formatPolynomialEquation, computeRSquared, computeLinearRegression, formatPowerEquation, formatLogarithmicEquation, formatExponentialEquation, formatLinearEquation, squarify } from 'ooxml-core/chart';
6
+ import { niceValueAxisBounds, axisTargetIntervals, clusteredBarGeometry, hasManualLayoutFields, resolveManualLayoutRect, groupRowsByCategory, computeBoxStats, computeHistogramBins as computeHistogramBins$1, aggregateByCategory, radarRingPoints, radarAngle, computeRadarPoints, resolveBlankDisplay, computeStackedSeriesPlots, visibleRuns, placeBestFitLabel, nudgeOutsideLabels, buildChartGradientDef, fitPolynomial, formatPolynomialEquation, computeRSquared, computeLinearRegression, formatPowerEquation, formatLogarithmicEquation, formatExponentialEquation, formatLinearEquation, squarify } from 'ooxml-core/chart';
7
7
  export { axisTargetIntervals, computeBoxStats, computeLinearRegression, computeRSquared, computeRadarPoints, computeStackedSeriesPlots, fitPolynomial, hasManualLayoutFields, niceValueAxisBounds, radarAngle, radarRingPoints, resolveManualLayoutRect } from 'ooxml-core/chart';
8
8
 
9
9
  // src/pptx/render/chart-font.ts
@@ -1533,6 +1533,88 @@ function formatChartNumber(value, formatCode) {
1533
1533
  return formatChartNumberWithColor(value, formatCode)?.text;
1534
1534
  }
1535
1535
 
1536
+ // src/pptx/render/chart-style-palette.ts
1537
+ function hexToRgb(hex) {
1538
+ const h = hex.replace("#", "");
1539
+ return [
1540
+ parseInt(h.substring(0, 2), 16),
1541
+ parseInt(h.substring(2, 4), 16),
1542
+ parseInt(h.substring(4, 6), 16)
1543
+ ];
1544
+ }
1545
+ function rgbToHex(r, g, b) {
1546
+ const clamp3 = (v) => Math.max(0, Math.min(255, Math.round(v)));
1547
+ return `#${clamp3(r).toString(16).padStart(2, "0")}${clamp3(g).toString(16).padStart(2, "0")}${clamp3(b).toString(16).padStart(2, "0")}`;
1548
+ }
1549
+ function tint(hex, amount) {
1550
+ const [r, g, b] = hexToRgb(hex);
1551
+ return rgbToHex(r + (255 - r) * amount, g + (255 - g) * amount, b + (255 - b) * amount);
1552
+ }
1553
+ function shade(hex, amount) {
1554
+ const [r, g, b] = hexToRgb(hex);
1555
+ return rgbToHex(r * (1 - amount), g * (1 - amount), b * (1 - amount));
1556
+ }
1557
+ var OFFICE_ACCENTS = [
1558
+ "#4472C4",
1559
+ "#ED7D31",
1560
+ "#A5A5A5",
1561
+ "#FFC000",
1562
+ "#5B9BD5",
1563
+ "#70AD47"
1564
+ ];
1565
+ var DEFAULT_EXTRAS = ["#FF0000", "#00B0F0"];
1566
+ var DEFAULT_CHART_PALETTE = [...OFFICE_ACCENTS, ...DEFAULT_EXTRAS];
1567
+ function monochromaticRamp(base) {
1568
+ return [
1569
+ shade(base, 0.5),
1570
+ shade(base, 0.35),
1571
+ shade(base, 0.15),
1572
+ base,
1573
+ tint(base, 0.2),
1574
+ tint(base, 0.4),
1575
+ tint(base, 0.6),
1576
+ tint(base, 0.8)
1577
+ ];
1578
+ }
1579
+ var GREY = "#7F7F7F";
1580
+ function buildPalette(column, accents) {
1581
+ if (column === 0) {
1582
+ return monochromaticRamp(GREY);
1583
+ }
1584
+ if (column === 1) {
1585
+ return [...accents, ...accents.map((accent) => shade(accent, 0.4))];
1586
+ }
1587
+ return monochromaticRamp(accents[column - 2]);
1588
+ }
1589
+ function usableAccents(accents) {
1590
+ return accents?.length === 6 && accents.every((accent) => /^#[0-9a-f]{6}$/iu.test(accent)) ? accents : OFFICE_ACCENTS;
1591
+ }
1592
+ var paletteCache = /* @__PURE__ */ new Map();
1593
+ function getChartStylePalette(styleId, themeAccents) {
1594
+ const accents = usableAccents(themeAccents);
1595
+ const valid = styleId !== void 0 && styleId >= 1 && styleId <= 48;
1596
+ if (!valid && accents === OFFICE_ACCENTS) {
1597
+ return DEFAULT_CHART_PALETTE;
1598
+ }
1599
+ const column = valid ? (Math.trunc(styleId) - 1) % 8 : -1;
1600
+ const key = `${column}:${accents.join(",")}`;
1601
+ let palette = paletteCache.get(key);
1602
+ if (!palette) {
1603
+ palette = column < 0 ? [...accents, ...DEFAULT_EXTRAS] : buildPalette(column, accents);
1604
+ paletteCache.set(key, palette);
1605
+ }
1606
+ return palette;
1607
+ }
1608
+ function resolveChartPalette(chartData) {
1609
+ if (chartData.colorPalette && chartData.colorPalette.length > 0) {
1610
+ return [...chartData.colorPalette];
1611
+ }
1612
+ return [...getChartStylePalette(chartData.style?.styleId, chartData.themeAccentColors)];
1613
+ }
1614
+ function withResolvedPalette(chartData) {
1615
+ return chartData.colorPalette && chartData.colorPalette.length > 0 ? chartData : { ...chartData, colorPalette: resolveChartPalette(chartData) };
1616
+ }
1617
+
1536
1618
  // src/pptx/render/chart-style-defaults.ts
1537
1619
  var DEFAULT_LABEL_COLOR = "#334155";
1538
1620
  var DEFAULT_TITLE_TEXT_PX = 12;
@@ -1717,114 +1799,6 @@ function withChartTitleBand(vm, chartData) {
1717
1799
  }
1718
1800
 
1719
1801
  // src/pptx/render/chart-helpers.ts
1720
- var ACCENT1 = "#4472C4";
1721
- var ACCENT2 = "#ED7D31";
1722
- var ACCENT3 = "#A5A5A5";
1723
- var ACCENT4 = "#FFC000";
1724
- var ACCENT5 = "#5B9BD5";
1725
- var ACCENT6 = "#70AD47";
1726
- var ACCENTS = [ACCENT1, ACCENT2, ACCENT3, ACCENT4, ACCENT5, ACCENT6];
1727
- var DEFAULT_CHART_PALETTE = [
1728
- "#4472C4",
1729
- "#ED7D31",
1730
- "#A5A5A5",
1731
- "#FFC000",
1732
- "#5B9BD5",
1733
- "#70AD47",
1734
- "#FF0000",
1735
- "#00B0F0"
1736
- ];
1737
- function hexToRgb(hex) {
1738
- const h = hex.replace("#", "");
1739
- return [
1740
- parseInt(h.substring(0, 2), 16),
1741
- parseInt(h.substring(2, 4), 16),
1742
- parseInt(h.substring(4, 6), 16)
1743
- ];
1744
- }
1745
- function rgbToHex(r, g, b) {
1746
- const clamp3 = (v) => Math.max(0, Math.min(255, Math.round(v)));
1747
- return `#${clamp3(r).toString(16).padStart(2, "0")}${clamp3(g).toString(16).padStart(2, "0")}${clamp3(b).toString(16).padStart(2, "0")}`;
1748
- }
1749
- function tint(hex, amount) {
1750
- const [r, g, b] = hexToRgb(hex);
1751
- return rgbToHex(r + (255 - r) * amount, g + (255 - g) * amount, b + (255 - b) * amount);
1752
- }
1753
- function shade(hex, amount) {
1754
- const [r, g, b] = hexToRgb(hex);
1755
- return rgbToHex(r * (1 - amount), g * (1 - amount), b * (1 - amount));
1756
- }
1757
- function colorfulSequential(offset) {
1758
- const out = [];
1759
- for (let i = 0; i < 8; i++) {
1760
- out.push(ACCENTS[(i + offset) % ACCENTS.length]);
1761
- }
1762
- return out;
1763
- }
1764
- function monochromaticRamp(base) {
1765
- return [
1766
- shade(base, 0.5),
1767
- shade(base, 0.35),
1768
- shade(base, 0.15),
1769
- base,
1770
- tint(base, 0.2),
1771
- tint(base, 0.4),
1772
- tint(base, 0.6),
1773
- tint(base, 0.8)
1774
- ];
1775
- }
1776
- function colorfulVariant(offset, tintAmount) {
1777
- return ACCENTS.map((_, i) => {
1778
- const idx = (i + offset) % ACCENTS.length;
1779
- return tintAmount > 0 ? tint(ACCENTS[idx], tintAmount) : shade(ACCENTS[idx], -tintAmount);
1780
- }).concat([
1781
- tint(ACCENTS[offset % ACCENTS.length], 0.4),
1782
- shade(ACCENTS[(offset + 1) % ACCENTS.length], 0.2)
1783
- ]);
1784
- }
1785
- function darkPalette(offset, shadeAmount) {
1786
- return colorfulSequential(offset).map((c) => shade(c, shadeAmount));
1787
- }
1788
- function tonedPalette(offset, tintAmount) {
1789
- return colorfulSequential(offset).map((c) => tint(c, tintAmount));
1790
- }
1791
- function buildPalette(styleId) {
1792
- const id = Math.max(1, Math.min(48, styleId));
1793
- if (id <= 8) {
1794
- return colorfulSequential(id - 1);
1795
- }
1796
- if (id <= 16) {
1797
- const accentIdx = (id - 9) % ACCENTS.length;
1798
- return monochromaticRamp(ACCENTS[accentIdx]);
1799
- }
1800
- if (id <= 24) {
1801
- const sub2 = id - 17;
1802
- const tintAmt = sub2 < 4 ? sub2 * 0.1 : -(sub2 - 4) * 0.1;
1803
- return colorfulVariant(sub2, tintAmt);
1804
- }
1805
- if (id <= 32) {
1806
- const sub2 = id - 25;
1807
- return darkPalette(sub2, 0.25 + sub2 % 4 * 0.1);
1808
- }
1809
- if (id <= 40) {
1810
- const sub2 = id - 33;
1811
- return tonedPalette(sub2, 0.15 + sub2 % 4 * 0.08);
1812
- }
1813
- const sub = id - 41;
1814
- return tonedPalette(sub, 0.4 + sub % 4 * 0.1);
1815
- }
1816
- var paletteCache = /* @__PURE__ */ new Map();
1817
- function getChartStylePalette(styleId) {
1818
- if (styleId === void 0 || styleId < 1 || styleId > 48) {
1819
- return DEFAULT_CHART_PALETTE;
1820
- }
1821
- let palette = paletteCache.get(styleId);
1822
- if (!palette) {
1823
- palette = buildPalette(styleId);
1824
- paletteCache.set(styleId, palette);
1825
- }
1826
- return palette;
1827
- }
1828
1802
  function seriesColor(series, index, styleId, colorPalette) {
1829
1803
  const explicit = series.color ?? series.marker?.spPr?.fillColor;
1830
1804
  if (explicit) {
@@ -2106,46 +2080,56 @@ function computeBarRects(series, catCount, layout, range, colorPalette) {
2106
2080
  }
2107
2081
  return rects;
2108
2082
  }
2109
- function computeStackedBarRects(series, catCount, layout, range, colorPalette) {
2110
- const rects = [], barW = layout.plotWidth / Math.max(catCount, 1) * 0.7, barOffset = (layout.plotWidth / Math.max(catCount, 1) - barW) / 2, zeroY = valueToY2(0, range, layout.plotTop, layout.plotBottom);
2083
+ function stackedBarWidth(slotWidth, gapWidth, fallbackFraction) {
2084
+ return gapWidth === void 0 ? slotWidth * fallbackFraction : clusteredBarGeometry(slotWidth, 1, { barGapWidth: gapWidth }).singleBarWidth;
2085
+ }
2086
+ function clipStackedSegment(base, value, range) {
2087
+ const low = Math.max(Math.min(base, base + value), range.min), high = Math.min(Math.max(base, base + value), range.max);
2088
+ return high > low ? { low, high } : void 0;
2089
+ }
2090
+ function stackedSegmentExtent(baseCoord, tipCoord, minSize) {
2091
+ const size = Math.max(Math.abs(tipCoord - baseCoord), minSize);
2092
+ return { start: tipCoord < baseCoord ? baseCoord - size : baseCoord, size };
2093
+ }
2094
+ function computeStackedBarRects(series, catCount, layout, range, colorPalette, gapWidth) {
2095
+ const rects = [], slot = layout.plotWidth / Math.max(catCount, 1), barW = stackedBarWidth(slot, gapWidth, 0.7), barOffset = (slot - barW) / 2;
2111
2096
  for (let ci = 0; ci < catCount; ci++) {
2112
- let posTop = zeroY, negBottom = zeroY;
2097
+ let posTotal = 0, negTotal = 0;
2113
2098
  for (let si = 0; si < series.length; si++) {
2114
2099
  const val = series[si].values[ci] ?? 0;
2115
2100
  if (val === 0) {
2116
2101
  continue;
2117
2102
  }
2118
- const x = layout.plotLeft + layout.plotWidth / Math.max(catCount, 1) * ci + barOffset, h = Math.max(
2119
- Math.abs(
2120
- valueToY2(val, range, layout.plotTop, layout.plotBottom) - valueToY2(0, range, layout.plotTop, layout.plotBottom)
2121
- ),
2122
- 1
2123
- );
2103
+ const base = val > 0 ? posTotal : negTotal;
2124
2104
  if (val > 0) {
2125
- const y = posTop - h;
2126
- rects.push({
2127
- x,
2128
- y,
2129
- w: barW,
2130
- h,
2131
- fill: seriesColor2(series[si], si, colorPalette),
2132
- seriesIndex: si,
2133
- pointIndex: ci
2134
- });
2135
- posTop = y;
2105
+ posTotal += val;
2136
2106
  } else {
2137
- const y = negBottom;
2138
- rects.push({
2139
- x,
2140
- y,
2141
- w: barW,
2142
- h,
2143
- fill: seriesColor2(series[si], si, colorPalette),
2144
- seriesIndex: si,
2145
- pointIndex: ci
2146
- });
2147
- negBottom = y + h;
2107
+ negTotal += val;
2108
+ }
2109
+ const segment = clipStackedSegment(base, val, range);
2110
+ if (!segment) {
2111
+ continue;
2148
2112
  }
2113
+ const baseY = valueToY2(
2114
+ val > 0 ? segment.low : segment.high,
2115
+ range,
2116
+ layout.plotTop,
2117
+ layout.plotBottom
2118
+ ), tipY = valueToY2(
2119
+ val > 0 ? segment.high : segment.low,
2120
+ range,
2121
+ layout.plotTop,
2122
+ layout.plotBottom
2123
+ ), { start, size } = stackedSegmentExtent(baseY, tipY, 1);
2124
+ rects.push({
2125
+ x: layout.plotLeft + slot * ci + barOffset,
2126
+ y: start,
2127
+ w: barW,
2128
+ h: size,
2129
+ fill: seriesColor2(series[si], si, colorPalette),
2130
+ seriesIndex: si,
2131
+ pointIndex: ci
2132
+ });
2149
2133
  }
2150
2134
  }
2151
2135
  return rects;
@@ -2384,28 +2368,6 @@ function resolveDataPointPictureFill(series, pointIndex, seriesIndex, face) {
2384
2368
  };
2385
2369
  }
2386
2370
 
2387
- // src/pptx/render/chart-palette.ts
2388
- function hexToRgb2(hex) {
2389
- const h = hex.replace("#", "");
2390
- return [
2391
- parseInt(h.substring(0, 2), 16),
2392
- parseInt(h.substring(2, 4), 16),
2393
- parseInt(h.substring(4, 6), 16)
2394
- ];
2395
- }
2396
- function rgbToHex2(r, g, b) {
2397
- const clamp3 = (v) => Math.max(0, Math.min(255, Math.round(v)));
2398
- return `#${clamp3(r).toString(16).padStart(2, "0")}${clamp3(g).toString(16).padStart(2, "0")}${clamp3(b).toString(16).padStart(2, "0")}`;
2399
- }
2400
- function tint2(hex, amount) {
2401
- const [r, g, b] = hexToRgb2(hex);
2402
- return rgbToHex2(r + (255 - r) * amount, g + (255 - g) * amount, b + (255 - b) * amount);
2403
- }
2404
- function shade2(hex, amount) {
2405
- const [r, g, b] = hexToRgb2(hex);
2406
- return rgbToHex2(r * (1 - amount), g * (1 - amount), b * (1 - amount));
2407
- }
2408
-
2409
2371
  // src/pptx/render/chart-picture-pattern-def.ts
2410
2372
  function polygonBoundingBox(points) {
2411
2373
  const coords = points.trim().split(/\s+/u).map((pair) => pair.split(",").map(Number));
@@ -2434,7 +2396,7 @@ function buildPictureFillPatternDef(id, href, format, box, tileHeightPx) {
2434
2396
 
2435
2397
  // src/pptx/render/chart-bar3d-face-picture.ts
2436
2398
  function resolveUntargetedBarFaceFill(face, baseColor) {
2437
- return face === "end" ? tint2(baseColor, 0.22) : shade2(baseColor, 0.25);
2399
+ return face === "end" ? tint(baseColor, 0.22) : shade(baseColor, 0.25);
2438
2400
  }
2439
2401
  function resolveExtrusionFaceFill(facePoints, face, resolvedColor, rect, picture, defs) {
2440
2402
  const fallback = resolveUntargetedBarFaceFill(face, resolvedColor);
@@ -2634,8 +2596,8 @@ function pieExtrusion(paths, depth) {
2634
2596
  return paths.map((p) => ({
2635
2597
  kind: "path",
2636
2598
  d: translateSlicePath(p.d, 0, offsetY),
2637
- fill: shade2(p.fill, 0.32),
2638
- stroke: shade2(p.fill, 0.4),
2599
+ fill: shade(p.fill, 0.32),
2600
+ stroke: shade(p.fill, 0.4),
2639
2601
  strokeWidth: 0.5
2640
2602
  }));
2641
2603
  }
@@ -2647,7 +2609,7 @@ function ribbonExtrusion(prims, depth) {
2647
2609
  out.push({
2648
2610
  ...pl,
2649
2611
  points: shiftPoints(pl.points, depth.dx, depth.dy),
2650
- stroke: shade2(pl.stroke, 0.3),
2612
+ stroke: shade(pl.stroke, 0.3),
2651
2613
  fill: "none",
2652
2614
  part: void 0
2653
2615
  });
@@ -2656,7 +2618,7 @@ function ribbonExtrusion(prims, depth) {
2656
2618
  out.push({
2657
2619
  ...pg,
2658
2620
  points: shiftPoints(pg.points, depth.dx, depth.dy),
2659
- fill: shade2(pg.fill === "none" ? "#888888" : pg.fill, 0.3),
2621
+ fill: shade(pg.fill === "none" ? "#888888" : pg.fill, 0.3),
2660
2622
  part: void 0
2661
2623
  });
2662
2624
  }
@@ -2794,6 +2756,39 @@ function computeValueRangeForAxis(series, axis, plotHeightPx) {
2794
2756
  const requestedLogBase = axis?.logBase ?? 10;
2795
2757
  const logBase = axis?.logScale && Number.isFinite(requestedLogBase) && requestedLogBase > 1 ? requestedLogBase : axis?.logScale ? 10 : void 0;
2796
2758
  const automatic = logBase ? computeLogValueRange(series, logBase) : computeValueRange(series, plotHeightPx);
2759
+ return withAxisBounds(automatic, axis, logBase);
2760
+ }
2761
+ function computeStackedValueRangeForAxis(series, catCount, axis, isPercent, plotSizePx) {
2762
+ if (isPercent) {
2763
+ return {
2764
+ ...percentStackedRange(series, catCount, plotSizePx),
2765
+ ...axis?.orientation === "maxMin" ? { reverseOrder: true } : {}
2766
+ };
2767
+ }
2768
+ return withAxisBounds(computeStackedValueRange(series, catCount, plotSizePx), axis);
2769
+ }
2770
+ function percentStackedRange(series, catCount, plotSizePx) {
2771
+ const shares = series.map((entry) => ({
2772
+ ...entry,
2773
+ values: Array.from({ length: catCount }, (_, ci) => {
2774
+ const total = series.reduce((sum, s) => sum + Math.abs(s.values[ci] ?? 0), 0);
2775
+ return total > 0 ? (entry.values[ci] ?? 0) / total * 100 : 0;
2776
+ })
2777
+ }));
2778
+ const automatic = computeStackedValueRange(shares, catCount, plotSizePx);
2779
+ if (automatic.min >= 0) {
2780
+ return { min: 0, max: 100, span: 100 };
2781
+ }
2782
+ const min = Math.max(automatic.min, -100);
2783
+ const unit = automatic.majorUnit;
2784
+ return {
2785
+ min,
2786
+ max: 100,
2787
+ span: 100 - min,
2788
+ ...unit !== void 0 && 100 % unit === 0 && min % unit === 0 ? { majorUnit: unit } : {}
2789
+ };
2790
+ }
2791
+ function withAxisBounds(automatic, axis, logBase) {
2797
2792
  const validMin = typeof axis?.min === "number" && Number.isFinite(axis.min) && (!logBase || axis.min > 0) ? axis.min : void 0;
2798
2793
  const validMax = typeof axis?.max === "number" && Number.isFinite(axis.max) && (!logBase || axis.max > 0) ? axis.max : void 0;
2799
2794
  const min = validMin ?? automatic.min;
@@ -3555,6 +3550,9 @@ function unitsLabelTextStyle(axis, baseStyle) {
3555
3550
  ...fontFamily ? { fontFamily } : {}
3556
3551
  };
3557
3552
  }
3553
+ function isNoLine(shape) {
3554
+ return shape?.lineNoFill === true && shape.strokeColor === void 0;
3555
+ }
3558
3556
  function chartLineStyle(shape, fallbackColor = DEFAULT_COLOR, fallbackWidth = 1) {
3559
3557
  const strokeWidth = shape?.strokeWidth ?? fallbackWidth;
3560
3558
  return {
@@ -3566,7 +3564,7 @@ function chartLineStyle(shape, fallbackColor = DEFAULT_COLOR, fallbackWidth = 1)
3566
3564
 
3567
3565
  // src/pptx/render/chart-axis-primitives.ts
3568
3566
  function buildVerticalTickMark(axisX, y, placement, side, length, shape) {
3569
- if (!placement || placement === "none") {
3567
+ if (!placement || placement === "none" || isNoLine(shape)) {
3570
3568
  return void 0;
3571
3569
  }
3572
3570
  const inward = side === "left" ? 1 : -1;
@@ -3582,7 +3580,7 @@ function buildVerticalTickMark(axisX, y, placement, side, length, shape) {
3582
3580
  };
3583
3581
  }
3584
3582
  function buildVerticalAxisLine(axis, axisX, layout) {
3585
- return axis?.spPr ? {
3583
+ return axis?.spPr && !isNoLine(axis.spPr) ? {
3586
3584
  kind: "line",
3587
3585
  x1: axisX,
3588
3586
  y1: layout.plotTop,
@@ -3678,7 +3676,7 @@ function primaryCategoryAxis(axes) {
3678
3676
  return categoryAxes2?.find((axis) => axis.axPos !== "t") ?? categoryAxes2?.[0];
3679
3677
  }
3680
3678
  function tickLine(x, y, placement, topAxis, length, axis) {
3681
- if (!placement || placement === "none") {
3679
+ if (!placement || placement === "none" || isNoLine(axis.spPr)) {
3682
3680
  return void 0;
3683
3681
  }
3684
3682
  const inward = topAxis ? length : -length;
@@ -3700,7 +3698,7 @@ function buildTickMarks(axis, sourceCount, layout, spacing, axisY) {
3700
3698
  const result = [];
3701
3699
  const topAxis = axis.axPos === "t";
3702
3700
  const y = axisY ?? (topAxis ? layout.plotTop : layout.plotBottom);
3703
- if (axis.spPr) {
3701
+ if (axis.spPr && !isNoLine(axis.spPr)) {
3704
3702
  result.push({
3705
3703
  kind: "line",
3706
3704
  x1: layout.plotLeft,
@@ -3787,6 +3785,41 @@ function chartDataInCategoryOrder(chartData, sourceIndices2) {
3787
3785
  };
3788
3786
  }
3789
3787
 
3788
+ // src/pptx/render/chart-gridlines-toggle.ts
3789
+ function primaryValueAxis(axes) {
3790
+ if (!axes) {
3791
+ return void 0;
3792
+ }
3793
+ return axes.find((axis) => axis.axisType === "valAx" && axis.axPos === "l") ?? axes.find((axis) => axis.axisType === "valAx");
3794
+ }
3795
+ function chartGridlinesState(chartData) {
3796
+ const axis = primaryValueAxis(chartData.axes);
3797
+ if (axis) {
3798
+ return axis.majorGridlines ?? false;
3799
+ }
3800
+ return chartData.style?.hasGridlines ?? true;
3801
+ }
3802
+ var shouldRenderMajorGridlines = chartGridlinesState;
3803
+ function axisShowsMajorGridlines(axis) {
3804
+ return axis ? axis.majorGridlines === true : true;
3805
+ }
3806
+ function chartGridlinesPatch(chartData, show) {
3807
+ const axes = chartData.axes ? [...chartData.axes] : [];
3808
+ let index = axes.findIndex((axis) => axis.axisType === "valAx" && axis.axPos === "l");
3809
+ if (index === -1) {
3810
+ index = axes.findIndex((axis) => axis.axisType === "valAx");
3811
+ }
3812
+ if (index === -1) {
3813
+ axes.push({ axisType: "valAx", majorGridlines: show });
3814
+ } else {
3815
+ axes[index] = { ...axes[index], majorGridlines: show };
3816
+ }
3817
+ return {
3818
+ axes,
3819
+ style: { ...chartData.style, hasGridlines: show }
3820
+ };
3821
+ }
3822
+
3790
3823
  // src/pptx/render/chart-scatter-x-axis.ts
3791
3824
  var GRIDLINE_COLOR = "#e2e8f0";
3792
3825
  var TICK_COUNT = 5;
@@ -3807,7 +3840,7 @@ function buildScatterXAxisPlan(chartData, layout) {
3807
3840
  }));
3808
3841
  const range = computeValueRangeForAxis(pseudoSeries, xAxis, layout.plotWidth);
3809
3842
  const toPixelX = (value) => valueToY2(value, range, layout.plotRight, layout.plotLeft);
3810
- const showGridlines = xAxis ? xAxis.majorGridlines === true : true;
3843
+ const showGridlines = axisShowsMajorGridlines(xAxis) && !isNoLine(xAxis?.majorGridlinesSpPr);
3811
3844
  const gridlines = [];
3812
3845
  const labels = [];
3813
3846
  const textStyle = chartAxisTextStyle(xAxis, DEFAULT_CHART_TEXT_PX);
@@ -4161,10 +4194,11 @@ function buildPrimaryAxis(range, layout, axis, axisX = layout.plotLeft, showMajo
4161
4194
  const tickVals = generateAxisTicks(range, axis, TICK_COUNT2);
4162
4195
  const minorTickVals = generateMinorAxisTicks(range, axis);
4163
4196
  const axisLine = buildVerticalAxisLine(axis, axisX, layout);
4197
+ const drawMajorGridlines = showMajorGridlines && !isNoLine(axis?.majorGridlinesSpPr);
4164
4198
  if (axisLine) {
4165
4199
  gridlines.push(axisLine);
4166
4200
  }
4167
- if (axis?.minorGridlines) {
4201
+ if (axis?.minorGridlines && !isNoLine(axis.minorGridlinesSpPr)) {
4168
4202
  for (const val of minorTickVals) {
4169
4203
  const y = valueToY2(val, range, layout.plotTop, layout.plotBottom);
4170
4204
  gridlines.push(
@@ -4188,7 +4222,7 @@ function buildPrimaryAxis(range, layout, axis, axisX = layout.plotLeft, showMajo
4188
4222
  }
4189
4223
  for (const val of tickVals) {
4190
4224
  const y = valueToY2(val, range, layout.plotTop, layout.plotBottom);
4191
- if (showMajorGridlines) {
4225
+ if (drawMajorGridlines) {
4192
4226
  gridlines.push(
4193
4227
  buildStyledGridline(
4194
4228
  y,
@@ -4244,18 +4278,19 @@ function buildPrimaryAxis(range, layout, axis, axisX = layout.plotLeft, showMajo
4244
4278
  }
4245
4279
  return { gridlines, axisLabels };
4246
4280
  }
4247
- function buildSecondaryAxis(range, layout, axis, axisX = layout.plotRight) {
4281
+ function buildSecondaryAxis(range, layout, axis, axisX = layout.plotRight, showMajorGridlines = true) {
4248
4282
  const gridlines = [];
4249
4283
  const axisLabels = [];
4250
4284
  const textStyle = chartAxisTextStyle(axis);
4251
4285
  const captionStyle = chartAxisTextStyle(axis);
4252
4286
  const axisLine = buildVerticalAxisLine(axis, axisX, layout);
4287
+ const drawMajorGridlines = showMajorGridlines && !isNoLine(axis?.majorGridlinesSpPr);
4253
4288
  if (axisLine) {
4254
4289
  gridlines.push(axisLine);
4255
4290
  }
4256
4291
  const tickValues = generateAxisTicks(range, axis, TICK_COUNT2 - 1);
4257
4292
  const minorTickValues = generateMinorAxisTicks(range, axis);
4258
- if (axis?.minorGridlines) {
4293
+ if (axis?.minorGridlines && !isNoLine(axis.minorGridlinesSpPr)) {
4259
4294
  for (const val of minorTickValues) {
4260
4295
  const y = valueToY2(val, range, layout.plotTop, layout.plotBottom);
4261
4296
  gridlines.push(
@@ -4287,17 +4322,19 @@ function buildSecondaryAxis(range, layout, axis, axisX = layout.plotRight) {
4287
4322
  }
4288
4323
  for (const val of tickValues) {
4289
4324
  const y = valueToY2(val, range, layout.plotTop, layout.plotBottom);
4290
- gridlines.push(
4291
- buildStyledGridline(
4292
- y,
4293
- layout,
4294
- axis?.majorGridlinesSpPr,
4295
- SECONDARY_GRID_COLOR,
4296
- 0.5,
4297
- "2 3",
4298
- 0.5
4299
- )
4300
- );
4325
+ if (drawMajorGridlines) {
4326
+ gridlines.push(
4327
+ buildStyledGridline(
4328
+ y,
4329
+ layout,
4330
+ axis?.majorGridlinesSpPr,
4331
+ SECONDARY_GRID_COLOR,
4332
+ 0.5,
4333
+ "2 3",
4334
+ 0.5
4335
+ )
4336
+ );
4337
+ }
4301
4338
  const tick = buildVerticalTickMark(
4302
4339
  axisX,
4303
4340
  y,
@@ -4352,38 +4389,6 @@ function buildSecondaryAxis(range, layout, axis, axisX = layout.plotRight) {
4352
4389
  return { gridlines, axisLabels };
4353
4390
  }
4354
4391
 
4355
- // src/pptx/render/chart-gridlines-toggle.ts
4356
- function primaryValueAxis(axes) {
4357
- if (!axes) {
4358
- return void 0;
4359
- }
4360
- return axes.find((axis) => axis.axisType === "valAx" && axis.axPos === "l") ?? axes.find((axis) => axis.axisType === "valAx");
4361
- }
4362
- function chartGridlinesState(chartData) {
4363
- const axis = primaryValueAxis(chartData.axes);
4364
- if (axis) {
4365
- return axis.majorGridlines ?? false;
4366
- }
4367
- return chartData.style?.hasGridlines ?? true;
4368
- }
4369
- var shouldRenderMajorGridlines = chartGridlinesState;
4370
- function chartGridlinesPatch(chartData, show) {
4371
- const axes = chartData.axes ? [...chartData.axes] : [];
4372
- let index = axes.findIndex((axis) => axis.axisType === "valAx" && axis.axPos === "l");
4373
- if (index === -1) {
4374
- index = axes.findIndex((axis) => axis.axisType === "valAx");
4375
- }
4376
- if (index === -1) {
4377
- axes.push({ axisType: "valAx", majorGridlines: show });
4378
- } else {
4379
- axes[index] = { ...axes[index], majorGridlines: show };
4380
- }
4381
- return {
4382
- axes,
4383
- style: { ...chartData.style, hasGridlines: show }
4384
- };
4385
- }
4386
-
4387
4392
  // src/pptx/render/chart-cartesian-axes.ts
4388
4393
  function hasRicherAxisFeatures(chartData) {
4389
4394
  return Boolean(
@@ -4435,7 +4440,8 @@ function buildCartesianAxes(chartData, layout, primaryRange, secondaryRange, cat
4435
4440
  secondaryRange,
4436
4441
  layout,
4437
4442
  secondaryAxis,
4438
- axisX(secondaryAxis?.crossAxisId, "right")
4443
+ axisX(secondaryAxis?.crossAxisId, "right"),
4444
+ axisShowsMajorGridlines(secondaryAxis)
4439
4445
  );
4440
4446
  return {
4441
4447
  ...primary,
@@ -4452,7 +4458,7 @@ function categoryTotals(series, catCount) {
4452
4458
  );
4453
4459
  }
4454
4460
  function buildPercentStackedBars(chartData, catCount, layout, primaryRange, sourceIndices2, invertNegativeFill2) {
4455
- const primitives = [], dataLabels = [], series = chartData.series, palette = chartData.colorPalette, showLabels = chartData.style?.hasDataLabels, barGroupWidth = layout.plotWidth / Math.max(catCount, 1), barW = barGroupWidth * 0.6, barOffset = (barGroupWidth - barW) / 2, displaySeries = series.map((entry) => ({
4461
+ const primitives = [], dataLabels = [], series = chartData.series, palette = chartData.colorPalette, showLabels = chartData.style?.hasDataLabels, barGroupWidth = layout.plotWidth / Math.max(catCount, 1), barW = stackedBarWidth(barGroupWidth, chartData.barGapWidth, 0.6), barOffset = (barGroupWidth - barW) / 2, displaySeries = series.map((entry) => ({
4456
4462
  ...entry,
4457
4463
  values: sourceIndices2.map((sourceIndex) => entry.values[sourceIndex] ?? 0)
4458
4464
  })), totals = categoryTotals(displaySeries, catCount);
@@ -4460,7 +4466,17 @@ function buildPercentStackedBars(chartData, catCount, layout, primaryRange, sour
4460
4466
  let posRunning = 0, negRunning = 0;
4461
4467
  const catTotal = totals[ci] || 1;
4462
4468
  for (let si = 0; si < series.length; si++) {
4463
- const sourceIndex = sourceIndices2[ci] ?? ci, rawVal = series[si].values[sourceIndex] ?? 0, val = catTotal > 0 ? rawVal / catTotal * 100 : 0, isNeg = val < 0, base = isNeg ? negRunning : posRunning, top = base + val, x = layout.plotLeft + barGroupWidth * ci + barOffset, baseY = valueToY2(base, primaryRange, layout.plotTop, layout.plotBottom), topY = valueToY2(top, primaryRange, layout.plotTop, layout.plotBottom), y = Math.min(baseY, topY), h = Math.max(Math.abs(baseY - topY), 0.5), pctBaseFill = resolveDataPointFill(series[si], sourceIndex, paletteColor2(si, palette)) ?? seriesColor2(series[si], si, palette);
4469
+ const sourceIndex = sourceIndices2[ci] ?? ci, rawVal = series[si].values[sourceIndex] ?? 0, val = catTotal > 0 ? rawVal / catTotal * 100 : 0, base = val < 0 ? negRunning : posRunning;
4470
+ if (val < 0) {
4471
+ negRunning += val;
4472
+ } else {
4473
+ posRunning += val;
4474
+ }
4475
+ const segment = clipStackedSegment(base, val, primaryRange);
4476
+ if (!segment) {
4477
+ continue;
4478
+ }
4479
+ const x = layout.plotLeft + barGroupWidth * ci + barOffset, toY = (value) => valueToY2(value, primaryRange, layout.plotTop, layout.plotBottom), { start: y, size: h } = val < 0 ? stackedSegmentExtent(toY(segment.high), toY(segment.low), 0.5) : stackedSegmentExtent(toY(segment.low), toY(segment.high), 0.5), pctBaseFill = resolveDataPointFill(series[si], sourceIndex, paletteColor2(si, palette)) ?? seriesColor2(series[si], si, palette);
4464
4480
  primitives.push({
4465
4481
  kind: "rect",
4466
4482
  x,
@@ -4489,11 +4505,6 @@ function buildPercentStackedBars(chartData, catCount, layout, primaryRange, sour
4489
4505
  ...dataLabelFontOverride(resolveDataLabelTextStyle(chartData, series[si], sourceIndex))
4490
4506
  });
4491
4507
  }
4492
- if (isNeg) {
4493
- negRunning += val;
4494
- } else {
4495
- posRunning += val;
4496
- }
4497
4508
  }
4498
4509
  }
4499
4510
  return { primitives, dataLabels };
@@ -4639,7 +4650,14 @@ function buildBars(chartData, catCount, layout, primaryRange, secondaryRange, se
4639
4650
  const displaySeries = series.map((entry) => ({
4640
4651
  ...entry,
4641
4652
  values: sourceIndices2.map((sourceIndex) => entry.values[sourceIndex] ?? 0)
4642
- })), rects = computeStackedBarRects(displaySeries, catCount, layout, primaryRange, palette);
4653
+ })), rects = computeStackedBarRects(
4654
+ displaySeries,
4655
+ catCount,
4656
+ layout,
4657
+ primaryRange,
4658
+ palette,
4659
+ chartData.barGapWidth
4660
+ );
4643
4661
  for (const r of rects) {
4644
4662
  let fill = r.fill, part, title;
4645
4663
  if (r.seriesIndex !== void 0 && r.pointIndex !== void 0) {
@@ -5329,7 +5347,7 @@ function addUnit(date, amount, unit) {
5329
5347
  }
5330
5348
  function tickLine2(x, y, axis, minor) {
5331
5349
  const placement = minor ? axis.minorTickMark : axis.majorTickMark;
5332
- if (!placement || placement === "none") {
5350
+ if (!placement || placement === "none" || isNoLine(axis.spPr)) {
5333
5351
  return void 0;
5334
5352
  }
5335
5353
  const length = minor ? 2.5 : 4;
@@ -5422,7 +5440,7 @@ function buildDateAxisPlan(chartData, layout, selectedAxis, axisY) {
5422
5440
  const line2 = tickLine2(x, y, axis, false);
5423
5441
  return line2 ? [line2] : [];
5424
5442
  });
5425
- if (!axis.deleted && axis.spPr) {
5443
+ if (!axis.deleted && axis.spPr && !isNoLine(axis.spPr)) {
5426
5444
  tickMarks.unshift({
5427
5445
  kind: "line",
5428
5446
  x1: layout.plotLeft,
@@ -5625,19 +5643,21 @@ function valueToX(val, range, leftX, rightX) {
5625
5643
  }
5626
5644
  return range.reverseOrder ? rightX - ratio * usable : leftX + ratio * usable;
5627
5645
  }
5628
- function buildTransposedValueAxis(range, layout) {
5629
- const gridlines = [], axisLabels = [];
5646
+ function buildTransposedValueAxis(range, layout, axis, showMajorGridlines = true) {
5647
+ const gridlines = [], axisLabels = [], drawGridlines = showMajorGridlines && !isNoLine(axis?.majorGridlinesSpPr);
5630
5648
  for (const val of axisTickValues(range)) {
5631
5649
  const x = valueToX(val, range, layout.plotLeft, layout.plotRight);
5632
- gridlines.push({
5633
- kind: "line",
5634
- x1: x,
5635
- y1: layout.plotTop,
5636
- x2: x,
5637
- y2: layout.plotBottom,
5638
- stroke: GRIDLINE_COLOR3,
5639
- strokeWidth: 1
5640
- });
5650
+ if (drawGridlines) {
5651
+ gridlines.push(
5652
+ buildVerticalStyledGridline(
5653
+ x,
5654
+ layout,
5655
+ axis?.majorGridlinesSpPr,
5656
+ GRIDLINE_COLOR3,
5657
+ 1,
5658
+ void 0)
5659
+ );
5660
+ }
5641
5661
  axisLabels.push({
5642
5662
  kind: "text",
5643
5663
  x,
@@ -5687,7 +5707,12 @@ function barFill(chartData, series, seriesIndex, pointIndex) {
5687
5707
  function buildHorizontalBarViewModel(element, chartData, categoryLabels) {
5688
5708
  const layout = computePlotLayout(element.width, element.height, chartData, true, {
5689
5709
  leftCategoryLabelWidth: widestCategoryLabelWidth(categoryLabels, DEFAULT_CHART_TEXT_PX)
5690
- }), catCount = Math.max(categoryLabels.length, 1), series = chartData.series, grouping = chartData.grouping ?? "clustered", isStacked = grouping === "stacked" || grouping === "percentStacked", isPercent = grouping === "percentStacked", range = isPercent ? { min: 0, max: 100, span: 100 } : isStacked ? computeStackedValueRange(series, catCount, layout.plotWidth) : computeValueRangeForChart(series, chartData.axes, layout.plotWidth), { gridlines, axisLabels } = buildTransposedValueAxis(range, layout), zeroX = valueToX(0, range, layout.plotLeft, layout.plotRight), zeroLine = range.min < 0 && range.max > 0 ? {
5710
+ }), catCount = Math.max(categoryLabels.length, 1), series = chartData.series, grouping = chartData.grouping ?? "clustered", isStacked = grouping === "stacked" || grouping === "percentStacked", isPercent = grouping === "percentStacked", valueAxis = primaryValueAxis(chartData.axes), range = isStacked ? computeStackedValueRangeForAxis(series, catCount, valueAxis, isPercent, layout.plotWidth) : computeValueRangeForChart(series, chartData.axes, layout.plotWidth), { gridlines, axisLabels } = buildTransposedValueAxis(
5711
+ range,
5712
+ layout,
5713
+ valueAxis,
5714
+ shouldRenderMajorGridlines(chartData)
5715
+ ), zeroX = valueToX(0, range, layout.plotLeft, layout.plotRight), zeroLine = range.min < 0 && range.max > 0 ? {
5691
5716
  kind: "line",
5692
5717
  x1: zeroX,
5693
5718
  y1: layout.plotTop,
@@ -5746,7 +5771,7 @@ function buildHorizontalBarViewModel(element, chartData, categoryLabels) {
5746
5771
  }
5747
5772
  }
5748
5773
  } else {
5749
- const totals = isPercent ? categoryTotals2(series, catCount) : [], barH = band * (isPercent ? 0.6 : 0.7), barOffset = (band - barH) / 2;
5774
+ const totals = isPercent ? categoryTotals2(series, catCount) : [], barH = stackedBarWidth(band, chartData.barGapWidth, isPercent ? 0.6 : 0.7), barOffset = (band - barH) / 2;
5750
5775
  for (let ci = 0; ci < catCount; ci++) {
5751
5776
  let posRunning = 0, negRunning = 0;
5752
5777
  const catTotal = isPercent ? totals[ci] || 1 : 1;
@@ -5755,7 +5780,21 @@ function buildHorizontalBarViewModel(element, chartData, categoryLabels) {
5755
5780
  if (val === 0) {
5756
5781
  continue;
5757
5782
  }
5758
- const isNeg = val < 0, base = isNeg ? negRunning : posRunning, top = base + val, y = layout.plotTop + band * ci + barOffset, baseX = valueToX(base, range, layout.plotLeft, layout.plotRight), topX = valueToX(top, range, layout.plotLeft, layout.plotRight), x = Math.min(baseX, topX), w = Math.max(Math.abs(topX - baseX), 0.5);
5783
+ const isNeg = val < 0, base = isNeg ? negRunning : posRunning;
5784
+ if (isNeg) {
5785
+ negRunning += val;
5786
+ } else {
5787
+ posRunning += val;
5788
+ }
5789
+ const segment = clipStackedSegment(base, val, range);
5790
+ if (!segment) {
5791
+ continue;
5792
+ }
5793
+ const y = layout.plotTop + band * ci + barOffset, { start: x, size: w } = stackedSegmentExtent(
5794
+ valueToX(isNeg ? segment.high : segment.low, range, layout.plotLeft, layout.plotRight),
5795
+ valueToX(isNeg ? segment.low : segment.high, range, layout.plotLeft, layout.plotRight),
5796
+ 0.5
5797
+ );
5759
5798
  primitives.push({
5760
5799
  kind: "rect",
5761
5800
  x,
@@ -5809,11 +5848,6 @@ function buildHorizontalBarViewModel(element, chartData, categoryLabels) {
5809
5848
  });
5810
5849
  }
5811
5850
  }
5812
- if (isNeg) {
5813
- negRunning += val;
5814
- } else {
5815
- posRunning += val;
5816
- }
5817
5851
  }
5818
5852
  }
5819
5853
  }
@@ -5845,12 +5879,6 @@ function buildHorizontalBarViewModel(element, chartData, categoryLabels) {
5845
5879
  }
5846
5880
 
5847
5881
  // src/pptx/render/chart-cartesian.ts
5848
- function stackedRange(chartData, catCount, isPercent, plotHeightPx) {
5849
- if (isPercent) {
5850
- return { min: 0, max: 100, span: 100 };
5851
- }
5852
- return computeStackedValueRange(chartData.series, catCount, plotHeightPx);
5853
- }
5854
5882
  function buildCartesianViewModel(element, chartData, categoryLabels, kind) {
5855
5883
  if (kind === "bar" && chartData.barDirection === "bar") {
5856
5884
  return buildHorizontalBarViewModel(element, chartData, categoryLabels);
@@ -5866,13 +5894,13 @@ function buildCartesianViewModel(element, chartData, categoryLabels, kind) {
5866
5894
  const useSecondary = !isStacked && secondaryIdx.size > 0;
5867
5895
  const primaryPlotSeries = useSecondary ? chartData.series.filter((_s, i) => !secondaryIdx.has(i)) : chartData.series;
5868
5896
  const secondaryPlotSeries = useSecondary ? chartData.series.filter((_s, i) => secondaryIdx.has(i)) : [];
5869
- const primaryAxis = chartData.axes?.find(
5870
- (axis) => axis.axisType === "valAx" && axis.axPos !== "r"
5871
- );
5872
- const primaryRange = isStacked ? {
5873
- ...stackedRange(chartData, catCount, isPercent, layout.autoPlotHeight),
5874
- ...primaryAxis?.orientation === "maxMin" ? { reverseOrder: true } : {}
5875
- } : computeValueRangeForChart(
5897
+ const primaryRange = isStacked ? computeStackedValueRangeForAxis(
5898
+ chartData.series,
5899
+ catCount,
5900
+ primaryValueAxis(chartData.axes),
5901
+ isPercent,
5902
+ layout.autoPlotHeight
5903
+ ) : computeValueRangeForChart(
5876
5904
  primaryPlotSeries.length > 0 ? primaryPlotSeries : chartData.series,
5877
5905
  chartData.axes,
5878
5906
  layout.autoPlotHeight
@@ -6433,7 +6461,8 @@ function buildComboViewModel(element, chartData, categoryLabels) {
6433
6461
  layout,
6434
6462
  "right",
6435
6463
  chartData.dateCategories?.values
6436
- )
6464
+ ),
6465
+ axisShowsMajorGridlines(secondaryAxisFormatting)
6437
6466
  ) : void 0;
6438
6467
  const zeroLine = primaryRange.logScale ? void 0 : buildZeroLine(primaryRange, layout);
6439
6468
  const horizontalAxis = buildCartesianHorizontalAxis(
@@ -10265,7 +10294,7 @@ function buildChartViewModelInner(element) {
10265
10294
  if (element.type !== "chart") {
10266
10295
  return buildFallbackViewModel(element.width, element.height, "Chart");
10267
10296
  }
10268
- const chartEl = element, chartData = chartEl.chartData ? withChartTextDefaults(withAutoTitle(chartEl.chartData)) : chartEl.chartData;
10297
+ const chartEl = element, chartData = chartEl.chartData ? withResolvedPalette(withChartTextDefaults(withAutoTitle(chartEl.chartData))) : chartEl.chartData;
10269
10298
  if (!chartData || chartData.series.length === 0) {
10270
10299
  return buildFallbackViewModel(element.width, element.height, chartData?.title ?? "Chart");
10271
10300
  }
@@ -10740,4 +10769,4 @@ function computeTrendlinePrimitives(chartData, catCount, layout, range, mode = "
10740
10769
  return out;
10741
10770
  }
10742
10771
 
10743
- export { AXIS_LABEL_COLOR, CHART_PX_PER_PT, CHART_TITLE_FONT_PX, CHART_TITLE_TOP_INSET_PX, DATA_LABEL_LINE_HEIGHT, DATA_LABEL_PAD_X, DATA_LABEL_PAD_Y, DATA_TABLE_HEADER_H, DATA_TABLE_KEY_W, DATA_TABLE_PADDING, DATA_TABLE_ROW_H, DEFAULT_BODY_INSET_LR_PX, DEFAULT_BODY_INSET_TB_PX, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, DEFAULT_CHART_AREA_FILL, DEFAULT_CHART_DATA_LABEL_PX, DEFAULT_CHART_PALETTE, DEFAULT_CHART_TEXT_PX, DEFAULT_FILL_COLOR, DEFAULT_FONT_FAMILY, DEFAULT_PALETTE, DEFAULT_STROKE_COLOR, DEFAULT_TEXT_COLOR, DEFAULT_TEXT_FONT_SIZE, GRIDLINE_COLOR3 as GRIDLINE_COLOR, HYPERLINK_COLOR, LEGACY_CHART_TITLE_BAND_PX, LEGEND_LINE_SWATCH_WIDTH, LEGEND_MARKER_RADIUS, OOXML_PATTERN_PRESETS, PIE_AUTO_INSET_PX, TEXT_ORIENTATION_IDENTITY, ZERO_LINE_COLOR, adjustFillForMode, applyDataPointPictureFills, applyLabelManualLayout, applyLegendEntryOverrides, applyParetoConversion, axisTickValues, buildBoxWhiskerViewModel, buildCartesianViewModel, buildCategoryLabels, buildChartViewModel, buildCirclePathGradient, buildComboViewModel, buildCssGradientFromShapeStyle, buildDashArray, buildDataLabelText, buildFallbackViewModel, buildFunnelViewModel, buildGradientCss, buildGridlinesAndLabels, buildHistogramViewModel, buildLegend, buildLineLegendSwatch, buildMarkTooltip, buildPatternFill, buildPatternFillCss, buildPieViewModel, buildPrimaryAxis, buildRadarViewModel, buildRectPathGradient, buildReflectedGradientStops, buildRegionMapEntries, buildRegionMapViewModel, buildSecondaryAxis, buildShapePathGradient, buildStockCloseLabel, buildStockViewModel, buildSubpathFillOverlay, buildSubpathPaints, buildSunburstViewModel, buildSurfaceViewModel, buildTreemapViewModel, buildTrendlineLegendSwatch, buildValueAxisGridlinesAndLabels, buildWaterfallViewModel, buildZeroLine, canvasFontFamily, chartAreaCornerRadius, chartAreaFill, chartFontPx, chartFrameToViewOffset, chartGridlinesPatch, chartGridlinesState, chartPreserveAspectRatio, chartTextFontFamily, chartTitleBand, chartTitleBandFor, chartTitleFontPx, chartTitleReservePx, clampCropValue, collapseChartTitleRunsForEdit, computeAxisTitlePrimitives, computeBarRects, computeBoxWhiskerGeometry, computeBubbleRadius, computeDataTableHeight, computeDataTablePrimitives, computeErrorBarPrimitives, computeFunnelSegments, computeGradientCenter, computeHierarchicalSunburstArcs, computeHistogramBars, computeHistogramBins, computeLayout, computeLayoutOptions, computeLinePoints, computeLogValueRange, computePieLayout, computePieSlicePath, computePieSlices, computePlotLayout, computeScatterDots, computeScatterXDomain, computeStackedBarRects, computeStackedValueRange, computeSunburstArcs, computeTrendlinePrimitives, computeValueRange, computeValueRange2, computeValueRangeForAxis, computeValueRangeForChart, convertOoxmlAngleToCss, createArrayBufferCopy, cumulativePercentOfTotal, dataLabelBox, dataLabelBoxSize, dataLabelFontOverride, decodeFirstPixelColor, ensureBarFacePicturePixelSampled, estimateChartTextWidth, estimateTextWidth, findDataPoint, findLogAxis, findPointLabel, findValueAxis, fitTitleBand, formatAxisValue, formatAxisValue2, formatAxisValueWithUnits, formatChartNumber, formatChartNumberWithColor, formatRegionMapValue, generateAxisTicks, generateLogTicks, generateMinorAxisTicks, getBarFacePicturePixelSampleVersion, getCachedBarFacePicturePixelColor, getChartStylePalette, getCompoundLineBorderWidth, getCompoundLineBoxShadow, getCompoundLineStyle, getComputedFillStyle, getCssBorderDashStyle, getDisplayUnitDivisor, getDisplayUnitLabel, getElementOrientationMatrix, getElementTransform, getElementTransformWithoutRotation, getGradientTileFlipCss, getGradientTileRectCss, getPatternSvg, getPatternTile, getPrimaryValueAxis, getPrimaryValueAxisId, getSecondaryCategoryAxis, getSecondaryValueAxis, getSecondaryValueAxisId, getSvgStrokeDasharray, getTextCompensationTransform, hasSecondaryCategoryAxis, hasSecondaryValueAxis, isParetoChart, isPrimaryCategoryAxisAtTop, isSeriesOnSecondaryAxis, isTextOrientationMatrix, linePointsToSvgString, manualLayoutOf, manualLegendAnchor, manualTitleAnchor, measureChartTextWidth, multiplyTextOrientationMatrices, normalizeStrokeDashType, normalizeValue, orderParetoEntries, paletteColor, paletteColor2, parseDrawingPercent, plotAreaFill, reserveLegendSpace, resetBarFacePicturePixelCacheForTests, resolveActiveDataPointPicture, resolveBarFacePicturePixelColor, resolveBarFaceTargets, resolveBarLabelAnchor, resolveBarLabelPlacement, resolveCategoryLabels, resolveChartKind, resolveChartStyleDefaults, resolveChartTitleRunSpans, resolveChartTitleTextStyle, resolveDataLabelContent, resolveDataLabelTextStyle, resolveDataPointExplosion, resolveDataPointFill, resolveDataPointMarker, resolveDataPointPictureFill, resolveDisplayedChartType, resolveExtrusionFaceFill, resolveLabelPosition, resolveLegendAnchorPosition, resolveLegendPlacement, resolveLegendSwatchKind, resolveMarkerLabelAnchor, resolveMarkerLabelPlacement, resolveRegionCode, resolveRegionEntityCode, resolveUntargetedBarFaceFill, resolveVaryColorFill, sanitizeGradientStops, sequentialColorScale, seriesColor, seriesColor2, seriesXValues, setChartTextMeasurer, shade2 as shade, shouldRenderMajorGridlines, shouldRenderRegionLabel, splitLabelLines, splitSeriesByAxis, subscribeBarFacePicturePixelSamples, suppressesCssFill, surfaceColor, tint2 as tint, titleBaselineFor, toCssGradientStop, unitsCaptionOffset, upsertDataPoint, valueToY, valueToY2, valueToYLog, withChartTitleBand, withManualLayouts, wrapTextByEstimatedWidth };
10772
+ export { AXIS_LABEL_COLOR, CHART_PX_PER_PT, CHART_TITLE_FONT_PX, CHART_TITLE_TOP_INSET_PX, DATA_LABEL_LINE_HEIGHT, DATA_LABEL_PAD_X, DATA_LABEL_PAD_Y, DATA_TABLE_HEADER_H, DATA_TABLE_KEY_W, DATA_TABLE_PADDING, DATA_TABLE_ROW_H, DEFAULT_BODY_INSET_LR_PX, DEFAULT_BODY_INSET_TB_PX, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, DEFAULT_CHART_AREA_FILL, DEFAULT_CHART_DATA_LABEL_PX, DEFAULT_CHART_PALETTE, DEFAULT_CHART_TEXT_PX, DEFAULT_FILL_COLOR, DEFAULT_FONT_FAMILY, DEFAULT_PALETTE, DEFAULT_STROKE_COLOR, DEFAULT_TEXT_COLOR, DEFAULT_TEXT_FONT_SIZE, GRIDLINE_COLOR3 as GRIDLINE_COLOR, HYPERLINK_COLOR, LEGACY_CHART_TITLE_BAND_PX, LEGEND_LINE_SWATCH_WIDTH, LEGEND_MARKER_RADIUS, OOXML_PATTERN_PRESETS, PIE_AUTO_INSET_PX, TEXT_ORIENTATION_IDENTITY, ZERO_LINE_COLOR, adjustFillForMode, applyDataPointPictureFills, applyLabelManualLayout, applyLegendEntryOverrides, applyParetoConversion, axisShowsMajorGridlines, axisTickValues, buildBoxWhiskerViewModel, buildCartesianViewModel, buildCategoryLabels, buildChartViewModel, buildCirclePathGradient, buildComboViewModel, buildCssGradientFromShapeStyle, buildDashArray, buildDataLabelText, buildFallbackViewModel, buildFunnelViewModel, buildGradientCss, buildGridlinesAndLabels, buildHistogramViewModel, buildLegend, buildLineLegendSwatch, buildMarkTooltip, buildPatternFill, buildPatternFillCss, buildPieViewModel, buildPrimaryAxis, buildRadarViewModel, buildRectPathGradient, buildReflectedGradientStops, buildRegionMapEntries, buildRegionMapViewModel, buildSecondaryAxis, buildShapePathGradient, buildStockCloseLabel, buildStockViewModel, buildSubpathFillOverlay, buildSubpathPaints, buildSunburstViewModel, buildSurfaceViewModel, buildTreemapViewModel, buildTrendlineLegendSwatch, buildValueAxisGridlinesAndLabels, buildWaterfallViewModel, buildZeroLine, canvasFontFamily, chartAreaCornerRadius, chartAreaFill, chartFontPx, chartFrameToViewOffset, chartGridlinesPatch, chartGridlinesState, chartPreserveAspectRatio, chartTextFontFamily, chartTitleBand, chartTitleBandFor, chartTitleFontPx, chartTitleReservePx, clampCropValue, clipStackedSegment, collapseChartTitleRunsForEdit, computeAxisTitlePrimitives, computeBarRects, computeBoxWhiskerGeometry, computeBubbleRadius, computeDataTableHeight, computeDataTablePrimitives, computeErrorBarPrimitives, computeFunnelSegments, computeGradientCenter, computeHierarchicalSunburstArcs, computeHistogramBars, computeHistogramBins, computeLayout, computeLayoutOptions, computeLinePoints, computeLogValueRange, computePieLayout, computePieSlicePath, computePieSlices, computePlotLayout, computeScatterDots, computeScatterXDomain, computeStackedBarRects, computeStackedValueRange, computeStackedValueRangeForAxis, computeSunburstArcs, computeTrendlinePrimitives, computeValueRange, computeValueRange2, computeValueRangeForAxis, computeValueRangeForChart, convertOoxmlAngleToCss, createArrayBufferCopy, cumulativePercentOfTotal, dataLabelBox, dataLabelBoxSize, dataLabelFontOverride, decodeFirstPixelColor, ensureBarFacePicturePixelSampled, estimateChartTextWidth, estimateTextWidth, findDataPoint, findLogAxis, findPointLabel, findValueAxis, fitTitleBand, formatAxisValue, formatAxisValue2, formatAxisValueWithUnits, formatChartNumber, formatChartNumberWithColor, formatRegionMapValue, generateAxisTicks, generateLogTicks, generateMinorAxisTicks, getBarFacePicturePixelSampleVersion, getCachedBarFacePicturePixelColor, getChartStylePalette, getCompoundLineBorderWidth, getCompoundLineBoxShadow, getCompoundLineStyle, getComputedFillStyle, getCssBorderDashStyle, getDisplayUnitDivisor, getDisplayUnitLabel, getElementOrientationMatrix, getElementTransform, getElementTransformWithoutRotation, getGradientTileFlipCss, getGradientTileRectCss, getPatternSvg, getPatternTile, getPrimaryValueAxis, getPrimaryValueAxisId, getSecondaryCategoryAxis, getSecondaryValueAxis, getSecondaryValueAxisId, getSvgStrokeDasharray, getTextCompensationTransform, hasSecondaryCategoryAxis, hasSecondaryValueAxis, isParetoChart, isPrimaryCategoryAxisAtTop, isSeriesOnSecondaryAxis, isTextOrientationMatrix, linePointsToSvgString, manualLayoutOf, manualLegendAnchor, manualTitleAnchor, measureChartTextWidth, multiplyTextOrientationMatrices, normalizeStrokeDashType, normalizeValue, orderParetoEntries, paletteColor, paletteColor2, parseDrawingPercent, plotAreaFill, primaryValueAxis, reserveLegendSpace, resetBarFacePicturePixelCacheForTests, resolveActiveDataPointPicture, resolveBarFacePicturePixelColor, resolveBarFaceTargets, resolveBarLabelAnchor, resolveBarLabelPlacement, resolveCategoryLabels, resolveChartKind, resolveChartPalette, resolveChartStyleDefaults, resolveChartTitleRunSpans, resolveChartTitleTextStyle, resolveDataLabelContent, resolveDataLabelTextStyle, resolveDataPointExplosion, resolveDataPointFill, resolveDataPointMarker, resolveDataPointPictureFill, resolveDisplayedChartType, resolveExtrusionFaceFill, resolveLabelPosition, resolveLegendAnchorPosition, resolveLegendPlacement, resolveLegendSwatchKind, resolveMarkerLabelAnchor, resolveMarkerLabelPlacement, resolveRegionCode, resolveRegionEntityCode, resolveUntargetedBarFaceFill, resolveVaryColorFill, sanitizeGradientStops, sequentialColorScale, seriesColor, seriesColor2, seriesXValues, setChartTextMeasurer, shade, shouldRenderMajorGridlines, shouldRenderRegionLabel, splitLabelLines, splitSeriesByAxis, stackedBarWidth, stackedSegmentExtent, subscribeBarFacePicturePixelSamples, suppressesCssFill, surfaceColor, tint, titleBaselineFor, toCssGradientStop, unitsCaptionOffset, upsertDataPoint, valueToY, valueToY2, valueToYLog, withChartTitleBand, withManualLayouts, wrapTextByEstimatedWidth };