pptx-viewer-mcp 1.1.27 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,8 @@ All notable changes to this project are documented here.
4
4
  This file is generated from [Conventional Commits](https://www.conventionalcommits.org)
5
5
  by [git-cliff](https://git-cliff.org); do not edit it by hand.
6
6
 
7
+ ## [1.2.0](https://github.com/ChristopherVR/pptx-viewer/releases/tag/pptx-viewer-mcp@1.2.0) - 2026-07-06
8
+
7
9
  ## [1.1.26](https://github.com/ChristopherVR/pptx-viewer/releases/tag/pptx-viewer-mcp@1.1.26) - 2026-06-21
8
10
 
9
11
  ### Features
@@ -23,6 +23,25 @@ interface FormatCodec {
23
23
  dehydrate: (ydoc: Doc, dirtyPaths?: string[]) => Promise<Uint8Array>;
24
24
  observe: (ydoc: Doc, onChange: () => void) => () => void;
25
25
  }
26
+ /**
27
+ * Field coverage is derived from `pptx-viewer-core`'s
28
+ * `ELEMENT_FIELD_KIND`/`SLIDE_FIELD_KIND` (the same canonical inventory the
29
+ * viewer's `collaboration-sync.ts` allowlists derive from), so this codec
30
+ * automatically tracks every field `PptxElement`/`PptxSlide` declares
31
+ * instead of drifting out of sync with a hand-maintained list. Wire-format
32
+ * prefixes stay long-form (`_textStyle`) here versus the viewer schema's
33
+ * short-form (`_ts`) - the two Y.Doc layouts are intentionally NOT
34
+ * interchangeable, only the field *coverage* is required to match.
35
+ *
36
+ * `asset`-kind fields (large binary payloads like `mediaData`) are simply
37
+ * embedded as scalars here rather than routed through a separate asset map:
38
+ * this codec does one-shot bidirectional file<->Y.Doc conversion, not a
39
+ * live P2P transport, so there's no repeated-write cost to avoid.
40
+ */
41
+ declare const SCALAR_ELEMENT_KEYS: Set<string>;
42
+ declare const COMPLEX_FIELD_MAP: Record<string, string>;
43
+ declare const SCALAR_SLIDE_KEYS: Set<string>;
44
+ declare const COMPLEX_SLIDE_FIELD_MAP: Record<string, string>;
26
45
  declare class PptxCodec implements FormatCodec {
27
46
  readonly formatId = "pptx";
28
47
  readonly extensions: string[];
@@ -35,4 +54,4 @@ declare class PptxCodec implements FormatCodec {
35
54
  private _yMapToElement;
36
55
  }
37
56
 
38
- export { type FormatCodec, ORIGIN_FILE_LOAD, PptxCodec };
57
+ export { COMPLEX_FIELD_MAP, COMPLEX_SLIDE_FIELD_MAP, type FormatCodec, ORIGIN_FILE_LOAD, PptxCodec, SCALAR_ELEMENT_KEYS, SCALAR_SLIDE_KEYS };
@@ -23,6 +23,25 @@ interface FormatCodec {
23
23
  dehydrate: (ydoc: Doc, dirtyPaths?: string[]) => Promise<Uint8Array>;
24
24
  observe: (ydoc: Doc, onChange: () => void) => () => void;
25
25
  }
26
+ /**
27
+ * Field coverage is derived from `pptx-viewer-core`'s
28
+ * `ELEMENT_FIELD_KIND`/`SLIDE_FIELD_KIND` (the same canonical inventory the
29
+ * viewer's `collaboration-sync.ts` allowlists derive from), so this codec
30
+ * automatically tracks every field `PptxElement`/`PptxSlide` declares
31
+ * instead of drifting out of sync with a hand-maintained list. Wire-format
32
+ * prefixes stay long-form (`_textStyle`) here versus the viewer schema's
33
+ * short-form (`_ts`) - the two Y.Doc layouts are intentionally NOT
34
+ * interchangeable, only the field *coverage* is required to match.
35
+ *
36
+ * `asset`-kind fields (large binary payloads like `mediaData`) are simply
37
+ * embedded as scalars here rather than routed through a separate asset map:
38
+ * this codec does one-shot bidirectional file<->Y.Doc conversion, not a
39
+ * live P2P transport, so there's no repeated-write cost to avoid.
40
+ */
41
+ declare const SCALAR_ELEMENT_KEYS: Set<string>;
42
+ declare const COMPLEX_FIELD_MAP: Record<string, string>;
43
+ declare const SCALAR_SLIDE_KEYS: Set<string>;
44
+ declare const COMPLEX_SLIDE_FIELD_MAP: Record<string, string>;
26
45
  declare class PptxCodec implements FormatCodec {
27
46
  readonly formatId = "pptx";
28
47
  readonly extensions: string[];
@@ -35,4 +54,4 @@ declare class PptxCodec implements FormatCodec {
35
54
  private _yMapToElement;
36
55
  }
37
56
 
38
- export { type FormatCodec, ORIGIN_FILE_LOAD, PptxCodec };
57
+ export { COMPLEX_FIELD_MAP, COMPLEX_SLIDE_FIELD_MAP, type FormatCodec, ORIGIN_FILE_LOAD, PptxCodec, SCALAR_ELEMENT_KEYS, SCALAR_SLIDE_KEYS };
@@ -176,93 +176,22 @@ function decodeTextBodyFromYText(ytext) {
176
176
 
177
177
  // src/codec/pptx-codec.ts
178
178
  var ORIGIN_FILE_LOAD = "file-load";
179
- var SCALAR_ELEMENT_KEYS = /* @__PURE__ */ new Set([
180
- "id",
181
- "type",
182
- "x",
183
- "y",
184
- "width",
185
- "height",
186
- "rotation",
187
- "flipHorizontal",
188
- "flipVertical",
189
- "hidden",
190
- "opacity",
191
- "text",
192
- "name",
193
- "altText",
194
- "shapeType",
195
- "placeholder",
196
- "imagePath",
197
- "imageData",
198
- "svgContent",
199
- "inkSvg",
200
- "sourceSlideId",
201
- "mediaType",
202
- "mediaPath",
203
- "linkedTxbxId",
204
- "linkedTxbxSeq",
205
- "promptText"
206
- ]);
207
- var COMPLEX_FIELD_MAP = {
208
- textStyle: "_textStyle",
209
- shapeStyle: "_shapeStyle",
210
- shapeAdjustments: "_shapeAdjustments",
211
- adjustmentHandles: "_adjustmentHandles",
212
- tableData: "_tableData",
213
- chartData: "_chartData",
214
- smartArtData: "_smartArtData",
215
- connectionStart: "_connectionStart",
216
- connectionEnd: "_connectionEnd",
217
- animations: "_animations",
218
- nativeAnimations: "_nativeAnimations",
219
- children: "_children",
220
- paragraphIndents: "_paragraphIndents",
221
- rawXml: "_rawXml",
222
- actionClick: "_actionClick",
223
- actionHover: "_actionHover",
224
- locks: "_locks",
225
- imageEffects: "_imageEffects",
226
- cropShape: "_cropShape",
227
- mediaBookmarks: "_mediaBookmarks",
228
- captionTracks: "_captionTracks"
229
- };
179
+ var SCALAR_ELEMENT_KEYS = new Set(
180
+ Object.entries(pptxViewerCore.ELEMENT_FIELD_KIND).filter(([, kind]) => kind === "scalar" || kind === "asset").map(([field]) => field)
181
+ );
182
+ var COMPLEX_FIELD_MAP = Object.fromEntries(
183
+ Object.entries(pptxViewerCore.ELEMENT_FIELD_KIND).filter(([, kind]) => kind === "complex").map(([field]) => [field, `_${field}`])
184
+ );
230
185
  var REVERSE_COMPLEX_MAP = {};
231
186
  for (const [original, prefixed] of Object.entries(COMPLEX_FIELD_MAP)) {
232
187
  REVERSE_COMPLEX_MAP[prefixed] = original;
233
188
  }
234
- var SCALAR_SLIDE_KEYS = /* @__PURE__ */ new Set([
235
- "id",
236
- "rId",
237
- "sourceSlideId",
238
- "layoutPath",
239
- "layoutName",
240
- "slideNumber",
241
- "hidden",
242
- "sectionName",
243
- "sectionId",
244
- "backgroundColor",
245
- "backgroundImage",
246
- "backgroundGradient",
247
- "notes",
248
- "backgroundShowAnimation",
249
- "showMasterShapes",
250
- "isDirty"
251
- ]);
252
- var COMPLEX_SLIDE_FIELD_MAP = {
253
- transition: "_transition",
254
- animations: "_animations",
255
- nativeAnimations: "_nativeAnimations",
256
- rawTiming: "_rawTiming",
257
- notesSegments: "_notesSegments",
258
- comments: "_comments",
259
- warnings: "_warnings",
260
- rawXml: "_rawXml",
261
- clrMapOverride: "_clrMapOverride",
262
- guides: "_guides",
263
- customerData: "_customerData",
264
- activeXControls: "_activeXControls"
265
- };
189
+ var SCALAR_SLIDE_KEYS = new Set(
190
+ Object.entries(pptxViewerCore.SLIDE_FIELD_KIND).filter(([, kind]) => kind === "scalar").map(([field]) => field)
191
+ );
192
+ var COMPLEX_SLIDE_FIELD_MAP = Object.fromEntries(
193
+ Object.entries(pptxViewerCore.SLIDE_FIELD_KIND).filter(([, kind]) => kind === "complex").map(([field]) => [field, `_${field}`])
194
+ );
266
195
  var REVERSE_COMPLEX_SLIDE_MAP = {};
267
196
  for (const [original, prefixed] of Object.entries(COMPLEX_SLIDE_FIELD_MAP)) {
268
197
  REVERSE_COMPLEX_SLIDE_MAP[prefixed] = original;
@@ -415,5 +344,9 @@ var PptxCodec = class {
415
344
  }
416
345
  };
417
346
 
347
+ exports.COMPLEX_FIELD_MAP = COMPLEX_FIELD_MAP;
348
+ exports.COMPLEX_SLIDE_FIELD_MAP = COMPLEX_SLIDE_FIELD_MAP;
418
349
  exports.ORIGIN_FILE_LOAD = ORIGIN_FILE_LOAD;
419
350
  exports.PptxCodec = PptxCodec;
351
+ exports.SCALAR_ELEMENT_KEYS = SCALAR_ELEMENT_KEYS;
352
+ exports.SCALAR_SLIDE_KEYS = SCALAR_SLIDE_KEYS;
@@ -1,4 +1,4 @@
1
- import { PptxHandler } from 'pptx-viewer-core';
1
+ import { ELEMENT_FIELD_KIND, SLIDE_FIELD_KIND, PptxHandler } from 'pptx-viewer-core';
2
2
  import { Array as Array$1, Map, Text } from 'yjs';
3
3
 
4
4
  // src/codec/pptx-codec.ts
@@ -174,93 +174,22 @@ function decodeTextBodyFromYText(ytext) {
174
174
 
175
175
  // src/codec/pptx-codec.ts
176
176
  var ORIGIN_FILE_LOAD = "file-load";
177
- var SCALAR_ELEMENT_KEYS = /* @__PURE__ */ new Set([
178
- "id",
179
- "type",
180
- "x",
181
- "y",
182
- "width",
183
- "height",
184
- "rotation",
185
- "flipHorizontal",
186
- "flipVertical",
187
- "hidden",
188
- "opacity",
189
- "text",
190
- "name",
191
- "altText",
192
- "shapeType",
193
- "placeholder",
194
- "imagePath",
195
- "imageData",
196
- "svgContent",
197
- "inkSvg",
198
- "sourceSlideId",
199
- "mediaType",
200
- "mediaPath",
201
- "linkedTxbxId",
202
- "linkedTxbxSeq",
203
- "promptText"
204
- ]);
205
- var COMPLEX_FIELD_MAP = {
206
- textStyle: "_textStyle",
207
- shapeStyle: "_shapeStyle",
208
- shapeAdjustments: "_shapeAdjustments",
209
- adjustmentHandles: "_adjustmentHandles",
210
- tableData: "_tableData",
211
- chartData: "_chartData",
212
- smartArtData: "_smartArtData",
213
- connectionStart: "_connectionStart",
214
- connectionEnd: "_connectionEnd",
215
- animations: "_animations",
216
- nativeAnimations: "_nativeAnimations",
217
- children: "_children",
218
- paragraphIndents: "_paragraphIndents",
219
- rawXml: "_rawXml",
220
- actionClick: "_actionClick",
221
- actionHover: "_actionHover",
222
- locks: "_locks",
223
- imageEffects: "_imageEffects",
224
- cropShape: "_cropShape",
225
- mediaBookmarks: "_mediaBookmarks",
226
- captionTracks: "_captionTracks"
227
- };
177
+ var SCALAR_ELEMENT_KEYS = new Set(
178
+ Object.entries(ELEMENT_FIELD_KIND).filter(([, kind]) => kind === "scalar" || kind === "asset").map(([field]) => field)
179
+ );
180
+ var COMPLEX_FIELD_MAP = Object.fromEntries(
181
+ Object.entries(ELEMENT_FIELD_KIND).filter(([, kind]) => kind === "complex").map(([field]) => [field, `_${field}`])
182
+ );
228
183
  var REVERSE_COMPLEX_MAP = {};
229
184
  for (const [original, prefixed] of Object.entries(COMPLEX_FIELD_MAP)) {
230
185
  REVERSE_COMPLEX_MAP[prefixed] = original;
231
186
  }
232
- var SCALAR_SLIDE_KEYS = /* @__PURE__ */ new Set([
233
- "id",
234
- "rId",
235
- "sourceSlideId",
236
- "layoutPath",
237
- "layoutName",
238
- "slideNumber",
239
- "hidden",
240
- "sectionName",
241
- "sectionId",
242
- "backgroundColor",
243
- "backgroundImage",
244
- "backgroundGradient",
245
- "notes",
246
- "backgroundShowAnimation",
247
- "showMasterShapes",
248
- "isDirty"
249
- ]);
250
- var COMPLEX_SLIDE_FIELD_MAP = {
251
- transition: "_transition",
252
- animations: "_animations",
253
- nativeAnimations: "_nativeAnimations",
254
- rawTiming: "_rawTiming",
255
- notesSegments: "_notesSegments",
256
- comments: "_comments",
257
- warnings: "_warnings",
258
- rawXml: "_rawXml",
259
- clrMapOverride: "_clrMapOverride",
260
- guides: "_guides",
261
- customerData: "_customerData",
262
- activeXControls: "_activeXControls"
263
- };
187
+ var SCALAR_SLIDE_KEYS = new Set(
188
+ Object.entries(SLIDE_FIELD_KIND).filter(([, kind]) => kind === "scalar").map(([field]) => field)
189
+ );
190
+ var COMPLEX_SLIDE_FIELD_MAP = Object.fromEntries(
191
+ Object.entries(SLIDE_FIELD_KIND).filter(([, kind]) => kind === "complex").map(([field]) => [field, `_${field}`])
192
+ );
264
193
  var REVERSE_COMPLEX_SLIDE_MAP = {};
265
194
  for (const [original, prefixed] of Object.entries(COMPLEX_SLIDE_FIELD_MAP)) {
266
195
  REVERSE_COMPLEX_SLIDE_MAP[prefixed] = original;
@@ -413,4 +342,4 @@ var PptxCodec = class {
413
342
  }
414
343
  };
415
344
 
416
- export { ORIGIN_FILE_LOAD, PptxCodec };
345
+ export { COMPLEX_FIELD_MAP, COMPLEX_SLIDE_FIELD_MAP, ORIGIN_FILE_LOAD, PptxCodec, SCALAR_ELEMENT_KEYS, SCALAR_SLIDE_KEYS };