pptx-react-viewer 4.7.0 → 4.9.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 (135) hide show
  1. package/CHANGELOG.md +146 -0
  2. package/dist/{AiChatPanel-3YILWCBX.js → AiChatPanel-WJ64Q6KO.js} +28 -28
  3. package/dist/AiChatPanel-WJ64Q6KO.js.br +0 -0
  4. package/dist/AiChatPanel-WJ64Q6KO.js.gz +0 -0
  5. package/dist/{AiChatPanel-X2MVL5UP.mjs → AiChatPanel-YRWC7C3B.mjs} +4 -4
  6. package/dist/AiChatPanel-YRWC7C3B.mjs.br +0 -0
  7. package/dist/AiChatPanel-YRWC7C3B.mjs.gz +0 -0
  8. package/dist/{Model3DScene-QFWI5CEE.mjs → Model3DScene-DS6AQWFV.mjs} +1 -1
  9. package/dist/Model3DScene-DS6AQWFV.mjs.br +0 -0
  10. package/dist/Model3DScene-DS6AQWFV.mjs.gz +0 -0
  11. package/dist/{Model3DScene-G7P6ZAIO.js → Model3DScene-VHDYCHO5.js} +2 -2
  12. package/dist/{Model3DScene-G7P6ZAIO.js.br → Model3DScene-VHDYCHO5.js.br} +0 -0
  13. package/dist/Model3DScene-VHDYCHO5.js.gz +0 -0
  14. package/dist/{chunk-FYAOOACZ.js → chunk-7NTNFOPT.js} +287 -255
  15. package/dist/chunk-7NTNFOPT.js.br +0 -0
  16. package/dist/chunk-7NTNFOPT.js.gz +0 -0
  17. package/dist/{chunk-WIEBQGQI.mjs → chunk-HDH4KFDK.mjs} +323 -96
  18. package/dist/chunk-HDH4KFDK.mjs.br +0 -0
  19. package/dist/chunk-HDH4KFDK.mjs.gz +0 -0
  20. package/dist/{chunk-UBYFLXAU.mjs → chunk-K5HZD63F.mjs} +2548 -1857
  21. package/dist/chunk-K5HZD63F.mjs.br +0 -0
  22. package/dist/chunk-K5HZD63F.mjs.gz +0 -0
  23. package/dist/{chunk-UIAU3NR2.js → chunk-KPKO2ELT.js} +323 -96
  24. package/dist/chunk-KPKO2ELT.js.br +0 -0
  25. package/dist/chunk-KPKO2ELT.js.gz +0 -0
  26. package/dist/{chunk-OECUSL2B.mjs → chunk-M6KW27TZ.mjs} +8 -7
  27. package/dist/chunk-M6KW27TZ.mjs.br +0 -0
  28. package/dist/chunk-M6KW27TZ.mjs.gz +0 -0
  29. package/dist/{chunk-VF4RA27Q.js → chunk-NMXIX7E4.js} +4565 -3874
  30. package/dist/chunk-NMXIX7E4.js.br +0 -0
  31. package/dist/chunk-NMXIX7E4.js.gz +0 -0
  32. package/dist/{chunk-QLDHUKH2.mjs → chunk-PJT2DTOS.mjs} +43189 -15692
  33. package/dist/chunk-PJT2DTOS.mjs.br +0 -0
  34. package/dist/chunk-PJT2DTOS.mjs.gz +0 -0
  35. package/dist/{chunk-2BM4GBFZ.js → chunk-PSJTZIIK.js} +5 -5
  36. package/dist/chunk-PSJTZIIK.js.br +0 -0
  37. package/dist/chunk-PSJTZIIK.js.gz +0 -0
  38. package/dist/{chunk-5J6NW3YS.mjs → chunk-Y7RTQOD6.mjs} +81 -49
  39. package/dist/chunk-Y7RTQOD6.mjs.br +0 -0
  40. package/dist/chunk-Y7RTQOD6.mjs.gz +0 -0
  41. package/dist/{chunk-AQIXKTAT.js → chunk-YWAFJZ23.js} +43214 -15695
  42. package/dist/chunk-YWAFJZ23.js.br +0 -0
  43. package/dist/chunk-YWAFJZ23.js.gz +0 -0
  44. package/dist/{chunk-SR7ETIBF.js → chunk-ZZ6IPWOP.js} +819 -818
  45. package/dist/chunk-ZZ6IPWOP.js.br +0 -0
  46. package/dist/chunk-ZZ6IPWOP.js.gz +0 -0
  47. package/dist/{chunk-E5OIDWHO.mjs → chunk-ZZY24BB7.mjs} +1 -1
  48. package/dist/chunk-ZZY24BB7.mjs.br +0 -0
  49. package/dist/chunk-ZZY24BB7.mjs.gz +0 -0
  50. package/dist/i18n/de.cjs +340 -105
  51. package/dist/i18n/de.cjs.br +0 -0
  52. package/dist/i18n/de.cjs.gz +0 -0
  53. package/dist/i18n/de.mjs +340 -105
  54. package/dist/i18n/de.mjs.br +0 -0
  55. package/dist/i18n/de.mjs.gz +0 -0
  56. package/dist/i18n/es.cjs +340 -105
  57. package/dist/i18n/es.cjs.br +0 -0
  58. package/dist/i18n/es.cjs.gz +0 -0
  59. package/dist/i18n/es.mjs +340 -105
  60. package/dist/i18n/es.mjs.br +0 -0
  61. package/dist/i18n/es.mjs.gz +0 -0
  62. package/dist/i18n/fr.cjs +340 -105
  63. package/dist/i18n/fr.cjs.br +0 -0
  64. package/dist/i18n/fr.cjs.gz +0 -0
  65. package/dist/i18n/fr.mjs +340 -105
  66. package/dist/i18n/fr.mjs.br +0 -0
  67. package/dist/i18n/fr.mjs.gz +0 -0
  68. package/dist/i18n/zh-CN.cjs +342 -107
  69. package/dist/i18n/zh-CN.cjs.br +0 -0
  70. package/dist/i18n/zh-CN.cjs.gz +0 -0
  71. package/dist/i18n/zh-CN.mjs +342 -107
  72. package/dist/i18n/zh-CN.mjs.br +0 -0
  73. package/dist/i18n/zh-CN.mjs.gz +0 -0
  74. package/dist/i18n.js +4 -4
  75. package/dist/i18n.js.br +0 -0
  76. package/dist/i18n.js.gz +0 -0
  77. package/dist/i18n.mjs +1 -1
  78. package/dist/i18n.mjs.br +0 -0
  79. package/dist/i18n.mjs.gz +0 -0
  80. package/dist/index.d.ts +762 -22
  81. package/dist/index.js +63 -63
  82. package/dist/index.js.br +0 -0
  83. package/dist/index.js.gz +0 -0
  84. package/dist/index.mjs +6 -6
  85. package/dist/index.mjs.br +0 -0
  86. package/dist/index.mjs.gz +0 -0
  87. package/dist/internals.d.ts +754 -11
  88. package/dist/internals.js +105 -105
  89. package/dist/internals.js.br +0 -0
  90. package/dist/internals.js.gz +0 -0
  91. package/dist/internals.mjs +4 -4
  92. package/dist/internals.mjs.br +0 -0
  93. package/dist/internals.mjs.gz +0 -0
  94. package/dist/pptx-viewer.css +1 -1
  95. package/dist/pptx-viewer.css.br +0 -0
  96. package/dist/pptx-viewer.css.gz +0 -0
  97. package/dist/viewer/index.d.ts +739 -22
  98. package/dist/viewer/index.js +27 -27
  99. package/dist/viewer/index.js.br +0 -0
  100. package/dist/viewer/index.js.gz +0 -0
  101. package/dist/viewer/index.mjs +6 -6
  102. package/dist/viewer/index.mjs.br +0 -0
  103. package/dist/viewer/index.mjs.gz +0 -0
  104. package/package.json +3 -2
  105. package/dist/AiChatPanel-3YILWCBX.js.br +0 -0
  106. package/dist/AiChatPanel-3YILWCBX.js.gz +0 -0
  107. package/dist/AiChatPanel-X2MVL5UP.mjs.br +0 -0
  108. package/dist/AiChatPanel-X2MVL5UP.mjs.gz +0 -0
  109. package/dist/Model3DScene-G7P6ZAIO.js.gz +0 -0
  110. package/dist/Model3DScene-QFWI5CEE.mjs.br +0 -0
  111. package/dist/Model3DScene-QFWI5CEE.mjs.gz +0 -0
  112. package/dist/chunk-2BM4GBFZ.js.br +0 -0
  113. package/dist/chunk-2BM4GBFZ.js.gz +0 -0
  114. package/dist/chunk-5J6NW3YS.mjs.br +0 -0
  115. package/dist/chunk-5J6NW3YS.mjs.gz +0 -0
  116. package/dist/chunk-AQIXKTAT.js.br +0 -0
  117. package/dist/chunk-AQIXKTAT.js.gz +0 -0
  118. package/dist/chunk-E5OIDWHO.mjs.br +0 -0
  119. package/dist/chunk-E5OIDWHO.mjs.gz +0 -0
  120. package/dist/chunk-FYAOOACZ.js.br +0 -0
  121. package/dist/chunk-FYAOOACZ.js.gz +0 -0
  122. package/dist/chunk-OECUSL2B.mjs.br +0 -0
  123. package/dist/chunk-OECUSL2B.mjs.gz +0 -0
  124. package/dist/chunk-QLDHUKH2.mjs.br +0 -0
  125. package/dist/chunk-QLDHUKH2.mjs.gz +0 -0
  126. package/dist/chunk-SR7ETIBF.js.br +0 -0
  127. package/dist/chunk-SR7ETIBF.js.gz +0 -0
  128. package/dist/chunk-UBYFLXAU.mjs.br +0 -0
  129. package/dist/chunk-UBYFLXAU.mjs.gz +0 -0
  130. package/dist/chunk-UIAU3NR2.js.br +0 -0
  131. package/dist/chunk-UIAU3NR2.js.gz +0 -0
  132. package/dist/chunk-VF4RA27Q.js.br +0 -0
  133. package/dist/chunk-VF4RA27Q.js.gz +0 -0
  134. package/dist/chunk-WIEBQGQI.mjs.br +0 -0
  135. package/dist/chunk-WIEBQGQI.mjs.gz +0 -0
package/CHANGELOG.md CHANGED
@@ -7,6 +7,152 @@ A release listed with no entries carried no Conventional Commit in this package'
7
7
  scope: scripts/release-plan.mjs re-releases a package whenever any of its files
8
8
  change, not only on conventional ones.
9
9
 
10
+ ## [4.8.0](https://github.com/ChristopherVR/pptx-viewer/releases/tag/pptx-react-viewer@4.8.0) - 2026-09-25
11
+
12
+ ### Features
13
+
14
+ - **core:** Resolve p:style references on demand for style galleries (by @ChristopherVR) ([e4303f7](https://github.com/ChristopherVR/pptx-viewer/commit/e4303f74a42c745929e9c4296f34686124c10bf9))
15
+ - **core:** Size smartart engine nodes from their own text (by @ChristopherVR) ([34c33cb](https://github.com/ChristopherVR/pptx-viewer/commit/34c33cbb48f225cda606a397f19b31ac841b82e2))
16
+ - **core:** Lay org-chart assistants out in the smartart engine (by @ChristopherVR) ([722a465](https://github.com/ChristopherVR/pptx-viewer/commit/722a465d5225e6d96bdae5cc3a4570c843e89c7b))
17
+ - **core:** Fit meet the team and process list grids in the smartart engine (by @ChristopherVR) ([6ee431c](https://github.com/ChristopherVR/pptx-viewer/commit/6ee431c4f1b3af4469c8824c02a7a5ec1be0abed))
18
+ - **core:** Keep c:grouping standard distinct from clustered (by @claude) ([c3472e2](https://github.com/ChristopherVR/pptx-viewer/commit/c3472e2cbf2bec39d8f8bbbcae2ec59084acc41f))
19
+ - **shared:** Lay out right-angle-axes 3D bar charts as PowerPoint does (by @claude) ([0985f9d](https://github.com/ChristopherVR/pptx-viewer/commit/0985f9d36253eabcc681115cfbb07c6253fcb868))
20
+ - **shared:** Draw cylinder, cone and pyramid 3D bars as PowerPoint does (by @claude) ([668aa8d](https://github.com/ChristopherVR/pptx-viewer/commit/668aa8d3446d3a6b5f72f421bf01e00affdaf00e))
21
+ - **shared:** Draw perspective 3D line and area charts as PowerPoint does (by @claude) ([0ab4a7d](https://github.com/ChristopherVR/pptx-viewer/commit/0ab4a7da69f3993a74a24b0c804685681fd707f2))
22
+ - **shared:** Draw 3D surface charts in value bands as PowerPoint does (by @claude) ([cc87ef4](https://github.com/ChristopherVR/pptx-viewer/commit/cc87ef4cba6574f6aee68dc5178b25c46082d1cf))
23
+ - **shared:** Draw 3D pie charts as PowerPoint does (by @claude) ([553a935](https://github.com/ChristopherVR/pptx-viewer/commit/553a935c2257b7ef0280dbd82abcbf22a1d790a5))
24
+ - **core:** Write SmartArt drawing-shape 3D properties back on save (by @claude) ([45ec2db](https://github.com/ChristopherVR/pptx-viewer/commit/45ec2db46147c9a022e2bdc9ba1e1e5c64f4d94f))
25
+ - **shared:** Render SmartArt bevel and scene quick styles in 3D (by @claude) ([3bdf7e9](https://github.com/ChristopherVR/pptx-viewer/commit/3bdf7e959fed36302350bcbfd2c664d07b0cad86))
26
+ - **shared:** Draw 3D columns without right-angle axes on the perspective box (by @claude) ([e65a8c9](https://github.com/ChristopherVR/pptx-viewer/commit/e65a8c9dba2bcb21ccd81fb471a7b2c019b40d51))
27
+ - **core:** Keep smartart quick-style 3d across structural edits (by @claude) ([a815448](https://github.com/ChristopherVR/pptx-viewer/commit/a815448a7ce291f1989fd3306df523670a2d3d1a))
28
+ - **shared:** Render structurally edited smartart with its quick-style 3d (by @claude) ([2c31bed](https://github.com/ChristopherVR/pptx-viewer/commit/2c31bede6f30886fe1f5f78cb55ad59492485838))
29
+ - **core:** Read SmartArt label colour from fontRef and keep fill alpha (by @claude) ([866c7ee](https://github.com/ChristopherVR/pptx-viewer/commit/866c7ee9227ecbc58f0ab8b691513dc072824c1f))
30
+ - **shared:** Light, extrude and fade SmartArt 3D scenes as PowerPoint does (by @claude) ([b6864d8](https://github.com/ChristopherVR/pptx-viewer/commit/b6864d8d9ca181e953d6cdd389629052f6712d5b))
31
+ - **shared:** Draw a turned SmartArt diagram past its element box (by @claude) ([f46c9b7](https://github.com/ChristopherVR/pptx-viewer/commit/f46c9b7af800e213ee0d7f29cca61d9b2a29c0c4))
32
+ - **core:** Rasterise fallback-less svg pictures for .ppt export in node (by @ChristopherVR) ([b2f86e8](https://github.com/ChristopherVR/pptx-viewer/commit/b2f86e8a675c899778275c163d1fd974df31f3ea))
33
+
34
+ ### Bug Fixes
35
+
36
+ - **shared:** Hang CJK punctuation and drop kinsoku like PowerPoint (by @ChristopherVR) ([770b708](https://github.com/ChristopherVR/pptx-viewer/commit/770b7081432d08acfa00a17de9bc83da22efc18b))
37
+ - **shared:** Draw data-label callouts on line, area, pie, xy and radar (by @ChristopherVR) ([a60aa17](https://github.com/ChristopherVR/pptx-viewer/commit/a60aa17d713848297264ffdd27e89ba9192321ed))
38
+ - **core:** Author the strips exit at presetID 18 (by @ChristopherVR) ([eb1daca](https://github.com/ChristopherVR/pptx-viewer/commit/eb1daca918d26168e07e52e8eb6e421d1af58bfe))
39
+ - **shared:** Play strips as a diagonal corner-to-corner sweep (by @ChristopherVR) ([1e15f73](https://github.com/ChristopherVR/pptx-viewer/commit/1e15f73c5624b0578ea4f1125ea573dfbc1bab73))
40
+ - **shared:** Play wedge as two sweeping wedges and circle exit as an iris (by @ChristopherVR) ([c7fe573](https://github.com/ChristopherVR/pptx-viewer/commit/c7fe5738e03c7b02efaead29621c743e071ecb1e))
41
+ - **shared:** Play the slide filter through a window, cover/push as a cut (by @ChristopherVR) ([a252b87](https://github.com/ChristopherVR/pptx-viewer/commit/a252b8753c2743eb9f91ca1f5b2f4ace86b5cac3))
42
+ - **shared:** Restore arc-length glyph placement for wordart envelopes (by @ChristopherVR) ([4264ab0](https://github.com/ChristopherVR/pptx-viewer/commit/4264ab0917b91f7bd6a7cf278d334135bec27883))
43
+ - **core:** Embed every picture format in the .ppt export (by @ChristopherVR) ([956f1dc](https://github.com/ChristopherVR/pptx-viewer/commit/956f1dc065eabb6977ee6581261662bd38b88162))
44
+ - **core:** Write placeholder text and master text styles in .ppt export (by @ChristopherVR) ([81681c8](https://github.com/ChristopherVR/pptx-viewer/commit/81681c8e52fec68f2d039bd3473023eb76d4a5cd))
45
+ - **core:** Keep an authored pPr lvl="0" on a rewritten slide (by @ChristopherVR) ([97a8cff](https://github.com/ChristopherVR/pptx-viewer/commit/97a8cff45834f963644067aac5bd4a5d2ae0a440))
46
+ - **core:** Stop the first run's b and err leaking onto later runs (by @ChristopherVR) ([4738cd4](https://github.com/ChristopherVR/pptx-viewer/commit/4738cd43c77aadee833d7ab41e071ab7506c3157))
47
+ - **core:** Do not invent an outline width on a rewritten slide (by @ChristopherVR) ([089362a](https://github.com/ChristopherVR/pptx-viewer/commit/089362ac0746031ea28d0bd1ac92bcce093eb4bd))
48
+ - **core:** Refresh app.xml notes and untitled titles like PowerPoint (by @ChristopherVR) ([52a8a53](https://github.com/ChristopherVR/pptx-viewer/commit/52a8a5395de8497553f8aceb9aa980b0bf25d838))
49
+ - **core:** Write each ruby run property set back as authored (by @ChristopherVR) ([94e7b76](https://github.com/ChristopherVR/pptx-viewer/commit/94e7b7656c32642a47748f6ad95c00955cb3fddb))
50
+ - **shared:** Composite pptx-three-view frames as premultiplied alpha (by @claude) ([074fd9e](https://github.com/ChristopherVR/pptx-viewer/commit/074fd9edf2df8d32e9b54327e53fb27b489c4267))
51
+ - **shared:** Size the chart title band from the title font (by @claude) ([c5f0254](https://github.com/ChristopherVR/pptx-viewer/commit/c5f0254036f578f80ab25ed68e250f0d34984523))
52
+ - **shared:** One html2canvas clone pass that snapshots 3D views (by @claude) ([56a8a81](https://github.com/ChristopherVR/pptx-viewer/commit/56a8a81a53ffb2bd9cd8863d6c2cb8d703104804))
53
+ - **react,vue,angular,svelte,vanilla:** Use the shared html2canvas clone pass (by @claude) ([ca9f608](https://github.com/ChristopherVR/pptx-viewer/commit/ca9f6089ed304dcc71abe216b984c41237cefbfb))
54
+ - **shared:** Read SmartArt label contrast from a gradient fill (by @claude) ([d43c866](https://github.com/ChristopherVR/pptx-viewer/commit/d43c866ec2eeb655d02dc586c546c02c93877558))
55
+ - **shared:** Fit the perspective 3D chart box to PowerPoint's height and centring (by @claude) ([157008a](https://github.com/ChristopherVR/pptx-viewer/commit/157008a988c95edba606c6bab5c11308967d0785))
56
+ - **shared:** Size standard-grouping 3D columns as PowerPoint does (by @claude) ([907223f](https://github.com/ChristopherVR/pptx-viewer/commit/907223f735c83b65afd42d5147848f8a28839e1c))
57
+ - **shared:** Shade exploded 3D pie cut faces as PowerPoint does (by @claude) ([5ad3905](https://github.com/ChristopherVR/pptx-viewer/commit/5ad3905503872041e5afc7da528cad0cae354a96))
58
+ - **core:** Follow ecma-376 for the trapezoid preset inset (by @claude) ([eca6c9f](https://github.com/ChristopherVR/pptx-viewer/commit/eca6c9f739a9d6a46d410801ba9bcb0a685f58da))
59
+ - **core:** Keep smartart drawing fill alpha and preset adjustments (by @claude) ([d8d2f37](https://github.com/ChristopherVR/pptx-viewer/commit/d8d2f37b85937e125021afc17b9245148edf9186))
60
+ - **shared:** Paint smartart drawing fill alpha in 2d and 3d (by @claude) ([070cda5](https://github.com/ChristopherVR/pptx-viewer/commit/070cda5a4927c68ea9352c6e7d40e6526d5080fe))
61
+ - **react:** Bind smartart drawing fill-opacity (by @claude) ([8329ad3](https://github.com/ChristopherVR/pptx-viewer/commit/8329ad37f36f42c7e66b88720de1b33cfcb3af4e))
62
+ - **core:** Drop the old preset's guides when a shape's geometry changes (by @ChristopherVR) ([118d8a0](https://github.com/ChristopherVR/pptx-viewer/commit/118d8a0651c18b4e5585286628946818f9c241c5))
63
+ - **core:** Relabel entrance/exit presets from PowerPoint COM ids (by @ChristopherVR) ([ade27dc](https://github.com/ChristopherVR/pptx-viewer/commit/ade27dce6d771ea7dee6068ae7da0a7aa067b6cf))
64
+ - **core:** Write PowerPoint's captured behaviour tree for every preset (by @ChristopherVR) ([b9fa2d6](https://github.com/ChristopherVR/pptx-viewer/commit/b9fa2d68f90c646ccd9abdc1584a78b5e3c2c39b))
65
+ - **shared:** Play steps without accel/decel linearly like PowerPoint (by @ChristopherVR) ([5c1158b](https://github.com/ChristopherVR/pptx-viewer/commit/5c1158b2240c96a234a312ea56aa07404b330fcc))
66
+ - **animation:** Ripple letters inside a by-paragraph text build (by @ChristopherVR) ([1676539](https://github.com/ChristopherVR/pptx-viewer/commit/16765398bd7e0d6966ee59c9cb97d0936bafcc80))
67
+ - **core:** Open PowerPoint's own password-protected .ppt files (by @ChristopherVR) ([ca38faa](https://github.com/ChristopherVR/pptx-viewer/commit/ca38faae35c761b0a3ae98ca79084251641026dc))
68
+ - **core:** Keep the node canvas import opaque to browser bundlers (by @ChristopherVR) ([22f61ea](https://github.com/ChristopherVR/pptx-viewer/commit/22f61ea3f6811d3c82530593eccad0afd957c0f1))
69
+
70
+ ### Documentation
71
+
72
+ - **core:** Record the eleventh smartart engine wave's measured numbers (by @ChristopherVR) ([8395cb8](https://github.com/ChristopherVR/pptx-viewer/commit/8395cb847ff5984c47908b270193622373e30fe0))
73
+
74
+ ### Testing
75
+
76
+ - **react:** Exit.19 has no authoring name once strips authors exit.18 (by @ChristopherVR) ([e8d6d66](https://github.com/ChristopherVR/pptx-viewer/commit/e8d6d667c95a6b9160569d3075f7b77e27eef4a2))
77
+ - **react:** Exit.6 plays the circle iris (by @ChristopherVR) ([63ac838](https://github.com/ChristopherVR/pptx-viewer/commit/63ac838f36f2c1ee8c951da41d23f40038d472ac))
78
+ - **core:** Declare the new callout, CJK and org-chart assistant fixtures (by @ChristopherVR) ([1ff7f05](https://github.com/ChristopherVR/pptx-viewer/commit/1ff7f05d254f151a42005a0e4591897e7c508889))
79
+ - **core:** Lock the ECMA-376 trapezoid inset against the short side (by @claude) ([26462a0](https://github.com/ChristopherVR/pptx-viewer/commit/26462a034bb4752497244ff42e787af60f24406d))
80
+ - **react:** Cover translucent SmartArt drawing fills in the a11y suite (by @claude) ([2b14580](https://github.com/ChristopherVR/pptx-viewer/commit/2b145806ec403d0959b1c603394de9b14e566aaf))
81
+ - **core:** Declare the by-paragraph letter ripple fixture (by @ChristopherVR) ([532a448](https://github.com/ChristopherVR/pptx-viewer/commit/532a448c1b952051c5926e0ad25ef2d534a45818))
82
+ - **core:** Pin the browser canvas ahead of the node svg rasteriser (by @ChristopherVR) ([8ae3fed](https://github.com/ChristopherVR/pptx-viewer/commit/8ae3fedd58b236b77dc56533010683b9cd91a7a2))
83
+
84
+ ### Build & CI
85
+
86
+ - **react,vanilla:** Keep the optional node canvas peer external (by @ChristopherVR) ([6b0ae09](https://github.com/ChristopherVR/pptx-viewer/commit/6b0ae09448bab9ece71448ca50dfc969a7c72a02))
87
+
88
+ ## [4.7.0](https://github.com/ChristopherVR/pptx-viewer/releases/tag/pptx-react-viewer@4.7.0) - 2026-09-25
89
+
90
+ ### Features
91
+
92
+ - **shared:** Edit points model, sessions and freeform tools (by @ChristopherVR) ([481dd57](https://github.com/ChristopherVR/pptx-viewer/commit/481dd5758c023d726255cfaab6473e075453ba8a))
93
+ - **locales:** Translate edit points and freeform tool strings (by @ChristopherVR) ([eef2d4a](https://github.com/ChristopherVR/pptx-viewer/commit/eef2d4ab7a099697b9711748d30315e7d0ffd6ac))
94
+ - **shared:** Keep preset text box and place edit points menu in slide space (by @ChristopherVR) ([a4699df](https://github.com/ChristopherVR/pptx-viewer/commit/a4699dfc4ad3ea442ee2d43116b0f620882bb7bc))
95
+ - **react:** Edit points and freeform shape / curve tools (by @ChristopherVR) ([cc35380](https://github.com/ChristopherVR/pptx-viewer/commit/cc3538005566f73341e9cd35d2cfc6b9af11b7e7))
96
+ - **shared:** Merge shapes engine and on-canvas picture crop geometry (by @ChristopherVR) ([0e13020](https://github.com/ChristopherVR/pptx-viewer/commit/0e130203710ff109629330e6cf6efe097e962875))
97
+ - **locales:** Translate merge shapes and picture crop strings (by @ChristopherVR) ([2388efb](https://github.com/ChristopherVR/pptx-viewer/commit/2388efb4d4ed17c3ec212d5f64e9dba3cd18f268))
98
+ - **react:** Merge shapes and on-canvas picture crop (by @ChristopherVR) ([d4d6813](https://github.com/ChristopherVR/pptx-viewer/commit/d4d6813a4d3316ea70d9a92e0b53ea148e052a7b))
99
+ - **core:** Expose the zoom transition's in/out direction (by @ChristopherVR) ([e9d9da5](https://github.com/ChristopherVR/pptx-viewer/commit/e9d9da5a017f42b2318b6a93394dd8c3f6c34051))
100
+ - **core:** Read and write media-bookmark triggers the way PowerPoint does (by @ChristopherVR) ([cbe17f9](https://github.com/ChristopherVR/pptx-viewer/commit/cbe17f9a00c639fb3a5666b41222cc5de21d302e))
101
+ - **shared:** Add the "On bookmark" trigger and its bookmark picker model (by @ChristopherVR) ([95f07a7](https://github.com/ChristopherVR/pptx-viewer/commit/95f07a77ff3d0750acbf7495dc77fe84072817d3))
102
+ - **locales:** Translate the On bookmark trigger picker (by @ChristopherVR) ([e06e9dc](https://github.com/ChristopherVR/pptx-viewer/commit/e06e9dc000158534405c9b372d52a9827447465c))
103
+ - **react:** Pick the media bookmark for an On bookmark trigger (by @ChristopherVR) ([b0e3fa2](https://github.com/ChristopherVR/pptx-viewer/commit/b0e3fa21406b0a884a4a18b8fa8c09ae72df04c1))
104
+ - **core:** Break smartart engine-vs-legacy geometry ties on fonts (by @ChristopherVR) ([9b23ac0](https://github.com/ChristopherVR/pptx-viewer/commit/9b23ac04ad4366da7b67c80d1e5222675c564698))
105
+ - **core:** Lay smartart hierarchies out as packed outlines, then scale (by @ChristopherVR) ([74b7bce](https://github.com/ChristopherVR/pptx-viewer/commit/74b7bcea5fe2b985efdf93c0bfd3cfd6b05e04cc))
106
+ - **core:** Lay smartart snake grids out from their cells' own sizes (by @ChristopherVR) ([e9526ff](https://github.com/ChristopherVR/pptx-viewer/commit/e9526ffc30b0829eb2231c693da69c562a0ed454))
107
+ - **core:** Parse chart-area, plot-area and series gradient fills (by @ChristopherVR) ([4db5abc](https://github.com/ChristopherVR/pptx-viewer/commit/4db5abc3c3c57428b231a6cb4aed041b0e4b2d8b))
108
+ - **shared:** Paint chart gradient fills in all five bindings (by @ChristopherVR) ([7f22964](https://github.com/ChristopherVR/pptx-viewer/commit/7f229642cda0b1388df4c6be560478192152f051))
109
+ - **core:** Parse data-label boxes, callout shapes and c15 leader lines (by @ChristopherVR) ([763cadd](https://github.com/ChristopherVR/pptx-viewer/commit/763cadd268d5f57b91129c1597bef610cb7b3bf4))
110
+
111
+ ### Bug Fixes
112
+
113
+ - **shared:** Restore absent crop insets as undefined on cancel (by @ChristopherVR) ([33b5094](https://github.com/ChristopherVR/pptx-viewer/commit/33b509485634bfee452e5ce8a9f4fb7acc9bdc6e))
114
+ - **react:** Take the shared crop cancel update as-is (by @ChristopherVR) ([46ece07](https://github.com/ChristopherVR/pptx-viewer/commit/46ece078a09dfd16a46f0a5bb6bdbf4e0a1b28d7))
115
+ - **core:** Keep runs apart that differ only by an authored baseline="0" (by @ChristopherVR) ([aea3c57](https://github.com/ChristopherVR/pptx-viewer/commit/aea3c57542823e311332a15ac85ff045cfbb3331))
116
+ - **shared:** Play the zoom transition as PowerPoint's box reveal (by @ChristopherVR) ([6194b84](https://github.com/ChristopherVR/pptx-viewer/commit/6194b846fcc7284efe9780d97037bf1e2706136e))
117
+ - **react:** Start the legacy zoom transition style as a centred box (by @ChristopherVR) ([88f7781](https://github.com/ChristopherVR/pptx-viewer/commit/88f778167267c88435a52c5cef73420c4024bc47))
118
+ - **shared:** Fit the Bounce End settle curve to PowerPoint's own frames (by @ChristopherVR) ([5268384](https://github.com/ChristopherVR/pptx-viewer/commit/5268384724177b188da4a47fdf9678f2ba16acdb))
119
+ - **core:** Keep authored buClr on a rewritten paragraph (by @ChristopherVR) ([77f1f86](https://github.com/ChristopherVR/pptx-viewer/commit/77f1f86d946c8f058183f787696198d4035b7a81))
120
+ - **core:** Keep an authored tab-stop algn="l" on rewrite (by @ChristopherVR) ([e6050da](https://github.com/ChristopherVR/pptx-viewer/commit/e6050dae8683be269b1c9675bb195369d5dfda7a))
121
+ - **core:** Stop unedited animation metadata growing on save (by @ChristopherVR) ([d0fce7c](https://github.com/ChristopherVR/pptx-viewer/commit/d0fce7c59c599588dba6e950b66629276d4df481))
122
+ - **core:** Keep a source commentAuthors part nothing removed (by @ChristopherVR) ([03f6967](https://github.com/ChristopherVR/pptx-viewer/commit/03f6967ed3cdd57de1896e03e631c2999716149c))
123
+ - **core:** Read media bookmarks where PowerPoint nests them (by @ChristopherVR) ([7ec0f27](https://github.com/ChristopherVR/pptx-viewer/commit/7ec0f27c35c12458db1d8a480014049c8e81cfcf))
124
+ - **core:** Size smartart engine text from primFontSz rules and groups (by @ChristopherVR) ([e957395](https://github.com/ChristopherVR/pptx-viewer/commit/e957395722c0d80f878f81f282e2e271461d945f))
125
+ - **core:** Measure smartart text with kerned boundwidth aptos metrics (by @ChristopherVR) ([9603333](https://github.com/ChristopherVR/pptx-viewer/commit/960333342c7676a35b9c9e845017615fdd8a0b2a))
126
+ - **core:** Lay smartart engine text out by tx paragraph levels (by @ChristopherVR) ([ff90fd8](https://github.com/ChristopherVR/pptx-viewer/commit/ff90fd8e6277dbc5a396c887ac87f77c2e7d7a65))
127
+ - **core:** Draw smartart engine boxes that present text after a blank (by @ChristopherVR) ([e049efb](https://github.com/ChristopherVR/pptx-viewer/commit/e049efba80b8f79f544cf8223fa33379d11e2e59))
128
+ - **core:** Match PowerPoint's auto-number schemes past the basics (by @ChristopherVR) ([aa10890](https://github.com/ChristopherVR/pptx-viewer/commit/aa10890d99ea75f712170403ab0b1f6a9217d5cd))
129
+ - **core:** Render picture-filled text runs instead of solid black (by @ChristopherVR) ([e1021f9](https://github.com/ChristopherVR/pptx-viewer/commit/e1021f9f4fb8efe07bb0dbb70c63e342ec764d49))
130
+ - **shared:** Draw a dashed text outline for a:ln/a:prstDash (by @ChristopherVR) ([af7eb60](https://github.com/ChristopherVR/pptx-viewer/commit/af7eb60fb210a418ac3fb032039e1ca3b5d4c674))
131
+ - **shared:** Match PowerPoint's underline variants (by @ChristopherVR) ([46ad363](https://github.com/ChristopherVR/pptx-viewer/commit/46ad3637a88ed2d9b18c3fdee0aa98ba57207b3f))
132
+ - **core:** Let a paragraph's own rtl beat the level default on its runs (by @ChristopherVR) ([4ae3d68](https://github.com/ChristopherVR/pptx-viewer/commit/4ae3d68362a956680cfe12bf1022f13c9e877510))
133
+ - **shared:** Align decimal and right-to-left tab stops like PowerPoint (by @ChristopherVR) ([1575f61](https://github.com/ChristopherVR/pptx-viewer/commit/1575f61f3cefa9f703e21d2f914ec567e541f81a))
134
+ - **shared:** Ignore a paragraph's trailing spaces when aligning it (by @ChristopherVR) ([3973465](https://github.com/ChristopherVR/pptx-viewer/commit/39734651a091b43ecc9c41689ce5ce899e91b5ac))
135
+ - **shared:** Clip an overflowing text body at a whole line (by @ChristopherVR) ([7f77dcd](https://github.com/ChristopherVR/pptx-viewer/commit/7f77dcda9d17c9b569c5d2a7fddf2144ef196b6a))
136
+ - **shared:** Colour and label waterfall bars like PowerPoint (by @ChristopherVR) ([44a4fec](https://github.com/ChristopherVR/pptx-viewer/commit/44a4fec1284837b3249202e2a40053ef934ba85f))
137
+ - **shared:** Draw PowerPoint's automatic chart titles (by @ChristopherVR) ([8f435a4](https://github.com/ChristopherVR/pptx-viewer/commit/8f435a4d199250421ab947a12a360bd881273995))
138
+ - **shared:** Lay out pie-of-pie and bar-of-pie like PowerPoint (by @ChristopherVR) ([578d524](https://github.com/ChristopherVR/pptx-viewer/commit/578d524dd7fefcb09a583f0abafb787db866938d))
139
+ - **shared:** Format and place display-unit axis labels like PowerPoint (by @ChristopherVR) ([73acba4](https://github.com/ChristopherVR/pptx-viewer/commit/73acba45b8940cf44fe16164c564ca18661dba36))
140
+ - **shared:** Lay out chart data tables like PowerPoint (by @ChristopherVR) ([0220fd6](https://github.com/ChristopherVR/pptx-viewer/commit/0220fd62c63e1de4febeaeef963ff258b91cbcd4))
141
+ - **shared:** Draw data-label callouts and leader lines on bar charts (by @ChristopherVR) ([68296ef](https://github.com/ChristopherVR/pptx-viewer/commit/68296ef4e729ece9c0a51eff3b9e03b011b986e4))
142
+ - **core:** Parse series gradients through a pure helper (by @ChristopherVR) ([1f83eaf](https://github.com/ChristopherVR/pptx-viewer/commit/1f83eaf9f5c461430e7d54c1e212ee43b7519819))
143
+
144
+ ### Documentation
145
+
146
+ - **core:** Describe p14:bounceEnd as the bouncing share of the duration (by @ChristopherVR) ([80caab6](https://github.com/ChristopherVR/pptx-viewer/commit/80caab642e04a548a912fdbe8d937732096792f9))
147
+ - **core:** Record the smartart font, hierarchy and snake measurements (by @ChristopherVR) ([2187e69](https://github.com/ChristopherVR/pptx-viewer/commit/2187e692746fbde2e9f3c6399c1fde6a83ca57cb))
148
+
149
+ ### Testing
150
+
151
+ - **e2e:** Cover merge shapes and picture crop in every demo (by @ChristopherVR) ([a7e7bed](https://github.com/ChristopherVR/pptx-viewer/commit/a7e7bed63129981afba50ef12ae2cdd4ee854d3f))
152
+ - **react:** Expect the On bookmark trigger and the zoom box reveal (by @ChristopherVR) ([56b00ba](https://github.com/ChristopherVR/pptx-viewer/commit/56b00ba045107a1f5ccf23d2e3edc3b0c1bc3e8d))
153
+ - **e2e:** Author an On bookmark trigger in every demo and check the save (by @ChristopherVR) ([aa3ff3c](https://github.com/ChristopherVR/pptx-viewer/commit/aa3ff3c9764192dd81b65874668cdb09da0e81ce))
154
+ - **core,vanilla:** Register the edit-points fixture and type the bookmark test store (by @ChristopherVR) ([9114d7c](https://github.com/ChristopherVR/pptx-viewer/commit/9114d7cec7a1f60b44bab5ef21d1cf9bcbccb054))
155
+
10
156
  ## [4.6.0](https://github.com/ChristopherVR/pptx-viewer/releases/tag/pptx-react-viewer@4.6.0) - 2026-09-25
11
157
 
12
158
  ### Features
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunk2BM4GBFZ_js = require('./chunk-2BM4GBFZ.js');
4
- var chunkFYAOOACZ_js = require('./chunk-FYAOOACZ.js');
5
- require('./chunk-AQIXKTAT.js');
6
- require('./chunk-UIAU3NR2.js');
3
+ var chunkPSJTZIIK_js = require('./chunk-PSJTZIIK.js');
4
+ var chunk7NTNFOPT_js = require('./chunk-7NTNFOPT.js');
5
+ require('./chunk-YWAFJZ23.js');
6
+ require('./chunk-KPKO2ELT.js');
7
7
  require('./chunk-4VNS5WPM.js');
8
8
  var react = require('react');
9
9
  var reactI18next = require('react-i18next');
@@ -22,7 +22,7 @@ function useAiChat(bridge, config) {
22
22
  setInitError(void 0);
23
23
  void (async () => {
24
24
  try {
25
- const available = await chunk2BM4GBFZ_js.isAiAvailable();
25
+ const available = await chunkPSJTZIIK_js.isAiAvailable();
26
26
  if (cancelled) {
27
27
  return;
28
28
  }
@@ -30,7 +30,7 @@ function useAiChat(bridge, config) {
30
30
  setState("unavailable");
31
31
  return;
32
32
  }
33
- const built = await chunk2BM4GBFZ_js.createAiChatSession(bridge, configRef.current);
33
+ const built = await chunkPSJTZIIK_js.createAiChatSession(bridge, configRef.current);
34
34
  if (cancelled) {
35
35
  return;
36
36
  }
@@ -87,7 +87,7 @@ function withDeckContext(inner, bridge, strategy) {
87
87
  }
88
88
  let context = "";
89
89
  try {
90
- context = await chunk2BM4GBFZ_js.buildDeckContext(bridge, { strategy, focus: {} });
90
+ context = await chunkPSJTZIIK_js.buildDeckContext(bridge, { strategy, focus: {} });
91
91
  } catch {
92
92
  context = "";
93
93
  }
@@ -145,12 +145,12 @@ function useAiConversation(useChat, session, config, bridge, options = {}) {
145
145
  chatRef.current = chat;
146
146
  react.useEffect(() => {
147
147
  const seen = seenToolCallsRef.current;
148
- for (const call of chunk2BM4GBFZ_js.extractReadyToolCalls(chat.messages)) {
148
+ for (const call of chunkPSJTZIIK_js.extractReadyToolCalls(chat.messages)) {
149
149
  if (seen.has(call.toolCallId)) {
150
150
  continue;
151
151
  }
152
152
  seen.add(call.toolCallId);
153
- onToolTargetRef.current?.(chunk2BM4GBFZ_js.toolCanvasTarget(call.toolName, call.input));
153
+ onToolTargetRef.current?.(chunkPSJTZIIK_js.toolCanvasTarget(call.toolName, call.input));
154
154
  }
155
155
  }, [chat.messages]);
156
156
  const send = react.useCallback(
@@ -184,7 +184,7 @@ function useAiConversation(useChat, session, config, bridge, options = {}) {
184
184
  const setMessages = react.useCallback(
185
185
  (next) => {
186
186
  chat.setMessages(next);
187
- for (const call of chunk2BM4GBFZ_js.extractReadyToolCalls(next)) {
187
+ for (const call of chunkPSJTZIIK_js.extractReadyToolCalls(next)) {
188
188
  seenToolCallsRef.current.add(call.toolCallId);
189
189
  }
190
190
  session.proposals.clear();
@@ -226,7 +226,7 @@ function deriveTitle(messages) {
226
226
  }
227
227
  function useAiHistory(input) {
228
228
  const { deckId, messages, setMessages } = input;
229
- const store = react.useMemo(() => input.store ?? chunk2BM4GBFZ_js.createChatHistoryStore(), [input.store]);
229
+ const store = react.useMemo(() => input.store ?? chunkPSJTZIIK_js.createChatHistoryStore(), [input.store]);
230
230
  const [activeChatId, setActiveChatId] = react.useState(newChatId);
231
231
  const [chats, setChats] = react.useState([]);
232
232
  const createdAtRef = react.useRef(Date.now());
@@ -369,7 +369,7 @@ function AiComposer({
369
369
  disabled: value.trim().length === 0,
370
370
  title: t("pptx.ai.send"),
371
371
  "aria-label": t("pptx.ai.send"),
372
- className: chunkFYAOOACZ_js.cn(
372
+ className: chunk7NTNFOPT_js.cn(
373
373
  "shrink-0 rounded-sm p-1.5 transition-colors",
374
374
  value.trim().length === 0 ? "text-muted-foreground/50" : "bg-primary text-primary-foreground hover:bg-primary/90"
375
375
  ),
@@ -392,15 +392,15 @@ function AiFocusBar({
392
392
  onClearPicks
393
393
  }) {
394
394
  const { t } = reactI18next.useTranslation();
395
- const chips = chunk2BM4GBFZ_js.focusTargetChips(targets, slides);
396
- const twoTables = chunk2BM4GBFZ_js.isTwoTableFocus(targets, slides);
395
+ const chips = chunkPSJTZIIK_js.focusTargetChips(targets, slides);
396
+ const twoTables = chunkPSJTZIIK_js.isTwoTableFocus(targets, slides);
397
397
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-b border-border bg-secondary/30", children: [
398
398
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-1 px-2.5 py-1.5", children: [
399
399
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] font-semibold uppercase tracking-wide text-muted-foreground", children: t("pptx.ai.focusScope") }),
400
400
  chips.map((chip) => /* @__PURE__ */ jsxRuntime.jsx(
401
401
  "span",
402
402
  {
403
- className: chunkFYAOOACZ_js.cn(
403
+ className: chunk7NTNFOPT_js.cn(
404
404
  "inline-flex max-w-[10rem] items-center rounded-full px-2 py-0.5 text-[11px]",
405
405
  hasPicks || isPinned ? "bg-primary/15 text-primary" : "bg-muted text-muted-foreground"
406
406
  ),
@@ -416,7 +416,7 @@ function AiFocusBar({
416
416
  {
417
417
  type: "button",
418
418
  onClick: () => onSendDirective(
419
- chunk2BM4GBFZ_js.mergeTablesDirective(
419
+ chunkPSJTZIIK_js.mergeTablesDirective(
420
420
  twoTables.slideIndex,
421
421
  twoTables.elementIdA,
422
422
  twoTables.elementIdB
@@ -437,7 +437,7 @@ function AiFocusBar({
437
437
  title: t("pptx.ai.pickElement"),
438
438
  "aria-label": t("pptx.ai.pickAria"),
439
439
  "aria-pressed": pickMode,
440
- className: chunkFYAOOACZ_js.cn(
440
+ className: chunk7NTNFOPT_js.cn(
441
441
  "rounded-sm p-1 max-md:min-w-[44px]! max-md:min-h-[44px]! flex items-center justify-center",
442
442
  pickMode ? "bg-primary text-primary-foreground" : "text-muted-foreground hover:bg-accent"
443
443
  ),
@@ -516,7 +516,7 @@ function AiHistoryList({ chats, activeChatId, onResume, onDelete }) {
516
516
  {
517
517
  type: "button",
518
518
  onClick: () => onResume(chat.id),
519
- className: chunkFYAOOACZ_js.cn(
519
+ className: chunk7NTNFOPT_js.cn(
520
520
  "flex min-w-0 flex-1 items-start gap-2 rounded-sm px-2 py-1.5 text-left hover:bg-accent",
521
521
  chat.id === activeChatId && "bg-accent/60"
522
522
  ),
@@ -671,26 +671,26 @@ function AiToolCallCard({ part }) {
671
671
  const failed = part.state === "output-error";
672
672
  const done = part.state === "output-available";
673
673
  const running = !failed && !done;
674
- const activity = chunk2BM4GBFZ_js.describeToolActivity(part.toolName, part.input, running ? "present" : "past");
674
+ const activity = chunkPSJTZIIK_js.describeToolActivity(part.toolName, part.input, running ? "present" : "past");
675
675
  const Icon = ICONS[activity.icon] ?? lu.LuWrench;
676
- const rawSummary = chunk2BM4GBFZ_js.summarizeToolArgs(part.input);
676
+ const rawSummary = chunkPSJTZIIK_js.summarizeToolArgs(part.input);
677
677
  const statusLabel = failed ? t("pptx.ai.toolFailed") : done ? t("pptx.ai.toolDone") : t("pptx.ai.toolRunning");
678
678
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[12px]", children: [
679
679
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
680
680
  /* @__PURE__ */ jsxRuntime.jsx(
681
681
  Icon,
682
682
  {
683
- className: chunkFYAOOACZ_js.cn(
683
+ className: chunk7NTNFOPT_js.cn(
684
684
  "w-3.5 h-3.5 shrink-0",
685
685
  failed ? "text-destructive" : "text-muted-foreground"
686
686
  )
687
687
  }
688
688
  ),
689
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkFYAOOACZ_js.cn("truncate", failed ? "text-destructive" : "text-foreground"), children: activity.label }),
689
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunk7NTNFOPT_js.cn("truncate", failed ? "text-destructive" : "text-foreground"), children: activity.label }),
690
690
  /* @__PURE__ */ jsxRuntime.jsxs(
691
691
  "span",
692
692
  {
693
- className: chunkFYAOOACZ_js.cn(
693
+ className: chunk7NTNFOPT_js.cn(
694
694
  "ml-auto inline-flex items-center gap-1 rounded-sm px-1.5 py-0.5 text-[10px]",
695
695
  failed ? "bg-destructive/15 text-destructive" : done ? "bg-primary/10 text-primary" : "bg-muted text-muted-foreground"
696
696
  ),
@@ -707,7 +707,7 @@ function AiToolCallCard({ part }) {
707
707
  rawSummary && /* @__PURE__ */ jsxRuntime.jsxs("details", { className: "group mt-0.5 pl-5", children: [
708
708
  /* @__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
709
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-0.5 break-words font-mono text-[10px] text-muted-foreground/80", children: [
710
- chunk2BM4GBFZ_js.toolLabel(part.toolName),
710
+ chunkPSJTZIIK_js.toolLabel(part.toolName),
711
711
  ": ",
712
712
  rawSummary
713
713
  ] })
@@ -730,7 +730,7 @@ function AiMessageList({ messages, isStreaming, bridge }) {
730
730
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 space-y-3 overflow-y-auto px-3 py-3", children: [
731
731
  messages.map((message) => {
732
732
  const isUser = message.role === "user";
733
- const parts = chunk2BM4GBFZ_js.toRenderableParts(message);
733
+ const parts = chunkPSJTZIIK_js.toRenderableParts(message);
734
734
  if (parts.length === 0 && !isUser) {
735
735
  return null;
736
736
  }
@@ -738,7 +738,7 @@ function AiMessageList({ messages, isStreaming, bridge }) {
738
738
  /* @__PURE__ */ jsxRuntime.jsx(
739
739
  "div",
740
740
  {
741
- className: chunkFYAOOACZ_js.cn(
741
+ className: chunk7NTNFOPT_js.cn(
742
742
  "mt-0.5 flex h-6 w-6 shrink-0 items-center justify-center rounded-full",
743
743
  isUser ? "bg-secondary text-muted-foreground" : "bg-primary/15 text-primary"
744
744
  ),
@@ -785,7 +785,7 @@ function AiMessageList({ messages, isStreaming, bridge }) {
785
785
  }
786
786
  function AiProposalCard({ proposal, onAccept, onReject }) {
787
787
  const { t } = reactI18next.useTranslation();
788
- const lines = proposal.summary.map(chunk2BM4GBFZ_js.humanizeDiffLine);
788
+ const lines = proposal.summary.map(chunkPSJTZIIK_js.humanizeDiffLine);
789
789
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-md border border-primary/40 bg-primary/5 p-2.5", children: [
790
790
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-1.5 text-[11px] font-semibold uppercase tracking-wide text-primary", children: t("pptx.ai.proposedChange") }),
791
791
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[12px] font-medium text-foreground", children: proposal.label }),
@@ -993,7 +993,7 @@ function AiChatPanel({
993
993
  }) {
994
994
  const { t } = reactI18next.useTranslation();
995
995
  const { state, session, initError } = useAiChat(bridge, config);
996
- const deckId = react.useMemo(() => chunk2BM4GBFZ_js.deckIdFromBridge(bridge), [bridge]);
996
+ const deckId = react.useMemo(() => chunkPSJTZIIK_js.deckIdFromBridge(bridge), [bridge]);
997
997
  return /* @__PURE__ */ jsxRuntime.jsxs(
998
998
  "div",
999
999
  {
Binary file
Binary file
@@ -1,7 +1,7 @@
1
- import { deckIdFromBridge, isAiAvailable, createAiChatSession, extractReadyToolCalls, toolCanvasTarget, createChatHistoryStore, focusTargetChips, isTwoTableFocus, mergeTablesDirective, toRenderableParts, humanizeDiffLine, buildDeckContext, describeToolActivity, summarizeToolArgs, toolLabel } from './chunk-E5OIDWHO.mjs';
2
- import { cn } from './chunk-5J6NW3YS.mjs';
3
- import './chunk-QLDHUKH2.mjs';
4
- import './chunk-WIEBQGQI.mjs';
1
+ import { deckIdFromBridge, isAiAvailable, createAiChatSession, extractReadyToolCalls, toolCanvasTarget, createChatHistoryStore, focusTargetChips, isTwoTableFocus, mergeTablesDirective, toRenderableParts, humanizeDiffLine, buildDeckContext, describeToolActivity, summarizeToolArgs, toolLabel } from './chunk-ZZY24BB7.mjs';
2
+ import { cn } from './chunk-Y7RTQOD6.mjs';
3
+ import './chunk-PJT2DTOS.mjs';
4
+ import './chunk-HDH4KFDK.mjs';
5
5
  import './chunk-XGB3TDIC.mjs';
6
6
  import { useMemo, useRef, useState, useEffect, useReducer, useCallback } from 'react';
7
7
  import { useTranslation } from 'react-i18next';
Binary file
Binary file
@@ -1,4 +1,4 @@
1
- import { mountModel3D } from './chunk-QLDHUKH2.mjs';
1
+ import { mountModel3D } from './chunk-PJT2DTOS.mjs';
2
2
  import './chunk-XGB3TDIC.mjs';
3
3
  import { useRef, useEffect } from 'react';
4
4
  import { jsx } from 'react/jsx-runtime';
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkAQIXKTAT_js = require('./chunk-AQIXKTAT.js');
3
+ var chunkYWAFJZ23_js = require('./chunk-YWAFJZ23.js');
4
4
  require('./chunk-4VNS5WPM.js');
5
5
  var react = require('react');
6
6
  var jsxRuntime = require('react/jsx-runtime');
@@ -14,7 +14,7 @@ function Model3DScene({ modelUrl, interactive, width, height }) {
14
14
  return;
15
15
  }
16
16
  let disposed = false;
17
- void chunkAQIXKTAT_js.mountModel3D(container, modelUrl, { width, height, interactive }).then((handle) => {
17
+ void chunkYWAFJZ23_js.mountModel3D(container, modelUrl, { width, height, interactive }).then((handle) => {
18
18
  if (disposed) {
19
19
  handle.dispose();
20
20
  } else {
Binary file