pptx-vue-viewer 3.2.0 → 3.4.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 (259) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/dist/AiChatPanel-CwRUg9lb.js +640 -0
  3. package/dist/AiChatPanel-CwRUg9lb.js.br +0 -0
  4. package/dist/AiChatPanel-CwRUg9lb.js.gz +0 -0
  5. package/dist/{AiChatPanel-BxNXpUN6.cjs → AiChatPanel-D5t00dFO.cjs} +10 -10
  6. package/dist/AiChatPanel-D5t00dFO.cjs.br +0 -0
  7. package/dist/AiChatPanel-D5t00dFO.cjs.gz +0 -0
  8. package/dist/{dist-BPyCq-CW.js → dist-k-HFQYB1.js} +7069 -6598
  9. package/dist/dist-k-HFQYB1.js.br +0 -0
  10. package/dist/dist-k-HFQYB1.js.gz +0 -0
  11. package/dist/{dist-_o5NTGKh.cjs → dist-pQq2C75C.cjs} +18600 -18089
  12. package/dist/dist-pQq2C75C.cjs.br +0 -0
  13. package/dist/dist-pQq2C75C.cjs.gz +0 -0
  14. package/dist/gif-encoder-B9o_2eyQ.js +2 -0
  15. package/dist/gif-encoder-B9o_2eyQ.js.br +0 -0
  16. package/dist/gif-encoder-B9o_2eyQ.js.gz +0 -0
  17. package/dist/gif-encoder-BeGacMH_.cjs +2 -0
  18. package/dist/gif-encoder-BeGacMH_.cjs.br +0 -0
  19. package/dist/gif-encoder-BeGacMH_.cjs.gz +0 -0
  20. package/dist/{i18n-Dwd1wvi3.cjs → i18n-BwIEjAud.cjs} +42 -1
  21. package/dist/i18n-BwIEjAud.cjs.br +0 -0
  22. package/dist/i18n-BwIEjAud.cjs.gz +0 -0
  23. package/dist/{i18n-D2rp3BB2.js → i18n-DrEjxxWe.js} +42 -1
  24. package/dist/i18n-DrEjxxWe.js.br +0 -0
  25. package/dist/i18n-DrEjxxWe.js.gz +0 -0
  26. package/dist/i18n.cjs +2 -2
  27. package/dist/i18n.cjs.br +0 -0
  28. package/dist/i18n.cjs.gz +0 -0
  29. package/dist/i18n.d.ts +5 -0
  30. package/dist/i18n.d.ts.map +1 -1
  31. package/dist/i18n.js +5 -5
  32. package/dist/i18n.js.br +0 -0
  33. package/dist/i18n.js.gz +0 -0
  34. package/dist/index.cjs +1 -1
  35. package/dist/index.cjs.br +0 -0
  36. package/dist/index.cjs.gz +0 -0
  37. package/dist/index.js +3 -3
  38. package/dist/index.js.br +0 -0
  39. package/dist/index.js.gz +0 -0
  40. package/dist/internals.cjs +2 -2
  41. package/dist/internals.cjs.br +0 -0
  42. package/dist/internals.cjs.gz +0 -0
  43. package/dist/internals.js +2 -2
  44. package/dist/internals.js.br +0 -0
  45. package/dist/internals.js.gz +0 -0
  46. package/dist/pptx-vue-viewer.css +72 -37
  47. package/dist/pptx-vue-viewer.css.br +0 -0
  48. package/dist/pptx-vue-viewer.css.gz +0 -0
  49. package/dist/{useViewerSettingsDialog-we5OdcQt.js → useViewerSettingsDialog-CRN8XHoO.js} +11123 -7386
  50. package/dist/useViewerSettingsDialog-CRN8XHoO.js.br +0 -0
  51. package/dist/useViewerSettingsDialog-CRN8XHoO.js.gz +0 -0
  52. package/dist/{useViewerSettingsDialog-QANgtUZA.cjs → useViewerSettingsDialog-CzqkbFbc.cjs} +13701 -9679
  53. package/dist/useViewerSettingsDialog-CzqkbFbc.cjs.br +0 -0
  54. package/dist/useViewerSettingsDialog-CzqkbFbc.cjs.gz +0 -0
  55. package/dist/viewer/PowerPointViewer.vue.d.ts.map +1 -1
  56. package/dist/viewer/components/CommentMentionTextarea.vue.d.ts +25 -0
  57. package/dist/viewer/components/CommentMentionTextarea.vue.d.ts.map +1 -0
  58. package/dist/viewer/components/CommentsPanel.vue.d.ts +13 -3
  59. package/dist/viewer/components/CommentsPanel.vue.d.ts.map +1 -1
  60. package/dist/viewer/components/CompatibilityToasts.vue.d.ts +15 -0
  61. package/dist/viewer/components/CompatibilityToasts.vue.d.ts.map +1 -0
  62. package/dist/viewer/components/ConnectorRenderer.vue.d.ts.map +1 -1
  63. package/dist/viewer/components/ElementImageBox.vue.d.ts.map +1 -1
  64. package/dist/viewer/components/ElementRenderer.vue.d.ts.map +1 -1
  65. package/dist/viewer/components/MasterViewCrudRow.vue.d.ts +14 -0
  66. package/dist/viewer/components/MasterViewCrudRow.vue.d.ts.map +1 -0
  67. package/dist/viewer/components/MasterViewOverlay.vue.d.ts +3 -0
  68. package/dist/viewer/components/MasterViewOverlay.vue.d.ts.map +1 -1
  69. package/dist/viewer/components/MasterViewSidebar.vue.d.ts +7 -0
  70. package/dist/viewer/components/MasterViewSidebar.vue.d.ts.map +1 -1
  71. package/dist/viewer/components/MobilePresenterView.vue.d.ts +3 -0
  72. package/dist/viewer/components/MobilePresenterView.vue.d.ts.map +1 -1
  73. package/dist/viewer/components/OleRenderer.vue.d.ts +3 -2
  74. package/dist/viewer/components/OleRenderer.vue.d.ts.map +1 -1
  75. package/dist/viewer/components/PresentationAnnotationOverlay.vue.d.ts.map +1 -1
  76. package/dist/viewer/components/PresentationMode.vue.d.ts +11 -1
  77. package/dist/viewer/components/PresentationMode.vue.d.ts.map +1 -1
  78. package/dist/viewer/components/PresenterNotesRail.vue.d.ts +3 -0
  79. package/dist/viewer/components/PresenterNotesRail.vue.d.ts.map +1 -1
  80. package/dist/viewer/components/PresenterView.vue.d.ts +3 -1
  81. package/dist/viewer/components/PresenterView.vue.d.ts.map +1 -1
  82. package/dist/viewer/components/ReadOnlyBanner.vue.d.ts +15 -0
  83. package/dist/viewer/components/ReadOnlyBanner.vue.d.ts.map +1 -0
  84. package/dist/viewer/components/RecentColorsRow.vue.d.ts +12 -0
  85. package/dist/viewer/components/RecentColorsRow.vue.d.ts.map +1 -0
  86. package/dist/viewer/components/SelectionOverlay.vue.d.ts +2 -2
  87. package/dist/viewer/components/SelectionOverlay.vue.d.ts.map +1 -1
  88. package/dist/viewer/components/SlideDeckInspector.vue.d.ts.map +1 -1
  89. package/dist/viewer/components/SlideSizeRescalePrompt.vue.d.ts +14 -0
  90. package/dist/viewer/components/SlideSizeRescalePrompt.vue.d.ts.map +1 -0
  91. package/dist/viewer/components/SlideTransitionPanel.vue.d.ts.map +1 -1
  92. package/dist/viewer/components/SmartArtPreviews.vue.d.ts +4 -0
  93. package/dist/viewer/components/SmartArtPreviews.vue.d.ts.map +1 -1
  94. package/dist/viewer/components/ViewerDeckDialogs.vue.d.ts +2 -0
  95. package/dist/viewer/components/ViewerDeckDialogs.vue.d.ts.map +1 -1
  96. package/dist/viewer/components/ViewerMobileSheets.vue.d.ts.map +1 -1
  97. package/dist/viewer/components/ViewerPresentationLayer.vue.d.ts +6 -1
  98. package/dist/viewer/components/ViewerPresentationLayer.vue.d.ts.map +1 -1
  99. package/dist/viewer/components/ViewerSidePanels.vue.d.ts.map +1 -1
  100. package/dist/viewer/components/ai/AiFocusBar.vue.d.ts.map +1 -1
  101. package/dist/viewer/components/inspector/ActionSettingsPanel.vue.d.ts +3 -1
  102. package/dist/viewer/components/inspector/ActionSettingsPanel.vue.d.ts.map +1 -1
  103. package/dist/viewer/components/inspector/AfterAnimationRow.vue.d.ts.map +1 -1
  104. package/dist/viewer/components/inspector/ChartAxisStyleOptions.vue.d.ts.map +1 -1
  105. package/dist/viewer/components/inspector/ChartDataPointMarkerOptions.vue.d.ts.map +1 -1
  106. package/dist/viewer/components/inspector/ChartDataPointOptions.vue.d.ts.map +1 -1
  107. package/dist/viewer/components/inspector/ChartDisplayOptions.vue.d.ts +16 -3
  108. package/dist/viewer/components/inspector/ChartDisplayOptions.vue.d.ts.map +1 -1
  109. package/dist/viewer/components/inspector/ChartMarkerOptions.vue.d.ts.map +1 -1
  110. package/dist/viewer/components/inspector/ChartPanel.vue.d.ts.map +1 -1
  111. package/dist/viewer/components/inspector/ChartSubtypeOptions.vue.d.ts +25 -0
  112. package/dist/viewer/components/inspector/ChartSubtypeOptions.vue.d.ts.map +1 -0
  113. package/dist/viewer/components/inspector/DebouncedColorInput.vue.d.ts +5 -0
  114. package/dist/viewer/components/inspector/DebouncedColorInput.vue.d.ts.map +1 -1
  115. package/dist/viewer/components/inspector/EffectsGlowReflectionSection.vue.d.ts +20 -0
  116. package/dist/viewer/components/inspector/EffectsGlowReflectionSection.vue.d.ts.map +1 -0
  117. package/dist/viewer/components/inspector/EffectsPanel.vue.d.ts +14 -17
  118. package/dist/viewer/components/inspector/EffectsPanel.vue.d.ts.map +1 -1
  119. package/dist/viewer/components/inspector/EffectsShadowSection.vue.d.ts +20 -0
  120. package/dist/viewer/components/inspector/EffectsShadowSection.vue.d.ts.map +1 -0
  121. package/dist/viewer/components/inspector/FillGradientControls.vue.d.ts +23 -0
  122. package/dist/viewer/components/inspector/FillGradientControls.vue.d.ts.map +1 -0
  123. package/dist/viewer/components/inspector/FillPanel.vue.d.ts +9 -3
  124. package/dist/viewer/components/inspector/FillPanel.vue.d.ts.map +1 -1
  125. package/dist/viewer/components/inspector/FillPatternControls.vue.d.ts +25 -0
  126. package/dist/viewer/components/inspector/FillPatternControls.vue.d.ts.map +1 -0
  127. package/dist/viewer/components/inspector/InspectorPane.vue.d.ts +3 -1
  128. package/dist/viewer/components/inspector/InspectorPane.vue.d.ts.map +1 -1
  129. package/dist/viewer/components/inspector/SlideBackgroundPanel.vue.d.ts.map +1 -1
  130. package/dist/viewer/components/inspector/SlideInspector.vue.d.ts +13 -3
  131. package/dist/viewer/components/inspector/SlideInspector.vue.d.ts.map +1 -1
  132. package/dist/viewer/components/inspector/SlideTransitionSection.vue.d.ts.map +1 -1
  133. package/dist/viewer/components/inspector/SmartArtNodeRow.vue.d.ts.map +1 -1
  134. package/dist/viewer/components/inspector/StrokePanel.vue.d.ts.map +1 -1
  135. package/dist/viewer/components/inspector/TableCellAdvancedFill.vue.d.ts +3 -2
  136. package/dist/viewer/components/inspector/TableCellAdvancedFill.vue.d.ts.map +1 -1
  137. package/dist/viewer/components/inspector/TableStyleOptions.vue.d.ts.map +1 -1
  138. package/dist/viewer/components/inspector/Text3DProperties.vue.d.ts.map +1 -1
  139. package/dist/viewer/components/inspector/TextEffectsPanel.vue.d.ts.map +1 -1
  140. package/dist/viewer/components/inspector/TextPanel.vue.d.ts.map +1 -1
  141. package/dist/viewer/components/ribbon/DrawSection.vue.d.ts.map +1 -1
  142. package/dist/viewer/components/ribbon/DrawingGroup.vue.d.ts.map +1 -1
  143. package/dist/viewer/components/ribbon/HomeSection.vue.d.ts.map +1 -1
  144. package/dist/viewer/components/ribbon/ShapeArrangeExtras.vue.d.ts.map +1 -1
  145. package/dist/viewer/components/ribbon/SlideShowSection.vue.d.ts +3 -2
  146. package/dist/viewer/components/ribbon/SlideShowSection.vue.d.ts.map +1 -1
  147. package/dist/viewer/components/ribbon/TextColorPopover.vue.d.ts +24 -0
  148. package/dist/viewer/components/ribbon/TextColorPopover.vue.d.ts.map +1 -0
  149. package/dist/viewer/components/ribbon/TextSection.vue.d.ts.map +1 -1
  150. package/dist/viewer/components/ribbon/ribbon-props-fixture.d.ts.map +1 -1
  151. package/dist/viewer/components/ribbon/ribbon-types.d.ts +2 -0
  152. package/dist/viewer/components/ribbon/ribbon-types.d.ts.map +1 -1
  153. package/dist/viewer/composables/ai/ai-log-export.d.ts +2 -54
  154. package/dist/viewer/composables/ai/ai-log-export.d.ts.map +1 -1
  155. package/dist/viewer/composables/ai/useAiBridge.d.ts.map +1 -1
  156. package/dist/viewer/composables/ai/useAiPanelController.d.ts +2 -8
  157. package/dist/viewer/composables/ai/useAiPanelController.d.ts.map +1 -1
  158. package/dist/viewer/composables/cross-slide-audio.d.ts +7 -9
  159. package/dist/viewer/composables/cross-slide-audio.d.ts.map +1 -1
  160. package/dist/viewer/composables/deck-data.d.ts +1 -1
  161. package/dist/viewer/composables/deck-data.d.ts.map +1 -1
  162. package/dist/viewer/composables/element-store-patch.d.ts.map +1 -1
  163. package/dist/viewer/composables/recent-colors-context.d.ts +11 -0
  164. package/dist/viewer/composables/recent-colors-context.d.ts.map +1 -0
  165. package/dist/viewer/composables/ribbon-props-actions.d.ts +1 -0
  166. package/dist/viewer/composables/ribbon-props-actions.d.ts.map +1 -1
  167. package/dist/viewer/composables/ribbon-props-types.d.ts +2 -0
  168. package/dist/viewer/composables/ribbon-props-types.d.ts.map +1 -1
  169. package/dist/viewer/composables/selection-gesture.d.ts +1 -3
  170. package/dist/viewer/composables/selection-gesture.d.ts.map +1 -1
  171. package/dist/viewer/composables/slide-show-start-key.d.ts +28 -0
  172. package/dist/viewer/composables/slide-show-start-key.d.ts.map +1 -0
  173. package/dist/viewer/composables/useAnimationPlayback.d.ts.map +1 -1
  174. package/dist/viewer/composables/useCollaboration.d.ts.map +1 -1
  175. package/dist/viewer/composables/useCommandDispatch.d.ts +2 -0
  176. package/dist/viewer/composables/useCommandDispatch.d.ts.map +1 -1
  177. package/dist/viewer/composables/useCommentMentionInput.d.ts +33 -0
  178. package/dist/viewer/composables/useCommentMentionInput.d.ts.map +1 -0
  179. package/dist/viewer/composables/useComments.d.ts +11 -5
  180. package/dist/viewer/composables/useComments.d.ts.map +1 -1
  181. package/dist/viewer/composables/useCompatibilityToasts.d.ts +31 -0
  182. package/dist/viewer/composables/useCompatibilityToasts.d.ts.map +1 -0
  183. package/dist/viewer/composables/useDeckViewPreferencesSync.d.ts +33 -0
  184. package/dist/viewer/composables/useDeckViewPreferencesSync.d.ts.map +1 -0
  185. package/dist/viewer/composables/useEditorKeyboard.d.ts +5 -0
  186. package/dist/viewer/composables/useEditorKeyboard.d.ts.map +1 -1
  187. package/dist/viewer/composables/useEditorOperations.d.ts.map +1 -1
  188. package/dist/viewer/composables/useElementDrag.d.ts.map +1 -1
  189. package/dist/viewer/composables/useGoogleWebfonts.d.ts +2 -1
  190. package/dist/viewer/composables/useGoogleWebfonts.d.ts.map +1 -1
  191. package/dist/viewer/composables/useInspectorDeckActions.d.ts +31 -2
  192. package/dist/viewer/composables/useInspectorDeckActions.d.ts.map +1 -1
  193. package/dist/viewer/composables/useKeyboardShortcuts.d.ts.map +1 -1
  194. package/dist/viewer/composables/useLoadContent.d.ts +24 -1
  195. package/dist/viewer/composables/useLoadContent.d.ts.map +1 -1
  196. package/dist/viewer/composables/useMasterViewCrud.d.ts +26 -0
  197. package/dist/viewer/composables/useMasterViewCrud.d.ts.map +1 -0
  198. package/dist/viewer/composables/useModel3dScene.d.ts.map +1 -1
  199. package/dist/viewer/composables/usePresentationActionExtras.d.ts +34 -0
  200. package/dist/viewer/composables/usePresentationActionExtras.d.ts.map +1 -0
  201. package/dist/viewer/composables/usePresentationAnnotations.d.ts +0 -2
  202. package/dist/viewer/composables/usePresentationAnnotations.d.ts.map +1 -1
  203. package/dist/viewer/composables/usePresentationControls.d.ts +26 -1
  204. package/dist/viewer/composables/usePresentationControls.d.ts.map +1 -1
  205. package/dist/viewer/composables/usePresentationNavigation.d.ts +16 -0
  206. package/dist/viewer/composables/usePresentationNavigation.d.ts.map +1 -1
  207. package/dist/viewer/composables/usePresentationShowOrder.d.ts +7 -0
  208. package/dist/viewer/composables/usePresentationShowOrder.d.ts.map +1 -1
  209. package/dist/viewer/composables/usePrint.d.ts +7 -1
  210. package/dist/viewer/composables/usePrint.d.ts.map +1 -1
  211. package/dist/viewer/composables/useReadOnlyRecommendation.d.ts +35 -0
  212. package/dist/viewer/composables/useReadOnlyRecommendation.d.ts.map +1 -0
  213. package/dist/viewer/composables/useRecentColors.d.ts +24 -0
  214. package/dist/viewer/composables/useRecentColors.d.ts.map +1 -0
  215. package/dist/viewer/composables/useViewerRibbonProps.d.ts.map +1 -1
  216. package/dist/viewer/index.cjs +1 -1
  217. package/dist/viewer/index.cjs.br +0 -0
  218. package/dist/viewer/index.cjs.gz +0 -0
  219. package/dist/viewer/index.js +3 -3
  220. package/dist/viewer/index.js.br +0 -0
  221. package/dist/viewer/index.js.gz +0 -0
  222. package/dist/{viewer-BRRFtKDV.js → viewer-CDo7002_.js} +12505 -11569
  223. package/dist/viewer-CDo7002_.js.br +0 -0
  224. package/dist/viewer-CDo7002_.js.gz +0 -0
  225. package/dist/{viewer-CN_soJdw.cjs → viewer-CT4fxZ5F.cjs} +8922 -7984
  226. package/dist/viewer-CT4fxZ5F.cjs.br +0 -0
  227. package/dist/viewer-CT4fxZ5F.cjs.gz +0 -0
  228. package/package.json +1 -1
  229. package/dist/AiChatPanel-BxNXpUN6.cjs.br +0 -0
  230. package/dist/AiChatPanel-BxNXpUN6.cjs.gz +0 -0
  231. package/dist/AiChatPanel-t_4NXlkY.js +0 -640
  232. package/dist/AiChatPanel-t_4NXlkY.js.br +0 -0
  233. package/dist/AiChatPanel-t_4NXlkY.js.gz +0 -0
  234. package/dist/dist-BPyCq-CW.js.br +0 -0
  235. package/dist/dist-BPyCq-CW.js.gz +0 -0
  236. package/dist/dist-_o5NTGKh.cjs.br +0 -0
  237. package/dist/dist-_o5NTGKh.cjs.gz +0 -0
  238. package/dist/gif-encoder-Bzuo20ei.js +0 -2
  239. package/dist/gif-encoder-Bzuo20ei.js.br +0 -0
  240. package/dist/gif-encoder-Bzuo20ei.js.gz +0 -0
  241. package/dist/gif-encoder-Cz7X2ehi.cjs +0 -2
  242. package/dist/gif-encoder-Cz7X2ehi.cjs.br +0 -0
  243. package/dist/gif-encoder-Cz7X2ehi.cjs.gz +0 -0
  244. package/dist/i18n-D2rp3BB2.js.br +0 -0
  245. package/dist/i18n-D2rp3BB2.js.gz +0 -0
  246. package/dist/i18n-Dwd1wvi3.cjs.br +0 -0
  247. package/dist/i18n-Dwd1wvi3.cjs.gz +0 -0
  248. package/dist/useViewerSettingsDialog-QANgtUZA.cjs.br +0 -0
  249. package/dist/useViewerSettingsDialog-QANgtUZA.cjs.gz +0 -0
  250. package/dist/useViewerSettingsDialog-we5OdcQt.js.br +0 -0
  251. package/dist/useViewerSettingsDialog-we5OdcQt.js.gz +0 -0
  252. package/dist/viewer/composables/ai/focus-targets.d.ts +0 -34
  253. package/dist/viewer/composables/ai/focus-targets.d.ts.map +0 -1
  254. package/dist/viewer/composables/animation-playback-helpers.d.ts +0 -43
  255. package/dist/viewer/composables/animation-playback-helpers.d.ts.map +0 -1
  256. package/dist/viewer-BRRFtKDV.js.br +0 -0
  257. package/dist/viewer-BRRFtKDV.js.gz +0 -0
  258. package/dist/viewer-CN_soJdw.cjs.br +0 -0
  259. package/dist/viewer-CN_soJdw.cjs.gz +0 -0
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pptx-vue-viewer",
3
- "version": "3.2.0",
3
+ "version": "3.4.0",
4
4
  "description": "Vue 3 PowerPoint viewer and editor component: render, edit, and export PPTX slides in the browser.",
5
5
  "keywords": [
6
6
  "editor",
Binary file
Binary file
@@ -1,640 +0,0 @@
1
- import { _n as e } from "./useViewerSettingsDialog-we5OdcQt.js";
2
- import { _ as t, b as a, c as s, f as r, g as l, h as o, m as n, o as i, p, s as d, v as c, w as u, x as m, y as x } from "./viewer-BRRFtKDV.js";
3
- import { Fragment as g, Suspense as f, computed as b, createBlock as v, createCommentVNode as h, createElementBlock as y, createElementVNode as k, createTextVNode as w, createVNode as C, defineComponent as P, nextTick as S, normalizeClass as T, normalizeStyle as I, onBeforeUnmount as _, onMounted as A, openBlock as E, ref as j, renderList as M, resolveDynamicComponent as F, shallowRef as B, toDisplayString as D, unref as N, vModelText as L, watch as R, withAsyncContext as H, withCtx as W, withDirectives as $ } from "vue";
4
- import { Bot as z, ChartColumn as V, Check as K, Crosshair as O, Eye as U, Film as q, GitMerge as G, History as J, LayoutTemplate as Q, LoaderCircle as X, MessageSquare as Y, MessageSquarePlus as Z, Move as ee, Navigation as te, Palette as ae, Pin as se, PinOff as re, Plus as le, Search as oe, Send as ne, Shapes as ie, Sparkles as pe, Square as de, StickyNote as ce, Table as ue, Trash2 as me, TriangleAlert as xe, Type as ge, User as fe, Wrench as be, X as ve } from "lucide-vue-next";
5
- import { getToolOrDynamicToolName as he, isDynamicToolUIPart as ye, isToolUIPart as ke } from "ai";
6
- var we = /* @__PURE__ */ new Set([
7
- "input-available",
8
- "output-available",
9
- "output-error"
10
- ]);
11
- function Ce(e, t, s, r = {}) {
12
- const l = j(t.proposals.list()), o = () => {
13
- l.value = t.proposals.list();
14
- }, n = e({
15
- transport: t.transport,
16
- sendAutomaticallyWhen: t.sendAutomaticallyWhen,
17
- onError: (e) => s.onError?.(e),
18
- onToolCall: async ({ toolCall: e }) => {
19
- const { toolName: a, toolCallId: s, input: r } = e, l = n.addToolOutput;
20
- try {
21
- l({
22
- tool: a,
23
- toolCallId: s,
24
- output: await t.executeToolCall(a, r)
25
- });
26
- } catch (e) {
27
- l({
28
- tool: a,
29
- toolCallId: s,
30
- state: "output-error",
31
- errorText: e instanceof Error ? e.message : String(e)
32
- });
33
- }
34
- o();
35
- }
36
- }), i = b(() => "submitted" === n.status.value || "streaming" === n.status.value), p = /* @__PURE__ */ new Set();
37
- R(n.messages, (e) => {
38
- for (const t of function(e) {
39
- const t = [];
40
- for (const a of e) for (const e of a.parts) {
41
- if (!ke(e) && !ye(e)) continue;
42
- const a = e, s = a.toolCallId ?? "";
43
- 0 !== s.length && void 0 !== a.input && we.has(a.state ?? "") && t.push({
44
- toolName: he(e),
45
- toolCallId: s,
46
- input: a.input
47
- });
48
- }
49
- return t;
50
- }(e)) p.has(t.toolCallId) || (p.add(t.toolCallId), r.onToolTarget?.(a(t.toolName, t.input)));
51
- }, { deep: !0 });
52
- return {
53
- messages: n.messages,
54
- status: n.status,
55
- error: n.error,
56
- isStreaming: i,
57
- proposals: l,
58
- send: (e) => {
59
- const t = e.trim();
60
- 0 !== t.length && n.sendMessage({ text: t });
61
- },
62
- stop: () => {
63
- n.stop();
64
- },
65
- clearError: () => n.clearError(),
66
- applyProposal: (e) => {
67
- t.proposals.apply(e), o();
68
- },
69
- rejectProposal: (e) => {
70
- t.proposals.revert(e), o();
71
- },
72
- acceptAllProposals: () => {
73
- t.proposals.acceptAll(), o();
74
- }
75
- };
76
- }
77
- var Pe = { class: "border-t border-border p-2" }, Se = { class: "flex items-end gap-1.5 rounded-md border border-input bg-background px-2 py-1.5 focus-within:border-ring" }, Te = ["placeholder", "aria-label"], Ie = ["title", "aria-label"], _e = [
78
- "disabled",
79
- "title",
80
- "aria-label"
81
- ], Ae = P({
82
- __name: "AiComposer",
83
- props: {
84
- isStreaming: { type: Boolean },
85
- prefillText: {},
86
- prefillNonce: {}
87
- },
88
- emits: ["send", "stop"],
89
- setup(t, { emit: a }) {
90
- const s = t, r = a, { t: l } = e(), o = j(""), n = j(null), i = b(() => o.value.trim().length > 0);
91
- function p() {
92
- const e = o.value.trim();
93
- 0 === e.length || s.isStreaming || (r("send", e), o.value = "");
94
- }
95
- function d(e) {
96
- "Enter" !== e.key || e.shiftKey || (e.preventDefault(), p());
97
- }
98
- return R(() => s.prefillNonce, (e) => {
99
- void 0 !== e && 0 !== e && (s.prefillText && (o.value = s.prefillText), S(() => n.value?.focus()));
100
- }), (e, t) => (E(), y("div", Pe, [k("div", Se, [$(k("textarea", {
101
- ref_key: "textareaRef",
102
- ref: n,
103
- "onUpdate:modelValue": t[0] || (t[0] = (e) => o.value = e),
104
- rows: 1,
105
- placeholder: N(l)("pptx.ai.placeholder"),
106
- "aria-label": N(l)("pptx.ai.placeholder"),
107
- class: "max-h-32 min-h-[1.5rem] flex-1 resize-none bg-transparent text-[13px] text-foreground outline-none placeholder:text-muted-foreground",
108
- onKeydown: d
109
- }, null, 40, Te), [[L, o.value]]), s.isStreaming ? (E(), y("button", {
110
- key: 0,
111
- type: "button",
112
- title: N(l)("pptx.ai.stop"),
113
- "aria-label": N(l)("pptx.ai.stop"),
114
- class: "shrink-0 rounded-sm p-1.5 text-muted-foreground transition-colors hover:bg-accent",
115
- onClick: t[1] || (t[1] = (e) => r("stop"))
116
- }, [C(N(de), { class: "w-4 h-4" })], 8, Ie)) : (E(), y("button", {
117
- key: 1,
118
- type: "button",
119
- disabled: !i.value,
120
- title: N(l)("pptx.ai.send"),
121
- "aria-label": N(l)("pptx.ai.send"),
122
- class: T(N(u)("shrink-0 rounded-sm p-1.5 transition-colors", i.value ? "bg-primary text-primary-foreground hover:bg-primary/90" : "text-muted-foreground/50")),
123
- onClick: p
124
- }, [C(N(ne), { class: "w-4 h-4" })], 10, _e))])]));
125
- }
126
- }), Ee = { class: "border-b border-border bg-secondary/30" }, je = { class: "flex flex-wrap items-center gap-1 px-2.5 py-1.5" }, Me = { class: "text-[10px] font-semibold uppercase tracking-wide text-muted-foreground" }, Fe = ["title"], Be = { class: "truncate" }, De = {
127
- key: 0,
128
- class: "rounded-full bg-primary/15 px-1.5 py-0.5 text-[10px] font-medium text-primary"
129
- }, Ne = { class: "ml-auto flex items-center gap-0.5" }, Le = [
130
- "title",
131
- "aria-label",
132
- "aria-pressed"
133
- ], Re = ["title", "aria-label"], He = ["title", "aria-label"], We = {
134
- key: 0,
135
- class: "flex items-center gap-2 border-t border-primary/20 bg-primary/5 px-2.5 py-1"
136
- }, $e = { class: "text-[11px] font-medium text-primary" }, ze = P({
137
- __name: "AiFocusBar",
138
- props: {
139
- targets: {},
140
- slides: {},
141
- isPinned: { type: Boolean },
142
- pickMode: { type: Boolean },
143
- hasPicks: { type: Boolean }
144
- },
145
- emits: [
146
- "pin",
147
- "clear-pin",
148
- "start-pick",
149
- "stop-pick",
150
- "clear-picks",
151
- "send-directive"
152
- ],
153
- setup(t, { emit: a }) {
154
- const r = t, l = a, { t: o } = e(), n = b(() => d(r.targets, r.slides)), i = b(() => s(r.targets, r.slides));
155
- function p() {
156
- const e = i.value;
157
- e && l("send-directive", `Merge the two selected tables (elementIdA=${e.elementIdA}, elementIdB=${e.elementIdB}) on slide ${e.slideIndex + 1} using merge_tables; stage it now, do not ask me to confirm.`);
158
- }
159
- return (e, a) => (E(), y("div", Ee, [k("div", je, [
160
- k("span", Me, D(N(o)("pptx.ai.focusScope")), 1),
161
- (E(!0), y(g, null, M(n.value, (e) => (E(), y("span", {
162
- key: e.key,
163
- class: T(N(u)("inline-flex max-w-[10rem] items-center rounded-full px-2 py-0.5 text-[11px]", t.hasPicks || t.isPinned ? "bg-primary/15 text-primary" : "bg-muted text-muted-foreground")),
164
- title: e.title
165
- }, [k("span", Be, D(e.label), 1)], 10, Fe))), 128)),
166
- t.isPinned ? (E(), y("span", De, D(N(o)("pptx.ai.pinnedFocus")), 1)) : h("", !0),
167
- k("div", Ne, [
168
- i.value ? (E(), y("button", {
169
- key: 0,
170
- type: "button",
171
- class: "inline-flex items-center gap-1 rounded-sm bg-primary/90 px-1.5 py-0.5 text-[11px] font-medium text-primary-foreground hover:bg-primary",
172
- onClick: p
173
- }, [C(N(G), { class: "w-3 h-3" }), w(" " + D(N(o)("pptx.ai.mergeSelectedTables")), 1)])) : h("", !0),
174
- k("button", {
175
- type: "button",
176
- title: N(o)("pptx.ai.pickElement"),
177
- "aria-label": N(o)("pptx.ai.pickAria"),
178
- "aria-pressed": t.pickMode,
179
- class: T(N(u)("rounded-sm p-1", t.pickMode ? "bg-primary text-primary-foreground" : "text-muted-foreground hover:bg-accent")),
180
- onClick: a[0] || (a[0] = (e) => t.pickMode ? l("stop-pick") : l("start-pick"))
181
- }, [C(N(O), { class: "w-3.5 h-3.5" })], 10, Le),
182
- t.hasPicks ? (E(), y("button", {
183
- key: 1,
184
- type: "button",
185
- title: N(o)("pptx.ai.pickClear"),
186
- "aria-label": N(o)("pptx.ai.pickClear"),
187
- class: "rounded-sm p-1 text-muted-foreground hover:bg-accent",
188
- onClick: a[1] || (a[1] = (e) => l("clear-picks"))
189
- }, [C(N(ve), { class: "w-3.5 h-3.5" })], 8, Re)) : (E(), y("button", {
190
- key: 2,
191
- type: "button",
192
- title: t.isPinned ? N(o)("pptx.ai.clearFocus") : N(o)("pptx.ai.pinFocus"),
193
- "aria-label": t.isPinned ? N(o)("pptx.ai.clearFocus") : N(o)("pptx.ai.pinFocus"),
194
- class: "rounded-sm p-1 text-muted-foreground hover:bg-accent",
195
- onClick: a[2] || (a[2] = (e) => t.isPinned ? l("clear-pin") : l("pin"))
196
- }, [t.isPinned ? (E(), v(N(re), {
197
- key: 0,
198
- class: "w-3.5 h-3.5"
199
- })) : (E(), v(N(se), {
200
- key: 1,
201
- class: "w-3.5 h-3.5"
202
- }))], 8, He))
203
- ])
204
- ]), t.pickMode ? (E(), y("div", We, [
205
- C(N(O), { class: "w-3.5 h-3.5 shrink-0 animate-pulse text-primary" }),
206
- k("span", $e, D(N(o)("pptx.ai.pickElementHint")), 1),
207
- k("button", {
208
- type: "button",
209
- class: "ml-auto rounded-sm bg-primary px-2 py-0.5 text-[11px] font-medium text-primary-foreground hover:bg-primary/90",
210
- onClick: a[3] || (a[3] = (e) => l("stop-pick"))
211
- }, D(N(o)("pptx.ai.pickDone")), 1)
212
- ])) : h("", !0)]));
213
- }
214
- }), Ve = { class: "flex items-center justify-between border-b border-border px-2.5 py-1.5" }, Ke = { class: "text-[11px] font-semibold uppercase tracking-wide text-muted-foreground" }, Oe = {
215
- key: 0,
216
- class: "px-3 py-4 text-center text-[12px] text-muted-foreground"
217
- }, Ue = {
218
- key: 1,
219
- class: "max-h-64 overflow-y-auto py-1"
220
- }, qe = ["onClick"], Ge = { class: "min-w-0 flex-1" }, Je = { class: "block truncate text-[12px] font-medium text-foreground" }, Qe = { class: "block text-[10px] text-muted-foreground" }, Xe = [
221
- "title",
222
- "aria-label",
223
- "onClick"
224
- ], Ye = { class: "border-t border-border px-2.5 py-1.5 text-[10px] text-muted-foreground" }, Ze = P({
225
- __name: "AiHistoryMenu",
226
- props: {
227
- chats: {},
228
- activeChatId: {}
229
- },
230
- emits: [
231
- "resume",
232
- "delete",
233
- "new-chat",
234
- "close"
235
- ],
236
- setup(t, { emit: a }) {
237
- const s = t, r = a, { t: l } = e(), o = j(null);
238
- function n(e) {
239
- o.value && !o.value.contains(e.target) && r("close");
240
- }
241
- return A(() => document.addEventListener("mousedown", n)), _(() => document.removeEventListener("mousedown", n)), (e, t) => (E(), y("div", {
242
- ref_key: "root",
243
- ref: o,
244
- class: "absolute right-2 top-10 z-40 w-64 rounded-md border border-border bg-popover shadow-xl"
245
- }, [
246
- k("div", Ve, [k("span", Ke, D(N(l)("pptx.ai.historyTitle")), 1), k("button", {
247
- type: "button",
248
- class: "inline-flex items-center gap-1 rounded-sm bg-primary/90 px-1.5 py-0.5 text-[11px] font-medium text-primary-foreground hover:bg-primary",
249
- onClick: t[0] || (t[0] = (e) => {
250
- r("new-chat"), r("close");
251
- })
252
- }, [C(N(le), { class: "w-3 h-3" }), w(" " + D(N(l)("pptx.ai.newChat")), 1)])]),
253
- 0 === s.chats.length ? (E(), y("p", Oe, D(N(l)("pptx.ai.historyEmpty")), 1)) : (E(), y("ul", Ue, [(E(!0), y(g, null, M(s.chats, (e) => (E(), y("li", {
254
- key: e.id,
255
- class: "group flex items-center gap-1 px-1"
256
- }, [k("button", {
257
- type: "button",
258
- class: T(["flex min-w-0 flex-1 items-start gap-2 rounded-sm px-2 py-1.5 text-left hover:bg-accent", e.id === s.activeChatId ? "bg-accent/60" : ""]),
259
- onClick: (t) => {
260
- r("resume", e.id), r("close");
261
- }
262
- }, [C(N(Y), { class: "mt-0.5 w-3.5 h-3.5 shrink-0 text-muted-foreground" }), k("span", Ge, [k("span", Je, D(e.title || N(l)("pptx.ai.untitledChat")), 1), k("span", Qe, D(N(l)("pptx.ai.messageCount", { count: e.messageCount })), 1)])], 10, qe), k("button", {
263
- type: "button",
264
- title: N(l)("pptx.ai.deleteChat"),
265
- "aria-label": N(l)("pptx.ai.deleteChat"),
266
- class: "shrink-0 rounded-sm p-1 text-muted-foreground hover:bg-destructive/10 hover:text-destructive",
267
- onClick: (t) => r("delete", e.id)
268
- }, [C(N(me), { class: "w-3.5 h-3.5" })], 8, Xe)]))), 128))])),
269
- k("p", Ye, D(N(l)("pptx.ai.historyHint")), 1)
270
- ], 512));
271
- }
272
- }), et = { class: "text-[12px]" }, tt = { class: "flex items-center gap-1.5" }, at = {
273
- key: 0,
274
- class: "mt-1 pl-5 text-[11px] text-destructive"
275
- }, st = {
276
- key: 1,
277
- class: "group mt-0.5 pl-5"
278
- }, rt = { class: "cursor-pointer list-none text-[10px] text-muted-foreground/70 hover:text-muted-foreground" }, lt = { class: "mt-0.5 break-words font-mono text-[10px] text-muted-foreground/80" }, ot = P({
279
- __name: "AiToolCallCard",
280
- props: { part: {} },
281
- setup(t) {
282
- const a = t, { t: s } = e(), r = {
283
- view: U,
284
- text: ge,
285
- shape: ie,
286
- theme: ae,
287
- table: ue,
288
- slide: Q,
289
- chart: V,
290
- move: ee,
291
- delete: me,
292
- search: oe,
293
- nav: te,
294
- animation: q,
295
- notes: ce,
296
- tool: be
297
- }, l = b(() => "output-error" === a.part.state), n = b(() => "output-available" === a.part.state), i = b(() => !l.value && !n.value), p = b(() => o(a.part.toolName, a.part.input, i.value ? "present" : "past")), d = b(() => r[p.value.icon] ?? be), x = b(() => c(a.part.input)), g = b(() => l.value ? s("pptx.ai.toolFailed") : n.value ? s("pptx.ai.toolDone") : s("pptx.ai.toolRunning"));
298
- return (e, t) => (E(), y("div", et, [
299
- k("div", tt, [
300
- (E(), v(F(d.value), { class: T(N(u)("w-3.5 h-3.5 shrink-0", l.value ? "text-destructive" : "text-muted-foreground")) }, null, 8, ["class"])),
301
- k("span", { class: T(N(u)("truncate", l.value ? "text-destructive" : "text-foreground")) }, D(p.value.label), 3),
302
- k("span", { class: T(N(u)("ml-auto inline-flex items-center gap-1 rounded-sm px-1.5 py-0.5 text-[10px]", l.value ? "bg-destructive/15 text-destructive" : n.value ? "bg-primary/10 text-primary" : "bg-muted text-muted-foreground")) }, [i.value ? (E(), v(N(X), {
303
- key: 0,
304
- class: "w-3 h-3 animate-spin"
305
- })) : n.value ? (E(), v(N(K), {
306
- key: 1,
307
- class: "w-3 h-3"
308
- })) : (E(), v(N(xe), {
309
- key: 2,
310
- class: "w-3 h-3"
311
- })), w(" " + D(g.value), 1)], 2)
312
- ]),
313
- l.value && a.part.errorText ? (E(), y("div", at, D(a.part.errorText), 1)) : h("", !0),
314
- x.value ? (E(), y("details", st, [k("summary", rt, D(N(s)("pptx.ai.toolDetails")), 1), k("div", lt, D(N(m)(a.part.toolName)) + ": " + D(x.value), 1)])) : h("", !0)
315
- ]));
316
- }
317
- }), nt = {
318
- key: 0,
319
- class: "flex flex-1 flex-col items-center justify-center gap-2 px-6 text-center"
320
- }, it = { class: "text-sm font-medium text-foreground" }, pt = { class: "text-[12px] text-muted-foreground" }, dt = {
321
- key: 1,
322
- class: "flex-1 space-y-3 overflow-y-auto px-3 py-3"
323
- }, ct = {
324
- key: 0,
325
- class: "flex gap-2"
326
- }, ut = ["aria-label"], mt = { class: "min-w-0 flex-1 space-y-1.5" }, xt = {
327
- key: 0,
328
- class: "whitespace-pre-wrap break-words text-[13px] leading-relaxed text-foreground"
329
- }, gt = {
330
- key: 0,
331
- class: "flex items-center gap-2 pl-8 text-[12px] text-muted-foreground"
332
- }, ft = P({
333
- __name: "AiMessageList",
334
- props: {
335
- messages: {},
336
- isStreaming: { type: Boolean }
337
- },
338
- setup(t) {
339
- const a = t, { t: s } = e(), r = j(null);
340
- return R(() => [a.messages, a.isStreaming], () => {
341
- S(() => r.value?.scrollIntoView({ block: "end" }));
342
- }, { deep: !0 }), (e, t) => 0 === a.messages.length ? (E(), y("div", nt, [
343
- C(N(pe), { class: "w-7 h-7 text-primary/70" }),
344
- k("p", it, D(N(s)("pptx.ai.emptyTitle")), 1),
345
- k("p", pt, D(N(s)("pptx.ai.emptyHint")), 1)
346
- ])) : (E(), y("div", dt, [
347
- (E(!0), y(g, null, M(a.messages, (e) => (E(), y(g, { key: e.id }, ["user" === e.role || N(x)(e).length > 0 ? (E(), y("div", ct, [k("div", {
348
- class: T(N(u)("mt-0.5 flex h-6 w-6 shrink-0 items-center justify-center rounded-full", "user" === e.role ? "bg-secondary text-muted-foreground" : "bg-primary/15 text-primary")),
349
- "aria-label": "user" === e.role ? N(s)("pptx.ai.you") : N(s)("pptx.ai.assistant")
350
- }, ["user" === e.role ? (E(), v(N(fe), {
351
- key: 0,
352
- class: "w-3.5 h-3.5"
353
- })) : (E(), v(N(z), {
354
- key: 1,
355
- class: "w-3.5 h-3.5"
356
- }))], 10, ut), k("div", mt, [(E(!0), y(g, null, M(N(x)(e), (e, t) => (E(), y(g, { key: "tool" === e.kind && e.toolCallId || t }, ["text" === e.kind ? (E(), y("p", xt, D(e.text), 1)) : (E(), v(ot, {
357
- key: 1,
358
- part: e
359
- }, null, 8, ["part"]))], 64))), 128))])])) : h("", !0)], 64))), 128)),
360
- a.isStreaming ? (E(), y("div", gt, [t[0] || (t[0] = k("span", { class: "inline-flex gap-1" }, [
361
- k("span", { class: "h-1.5 w-1.5 animate-bounce rounded-full bg-muted-foreground [animation-delay:-0.2s]" }),
362
- k("span", { class: "h-1.5 w-1.5 animate-bounce rounded-full bg-muted-foreground [animation-delay:-0.1s]" }),
363
- k("span", { class: "h-1.5 w-1.5 animate-bounce rounded-full bg-muted-foreground" })
364
- ], -1)), w(" " + D(N(s)("pptx.ai.thinking")), 1)])) : h("", !0),
365
- k("div", {
366
- ref_key: "endRef",
367
- ref: r
368
- }, null, 512)
369
- ]));
370
- }
371
- }), bt = { class: "rounded-md border border-primary/40 bg-primary/5 p-2.5" }, vt = { class: "mb-1.5 text-[11px] font-semibold uppercase tracking-wide text-primary" }, ht = { class: "text-[12px] font-medium text-foreground" }, yt = {
372
- key: 0,
373
- class: "mt-1 max-h-40 space-y-0.5 overflow-y-auto text-[11px] text-muted-foreground"
374
- }, kt = { class: "mt-2 flex items-center gap-2" }, wt = P({
375
- __name: "AiProposalCard",
376
- props: { proposal: {} },
377
- emits: ["accept", "reject"],
378
- setup(t, { emit: a }) {
379
- const s = t, r = a, { t: o } = e(), n = b(() => s.proposal.summary.map(l));
380
- return (e, t) => (E(), y("div", bt, [
381
- k("div", vt, D(N(o)("pptx.ai.proposedChange")), 1),
382
- k("div", ht, D(s.proposal.label), 1),
383
- n.value.length > 0 ? (E(), y("ul", yt, [(E(!0), y(g, null, M(n.value, (e, t) => (E(), y("li", {
384
- key: t,
385
- class: "break-words"
386
- }, D(e), 1))), 128))])) : h("", !0),
387
- k("div", kt, [k("button", {
388
- type: "button",
389
- class: "inline-flex items-center gap-1 rounded-sm bg-primary px-2 py-1 text-[11px] font-medium text-primary-foreground transition-colors hover:bg-primary/90",
390
- onClick: t[0] || (t[0] = (e) => r("accept", s.proposal.id))
391
- }, [C(N(K), { class: "w-3.5 h-3.5" }), w(" " + D(N(o)("pptx.ai.accept")), 1)]), k("button", {
392
- type: "button",
393
- class: "inline-flex items-center gap-1 rounded-sm border border-border px-2 py-1 text-[11px] text-muted-foreground transition-colors hover:bg-accent",
394
- onClick: t[1] || (t[1] = (e) => r("reject", s.proposal.id))
395
- }, [C(N(ve), { class: "w-3.5 h-3.5" }), w(" " + D(N(o)("pptx.ai.reject")), 1)])])
396
- ]));
397
- }
398
- }), Ct = { class: "relative flex min-h-0 flex-1 flex-col" }, Pt = { class: "flex items-center gap-1 border-b border-border px-2 py-1" }, St = { class: "ml-auto flex items-center gap-0.5" }, Tt = ["title", "aria-label"], It = [
399
- "title",
400
- "aria-label",
401
- "disabled"
402
- ], _t = {
403
- key: 1,
404
- class: "mx-3 mb-2 flex items-start gap-2 rounded-md border border-destructive/40 bg-destructive/5 px-2.5 py-1.5 text-[12px] text-destructive"
405
- }, At = { class: "min-w-0 flex-1" }, Et = { class: "font-medium" }, jt = { class: "max-h-24 overflow-y-auto break-words text-[11px] opacity-80" }, Mt = {
406
- key: 2,
407
- class: "max-h-[38%] space-y-2 overflow-y-auto border-t border-border bg-background px-3 py-2"
408
- }, Ft = { class: "flex items-center justify-between" }, Bt = { class: "text-[11px] font-semibold uppercase tracking-wide text-muted-foreground" }, Dt = P({
409
- __name: "AiConversation",
410
- props: {
411
- session: {},
412
- config: {},
413
- bridge: {},
414
- aiPanel: {}
415
- },
416
- async setup(t) {
417
- let a, s;
418
- const l = t, { t: o } = e(), { useChat: i } = ([a, s] = H(() => import("@ai-sdk/vue")), a = await a, s(), a), { messages: p, error: d, isStreaming: c, proposals: u, send: m, stop: x, clearError: f, applyProposal: P, rejectProposal: S, acceptAllProposals: T } = Ce(i, l.session, l.config, { onToolTarget: (e) => {
419
- e && void 0 !== e.slideIndex && l.bridge.goToSlide(e.slideIndex), l.aiPanel.flashToolTarget(e);
420
- } }), I = function(e) {
421
- const t = j([]), a = r({
422
- deckId: e.deckId,
423
- store: e.store,
424
- getMessages: () => e.messages.value,
425
- setMessages: e.setMessages,
426
- untitledLabel: e.untitledLabel,
427
- onChatsChanged: (e) => {
428
- t.value = e;
429
- }
430
- }), s = j(a.activeChatId()), l = () => {
431
- s.value = a.activeChatId();
432
- };
433
- return R(e.messages, () => a.notifyMessagesChanged(), { deep: !0 }), _(() => a.dispose()), {
434
- chats: t,
435
- activeChatId: s,
436
- refresh: () => a.refresh(),
437
- newChat: () => {
438
- a.newChat(), l();
439
- },
440
- resumeChat: async (e) => {
441
- await a.resumeChat(e), l();
442
- },
443
- deleteChat: async (e) => {
444
- await a.deleteChat(e), l();
445
- },
446
- clearCurrent: () => a.clearCurrent()
447
- };
448
- }({
449
- deckId: n(l.bridge),
450
- messages: p,
451
- setMessages: (e) => {
452
- p.value = e;
453
- },
454
- untitledLabel: o("pptx.ai.untitledChat")
455
- }), A = j(!1), F = l.session.changeAnimator.subscribe((e) => {
456
- e && l.bridge.goToSlide(e.slideIndex), l.aiPanel.showChangeBatch(e);
457
- });
458
- _(() => F());
459
- const B = b(() => l.aiPanel.pickTargets.value.length > 0), L = b(() => B.value ? l.aiPanel.pickTargets.value : l.aiPanel.pinnedFocus.value ?? l.aiPanel.liveFocusTargets.value), W = b(() => !B.value && null !== l.aiPanel.pinnedFocus.value);
460
- function $(e) {
461
- l.aiPanel.flashToolTarget(null), P(e);
462
- }
463
- function z() {
464
- l.aiPanel.flashToolTarget(null), T();
465
- }
466
- return (e, t) => (E(), y("div", Ct, [
467
- k("div", Pt, [k("button", {
468
- type: "button",
469
- class: "inline-flex items-center gap-1 rounded-sm px-1.5 py-1 text-[12px] text-muted-foreground hover:bg-accent",
470
- onClick: t[0] || (t[0] = (e) => A.value = !A.value)
471
- }, [C(N(J), { class: "w-3.5 h-3.5" }), w(" " + D(N(o)("pptx.ai.chats")), 1)]), k("div", St, [k("button", {
472
- type: "button",
473
- title: N(o)("pptx.ai.newChat"),
474
- "aria-label": N(o)("pptx.ai.newChat"),
475
- class: "rounded-sm p-1 text-muted-foreground hover:bg-accent",
476
- onClick: t[1] || (t[1] = (e) => N(I).newChat())
477
- }, [C(N(Z), { class: "w-3.5 h-3.5" })], 8, Tt), k("button", {
478
- type: "button",
479
- title: N(o)("pptx.ai.clearChat"),
480
- "aria-label": N(o)("pptx.ai.clearChat"),
481
- disabled: 0 === N(p).length,
482
- class: "rounded-sm p-1 text-muted-foreground hover:bg-accent disabled:opacity-40",
483
- onClick: t[2] || (t[2] = (e) => N(I).clearCurrent())
484
- }, [C(N(me), { class: "w-3.5 h-3.5" })], 8, It)])]),
485
- A.value ? (E(), v(Ze, {
486
- key: 0,
487
- chats: N(I).chats.value,
488
- "active-chat-id": N(I).activeChatId.value,
489
- onResume: t[3] || (t[3] = (e) => {
490
- N(I).resumeChat(e);
491
- }),
492
- onDelete: t[4] || (t[4] = (e) => {
493
- N(I).deleteChat(e);
494
- }),
495
- onNewChat: t[5] || (t[5] = (e) => N(I).newChat()),
496
- onClose: t[6] || (t[6] = (e) => A.value = !1)
497
- }, null, 8, ["chats", "active-chat-id"])) : h("", !0),
498
- C(ze, {
499
- targets: L.value,
500
- slides: l.bridge.getSlides(),
501
- "is-pinned": W.value,
502
- "pick-mode": l.aiPanel.pickMode.value,
503
- "has-picks": B.value,
504
- onPin: l.aiPanel.pinFocus,
505
- onClearPin: l.aiPanel.clearPinnedFocus,
506
- onStartPick: l.aiPanel.startPicking,
507
- onStopPick: l.aiPanel.stopPicking,
508
- onClearPicks: l.aiPanel.clearPicks,
509
- onSendDirective: N(m)
510
- }, null, 8, [
511
- "targets",
512
- "slides",
513
- "is-pinned",
514
- "pick-mode",
515
- "has-picks",
516
- "onPin",
517
- "onClearPin",
518
- "onStartPick",
519
- "onStopPick",
520
- "onClearPicks",
521
- "onSendDirective"
522
- ]),
523
- C(ft, {
524
- messages: N(p),
525
- "is-streaming": N(c)
526
- }, null, 8, ["messages", "is-streaming"]),
527
- N(d) ? (E(), y("div", _t, [
528
- C(N(xe), { class: "mt-0.5 w-3.5 h-3.5 shrink-0" }),
529
- k("div", At, [k("div", Et, D(N(o)("pptx.ai.errorPrefix")), 1), k("div", jt, D(N(d).message), 1)]),
530
- k("button", {
531
- type: "button",
532
- class: "shrink-0 rounded-sm px-1.5 py-0.5 text-[11px] underline-offset-2 hover:underline",
533
- onClick: t[7] || (t[7] = (...e) => N(f) && N(f)(...e))
534
- }, D(N(o)("pptx.ai.retry")), 1)
535
- ])) : h("", !0),
536
- N(u).length > 0 ? (E(), y("div", Mt, [k("div", Ft, [k("span", Bt, D(N(o)("pptx.ai.pendingChanges", { count: N(u).length })), 1), N(u).length > 1 ? (E(), y("button", {
537
- key: 0,
538
- type: "button",
539
- class: "rounded-sm bg-primary/90 px-2 py-0.5 text-[11px] font-medium text-primary-foreground hover:bg-primary",
540
- onClick: z
541
- }, D(N(o)("pptx.ai.acceptAll")), 1)) : h("", !0)]), (E(!0), y(g, null, M(N(u), (e) => (E(), v(wt, {
542
- key: e.id,
543
- proposal: e,
544
- onAccept: $,
545
- onReject: N(S)
546
- }, null, 8, ["proposal", "onReject"]))), 128))])) : h("", !0),
547
- C(Ae, {
548
- "is-streaming": N(c),
549
- "prefill-text": l.aiPanel.prefill.value.text,
550
- "prefill-nonce": l.aiPanel.prefill.value.nonce,
551
- onSend: N(m),
552
- onStop: N(x)
553
- }, null, 8, [
554
- "is-streaming",
555
- "prefill-text",
556
- "prefill-nonce",
557
- "onSend",
558
- "onStop"
559
- ])
560
- ]));
561
- }
562
- }), Nt = { class: "flex items-center gap-2 border-b border-border px-3 py-2" }, Lt = { class: "text-sm font-semibold text-foreground" }, Rt = ["title", "aria-label"], Ht = {
563
- key: 0,
564
- class: "flex flex-1 flex-col items-center justify-center gap-2 text-muted-foreground"
565
- }, Wt = {
566
- key: 1,
567
- class: "flex flex-1 flex-col items-center justify-center gap-2 px-6 text-center"
568
- }, $t = { class: "text-sm font-medium text-foreground" }, zt = { class: "text-[12px] text-muted-foreground" }, Vt = { class: "flex flex-1 flex-col items-center justify-center gap-2 text-muted-foreground" }, Kt = P({
569
- __name: "AiChatPanel",
570
- props: {
571
- bridge: {},
572
- config: {},
573
- panelWidth: {},
574
- aiPanel: {}
575
- },
576
- emits: ["close"],
577
- setup(a, { emit: s }) {
578
- const r = a, l = s, { t: o } = e(), { state: n, session: d, initError: c } = function(e, a) {
579
- const s = j("checking"), r = B(null), l = B(void 0);
580
- let o = 0;
581
- return (async () => {
582
- const n = ++o;
583
- s.value = "checking", r.value = null, l.value = void 0;
584
- try {
585
- const l = await t();
586
- if (n !== o) return;
587
- if (!l) return void (s.value = "unavailable");
588
- const i = await p(e, a);
589
- if (n !== o) return;
590
- r.value = i, s.value = "ready";
591
- } catch (e) {
592
- if (n !== o) return;
593
- l.value = e instanceof Error ? e : new Error(String(e)), s.value = "error";
594
- }
595
- })(), {
596
- state: s,
597
- session: r,
598
- initError: l
599
- };
600
- }(r.bridge, r.config), u = b(() => r.panelWidth ? { width: `${r.panelWidth}px` } : void 0), m = i({
601
- activeSlideIndex: j(0),
602
- selectedElementIds: j([]),
603
- selectedElement: () => null
604
- }), x = b(() => r.aiPanel ?? m);
605
- return (e, t) => (E(), y("div", {
606
- "data-pptx-ai-panel": "",
607
- class: "absolute right-0 top-0 z-30 flex h-full w-80 flex-col border-l border-border bg-card shadow-xl max-md:inset-x-0 max-md:top-auto max-md:bottom-0 max-md:h-[75dvh] max-md:w-full max-md:rounded-t-2xl max-md:border-l-0 max-md:border-t max-md:shadow-2xl",
608
- style: I(u.value)
609
- }, [k("div", Nt, [
610
- C(N(pe), { class: "w-4 h-4 text-primary" }),
611
- k("span", Lt, D(N(o)("pptx.ai.title")), 1),
612
- k("button", {
613
- type: "button",
614
- title: N(o)("pptx.ai.close"),
615
- "aria-label": N(o)("pptx.ai.close"),
616
- class: "ml-auto rounded-sm p-1 text-muted-foreground transition-colors hover:bg-accent",
617
- onClick: t[0] || (t[0] = (e) => l("close"))
618
- }, [C(N(ve), { class: "w-4 h-4" })], 8, Rt)
619
- ]), "checking" === N(n) ? (E(), y("div", Ht, [C(N(X), { class: "w-5 h-5 animate-spin" })])) : "unavailable" === N(n) || "error" === N(n) ? (E(), y("div", Wt, [
620
- C(N(xe), { class: "w-6 h-6 text-muted-foreground" }),
621
- k("p", $t, D(N(o)("pptx.ai.unavailableTitle")), 1),
622
- k("p", zt, D(N(c)?.message ?? N(o)("pptx.ai.unavailableHint")), 1)
623
- ])) : "ready" === N(n) && N(d) ? (E(), v(f, { key: 2 }, {
624
- fallback: W(() => [k("div", Vt, [C(N(X), { class: "w-5 h-5 animate-spin" })])]),
625
- default: W(() => [C(Dt, {
626
- session: N(d),
627
- config: r.config,
628
- bridge: r.bridge,
629
- "ai-panel": x.value
630
- }, null, 8, [
631
- "session",
632
- "config",
633
- "bridge",
634
- "ai-panel"
635
- ])]),
636
- _: 1
637
- })) : h("", !0)], 4));
638
- }
639
- });
640
- export { Kt as default };
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -1,2 +0,0 @@
1
- import { ps as e } from "./useViewerSettingsDialog-we5OdcQt.js";
2
- export { e as encodeGif };
Binary file