pptx-react-viewer 4.8.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.
- package/CHANGELOG.md +78 -0
- package/dist/{AiChatPanel-4LMJIJUU.js → AiChatPanel-WJ64Q6KO.js} +28 -28
- package/dist/AiChatPanel-WJ64Q6KO.js.br +0 -0
- package/dist/AiChatPanel-WJ64Q6KO.js.gz +0 -0
- package/dist/{AiChatPanel-XWYLYN26.mjs → AiChatPanel-YRWC7C3B.mjs} +4 -4
- package/dist/AiChatPanel-YRWC7C3B.mjs.br +0 -0
- package/dist/AiChatPanel-YRWC7C3B.mjs.gz +0 -0
- package/dist/{Model3DScene-N6IZ7Q57.mjs → Model3DScene-DS6AQWFV.mjs} +1 -1
- package/dist/{Model3DScene-N6IZ7Q57.mjs.br → Model3DScene-DS6AQWFV.mjs.br} +0 -0
- package/dist/Model3DScene-DS6AQWFV.mjs.gz +0 -0
- package/dist/{Model3DScene-YAPQ5BCI.js → Model3DScene-VHDYCHO5.js} +2 -2
- package/dist/{Model3DScene-YAPQ5BCI.js.br → Model3DScene-VHDYCHO5.js.br} +0 -0
- package/dist/Model3DScene-VHDYCHO5.js.gz +0 -0
- package/dist/{chunk-SAYZSUNQ.js → chunk-7NTNFOPT.js} +221 -203
- package/dist/chunk-7NTNFOPT.js.br +0 -0
- package/dist/chunk-7NTNFOPT.js.gz +0 -0
- package/dist/{chunk-YPDPSXPK.mjs → chunk-HDH4KFDK.mjs} +259 -0
- package/dist/chunk-HDH4KFDK.mjs.br +0 -0
- package/dist/chunk-HDH4KFDK.mjs.gz +0 -0
- package/dist/{chunk-KHEJXP4I.mjs → chunk-K5HZD63F.mjs} +2547 -1856
- package/dist/chunk-K5HZD63F.mjs.br +0 -0
- package/dist/chunk-K5HZD63F.mjs.gz +0 -0
- package/dist/{chunk-LTBTG2QB.js → chunk-KPKO2ELT.js} +259 -0
- package/dist/chunk-KPKO2ELT.js.br +0 -0
- package/dist/chunk-KPKO2ELT.js.gz +0 -0
- package/dist/{chunk-SOMUGI3Y.mjs → chunk-M6KW27TZ.mjs} +4 -4
- package/dist/chunk-M6KW27TZ.mjs.br +0 -0
- package/dist/chunk-M6KW27TZ.mjs.gz +0 -0
- package/dist/{chunk-NV2H57Q4.js → chunk-NMXIX7E4.js} +4565 -3874
- package/dist/chunk-NMXIX7E4.js.br +0 -0
- package/dist/chunk-NMXIX7E4.js.gz +0 -0
- package/dist/{chunk-NPZOVIHG.mjs → chunk-PJT2DTOS.mjs} +11183 -3957
- package/dist/chunk-PJT2DTOS.mjs.br +0 -0
- package/dist/chunk-PJT2DTOS.mjs.gz +0 -0
- package/dist/{chunk-UTP22QYH.js → chunk-PSJTZIIK.js} +5 -5
- package/dist/chunk-PSJTZIIK.js.br +0 -0
- package/dist/chunk-PSJTZIIK.js.gz +0 -0
- package/dist/{chunk-SSXGPYBF.mjs → chunk-Y7RTQOD6.mjs} +34 -16
- package/dist/chunk-Y7RTQOD6.mjs.br +0 -0
- package/dist/chunk-Y7RTQOD6.mjs.gz +0 -0
- package/dist/{chunk-YF2BQIW3.js → chunk-YWAFJZ23.js} +11204 -3957
- package/dist/chunk-YWAFJZ23.js.br +0 -0
- package/dist/chunk-YWAFJZ23.js.gz +0 -0
- package/dist/{chunk-Q7NWWIPQ.js → chunk-ZZ6IPWOP.js} +816 -816
- package/dist/chunk-ZZ6IPWOP.js.br +0 -0
- package/dist/chunk-ZZ6IPWOP.js.gz +0 -0
- package/dist/{chunk-Q4XJSJYI.mjs → chunk-ZZY24BB7.mjs} +1 -1
- package/dist/chunk-ZZY24BB7.mjs.br +0 -0
- package/dist/{chunk-Q4XJSJYI.mjs.gz → chunk-ZZY24BB7.mjs.gz} +0 -0
- package/dist/i18n/de.cjs +276 -9
- package/dist/i18n/de.cjs.br +0 -0
- package/dist/i18n/de.cjs.gz +0 -0
- package/dist/i18n/de.mjs +276 -9
- package/dist/i18n/de.mjs.br +0 -0
- package/dist/i18n/de.mjs.gz +0 -0
- package/dist/i18n/es.cjs +276 -9
- package/dist/i18n/es.cjs.br +0 -0
- package/dist/i18n/es.cjs.gz +0 -0
- package/dist/i18n/es.mjs +276 -9
- package/dist/i18n/es.mjs.br +0 -0
- package/dist/i18n/es.mjs.gz +0 -0
- package/dist/i18n/fr.cjs +276 -9
- package/dist/i18n/fr.cjs.br +0 -0
- package/dist/i18n/fr.cjs.gz +0 -0
- package/dist/i18n/fr.mjs +276 -9
- package/dist/i18n/fr.mjs.br +0 -0
- package/dist/i18n/fr.mjs.gz +0 -0
- package/dist/i18n/zh-CN.cjs +279 -12
- package/dist/i18n/zh-CN.cjs.br +0 -0
- package/dist/i18n/zh-CN.cjs.gz +0 -0
- package/dist/i18n/zh-CN.mjs +279 -12
- package/dist/i18n/zh-CN.mjs.br +0 -0
- package/dist/i18n/zh-CN.mjs.gz +0 -0
- package/dist/i18n.js +4 -4
- package/dist/i18n.js.br +0 -0
- package/dist/i18n.js.gz +0 -0
- package/dist/i18n.mjs +1 -1
- package/dist/i18n.mjs.br +0 -0
- package/dist/i18n.mjs.gz +0 -0
- package/dist/index.d.ts +663 -19
- package/dist/index.js +63 -63
- package/dist/index.js.br +0 -0
- package/dist/index.js.gz +0 -0
- package/dist/index.mjs +6 -6
- package/dist/index.mjs.br +0 -0
- package/dist/index.mjs.gz +0 -0
- package/dist/internals.d.ts +655 -8
- package/dist/internals.js +105 -105
- package/dist/internals.js.br +0 -0
- package/dist/internals.js.gz +0 -0
- package/dist/internals.mjs +4 -4
- package/dist/internals.mjs.br +0 -0
- package/dist/internals.mjs.gz +0 -0
- package/dist/pptx-viewer.css +1 -1
- package/dist/pptx-viewer.css.br +0 -0
- package/dist/pptx-viewer.css.gz +0 -0
- package/dist/viewer/index.d.ts +657 -19
- package/dist/viewer/index.js +27 -27
- package/dist/viewer/index.js.br +0 -0
- package/dist/viewer/index.js.gz +0 -0
- package/dist/viewer/index.mjs +6 -6
- package/dist/viewer/index.mjs.br +0 -0
- package/dist/viewer/index.mjs.gz +0 -0
- package/package.json +3 -2
- package/dist/AiChatPanel-4LMJIJUU.js.br +0 -0
- package/dist/AiChatPanel-4LMJIJUU.js.gz +0 -0
- package/dist/AiChatPanel-XWYLYN26.mjs.br +0 -0
- package/dist/AiChatPanel-XWYLYN26.mjs.gz +0 -0
- package/dist/Model3DScene-N6IZ7Q57.mjs.gz +0 -0
- package/dist/Model3DScene-YAPQ5BCI.js.gz +0 -0
- package/dist/chunk-KHEJXP4I.mjs.br +0 -0
- package/dist/chunk-KHEJXP4I.mjs.gz +0 -0
- package/dist/chunk-LTBTG2QB.js.br +0 -0
- package/dist/chunk-LTBTG2QB.js.gz +0 -0
- package/dist/chunk-NPZOVIHG.mjs.br +0 -0
- package/dist/chunk-NPZOVIHG.mjs.gz +0 -0
- package/dist/chunk-NV2H57Q4.js.br +0 -0
- package/dist/chunk-NV2H57Q4.js.gz +0 -0
- package/dist/chunk-Q4XJSJYI.mjs.br +0 -0
- package/dist/chunk-Q7NWWIPQ.js.br +0 -0
- package/dist/chunk-Q7NWWIPQ.js.gz +0 -0
- package/dist/chunk-SAYZSUNQ.js.br +0 -0
- package/dist/chunk-SAYZSUNQ.js.gz +0 -0
- package/dist/chunk-SOMUGI3Y.mjs.br +0 -0
- package/dist/chunk-SOMUGI3Y.mjs.gz +0 -0
- package/dist/chunk-SSXGPYBF.mjs.br +0 -0
- package/dist/chunk-SSXGPYBF.mjs.gz +0 -0
- package/dist/chunk-UTP22QYH.js.br +0 -0
- package/dist/chunk-UTP22QYH.js.gz +0 -0
- package/dist/chunk-YF2BQIW3.js.br +0 -0
- package/dist/chunk-YF2BQIW3.js.gz +0 -0
- package/dist/chunk-YPDPSXPK.mjs.br +0 -0
- package/dist/chunk-YPDPSXPK.mjs.gz +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,84 @@ 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
|
+
|
|
10
88
|
## [4.7.0](https://github.com/ChristopherVR/pptx-viewer/releases/tag/pptx-react-viewer@4.7.0) - 2026-09-25
|
|
11
89
|
|
|
12
90
|
### Features
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
require('./chunk-
|
|
6
|
-
require('./chunk-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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?.(
|
|
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
|
|
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 ??
|
|
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:
|
|
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 =
|
|
396
|
-
const twoTables =
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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:
|
|
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 =
|
|
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 =
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
|
|
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 =
|
|
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:
|
|
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(
|
|
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(() =>
|
|
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-
|
|
2
|
-
import { cn } from './chunk-
|
|
3
|
-
import './chunk-
|
|
4
|
-
import './chunk-
|
|
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
|
|
Binary file
|
|
Binary file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
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
|
|
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
|
|
Binary file
|