pptx-react-viewer 4.26.0 → 4.29.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.
- package/CHANGELOG.md +82 -0
- package/README.md +3 -0
- package/dist/{AiChatPanel-TIJ3MRTR.mjs → AiChatPanel-6EIOUV7J.mjs} +3 -7
- package/dist/AiChatPanel-6EIOUV7J.mjs.br +0 -0
- package/dist/AiChatPanel-6EIOUV7J.mjs.gz +0 -0
- package/dist/{AiChatPanel-PGZDMW4M.js → AiChatPanel-AK6X4NJD.js} +27 -31
- package/dist/AiChatPanel-AK6X4NJD.js.br +0 -0
- package/dist/AiChatPanel-AK6X4NJD.js.gz +0 -0
- package/dist/{Model3DScene-SJGIK2TB.mjs → Model3DScene-EZDCI7TT.mjs} +2 -2
- package/dist/Model3DScene-EZDCI7TT.mjs.br +0 -0
- package/dist/Model3DScene-EZDCI7TT.mjs.gz +0 -0
- package/dist/{Model3DScene-LQBTZGVN.js → Model3DScene-KYIYYLMY.js} +3 -3
- package/dist/Model3DScene-KYIYYLMY.js.br +0 -0
- package/dist/Model3DScene-KYIYYLMY.js.gz +0 -0
- package/dist/{chunk-QJNZZBVF.mjs → chunk-6YOFWVII.mjs} +149 -167
- package/dist/chunk-6YOFWVII.mjs.br +0 -0
- package/dist/chunk-6YOFWVII.mjs.gz +0 -0
- package/dist/{chunk-ZW2WNQN7.js → chunk-7JMO6R6B.js} +1215 -1190
- package/dist/chunk-7JMO6R6B.js.br +0 -0
- package/dist/chunk-7JMO6R6B.js.gz +0 -0
- package/dist/{chunk-VEVEP7VF.js → chunk-CTL42ZRR.js} +533 -272
- package/dist/chunk-CTL42ZRR.js.br +0 -0
- package/dist/chunk-CTL42ZRR.js.gz +0 -0
- package/dist/{chunk-4VNS5WPM.js → chunk-DFFCFNK2.js} +2 -5
- package/dist/chunk-DFFCFNK2.js.br +0 -0
- package/dist/chunk-DFFCFNK2.js.gz +0 -0
- package/dist/{chunk-K564H64A.mjs → chunk-EW45F35P.mjs} +125 -176
- package/dist/chunk-EW45F35P.mjs.br +0 -0
- package/dist/chunk-EW45F35P.mjs.gz +0 -0
- package/dist/{chunk-XGB3TDIC.mjs → chunk-GDQSMJQZ.mjs} +2 -5
- package/dist/chunk-GDQSMJQZ.mjs.br +0 -0
- package/dist/chunk-GDQSMJQZ.mjs.gz +0 -0
- package/dist/{chunk-PW3YOZFA.js → chunk-K3EGXT6W.js} +921 -933
- package/dist/chunk-K3EGXT6W.js.br +0 -0
- package/dist/chunk-K3EGXT6W.js.gz +0 -0
- package/dist/{chunk-USJXG5TE.mjs → chunk-VI575UU6.mjs} +87 -105
- package/dist/chunk-VI575UU6.mjs.br +0 -0
- package/dist/chunk-VI575UU6.mjs.gz +0 -0
- package/dist/i18n.d.ts +1 -46
- package/dist/i18n.js +5 -5
- package/dist/i18n.js.br +2 -2
- package/dist/i18n.js.gz +0 -0
- package/dist/i18n.mjs +2 -2
- package/dist/i18n.mjs.br +0 -0
- package/dist/i18n.mjs.gz +0 -0
- package/dist/index.d.ts +28 -3703
- package/dist/index.js +96 -97
- package/dist/index.js.br +0 -0
- package/dist/index.js.gz +0 -0
- package/dist/index.mjs +6 -7
- package/dist/index.mjs.br +0 -0
- package/dist/index.mjs.gz +0 -0
- package/dist/internals.d.ts +16 -3848
- package/dist/internals.js +114 -115
- package/dist/internals.js.br +0 -0
- package/dist/internals.js.gz +0 -0
- package/dist/internals.mjs +4 -5
- package/dist/internals.mjs.br +0 -0
- package/dist/internals.mjs.gz +0 -0
- package/dist/{chunk-NJYF5KTY.mjs → three.module-2R4ADL7W.mjs} +2 -0
- package/dist/three.module-2R4ADL7W.mjs.br +0 -0
- package/dist/three.module-2R4ADL7W.mjs.gz +0 -0
- package/dist/{chunk-QS3GAPPA.js → three.module-LS32MK23.js} +2 -0
- package/dist/three.module-LS32MK23.js.br +0 -0
- package/dist/three.module-LS32MK23.js.gz +0 -0
- package/dist/viewer/index.d.ts +29 -2633
- package/dist/viewer/index.js +35 -37
- package/dist/viewer/index.js.br +0 -0
- package/dist/viewer/index.js.gz +0 -0
- package/dist/viewer/index.mjs +5 -7
- package/dist/viewer/index.mjs.br +0 -0
- package/dist/viewer/index.mjs.gz +0 -0
- package/dist/{y-webrtc-GAHCEZSS.mjs → y-webrtc-6DZI5KUK.mjs} +1 -1
- package/dist/y-webrtc-6DZI5KUK.mjs.br +0 -0
- package/dist/y-webrtc-6DZI5KUK.mjs.gz +0 -0
- package/dist/{y-webrtc-F2H7BRUK.js → y-webrtc-OTRGEYOH.js} +5 -5
- package/dist/y-webrtc-OTRGEYOH.js.br +0 -0
- package/dist/y-webrtc-OTRGEYOH.js.gz +0 -0
- package/dist/{y-websocket-FBMB63F4.js → y-websocket-AWBYMAHL.js} +1 -1
- package/dist/y-websocket-AWBYMAHL.js.br +0 -0
- package/dist/y-websocket-AWBYMAHL.js.gz +0 -0
- package/dist/{y-websocket-MAGDFVLN.mjs → y-websocket-VAKUVRQT.mjs} +1 -1
- package/dist/y-websocket-VAKUVRQT.mjs.br +0 -0
- package/dist/y-websocket-VAKUVRQT.mjs.gz +0 -0
- package/package.json +4 -4
- package/dist/AiChatPanel-PGZDMW4M.js.br +0 -0
- package/dist/AiChatPanel-PGZDMW4M.js.gz +0 -0
- package/dist/AiChatPanel-TIJ3MRTR.mjs.br +0 -0
- package/dist/AiChatPanel-TIJ3MRTR.mjs.gz +0 -0
- package/dist/GLTFLoader-O7FNKCHG.mjs +0 -2649
- package/dist/GLTFLoader-O7FNKCHG.mjs.br +0 -0
- package/dist/GLTFLoader-O7FNKCHG.mjs.gz +0 -0
- package/dist/GLTFLoader-UM56GMCK.js +0 -2651
- package/dist/GLTFLoader-UM56GMCK.js.br +0 -0
- package/dist/GLTFLoader-UM56GMCK.js.gz +0 -0
- package/dist/Model3DScene-LQBTZGVN.js.br +0 -0
- package/dist/Model3DScene-LQBTZGVN.js.gz +0 -0
- package/dist/Model3DScene-SJGIK2TB.mjs.br +0 -0
- package/dist/Model3DScene-SJGIK2TB.mjs.gz +0 -0
- package/dist/OrbitControls-EXEHIXFI.js +0 -922
- package/dist/OrbitControls-EXEHIXFI.js.br +0 -0
- package/dist/OrbitControls-EXEHIXFI.js.gz +0 -0
- package/dist/OrbitControls-PZQ4CBVS.mjs +0 -920
- package/dist/OrbitControls-PZQ4CBVS.mjs.br +0 -0
- package/dist/OrbitControls-PZQ4CBVS.mjs.gz +0 -0
- package/dist/UTIF-6SHLXCNF.js +0 -6402
- package/dist/UTIF-6SHLXCNF.js.br +0 -0
- package/dist/UTIF-6SHLXCNF.js.gz +0 -0
- package/dist/UTIF-CNNXS5Z5.mjs +0 -6400
- package/dist/UTIF-CNNXS5Z5.mjs.br +0 -0
- package/dist/UTIF-CNNXS5Z5.mjs.gz +0 -0
- package/dist/chunk-4VNS5WPM.js.br +0 -0
- package/dist/chunk-4VNS5WPM.js.gz +0 -0
- package/dist/chunk-6HMJTCFO.js +0 -4247
- package/dist/chunk-6HMJTCFO.js.br +0 -0
- package/dist/chunk-6HMJTCFO.js.gz +0 -0
- package/dist/chunk-DKMPRUXL.mjs +0 -22197
- package/dist/chunk-DKMPRUXL.mjs.br +0 -0
- package/dist/chunk-DKMPRUXL.mjs.gz +0 -0
- package/dist/chunk-K564H64A.mjs.br +0 -0
- package/dist/chunk-K564H64A.mjs.gz +0 -0
- package/dist/chunk-LCWNHXHZ.mjs +0 -312894
- package/dist/chunk-LCWNHXHZ.mjs.br +0 -0
- package/dist/chunk-LCWNHXHZ.mjs.gz +0 -0
- package/dist/chunk-NJYF5KTY.mjs.br +0 -0
- package/dist/chunk-NJYF5KTY.mjs.gz +0 -0
- package/dist/chunk-NWZKMLGC.js +0 -22241
- package/dist/chunk-NWZKMLGC.js.br +0 -0
- package/dist/chunk-NWZKMLGC.js.gz +0 -0
- package/dist/chunk-PW3YOZFA.js.br +0 -0
- package/dist/chunk-PW3YOZFA.js.gz +0 -0
- package/dist/chunk-QJNZZBVF.mjs.br +0 -0
- package/dist/chunk-QJNZZBVF.mjs.gz +0 -0
- package/dist/chunk-QS3GAPPA.js.br +0 -0
- package/dist/chunk-QS3GAPPA.js.gz +0 -0
- package/dist/chunk-UHW3R465.js +0 -314151
- package/dist/chunk-UHW3R465.js.br +0 -0
- package/dist/chunk-UHW3R465.js.gz +0 -0
- package/dist/chunk-USJXG5TE.mjs.br +0 -0
- package/dist/chunk-USJXG5TE.mjs.gz +0 -0
- package/dist/chunk-VEVEP7VF.js.br +0 -0
- package/dist/chunk-VEVEP7VF.js.gz +0 -0
- package/dist/chunk-XGB3TDIC.mjs.br +0 -0
- package/dist/chunk-XGB3TDIC.mjs.gz +0 -0
- package/dist/chunk-XLPQM7OJ.mjs +0 -4243
- package/dist/chunk-XLPQM7OJ.mjs.br +0 -0
- package/dist/chunk-XLPQM7OJ.mjs.gz +0 -0
- package/dist/chunk-ZW2WNQN7.js.br +0 -0
- package/dist/chunk-ZW2WNQN7.js.gz +0 -0
- package/dist/smartart-layouts-5T2QZGLG.js +0 -2494
- package/dist/smartart-layouts-5T2QZGLG.js.br +0 -0
- package/dist/smartart-layouts-5T2QZGLG.js.gz +0 -0
- package/dist/smartart-layouts-UCAFYVFW.mjs +0 -2487
- package/dist/smartart-layouts-UCAFYVFW.mjs.br +0 -0
- package/dist/smartart-layouts-UCAFYVFW.mjs.gz +0 -0
- package/dist/three.module-BLHG4FHZ.js +0 -1783
- package/dist/three.module-BLHG4FHZ.js.br +0 -0
- package/dist/three.module-BLHG4FHZ.js.gz +0 -0
- package/dist/three.module-ZSSMKKHW.mjs +0 -2
- package/dist/three.module-ZSSMKKHW.mjs.br +0 -0
- package/dist/three.module-ZSSMKKHW.mjs.gz +0 -0
- package/dist/y-webrtc-F2H7BRUK.js.br +0 -0
- package/dist/y-webrtc-F2H7BRUK.js.gz +0 -0
- package/dist/y-webrtc-GAHCEZSS.mjs.br +0 -0
- package/dist/y-webrtc-GAHCEZSS.mjs.gz +0 -0
- package/dist/y-websocket-FBMB63F4.js.br +0 -0
- package/dist/y-websocket-FBMB63F4.js.gz +0 -0
- package/dist/y-websocket-MAGDFVLN.mjs.br +0 -0
- package/dist/y-websocket-MAGDFVLN.mjs.gz +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,88 @@ A release listed with no entries carried no Conventional Commit in this package'
|
|
|
7
7
|
scope: scripts/release-plan.mjs releases whenever any published file changes, not only on
|
|
8
8
|
conventional commits.
|
|
9
9
|
|
|
10
|
+
## [4.29.0](https://github.com/ChristopherVR/ooxml/releases/tag/pptx-react-viewer@4.29.0) - 2026-10-08
|
|
11
|
+
|
|
12
|
+
### Features
|
|
13
|
+
|
|
14
|
+
- **xlsx:** Render imported manual legend layouts ([5173750](https://github.com/ChristopherVR/ooxml/commit/5173750a97a560e50d408d3f2f39df6d162d78d5))
|
|
15
|
+
|
|
16
|
+
## [4.28.0](https://github.com/ChristopherVR/ooxml/releases/tag/pptx-react-viewer@4.28.0) - 2026-10-07
|
|
17
|
+
|
|
18
|
+
### Features
|
|
19
|
+
|
|
20
|
+
- **xlsx:** Author chart series gradients with shared controls ([a932dbd](https://github.com/ChristopherVR/ooxml/commit/a932dbd724eb5bcf6f34473bd5e6f1fc80c07849))
|
|
21
|
+
- **xlsx:** Edit gradient stop brightness with shared color logic ([a49baa4](https://github.com/ChristopherVR/ooxml/commit/a49baa4d275182dd89bb3bd61fd5b7c9e2e719db))
|
|
22
|
+
- **xlsx:** Add native named gradient preset gallery ([47ec692](https://github.com/ChristopherVR/ooxml/commit/47ec69208803df71d035ba191653134ec475ff26))
|
|
23
|
+
- **xlsx:** Add rectangular gradient geometry controls ([e10c21a](https://github.com/ChristopherVR/ooxml/commit/e10c21a08bf6fdc3238504d7434db3f0b2a8b68f))
|
|
24
|
+
- **xlsx:** Author radial and path fills on chart series ([2d3652a](https://github.com/ChristopherVR/ooxml/commit/2d3652ad10b2422302dbe457bb6899f2e56cb7bb))
|
|
25
|
+
- **xlsx:** Format chart and plot background fills ([9237f7f](https://github.com/ChristopherVR/ooxml/commit/9237f7f2ec5851088a28d2af5ca82d02806f5438))
|
|
26
|
+
- **visio:** Rotate shapes with shared pointer geometry ([407fa61](https://github.com/ChristopherVR/ooxml/commit/407fa614c7f919052d44d9e31f7abfbcfe6df50d))
|
|
27
|
+
- **xlsx:** Render and preserve mixed chart title text ([4f3f87e](https://github.com/ChristopherVR/ooxml/commit/4f3f87ea6eff2802393f24448a1b48931282d012))
|
|
28
|
+
- **xlsx:** Render and preserve chart title paragraph spacing ([4f0d619](https://github.com/ChristopherVR/ooxml/commit/4f0d6198d90ab3befbfa6b9806965f01492bce45))
|
|
29
|
+
- **xlsx:** Wrap chart titles with shared text flow ([14a33ed](https://github.com/ChristopherVR/ooxml/commit/14a33ed2ee58f8469e5d24a0a36923a3922f23c4))
|
|
30
|
+
|
|
31
|
+
### Bug Fixes
|
|
32
|
+
|
|
33
|
+
- **chart:** Match native scaled linear gradient paint ([8bd1171](https://github.com/ChristopherVR/ooxml/commit/8bd1171809210e886f9a459a5d634b2109ad06e9))
|
|
34
|
+
- **chart:** Paint native rectangular path gradients ([af81015](https://github.com/ChristopherVR/ooxml/commit/af81015bca6823dc505c26c006b2a99eb2e85c8f))
|
|
35
|
+
- **xlsx:** Paint native circular chart backgrounds ([e2bddbf](https://github.com/ChristopherVR/ooxml/commit/e2bddbfdafdfe31792ec9f9e6e5002350e5d2f4f))
|
|
36
|
+
- **xlsx:** Preserve chart axis visibility on export ([da056bb](https://github.com/ChristopherVR/ooxml/commit/da056bb9ebbc70561d63b1dc9e1f558997c0f946))
|
|
37
|
+
- **xlsx:** Preserve direct chart fills on export ([c3b3491](https://github.com/ChristopherVR/ooxml/commit/c3b3491a109720a2e38599b3b5272e9d84964309))
|
|
38
|
+
- **pptx:** Copy owned package parts when duplicating slides ([6940f93](https://github.com/ChristopherVR/ooxml/commit/6940f936cc1f804a498aea941480357ad4236edb))
|
|
39
|
+
- **pptx:** Generate complete native 3d chart axes ([6de35d9](https://github.com/ChristopherVR/ooxml/commit/6de35d96c68b4c7a6118b7bcb2a9ac27fa7f3ecc))
|
|
40
|
+
- **pptx:** Write text properties before paragraph content ([a5fe6e7](https://github.com/ChristopherVR/ooxml/commit/a5fe6e78fe4889804f4a553dcbf4ce4a1c6c92e4))
|
|
41
|
+
- **xlsx:** Preserve native built-in chart text defaults ([f3b9335](https://github.com/ChristopherVR/ooxml/commit/f3b93358bc0fd123c1eb83cfba9237e183ae31e6))
|
|
42
|
+
- **xlsx:** Inherit and preserve chart text formatting ([b292d16](https://github.com/ChristopherVR/ooxml/commit/b292d167b07c6cebaa9168f7a01ab113135d3857))
|
|
43
|
+
- **xlsx:** Align chart title lines with measured font boxes ([8499a58](https://github.com/ChristopherVR/ooxml/commit/8499a584ea11a03cb25517f3d6dad3b16104b375))
|
|
44
|
+
- **pptx:** Project rectangular chart gradients in every binding ([8bc5ee3](https://github.com/ChristopherVR/ooxml/commit/8bc5ee3be9584e37a251ae72701ed9d2d392448f))
|
|
45
|
+
- **ci:** Clear lint errors in chart and drawing checks ([f331e67](https://github.com/ChristopherVR/ooxml/commit/f331e670ca9c52a76e048648e55d0660d925f7c4))
|
|
46
|
+
- **pptx:** Preserve rectangular chart gradient paths ([27c6ddb](https://github.com/ChristopherVR/ooxml/commit/27c6ddbf0b123266a67c794b4bbaa0b7c0d062ef))
|
|
47
|
+
|
|
48
|
+
### Performance
|
|
49
|
+
|
|
50
|
+
- **pptx:** Share the engine and load metafile conversion lazily ([e00b1d7](https://github.com/ChristopherVR/ooxml/commit/e00b1d748b9adb79dac8579f67db24e75f0a7fe2))
|
|
51
|
+
|
|
52
|
+
### Testing
|
|
53
|
+
|
|
54
|
+
- **xlsx:** Measure native linear gradient paint profiles ([ccc4ceb](https://github.com/ChristopherVR/ooxml/commit/ccc4cebc6408a47f73e85ce95262ebe61973deda))
|
|
55
|
+
|
|
56
|
+
## [4.27.0](https://github.com/ChristopherVR/ooxml/releases/tag/pptx-react-viewer@4.27.0) - 2026-10-07
|
|
57
|
+
|
|
58
|
+
### Features
|
|
59
|
+
|
|
60
|
+
- **pptx:** Migrate shared renderer and editing into core and ui ([ba4cd0d](https://github.com/ChristopherVR/ooxml/commit/ba4cd0dc64707ed32d4386c14b80b0ad8a50300a))
|
|
61
|
+
- **pptx:** Move snapshots and cached drawing bounds into core ([f13d837](https://github.com/ChristopherVR/ooxml/commit/f13d83743ce937b5b8c5c66d0abc130d78da8dbb))
|
|
62
|
+
- **chart:** Share Office chart color palettes ([bd436dd](https://github.com/ChristopherVR/ooxml/commit/bd436dd9dc392805f84a2c483c67f09e424b2e5d))
|
|
63
|
+
- **visio:** Preserve page hatch orientation and tile phase ([8b13665](https://github.com/ChristopherVR/ooxml/commit/8b13665ad715f703a983938b47c6b82ba87a6aee))
|
|
64
|
+
- **xlsx:** Add shared Change Colors gallery and native palette edits ([c0e42f0](https://github.com/ChristopherVR/ooxml/commit/c0e42f0b611371ffef7334fa950db5ce9a98cbdd))
|
|
65
|
+
- **chart:** Share native chart style definitions ([f8a6c9e](https://github.com/ChristopherVR/ooxml/commit/f8a6c9eecc12432d91de025b355f8ab1e1e1a673))
|
|
66
|
+
- **xlsx:** Render imported native chart appearance ([c14f42d](https://github.com/ChristopherVR/ooxml/commit/c14f42d99db1aad93ff522a4436aab29606d52d6))
|
|
67
|
+
- **xlsx:** Preserve and render native chart series gradients ([50a9288](https://github.com/ChristopherVR/ooxml/commit/50a928804960c1ab373498a78ef3aab66ff5fbca))
|
|
68
|
+
- **xlsx:** Render imported native chart shadows ([ab83de0](https://github.com/ChristopherVR/ooxml/commit/ab83de0bc39002955cf915922d4b027f13da760e))
|
|
69
|
+
- **xlsx:** Honor native chart gap width and overlap ([42b7d63](https://github.com/ChristopherVR/ooxml/commit/42b7d63d9bd025ca0113b6f84c9f22ea37a986ab))
|
|
70
|
+
- **xlsx:** Add solid chart fill transparency controls ([60f5c51](https://github.com/ChristopherVR/ooxml/commit/60f5c51fcc46e8edd48d0a25c9189113d7e799b1))
|
|
71
|
+
|
|
72
|
+
### Bug Fixes
|
|
73
|
+
|
|
74
|
+
- **pptx:** Retain grid policy until core exports are released ([82e0fd0](https://github.com/ChristopherVR/ooxml/commit/82e0fd07dddee8e06d8576b1ae017fafa939de57))
|
|
75
|
+
- **pptx:** Wrap text in static svg exports ([ece906e](https://github.com/ChristopherVR/ooxml/commit/ece906e50e8e19d41b062453ed0f898ea18abf77))
|
|
76
|
+
- **pptx:** Preserve rich data label formatting when saving ([0cc1c69](https://github.com/ChristopherVR/ooxml/commit/0cc1c694ff9df5c5b88ce165f1d5602e29dd0da0))
|
|
77
|
+
- **pptx:** Finish migrated package dependency wiring ([ab8d12d](https://github.com/ChristopherVR/ooxml/commit/ab8d12dd241c131409a8ddf33548d2ffd92d3fdb))
|
|
78
|
+
- **ci:** Align binding test harnesses with migrated packages ([e47b0e3](https://github.com/ChristopherVR/ooxml/commit/e47b0e3769340fd36ab7c29a88f26bafdb768b4d))
|
|
79
|
+
- **docx:** Preserve tracked run formatting through text edits ([ecfde3c](https://github.com/ChristopherVR/ooxml/commit/ecfde3c526ce16a41246f1ec26b22fe0a1921463))
|
|
80
|
+
- **pptx:** Preserve combo chart formatting and table subscripts ([7518420](https://github.com/ChristopherVR/ooxml/commit/75184207b96f061a557f675ef061c4c9a838393a))
|
|
81
|
+
- **pptx:** Apply PowerPoint table cell spacing and margins ([c5feb77](https://github.com/ChristopherVR/ooxml/commit/c5feb77c3a8e7daec77c2575092e946a3614e5ef))
|
|
82
|
+
- **pptx:** Resolve chart text fonts across runs and scripts ([6d00580](https://github.com/ChristopherVR/ooxml/commit/6d00580398c698e2cf4140ed2f709883b29f475d))
|
|
83
|
+
- **pptx:** Include bullet text runs in paragraph strut sizing ([b10c8cd](https://github.com/ChristopherVR/ooxml/commit/b10c8cd89ae3ed4ee87cf1a38f7892928858bac1))
|
|
84
|
+
- **pptx:** Wrap Korean text at word boundaries ([cfa6b1d](https://github.com/ChristopherVR/ooxml/commit/cfa6b1d9d27b43685b6b5e1a6ef7cf7a63a73229))
|
|
85
|
+
|
|
86
|
+
### Refactor
|
|
87
|
+
|
|
88
|
+
- **pptx:** Move chart grid editing policy into core ([0d8e23f](https://github.com/ChristopherVR/ooxml/commit/0d8e23f8cf62ed11d01d9ab0417df12d23b9b213))
|
|
89
|
+
- **crypto:** Share Office GUID generation ([7d4ceeb](https://github.com/ChristopherVR/ooxml/commit/7d4ceeb07fcad2f55eef2cba73514f01af7cc2f3))
|
|
90
|
+
- Use extensionless relative typescript imports ([ef81f39](https://github.com/ChristopherVR/ooxml/commit/ef81f394cd2f275bcc9db87830db24b0adb2ec8b))
|
|
91
|
+
|
|
10
92
|
## [4.26.0](https://github.com/ChristopherVR/ooxml/releases/tag/pptx-react-viewer@4.26.0) - 2026-10-07
|
|
11
93
|
|
|
12
94
|
### Features
|
package/README.md
CHANGED
|
@@ -98,6 +98,9 @@ const bytes = await viewerRef.current?.getContent(); // Uint8Array of a valid .p
|
|
|
98
98
|
| `fileName` | `string` | n/a | Display name of the open document, shown in the title bar |
|
|
99
99
|
| `className` | `string` | n/a | Class applied to the root element |
|
|
100
100
|
| `canEdit` | `boolean` | `false` | Enable editing mode |
|
|
101
|
+
| `initialSlide` | `number` | `0` | Zero-based slide shown after each load, clamped into the deck. |
|
|
102
|
+
| `showToolbar` | `boolean` | `true` | Editor chrome: title bar, ribbon, toolbar, banners and status bar. |
|
|
103
|
+
| `showThumbnails` | `boolean` | `true` | Slide thumbnail pane. |
|
|
101
104
|
| `fonts` | `ViewerFontSource[]` | n/a | Licensed font sources supplied by the host application |
|
|
102
105
|
| `authorName` | `string` | n/a | Author name for comments/annotations and collaboration presence |
|
|
103
106
|
| `collaboration` | `CollaborationConfig` | n/a | Yjs real-time collaboration config (server URL, room, role) |
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import './chunk-LCWNHXHZ.mjs';
|
|
4
|
-
import './chunk-XLPQM7OJ.mjs';
|
|
5
|
-
import './chunk-XGB3TDIC.mjs';
|
|
1
|
+
import { cn } from './chunk-VI575UU6.mjs';
|
|
2
|
+
import './chunk-GDQSMJQZ.mjs';
|
|
6
3
|
import { useMemo, useRef, useState, useEffect, useReducer, useCallback } from 'react';
|
|
7
4
|
import { useTranslation } from 'react-i18next';
|
|
8
5
|
import { LuSparkles, LuX, LuLoaderCircle, LuTriangleAlert, LuHistory, LuMessageSquarePlus, LuTrash2, LuPlus, LuGitMerge, LuCrosshair, LuPinOff, LuPin, LuUser, LuBot, LuCheck, LuSquare, LuSend, LuMessageSquare, LuPalette, LuUndo2, LuWrench, LuStickyNote, LuFilm, LuNavigation, LuSearch, LuMove, LuChartColumn, LuLayoutTemplate, LuTable, LuShapes, LuType, LuEye } from 'react-icons/lu';
|
|
6
|
+
import { deckIdFromBridge, isAiAvailable, createAiChatSession, extractReadyToolCalls, toolCanvasTarget, createChatHistoryStore, focusTargetChips, isTwoTableFocus, mergeTablesDirective, toRenderableParts, humanizeDiffLine, buildDeckContext, describeToolActivity, summarizeToolArgs, toolLabel } from 'ooxml-ui/pptx/ai';
|
|
9
7
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
10
8
|
|
|
11
9
|
function useAiChat(bridge, config) {
|
|
@@ -48,8 +46,6 @@ function useAiChat(bridge, config) {
|
|
|
48
46
|
}, [bridge]);
|
|
49
47
|
return { state, session, initError };
|
|
50
48
|
}
|
|
51
|
-
|
|
52
|
-
// src/viewer/hooks/ai/ai-context-transport.ts
|
|
53
49
|
function injectDeckContext(messages, context) {
|
|
54
50
|
const lastUserIndex = findLastUserIndex(messages);
|
|
55
51
|
if (lastUserIndex < 0) {
|
|
Binary file
|
|
Binary file
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
require('./chunk-UHW3R465.js');
|
|
6
|
-
require('./chunk-6HMJTCFO.js');
|
|
7
|
-
require('./chunk-4VNS5WPM.js');
|
|
3
|
+
var chunkCTL42ZRR_js = require('./chunk-CTL42ZRR.js');
|
|
4
|
+
require('./chunk-DFFCFNK2.js');
|
|
8
5
|
var react = require('react');
|
|
9
6
|
var reactI18next = require('react-i18next');
|
|
10
7
|
var lu = require('react-icons/lu');
|
|
8
|
+
var ai = require('ooxml-ui/pptx/ai');
|
|
11
9
|
var jsxRuntime = require('react/jsx-runtime');
|
|
12
10
|
|
|
13
11
|
function useAiChat(bridge, config) {
|
|
@@ -22,7 +20,7 @@ function useAiChat(bridge, config) {
|
|
|
22
20
|
setInitError(void 0);
|
|
23
21
|
void (async () => {
|
|
24
22
|
try {
|
|
25
|
-
const available = await
|
|
23
|
+
const available = await ai.isAiAvailable();
|
|
26
24
|
if (cancelled) {
|
|
27
25
|
return;
|
|
28
26
|
}
|
|
@@ -30,7 +28,7 @@ function useAiChat(bridge, config) {
|
|
|
30
28
|
setState("unavailable");
|
|
31
29
|
return;
|
|
32
30
|
}
|
|
33
|
-
const built = await
|
|
31
|
+
const built = await ai.createAiChatSession(bridge, configRef.current);
|
|
34
32
|
if (cancelled) {
|
|
35
33
|
return;
|
|
36
34
|
}
|
|
@@ -50,8 +48,6 @@ function useAiChat(bridge, config) {
|
|
|
50
48
|
}, [bridge]);
|
|
51
49
|
return { state, session, initError };
|
|
52
50
|
}
|
|
53
|
-
|
|
54
|
-
// src/viewer/hooks/ai/ai-context-transport.ts
|
|
55
51
|
function injectDeckContext(messages, context) {
|
|
56
52
|
const lastUserIndex = findLastUserIndex(messages);
|
|
57
53
|
if (lastUserIndex < 0) {
|
|
@@ -87,7 +83,7 @@ function withDeckContext(inner, bridge, strategy) {
|
|
|
87
83
|
}
|
|
88
84
|
let context = "";
|
|
89
85
|
try {
|
|
90
|
-
context = await
|
|
86
|
+
context = await ai.buildDeckContext(bridge, { strategy, focus: {} });
|
|
91
87
|
} catch {
|
|
92
88
|
context = "";
|
|
93
89
|
}
|
|
@@ -145,12 +141,12 @@ function useAiConversation(useChat, session, config, bridge, options = {}) {
|
|
|
145
141
|
chatRef.current = chat;
|
|
146
142
|
react.useEffect(() => {
|
|
147
143
|
const seen = seenToolCallsRef.current;
|
|
148
|
-
for (const call of
|
|
144
|
+
for (const call of ai.extractReadyToolCalls(chat.messages)) {
|
|
149
145
|
if (seen.has(call.toolCallId)) {
|
|
150
146
|
continue;
|
|
151
147
|
}
|
|
152
148
|
seen.add(call.toolCallId);
|
|
153
|
-
onToolTargetRef.current?.(
|
|
149
|
+
onToolTargetRef.current?.(ai.toolCanvasTarget(call.toolName, call.input));
|
|
154
150
|
}
|
|
155
151
|
}, [chat.messages]);
|
|
156
152
|
const send = react.useCallback(
|
|
@@ -184,7 +180,7 @@ function useAiConversation(useChat, session, config, bridge, options = {}) {
|
|
|
184
180
|
const setMessages = react.useCallback(
|
|
185
181
|
(next) => {
|
|
186
182
|
chat.setMessages(next);
|
|
187
|
-
for (const call of
|
|
183
|
+
for (const call of ai.extractReadyToolCalls(next)) {
|
|
188
184
|
seenToolCallsRef.current.add(call.toolCallId);
|
|
189
185
|
}
|
|
190
186
|
session.proposals.clear();
|
|
@@ -226,7 +222,7 @@ function deriveTitle(messages) {
|
|
|
226
222
|
}
|
|
227
223
|
function useAiHistory(input) {
|
|
228
224
|
const { deckId, messages, setMessages } = input;
|
|
229
|
-
const store = react.useMemo(() => input.store ??
|
|
225
|
+
const store = react.useMemo(() => input.store ?? ai.createChatHistoryStore(), [input.store]);
|
|
230
226
|
const [activeChatId, setActiveChatId] = react.useState(newChatId);
|
|
231
227
|
const [chats, setChats] = react.useState([]);
|
|
232
228
|
const createdAtRef = react.useRef(Date.now());
|
|
@@ -369,7 +365,7 @@ function AiComposer({
|
|
|
369
365
|
disabled: value.trim().length === 0,
|
|
370
366
|
title: t("pptx.ai.send"),
|
|
371
367
|
"aria-label": t("pptx.ai.send"),
|
|
372
|
-
className:
|
|
368
|
+
className: chunkCTL42ZRR_js.cn(
|
|
373
369
|
"shrink-0 rounded-sm p-1.5 transition-colors",
|
|
374
370
|
value.trim().length === 0 ? "text-muted-foreground/50" : "bg-primary text-primary-foreground hover:bg-primary/90"
|
|
375
371
|
),
|
|
@@ -392,15 +388,15 @@ function AiFocusBar({
|
|
|
392
388
|
onClearPicks
|
|
393
389
|
}) {
|
|
394
390
|
const { t } = reactI18next.useTranslation();
|
|
395
|
-
const chips =
|
|
396
|
-
const twoTables =
|
|
391
|
+
const chips = ai.focusTargetChips(targets, slides);
|
|
392
|
+
const twoTables = ai.isTwoTableFocus(targets, slides);
|
|
397
393
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-b border-border bg-secondary/30", children: [
|
|
398
394
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-1 px-2.5 py-1.5", children: [
|
|
399
395
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] font-semibold uppercase tracking-wide text-muted-foreground", children: t("pptx.ai.focusScope") }),
|
|
400
396
|
chips.map((chip) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
401
397
|
"span",
|
|
402
398
|
{
|
|
403
|
-
className:
|
|
399
|
+
className: chunkCTL42ZRR_js.cn(
|
|
404
400
|
"inline-flex max-w-[10rem] items-center rounded-full px-2 py-0.5 text-[11px]",
|
|
405
401
|
hasPicks || isPinned ? "bg-primary/15 text-primary" : "bg-muted text-muted-foreground"
|
|
406
402
|
),
|
|
@@ -416,7 +412,7 @@ function AiFocusBar({
|
|
|
416
412
|
{
|
|
417
413
|
type: "button",
|
|
418
414
|
onClick: () => onSendDirective(
|
|
419
|
-
|
|
415
|
+
ai.mergeTablesDirective(
|
|
420
416
|
twoTables.slideIndex,
|
|
421
417
|
twoTables.elementIdA,
|
|
422
418
|
twoTables.elementIdB
|
|
@@ -437,7 +433,7 @@ function AiFocusBar({
|
|
|
437
433
|
title: t("pptx.ai.pickElement"),
|
|
438
434
|
"aria-label": t("pptx.ai.pickAria"),
|
|
439
435
|
"aria-pressed": pickMode,
|
|
440
|
-
className:
|
|
436
|
+
className: chunkCTL42ZRR_js.cn(
|
|
441
437
|
"rounded-sm p-1 max-md:min-w-[44px]! max-md:min-h-[44px]! flex items-center justify-center",
|
|
442
438
|
pickMode ? "bg-primary text-primary-foreground" : "text-muted-foreground hover:bg-accent"
|
|
443
439
|
),
|
|
@@ -516,7 +512,7 @@ function AiHistoryList({ chats, activeChatId, onResume, onDelete }) {
|
|
|
516
512
|
{
|
|
517
513
|
type: "button",
|
|
518
514
|
onClick: () => onResume(chat.id),
|
|
519
|
-
className:
|
|
515
|
+
className: chunkCTL42ZRR_js.cn(
|
|
520
516
|
"flex min-w-0 flex-1 items-start gap-2 rounded-sm px-2 py-1.5 text-left hover:bg-accent",
|
|
521
517
|
chat.id === activeChatId && "bg-accent/60"
|
|
522
518
|
),
|
|
@@ -671,26 +667,26 @@ function AiToolCallCard({ part }) {
|
|
|
671
667
|
const failed = part.state === "output-error";
|
|
672
668
|
const done = part.state === "output-available";
|
|
673
669
|
const running = !failed && !done;
|
|
674
|
-
const activity =
|
|
670
|
+
const activity = ai.describeToolActivity(part.toolName, part.input, running ? "present" : "past");
|
|
675
671
|
const Icon = ICONS[activity.icon] ?? lu.LuWrench;
|
|
676
|
-
const rawSummary =
|
|
672
|
+
const rawSummary = ai.summarizeToolArgs(part.input);
|
|
677
673
|
const statusLabel = failed ? t("pptx.ai.toolFailed") : done ? t("pptx.ai.toolDone") : t("pptx.ai.toolRunning");
|
|
678
674
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[12px]", children: [
|
|
679
675
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
|
|
680
676
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
681
677
|
Icon,
|
|
682
678
|
{
|
|
683
|
-
className:
|
|
679
|
+
className: chunkCTL42ZRR_js.cn(
|
|
684
680
|
"w-3.5 h-3.5 shrink-0",
|
|
685
681
|
failed ? "text-destructive" : "text-muted-foreground"
|
|
686
682
|
)
|
|
687
683
|
}
|
|
688
684
|
),
|
|
689
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className:
|
|
685
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkCTL42ZRR_js.cn("truncate", failed ? "text-destructive" : "text-foreground"), children: activity.label }),
|
|
690
686
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
691
687
|
"span",
|
|
692
688
|
{
|
|
693
|
-
className:
|
|
689
|
+
className: chunkCTL42ZRR_js.cn(
|
|
694
690
|
"ml-auto inline-flex items-center gap-1 rounded-sm px-1.5 py-0.5 text-[10px]",
|
|
695
691
|
failed ? "bg-destructive/15 text-destructive" : done ? "bg-primary/10 text-primary" : "bg-muted text-muted-foreground"
|
|
696
692
|
),
|
|
@@ -707,7 +703,7 @@ function AiToolCallCard({ part }) {
|
|
|
707
703
|
rawSummary && /* @__PURE__ */ jsxRuntime.jsxs("details", { className: "group mt-0.5 pl-5", children: [
|
|
708
704
|
/* @__PURE__ */ jsxRuntime.jsx("summary", { className: "cursor-pointer list-none text-[10px] text-muted-foreground/70 hover:text-muted-foreground", children: t("pptx.ai.toolDetails") }),
|
|
709
705
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-0.5 break-words font-mono text-[10px] text-muted-foreground/80", children: [
|
|
710
|
-
|
|
706
|
+
ai.toolLabel(part.toolName),
|
|
711
707
|
": ",
|
|
712
708
|
rawSummary
|
|
713
709
|
] })
|
|
@@ -730,7 +726,7 @@ function AiMessageList({ messages, isStreaming, bridge }) {
|
|
|
730
726
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 space-y-3 overflow-y-auto px-3 py-3", children: [
|
|
731
727
|
messages.map((message) => {
|
|
732
728
|
const isUser = message.role === "user";
|
|
733
|
-
const parts =
|
|
729
|
+
const parts = ai.toRenderableParts(message);
|
|
734
730
|
if (parts.length === 0 && !isUser) {
|
|
735
731
|
return null;
|
|
736
732
|
}
|
|
@@ -738,7 +734,7 @@ function AiMessageList({ messages, isStreaming, bridge }) {
|
|
|
738
734
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
739
735
|
"div",
|
|
740
736
|
{
|
|
741
|
-
className:
|
|
737
|
+
className: chunkCTL42ZRR_js.cn(
|
|
742
738
|
"mt-0.5 flex h-6 w-6 shrink-0 items-center justify-center rounded-full",
|
|
743
739
|
isUser ? "bg-secondary text-muted-foreground" : "bg-primary/15 text-primary"
|
|
744
740
|
),
|
|
@@ -785,7 +781,7 @@ function AiMessageList({ messages, isStreaming, bridge }) {
|
|
|
785
781
|
}
|
|
786
782
|
function AiProposalCard({ proposal, onAccept, onReject }) {
|
|
787
783
|
const { t } = reactI18next.useTranslation();
|
|
788
|
-
const lines = proposal.summary.map(
|
|
784
|
+
const lines = proposal.summary.map(ai.humanizeDiffLine);
|
|
789
785
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-md border border-primary/40 bg-primary/5 p-2.5", children: [
|
|
790
786
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-1.5 text-[11px] font-semibold uppercase tracking-wide text-primary", children: t("pptx.ai.proposedChange") }),
|
|
791
787
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[12px] font-medium text-foreground", children: proposal.label }),
|
|
@@ -993,7 +989,7 @@ function AiChatPanel({
|
|
|
993
989
|
}) {
|
|
994
990
|
const { t } = reactI18next.useTranslation();
|
|
995
991
|
const { state, session, initError } = useAiChat(bridge, config);
|
|
996
|
-
const deckId = react.useMemo(() =>
|
|
992
|
+
const deckId = react.useMemo(() => ai.deckIdFromBridge(bridge), [bridge]);
|
|
997
993
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
998
994
|
"div",
|
|
999
995
|
{
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
require('
|
|
3
|
+
require('./chunk-DFFCFNK2.js');
|
|
4
|
+
var pptx = require('ooxml-ui/pptx');
|
|
5
5
|
var react = require('react');
|
|
6
6
|
var jsxRuntime = require('react/jsx-runtime');
|
|
7
7
|
|
|
@@ -20,7 +20,7 @@ function Model3DScene({
|
|
|
20
20
|
return;
|
|
21
21
|
}
|
|
22
22
|
let disposed = false;
|
|
23
|
-
void
|
|
23
|
+
void pptx.mountModel3D(container, modelUrl, { width, height, interactive, scene }).then((handle) => {
|
|
24
24
|
if (disposed) {
|
|
25
25
|
handle.dispose();
|
|
26
26
|
} else {
|
|
Binary file
|
|
Binary file
|