pptx-vue-viewer 3.2.0 → 3.3.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 (141) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/{AiChatPanel-BxNXpUN6.cjs → AiChatPanel-CIWcMm8C.cjs} +10 -10
  3. package/dist/AiChatPanel-CIWcMm8C.cjs.br +0 -0
  4. package/dist/AiChatPanel-CIWcMm8C.cjs.gz +0 -0
  5. package/dist/AiChatPanel-CzS-aHL8.js +640 -0
  6. package/dist/AiChatPanel-CzS-aHL8.js.br +0 -0
  7. package/dist/AiChatPanel-CzS-aHL8.js.gz +0 -0
  8. package/dist/gif-encoder-DWBR8LMW.cjs +2 -0
  9. package/dist/gif-encoder-DWBR8LMW.cjs.br +0 -0
  10. package/dist/gif-encoder-DWBR8LMW.cjs.gz +0 -0
  11. package/dist/gif-encoder-Hs46qb2d.js +2 -0
  12. package/dist/gif-encoder-Hs46qb2d.js.br +0 -0
  13. package/dist/gif-encoder-Hs46qb2d.js.gz +0 -0
  14. package/dist/{i18n-D2rp3BB2.js → i18n-C0N3ae_W.js} +1 -0
  15. package/dist/i18n-C0N3ae_W.js.br +0 -0
  16. package/dist/{i18n-D2rp3BB2.js.gz → i18n-C0N3ae_W.js.gz} +0 -0
  17. package/dist/{i18n-Dwd1wvi3.cjs → i18n-Dta_jyWT.cjs} +1 -0
  18. package/dist/i18n-Dta_jyWT.cjs.br +0 -0
  19. package/dist/{i18n-Dwd1wvi3.cjs.gz → i18n-Dta_jyWT.cjs.gz} +0 -0
  20. package/dist/i18n.cjs +1 -1
  21. package/dist/i18n.cjs.br +0 -0
  22. package/dist/i18n.cjs.gz +0 -0
  23. package/dist/i18n.js +1 -1
  24. package/dist/i18n.js.br +0 -0
  25. package/dist/i18n.js.gz +0 -0
  26. package/dist/index.cjs +1 -1
  27. package/dist/index.cjs.br +0 -0
  28. package/dist/index.cjs.gz +0 -0
  29. package/dist/index.js +3 -3
  30. package/dist/index.js.br +0 -0
  31. package/dist/index.js.gz +0 -0
  32. package/dist/internals.cjs +2 -2
  33. package/dist/internals.cjs.br +0 -0
  34. package/dist/internals.cjs.gz +0 -0
  35. package/dist/internals.js +2 -2
  36. package/dist/internals.js.br +0 -0
  37. package/dist/internals.js.gz +0 -0
  38. package/dist/pptx-vue-viewer.css +17 -17
  39. package/dist/pptx-vue-viewer.css.br +0 -0
  40. package/dist/pptx-vue-viewer.css.gz +0 -0
  41. package/dist/{useViewerSettingsDialog-QANgtUZA.cjs → useViewerSettingsDialog-Ba-pfmyk.cjs} +11854 -9003
  42. package/dist/useViewerSettingsDialog-Ba-pfmyk.cjs.br +0 -0
  43. package/dist/useViewerSettingsDialog-Ba-pfmyk.cjs.gz +0 -0
  44. package/dist/{useViewerSettingsDialog-we5OdcQt.js → useViewerSettingsDialog-DC7CgLIE.js} +8004 -5308
  45. package/dist/useViewerSettingsDialog-DC7CgLIE.js.br +0 -0
  46. package/dist/useViewerSettingsDialog-DC7CgLIE.js.gz +0 -0
  47. package/dist/viewer/components/ConnectorRenderer.vue.d.ts.map +1 -1
  48. package/dist/viewer/components/ElementImageBox.vue.d.ts.map +1 -1
  49. package/dist/viewer/components/ElementRenderer.vue.d.ts.map +1 -1
  50. package/dist/viewer/components/OleRenderer.vue.d.ts +3 -2
  51. package/dist/viewer/components/OleRenderer.vue.d.ts.map +1 -1
  52. package/dist/viewer/components/PresentationAnnotationOverlay.vue.d.ts.map +1 -1
  53. package/dist/viewer/components/PresentationMode.vue.d.ts.map +1 -1
  54. package/dist/viewer/components/SelectionOverlay.vue.d.ts +2 -2
  55. package/dist/viewer/components/SelectionOverlay.vue.d.ts.map +1 -1
  56. package/dist/viewer/components/SlideTransitionPanel.vue.d.ts.map +1 -1
  57. package/dist/viewer/components/SmartArtPreviews.vue.d.ts +4 -0
  58. package/dist/viewer/components/SmartArtPreviews.vue.d.ts.map +1 -1
  59. package/dist/viewer/components/ai/AiFocusBar.vue.d.ts.map +1 -1
  60. package/dist/viewer/components/inspector/ChartDisplayOptions.vue.d.ts +16 -3
  61. package/dist/viewer/components/inspector/ChartDisplayOptions.vue.d.ts.map +1 -1
  62. package/dist/viewer/components/inspector/ChartPanel.vue.d.ts.map +1 -1
  63. package/dist/viewer/components/inspector/EffectsGlowReflectionSection.vue.d.ts +20 -0
  64. package/dist/viewer/components/inspector/EffectsGlowReflectionSection.vue.d.ts.map +1 -0
  65. package/dist/viewer/components/inspector/EffectsPanel.vue.d.ts +14 -17
  66. package/dist/viewer/components/inspector/EffectsPanel.vue.d.ts.map +1 -1
  67. package/dist/viewer/components/inspector/EffectsShadowSection.vue.d.ts +20 -0
  68. package/dist/viewer/components/inspector/EffectsShadowSection.vue.d.ts.map +1 -0
  69. package/dist/viewer/components/inspector/FillGradientControls.vue.d.ts +23 -0
  70. package/dist/viewer/components/inspector/FillGradientControls.vue.d.ts.map +1 -0
  71. package/dist/viewer/components/inspector/FillPanel.vue.d.ts +9 -3
  72. package/dist/viewer/components/inspector/FillPanel.vue.d.ts.map +1 -1
  73. package/dist/viewer/components/inspector/FillPatternControls.vue.d.ts +25 -0
  74. package/dist/viewer/components/inspector/FillPatternControls.vue.d.ts.map +1 -0
  75. package/dist/viewer/components/inspector/SlideTransitionSection.vue.d.ts.map +1 -1
  76. package/dist/viewer/components/inspector/StrokePanel.vue.d.ts.map +1 -1
  77. package/dist/viewer/components/inspector/TableCellAdvancedFill.vue.d.ts +3 -2
  78. package/dist/viewer/components/inspector/TableCellAdvancedFill.vue.d.ts.map +1 -1
  79. package/dist/viewer/components/inspector/TableStyleOptions.vue.d.ts.map +1 -1
  80. package/dist/viewer/components/ribbon/HomeSection.vue.d.ts.map +1 -1
  81. package/dist/viewer/components/ribbon/ShapeArrangeExtras.vue.d.ts.map +1 -1
  82. package/dist/viewer/composables/ai/ai-log-export.d.ts +2 -54
  83. package/dist/viewer/composables/ai/ai-log-export.d.ts.map +1 -1
  84. package/dist/viewer/composables/ai/useAiBridge.d.ts.map +1 -1
  85. package/dist/viewer/composables/ai/useAiPanelController.d.ts +2 -8
  86. package/dist/viewer/composables/ai/useAiPanelController.d.ts.map +1 -1
  87. package/dist/viewer/composables/cross-slide-audio.d.ts +7 -9
  88. package/dist/viewer/composables/cross-slide-audio.d.ts.map +1 -1
  89. package/dist/viewer/composables/element-store-patch.d.ts.map +1 -1
  90. package/dist/viewer/composables/selection-gesture.d.ts +1 -3
  91. package/dist/viewer/composables/selection-gesture.d.ts.map +1 -1
  92. package/dist/viewer/composables/useAnimationPlayback.d.ts.map +1 -1
  93. package/dist/viewer/composables/useCollaboration.d.ts.map +1 -1
  94. package/dist/viewer/composables/useEditorOperations.d.ts.map +1 -1
  95. package/dist/viewer/composables/useElementDrag.d.ts.map +1 -1
  96. package/dist/viewer/composables/useGoogleWebfonts.d.ts +2 -1
  97. package/dist/viewer/composables/useGoogleWebfonts.d.ts.map +1 -1
  98. package/dist/viewer/composables/useLoadContent.d.ts.map +1 -1
  99. package/dist/viewer/composables/useModel3dScene.d.ts.map +1 -1
  100. package/dist/viewer/composables/usePresentationAnnotations.d.ts +0 -2
  101. package/dist/viewer/composables/usePresentationAnnotations.d.ts.map +1 -1
  102. package/dist/viewer/composables/usePresentationNavigation.d.ts +7 -0
  103. package/dist/viewer/composables/usePresentationNavigation.d.ts.map +1 -1
  104. package/dist/viewer/index.cjs +1 -1
  105. package/dist/viewer/index.cjs.br +0 -0
  106. package/dist/viewer/index.cjs.gz +0 -0
  107. package/dist/viewer/index.js +3 -3
  108. package/dist/viewer/index.js.br +0 -0
  109. package/dist/viewer/index.js.gz +0 -0
  110. package/dist/{viewer-CN_soJdw.cjs → viewer-DyWiOaRX.cjs} +6274 -6231
  111. package/dist/viewer-DyWiOaRX.cjs.br +0 -0
  112. package/dist/viewer-DyWiOaRX.cjs.gz +0 -0
  113. package/dist/{viewer-BRRFtKDV.js → viewer-Mdf9Ioha.js} +10847 -10806
  114. package/dist/viewer-Mdf9Ioha.js.br +0 -0
  115. package/dist/viewer-Mdf9Ioha.js.gz +0 -0
  116. package/package.json +1 -1
  117. package/dist/AiChatPanel-BxNXpUN6.cjs.br +0 -0
  118. package/dist/AiChatPanel-BxNXpUN6.cjs.gz +0 -0
  119. package/dist/AiChatPanel-t_4NXlkY.js +0 -640
  120. package/dist/AiChatPanel-t_4NXlkY.js.br +0 -0
  121. package/dist/AiChatPanel-t_4NXlkY.js.gz +0 -0
  122. package/dist/gif-encoder-Bzuo20ei.js +0 -2
  123. package/dist/gif-encoder-Bzuo20ei.js.br +0 -0
  124. package/dist/gif-encoder-Bzuo20ei.js.gz +0 -0
  125. package/dist/gif-encoder-Cz7X2ehi.cjs +0 -2
  126. package/dist/gif-encoder-Cz7X2ehi.cjs.br +0 -0
  127. package/dist/gif-encoder-Cz7X2ehi.cjs.gz +0 -0
  128. package/dist/i18n-D2rp3BB2.js.br +0 -0
  129. package/dist/i18n-Dwd1wvi3.cjs.br +0 -0
  130. package/dist/useViewerSettingsDialog-QANgtUZA.cjs.br +0 -0
  131. package/dist/useViewerSettingsDialog-QANgtUZA.cjs.gz +0 -0
  132. package/dist/useViewerSettingsDialog-we5OdcQt.js.br +0 -0
  133. package/dist/useViewerSettingsDialog-we5OdcQt.js.gz +0 -0
  134. package/dist/viewer/composables/ai/focus-targets.d.ts +0 -34
  135. package/dist/viewer/composables/ai/focus-targets.d.ts.map +0 -1
  136. package/dist/viewer/composables/animation-playback-helpers.d.ts +0 -43
  137. package/dist/viewer/composables/animation-playback-helpers.d.ts.map +0 -1
  138. package/dist/viewer-BRRFtKDV.js.br +0 -0
  139. package/dist/viewer-BRRFtKDV.js.gz +0 -0
  140. package/dist/viewer-CN_soJdw.cjs.br +0 -0
  141. 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.3.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
@@ -1,2 +0,0 @@
1
- import { ps as e } from "./useViewerSettingsDialog-we5OdcQt.js";
2
- export { e as encodeGif };
Binary file
Binary file
@@ -1,2 +0,0 @@
1
- const e = require("./useViewerSettingsDialog-QANgtUZA.cjs");
2
- exports.encodeGif = e.encodeGif;
Binary file