@aixa-transformation/pptx-viewer 2.0.2

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 (59) hide show
  1. package/CHANGELOG.md +369 -0
  2. package/LICENSE +202 -0
  3. package/NOTICE +18 -0
  4. package/README.md +249 -0
  5. package/dist/GLTFLoader-CV33YWNT.js +2613 -0
  6. package/dist/GLTFLoader-FQJ2I67K.mjs +2611 -0
  7. package/dist/Model3DScene-5ODZLKJM.mjs +49 -0
  8. package/dist/Model3DScene-VLHFNN5B.js +51 -0
  9. package/dist/OrbitControls-HI6CI76Z.mjs +3 -0
  10. package/dist/OrbitControls-XGY7XEC6.js +12 -0
  11. package/dist/SmartArt3DScene-3FL5JELA.mjs +333 -0
  12. package/dist/SmartArt3DScene-7IZ3IJYV.js +335 -0
  13. package/dist/SurfaceChart3DScene-C6GQQQB7.mjs +77 -0
  14. package/dist/SurfaceChart3DScene-KHMGQAGP.js +79 -0
  15. package/dist/chunk-2TOLRBFU.js +27629 -0
  16. package/dist/chunk-2X72MOPZ.mjs +2796 -0
  17. package/dist/chunk-6DZX6EAA.mjs +33 -0
  18. package/dist/chunk-AD2CLKY6.js +92338 -0
  19. package/dist/chunk-CUUYYYC5.js +2800 -0
  20. package/dist/chunk-DAKELFNP.js +915 -0
  21. package/dist/chunk-F2HFXS2Z.mjs +19063 -0
  22. package/dist/chunk-F3LO2NKI.mjs +913 -0
  23. package/dist/chunk-HNI6JYAI.js +34591 -0
  24. package/dist/chunk-IKBO6CZC.js +2 -0
  25. package/dist/chunk-KVM4DBEU.mjs +91768 -0
  26. package/dist/chunk-MOEXMRVK.js +19220 -0
  27. package/dist/chunk-QGM4M3NI.js +37 -0
  28. package/dist/chunk-SQY54X47.js +43506 -0
  29. package/dist/chunk-T5U6P2JH.mjs +1 -0
  30. package/dist/chunk-TB5ZWNMX.mjs +34577 -0
  31. package/dist/chunk-W5V6CEFL.mjs +43064 -0
  32. package/dist/chunk-XAVVR6OX.mjs +27204 -0
  33. package/dist/chunk-Y6FQDUJU.js +1160 -0
  34. package/dist/chunk-YI3G35EC.mjs +1076 -0
  35. package/dist/dist-LQJHTLHL.mjs +2 -0
  36. package/dist/dist-NVA3FEUV.js +2275 -0
  37. package/dist/i18n.d.ts +2 -0
  38. package/dist/i18n.js +19 -0
  39. package/dist/i18n.mjs +2 -0
  40. package/dist/index.d.ts +44 -0
  41. package/dist/index.js +135 -0
  42. package/dist/index.mjs +6 -0
  43. package/dist/internals.d.ts +1 -0
  44. package/dist/internals.js +311 -0
  45. package/dist/internals.mjs +6 -0
  46. package/dist/pptx-viewer.css +2 -0
  47. package/dist/presentation.d.ts +1 -0
  48. package/dist/presentation.js +11 -0
  49. package/dist/presentation.mjs +2 -0
  50. package/dist/three.module-HOXVV2KF.mjs +2 -0
  51. package/dist/three.module-QSJWIYNI.js +1771 -0
  52. package/dist/viewer/index.d.ts +1 -0
  53. package/dist/viewer/index.js +76 -0
  54. package/dist/viewer/index.mjs +7 -0
  55. package/dist/y-webrtc-DFUKFWCA.mjs +4279 -0
  56. package/dist/y-webrtc-RRACJ6WX.js +4284 -0
  57. package/dist/y-websocket-T5R5YGVE.mjs +378 -0
  58. package/dist/y-websocket-WMSHYIGX.js +384 -0
  59. package/package.json +141 -0
@@ -0,0 +1,384 @@
1
+ 'use strict';
2
+
3
+ var chunkY6FQDUJU_js = require('./chunk-Y6FQDUJU.js');
4
+ require('./chunk-QGM4M3NI.js');
5
+ require('yjs');
6
+
7
+ var messagePermissionDenied = 0;
8
+ var readAuthMessage = (decoder, y, permissionDeniedHandler2) => {
9
+ switch (chunkY6FQDUJU_js.readVarUint(decoder)) {
10
+ case messagePermissionDenied:
11
+ permissionDeniedHandler2(y, chunkY6FQDUJU_js.readVarString(decoder));
12
+ }
13
+ };
14
+
15
+ // ../../node_modules/lib0/url.js
16
+ var encodeQueryParams = (params) => chunkY6FQDUJU_js.map2(params, (val, key) => `${encodeURIComponent(key)}=${encodeURIComponent(val)}`).join("&");
17
+
18
+ // ../../node_modules/y-websocket/src/y-websocket.js
19
+ var messageSync = 0;
20
+ var messageQueryAwareness = 3;
21
+ var messageAwareness = 1;
22
+ var messageAuth = 2;
23
+ var messageHandlers = [];
24
+ messageHandlers[messageSync] = (encoder, decoder, provider, emitSynced, _messageType) => {
25
+ chunkY6FQDUJU_js.writeVarUint(encoder, messageSync);
26
+ const syncMessageType = chunkY6FQDUJU_js.readSyncMessage(
27
+ decoder,
28
+ encoder,
29
+ provider.doc,
30
+ provider
31
+ );
32
+ if (emitSynced && syncMessageType === chunkY6FQDUJU_js.messageYjsSyncStep2 && !provider.synced) {
33
+ provider.synced = true;
34
+ }
35
+ };
36
+ messageHandlers[messageQueryAwareness] = (encoder, _decoder, provider, _emitSynced, _messageType) => {
37
+ chunkY6FQDUJU_js.writeVarUint(encoder, messageAwareness);
38
+ chunkY6FQDUJU_js.writeVarUint8Array(
39
+ encoder,
40
+ chunkY6FQDUJU_js.encodeAwarenessUpdate(
41
+ provider.awareness,
42
+ Array.from(provider.awareness.getStates().keys())
43
+ )
44
+ );
45
+ };
46
+ messageHandlers[messageAwareness] = (_encoder, decoder, provider, _emitSynced, _messageType) => {
47
+ chunkY6FQDUJU_js.applyAwarenessUpdate(
48
+ provider.awareness,
49
+ chunkY6FQDUJU_js.readVarUint8Array(decoder),
50
+ provider
51
+ );
52
+ };
53
+ messageHandlers[messageAuth] = (_encoder, decoder, provider, _emitSynced, _messageType) => {
54
+ readAuthMessage(
55
+ decoder,
56
+ provider.doc,
57
+ (_ydoc, reason) => permissionDeniedHandler(provider, reason)
58
+ );
59
+ };
60
+ var messageReconnectTimeout = 3e4;
61
+ var permissionDeniedHandler = (provider, reason) => console.warn(`Permission denied to access ${provider.url}.
62
+ ${reason}`);
63
+ var readMessage = (provider, buf, emitSynced) => {
64
+ const decoder = chunkY6FQDUJU_js.createDecoder(buf);
65
+ const encoder = chunkY6FQDUJU_js.createEncoder();
66
+ const messageType = chunkY6FQDUJU_js.readVarUint(decoder);
67
+ const messageHandler = provider.messageHandlers[messageType];
68
+ if (
69
+ /** @type {any} */
70
+ messageHandler
71
+ ) {
72
+ messageHandler(encoder, decoder, provider, emitSynced, messageType);
73
+ } else {
74
+ console.error("Unable to compute message");
75
+ }
76
+ return encoder;
77
+ };
78
+ var closeWebsocketConnection = (provider, ws, event) => {
79
+ if (ws === provider.ws) {
80
+ provider.emit("connection-close", [event, provider]);
81
+ provider.ws = null;
82
+ ws.close();
83
+ provider.wsconnecting = false;
84
+ if (provider.wsconnected) {
85
+ provider.wsconnected = false;
86
+ provider.synced = false;
87
+ chunkY6FQDUJU_js.removeAwarenessStates(
88
+ provider.awareness,
89
+ Array.from(provider.awareness.getStates().keys()).filter(
90
+ (client) => client !== provider.doc.clientID
91
+ ),
92
+ provider
93
+ );
94
+ provider.emit("status", [{
95
+ status: "disconnected"
96
+ }]);
97
+ } else {
98
+ provider.wsUnsuccessfulReconnects++;
99
+ }
100
+ setTimeout(
101
+ setupWS,
102
+ chunkY6FQDUJU_js.min(
103
+ chunkY6FQDUJU_js.pow(2, provider.wsUnsuccessfulReconnects) * 100,
104
+ provider.maxBackoffTime
105
+ ),
106
+ provider
107
+ );
108
+ }
109
+ };
110
+ var setupWS = (provider) => {
111
+ if (provider.shouldConnect && provider.ws === null) {
112
+ const websocket = new provider._WS(provider.url, provider.protocols);
113
+ websocket.binaryType = "arraybuffer";
114
+ provider.ws = websocket;
115
+ provider.wsconnecting = true;
116
+ provider.wsconnected = false;
117
+ provider.synced = false;
118
+ websocket.onmessage = (event) => {
119
+ provider.wsLastMessageReceived = chunkY6FQDUJU_js.getUnixTime();
120
+ const encoder = readMessage(provider, new Uint8Array(event.data), true);
121
+ if (chunkY6FQDUJU_js.length(encoder) > 1) {
122
+ websocket.send(chunkY6FQDUJU_js.toUint8Array(encoder));
123
+ }
124
+ };
125
+ websocket.onerror = (event) => {
126
+ provider.emit("connection-error", [event, provider]);
127
+ };
128
+ websocket.onclose = (event) => {
129
+ closeWebsocketConnection(provider, websocket, event);
130
+ };
131
+ websocket.onopen = () => {
132
+ provider.wsLastMessageReceived = chunkY6FQDUJU_js.getUnixTime();
133
+ provider.wsconnecting = false;
134
+ provider.wsconnected = true;
135
+ provider.wsUnsuccessfulReconnects = 0;
136
+ provider.emit("status", [{
137
+ status: "connected"
138
+ }]);
139
+ const encoder = chunkY6FQDUJU_js.createEncoder();
140
+ chunkY6FQDUJU_js.writeVarUint(encoder, messageSync);
141
+ chunkY6FQDUJU_js.writeSyncStep1(encoder, provider.doc);
142
+ websocket.send(chunkY6FQDUJU_js.toUint8Array(encoder));
143
+ if (provider.awareness.getLocalState() !== null) {
144
+ const encoderAwarenessState = chunkY6FQDUJU_js.createEncoder();
145
+ chunkY6FQDUJU_js.writeVarUint(encoderAwarenessState, messageAwareness);
146
+ chunkY6FQDUJU_js.writeVarUint8Array(
147
+ encoderAwarenessState,
148
+ chunkY6FQDUJU_js.encodeAwarenessUpdate(provider.awareness, [
149
+ provider.doc.clientID
150
+ ])
151
+ );
152
+ websocket.send(chunkY6FQDUJU_js.toUint8Array(encoderAwarenessState));
153
+ }
154
+ };
155
+ provider.emit("status", [{
156
+ status: "connecting"
157
+ }]);
158
+ }
159
+ };
160
+ var broadcastMessage = (provider, buf) => {
161
+ const ws = provider.ws;
162
+ if (provider.wsconnected && ws && ws.readyState === ws.OPEN) {
163
+ ws.send(buf);
164
+ }
165
+ if (provider.bcconnected) {
166
+ chunkY6FQDUJU_js.publish(provider.bcChannel, buf, provider);
167
+ }
168
+ };
169
+ var WebsocketProvider = class extends chunkY6FQDUJU_js.ObservableV2 {
170
+ /**
171
+ * @param {string} serverUrl
172
+ * @param {string} roomname
173
+ * @param {Y.Doc} doc
174
+ * @param {object} opts
175
+ * @param {boolean} [opts.connect]
176
+ * @param {awarenessProtocol.Awareness} [opts.awareness]
177
+ * @param {Object<string,string>} [opts.params] specify url parameters
178
+ * @param {Array<string>} [opts.protocols] specify websocket protocols
179
+ * @param {typeof WebSocket} [opts.WebSocketPolyfill] Optionall provide a WebSocket polyfill
180
+ * @param {number} [opts.resyncInterval] Request server state every `resyncInterval` milliseconds
181
+ * @param {number} [opts.maxBackoffTime] Maximum amount of time to wait before trying to reconnect (we try to reconnect using exponential backoff)
182
+ * @param {boolean} [opts.disableBc] Disable cross-tab BroadcastChannel communication
183
+ */
184
+ constructor(serverUrl, roomname, doc, {
185
+ connect = true,
186
+ awareness = new chunkY6FQDUJU_js.Awareness(doc),
187
+ params = {},
188
+ protocols = [],
189
+ WebSocketPolyfill = WebSocket,
190
+ resyncInterval = -1,
191
+ maxBackoffTime = 2500,
192
+ disableBc = false
193
+ } = {}) {
194
+ super();
195
+ while (serverUrl[serverUrl.length - 1] === "/") {
196
+ serverUrl = serverUrl.slice(0, serverUrl.length - 1);
197
+ }
198
+ this.serverUrl = serverUrl;
199
+ this.bcChannel = serverUrl + "/" + roomname;
200
+ this.maxBackoffTime = maxBackoffTime;
201
+ this.params = params;
202
+ this.protocols = protocols;
203
+ this.roomname = roomname;
204
+ this.doc = doc;
205
+ this._WS = WebSocketPolyfill;
206
+ this.awareness = awareness;
207
+ this.wsconnected = false;
208
+ this.wsconnecting = false;
209
+ this.bcconnected = false;
210
+ this.disableBc = disableBc;
211
+ this.wsUnsuccessfulReconnects = 0;
212
+ this.messageHandlers = messageHandlers.slice();
213
+ this._synced = false;
214
+ this.ws = null;
215
+ this.wsLastMessageReceived = 0;
216
+ this.shouldConnect = connect;
217
+ this._resyncInterval = 0;
218
+ if (resyncInterval > 0) {
219
+ this._resyncInterval = /** @type {any} */
220
+ setInterval(() => {
221
+ if (this.ws && this.ws.readyState === WebSocket.OPEN) {
222
+ const encoder = chunkY6FQDUJU_js.createEncoder();
223
+ chunkY6FQDUJU_js.writeVarUint(encoder, messageSync);
224
+ chunkY6FQDUJU_js.writeSyncStep1(encoder, doc);
225
+ this.ws.send(chunkY6FQDUJU_js.toUint8Array(encoder));
226
+ }
227
+ }, resyncInterval);
228
+ }
229
+ this._bcSubscriber = (data, origin) => {
230
+ if (origin !== this) {
231
+ const encoder = readMessage(this, new Uint8Array(data), false);
232
+ if (chunkY6FQDUJU_js.length(encoder) > 1) {
233
+ chunkY6FQDUJU_js.publish(this.bcChannel, chunkY6FQDUJU_js.toUint8Array(encoder), this);
234
+ }
235
+ }
236
+ };
237
+ this._updateHandler = (update, origin) => {
238
+ if (origin !== this) {
239
+ const encoder = chunkY6FQDUJU_js.createEncoder();
240
+ chunkY6FQDUJU_js.writeVarUint(encoder, messageSync);
241
+ chunkY6FQDUJU_js.writeUpdate(encoder, update);
242
+ broadcastMessage(this, chunkY6FQDUJU_js.toUint8Array(encoder));
243
+ }
244
+ };
245
+ this.doc.on("update", this._updateHandler);
246
+ this._awarenessUpdateHandler = ({ added, updated, removed }, _origin) => {
247
+ const changedClients = added.concat(updated).concat(removed);
248
+ const encoder = chunkY6FQDUJU_js.createEncoder();
249
+ chunkY6FQDUJU_js.writeVarUint(encoder, messageAwareness);
250
+ chunkY6FQDUJU_js.writeVarUint8Array(
251
+ encoder,
252
+ chunkY6FQDUJU_js.encodeAwarenessUpdate(awareness, changedClients)
253
+ );
254
+ broadcastMessage(this, chunkY6FQDUJU_js.toUint8Array(encoder));
255
+ };
256
+ this._exitHandler = () => {
257
+ chunkY6FQDUJU_js.removeAwarenessStates(
258
+ this.awareness,
259
+ [doc.clientID],
260
+ "app closed"
261
+ );
262
+ };
263
+ if (chunkY6FQDUJU_js.isNode && typeof process !== "undefined") {
264
+ process.on("exit", this._exitHandler);
265
+ }
266
+ awareness.on("update", this._awarenessUpdateHandler);
267
+ this._checkInterval = /** @type {any} */
268
+ setInterval(() => {
269
+ if (this.wsconnected && messageReconnectTimeout < chunkY6FQDUJU_js.getUnixTime() - this.wsLastMessageReceived) {
270
+ closeWebsocketConnection(
271
+ this,
272
+ /** @type {WebSocket} */
273
+ this.ws,
274
+ null
275
+ );
276
+ }
277
+ }, messageReconnectTimeout / 10);
278
+ if (connect) {
279
+ this.connect();
280
+ }
281
+ }
282
+ get url() {
283
+ const encodedParams = encodeQueryParams(this.params);
284
+ return this.serverUrl + "/" + this.roomname + (encodedParams.length === 0 ? "" : "?" + encodedParams);
285
+ }
286
+ /**
287
+ * @type {boolean}
288
+ */
289
+ get synced() {
290
+ return this._synced;
291
+ }
292
+ set synced(state) {
293
+ if (this._synced !== state) {
294
+ this._synced = state;
295
+ this.emit("synced", [state]);
296
+ this.emit("sync", [state]);
297
+ }
298
+ }
299
+ destroy() {
300
+ if (this._resyncInterval !== 0) {
301
+ clearInterval(this._resyncInterval);
302
+ }
303
+ clearInterval(this._checkInterval);
304
+ this.disconnect();
305
+ if (chunkY6FQDUJU_js.isNode && typeof process !== "undefined") {
306
+ process.off("exit", this._exitHandler);
307
+ }
308
+ this.awareness.off("update", this._awarenessUpdateHandler);
309
+ this.doc.off("update", this._updateHandler);
310
+ super.destroy();
311
+ }
312
+ connectBc() {
313
+ if (this.disableBc) {
314
+ return;
315
+ }
316
+ if (!this.bcconnected) {
317
+ chunkY6FQDUJU_js.subscribe(this.bcChannel, this._bcSubscriber);
318
+ this.bcconnected = true;
319
+ }
320
+ const encoderSync = chunkY6FQDUJU_js.createEncoder();
321
+ chunkY6FQDUJU_js.writeVarUint(encoderSync, messageSync);
322
+ chunkY6FQDUJU_js.writeSyncStep1(encoderSync, this.doc);
323
+ chunkY6FQDUJU_js.publish(this.bcChannel, chunkY6FQDUJU_js.toUint8Array(encoderSync), this);
324
+ const encoderState = chunkY6FQDUJU_js.createEncoder();
325
+ chunkY6FQDUJU_js.writeVarUint(encoderState, messageSync);
326
+ chunkY6FQDUJU_js.writeSyncStep2(encoderState, this.doc);
327
+ chunkY6FQDUJU_js.publish(this.bcChannel, chunkY6FQDUJU_js.toUint8Array(encoderState), this);
328
+ const encoderAwarenessQuery = chunkY6FQDUJU_js.createEncoder();
329
+ chunkY6FQDUJU_js.writeVarUint(encoderAwarenessQuery, messageQueryAwareness);
330
+ chunkY6FQDUJU_js.publish(
331
+ this.bcChannel,
332
+ chunkY6FQDUJU_js.toUint8Array(encoderAwarenessQuery),
333
+ this
334
+ );
335
+ const encoderAwarenessState = chunkY6FQDUJU_js.createEncoder();
336
+ chunkY6FQDUJU_js.writeVarUint(encoderAwarenessState, messageAwareness);
337
+ chunkY6FQDUJU_js.writeVarUint8Array(
338
+ encoderAwarenessState,
339
+ chunkY6FQDUJU_js.encodeAwarenessUpdate(this.awareness, [
340
+ this.doc.clientID
341
+ ])
342
+ );
343
+ chunkY6FQDUJU_js.publish(
344
+ this.bcChannel,
345
+ chunkY6FQDUJU_js.toUint8Array(encoderAwarenessState),
346
+ this
347
+ );
348
+ }
349
+ disconnectBc() {
350
+ const encoder = chunkY6FQDUJU_js.createEncoder();
351
+ chunkY6FQDUJU_js.writeVarUint(encoder, messageAwareness);
352
+ chunkY6FQDUJU_js.writeVarUint8Array(
353
+ encoder,
354
+ chunkY6FQDUJU_js.encodeAwarenessUpdate(this.awareness, [
355
+ this.doc.clientID
356
+ ], /* @__PURE__ */ new Map())
357
+ );
358
+ broadcastMessage(this, chunkY6FQDUJU_js.toUint8Array(encoder));
359
+ if (this.bcconnected) {
360
+ chunkY6FQDUJU_js.unsubscribe(this.bcChannel, this._bcSubscriber);
361
+ this.bcconnected = false;
362
+ }
363
+ }
364
+ disconnect() {
365
+ this.shouldConnect = false;
366
+ this.disconnectBc();
367
+ if (this.ws !== null) {
368
+ closeWebsocketConnection(this, this.ws, null);
369
+ }
370
+ }
371
+ connect() {
372
+ this.shouldConnect = true;
373
+ if (!this.wsconnected && this.ws === null) {
374
+ setupWS(this);
375
+ this.connectBc();
376
+ }
377
+ }
378
+ };
379
+
380
+ exports.WebsocketProvider = WebsocketProvider;
381
+ exports.messageAuth = messageAuth;
382
+ exports.messageAwareness = messageAwareness;
383
+ exports.messageQueryAwareness = messageQueryAwareness;
384
+ exports.messageSync = messageSync;
package/package.json ADDED
@@ -0,0 +1,141 @@
1
+ {
2
+ "name": "@aixa-transformation/pptx-viewer",
3
+ "version": "2.0.2",
4
+ "publishConfig": {
5
+ "access": "public"
6
+ },
7
+ "description": "React PowerPoint viewer and editor component: render, edit, and export PPTX slides in the browser.",
8
+ "keywords": [
9
+ "editor",
10
+ "export",
11
+ "office",
12
+ "openxml",
13
+ "powerpoint",
14
+ "ppt",
15
+ "pptx",
16
+ "presentation",
17
+ "react",
18
+ "react-component",
19
+ "slides",
20
+ "slideshow",
21
+ "viewer"
22
+ ],
23
+ "homepage": "https://github.com/Aixa-Transformation/Aixa-PptxViewer#readme",
24
+ "bugs": {
25
+ "url": "https://github.com/Aixa-Transformation/Aixa-PptxViewer/issues"
26
+ },
27
+ "license": "Apache-2.0",
28
+ "author": "Aixa Ltd",
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "git+https://github.com/Aixa-Transformation/Aixa-PptxViewer.git",
32
+ "directory": "packages/react"
33
+ },
34
+ "files": [
35
+ "dist/",
36
+ "CHANGELOG.md",
37
+ "LICENSE",
38
+ "NOTICE",
39
+ "README.md"
40
+ ],
41
+ "main": "dist/index.mjs",
42
+ "module": "dist/index.mjs",
43
+ "types": "dist/index.d.ts",
44
+ "exports": {
45
+ ".": {
46
+ "types": "./dist/index.d.ts",
47
+ "import": "./dist/index.mjs",
48
+ "require": "./dist/index.js"
49
+ },
50
+ "./viewer": {
51
+ "types": "./dist/viewer/index.d.ts",
52
+ "import": "./dist/viewer/index.mjs",
53
+ "require": "./dist/viewer/index.js"
54
+ },
55
+ "./i18n": {
56
+ "types": "./dist/i18n.d.ts",
57
+ "import": "./dist/i18n.mjs",
58
+ "require": "./dist/i18n.js"
59
+ },
60
+ "./internals": {
61
+ "types": "./dist/internals.d.ts",
62
+ "import": "./dist/internals.mjs",
63
+ "require": "./dist/internals.js"
64
+ },
65
+ "./presentation": {
66
+ "types": "./dist/presentation.d.ts",
67
+ "import": "./dist/presentation.mjs",
68
+ "require": "./dist/presentation.js"
69
+ },
70
+ "./styles": "./dist/pptx-viewer.css",
71
+ "./styles.css": "./dist/pptx-viewer.css",
72
+ "./theme.css": "./src/styles/theme.css"
73
+ },
74
+ "scripts": {
75
+ "build": "tsup && node scripts/copy-public-types.mjs && npm run build:css",
76
+ "build:css": "npx @tailwindcss/cli -i src/styles/pptx-viewer.css -o dist/pptx-viewer.css --minify",
77
+ "dev": "tsup --watch",
78
+ "typecheck": "tsc --noEmit --pretty",
79
+ "test": "vitest run",
80
+ "test:watch": "vitest",
81
+ "pack": "bun run build && bun pm pack"
82
+ },
83
+ "dependencies": {
84
+ "clsx": "^2.1.1",
85
+ "dompurify": "^3.4.12",
86
+ "fast-xml-parser": "^5.10.1",
87
+ "framer-motion": "^12.42.2",
88
+ "html2canvas-pro": "^2.2.4",
89
+ "jspdf": "^4.2.1",
90
+ "jszip": "^3.10.1",
91
+ "mtx-decompressor": "^1.6.0",
92
+ "pptx-viewer-mcp": "^2.0.0",
93
+ "tailwind-merge": "^3.6.0",
94
+ "yjs": "^13.6.31"
95
+ },
96
+ "devDependencies": {
97
+ "@ai-sdk/react": "^4.0.34",
98
+ "@tailwindcss/cli": "^4.3.3",
99
+ "@types/dompurify": "^3.2.0",
100
+ "@types/react": "^19.2.17",
101
+ "@types/react-dom": "^19.2.3",
102
+ "pptx-viewer-core": "file:../core",
103
+ "pptx-viewer-shared": "file:../shared",
104
+ "tailwindcss": "^4.3.3",
105
+ "tsdown": "^0.22.12",
106
+ "tsup": "^8.5.1",
107
+ "typescript": "^7.0.2",
108
+ "vitest": "^4.1.10",
109
+ "y-webrtc": "^10.3.0",
110
+ "y-websocket": "^3.0.0",
111
+ "yjs": "^13.6.31"
112
+ },
113
+ "peerDependencies": {
114
+ "@ai-sdk/react": "^4.0.34",
115
+ "ai": ">=6 <8",
116
+ "fast-xml-parser": "^5.10.1",
117
+ "framer-motion": "^12.42.2",
118
+ "i18next": "^26.3.6",
119
+ "jspdf": "^4.2.1",
120
+ "jszip": "^3.10.1",
121
+ "lucide-react": "^1.24.0",
122
+ "react": "^19.2.7",
123
+ "react-dom": "^19.2.7",
124
+ "react-i18next": "^17.0.9",
125
+ "react-icons": "^5.7.0"
126
+ },
127
+ "peerDependenciesMeta": {
128
+ "@ai-sdk/react": {
129
+ "optional": true
130
+ },
131
+ "ai": {
132
+ "optional": true
133
+ }
134
+ },
135
+ "optionalDependencies": {
136
+ "three": "^0.185.1",
137
+ "y-webrtc": "^10.3.0",
138
+ "y-websocket": "^3.0.0",
139
+ "yjs": "^13.6.31"
140
+ }
141
+ }