pptx-viewer-mcp 2.3.0 → 2.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +242 -204
- package/dist/index.mjs +243 -205
- package/dist/mcp/index.js +255 -206
- package/dist/mcp/index.mjs +256 -207
- package/dist/schemas/index.d.ts +3 -0
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +13 -2
- package/dist/schemas/index.mjs +13 -2
- package/package.json +2 -2
package/dist/mcp/index.mjs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
3
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import { validatePptx, repairPptx, PptxHandler, hasTextProperties, resolveThemeColorRef, cloneElement as cloneElement$1, isTemplateElementId, makeStoreAwareId, reassignDescendantIds, groupElements as groupElements$1, ungroupElements as ungroupElements$1, TABLE_STYLE_PART_SEQUENCE, normalizeTableStyleGuid, createTableStyleEntry, addTableStyleToMap, deleteTableStyleFromMap, PptxMarkdownConverter, ThemePresets, getThemePreset, setChartType, setChartTitle, setChartGrouping, setChartLegend, setChartDataLabels, setChartAxis, setChartCategories, addChartSeries, removeChartSeries, updateChartSeriesValues, ChartBuilder, setChartDataPointStyle, setChartDataPointExplosion, setChartDataPointMarker, setChartDataPointLabel, setChartSeriesMarker, setChartSeriesTrendline, setChartSeriesErrorBars, setChartHelperLine, setChartColorMapOverride, listChartUserShapes, addChartUserShape, updateChartUserShape, removeChartUserShape, decomposeSmartArt, demoteSmartArtNode, promoteSmartArtNode, reorderSmartArtNode, updateSmartArtNodeText, removeSmartArtNode, addSmartArtNode, findPlaceholders, applyTemplate, getSectionForSlide, moveSlidesToSection, reorderSections, removeSection, addSection, SvgExporter, buildPptxJsonDocument, deserializePptxFromJson, applyImportedPptxData, replaceWithCustomGeometry, replaceShapeGeometry, setElementLocked, findLayoutByName, findLayoutByType } from 'pptx-viewer-core';
|
|
5
|
+
import { validatePptx, repairPptx, PptxHandler, hasTextProperties, resolveThemeColorRef, cloneElement as cloneElement$1, isTemplateElementId, makeStoreAwareId, reassignDescendantIds, groupElements as groupElements$1, ungroupElements as ungroupElements$1, TABLE_STYLE_PART_SEQUENCE, normalizeTableStyleGuid, createTableStyleEntry, addTableStyleToMap, deleteTableStyleFromMap, PptxMarkdownConverter, ThemePresets, getThemePreset, setChartType, setChartTitle, setChartGrouping, setChartLegend, setChartDataLabels, setChartAxis, setChartCategories, addChartSeries, removeChartSeries, updateChartSeriesValues, ChartBuilder, setChartDataPointStyle, setChartDataPointExplosion, setChartDataPointMarker, setChartDataPointLabel, setChartSeriesMarker, setChartSeriesTrendline, setChartSeriesErrorBars, setChartHelperLine, setChartColorMapOverride, listChartUserShapes, addChartUserShape, updateChartUserShape, removeChartUserShape, decomposeSmartArt, demoteSmartArtNode, promoteSmartArtNode, reorderSmartArtNode, updateSmartArtNodeText, removeSmartArtNode, addSmartArtNode, findPlaceholders, applyTemplate, getSectionForSlide, moveSlidesToSection, reorderSections, removeSection, addSection, SvgExporter, buildPptxJsonDocument, deserializePptxFromJson, applyImportedPptxData, replaceWithCustomGeometry, replaceShapeGeometry, setElementLocked, findLayoutByName, findLayoutByType, resolveDisplayedChartTypeName } from 'pptx-viewer-core';
|
|
6
6
|
import { writeFile, readFile } from 'fs/promises';
|
|
7
7
|
import { resolve, isAbsolute, sep } from 'path';
|
|
8
8
|
|
|
@@ -152,7 +152,13 @@ var UpdateElementSchema = z.object({
|
|
|
152
152
|
opacity: z.number().min(0).max(1).optional(),
|
|
153
153
|
hidden: z.boolean().optional(),
|
|
154
154
|
flipH: z.boolean().optional(),
|
|
155
|
-
flipV: z.boolean().optional()
|
|
155
|
+
flipV: z.boolean().optional(),
|
|
156
|
+
altText: z.string().optional().describe(
|
|
157
|
+
"Accessibility description (p:cNvPr/@descr) for image, picture, table, chart, smartArt, ole, media, text, shape and connector elements"
|
|
158
|
+
),
|
|
159
|
+
title: z.string().optional().describe(
|
|
160
|
+
"Accessibility title (p:cNvPr/@title) for table, chart, smartArt, ole, media, text, shape and connector elements (not pictures)"
|
|
161
|
+
)
|
|
156
162
|
});
|
|
157
163
|
var RenameElementSchema = z.object({
|
|
158
164
|
filePath: z.string().describe("Path to the PPTX file"),
|
|
@@ -307,7 +313,12 @@ var UpdateElementStyleSchema = z.object({
|
|
|
307
313
|
brightness: z.number().optional(),
|
|
308
314
|
contrast: z.number().optional(),
|
|
309
315
|
grayscale: z.boolean().optional(),
|
|
310
|
-
altText: z.string().optional()
|
|
316
|
+
altText: z.string().optional().describe(
|
|
317
|
+
"Accessibility description (p:cNvPr/@descr) for image, picture, table, chart, smartArt, ole, media, text, shape and connector elements"
|
|
318
|
+
),
|
|
319
|
+
title: z.string().optional().describe(
|
|
320
|
+
"Accessibility title (p:cNvPr/@title) for table, chart, smartArt, ole, media, text, shape and connector elements (not pictures)"
|
|
321
|
+
)
|
|
311
322
|
});
|
|
312
323
|
var FindTextSchema = z.object({
|
|
313
324
|
filePath: z.string().describe("Path to the PPTX file"),
|
|
@@ -959,8 +970,8 @@ function describeElement(el) {
|
|
|
959
970
|
base.cells = tbl.tableData.rows.map((row) => row.cells.map((cell) => cell.text ?? ""));
|
|
960
971
|
}
|
|
961
972
|
}
|
|
962
|
-
if (el.type === "chart") {
|
|
963
|
-
base.chartType = el.chartData
|
|
973
|
+
if (el.type === "chart" && el.chartData) {
|
|
974
|
+
base.chartType = resolveDisplayedChartTypeName(el.chartData);
|
|
964
975
|
}
|
|
965
976
|
if (el.type === "group") {
|
|
966
977
|
const grp = el;
|
|
@@ -1629,6 +1640,240 @@ async function convertToMarkdown(ctx, params) {
|
|
|
1629
1640
|
}
|
|
1630
1641
|
};
|
|
1631
1642
|
}
|
|
1643
|
+
var ALT_TEXT_ELEMENT_TYPES = /* @__PURE__ */ new Set(["image", "picture", "table", "chart", "smartArt", "ole", "media", "text", "shape", "connector"]);
|
|
1644
|
+
var TITLE_ELEMENT_TYPES = /* @__PURE__ */ new Set([
|
|
1645
|
+
"table",
|
|
1646
|
+
"chart",
|
|
1647
|
+
"smartArt",
|
|
1648
|
+
"ole",
|
|
1649
|
+
"media",
|
|
1650
|
+
"text",
|
|
1651
|
+
"shape",
|
|
1652
|
+
"connector"
|
|
1653
|
+
]);
|
|
1654
|
+
function applyElementAltText(el, altText) {
|
|
1655
|
+
if (!ALT_TEXT_ELEMENT_TYPES.has(el.type)) {
|
|
1656
|
+
throw new Error(
|
|
1657
|
+
`Element '${el.id}' (${el.type}) does not support altText; only ${[...ALT_TEXT_ELEMENT_TYPES].join(", ")} elements do.`
|
|
1658
|
+
);
|
|
1659
|
+
}
|
|
1660
|
+
el.altText = altText;
|
|
1661
|
+
}
|
|
1662
|
+
function applyElementTitle(el, title) {
|
|
1663
|
+
if (!TITLE_ELEMENT_TYPES.has(el.type)) {
|
|
1664
|
+
throw new Error(
|
|
1665
|
+
`Element '${el.id}' (${el.type}) does not support title; only ${[...TITLE_ELEMENT_TYPES].join(", ")} elements do.`
|
|
1666
|
+
);
|
|
1667
|
+
}
|
|
1668
|
+
el.title = title;
|
|
1669
|
+
}
|
|
1670
|
+
function updateElementStyle(ctx, params) {
|
|
1671
|
+
const err = validateSlideIndex(params.slideIndex, ctx.pptxData.slides.length);
|
|
1672
|
+
if (err) {
|
|
1673
|
+
throw new Error(err);
|
|
1674
|
+
}
|
|
1675
|
+
const slide = ctx.pptxData.slides[params.slideIndex];
|
|
1676
|
+
const el = slide.elements.find((e) => e.id === params.elementId);
|
|
1677
|
+
if (!el) {
|
|
1678
|
+
throw new Error(`Element '${params.elementId}' not found on slide ${params.slideIndex}.`);
|
|
1679
|
+
}
|
|
1680
|
+
if ("shapeStyle" in el) {
|
|
1681
|
+
if (!el.shapeStyle) {
|
|
1682
|
+
el.shapeStyle = {};
|
|
1683
|
+
}
|
|
1684
|
+
const ss = el.shapeStyle;
|
|
1685
|
+
if (params.fillThemeColor !== void 0) {
|
|
1686
|
+
ss.fillColorRef = params.fillThemeColor;
|
|
1687
|
+
const resolved = resolveThemeColorRef(params.fillThemeColor, ctx.pptxData.themeColorMap);
|
|
1688
|
+
if (params.fillColor !== void 0) {
|
|
1689
|
+
ss.fillColor = params.fillColor;
|
|
1690
|
+
} else if (resolved) {
|
|
1691
|
+
ss.fillColor = resolved;
|
|
1692
|
+
}
|
|
1693
|
+
} else if (params.fillColor !== void 0) {
|
|
1694
|
+
ss.fillColor = params.fillColor;
|
|
1695
|
+
ss.fillColorRef = void 0;
|
|
1696
|
+
}
|
|
1697
|
+
if (params.fillMode !== void 0) {
|
|
1698
|
+
ss.fillMode = params.fillMode;
|
|
1699
|
+
}
|
|
1700
|
+
if (params.fillGradientStops !== void 0) {
|
|
1701
|
+
ss.fillGradientStops = params.fillGradientStops;
|
|
1702
|
+
}
|
|
1703
|
+
if (params.fillGradientAngle !== void 0) {
|
|
1704
|
+
ss.fillGradientAngle = params.fillGradientAngle;
|
|
1705
|
+
}
|
|
1706
|
+
if (params.fillGradientType !== void 0) {
|
|
1707
|
+
ss.fillGradientType = params.fillGradientType;
|
|
1708
|
+
}
|
|
1709
|
+
if (params.fillOpacity !== void 0) {
|
|
1710
|
+
ss.fillOpacity = params.fillOpacity;
|
|
1711
|
+
}
|
|
1712
|
+
if (params.strokeThemeColor !== void 0) {
|
|
1713
|
+
ss.strokeColorRef = params.strokeThemeColor;
|
|
1714
|
+
const resolved = resolveThemeColorRef(params.strokeThemeColor, ctx.pptxData.themeColorMap);
|
|
1715
|
+
if (params.strokeColor !== void 0) {
|
|
1716
|
+
ss.strokeColor = params.strokeColor;
|
|
1717
|
+
} else if (resolved) {
|
|
1718
|
+
ss.strokeColor = resolved;
|
|
1719
|
+
}
|
|
1720
|
+
} else if (params.strokeColor !== void 0) {
|
|
1721
|
+
ss.strokeColor = params.strokeColor;
|
|
1722
|
+
ss.strokeColorRef = void 0;
|
|
1723
|
+
}
|
|
1724
|
+
if (params.strokeWidth !== void 0) {
|
|
1725
|
+
ss.strokeWidth = params.strokeWidth;
|
|
1726
|
+
}
|
|
1727
|
+
if (params.strokeDash !== void 0) {
|
|
1728
|
+
ss.strokeDash = params.strokeDash;
|
|
1729
|
+
}
|
|
1730
|
+
if (params.strokeOpacity !== void 0) {
|
|
1731
|
+
ss.strokeOpacity = params.strokeOpacity;
|
|
1732
|
+
}
|
|
1733
|
+
if (params.shadowColor !== void 0) {
|
|
1734
|
+
ss.shadowColor = params.shadowColor;
|
|
1735
|
+
}
|
|
1736
|
+
if (params.shadowBlur !== void 0) {
|
|
1737
|
+
ss.shadowBlur = params.shadowBlur;
|
|
1738
|
+
}
|
|
1739
|
+
if (params.shadowOffsetX !== void 0) {
|
|
1740
|
+
ss.shadowOffsetX = params.shadowOffsetX;
|
|
1741
|
+
}
|
|
1742
|
+
if (params.shadowOffsetY !== void 0) {
|
|
1743
|
+
ss.shadowOffsetY = params.shadowOffsetY;
|
|
1744
|
+
}
|
|
1745
|
+
if (params.shadowOpacity !== void 0) {
|
|
1746
|
+
ss.shadowOpacity = params.shadowOpacity;
|
|
1747
|
+
}
|
|
1748
|
+
if (params.glowColor !== void 0) {
|
|
1749
|
+
ss.glowColor = params.glowColor;
|
|
1750
|
+
}
|
|
1751
|
+
if (params.glowRadius !== void 0) {
|
|
1752
|
+
ss.glowRadius = params.glowRadius;
|
|
1753
|
+
}
|
|
1754
|
+
if (params.glowOpacity !== void 0) {
|
|
1755
|
+
ss.glowOpacity = params.glowOpacity;
|
|
1756
|
+
}
|
|
1757
|
+
if (params.softEdgeRadius !== void 0) {
|
|
1758
|
+
ss.softEdgeRadius = params.softEdgeRadius;
|
|
1759
|
+
}
|
|
1760
|
+
}
|
|
1761
|
+
if (params.altText !== void 0) {
|
|
1762
|
+
applyElementAltText(el, params.altText);
|
|
1763
|
+
}
|
|
1764
|
+
if (params.title !== void 0) {
|
|
1765
|
+
applyElementTitle(el, params.title);
|
|
1766
|
+
}
|
|
1767
|
+
if (el.type === "image" || el.type === "picture") {
|
|
1768
|
+
const img = el;
|
|
1769
|
+
if (params.cropLeft !== void 0) {
|
|
1770
|
+
img.cropLeft = params.cropLeft;
|
|
1771
|
+
}
|
|
1772
|
+
if (params.cropTop !== void 0) {
|
|
1773
|
+
img.cropTop = params.cropTop;
|
|
1774
|
+
}
|
|
1775
|
+
if (params.cropRight !== void 0) {
|
|
1776
|
+
img.cropRight = params.cropRight;
|
|
1777
|
+
}
|
|
1778
|
+
if (params.cropBottom !== void 0) {
|
|
1779
|
+
img.cropBottom = params.cropBottom;
|
|
1780
|
+
}
|
|
1781
|
+
if (params.brightness !== void 0 || params.contrast !== void 0 || params.grayscale !== void 0) {
|
|
1782
|
+
if (!img.imageEffects) {
|
|
1783
|
+
img.imageEffects = {};
|
|
1784
|
+
}
|
|
1785
|
+
if (params.brightness !== void 0) {
|
|
1786
|
+
img.imageEffects.brightness = params.brightness;
|
|
1787
|
+
}
|
|
1788
|
+
if (params.contrast !== void 0) {
|
|
1789
|
+
img.imageEffects.contrast = params.contrast;
|
|
1790
|
+
}
|
|
1791
|
+
if (params.grayscale !== void 0) {
|
|
1792
|
+
img.imageEffects.grayscale = params.grayscale;
|
|
1793
|
+
}
|
|
1794
|
+
}
|
|
1795
|
+
}
|
|
1796
|
+
return {
|
|
1797
|
+
pptxData: ctx.pptxData,
|
|
1798
|
+
dirty: true,
|
|
1799
|
+
result: { elementId: params.elementId }
|
|
1800
|
+
};
|
|
1801
|
+
}
|
|
1802
|
+
function runAccessibilityCheck(ctx) {
|
|
1803
|
+
const issues = [];
|
|
1804
|
+
for (let si = 0; si < ctx.pptxData.slides.length; si++) {
|
|
1805
|
+
const slide = ctx.pptxData.slides[si];
|
|
1806
|
+
let slideHasText = false;
|
|
1807
|
+
for (const el of slide.elements) {
|
|
1808
|
+
if (el.type === "image" || el.type === "picture") {
|
|
1809
|
+
const img = el;
|
|
1810
|
+
if (!img.altText) {
|
|
1811
|
+
issues.push({
|
|
1812
|
+
slideIndex: si,
|
|
1813
|
+
elementId: el.id,
|
|
1814
|
+
severity: "error",
|
|
1815
|
+
message: `Image element '${el.id}' has no alt text.`
|
|
1816
|
+
});
|
|
1817
|
+
}
|
|
1818
|
+
}
|
|
1819
|
+
if (hasTextProperties(el)) {
|
|
1820
|
+
const textEl = el;
|
|
1821
|
+
slideHasText = true;
|
|
1822
|
+
if (!textEl.text || textEl.text.trim() === "") {
|
|
1823
|
+
issues.push({
|
|
1824
|
+
slideIndex: si,
|
|
1825
|
+
elementId: el.id,
|
|
1826
|
+
severity: "info",
|
|
1827
|
+
message: `Text element '${el.id}' is empty.`
|
|
1828
|
+
});
|
|
1829
|
+
}
|
|
1830
|
+
const fs = textEl.textStyle?.fontSize;
|
|
1831
|
+
if (fs !== void 0 && fs < 10) {
|
|
1832
|
+
issues.push({
|
|
1833
|
+
slideIndex: si,
|
|
1834
|
+
elementId: el.id,
|
|
1835
|
+
severity: "warning",
|
|
1836
|
+
message: `Text element '${el.id}' has very small font size (${fs}pt < 10pt).`
|
|
1837
|
+
});
|
|
1838
|
+
}
|
|
1839
|
+
const textColor = textEl.textStyle?.color?.toLowerCase();
|
|
1840
|
+
const bgColor = slide.backgroundColor?.toLowerCase();
|
|
1841
|
+
if (textColor && bgColor && textColor === bgColor) {
|
|
1842
|
+
issues.push({
|
|
1843
|
+
slideIndex: si,
|
|
1844
|
+
elementId: el.id,
|
|
1845
|
+
severity: "error",
|
|
1846
|
+
message: `Text element '${el.id}' has same color as slide background (${textColor}).`
|
|
1847
|
+
});
|
|
1848
|
+
}
|
|
1849
|
+
}
|
|
1850
|
+
}
|
|
1851
|
+
if (!slideHasText) {
|
|
1852
|
+
issues.push({
|
|
1853
|
+
slideIndex: si,
|
|
1854
|
+
severity: "warning",
|
|
1855
|
+
message: `Slide ${si + 1} contains no text elements.`
|
|
1856
|
+
});
|
|
1857
|
+
}
|
|
1858
|
+
}
|
|
1859
|
+
const errorCount = issues.filter((i) => i.severity === "error").length;
|
|
1860
|
+
const warningCount = issues.filter((i) => i.severity === "warning").length;
|
|
1861
|
+
const infoCount = issues.filter((i) => i.severity === "info").length;
|
|
1862
|
+
return {
|
|
1863
|
+
pptxData: ctx.pptxData,
|
|
1864
|
+
dirty: false,
|
|
1865
|
+
result: {
|
|
1866
|
+
slideCount: ctx.pptxData.slides.length,
|
|
1867
|
+
totalIssues: issues.length,
|
|
1868
|
+
errorCount,
|
|
1869
|
+
warningCount,
|
|
1870
|
+
infoCount,
|
|
1871
|
+
issues
|
|
1872
|
+
}
|
|
1873
|
+
};
|
|
1874
|
+
}
|
|
1875
|
+
|
|
1876
|
+
// src/tools/element-tools.ts
|
|
1632
1877
|
function addElement(ctx, params) {
|
|
1633
1878
|
const err = validateSlideIndex(params.slideIndex, ctx.pptxData.slides.length);
|
|
1634
1879
|
if (err) {
|
|
@@ -1808,6 +2053,12 @@ function updateElement(ctx, params) {
|
|
|
1808
2053
|
if (params.flipV !== void 0) {
|
|
1809
2054
|
el.flipVertical = params.flipV;
|
|
1810
2055
|
}
|
|
2056
|
+
if (params.altText !== void 0) {
|
|
2057
|
+
applyElementAltText(el, params.altText);
|
|
2058
|
+
}
|
|
2059
|
+
if (params.title !== void 0) {
|
|
2060
|
+
applyElementTitle(el, params.title);
|
|
2061
|
+
}
|
|
1811
2062
|
if (hasTextProperties(el)) {
|
|
1812
2063
|
const textEl = el;
|
|
1813
2064
|
if (params.text !== void 0) {
|
|
@@ -3062,208 +3313,6 @@ function manageSmartArt(ctx, params) {
|
|
|
3062
3313
|
throw new Error(`Unknown SmartArt action: ${String(params.action)}`);
|
|
3063
3314
|
}
|
|
3064
3315
|
}
|
|
3065
|
-
function updateElementStyle(ctx, params) {
|
|
3066
|
-
const err = validateSlideIndex(params.slideIndex, ctx.pptxData.slides.length);
|
|
3067
|
-
if (err) {
|
|
3068
|
-
throw new Error(err);
|
|
3069
|
-
}
|
|
3070
|
-
const slide = ctx.pptxData.slides[params.slideIndex];
|
|
3071
|
-
const el = slide.elements.find((e) => e.id === params.elementId);
|
|
3072
|
-
if (!el) {
|
|
3073
|
-
throw new Error(`Element '${params.elementId}' not found on slide ${params.slideIndex}.`);
|
|
3074
|
-
}
|
|
3075
|
-
if ("shapeStyle" in el) {
|
|
3076
|
-
if (!el.shapeStyle) {
|
|
3077
|
-
el.shapeStyle = {};
|
|
3078
|
-
}
|
|
3079
|
-
const ss = el.shapeStyle;
|
|
3080
|
-
if (params.fillThemeColor !== void 0) {
|
|
3081
|
-
ss.fillColorRef = params.fillThemeColor;
|
|
3082
|
-
const resolved = resolveThemeColorRef(params.fillThemeColor, ctx.pptxData.themeColorMap);
|
|
3083
|
-
if (params.fillColor !== void 0) {
|
|
3084
|
-
ss.fillColor = params.fillColor;
|
|
3085
|
-
} else if (resolved) {
|
|
3086
|
-
ss.fillColor = resolved;
|
|
3087
|
-
}
|
|
3088
|
-
} else if (params.fillColor !== void 0) {
|
|
3089
|
-
ss.fillColor = params.fillColor;
|
|
3090
|
-
ss.fillColorRef = void 0;
|
|
3091
|
-
}
|
|
3092
|
-
if (params.fillMode !== void 0) {
|
|
3093
|
-
ss.fillMode = params.fillMode;
|
|
3094
|
-
}
|
|
3095
|
-
if (params.fillGradientStops !== void 0) {
|
|
3096
|
-
ss.fillGradientStops = params.fillGradientStops;
|
|
3097
|
-
}
|
|
3098
|
-
if (params.fillGradientAngle !== void 0) {
|
|
3099
|
-
ss.fillGradientAngle = params.fillGradientAngle;
|
|
3100
|
-
}
|
|
3101
|
-
if (params.fillGradientType !== void 0) {
|
|
3102
|
-
ss.fillGradientType = params.fillGradientType;
|
|
3103
|
-
}
|
|
3104
|
-
if (params.fillOpacity !== void 0) {
|
|
3105
|
-
ss.fillOpacity = params.fillOpacity;
|
|
3106
|
-
}
|
|
3107
|
-
if (params.strokeThemeColor !== void 0) {
|
|
3108
|
-
ss.strokeColorRef = params.strokeThemeColor;
|
|
3109
|
-
const resolved = resolveThemeColorRef(params.strokeThemeColor, ctx.pptxData.themeColorMap);
|
|
3110
|
-
if (params.strokeColor !== void 0) {
|
|
3111
|
-
ss.strokeColor = params.strokeColor;
|
|
3112
|
-
} else if (resolved) {
|
|
3113
|
-
ss.strokeColor = resolved;
|
|
3114
|
-
}
|
|
3115
|
-
} else if (params.strokeColor !== void 0) {
|
|
3116
|
-
ss.strokeColor = params.strokeColor;
|
|
3117
|
-
ss.strokeColorRef = void 0;
|
|
3118
|
-
}
|
|
3119
|
-
if (params.strokeWidth !== void 0) {
|
|
3120
|
-
ss.strokeWidth = params.strokeWidth;
|
|
3121
|
-
}
|
|
3122
|
-
if (params.strokeDash !== void 0) {
|
|
3123
|
-
ss.strokeDash = params.strokeDash;
|
|
3124
|
-
}
|
|
3125
|
-
if (params.strokeOpacity !== void 0) {
|
|
3126
|
-
ss.strokeOpacity = params.strokeOpacity;
|
|
3127
|
-
}
|
|
3128
|
-
if (params.shadowColor !== void 0) {
|
|
3129
|
-
ss.shadowColor = params.shadowColor;
|
|
3130
|
-
}
|
|
3131
|
-
if (params.shadowBlur !== void 0) {
|
|
3132
|
-
ss.shadowBlur = params.shadowBlur;
|
|
3133
|
-
}
|
|
3134
|
-
if (params.shadowOffsetX !== void 0) {
|
|
3135
|
-
ss.shadowOffsetX = params.shadowOffsetX;
|
|
3136
|
-
}
|
|
3137
|
-
if (params.shadowOffsetY !== void 0) {
|
|
3138
|
-
ss.shadowOffsetY = params.shadowOffsetY;
|
|
3139
|
-
}
|
|
3140
|
-
if (params.shadowOpacity !== void 0) {
|
|
3141
|
-
ss.shadowOpacity = params.shadowOpacity;
|
|
3142
|
-
}
|
|
3143
|
-
if (params.glowColor !== void 0) {
|
|
3144
|
-
ss.glowColor = params.glowColor;
|
|
3145
|
-
}
|
|
3146
|
-
if (params.glowRadius !== void 0) {
|
|
3147
|
-
ss.glowRadius = params.glowRadius;
|
|
3148
|
-
}
|
|
3149
|
-
if (params.glowOpacity !== void 0) {
|
|
3150
|
-
ss.glowOpacity = params.glowOpacity;
|
|
3151
|
-
}
|
|
3152
|
-
if (params.softEdgeRadius !== void 0) {
|
|
3153
|
-
ss.softEdgeRadius = params.softEdgeRadius;
|
|
3154
|
-
}
|
|
3155
|
-
}
|
|
3156
|
-
if (el.type === "image" || el.type === "picture") {
|
|
3157
|
-
const img = el;
|
|
3158
|
-
if (params.altText !== void 0) {
|
|
3159
|
-
img.altText = params.altText;
|
|
3160
|
-
}
|
|
3161
|
-
if (params.cropLeft !== void 0) {
|
|
3162
|
-
img.cropLeft = params.cropLeft;
|
|
3163
|
-
}
|
|
3164
|
-
if (params.cropTop !== void 0) {
|
|
3165
|
-
img.cropTop = params.cropTop;
|
|
3166
|
-
}
|
|
3167
|
-
if (params.cropRight !== void 0) {
|
|
3168
|
-
img.cropRight = params.cropRight;
|
|
3169
|
-
}
|
|
3170
|
-
if (params.cropBottom !== void 0) {
|
|
3171
|
-
img.cropBottom = params.cropBottom;
|
|
3172
|
-
}
|
|
3173
|
-
if (params.brightness !== void 0 || params.contrast !== void 0 || params.grayscale !== void 0) {
|
|
3174
|
-
if (!img.imageEffects) {
|
|
3175
|
-
img.imageEffects = {};
|
|
3176
|
-
}
|
|
3177
|
-
if (params.brightness !== void 0) {
|
|
3178
|
-
img.imageEffects.brightness = params.brightness;
|
|
3179
|
-
}
|
|
3180
|
-
if (params.contrast !== void 0) {
|
|
3181
|
-
img.imageEffects.contrast = params.contrast;
|
|
3182
|
-
}
|
|
3183
|
-
if (params.grayscale !== void 0) {
|
|
3184
|
-
img.imageEffects.grayscale = params.grayscale;
|
|
3185
|
-
}
|
|
3186
|
-
}
|
|
3187
|
-
}
|
|
3188
|
-
return {
|
|
3189
|
-
pptxData: ctx.pptxData,
|
|
3190
|
-
dirty: true,
|
|
3191
|
-
result: { elementId: params.elementId }
|
|
3192
|
-
};
|
|
3193
|
-
}
|
|
3194
|
-
function runAccessibilityCheck(ctx) {
|
|
3195
|
-
const issues = [];
|
|
3196
|
-
for (let si = 0; si < ctx.pptxData.slides.length; si++) {
|
|
3197
|
-
const slide = ctx.pptxData.slides[si];
|
|
3198
|
-
let slideHasText = false;
|
|
3199
|
-
for (const el of slide.elements) {
|
|
3200
|
-
if (el.type === "image" || el.type === "picture") {
|
|
3201
|
-
const img = el;
|
|
3202
|
-
if (!img.altText) {
|
|
3203
|
-
issues.push({
|
|
3204
|
-
slideIndex: si,
|
|
3205
|
-
elementId: el.id,
|
|
3206
|
-
severity: "error",
|
|
3207
|
-
message: `Image element '${el.id}' has no alt text.`
|
|
3208
|
-
});
|
|
3209
|
-
}
|
|
3210
|
-
}
|
|
3211
|
-
if (hasTextProperties(el)) {
|
|
3212
|
-
const textEl = el;
|
|
3213
|
-
slideHasText = true;
|
|
3214
|
-
if (!textEl.text || textEl.text.trim() === "") {
|
|
3215
|
-
issues.push({
|
|
3216
|
-
slideIndex: si,
|
|
3217
|
-
elementId: el.id,
|
|
3218
|
-
severity: "info",
|
|
3219
|
-
message: `Text element '${el.id}' is empty.`
|
|
3220
|
-
});
|
|
3221
|
-
}
|
|
3222
|
-
const fs = textEl.textStyle?.fontSize;
|
|
3223
|
-
if (fs !== void 0 && fs < 10) {
|
|
3224
|
-
issues.push({
|
|
3225
|
-
slideIndex: si,
|
|
3226
|
-
elementId: el.id,
|
|
3227
|
-
severity: "warning",
|
|
3228
|
-
message: `Text element '${el.id}' has very small font size (${fs}pt < 10pt).`
|
|
3229
|
-
});
|
|
3230
|
-
}
|
|
3231
|
-
const textColor = textEl.textStyle?.color?.toLowerCase();
|
|
3232
|
-
const bgColor = slide.backgroundColor?.toLowerCase();
|
|
3233
|
-
if (textColor && bgColor && textColor === bgColor) {
|
|
3234
|
-
issues.push({
|
|
3235
|
-
slideIndex: si,
|
|
3236
|
-
elementId: el.id,
|
|
3237
|
-
severity: "error",
|
|
3238
|
-
message: `Text element '${el.id}' has same color as slide background (${textColor}).`
|
|
3239
|
-
});
|
|
3240
|
-
}
|
|
3241
|
-
}
|
|
3242
|
-
}
|
|
3243
|
-
if (!slideHasText) {
|
|
3244
|
-
issues.push({
|
|
3245
|
-
slideIndex: si,
|
|
3246
|
-
severity: "warning",
|
|
3247
|
-
message: `Slide ${si + 1} contains no text elements.`
|
|
3248
|
-
});
|
|
3249
|
-
}
|
|
3250
|
-
}
|
|
3251
|
-
const errorCount = issues.filter((i) => i.severity === "error").length;
|
|
3252
|
-
const warningCount = issues.filter((i) => i.severity === "warning").length;
|
|
3253
|
-
const infoCount = issues.filter((i) => i.severity === "info").length;
|
|
3254
|
-
return {
|
|
3255
|
-
pptxData: ctx.pptxData,
|
|
3256
|
-
dirty: false,
|
|
3257
|
-
result: {
|
|
3258
|
-
slideCount: ctx.pptxData.slides.length,
|
|
3259
|
-
totalIssues: issues.length,
|
|
3260
|
-
errorCount,
|
|
3261
|
-
warningCount,
|
|
3262
|
-
infoCount,
|
|
3263
|
-
issues
|
|
3264
|
-
}
|
|
3265
|
-
};
|
|
3266
|
-
}
|
|
3267
3316
|
function findTableElement(ctx, slideIndex, elementId) {
|
|
3268
3317
|
const err = validateSlideIndex(slideIndex, ctx.pptxData.slides.length);
|
|
3269
3318
|
if (err) {
|
package/dist/schemas/index.d.ts
CHANGED
|
@@ -159,6 +159,8 @@ declare const UpdateElementSchema: z.ZodObject<{
|
|
|
159
159
|
hidden: z.ZodOptional<z.ZodBoolean>;
|
|
160
160
|
flipH: z.ZodOptional<z.ZodBoolean>;
|
|
161
161
|
flipV: z.ZodOptional<z.ZodBoolean>;
|
|
162
|
+
altText: z.ZodOptional<z.ZodString>;
|
|
163
|
+
title: z.ZodOptional<z.ZodString>;
|
|
162
164
|
}, z.core.$strip>;
|
|
163
165
|
declare const RenameElementSchema: z.ZodObject<{
|
|
164
166
|
filePath: z.ZodString;
|
|
@@ -348,6 +350,7 @@ declare const UpdateElementStyleSchema: z.ZodObject<{
|
|
|
348
350
|
contrast: z.ZodOptional<z.ZodNumber>;
|
|
349
351
|
grayscale: z.ZodOptional<z.ZodBoolean>;
|
|
350
352
|
altText: z.ZodOptional<z.ZodString>;
|
|
353
|
+
title: z.ZodOptional<z.ZodString>;
|
|
351
354
|
}, z.core.$strip>;
|
|
352
355
|
declare const FindTextSchema: z.ZodObject<{
|
|
353
356
|
filePath: z.ZodString;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/schemas/slide-schemas.ts","../../src/schemas/element-schemas.ts","../../src/schemas/table-style-schemas.ts","../../src/schemas/theme-schemas.ts","../../src/schemas/chart-formatting-schemas.ts","../../src/schemas/chart-schemas.ts","../../src/schemas/chart-user-shape-schemas.ts","../../src/schemas/smartart-schemas.ts","../../src/schemas/template-schemas.ts","../../src/schemas/metadata-schemas.ts","../../src/schemas/section-schemas.ts","../../src/schemas/export-schemas.ts","../../src/schemas/json-schemas.ts","../../src/schemas/hyperlink-schemas.ts","../../src/schemas/geometry-schemas.ts","../../src/schemas/lock-schemas.ts","../../src/schemas/validation-schemas.ts","../../src/schemas/presentation-schemas.ts","../../src/schemas/layout-schemas.ts"],"mappings":";;cAEa,gBAAc,EAAA;;;GAGzB,EAAA,KAAA;cAEW,gBAAc,EAAA;;;;GAIzB,EAAA,KAAA;cAEW,oBAAkB,EAAA;;;GAG7B,EAAA,KAAA;cAEW,qBAAmB,EAAA;;;GAG9B,EAAA,KAAA;cAEW,sBAAoB,EAAA;;;;GAI/B,EAAA,KAAA;cAEW,6BAA2B,EAAA;;;;;;;;GAQtC,EAAA,KAAA;cAEW,0BAAwB,EAAA;;;;;;;;GAQnC,EAAA,KAAA;cAEW,qBAAmB,EAAA;;;;GAI9B,EAAA,KAAA;cAEW,yBAAuB,EAAA;;;;;;;;;;;GAclC,EAAA,KAAA;cAEW,0BAAwB,EAAA;;GAEnC,EAAA,KAAA;;;cCrCW,kBAAgB,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8B3B,EAAA,KAAA;cAEW,qBAAmB,EAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/schemas/slide-schemas.ts","../../src/schemas/element-schemas.ts","../../src/schemas/table-style-schemas.ts","../../src/schemas/theme-schemas.ts","../../src/schemas/chart-formatting-schemas.ts","../../src/schemas/chart-schemas.ts","../../src/schemas/chart-user-shape-schemas.ts","../../src/schemas/smartart-schemas.ts","../../src/schemas/template-schemas.ts","../../src/schemas/metadata-schemas.ts","../../src/schemas/section-schemas.ts","../../src/schemas/export-schemas.ts","../../src/schemas/json-schemas.ts","../../src/schemas/hyperlink-schemas.ts","../../src/schemas/geometry-schemas.ts","../../src/schemas/lock-schemas.ts","../../src/schemas/validation-schemas.ts","../../src/schemas/presentation-schemas.ts","../../src/schemas/layout-schemas.ts"],"mappings":"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"}
|
package/dist/schemas/index.js
CHANGED
|
@@ -149,7 +149,13 @@ var UpdateElementSchema = zod.z.object({
|
|
|
149
149
|
opacity: zod.z.number().min(0).max(1).optional(),
|
|
150
150
|
hidden: zod.z.boolean().optional(),
|
|
151
151
|
flipH: zod.z.boolean().optional(),
|
|
152
|
-
flipV: zod.z.boolean().optional()
|
|
152
|
+
flipV: zod.z.boolean().optional(),
|
|
153
|
+
altText: zod.z.string().optional().describe(
|
|
154
|
+
"Accessibility description (p:cNvPr/@descr) for image, picture, table, chart, smartArt, ole, media, text, shape and connector elements"
|
|
155
|
+
),
|
|
156
|
+
title: zod.z.string().optional().describe(
|
|
157
|
+
"Accessibility title (p:cNvPr/@title) for table, chart, smartArt, ole, media, text, shape and connector elements (not pictures)"
|
|
158
|
+
)
|
|
153
159
|
});
|
|
154
160
|
var RenameElementSchema = zod.z.object({
|
|
155
161
|
filePath: zod.z.string().describe("Path to the PPTX file"),
|
|
@@ -304,7 +310,12 @@ var UpdateElementStyleSchema = zod.z.object({
|
|
|
304
310
|
brightness: zod.z.number().optional(),
|
|
305
311
|
contrast: zod.z.number().optional(),
|
|
306
312
|
grayscale: zod.z.boolean().optional(),
|
|
307
|
-
altText: zod.z.string().optional()
|
|
313
|
+
altText: zod.z.string().optional().describe(
|
|
314
|
+
"Accessibility description (p:cNvPr/@descr) for image, picture, table, chart, smartArt, ole, media, text, shape and connector elements"
|
|
315
|
+
),
|
|
316
|
+
title: zod.z.string().optional().describe(
|
|
317
|
+
"Accessibility title (p:cNvPr/@title) for table, chart, smartArt, ole, media, text, shape and connector elements (not pictures)"
|
|
318
|
+
)
|
|
308
319
|
});
|
|
309
320
|
var FindTextSchema = zod.z.object({
|
|
310
321
|
filePath: zod.z.string().describe("Path to the PPTX file"),
|
package/dist/schemas/index.mjs
CHANGED
|
@@ -147,7 +147,13 @@ var UpdateElementSchema = z.object({
|
|
|
147
147
|
opacity: z.number().min(0).max(1).optional(),
|
|
148
148
|
hidden: z.boolean().optional(),
|
|
149
149
|
flipH: z.boolean().optional(),
|
|
150
|
-
flipV: z.boolean().optional()
|
|
150
|
+
flipV: z.boolean().optional(),
|
|
151
|
+
altText: z.string().optional().describe(
|
|
152
|
+
"Accessibility description (p:cNvPr/@descr) for image, picture, table, chart, smartArt, ole, media, text, shape and connector elements"
|
|
153
|
+
),
|
|
154
|
+
title: z.string().optional().describe(
|
|
155
|
+
"Accessibility title (p:cNvPr/@title) for table, chart, smartArt, ole, media, text, shape and connector elements (not pictures)"
|
|
156
|
+
)
|
|
151
157
|
});
|
|
152
158
|
var RenameElementSchema = z.object({
|
|
153
159
|
filePath: z.string().describe("Path to the PPTX file"),
|
|
@@ -302,7 +308,12 @@ var UpdateElementStyleSchema = z.object({
|
|
|
302
308
|
brightness: z.number().optional(),
|
|
303
309
|
contrast: z.number().optional(),
|
|
304
310
|
grayscale: z.boolean().optional(),
|
|
305
|
-
altText: z.string().optional()
|
|
311
|
+
altText: z.string().optional().describe(
|
|
312
|
+
"Accessibility description (p:cNvPr/@descr) for image, picture, table, chart, smartArt, ole, media, text, shape and connector elements"
|
|
313
|
+
),
|
|
314
|
+
title: z.string().optional().describe(
|
|
315
|
+
"Accessibility title (p:cNvPr/@title) for table, chart, smartArt, ole, media, text, shape and connector elements (not pictures)"
|
|
316
|
+
)
|
|
306
317
|
});
|
|
307
318
|
var FindTextSchema = z.object({
|
|
308
319
|
filePath: z.string().describe("Path to the PPTX file"),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pptx-viewer-mcp",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.1",
|
|
4
4
|
"description": "PowerPoint PPTX tools and MCP server: manipulate, convert, and collaborate on .pptx files from AI agents.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
73
73
|
"fast-xml-parser": "^5.11.0",
|
|
74
74
|
"jszip": "^3.10.1",
|
|
75
|
-
"pptx-viewer-core": "^3.
|
|
75
|
+
"pptx-viewer-core": "^3.7.0",
|
|
76
76
|
"zod": "^4.4.3"
|
|
77
77
|
},
|
|
78
78
|
"devDependencies": {
|