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.
Files changed (169) hide show
  1. package/CHANGELOG.md +82 -0
  2. package/README.md +3 -0
  3. package/dist/{AiChatPanel-TIJ3MRTR.mjs → AiChatPanel-6EIOUV7J.mjs} +3 -7
  4. package/dist/AiChatPanel-6EIOUV7J.mjs.br +0 -0
  5. package/dist/AiChatPanel-6EIOUV7J.mjs.gz +0 -0
  6. package/dist/{AiChatPanel-PGZDMW4M.js → AiChatPanel-AK6X4NJD.js} +27 -31
  7. package/dist/AiChatPanel-AK6X4NJD.js.br +0 -0
  8. package/dist/AiChatPanel-AK6X4NJD.js.gz +0 -0
  9. package/dist/{Model3DScene-SJGIK2TB.mjs → Model3DScene-EZDCI7TT.mjs} +2 -2
  10. package/dist/Model3DScene-EZDCI7TT.mjs.br +0 -0
  11. package/dist/Model3DScene-EZDCI7TT.mjs.gz +0 -0
  12. package/dist/{Model3DScene-LQBTZGVN.js → Model3DScene-KYIYYLMY.js} +3 -3
  13. package/dist/Model3DScene-KYIYYLMY.js.br +0 -0
  14. package/dist/Model3DScene-KYIYYLMY.js.gz +0 -0
  15. package/dist/{chunk-QJNZZBVF.mjs → chunk-6YOFWVII.mjs} +149 -167
  16. package/dist/chunk-6YOFWVII.mjs.br +0 -0
  17. package/dist/chunk-6YOFWVII.mjs.gz +0 -0
  18. package/dist/{chunk-ZW2WNQN7.js → chunk-7JMO6R6B.js} +1215 -1190
  19. package/dist/chunk-7JMO6R6B.js.br +0 -0
  20. package/dist/chunk-7JMO6R6B.js.gz +0 -0
  21. package/dist/{chunk-VEVEP7VF.js → chunk-CTL42ZRR.js} +533 -272
  22. package/dist/chunk-CTL42ZRR.js.br +0 -0
  23. package/dist/chunk-CTL42ZRR.js.gz +0 -0
  24. package/dist/{chunk-4VNS5WPM.js → chunk-DFFCFNK2.js} +2 -5
  25. package/dist/chunk-DFFCFNK2.js.br +0 -0
  26. package/dist/chunk-DFFCFNK2.js.gz +0 -0
  27. package/dist/{chunk-K564H64A.mjs → chunk-EW45F35P.mjs} +125 -176
  28. package/dist/chunk-EW45F35P.mjs.br +0 -0
  29. package/dist/chunk-EW45F35P.mjs.gz +0 -0
  30. package/dist/{chunk-XGB3TDIC.mjs → chunk-GDQSMJQZ.mjs} +2 -5
  31. package/dist/chunk-GDQSMJQZ.mjs.br +0 -0
  32. package/dist/chunk-GDQSMJQZ.mjs.gz +0 -0
  33. package/dist/{chunk-PW3YOZFA.js → chunk-K3EGXT6W.js} +921 -933
  34. package/dist/chunk-K3EGXT6W.js.br +0 -0
  35. package/dist/chunk-K3EGXT6W.js.gz +0 -0
  36. package/dist/{chunk-USJXG5TE.mjs → chunk-VI575UU6.mjs} +87 -105
  37. package/dist/chunk-VI575UU6.mjs.br +0 -0
  38. package/dist/chunk-VI575UU6.mjs.gz +0 -0
  39. package/dist/i18n.d.ts +1 -46
  40. package/dist/i18n.js +5 -5
  41. package/dist/i18n.js.br +2 -2
  42. package/dist/i18n.js.gz +0 -0
  43. package/dist/i18n.mjs +2 -2
  44. package/dist/i18n.mjs.br +0 -0
  45. package/dist/i18n.mjs.gz +0 -0
  46. package/dist/index.d.ts +28 -3703
  47. package/dist/index.js +96 -97
  48. package/dist/index.js.br +0 -0
  49. package/dist/index.js.gz +0 -0
  50. package/dist/index.mjs +6 -7
  51. package/dist/index.mjs.br +0 -0
  52. package/dist/index.mjs.gz +0 -0
  53. package/dist/internals.d.ts +16 -3848
  54. package/dist/internals.js +114 -115
  55. package/dist/internals.js.br +0 -0
  56. package/dist/internals.js.gz +0 -0
  57. package/dist/internals.mjs +4 -5
  58. package/dist/internals.mjs.br +0 -0
  59. package/dist/internals.mjs.gz +0 -0
  60. package/dist/{chunk-NJYF5KTY.mjs → three.module-2R4ADL7W.mjs} +2 -0
  61. package/dist/three.module-2R4ADL7W.mjs.br +0 -0
  62. package/dist/three.module-2R4ADL7W.mjs.gz +0 -0
  63. package/dist/{chunk-QS3GAPPA.js → three.module-LS32MK23.js} +2 -0
  64. package/dist/three.module-LS32MK23.js.br +0 -0
  65. package/dist/three.module-LS32MK23.js.gz +0 -0
  66. package/dist/viewer/index.d.ts +29 -2633
  67. package/dist/viewer/index.js +35 -37
  68. package/dist/viewer/index.js.br +0 -0
  69. package/dist/viewer/index.js.gz +0 -0
  70. package/dist/viewer/index.mjs +5 -7
  71. package/dist/viewer/index.mjs.br +0 -0
  72. package/dist/viewer/index.mjs.gz +0 -0
  73. package/dist/{y-webrtc-GAHCEZSS.mjs → y-webrtc-6DZI5KUK.mjs} +1 -1
  74. package/dist/y-webrtc-6DZI5KUK.mjs.br +0 -0
  75. package/dist/y-webrtc-6DZI5KUK.mjs.gz +0 -0
  76. package/dist/{y-webrtc-F2H7BRUK.js → y-webrtc-OTRGEYOH.js} +5 -5
  77. package/dist/y-webrtc-OTRGEYOH.js.br +0 -0
  78. package/dist/y-webrtc-OTRGEYOH.js.gz +0 -0
  79. package/dist/{y-websocket-FBMB63F4.js → y-websocket-AWBYMAHL.js} +1 -1
  80. package/dist/y-websocket-AWBYMAHL.js.br +0 -0
  81. package/dist/y-websocket-AWBYMAHL.js.gz +0 -0
  82. package/dist/{y-websocket-MAGDFVLN.mjs → y-websocket-VAKUVRQT.mjs} +1 -1
  83. package/dist/y-websocket-VAKUVRQT.mjs.br +0 -0
  84. package/dist/y-websocket-VAKUVRQT.mjs.gz +0 -0
  85. package/package.json +4 -4
  86. package/dist/AiChatPanel-PGZDMW4M.js.br +0 -0
  87. package/dist/AiChatPanel-PGZDMW4M.js.gz +0 -0
  88. package/dist/AiChatPanel-TIJ3MRTR.mjs.br +0 -0
  89. package/dist/AiChatPanel-TIJ3MRTR.mjs.gz +0 -0
  90. package/dist/GLTFLoader-O7FNKCHG.mjs +0 -2649
  91. package/dist/GLTFLoader-O7FNKCHG.mjs.br +0 -0
  92. package/dist/GLTFLoader-O7FNKCHG.mjs.gz +0 -0
  93. package/dist/GLTFLoader-UM56GMCK.js +0 -2651
  94. package/dist/GLTFLoader-UM56GMCK.js.br +0 -0
  95. package/dist/GLTFLoader-UM56GMCK.js.gz +0 -0
  96. package/dist/Model3DScene-LQBTZGVN.js.br +0 -0
  97. package/dist/Model3DScene-LQBTZGVN.js.gz +0 -0
  98. package/dist/Model3DScene-SJGIK2TB.mjs.br +0 -0
  99. package/dist/Model3DScene-SJGIK2TB.mjs.gz +0 -0
  100. package/dist/OrbitControls-EXEHIXFI.js +0 -922
  101. package/dist/OrbitControls-EXEHIXFI.js.br +0 -0
  102. package/dist/OrbitControls-EXEHIXFI.js.gz +0 -0
  103. package/dist/OrbitControls-PZQ4CBVS.mjs +0 -920
  104. package/dist/OrbitControls-PZQ4CBVS.mjs.br +0 -0
  105. package/dist/OrbitControls-PZQ4CBVS.mjs.gz +0 -0
  106. package/dist/UTIF-6SHLXCNF.js +0 -6402
  107. package/dist/UTIF-6SHLXCNF.js.br +0 -0
  108. package/dist/UTIF-6SHLXCNF.js.gz +0 -0
  109. package/dist/UTIF-CNNXS5Z5.mjs +0 -6400
  110. package/dist/UTIF-CNNXS5Z5.mjs.br +0 -0
  111. package/dist/UTIF-CNNXS5Z5.mjs.gz +0 -0
  112. package/dist/chunk-4VNS5WPM.js.br +0 -0
  113. package/dist/chunk-4VNS5WPM.js.gz +0 -0
  114. package/dist/chunk-6HMJTCFO.js +0 -4247
  115. package/dist/chunk-6HMJTCFO.js.br +0 -0
  116. package/dist/chunk-6HMJTCFO.js.gz +0 -0
  117. package/dist/chunk-DKMPRUXL.mjs +0 -22197
  118. package/dist/chunk-DKMPRUXL.mjs.br +0 -0
  119. package/dist/chunk-DKMPRUXL.mjs.gz +0 -0
  120. package/dist/chunk-K564H64A.mjs.br +0 -0
  121. package/dist/chunk-K564H64A.mjs.gz +0 -0
  122. package/dist/chunk-LCWNHXHZ.mjs +0 -312894
  123. package/dist/chunk-LCWNHXHZ.mjs.br +0 -0
  124. package/dist/chunk-LCWNHXHZ.mjs.gz +0 -0
  125. package/dist/chunk-NJYF5KTY.mjs.br +0 -0
  126. package/dist/chunk-NJYF5KTY.mjs.gz +0 -0
  127. package/dist/chunk-NWZKMLGC.js +0 -22241
  128. package/dist/chunk-NWZKMLGC.js.br +0 -0
  129. package/dist/chunk-NWZKMLGC.js.gz +0 -0
  130. package/dist/chunk-PW3YOZFA.js.br +0 -0
  131. package/dist/chunk-PW3YOZFA.js.gz +0 -0
  132. package/dist/chunk-QJNZZBVF.mjs.br +0 -0
  133. package/dist/chunk-QJNZZBVF.mjs.gz +0 -0
  134. package/dist/chunk-QS3GAPPA.js.br +0 -0
  135. package/dist/chunk-QS3GAPPA.js.gz +0 -0
  136. package/dist/chunk-UHW3R465.js +0 -314151
  137. package/dist/chunk-UHW3R465.js.br +0 -0
  138. package/dist/chunk-UHW3R465.js.gz +0 -0
  139. package/dist/chunk-USJXG5TE.mjs.br +0 -0
  140. package/dist/chunk-USJXG5TE.mjs.gz +0 -0
  141. package/dist/chunk-VEVEP7VF.js.br +0 -0
  142. package/dist/chunk-VEVEP7VF.js.gz +0 -0
  143. package/dist/chunk-XGB3TDIC.mjs.br +0 -0
  144. package/dist/chunk-XGB3TDIC.mjs.gz +0 -0
  145. package/dist/chunk-XLPQM7OJ.mjs +0 -4243
  146. package/dist/chunk-XLPQM7OJ.mjs.br +0 -0
  147. package/dist/chunk-XLPQM7OJ.mjs.gz +0 -0
  148. package/dist/chunk-ZW2WNQN7.js.br +0 -0
  149. package/dist/chunk-ZW2WNQN7.js.gz +0 -0
  150. package/dist/smartart-layouts-5T2QZGLG.js +0 -2494
  151. package/dist/smartart-layouts-5T2QZGLG.js.br +0 -0
  152. package/dist/smartart-layouts-5T2QZGLG.js.gz +0 -0
  153. package/dist/smartart-layouts-UCAFYVFW.mjs +0 -2487
  154. package/dist/smartart-layouts-UCAFYVFW.mjs.br +0 -0
  155. package/dist/smartart-layouts-UCAFYVFW.mjs.gz +0 -0
  156. package/dist/three.module-BLHG4FHZ.js +0 -1783
  157. package/dist/three.module-BLHG4FHZ.js.br +0 -0
  158. package/dist/three.module-BLHG4FHZ.js.gz +0 -0
  159. package/dist/three.module-ZSSMKKHW.mjs +0 -2
  160. package/dist/three.module-ZSSMKKHW.mjs.br +0 -0
  161. package/dist/three.module-ZSSMKKHW.mjs.gz +0 -0
  162. package/dist/y-webrtc-F2H7BRUK.js.br +0 -0
  163. package/dist/y-webrtc-F2H7BRUK.js.gz +0 -0
  164. package/dist/y-webrtc-GAHCEZSS.mjs.br +0 -0
  165. package/dist/y-webrtc-GAHCEZSS.mjs.gz +0 -0
  166. package/dist/y-websocket-FBMB63F4.js.br +0 -0
  167. package/dist/y-websocket-FBMB63F4.js.gz +0 -0
  168. package/dist/y-websocket-MAGDFVLN.mjs.br +0 -0
  169. 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 { deckIdFromBridge, isAiAvailable, createAiChatSession, extractReadyToolCalls, toolCanvasTarget, createChatHistoryStore, focusTargetChips, isTwoTableFocus, mergeTablesDirective, toRenderableParts, humanizeDiffLine, buildDeckContext, describeToolActivity, summarizeToolArgs, toolLabel } from './chunk-DKMPRUXL.mjs';
2
- import { cn } from './chunk-USJXG5TE.mjs';
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 chunkNWZKMLGC_js = require('./chunk-NWZKMLGC.js');
4
- var chunkVEVEP7VF_js = require('./chunk-VEVEP7VF.js');
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 chunkNWZKMLGC_js.isAiAvailable();
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 chunkNWZKMLGC_js.createAiChatSession(bridge, configRef.current);
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 chunkNWZKMLGC_js.buildDeckContext(bridge, { strategy, focus: {} });
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 chunkNWZKMLGC_js.extractReadyToolCalls(chat.messages)) {
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?.(chunkNWZKMLGC_js.toolCanvasTarget(call.toolName, call.input));
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 chunkNWZKMLGC_js.extractReadyToolCalls(next)) {
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 ?? chunkNWZKMLGC_js.createChatHistoryStore(), [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: chunkVEVEP7VF_js.cn(
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 = chunkNWZKMLGC_js.focusTargetChips(targets, slides);
396
- const twoTables = chunkNWZKMLGC_js.isTwoTableFocus(targets, slides);
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: chunkVEVEP7VF_js.cn(
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
- chunkNWZKMLGC_js.mergeTablesDirective(
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: chunkVEVEP7VF_js.cn(
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: chunkVEVEP7VF_js.cn(
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 = chunkNWZKMLGC_js.describeToolActivity(part.toolName, part.input, running ? "present" : "past");
670
+ const activity = ai.describeToolActivity(part.toolName, part.input, running ? "present" : "past");
675
671
  const Icon = ICONS[activity.icon] ?? lu.LuWrench;
676
- const rawSummary = chunkNWZKMLGC_js.summarizeToolArgs(part.input);
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: chunkVEVEP7VF_js.cn(
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: chunkVEVEP7VF_js.cn("truncate", failed ? "text-destructive" : "text-foreground"), children: activity.label }),
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: chunkVEVEP7VF_js.cn(
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
- chunkNWZKMLGC_js.toolLabel(part.toolName),
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 = chunkNWZKMLGC_js.toRenderableParts(message);
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: chunkVEVEP7VF_js.cn(
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(chunkNWZKMLGC_js.humanizeDiffLine);
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(() => chunkNWZKMLGC_js.deckIdFromBridge(bridge), [bridge]);
992
+ const deckId = react.useMemo(() => ai.deckIdFromBridge(bridge), [bridge]);
997
993
  return /* @__PURE__ */ jsxRuntime.jsxs(
998
994
  "div",
999
995
  {
Binary file
Binary file
@@ -1,5 +1,5 @@
1
- import { mountModel3D } from './chunk-LCWNHXHZ.mjs';
2
- import './chunk-XGB3TDIC.mjs';
1
+ import './chunk-GDQSMJQZ.mjs';
2
+ import { mountModel3D } from 'ooxml-ui/pptx';
3
3
  import { useRef, useEffect } from 'react';
4
4
  import { jsx } from 'react/jsx-runtime';
5
5
 
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkUHW3R465_js = require('./chunk-UHW3R465.js');
4
- require('./chunk-4VNS5WPM.js');
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 chunkUHW3R465_js.mountModel3D(container, modelUrl, { width, height, interactive, scene }).then((handle) => {
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