pptx-react-viewer 4.65.0 → 4.67.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 (104) hide show
  1. package/CHANGELOG.md +85 -0
  2. package/README.md +10 -0
  3. package/dist/{AiChatPanel-7U7IJRNY.mjs → AiChatPanel-E7CJSTW7.mjs} +1 -1
  4. package/dist/AiChatPanel-E7CJSTW7.mjs.br +0 -0
  5. package/dist/AiChatPanel-E7CJSTW7.mjs.gz +0 -0
  6. package/dist/{AiChatPanel-7AFFNYEN.js → AiChatPanel-PLQ3NBTK.js} +19 -19
  7. package/dist/AiChatPanel-PLQ3NBTK.js.br +0 -0
  8. package/dist/AiChatPanel-PLQ3NBTK.js.gz +0 -0
  9. package/dist/ai.js +2 -2
  10. package/dist/ai.js.br +0 -0
  11. package/dist/ai.js.gz +0 -0
  12. package/dist/ai.mjs +1 -1
  13. package/dist/ai.mjs.br +0 -0
  14. package/dist/ai.mjs.gz +0 -0
  15. package/dist/{chunk-G5JGUSBL.mjs → chunk-3LJ5QUU3.mjs} +271 -261
  16. package/dist/chunk-3LJ5QUU3.mjs.br +0 -0
  17. package/dist/chunk-3LJ5QUU3.mjs.gz +0 -0
  18. package/dist/{chunk-VGU5S37T.js → chunk-F5UOILTY.js} +466 -456
  19. package/dist/chunk-F5UOILTY.js.br +0 -0
  20. package/dist/chunk-F5UOILTY.js.gz +0 -0
  21. package/dist/{chunk-5ZW3GP6C.mjs → chunk-FBSPQYRE.mjs} +72 -738
  22. package/dist/chunk-FBSPQYRE.mjs.br +0 -0
  23. package/dist/chunk-FBSPQYRE.mjs.gz +0 -0
  24. package/dist/{chunk-WAIX4VJ2.mjs → chunk-JZE6BORE.mjs} +1 -1
  25. package/dist/chunk-JZE6BORE.mjs.br +0 -0
  26. package/dist/chunk-JZE6BORE.mjs.gz +0 -0
  27. package/dist/{chunk-VMX3IDQB.mjs → chunk-LRDW6EH7.mjs} +22 -11
  28. package/dist/chunk-LRDW6EH7.mjs.br +0 -0
  29. package/dist/chunk-LRDW6EH7.mjs.gz +0 -0
  30. package/dist/{chunk-PNDORR6S.js → chunk-LVEFHZ76.js} +1 -1
  31. package/dist/chunk-LVEFHZ76.js.br +0 -0
  32. package/dist/chunk-LVEFHZ76.js.gz +0 -0
  33. package/dist/{chunk-5DBKW7F3.js → chunk-P2COO2QO.js} +71 -736
  34. package/dist/chunk-P2COO2QO.js.br +0 -0
  35. package/dist/chunk-P2COO2QO.js.gz +0 -0
  36. package/dist/{chunk-LUKGXRHZ.js → chunk-ZLPMXC55.js} +578 -567
  37. package/dist/chunk-ZLPMXC55.js.br +0 -0
  38. package/dist/chunk-ZLPMXC55.js.gz +0 -0
  39. package/dist/i18n/de.cjs +3 -0
  40. package/dist/i18n/de.cjs.br +0 -0
  41. package/dist/i18n/de.cjs.gz +0 -0
  42. package/dist/i18n/de.mjs +3 -0
  43. package/dist/i18n/de.mjs.br +0 -0
  44. package/dist/i18n/de.mjs.gz +0 -0
  45. package/dist/i18n/es.cjs +3 -0
  46. package/dist/i18n/es.cjs.br +0 -0
  47. package/dist/i18n/es.cjs.gz +0 -0
  48. package/dist/i18n/es.mjs +3 -0
  49. package/dist/i18n/es.mjs.br +0 -0
  50. package/dist/i18n/es.mjs.gz +0 -0
  51. package/dist/i18n/fr.cjs +3 -0
  52. package/dist/i18n/fr.cjs.br +0 -0
  53. package/dist/i18n/fr.cjs.gz +0 -0
  54. package/dist/i18n/fr.mjs +3 -0
  55. package/dist/i18n/fr.mjs.br +0 -0
  56. package/dist/i18n/fr.mjs.gz +0 -0
  57. package/dist/i18n/zh-CN.cjs +3 -0
  58. package/dist/i18n/zh-CN.cjs.br +0 -0
  59. package/dist/i18n/zh-CN.cjs.gz +0 -0
  60. package/dist/i18n/zh-CN.mjs +3 -0
  61. package/dist/i18n/zh-CN.mjs.br +0 -0
  62. package/dist/i18n/zh-CN.mjs.gz +0 -0
  63. package/dist/index.d.ts +4 -1
  64. package/dist/index.js +27 -27
  65. package/dist/index.js.br +0 -0
  66. package/dist/index.js.gz +0 -0
  67. package/dist/index.mjs +4 -4
  68. package/dist/index.mjs.br +0 -0
  69. package/dist/index.mjs.gz +0 -0
  70. package/dist/internals.d.ts +9 -2
  71. package/dist/internals.js +81 -81
  72. package/dist/internals.js.br +0 -0
  73. package/dist/internals.js.gz +0 -0
  74. package/dist/internals.mjs +2 -2
  75. package/dist/internals.mjs.br +0 -0
  76. package/dist/internals.mjs.gz +0 -0
  77. package/dist/viewer/index.d.ts +4 -1
  78. package/dist/viewer/index.js +21 -21
  79. package/dist/viewer/index.js.br +0 -0
  80. package/dist/viewer/index.js.gz +0 -0
  81. package/dist/viewer/index.mjs +4 -4
  82. package/dist/viewer/index.mjs.br +0 -0
  83. package/dist/viewer/index.mjs.gz +0 -0
  84. package/package.json +4 -4
  85. package/dist/AiChatPanel-7AFFNYEN.js.br +0 -0
  86. package/dist/AiChatPanel-7AFFNYEN.js.gz +0 -0
  87. package/dist/AiChatPanel-7U7IJRNY.mjs.br +0 -0
  88. package/dist/AiChatPanel-7U7IJRNY.mjs.gz +0 -0
  89. package/dist/chunk-5DBKW7F3.js.br +0 -0
  90. package/dist/chunk-5DBKW7F3.js.gz +0 -0
  91. package/dist/chunk-5ZW3GP6C.mjs.br +0 -0
  92. package/dist/chunk-5ZW3GP6C.mjs.gz +0 -0
  93. package/dist/chunk-G5JGUSBL.mjs.br +0 -0
  94. package/dist/chunk-G5JGUSBL.mjs.gz +0 -0
  95. package/dist/chunk-LUKGXRHZ.js.br +0 -0
  96. package/dist/chunk-LUKGXRHZ.js.gz +0 -0
  97. package/dist/chunk-PNDORR6S.js.br +0 -0
  98. package/dist/chunk-PNDORR6S.js.gz +0 -0
  99. package/dist/chunk-VGU5S37T.js.br +0 -0
  100. package/dist/chunk-VGU5S37T.js.gz +0 -0
  101. package/dist/chunk-VMX3IDQB.mjs.br +0 -0
  102. package/dist/chunk-VMX3IDQB.mjs.gz +0 -0
  103. package/dist/chunk-WAIX4VJ2.mjs.br +0 -0
  104. package/dist/chunk-WAIX4VJ2.mjs.gz +0 -0
package/CHANGELOG.md CHANGED
@@ -7,6 +7,91 @@ 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.67.0](https://github.com/ChristopherVR/ooxml/releases/tag/pptx-react-viewer@4.67.0) - 2026-11-06
11
+
12
+ ### Features
13
+
14
+ - **drawingml:** Share powerpoint's measured dash patterns ([9c36464](https://github.com/ChristopherVR/ooxml/commit/9c364649697f675ecea811c807188cb083c91078))
15
+ - **ui:** Match dashed square-cap ends and dash phase on straight lines ([7ea4139](https://github.com/ChristopherVR/ooxml/commit/7ea4139a8a759e8dbdec1650b6d6c7f792084d43))
16
+ - **drawingml:** Model PowerPoint's path="shape" gradient field ([afc2c2e](https://github.com/ChristopherVR/ooxml/commit/afc2c2e5243c859b71516e7aa921eac5f287ae0c))
17
+ - **ui:** Fit arch and circle text to its arc and space lines one pitch apart ([816e254](https://github.com/ChristopherVR/ooxml/commit/816e2541fc6af4dce45b8b3c2fa7896f650d5cb4))
18
+ - **ui:** Add a trust center option for downloading webfonts ([e260f16](https://github.com/ChristopherVR/ooxml/commit/e260f16f564e115657f8c60a4c8513ff9c4ddaf2))
19
+ - **pptx:** Honour the font download option in every binding ([6a153eb](https://github.com/ChristopherVR/ooxml/commit/6a153eb83186830490f8a0968d8ba29876562ca6))
20
+
21
+ ### Bug Fixes
22
+
23
+ - **geometry:** Reconstruct swooshArrow's guide chain from PowerPoint ([f427d84](https://github.com/ChristopherVR/ooxml/commit/f427d84088235985b4fbf1a681cc3bcaab84fdf0))
24
+ - **geometry:** Draw actionButtonHelp's question mark with elliptical arcs ([01275f1](https://github.com/ChristopherVR/ooxml/commit/01275f191ab8a1e0a19c52e9322b477084718bd2))
25
+ - **geometry:** Shade the scroll curl with the measured swirl, not discs ([1e3d8f9](https://github.com/ChristopherVR/ooxml/commit/1e3d8f93f777031900f8de7fdcd79c7e7a479dd4))
26
+ - **ui:** Paint path="shape" gradients as PowerPoint does in every binding ([9fd7ea8](https://github.com/ChristopherVR/ooxml/commit/9fd7ea856540a27e4f0d33eb853b66fa5bdef842))
27
+ - **pptx:** Read adj1 of the wave and pour text warps and write it back ([90f407a](https://github.com/ChristopherVR/ooxml/commit/90f407afc7726fde72f52fc93a9b6e0adf57df36))
28
+ - **pptx:** Persist canvas size changes from automation ([#252](https://github.com/ChristopherVR/ooxml/issues/252)) ([e9b76d4](https://github.com/ChristopherVR/ooxml/commit/e9b76d47fcb2b3432cefda7f061fc302370320bf))
29
+ - **pptx:** Preserve merged cells during table structure edits ([#253](https://github.com/ChristopherVR/ooxml/issues/253)) ([0158dda](https://github.com/ChristopherVR/ooxml/commit/0158dda7f0ad7ba5148dda05f9d7ecc23e468555))
30
+ - **pptx:** Wait for a deck's webfonts before showing it ([995b977](https://github.com/ChristopherVR/ooxml/commit/995b977e12041a798744eb9704d4d5735cd52a1a))
31
+ - **ui:** Break lines where powerpoint does when the deck font is missing ([40765e7](https://github.com/ChristopherVR/ooxml/commit/40765e7ac295ca1c6ee4346cd95109fd7be7d951))
32
+
33
+ ### Documentation
34
+
35
+ - Disclose every outbound request in PRIVACY.md ([eb1810b](https://github.com/ChristopherVR/ooxml/commit/eb1810bd3dd1ede67a8c4872f3fe5daa64472fe1))
36
+
37
+ ### Testing
38
+
39
+ - **react:** Pin the freeform circle path as an image paint server ([f7e0f32](https://github.com/ChristopherVR/ooxml/commit/f7e0f3267d35d8c33040795f79b8f36459b92cfd))
40
+ - **pptx:** Pin transparent outlines and text-box effects from the SDK ([#254](https://github.com/ChristopherVR/ooxml/issues/254)) ([6de0da1](https://github.com/ChristopherVR/ooxml/commit/6de0da1799532dbe4c6f093d93c75a44471f4375))
41
+
42
+ ## [4.66.0](https://github.com/ChristopherVR/ooxml/releases/tag/pptx-react-viewer@4.66.0) - 2026-11-06
43
+
44
+ ### Features
45
+
46
+ - **ui:** Paint shadow and glow along gradient, pattern and picture shapes ([2e81d32](https://github.com/ChristopherVR/ooxml/commit/2e81d325e92948d82a0f5e584e672349fbdf7ca0))
47
+ - **ui:** PowerPoint-style media control bar on the editor canvas ([7c71c7f](https://github.com/ChristopherVR/ooxml/commit/7c71c7fb6f8ea8346afc9281a86bba00eac64a74))
48
+ - **ui:** Draw the table style effectRef shadow on the table frame ([30b9df8](https://github.com/ChristopherVR/ooxml/commit/30b9df883501814c38d715a3795876bc4b7c97e3))
49
+
50
+ ### Bug Fixes
51
+
52
+ - **ui:** Stop table borders adding a pixel to every row ([dc2fdd7](https://github.com/ChristopherVR/ooxml/commit/dc2fdd7b5754c735a14c1b1a686122abdeea92dc))
53
+ - **ui:** Lay missing legacy East Asian fonts out on their named metrics ([adec110](https://github.com/ChristopherVR/ooxml/commit/adec11017ea2b59b0bb78248752c7ee2dac74e38))
54
+ - **ui:** Paint outer shadow and glow along non-rectangular shapes ([6d4cc12](https://github.com/ChristopherVR/ooxml/commit/6d4cc12f49235b799444706b3c3a0fa0c699be16))
55
+ - **ui:** Snap every rect edge to exact EMU and draw lines with flat caps ([3217686](https://github.com/ChristopherVR/ooxml/commit/32176861683f9e8dd566331bdae36a6e5135f7f1))
56
+ - **geometry:** Follow ecma-376 for curvedConnector3, 4 and 5 ([fb6b33f](https://github.com/ChristopherVR/ooxml/commit/fb6b33f867882e8ffd8617694977a45fd120d375))
57
+ - **ui:** Hit-test silhouette shapes on their geometry, not their box ([638f6bf](https://github.com/ChristopherVR/ooxml/commit/638f6bf73bffaa64d439caa23a45f7ae465cc5f8))
58
+ - **pptx:** Resolve an absolute layout-to-master relationship target ([03ed692](https://github.com/ChristopherVR/ooxml/commit/03ed692a1367546d7a92bccbf03fce01bdf16f86))
59
+ - **ui:** Match PowerPoint's dash lengths and cap handling ([6ff7e23](https://github.com/ChristopherVR/ooxml/commit/6ff7e23e91513260a7f2c52358d9261ce04667ad))
60
+ - **ui:** Match PowerPoint table style fills, double lines and tblBg span ([a30f8ca](https://github.com/ChristopherVR/ooxml/commit/a30f8ca02ef08ed6e056afec123d89add435c444))
61
+ - **react:** Lay out a pure equation box with the shared block style ([2495586](https://github.com/ChristopherVR/ooxml/commit/2495586bd203ce359e870ae08486e940ac83804b))
62
+ - **ui:** Snap group child strokes by their absolute position ([061ae7e](https://github.com/ChristopherVR/ooxml/commit/061ae7e5a6d6edbc1c431761e54732c25191d554))
63
+ - **geometry:** Match PowerPoint for about 55 preset shapes ([97f99e1](https://github.com/ChristopherVR/ooxml/commit/97f99e1ea2dc603684870a41905203bf341cf420))
64
+ - **ui:** Draw nineteen text warps as measured top and bottom paths ([01eb409](https://github.com/ChristopherVR/ooxml/commit/01eb409b2c24f2697d2c094ee2729b9193deb046))
65
+ - **ui:** Put the inner shadow on the edge the offset points to ([1983da4](https://github.com/ChristopherVR/ooxml/commit/1983da4650d9b80bd41eb0d7e222fb744b6136b7))
66
+ - **ui:** Keep the shadow and glow of a morphing shape painted as a silhouette ([0f8f76d](https://github.com/ChristopherVR/ooxml/commit/0f8f76d5fe5842503983c6e7a24a89ca48e19472))
67
+ - **ui:** Place table cell paragraphs on PowerPoint's baselines ([eb41b49](https://github.com/ChristopherVR/ooxml/commit/eb41b49d1ae40af08614dfcfcc2d01f65871a97e))
68
+ - **text:** Lay missing Office fonts out on their own metrics ([83c4f02](https://github.com/ChristopherVR/ooxml/commit/83c4f029a0c2975e62ca1ae7a50f5f58f13ad732))
69
+ - **ui:** Stroke split-layout presets along their stroked paths only ([68ad9aa](https://github.com/ChristopherVR/ooxml/commit/68ad9aa2f908a43fe9a0cfd0b24250b704bb1159))
70
+ - **react:** Inset raw-xml table cell margins by half the border ([7586b55](https://github.com/ChristopherVR/ooxml/commit/7586b558531ba54188968e79cda431907d7269aa))
71
+ - **ui:** Stop flowing a:linkedTxbx text, as PowerPoint ignores it ([2eeabbb](https://github.com/ChristopherVR/ooxml/commit/2eeabbbebfdd5e9f9a4d11848f3e655efe906ea8))
72
+ - **react:** Render a soft line break as a bare br like the other bindings ([f9c7bf1](https://github.com/ChristopherVR/ooxml/commit/f9c7bf1e053d11efe99025e2c9b24dff21fb1d87))
73
+ - **ui:** Start dashed closed outlines where powerpoint does ([7246a37](https://github.com/ChristopherVR/ooxml/commit/7246a37eef1465dfed5031387b948c62d0e71743))
74
+ - **react:** Put the table style shadow on the element frame ([a45cb2f](https://github.com/ChristopherVR/ooxml/commit/a45cb2f5df60957b63e1c69b597accf4a0410f4e))
75
+ - **geometry:** Rebuild the three circular arrows on the ECMA guide chain ([d3b7a1e](https://github.com/ChristopherVR/ooxml/commit/d3b7a1e9e196ef50b87dbe37289d35181a49e1f6))
76
+ - **geometry:** Rebuild ribbon, ribbon2, ellipse ribbons, left-right ribbon ([5a75fe1](https://github.com/ChristopherVR/ooxml/commit/5a75fe1a5bfef83e63105ce0a52e808e5212cf0c))
77
+ - **geometry:** Rebuild verticalScroll, horizontalScroll and funnel ([b14f7f2](https://github.com/ChristopherVR/ooxml/commit/b14f7f2b1ab9d030c09ba7e36d91172140635c34))
78
+ - **geometry:** Correct irregularSeal2, magnetic disk and multidocument ([60783a8](https://github.com/ChristopherVR/ooxml/commit/60783a8fdd0c99a54c9538d654def571d368bf97))
79
+ - **geometry:** Draw action button glyphs and fix cube and bevel shading ([6b7801f](https://github.com/ChristopherVR/ooxml/commit/6b7801fe2c4777dbf928300991d5dda5fd232562))
80
+ - **ui:** Veil lighten and darken sub-paths over gradient and picture fills ([d9d80ab](https://github.com/ChristopherVR/ooxml/commit/d9d80ab90f9d11b64f63b6ec902a9647902b39b6))
81
+ - **ui:** Paint gradients the way PowerPoint does and fix blank rect path ([0f1e8d8](https://github.com/ChristopherVR/ooxml/commit/0f1e8d877e87edeae94bbb59890a078ca581cbc6))
82
+ - **ui:** Give every painted copy of a slide its own svg def ids ([a58124a](https://github.com/ChristopherVR/ooxml/commit/a58124a1b0bbb8a8d0c45d92fdebc0d7001e5188))
83
+
84
+ ### Refactor
85
+
86
+ - **ui:** Route embedded font injection through the shared sheet ([63263a2](https://github.com/ChristopherVR/ooxml/commit/63263a2f3fe808b7c0353395c407d611a5bf0e35))
87
+ - **ui:** Paint warped text runs with resolveWarpRunPaint everywhere ([c2b5281](https://github.com/ChristopherVR/ooxml/commit/c2b5281840d26bae691f7f9edfc38591c107aed3))
88
+ - **react:** Render every table from the shared table descriptors ([492e26e](https://github.com/ChristopherVR/ooxml/commit/492e26e086f996e7d3916e9589d5764427947b18))
89
+
90
+ ### Testing
91
+
92
+ - **react:** Pin the measured powerpoint dash lengths in snapshots ([d5ea53f](https://github.com/ChristopherVR/ooxml/commit/d5ea53f9e1a9369e3d56e558f30790941640489d))
93
+ - **react:** Pin powerpoint's inner shadow blur and edge in color-core ([6c75692](https://github.com/ChristopherVR/ooxml/commit/6c75692a60b3060db0eef298fca2915d04d5ab30))
94
+
10
95
  ## [4.65.0](https://github.com/ChristopherVR/ooxml/releases/tag/pptx-react-viewer@4.65.0) - 2026-11-06
11
96
 
12
97
  ### Features
package/README.md CHANGED
@@ -350,6 +350,16 @@ The other subpaths are `i18n/fr` (`translationsFr`), `i18n/es`
350
350
  [localization guide](https://christophervr.github.io/ooxml/pptx/guide/localization)
351
351
  for registration and runtime switching. Existing English imports are unchanged.
352
352
 
353
+ ## Privacy and network use
354
+
355
+ The viewer renders and saves decks in the browser and never uploads them. It contacts other servers only in these cases:
356
+
357
+ - **Fonts that are neither installed nor embedded.** When a deck uses such a font and Google Fonts serves it (or a metric-compatible clone, such as Carlito for Calibri), the viewer downloads it from `fonts.googleapis.com` and `fonts.gstatic.com`, so the reader's IP address and the needed family names reach Google. This is on by default, as in PowerPoint, which downloads its cloud fonts. Turn it off with `googleFonts: false`, or send the same requests to a self-hosted mirror with `googleFonts: { baseUrl: 'https://fonts.example.com/css2' }`. Readers can also turn it off in File > Options > Trust Center ("Download fonts that are not installed or embedded (Google Fonts)"); a host value locks that toggle. With downloads off, text uses installed, embedded or substitute fonts and line breaks can differ from PowerPoint. If the download is slow, the deck waits up to 8 seconds, and it opens at once when the font server cannot be reached (offline use works). See [font loading](https://github.com/ChristopherVR/ooxml/blob/main/docs/font-loading.md).
358
+ - **Linked pictures and media** in a deck are fetched from their URLs while the Trust Center option "Allow external content" is on (the default). `allowExternalContent: false` blocks them.
359
+ - **Share and Broadcast**, only when started: updates go to the server you configure; with no server, peers meet through y-webrtc's public signaling server and public STUN servers.
360
+
361
+ Nothing collects analytics or telemetry. The full list, including what is kept in local storage, is in [PRIVACY.md](https://github.com/ChristopherVR/ooxml/blob/main/PRIVACY.md).
362
+
353
363
  ## License
354
364
 
355
365
  [Apache-2.0](LICENSE). Please keep the [`NOTICE`](NOTICE) file with redistributions.
@@ -1,4 +1,4 @@
1
- import { useTranslation, cn } from './chunk-5ZW3GP6C.mjs';
1
+ import { useTranslation, cn } from './chunk-FBSPQYRE.mjs';
2
2
  import './chunk-UV2HVMKZ.mjs';
3
3
  import { useMemo, useRef, useState, useEffect, useReducer, useCallback } from 'react';
4
4
  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';
Binary file
Binary file
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunk5DBKW7F3_js = require('./chunk-5DBKW7F3.js');
3
+ var chunkP2COO2QO_js = require('./chunk-P2COO2QO.js');
4
4
  require('./chunk-PIRHQTI4.js');
5
5
  var react = require('react');
6
6
  var lu = require('react-icons/lu');
@@ -301,7 +301,7 @@ function AiComposer({
301
301
  prefillText,
302
302
  prefillNonce
303
303
  }) {
304
- const { t } = chunk5DBKW7F3_js.useTranslation();
304
+ const { t } = chunkP2COO2QO_js.useTranslation();
305
305
  const [value, setValue] = react.useState("");
306
306
  const textareaRef = react.useRef(null);
307
307
  const appliedNonce = react.useRef(void 0);
@@ -364,7 +364,7 @@ function AiComposer({
364
364
  disabled: value.trim().length === 0,
365
365
  title: t("pptx.ai.send"),
366
366
  "aria-label": t("pptx.ai.send"),
367
- className: chunk5DBKW7F3_js.cn(
367
+ className: chunkP2COO2QO_js.cn(
368
368
  "shrink-0 rounded-sm p-1.5 transition-colors",
369
369
  value.trim().length === 0 ? "text-muted-foreground/50" : "bg-primary text-primary-foreground hover:bg-primary/90"
370
370
  ),
@@ -386,7 +386,7 @@ function AiFocusBar({
386
386
  onStopPick,
387
387
  onClearPicks
388
388
  }) {
389
- const { t } = chunk5DBKW7F3_js.useTranslation();
389
+ const { t } = chunkP2COO2QO_js.useTranslation();
390
390
  const chips = ai.focusTargetChips(targets, slides);
391
391
  const twoTables = ai.isTwoTableFocus(targets, slides);
392
392
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-b border-border bg-secondary/30", children: [
@@ -395,7 +395,7 @@ function AiFocusBar({
395
395
  chips.map((chip) => /* @__PURE__ */ jsxRuntime.jsx(
396
396
  "span",
397
397
  {
398
- className: chunk5DBKW7F3_js.cn(
398
+ className: chunkP2COO2QO_js.cn(
399
399
  "inline-flex max-w-[10rem] items-center rounded-full px-2 py-0.5 text-[11px]",
400
400
  hasPicks || isPinned ? "bg-primary/15 text-primary" : "bg-muted text-muted-foreground"
401
401
  ),
@@ -432,7 +432,7 @@ function AiFocusBar({
432
432
  title: t("pptx.ai.pickElement"),
433
433
  "aria-label": t("pptx.ai.pickAria"),
434
434
  "aria-pressed": pickMode,
435
- className: chunk5DBKW7F3_js.cn(
435
+ className: chunkP2COO2QO_js.cn(
436
436
  "rounded-sm p-1 max-md:min-w-[44px]! max-md:min-h-[44px]! flex items-center justify-center",
437
437
  pickMode ? "bg-primary text-primary-foreground" : "text-muted-foreground hover:bg-accent"
438
438
  ),
@@ -501,7 +501,7 @@ function relativeTime(from, now = Date.now()) {
501
501
  return `${weeks}w ago`;
502
502
  }
503
503
  function AiHistoryList({ chats, activeChatId, onResume, onDelete }) {
504
- const { t } = chunk5DBKW7F3_js.useTranslation();
504
+ const { t } = chunkP2COO2QO_js.useTranslation();
505
505
  if (chats.length === 0) {
506
506
  return /* @__PURE__ */ jsxRuntime.jsx("p", { className: "px-3 py-4 text-center text-[12px] text-muted-foreground", children: t("pptx.ai.historyEmpty") });
507
507
  }
@@ -511,7 +511,7 @@ function AiHistoryList({ chats, activeChatId, onResume, onDelete }) {
511
511
  {
512
512
  type: "button",
513
513
  onClick: () => onResume(chat.id),
514
- className: chunk5DBKW7F3_js.cn(
514
+ className: chunkP2COO2QO_js.cn(
515
515
  "flex min-w-0 flex-1 items-start gap-2 rounded-sm px-2 py-1.5 text-left hover:bg-accent",
516
516
  chat.id === activeChatId && "bg-accent/60"
517
517
  ),
@@ -550,7 +550,7 @@ function AiHistoryMenu({
550
550
  onNewChat,
551
551
  onClose
552
552
  }) {
553
- const { t } = chunk5DBKW7F3_js.useTranslation();
553
+ const { t } = chunkP2COO2QO_js.useTranslation();
554
554
  const ref = react.useRef(null);
555
555
  react.useEffect(() => {
556
556
  const handler = (e) => {
@@ -616,7 +616,7 @@ function appliedThemeFromPart(part) {
616
616
  return { summary: out.summary ?? "Theme updated", previous: out.previous ?? {} };
617
617
  }
618
618
  function AiAppliedThemeCard({ summary, onUndo }) {
619
- const { t } = chunk5DBKW7F3_js.useTranslation();
619
+ const { t } = chunkP2COO2QO_js.useTranslation();
620
620
  const [undone, setUndone] = react.useState(false);
621
621
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5 rounded-md border border-primary/30 bg-primary/5 px-2.5 py-1.5 text-[12px]", children: [
622
622
  /* @__PURE__ */ jsxRuntime.jsx(lu.LuPalette, { className: "w-3.5 h-3.5 shrink-0 text-primary" }),
@@ -662,7 +662,7 @@ var ICONS = {
662
662
  tool: lu.LuWrench
663
663
  };
664
664
  function AiToolCallCard({ part }) {
665
- const { t } = chunk5DBKW7F3_js.useTranslation();
665
+ const { t } = chunkP2COO2QO_js.useTranslation();
666
666
  const failed = part.state === "output-error";
667
667
  const done = part.state === "output-available";
668
668
  const running = !failed && !done;
@@ -675,17 +675,17 @@ function AiToolCallCard({ part }) {
675
675
  /* @__PURE__ */ jsxRuntime.jsx(
676
676
  Icon,
677
677
  {
678
- className: chunk5DBKW7F3_js.cn(
678
+ className: chunkP2COO2QO_js.cn(
679
679
  "w-3.5 h-3.5 shrink-0",
680
680
  failed ? "text-destructive" : "text-muted-foreground"
681
681
  )
682
682
  }
683
683
  ),
684
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunk5DBKW7F3_js.cn("truncate", failed ? "text-destructive" : "text-foreground"), children: activity.label }),
684
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkP2COO2QO_js.cn("truncate", failed ? "text-destructive" : "text-foreground"), children: activity.label }),
685
685
  /* @__PURE__ */ jsxRuntime.jsxs(
686
686
  "span",
687
687
  {
688
- className: chunk5DBKW7F3_js.cn(
688
+ className: chunkP2COO2QO_js.cn(
689
689
  "ml-auto inline-flex items-center gap-1 rounded-sm px-1.5 py-0.5 text-[10px]",
690
690
  failed ? "bg-destructive/15 text-destructive" : done ? "bg-primary/10 text-primary" : "bg-muted text-muted-foreground"
691
691
  ),
@@ -710,7 +710,7 @@ function AiToolCallCard({ part }) {
710
710
  ] });
711
711
  }
712
712
  function AiMessageList({ messages, isStreaming, bridge }) {
713
- const { t } = chunk5DBKW7F3_js.useTranslation();
713
+ const { t } = chunkP2COO2QO_js.useTranslation();
714
714
  const endRef = react.useRef(null);
715
715
  react.useEffect(() => {
716
716
  endRef.current?.scrollIntoView({ block: "end" });
@@ -733,7 +733,7 @@ function AiMessageList({ messages, isStreaming, bridge }) {
733
733
  /* @__PURE__ */ jsxRuntime.jsx(
734
734
  "div",
735
735
  {
736
- className: chunk5DBKW7F3_js.cn(
736
+ className: chunkP2COO2QO_js.cn(
737
737
  "mt-0.5 flex h-6 w-6 shrink-0 items-center justify-center rounded-full",
738
738
  isUser ? "bg-secondary text-muted-foreground" : "bg-primary/15 text-primary"
739
739
  ),
@@ -779,7 +779,7 @@ function AiMessageList({ messages, isStreaming, bridge }) {
779
779
  ] });
780
780
  }
781
781
  function AiProposalCard({ proposal, onAccept, onReject }) {
782
- const { t } = chunk5DBKW7F3_js.useTranslation();
782
+ const { t } = chunkP2COO2QO_js.useTranslation();
783
783
  const lines = proposal.summary.map(ai.humanizeDiffLine);
784
784
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-md border border-primary/40 bg-primary/5 p-2.5", children: [
785
785
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-1.5 text-[11px] font-semibold uppercase tracking-wide text-primary", children: t("pptx.ai.proposedChange") }),
@@ -821,7 +821,7 @@ function AiConversation({
821
821
  aiPanel,
822
822
  deckId
823
823
  }) {
824
- const { t } = chunk5DBKW7F3_js.useTranslation();
824
+ const { t } = chunkP2COO2QO_js.useTranslation();
825
825
  const chat = useAiConversation(useChat, session, config, bridge, {
826
826
  // Live "AI as a collaborator" focus: as each tool runs, navigate to and
827
827
  // highlight the slide / element(s) it touches so the canvas mirrors the
@@ -986,7 +986,7 @@ function AiChatPanel({
986
986
  onClose,
987
987
  panelWidth
988
988
  }) {
989
- const { t } = chunk5DBKW7F3_js.useTranslation();
989
+ const { t } = chunkP2COO2QO_js.useTranslation();
990
990
  const { state, session, initError } = useAiChat(bridge, config);
991
991
  const deckId = react.useMemo(() => ai.deckIdFromBridge(bridge), [bridge]);
992
992
  return /* @__PURE__ */ jsxRuntime.jsxs(
Binary file
Binary file
package/dist/ai.js CHANGED
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var chunkPNDORR6S_js = require('./chunk-PNDORR6S.js');
3
+ var chunkLVEFHZ76_js = require('./chunk-LVEFHZ76.js');
4
4
  require('./chunk-PIRHQTI4.js');
5
5
 
6
6
  // src/ai.ts
7
7
  function createAiAssistant(config) {
8
- return chunkPNDORR6S_js.aiAssistants.register(config, chunkPNDORR6S_js.AiChatPanelLazy);
8
+ return chunkLVEFHZ76_js.aiAssistants.register(config, chunkLVEFHZ76_js.AiChatPanelLazy);
9
9
  }
10
10
 
11
11
  exports.createAiAssistant = createAiAssistant;
package/dist/ai.js.br CHANGED
Binary file
package/dist/ai.js.gz CHANGED
Binary file
package/dist/ai.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { aiAssistants, AiChatPanelLazy } from './chunk-WAIX4VJ2.mjs';
1
+ import { aiAssistants, AiChatPanelLazy } from './chunk-JZE6BORE.mjs';
2
2
  import './chunk-UV2HVMKZ.mjs';
3
3
 
4
4
  // src/ai.ts
package/dist/ai.mjs.br CHANGED
Binary file
package/dist/ai.mjs.gz CHANGED
Binary file