pptx-vue-viewer 3.13.0 → 3.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/dist/{AiChatPanel-sVdtVb3S.js → AiChatPanel-C6yTGXJD.js} +64 -64
- package/dist/AiChatPanel-C6yTGXJD.js.br +0 -0
- package/dist/AiChatPanel-C6yTGXJD.js.gz +0 -0
- package/dist/{AiChatPanel-Dc2XmKf0.cjs → AiChatPanel-D7YJXVEJ.cjs} +85 -85
- package/dist/AiChatPanel-D7YJXVEJ.cjs.br +0 -0
- package/dist/AiChatPanel-D7YJXVEJ.cjs.gz +0 -0
- package/dist/{dist-D2_uVQ25.cjs → dist-DVKNpGQ1.cjs} +17521 -17317
- package/dist/dist-DVKNpGQ1.cjs.br +0 -0
- package/dist/dist-DVKNpGQ1.cjs.gz +0 -0
- package/dist/{dist-DUcjFVaq.js → dist-KJdg2pqk.js} +17330 -17126
- package/dist/dist-KJdg2pqk.js.br +0 -0
- package/dist/dist-KJdg2pqk.js.gz +0 -0
- package/dist/gif-encoder-CZEe4U9X.js +2 -0
- package/dist/gif-encoder-CZEe4U9X.js.br +0 -0
- package/dist/gif-encoder-CZEe4U9X.js.gz +0 -0
- package/dist/gif-encoder-De4PkagS.cjs +2 -0
- package/dist/gif-encoder-De4PkagS.cjs.br +0 -0
- package/dist/gif-encoder-De4PkagS.cjs.gz +0 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.br +0 -0
- package/dist/index.cjs.gz +0 -0
- package/dist/index.js +3 -3
- package/dist/index.js.br +0 -0
- package/dist/index.js.gz +0 -0
- package/dist/internals.cjs +1 -1
- package/dist/internals.cjs.br +0 -0
- package/dist/internals.cjs.gz +0 -0
- package/dist/internals.d.ts +1 -1
- package/dist/internals.d.ts.map +1 -1
- package/dist/internals.js +2 -2
- package/dist/internals.js.br +0 -0
- package/dist/internals.js.gz +0 -0
- package/dist/pptx-vue-viewer.css +51 -14
- package/dist/pptx-vue-viewer.css.br +0 -0
- package/dist/pptx-vue-viewer.css.gz +0 -0
- package/dist/useViewerSettingsDialog-D6iiGRNQ.js +64995 -0
- package/dist/useViewerSettingsDialog-D6iiGRNQ.js.br +0 -0
- package/dist/useViewerSettingsDialog-D6iiGRNQ.js.gz +0 -0
- package/dist/{useViewerSettingsDialog-Cep_86kN.cjs → useViewerSettingsDialog-MrgnuyOG.cjs} +49211 -36999
- package/dist/useViewerSettingsDialog-MrgnuyOG.cjs.br +0 -0
- package/dist/useViewerSettingsDialog-MrgnuyOG.cjs.gz +0 -0
- package/dist/viewer/components/CommentsPanel.vue.d.ts.map +1 -1
- package/dist/viewer/components/MobileSheet.vue.d.ts.map +1 -1
- package/dist/viewer/components/OleEditorDialog.vue.d.ts.map +1 -1
- package/dist/viewer/components/PrintDialog.vue.d.ts.map +1 -1
- package/dist/viewer/components/SettingsAppearanceTab.vue.d.ts.map +1 -1
- package/dist/viewer/components/SettingsDialog.vue.d.ts.map +1 -1
- package/dist/viewer/components/ShareDialog.vue.d.ts.map +1 -1
- package/dist/viewer/components/WordArtEnvelopeGlyph.vue.d.ts.map +1 -1
- package/dist/viewer/components/ai/AiChatPanel.vue.d.ts.map +1 -1
- package/dist/viewer/components/ai/AiConversation.vue.d.ts.map +1 -1
- package/dist/viewer/components/ai/AiFocusBar.vue.d.ts.map +1 -1
- package/dist/viewer/components/inspector/ActionSettingsPanel.vue.d.ts.map +1 -1
- package/dist/viewer/components/inspector/AnimationEditorControls.vue.d.ts +8 -0
- package/dist/viewer/components/inspector/AnimationEditorControls.vue.d.ts.map +1 -1
- package/dist/viewer/components/inspector/AnimationPanel.vue.d.ts.map +1 -1
- package/dist/viewer/components/inspector/ArrangePanel.vue.d.ts.map +1 -1
- package/dist/viewer/components/inspector/ChartDataGrid.vue.d.ts.map +1 -1
- package/dist/viewer/components/inspector/FillPanel.vue.d.ts.map +1 -1
- package/dist/viewer/components/inspector/InspectorPane.vue.d.ts.map +1 -1
- package/dist/viewer/components/inspector/InspectorSectionCard.vue.d.ts +27 -0
- package/dist/viewer/components/inspector/InspectorSectionCard.vue.d.ts.map +1 -0
- package/dist/viewer/components/inspector/InspectorTabs.vue.d.ts.map +1 -1
- package/dist/viewer/components/inspector/QuickStylesGallery.vue.d.ts.map +1 -1
- package/dist/viewer/components/inspector/StrokePanel.vue.d.ts.map +1 -1
- package/dist/viewer/components/inspector/TableCellAdvancedFill.vue.d.ts.map +1 -1
- package/dist/viewer/components/inspector/TableCellFormattingPanel.vue.d.ts.map +1 -1
- package/dist/viewer/components/inspector/TableDataGrid.vue.d.ts.map +1 -1
- package/dist/viewer/components/inspector/TableStyleEditorFields.vue.d.ts.map +1 -1
- package/dist/viewer/components/inspector/TextPanel.vue.d.ts.map +1 -1
- package/dist/viewer/components/settings/OptionsControlRow.vue.d.ts.map +1 -1
- package/dist/viewer/composables/useEmbeddedFonts.d.ts.map +1 -1
- package/dist/viewer/composables/useGifExport.d.ts +32 -0
- package/dist/viewer/composables/useGifExport.d.ts.map +1 -0
- package/dist/viewer/composables/useGoogleWebfonts.d.ts.map +1 -1
- package/dist/viewer/composables/useIsMobile.d.ts +11 -0
- package/dist/viewer/composables/useIsMobile.d.ts.map +1 -1
- package/dist/viewer/composables/useMediaExport.d.ts +3 -1
- package/dist/viewer/composables/useMediaExport.d.ts.map +1 -1
- package/dist/viewer/composables/useTextWarpEnvelope.d.ts.map +1 -1
- package/dist/viewer/index.cjs +1 -1
- package/dist/viewer/index.cjs.br +0 -0
- package/dist/viewer/index.cjs.gz +0 -0
- package/dist/viewer/index.js +3 -3
- package/dist/viewer/index.js.br +0 -0
- package/dist/viewer/index.js.gz +0 -0
- package/dist/viewer/utils/glyph-outline-cache.d.ts +8 -0
- package/dist/viewer/utils/glyph-outline-cache.d.ts.map +1 -0
- package/dist/{viewer-DR-qKweq.js → viewer-DGArk_38.js} +14204 -14024
- package/dist/viewer-DGArk_38.js.br +0 -0
- package/dist/viewer-DGArk_38.js.gz +0 -0
- package/dist/{viewer-BWi4tUWU.cjs → viewer-aSYYoxpL.cjs} +9208 -9028
- package/dist/viewer-aSYYoxpL.cjs.br +0 -0
- package/dist/viewer-aSYYoxpL.cjs.gz +0 -0
- package/package.json +3 -1
- package/dist/AiChatPanel-Dc2XmKf0.cjs.br +0 -0
- package/dist/AiChatPanel-Dc2XmKf0.cjs.gz +0 -0
- package/dist/AiChatPanel-sVdtVb3S.js.br +0 -0
- package/dist/AiChatPanel-sVdtVb3S.js.gz +0 -0
- package/dist/dist-D2_uVQ25.cjs.br +0 -0
- package/dist/dist-D2_uVQ25.cjs.gz +0 -0
- package/dist/dist-DUcjFVaq.js.br +0 -0
- package/dist/dist-DUcjFVaq.js.gz +0 -0
- package/dist/gif-encoder-B2AxxSF3.cjs +0 -2
- package/dist/gif-encoder-B2AxxSF3.cjs.br +0 -0
- package/dist/gif-encoder-B2AxxSF3.cjs.gz +0 -0
- package/dist/gif-encoder-BzY_aQhr.js +0 -2
- package/dist/gif-encoder-BzY_aQhr.js.br +0 -0
- package/dist/gif-encoder-BzY_aQhr.js.gz +0 -0
- package/dist/useViewerSettingsDialog-CBonloSi.js +0 -52822
- package/dist/useViewerSettingsDialog-CBonloSi.js.br +0 -0
- package/dist/useViewerSettingsDialog-CBonloSi.js.gz +0 -0
- package/dist/useViewerSettingsDialog-Cep_86kN.cjs.br +0 -0
- package/dist/useViewerSettingsDialog-Cep_86kN.cjs.gz +0 -0
- package/dist/viewer-BWi4tUWU.cjs.br +0 -0
- package/dist/viewer-BWi4tUWU.cjs.gz +0 -0
- package/dist/viewer-DR-qKweq.js.br +0 -0
- package/dist/viewer-DR-qKweq.js.gz +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,24 @@ A release listed with no entries carried no Conventional Commit in this package'
|
|
|
7
7
|
scope: scripts/release-plan.mjs re-releases a package whenever any of its files
|
|
8
8
|
change, not only on conventional ones.
|
|
9
9
|
|
|
10
|
+
## [3.13.0](https://github.com/ChristopherVR/pptx-viewer/releases/tag/pptx-vue-viewer@3.13.0) - 2026-09-10
|
|
11
|
+
|
|
12
|
+
### Features
|
|
13
|
+
|
|
14
|
+
- **core:** SmartArt composite shape dispatch, per-role font fit and hang ratio (by @ChristopherVR) ([b2d985f](https://github.com/ChristopherVR/pptx-viewer/commit/b2d985f0d5c593c4cca231655d02fed828b548ce))
|
|
15
|
+
- **shared:** Route every raster export through the foreignObject tiled pipeline (by @ChristopherVR) ([1ad1993](https://github.com/ChristopherVR/pptx-viewer/commit/1ad19930714668dba87af52e38872d64e7ad4f9d))
|
|
16
|
+
- **shared:** Sample a bar3D picture fill's first pixel on the first paint (by @ChristopherVR) ([8bdb1bc](https://github.com/ChristopherVR/pptx-viewer/commit/8bdb1bc995e92390f6e622f146e9c5abd623d047))
|
|
17
|
+
- **core:** SmartArt repeated-template slots, table hierarchies and cascades (by @ChristopherVR) ([725033d](https://github.com/ChristopherVR/pptx-viewer/commit/725033db29d984d1d9078224a68cb0ccf590fbba))
|
|
18
|
+
|
|
19
|
+
### Bug Fixes
|
|
20
|
+
|
|
21
|
+
- **core:** Preserve fractional table row heights ([#224](https://github.com/ChristopherVR/pptx-viewer/issues/224)) (by @Sudhansh6) ([aaa621f](https://github.com/ChristopherVR/pptx-viewer/commit/aaa621f9f3838a84a13b2422c1888454e592a18f))
|
|
22
|
+
- **angular,core:** Land the transition-split component and media-duration wiring (by @ChristopherVR) ([3d0c8c7](https://github.com/ChristopherVR/pptx-viewer/commit/3d0c8c7b6a68c94f6f9a1258342dd43b6f524503))
|
|
23
|
+
|
|
24
|
+
### Testing
|
|
25
|
+
|
|
26
|
+
- **react,svelte,angular,shared:** Update assertions to the camera-matrix and webfont contracts (by @ChristopherVR) ([f2edef8](https://github.com/ChristopherVR/pptx-viewer/commit/f2edef846a5ffb607fb15985512a1142bb47e570))
|
|
27
|
+
|
|
10
28
|
## [3.12.0](https://github.com/ChristopherVR/pptx-viewer/releases/tag/pptx-vue-viewer@3.12.0) - 2026-09-10
|
|
11
29
|
|
|
12
30
|
### Features
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { S as t, T as a, _ as s, b as r, d as l, f as o, g as n, h as i, m as p, o as d, p as c, u, v as m, x, y as g } from "./viewer-
|
|
3
|
-
import { Fragment as f, Suspense as b, computed as v, createBlock as h, createCommentVNode as y, createElementBlock as k, createElementVNode as w, createTextVNode as C, createVNode as P, defineComponent as S, nextTick as T, normalizeClass as I, normalizeStyle as
|
|
1
|
+
import { xn as e } from "./useViewerSettingsDialog-D6iiGRNQ.js";
|
|
2
|
+
import { S as t, T as a, _ as s, b as r, d as l, f as o, g as n, h as i, m as p, o as d, p as c, u, v as m, x, y as g } from "./viewer-DGArk_38.js";
|
|
3
|
+
import { Fragment as f, Suspense as b, computed as v, createBlock as h, createCommentVNode as y, createElementBlock as k, createElementVNode as w, createTextVNode as C, createVNode as P, defineComponent as S, nextTick as T, normalizeClass as I, normalizeStyle as j, onBeforeUnmount as _, onMounted as A, openBlock as E, ref as M, renderList as F, resolveDynamicComponent as B, shallowRef as D, toDisplayString as N, unref as L, vModelText as R, watch as H, withAsyncContext as W, withCtx as z, withDirectives as V } from "vue";
|
|
4
4
|
import { Bot as K, ChartColumn as O, Check as U, Crosshair as $, Eye as q, Film as G, GitMerge as J, History as Q, LayoutTemplate as X, LoaderCircle as Y, MessageSquare as Z, MessageSquarePlus as ee, Move as te, Navigation as ae, Palette as se, Pin as re, PinOff as le, Plus as oe, Search as ne, Send as ie, Shapes as pe, Sparkles as de, Square as ce, StickyNote as ue, Table as me, Trash2 as xe, TriangleAlert as ge, Type as fe, User as be, Wrench as ve, X as he } from "lucide-vue-next";
|
|
5
5
|
import { getToolOrDynamicToolName as ye, isDynamicToolUIPart as ke, isToolUIPart as we } from "ai";
|
|
6
6
|
var Ce = /* @__PURE__ */ new Set([
|
|
@@ -74,11 +74,11 @@ function Pe(e, t, a, s = {}) {
|
|
|
74
74
|
}
|
|
75
75
|
};
|
|
76
76
|
}
|
|
77
|
-
var Se = { class: "border-t border-border p-2" }, Te = { class: "flex items-end gap-1.5 rounded-md border border-input bg-background px-2 py-1.5 focus-within:border-ring" }, Ie = ["placeholder", "aria-label"],
|
|
77
|
+
var Se = { class: "border-t border-border p-2" }, Te = { class: "flex items-end gap-1.5 rounded-md border border-input bg-background px-2 py-1.5 focus-within:border-ring" }, Ie = ["placeholder", "aria-label"], je = ["title", "aria-label"], _e = [
|
|
78
78
|
"disabled",
|
|
79
79
|
"title",
|
|
80
80
|
"aria-label"
|
|
81
|
-
],
|
|
81
|
+
], Ae = S({
|
|
82
82
|
__name: "AiComposer",
|
|
83
83
|
props: {
|
|
84
84
|
isStreaming: { type: Boolean },
|
|
@@ -97,7 +97,7 @@ var Se = { class: "border-t border-border p-2" }, Te = { class: "flex items-end
|
|
|
97
97
|
}
|
|
98
98
|
return H(() => r.prefillNonce, (e) => {
|
|
99
99
|
void 0 !== e && 0 !== e && (r.prefillText && (n.value = r.prefillText), T(() => i.value?.focus()));
|
|
100
|
-
}), (e, t) => (
|
|
100
|
+
}), (e, t) => (E(), k("div", Se, [w("div", Te, [V(w("textarea", {
|
|
101
101
|
ref_key: "textareaRef",
|
|
102
102
|
ref: i,
|
|
103
103
|
"onUpdate:modelValue": t[0] || (t[0] = (e) => n.value = e),
|
|
@@ -106,14 +106,14 @@ var Se = { class: "border-t border-border p-2" }, Te = { class: "flex items-end
|
|
|
106
106
|
"aria-label": L(o)("pptx.ai.placeholder"),
|
|
107
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
108
|
onKeydown: c
|
|
109
|
-
}, null, 40, Ie), [[R, n.value]]), r.isStreaming ? (
|
|
109
|
+
}, null, 40, Ie), [[R, n.value]]), r.isStreaming ? (E(), k("button", {
|
|
110
110
|
key: 0,
|
|
111
111
|
type: "button",
|
|
112
112
|
title: L(o)("pptx.ai.stop"),
|
|
113
113
|
"aria-label": L(o)("pptx.ai.stop"),
|
|
114
114
|
class: "shrink-0 rounded-sm p-1.5 text-muted-foreground transition-colors hover:bg-accent",
|
|
115
115
|
onClick: t[1] || (t[1] = (e) => l("stop"))
|
|
116
|
-
}, [P(L(ce), { class: "w-4 h-4" })], 8,
|
|
116
|
+
}, [P(L(ce), { class: "w-4 h-4" })], 8, je)) : (E(), k("button", {
|
|
117
117
|
key: 1,
|
|
118
118
|
type: "button",
|
|
119
119
|
disabled: !p.value,
|
|
@@ -121,9 +121,9 @@ var Se = { class: "border-t border-border p-2" }, Te = { class: "flex items-end
|
|
|
121
121
|
"aria-label": L(o)("pptx.ai.send"),
|
|
122
122
|
class: I(L(a)("shrink-0 rounded-sm p-1.5 transition-colors", p.value ? "bg-primary text-primary-foreground hover:bg-primary/90" : "text-muted-foreground/50")),
|
|
123
123
|
onClick: d
|
|
124
|
-
}, [P(L(ie), { class: "w-4 h-4" })], 10,
|
|
124
|
+
}, [P(L(ie), { class: "w-4 h-4" })], 10, _e))])]));
|
|
125
125
|
}
|
|
126
|
-
}),
|
|
126
|
+
}), Ee = { class: "border-b border-border bg-secondary/30" }, Me = { class: "flex flex-wrap items-center gap-1 px-2.5 py-1.5" }, Fe = { class: "text-[10px] font-semibold uppercase tracking-wide text-muted-foreground" }, Be = ["title"], De = { class: "truncate" }, Ne = {
|
|
127
127
|
key: 0,
|
|
128
128
|
class: "rounded-full bg-primary/15 px-1.5 py-0.5 text-[10px] font-medium text-primary"
|
|
129
129
|
}, Le = { class: "ml-auto flex items-center gap-0.5" }, Re = [
|
|
@@ -156,16 +156,16 @@ var Se = { class: "border-t border-border p-2" }, Te = { class: "flex items-end
|
|
|
156
156
|
const e = d.value;
|
|
157
157
|
e && o("send-directive", m(e.slideIndex, e.elementIdA, e.elementIdB));
|
|
158
158
|
}
|
|
159
|
-
return (e, s) => (
|
|
159
|
+
return (e, s) => (E(), k("div", Ee, [w("div", Me, [
|
|
160
160
|
w("span", Fe, N(L(n)("pptx.ai.focusScope")), 1),
|
|
161
|
-
(
|
|
161
|
+
(E(!0), k(f, null, F(i.value, (e) => (E(), k("span", {
|
|
162
162
|
key: e.key,
|
|
163
163
|
class: I(L(a)("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
164
|
title: e.title
|
|
165
165
|
}, [w("span", De, N(e.label), 1)], 10, Be))), 128)),
|
|
166
|
-
t.isPinned ? (
|
|
166
|
+
t.isPinned ? (E(), k("span", Ne, N(L(n)("pptx.ai.pinnedFocus")), 1)) : y("", !0),
|
|
167
167
|
w("div", Le, [
|
|
168
|
-
d.value ? (
|
|
168
|
+
d.value ? (E(), k("button", {
|
|
169
169
|
key: 0,
|
|
170
170
|
type: "button",
|
|
171
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",
|
|
@@ -176,32 +176,32 @@ var Se = { class: "border-t border-border p-2" }, Te = { class: "flex items-end
|
|
|
176
176
|
title: L(n)("pptx.ai.pickElement"),
|
|
177
177
|
"aria-label": L(n)("pptx.ai.pickAria"),
|
|
178
178
|
"aria-pressed": t.pickMode,
|
|
179
|
-
class: I(L(a)("rounded-sm p-1", t.pickMode ? "bg-primary text-primary-foreground" : "text-muted-foreground hover:bg-accent")),
|
|
179
|
+
class: I(L(a)("rounded-sm p-1 flex items-center justify-center max-md:min-w-[44px]! max-md:min-h-[44px]!", t.pickMode ? "bg-primary text-primary-foreground" : "text-muted-foreground hover:bg-accent")),
|
|
180
180
|
onClick: s[0] || (s[0] = (e) => t.pickMode ? o("stop-pick") : o("start-pick"))
|
|
181
181
|
}, [P(L($), { class: "w-3.5 h-3.5" })], 10, Re),
|
|
182
|
-
t.hasPicks ? (
|
|
182
|
+
t.hasPicks ? (E(), k("button", {
|
|
183
183
|
key: 1,
|
|
184
184
|
type: "button",
|
|
185
185
|
title: L(n)("pptx.ai.pickClear"),
|
|
186
186
|
"aria-label": L(n)("pptx.ai.pickClear"),
|
|
187
|
-
class: "rounded-sm p-1 text-muted-foreground hover:bg-accent",
|
|
187
|
+
class: "rounded-sm p-1 text-muted-foreground hover:bg-accent flex items-center justify-center max-md:min-w-[44px]! max-md:min-h-[44px]!",
|
|
188
188
|
onClick: s[1] || (s[1] = (e) => o("clear-picks"))
|
|
189
|
-
}, [P(L(he), { class: "w-3.5 h-3.5" })], 8, He)) : (
|
|
189
|
+
}, [P(L(he), { class: "w-3.5 h-3.5" })], 8, He)) : (E(), k("button", {
|
|
190
190
|
key: 2,
|
|
191
191
|
type: "button",
|
|
192
192
|
title: t.isPinned ? L(n)("pptx.ai.clearFocus") : L(n)("pptx.ai.pinFocus"),
|
|
193
193
|
"aria-label": t.isPinned ? L(n)("pptx.ai.clearFocus") : L(n)("pptx.ai.pinFocus"),
|
|
194
|
-
class: "rounded-sm p-1 text-muted-foreground hover:bg-accent",
|
|
194
|
+
class: "rounded-sm p-1 text-muted-foreground hover:bg-accent flex items-center justify-center max-md:min-w-[44px]! max-md:min-h-[44px]!",
|
|
195
195
|
onClick: s[2] || (s[2] = (e) => t.isPinned ? o("clear-pin") : o("pin"))
|
|
196
|
-
}, [t.isPinned ? (
|
|
196
|
+
}, [t.isPinned ? (E(), h(L(le), {
|
|
197
197
|
key: 0,
|
|
198
198
|
class: "w-3.5 h-3.5"
|
|
199
|
-
})) : (
|
|
199
|
+
})) : (E(), h(L(re), {
|
|
200
200
|
key: 1,
|
|
201
201
|
class: "w-3.5 h-3.5"
|
|
202
202
|
}))], 8, We))
|
|
203
203
|
])
|
|
204
|
-
]), t.pickMode ? (
|
|
204
|
+
]), t.pickMode ? (E(), k("div", ze, [
|
|
205
205
|
P(L($), { class: "w-3.5 h-3.5 shrink-0 animate-pulse text-primary" }),
|
|
206
206
|
w("span", Ve, N(L(n)("pptx.ai.pickElementHint")), 1),
|
|
207
207
|
w("button", {
|
|
@@ -238,7 +238,7 @@ var Se = { class: "border-t border-border p-2" }, Te = { class: "flex items-end
|
|
|
238
238
|
function n(e) {
|
|
239
239
|
o.value && !o.value.contains(e.target) && r("close");
|
|
240
240
|
}
|
|
241
|
-
return
|
|
241
|
+
return A(() => document.addEventListener("mousedown", n)), _(() => document.removeEventListener("mousedown", n)), (e, t) => (E(), k("div", {
|
|
242
242
|
ref_key: "root",
|
|
243
243
|
ref: o,
|
|
244
244
|
class: "absolute right-2 top-10 z-40 w-64 rounded-md border border-border bg-popover shadow-xl"
|
|
@@ -250,7 +250,7 @@ var Se = { class: "border-t border-border p-2" }, Te = { class: "flex items-end
|
|
|
250
250
|
r("new-chat"), r("close");
|
|
251
251
|
})
|
|
252
252
|
}, [P(L(oe), { class: "w-3 h-3" }), C(" " + N(L(l)("pptx.ai.newChat")), 1)])]),
|
|
253
|
-
0 === s.chats.length ? (
|
|
253
|
+
0 === s.chats.length ? (E(), k("p", $e, N(L(l)("pptx.ai.historyEmpty")), 1)) : (E(), k("ul", qe, [(E(!0), k(f, null, F(s.chats, (e) => (E(), k("li", {
|
|
254
254
|
key: e.id,
|
|
255
255
|
class: "group flex items-center gap-1 px-1"
|
|
256
256
|
}, [w("button", {
|
|
@@ -295,23 +295,23 @@ var Se = { class: "border-t border-border p-2" }, Te = { class: "flex items-end
|
|
|
295
295
|
notes: ue,
|
|
296
296
|
tool: ve
|
|
297
297
|
}, n = v(() => "output-error" === r.part.state), i = v(() => "output-available" === r.part.state), p = v(() => !n.value && !i.value), d = v(() => c(r.part.toolName, r.part.input, p.value ? "present" : "past")), u = v(() => o[d.value.icon] ?? ve), m = v(() => g(r.part.input)), x = v(() => n.value ? l("pptx.ai.toolFailed") : i.value ? l("pptx.ai.toolDone") : l("pptx.ai.toolRunning"));
|
|
298
|
-
return (e, s) => (
|
|
298
|
+
return (e, s) => (E(), k("div", tt, [
|
|
299
299
|
w("div", at, [
|
|
300
|
-
(
|
|
300
|
+
(E(), h(B(u.value), { class: I(L(a)("w-3.5 h-3.5 shrink-0", n.value ? "text-destructive" : "text-muted-foreground")) }, null, 8, ["class"])),
|
|
301
301
|
w("span", { class: I(L(a)("truncate", n.value ? "text-destructive" : "text-foreground")) }, N(d.value.label), 3),
|
|
302
|
-
w("span", { class: I(L(a)("ml-auto inline-flex items-center gap-1 rounded-sm px-1.5 py-0.5 text-[10px]", n.value ? "bg-destructive/15 text-destructive" : i.value ? "bg-primary/10 text-primary" : "bg-muted text-muted-foreground")) }, [p.value ? (
|
|
302
|
+
w("span", { class: I(L(a)("ml-auto inline-flex items-center gap-1 rounded-sm px-1.5 py-0.5 text-[10px]", n.value ? "bg-destructive/15 text-destructive" : i.value ? "bg-primary/10 text-primary" : "bg-muted text-muted-foreground")) }, [p.value ? (E(), h(L(Y), {
|
|
303
303
|
key: 0,
|
|
304
304
|
class: "w-3 h-3 animate-spin"
|
|
305
|
-
})) : i.value ? (
|
|
305
|
+
})) : i.value ? (E(), h(L(U), {
|
|
306
306
|
key: 1,
|
|
307
307
|
class: "w-3 h-3"
|
|
308
|
-
})) : (
|
|
308
|
+
})) : (E(), h(L(ge), {
|
|
309
309
|
key: 2,
|
|
310
310
|
class: "w-3 h-3"
|
|
311
311
|
})), C(" " + N(x.value), 1)], 2)
|
|
312
312
|
]),
|
|
313
|
-
n.value && r.part.errorText ? (
|
|
314
|
-
m.value ? (
|
|
313
|
+
n.value && r.part.errorText ? (E(), k("div", st, N(r.part.errorText), 1)) : y("", !0),
|
|
314
|
+
m.value ? (E(), k("details", rt, [w("summary", lt, N(L(l)("pptx.ai.toolDetails")), 1), w("div", ot, N(L(t)(r.part.toolName)) + ": " + N(m.value), 1)])) : y("", !0)
|
|
315
315
|
]));
|
|
316
316
|
}
|
|
317
317
|
}), it = {
|
|
@@ -339,25 +339,25 @@ var Se = { class: "border-t border-border p-2" }, Te = { class: "flex items-end
|
|
|
339
339
|
const s = t, { t: l } = e(), o = M(null);
|
|
340
340
|
return H(() => [s.messages, s.isStreaming], () => {
|
|
341
341
|
T(() => o.value?.scrollIntoView({ block: "end" }));
|
|
342
|
-
}, { deep: !0 }), (e, t) => 0 === s.messages.length ? (
|
|
342
|
+
}, { deep: !0 }), (e, t) => 0 === s.messages.length ? (E(), k("div", it, [
|
|
343
343
|
P(L(de), { class: "w-7 h-7 text-primary/70" }),
|
|
344
344
|
w("p", pt, N(L(l)("pptx.ai.emptyTitle")), 1),
|
|
345
345
|
w("p", dt, N(L(l)("pptx.ai.emptyHint")), 1)
|
|
346
|
-
])) : (
|
|
347
|
-
(
|
|
346
|
+
])) : (E(), k("div", ct, [
|
|
347
|
+
(E(!0), k(f, null, F(s.messages, (e) => (E(), k(f, { key: e.id }, ["user" === e.role || L(r)(e).length > 0 ? (E(), k("div", ut, [w("div", {
|
|
348
348
|
class: I(L(a)("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
349
|
"aria-label": "user" === e.role ? L(l)("pptx.ai.you") : L(l)("pptx.ai.assistant")
|
|
350
|
-
}, ["user" === e.role ? (
|
|
350
|
+
}, ["user" === e.role ? (E(), h(L(be), {
|
|
351
351
|
key: 0,
|
|
352
352
|
class: "w-3.5 h-3.5"
|
|
353
|
-
})) : (
|
|
353
|
+
})) : (E(), h(L(K), {
|
|
354
354
|
key: 1,
|
|
355
355
|
class: "w-3.5 h-3.5"
|
|
356
|
-
}))], 10, mt), w("div", xt, [(
|
|
356
|
+
}))], 10, mt), w("div", xt, [(E(!0), k(f, null, F(L(r)(e), (e, t) => (E(), k(f, { key: "tool" === e.kind && e.toolCallId || t }, ["text" === e.kind ? (E(), k("p", gt, N(e.text), 1)) : (E(), h(nt, {
|
|
357
357
|
key: 1,
|
|
358
358
|
part: e
|
|
359
359
|
}, null, 8, ["part"]))], 64))), 128))])])) : y("", !0)], 64))), 128)),
|
|
360
|
-
s.isStreaming ? (
|
|
360
|
+
s.isStreaming ? (E(), k("div", ft, [t[0] || (t[0] = w("span", { class: "inline-flex gap-1" }, [
|
|
361
361
|
w("span", { class: "h-1.5 w-1.5 animate-bounce rounded-full bg-muted-foreground [animation-delay:-0.2s]" }),
|
|
362
362
|
w("span", { class: "h-1.5 w-1.5 animate-bounce rounded-full bg-muted-foreground [animation-delay:-0.1s]" }),
|
|
363
363
|
w("span", { class: "h-1.5 w-1.5 animate-bounce rounded-full bg-muted-foreground" })
|
|
@@ -377,10 +377,10 @@ var Se = { class: "border-t border-border p-2" }, Te = { class: "flex items-end
|
|
|
377
377
|
emits: ["accept", "reject"],
|
|
378
378
|
setup(t, { emit: a }) {
|
|
379
379
|
const s = t, r = a, { t: l } = e(), o = v(() => s.proposal.summary.map(i));
|
|
380
|
-
return (e, t) => (
|
|
380
|
+
return (e, t) => (E(), k("div", vt, [
|
|
381
381
|
w("div", ht, N(L(l)("pptx.ai.proposedChange")), 1),
|
|
382
382
|
w("div", yt, N(s.proposal.label), 1),
|
|
383
|
-
o.value.length > 0 ? (
|
|
383
|
+
o.value.length > 0 ? (E(), k("ul", kt, [(E(!0), k(f, null, F(o.value, (e, t) => (E(), k("li", {
|
|
384
384
|
key: t,
|
|
385
385
|
class: "break-words"
|
|
386
386
|
}, N(e), 1))), 128))])) : y("", !0),
|
|
@@ -395,14 +395,14 @@ var Se = { class: "border-t border-border p-2" }, Te = { class: "flex items-end
|
|
|
395
395
|
}, [P(L(he), { class: "w-3.5 h-3.5" }), C(" " + N(L(l)("pptx.ai.reject")), 1)])])
|
|
396
396
|
]));
|
|
397
397
|
}
|
|
398
|
-
}), Pt = { class: "relative flex min-h-0 flex-1 flex-col" }, St = { class: "flex items-center gap-1 border-b border-border px-2 py-1" }, Tt = { class: "ml-auto flex items-center gap-0.5" }, It = ["title", "aria-label"],
|
|
398
|
+
}), Pt = { class: "relative flex min-h-0 flex-1 flex-col" }, St = { class: "flex items-center gap-1 border-b border-border px-2 py-1" }, Tt = { class: "ml-auto flex items-center gap-0.5" }, It = ["title", "aria-label"], jt = [
|
|
399
399
|
"title",
|
|
400
400
|
"aria-label",
|
|
401
401
|
"disabled"
|
|
402
|
-
],
|
|
402
|
+
], _t = {
|
|
403
403
|
key: 1,
|
|
404
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
|
-
},
|
|
405
|
+
}, At = { class: "min-w-0 flex-1" }, Et = { class: "font-medium" }, Mt = { class: "max-h-24 overflow-y-auto break-words text-[11px] opacity-80" }, Ft = {
|
|
406
406
|
key: 2,
|
|
407
407
|
class: "max-h-[38%] space-y-2 overflow-y-auto border-t border-border bg-background px-3 py-2"
|
|
408
408
|
}, Bt = { class: "flex items-center justify-between" }, Dt = { class: "text-[11px] font-semibold uppercase tracking-wide text-muted-foreground" }, Nt = S({
|
|
@@ -430,7 +430,7 @@ var Se = { class: "border-t border-border p-2" }, Te = { class: "flex items-end
|
|
|
430
430
|
}), s = M(a.activeChatId()), r = () => {
|
|
431
431
|
s.value = a.activeChatId();
|
|
432
432
|
};
|
|
433
|
-
return H(e.messages, () => a.notifyMessagesChanged(), { deep: !0 }),
|
|
433
|
+
return H(e.messages, () => a.notifyMessagesChanged(), { deep: !0 }), _(() => a.dispose()), {
|
|
434
434
|
chats: t,
|
|
435
435
|
activeChatId: s,
|
|
436
436
|
refresh: () => a.refresh(),
|
|
@@ -452,10 +452,10 @@ var Se = { class: "border-t border-border p-2" }, Te = { class: "flex items-end
|
|
|
452
452
|
i.value = e;
|
|
453
453
|
},
|
|
454
454
|
untitledLabel: l("pptx.ai.untitledChat")
|
|
455
|
-
}),
|
|
455
|
+
}), j = M(!1), A = r.session.changeAnimator.subscribe((e) => {
|
|
456
456
|
e && r.bridge.goToSlide(e.slideIndex), r.aiPanel.showChangeBatch(e);
|
|
457
457
|
});
|
|
458
|
-
|
|
458
|
+
_(() => A());
|
|
459
459
|
const B = v(() => r.aiPanel.pickTargets.value.length > 0), D = v(() => B.value ? r.aiPanel.pickTargets.value : r.aiPanel.pinnedFocus.value ?? r.aiPanel.liveFocusTargets.value), R = v(() => !B.value && null !== r.aiPanel.pinnedFocus.value);
|
|
460
460
|
function z(e) {
|
|
461
461
|
r.aiPanel.flashToolTarget(null), b(e);
|
|
@@ -463,26 +463,26 @@ var Se = { class: "border-t border-border p-2" }, Te = { class: "flex items-end
|
|
|
463
463
|
function V() {
|
|
464
464
|
r.aiPanel.flashToolTarget(null), T();
|
|
465
465
|
}
|
|
466
|
-
return (e, t) => (
|
|
466
|
+
return (e, t) => (E(), k("div", Pt, [
|
|
467
467
|
w("div", St, [w("button", {
|
|
468
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) =>
|
|
469
|
+
class: "inline-flex items-center gap-1 rounded-sm px-1.5 py-1 text-[12px] text-muted-foreground hover:bg-accent max-md:min-h-[44px]!",
|
|
470
|
+
onClick: t[0] || (t[0] = (e) => j.value = !j.value)
|
|
471
471
|
}, [P(L(Q), { class: "w-3.5 h-3.5" }), C(" " + N(L(l)("pptx.ai.chats")), 1)]), w("div", Tt, [w("button", {
|
|
472
472
|
type: "button",
|
|
473
473
|
title: L(l)("pptx.ai.newChat"),
|
|
474
474
|
"aria-label": L(l)("pptx.ai.newChat"),
|
|
475
|
-
class: "rounded-sm p-1 text-muted-foreground hover:bg-accent",
|
|
475
|
+
class: "rounded-sm p-1 text-muted-foreground hover:bg-accent flex items-center justify-center max-md:min-w-[44px]! max-md:min-h-[44px]!",
|
|
476
476
|
onClick: t[1] || (t[1] = (e) => L(I).newChat())
|
|
477
477
|
}, [P(L(ee), { class: "w-3.5 h-3.5" })], 8, It), w("button", {
|
|
478
478
|
type: "button",
|
|
479
479
|
title: L(l)("pptx.ai.clearChat"),
|
|
480
480
|
"aria-label": L(l)("pptx.ai.clearChat"),
|
|
481
481
|
disabled: 0 === L(i).length,
|
|
482
|
-
class: "rounded-sm p-1 text-muted-foreground hover:bg-accent disabled:opacity-40",
|
|
482
|
+
class: "rounded-sm p-1 text-muted-foreground hover:bg-accent disabled:opacity-40 flex items-center justify-center max-md:min-w-[44px]! max-md:min-h-[44px]!",
|
|
483
483
|
onClick: t[2] || (t[2] = (e) => L(I).clearCurrent())
|
|
484
|
-
}, [P(L(xe), { class: "w-3.5 h-3.5" })], 8,
|
|
485
|
-
|
|
484
|
+
}, [P(L(xe), { class: "w-3.5 h-3.5" })], 8, jt)])]),
|
|
485
|
+
j.value ? (E(), h(et, {
|
|
486
486
|
key: 0,
|
|
487
487
|
chats: L(I).chats.value,
|
|
488
488
|
"active-chat-id": L(I).activeChatId.value,
|
|
@@ -493,7 +493,7 @@ var Se = { class: "border-t border-border p-2" }, Te = { class: "flex items-end
|
|
|
493
493
|
L(I).deleteChat(e);
|
|
494
494
|
}),
|
|
495
495
|
onNewChat: t[5] || (t[5] = (e) => L(I).newChat()),
|
|
496
|
-
onClose: t[6] || (t[6] = (e) =>
|
|
496
|
+
onClose: t[6] || (t[6] = (e) => j.value = !1)
|
|
497
497
|
}, null, 8, ["chats", "active-chat-id"])) : y("", !0),
|
|
498
498
|
P(Ke, {
|
|
499
499
|
targets: D.value,
|
|
@@ -524,27 +524,27 @@ var Se = { class: "border-t border-border p-2" }, Te = { class: "flex items-end
|
|
|
524
524
|
messages: L(i),
|
|
525
525
|
"is-streaming": L(d)
|
|
526
526
|
}, null, 8, ["messages", "is-streaming"]),
|
|
527
|
-
L(p) ? (
|
|
527
|
+
L(p) ? (E(), k("div", _t, [
|
|
528
528
|
P(L(ge), { class: "mt-0.5 w-3.5 h-3.5 shrink-0" }),
|
|
529
|
-
w("div",
|
|
529
|
+
w("div", At, [w("div", Et, N(L(l)("pptx.ai.errorPrefix")), 1), w("div", Mt, N(L(p).message), 1)]),
|
|
530
530
|
w("button", {
|
|
531
531
|
type: "button",
|
|
532
532
|
class: "shrink-0 rounded-sm px-1.5 py-0.5 text-[11px] underline-offset-2 hover:underline",
|
|
533
533
|
onClick: t[7] || (t[7] = (...e) => L(g) && L(g)(...e))
|
|
534
534
|
}, N(L(l)("pptx.ai.retry")), 1)
|
|
535
535
|
])) : y("", !0),
|
|
536
|
-
L(c).length > 0 ? (
|
|
536
|
+
L(c).length > 0 ? (E(), k("div", Ft, [w("div", Bt, [w("span", Dt, N(L(l)("pptx.ai.pendingChanges", { count: L(c).length })), 1), L(c).length > 1 ? (E(), k("button", {
|
|
537
537
|
key: 0,
|
|
538
538
|
type: "button",
|
|
539
539
|
class: "rounded-sm bg-primary/90 px-2 py-0.5 text-[11px] font-medium text-primary-foreground hover:bg-primary",
|
|
540
540
|
onClick: V
|
|
541
|
-
}, N(L(l)("pptx.ai.acceptAll")), 1)) : y("", !0)]), (
|
|
541
|
+
}, N(L(l)("pptx.ai.acceptAll")), 1)) : y("", !0)]), (E(!0), k(f, null, F(L(c), (e) => (E(), h(Ct, {
|
|
542
542
|
key: e.id,
|
|
543
543
|
proposal: e,
|
|
544
544
|
onAccept: z,
|
|
545
545
|
onReject: L(S)
|
|
546
546
|
}, null, 8, ["proposal", "onReject"]))), 128))])) : y("", !0),
|
|
547
|
-
P(
|
|
547
|
+
P(Ae, {
|
|
548
548
|
"is-streaming": L(d),
|
|
549
549
|
"prefill-text": r.aiPanel.prefill.value.text,
|
|
550
550
|
"prefill-nonce": r.aiPanel.prefill.value.nonce,
|
|
@@ -602,10 +602,10 @@ var Se = { class: "border-t border-border p-2" }, Te = { class: "flex items-end
|
|
|
602
602
|
selectedElementIds: M([]),
|
|
603
603
|
selectedElement: () => null
|
|
604
604
|
}), x = v(() => s.aiPanel ?? m);
|
|
605
|
-
return (e, t) => (
|
|
605
|
+
return (e, t) => (E(), k("div", {
|
|
606
606
|
"data-pptx-ai-panel": "",
|
|
607
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:
|
|
608
|
+
style: j(u.value)
|
|
609
609
|
}, [w("div", Lt, [
|
|
610
610
|
P(L(de), { class: "w-4 h-4 text-primary" }),
|
|
611
611
|
w("span", Rt, N(L(o)("pptx.ai.title")), 1),
|
|
@@ -613,14 +613,14 @@ var Se = { class: "border-t border-border p-2" }, Te = { class: "flex items-end
|
|
|
613
613
|
type: "button",
|
|
614
614
|
title: L(o)("pptx.ai.close"),
|
|
615
615
|
"aria-label": L(o)("pptx.ai.close"),
|
|
616
|
-
class: "ml-auto rounded-sm p-1 text-muted-foreground transition-colors hover:bg-accent",
|
|
616
|
+
class: "ml-auto flex items-center justify-center rounded-sm p-1 text-muted-foreground transition-colors hover:bg-accent max-md:min-w-[44px]! max-md:min-h-[44px]!",
|
|
617
617
|
onClick: t[0] || (t[0] = (e) => r("close"))
|
|
618
618
|
}, [P(L(he), { class: "w-4 h-4" })], 8, Ht)
|
|
619
|
-
]), "checking" === L(i) ? (
|
|
619
|
+
]), "checking" === L(i) ? (E(), k("div", Wt, [P(L(Y), { class: "w-5 h-5 animate-spin" })])) : "unavailable" === L(i) || "error" === L(i) ? (E(), k("div", zt, [
|
|
620
620
|
P(L(ge), { class: "w-6 h-6 text-muted-foreground" }),
|
|
621
621
|
w("p", Vt, N(L(o)("pptx.ai.unavailableTitle")), 1),
|
|
622
622
|
w("p", Kt, N(L(c)?.message ?? L(o)("pptx.ai.unavailableHint")), 1)
|
|
623
|
-
])) : "ready" === L(i) && L(p) ? (
|
|
623
|
+
])) : "ready" === L(i) && L(p) ? (E(), h(b, { key: 2 }, {
|
|
624
624
|
fallback: z(() => [w("div", Ot, [P(L(Y), { class: "w-5 h-5 animate-spin" })])]),
|
|
625
625
|
default: z(() => [P(Nt, {
|
|
626
626
|
session: L(p),
|
|
Binary file
|
|
Binary file
|