@xpert-ai/chatkit-powerpoint-addin 0.1.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/LICENSE +201 -0
- package/README.md +66 -0
- package/dist/assets/icon-32.png +0 -0
- package/dist/assets/icon-80.png +0 -0
- package/dist/index.d.ts +105 -0
- package/dist/index.js +416 -0
- package/dist/manifest.xml +94 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +226 -0
- package/dist/server/index.js.map +1 -0
- package/dist/taskpane/assets/icon-32.png +0 -0
- package/dist/taskpane/assets/icon-80.png +0 -0
- package/dist/taskpane/assets/taskpane-CT-NNU8F.js +199 -0
- package/dist/taskpane/assets/taskpane-DQ4lBAsH.css +1 -0
- package/dist/taskpane/taskpane.html +14 -0
- package/env.example +9 -0
- package/package.json +69 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,416 @@
|
|
|
1
|
+
var N = (e) => {
|
|
2
|
+
throw TypeError(e);
|
|
3
|
+
};
|
|
4
|
+
var B = (e, t, n) => t.has(e) || N("Cannot " + n);
|
|
5
|
+
var g = (e, t, n) => (B(e, t, "read from private field"), n ? n.call(e) : t.get(e)), O = (e, t, n) => t.has(e) ? N("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(e) : t.set(e, n), P = (e, t, n, i) => (B(e, t, "write to private field"), i ? i.call(e, n) : t.set(e, n), n);
|
|
6
|
+
const z = [
|
|
7
|
+
"office_powerpoint_snapshot",
|
|
8
|
+
"office_powerpoint_select_slide",
|
|
9
|
+
"office_powerpoint_add_slide",
|
|
10
|
+
"office_powerpoint_delete_slide",
|
|
11
|
+
"office_powerpoint_add_text_box",
|
|
12
|
+
"office_powerpoint_add_shape",
|
|
13
|
+
"office_powerpoint_update_shape",
|
|
14
|
+
"office_powerpoint_delete_shape",
|
|
15
|
+
"office_powerpoint_insert_image"
|
|
16
|
+
], j = new Set(
|
|
17
|
+
z
|
|
18
|
+
);
|
|
19
|
+
function G(e) {
|
|
20
|
+
return j.has(e);
|
|
21
|
+
}
|
|
22
|
+
const H = 80;
|
|
23
|
+
function f(e) {
|
|
24
|
+
return typeof e == "string" && e.trim() ? e.trim() : void 0;
|
|
25
|
+
}
|
|
26
|
+
function R(e, t) {
|
|
27
|
+
const n = f(e);
|
|
28
|
+
if (!n)
|
|
29
|
+
throw new Error(`${t} must be a non-empty string.`);
|
|
30
|
+
return n;
|
|
31
|
+
}
|
|
32
|
+
function l(e) {
|
|
33
|
+
return typeof e == "number" && Number.isFinite(e) ? e : void 0;
|
|
34
|
+
}
|
|
35
|
+
function x(e, t) {
|
|
36
|
+
const n = l(e);
|
|
37
|
+
if (n === void 0)
|
|
38
|
+
throw new Error(`${t} must be a finite number.`);
|
|
39
|
+
return n;
|
|
40
|
+
}
|
|
41
|
+
function m(e) {
|
|
42
|
+
if (!(typeof e != "number" || !Number.isInteger(e) || e <= 0))
|
|
43
|
+
return e;
|
|
44
|
+
}
|
|
45
|
+
function F(e, t) {
|
|
46
|
+
const n = m(e);
|
|
47
|
+
if (n === void 0)
|
|
48
|
+
throw new Error(`${t} must be a positive integer.`);
|
|
49
|
+
return n;
|
|
50
|
+
}
|
|
51
|
+
function v(e, t) {
|
|
52
|
+
if (e !== !0)
|
|
53
|
+
throw new Error(`${t} requires confirm: true.`);
|
|
54
|
+
}
|
|
55
|
+
function U(e) {
|
|
56
|
+
return e - 1;
|
|
57
|
+
}
|
|
58
|
+
function _(e, t) {
|
|
59
|
+
return m(e.slideIndex) ?? t ?? 1;
|
|
60
|
+
}
|
|
61
|
+
function T(e) {
|
|
62
|
+
return {
|
|
63
|
+
left: l(e.left),
|
|
64
|
+
top: l(e.top),
|
|
65
|
+
width: l(e.width),
|
|
66
|
+
height: l(e.height)
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function b(e) {
|
|
70
|
+
return {
|
|
71
|
+
fillColor: f(e.fillColor),
|
|
72
|
+
lineColor: f(e.lineColor),
|
|
73
|
+
text: f(e.text),
|
|
74
|
+
name: f(e.name)
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
function M(e) {
|
|
78
|
+
return {
|
|
79
|
+
slideIndex: m(e.slideIndex),
|
|
80
|
+
shapeId: f(e.shapeId),
|
|
81
|
+
shapeName: f(e.shapeName)
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
function k(e) {
|
|
85
|
+
return Object.fromEntries(
|
|
86
|
+
Object.entries(e).filter((t) => t[1] !== void 0)
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
function L(e, t) {
|
|
90
|
+
t.left !== void 0 && (e.left = t.left), t.top !== void 0 && (e.top = t.top), t.width !== void 0 && (e.width = t.width), t.height !== void 0 && (e.height = t.height);
|
|
91
|
+
}
|
|
92
|
+
function A(e, t) {
|
|
93
|
+
var i, o;
|
|
94
|
+
const n = e;
|
|
95
|
+
t.name && (e.name = t.name), t.fillColor && ((o = (i = n.fill) == null ? void 0 : i.setSolidColor) == null || o.call(i, t.fillColor)), t.lineColor && n.lineFormat && (n.lineFormat.color = t.lineColor), t.text !== void 0 && (e.textFrame.textRange.text = t.text);
|
|
96
|
+
}
|
|
97
|
+
function y(e) {
|
|
98
|
+
return {
|
|
99
|
+
id: e.id,
|
|
100
|
+
name: e.name,
|
|
101
|
+
type: e.type,
|
|
102
|
+
left: e.left,
|
|
103
|
+
top: e.top,
|
|
104
|
+
width: e.width,
|
|
105
|
+
height: e.height
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
function I(e) {
|
|
109
|
+
e.load("id,name,type,left,top,width,height");
|
|
110
|
+
}
|
|
111
|
+
async function h() {
|
|
112
|
+
var e, t;
|
|
113
|
+
return (t = (e = globalThis.Office) == null ? void 0 : e.context) != null && t.document ? new Promise((n) => {
|
|
114
|
+
Office.context.document.getSelectedDataAsync(
|
|
115
|
+
Office.CoercionType.SlideRange,
|
|
116
|
+
(i) => {
|
|
117
|
+
if (i.status !== Office.AsyncResultStatus.Succeeded) {
|
|
118
|
+
n([]);
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
const o = i.value;
|
|
122
|
+
n(Array.isArray(o.slides) ? o.slides : []);
|
|
123
|
+
}
|
|
124
|
+
);
|
|
125
|
+
}) : [];
|
|
126
|
+
}
|
|
127
|
+
async function D(e) {
|
|
128
|
+
var t, n;
|
|
129
|
+
if (!((n = (t = globalThis.Office) == null ? void 0 : t.context) != null && n.document))
|
|
130
|
+
throw new Error("Office.context.document is unavailable.");
|
|
131
|
+
await new Promise((i, o) => {
|
|
132
|
+
Office.context.document.goToByIdAsync(
|
|
133
|
+
e,
|
|
134
|
+
Office.GoToType.Index,
|
|
135
|
+
{ selectionMode: Office.SelectionMode.None },
|
|
136
|
+
(r) => {
|
|
137
|
+
var s;
|
|
138
|
+
r.status === Office.AsyncResultStatus.Succeeded ? i() : o(new Error(((s = r.error) == null ? void 0 : s.message) || "Failed to select slide."));
|
|
139
|
+
}
|
|
140
|
+
);
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
async function W(e, t) {
|
|
144
|
+
var n, i;
|
|
145
|
+
if (!((i = (n = globalThis.Office) == null ? void 0 : n.context) != null && i.document))
|
|
146
|
+
throw new Error("Office.context.document is unavailable.");
|
|
147
|
+
await new Promise((o, r) => {
|
|
148
|
+
Office.context.document.setSelectedDataAsync(e, t, (s) => {
|
|
149
|
+
var d;
|
|
150
|
+
s.status === Office.AsyncResultStatus.Succeeded ? o() : r(new Error(((d = s.error) == null ? void 0 : d.message) || "Failed to insert image."));
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
function J(e) {
|
|
155
|
+
const t = ";base64,", n = e.indexOf(t);
|
|
156
|
+
return n === -1 ? e : e.slice(n + t.length);
|
|
157
|
+
}
|
|
158
|
+
function X() {
|
|
159
|
+
var e, t, n, i;
|
|
160
|
+
return {
|
|
161
|
+
host: (t = (e = globalThis.Office) == null ? void 0 : e.context) == null ? void 0 : t.host,
|
|
162
|
+
platform: (i = (n = globalThis.Office) == null ? void 0 : n.context) == null ? void 0 : i.platform
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
function Z() {
|
|
166
|
+
var t, n;
|
|
167
|
+
const e = (n = (t = globalThis.Office) == null ? void 0 : t.context) == null ? void 0 : n.requirements;
|
|
168
|
+
return {
|
|
169
|
+
powerpointApi: {
|
|
170
|
+
"1.1": !!(e != null && e.isSetSupported("PowerPointApi", "1.1")),
|
|
171
|
+
"1.3": !!(e != null && e.isSetSupported("PowerPointApi", "1.3")),
|
|
172
|
+
"1.4": !!(e != null && e.isSetSupported("PowerPointApi", "1.4")),
|
|
173
|
+
"1.6": !!(e != null && e.isSetSupported("PowerPointApi", "1.6"))
|
|
174
|
+
},
|
|
175
|
+
imageCoercion: {
|
|
176
|
+
"1.1": !!(e != null && e.isSetSupported("ImageCoercion", "1.1"))
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
function C(e) {
|
|
181
|
+
return e.presentation.slides;
|
|
182
|
+
}
|
|
183
|
+
async function w(e, t) {
|
|
184
|
+
return C(e).getItemAt(U(t));
|
|
185
|
+
}
|
|
186
|
+
async function $(e, t) {
|
|
187
|
+
const n = await w(e, t.slideIndex ?? 1);
|
|
188
|
+
if (t.shapeId)
|
|
189
|
+
return n.shapes.getItem(t.shapeId);
|
|
190
|
+
const i = t.shapeName;
|
|
191
|
+
if (!i)
|
|
192
|
+
throw new Error("shapeId or shapeName is required.");
|
|
193
|
+
const o = n.shapes;
|
|
194
|
+
o.load("items/id,items/name"), await e.sync();
|
|
195
|
+
const r = o.items.find((s) => s.name === i);
|
|
196
|
+
if (!r)
|
|
197
|
+
throw new Error(`Shape not found: ${i}`);
|
|
198
|
+
return o.getItem(r.id);
|
|
199
|
+
}
|
|
200
|
+
var S;
|
|
201
|
+
class K {
|
|
202
|
+
constructor(t = {}) {
|
|
203
|
+
O(this, S);
|
|
204
|
+
this.host = "PowerPoint", P(this, S, t.maxSnapshotShapes ?? H);
|
|
205
|
+
}
|
|
206
|
+
supports(t) {
|
|
207
|
+
return G(t);
|
|
208
|
+
}
|
|
209
|
+
async execute(t, n) {
|
|
210
|
+
switch (t) {
|
|
211
|
+
case "office_powerpoint_snapshot":
|
|
212
|
+
return this.snapshot(n);
|
|
213
|
+
case "office_powerpoint_select_slide":
|
|
214
|
+
return this.selectSlide(n);
|
|
215
|
+
case "office_powerpoint_add_slide":
|
|
216
|
+
return this.addSlide(n);
|
|
217
|
+
case "office_powerpoint_delete_slide":
|
|
218
|
+
return this.deleteSlide(n);
|
|
219
|
+
case "office_powerpoint_add_text_box":
|
|
220
|
+
return this.addTextBox(n);
|
|
221
|
+
case "office_powerpoint_add_shape":
|
|
222
|
+
return this.addShape(n);
|
|
223
|
+
case "office_powerpoint_update_shape":
|
|
224
|
+
return this.updateShape(n);
|
|
225
|
+
case "office_powerpoint_delete_shape":
|
|
226
|
+
return this.deleteShape(n);
|
|
227
|
+
case "office_powerpoint_insert_image":
|
|
228
|
+
return this.insertImage(n);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
async snapshot(t) {
|
|
232
|
+
var s;
|
|
233
|
+
const n = await h(), i = (s = n[0]) == null ? void 0 : s.index, o = _(t, i), r = m(t.maxShapes) ?? g(this, S);
|
|
234
|
+
return PowerPoint.run(async (d) => {
|
|
235
|
+
const c = C(d);
|
|
236
|
+
c.load("items/id");
|
|
237
|
+
const u = await w(d, o);
|
|
238
|
+
u.load("id"), u.shapes.load("items"), await d.sync();
|
|
239
|
+
const a = u.shapes.items.slice(0, r);
|
|
240
|
+
return a.forEach(I), await d.sync(), {
|
|
241
|
+
host: X(),
|
|
242
|
+
requirements: Z(),
|
|
243
|
+
slideCount: c.items.length,
|
|
244
|
+
selectedSlides: n,
|
|
245
|
+
slide: {
|
|
246
|
+
index: o,
|
|
247
|
+
id: u.id,
|
|
248
|
+
shapeCount: u.shapes.items.length,
|
|
249
|
+
shapes: a.map(y),
|
|
250
|
+
truncated: u.shapes.items.length > a.length
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
async selectSlide(t) {
|
|
256
|
+
const n = F(t.slideIndex, "slideIndex");
|
|
257
|
+
return await D(n), { slideIndex: n };
|
|
258
|
+
}
|
|
259
|
+
async addSlide(t) {
|
|
260
|
+
const n = f(t.slideMasterId), i = f(t.layoutId), o = {
|
|
261
|
+
...n ? { slideMasterId: n } : {},
|
|
262
|
+
...i ? { layoutId: i } : {}
|
|
263
|
+
};
|
|
264
|
+
return PowerPoint.run(async (r) => {
|
|
265
|
+
const s = C(r);
|
|
266
|
+
return Object.keys(o).length ? s.add(o) : s.add(), s.load("items/id"), await r.sync(), {
|
|
267
|
+
slideIndex: s.items.length,
|
|
268
|
+
slideCount: s.items.length
|
|
269
|
+
};
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
async deleteSlide(t) {
|
|
273
|
+
v(t.confirm, "Deleting a slide");
|
|
274
|
+
const n = F(t.slideIndex, "slideIndex");
|
|
275
|
+
return PowerPoint.run(async (i) => ((await w(i, n)).delete(), await i.sync(), { slideIndex: n, deleted: !0 }));
|
|
276
|
+
}
|
|
277
|
+
async addTextBox(t) {
|
|
278
|
+
var d;
|
|
279
|
+
const n = await h(), i = _(t, (d = n[0]) == null ? void 0 : d.index), o = R(t.text, "text"), r = T(t), s = b(t);
|
|
280
|
+
return PowerPoint.run(async (c) => {
|
|
281
|
+
const a = (await w(c, i)).shapes.addTextBox(o, k(r));
|
|
282
|
+
return A(a, s), I(a), await c.sync(), {
|
|
283
|
+
slideIndex: i,
|
|
284
|
+
shape: y(a)
|
|
285
|
+
};
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
async addShape(t) {
|
|
289
|
+
var d;
|
|
290
|
+
const n = await h(), i = _(t, (d = n[0]) == null ? void 0 : d.index), o = f(t.shapeType) ?? "Rectangle", r = T(t), s = b(t);
|
|
291
|
+
return PowerPoint.run(async (c) => {
|
|
292
|
+
const a = (await w(c, i)).shapes.addGeometricShape(
|
|
293
|
+
o,
|
|
294
|
+
k(r)
|
|
295
|
+
);
|
|
296
|
+
return A(a, s), I(a), await c.sync(), {
|
|
297
|
+
slideIndex: i,
|
|
298
|
+
shape: y(a)
|
|
299
|
+
};
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
async updateShape(t) {
|
|
303
|
+
var s;
|
|
304
|
+
const n = M(t), i = await h();
|
|
305
|
+
n.slideIndex = n.slideIndex ?? ((s = i[0]) == null ? void 0 : s.index) ?? 1;
|
|
306
|
+
const o = T(t), r = b(t);
|
|
307
|
+
return PowerPoint.run(async (d) => {
|
|
308
|
+
const c = await $(d, n);
|
|
309
|
+
return L(c, o), A(c, r), I(c), await d.sync(), {
|
|
310
|
+
slideIndex: n.slideIndex,
|
|
311
|
+
shape: y(c)
|
|
312
|
+
};
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
async deleteShape(t) {
|
|
316
|
+
var o;
|
|
317
|
+
v(t.confirm, "Deleting a shape");
|
|
318
|
+
const n = M(t), i = await h();
|
|
319
|
+
return n.slideIndex = n.slideIndex ?? ((o = i[0]) == null ? void 0 : o.index) ?? 1, PowerPoint.run(async (r) => ((await $(r, n)).delete(), await r.sync(), {
|
|
320
|
+
slideIndex: n.slideIndex,
|
|
321
|
+
shapeId: n.shapeId,
|
|
322
|
+
shapeName: n.shapeName,
|
|
323
|
+
deleted: !0
|
|
324
|
+
}));
|
|
325
|
+
}
|
|
326
|
+
async insertImage(t) {
|
|
327
|
+
var s;
|
|
328
|
+
const n = await h(), i = _(t, (s = n[0]) == null ? void 0 : s.index), o = J(
|
|
329
|
+
R(t.base64 ?? t.dataUrl, "base64")
|
|
330
|
+
);
|
|
331
|
+
await D(i);
|
|
332
|
+
const r = {
|
|
333
|
+
coercionType: Office.CoercionType.Image,
|
|
334
|
+
...l(t.left) !== void 0 ? { imageLeft: x(t.left, "left") } : {},
|
|
335
|
+
...l(t.top) !== void 0 ? { imageTop: x(t.top, "top") } : {},
|
|
336
|
+
...l(t.width) !== void 0 ? { imageWidth: x(t.width, "width") } : {},
|
|
337
|
+
...l(t.height) !== void 0 ? { imageHeight: x(t.height, "height") } : {}
|
|
338
|
+
};
|
|
339
|
+
return await W(o, r), {
|
|
340
|
+
slideIndex: i,
|
|
341
|
+
inserted: !0,
|
|
342
|
+
width: l(t.width),
|
|
343
|
+
height: l(t.height)
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
S = new WeakMap();
|
|
348
|
+
function Q(e = {}) {
|
|
349
|
+
return new K(e);
|
|
350
|
+
}
|
|
351
|
+
const ne = {
|
|
352
|
+
toZeroBasedSlideIndex: U
|
|
353
|
+
};
|
|
354
|
+
var p;
|
|
355
|
+
class V {
|
|
356
|
+
constructor(t) {
|
|
357
|
+
O(this, p);
|
|
358
|
+
P(this, p, t);
|
|
359
|
+
}
|
|
360
|
+
supports(t) {
|
|
361
|
+
return g(this, p).some((n) => n.supports(t));
|
|
362
|
+
}
|
|
363
|
+
async execute(t, n) {
|
|
364
|
+
const i = g(this, p).find((o) => o.supports(t));
|
|
365
|
+
if (!i)
|
|
366
|
+
throw new Error(`Unknown Office tool: ${t}`);
|
|
367
|
+
return i.execute(t, n);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
p = new WeakMap();
|
|
371
|
+
function Y(e) {
|
|
372
|
+
return new V(e);
|
|
373
|
+
}
|
|
374
|
+
function q(e) {
|
|
375
|
+
return typeof e == "object" && e !== null && !Array.isArray(e) ? e : {};
|
|
376
|
+
}
|
|
377
|
+
function E(e, t, n) {
|
|
378
|
+
return {
|
|
379
|
+
tool_call_id: e.tool_call_id ?? e.id,
|
|
380
|
+
name: e.name,
|
|
381
|
+
status: t,
|
|
382
|
+
content: JSON.stringify(n)
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
function ee(e) {
|
|
386
|
+
return e instanceof Error ? e.message : String(e);
|
|
387
|
+
}
|
|
388
|
+
function ie(e = {}) {
|
|
389
|
+
const t = e.registry ?? Y([e.adapter ?? Q()]);
|
|
390
|
+
return async (n) => {
|
|
391
|
+
if (!t.supports(n.name))
|
|
392
|
+
return E(n, "error", {
|
|
393
|
+
ok: !1,
|
|
394
|
+
error: `Unknown Office tool: ${n.name}`
|
|
395
|
+
});
|
|
396
|
+
try {
|
|
397
|
+
const i = await t.execute(n.name, q(n.params));
|
|
398
|
+
return E(n, "success", { ok: !0, result: i });
|
|
399
|
+
} catch (i) {
|
|
400
|
+
return E(n, "error", {
|
|
401
|
+
ok: !1,
|
|
402
|
+
error: ee(i)
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
export {
|
|
408
|
+
V as DefaultOfficeToolRegistry,
|
|
409
|
+
z as OFFICE_POWERPOINT_TOOL_NAMES,
|
|
410
|
+
K as PowerPointOfficeAdapter,
|
|
411
|
+
ie as createOfficeBridgeClientToolHandler,
|
|
412
|
+
Y as createOfficeToolRegistry,
|
|
413
|
+
Q as createPowerPointOfficeAdapter,
|
|
414
|
+
G as isPowerPointToolName,
|
|
415
|
+
ne as powerPointInternalTestUtils
|
|
416
|
+
};
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
2
|
+
<OfficeApp xmlns="http://schemas.microsoft.com/office/appforoffice/1.1"
|
|
3
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
4
|
+
xmlns:bt="http://schemas.microsoft.com/office/officeappbasictypes/1.0"
|
|
5
|
+
xmlns:ov="http://schemas.microsoft.com/office/taskpaneappversionoverrides"
|
|
6
|
+
xsi:type="TaskPaneApp">
|
|
7
|
+
<Id>3a62e392-75c0-4f36-91f2-6a4f79f8e12d</Id>
|
|
8
|
+
<Version>1.0.0.0</Version>
|
|
9
|
+
<ProviderName>XpertAI</ProviderName>
|
|
10
|
+
<DefaultLocale>en-US</DefaultLocale>
|
|
11
|
+
<DisplayName DefaultValue="XpertAI PowerPoint Copilot"/>
|
|
12
|
+
<Description DefaultValue="ChatKit-powered XpertAI Copilot for PowerPoint."/>
|
|
13
|
+
<IconUrl DefaultValue="https://localhost:3000/assets/icon-32.png"/>
|
|
14
|
+
<HighResolutionIconUrl DefaultValue="https://localhost:3000/assets/icon-80.png"/>
|
|
15
|
+
<SupportUrl DefaultValue="https://xpertai.cn"/>
|
|
16
|
+
<AppDomains>
|
|
17
|
+
<AppDomain>https://localhost:3000</AppDomain>
|
|
18
|
+
</AppDomains>
|
|
19
|
+
<Hosts>
|
|
20
|
+
<Host Name="Presentation"/>
|
|
21
|
+
</Hosts>
|
|
22
|
+
<Requirements>
|
|
23
|
+
<Sets DefaultMinVersion="1.1">
|
|
24
|
+
<Set Name="PowerPointApi" MinVersion="1.4"/>
|
|
25
|
+
<Set Name="ImageCoercion" MinVersion="1.1"/>
|
|
26
|
+
</Sets>
|
|
27
|
+
</Requirements>
|
|
28
|
+
<DefaultSettings>
|
|
29
|
+
<SourceLocation DefaultValue="https://localhost:3000/taskpane.html"/>
|
|
30
|
+
</DefaultSettings>
|
|
31
|
+
<Permissions>ReadWriteDocument</Permissions>
|
|
32
|
+
<VersionOverrides xmlns="http://schemas.microsoft.com/office/taskpaneappversionoverrides" xsi:type="VersionOverridesV1_0">
|
|
33
|
+
<Hosts>
|
|
34
|
+
<Host xsi:type="Presentation">
|
|
35
|
+
<DesktopFormFactor>
|
|
36
|
+
<GetStarted>
|
|
37
|
+
<Title resid="GetStarted.Title"/>
|
|
38
|
+
<Description resid="GetStarted.Description"/>
|
|
39
|
+
<LearnMoreUrl resid="GetStarted.LearnMoreUrl"/>
|
|
40
|
+
</GetStarted>
|
|
41
|
+
<FunctionFile resid="Taskpane.Url"/>
|
|
42
|
+
<ExtensionPoint xsi:type="PrimaryCommandSurface">
|
|
43
|
+
<OfficeTab id="TabHome">
|
|
44
|
+
<Group id="CommandsGroup">
|
|
45
|
+
<Label resid="CommandsGroup.Label"/>
|
|
46
|
+
<Icon>
|
|
47
|
+
<bt:Image size="16" resid="Icon.16x16"/>
|
|
48
|
+
<bt:Image size="32" resid="Icon.32x32"/>
|
|
49
|
+
<bt:Image size="80" resid="Icon.80x80"/>
|
|
50
|
+
</Icon>
|
|
51
|
+
<Control xsi:type="Button" id="TaskpaneButton">
|
|
52
|
+
<Label resid="TaskpaneButton.Label"/>
|
|
53
|
+
<Supertip>
|
|
54
|
+
<Title resid="TaskpaneButton.Label"/>
|
|
55
|
+
<Description resid="TaskpaneButton.Tooltip"/>
|
|
56
|
+
</Supertip>
|
|
57
|
+
<Icon>
|
|
58
|
+
<bt:Image size="16" resid="Icon.16x16"/>
|
|
59
|
+
<bt:Image size="32" resid="Icon.32x32"/>
|
|
60
|
+
<bt:Image size="80" resid="Icon.80x80"/>
|
|
61
|
+
</Icon>
|
|
62
|
+
<Action xsi:type="ShowTaskpane">
|
|
63
|
+
<TaskpaneId>ButtonId1</TaskpaneId>
|
|
64
|
+
<SourceLocation resid="Taskpane.Url"/>
|
|
65
|
+
</Action>
|
|
66
|
+
</Control>
|
|
67
|
+
</Group>
|
|
68
|
+
</OfficeTab>
|
|
69
|
+
</ExtensionPoint>
|
|
70
|
+
</DesktopFormFactor>
|
|
71
|
+
</Host>
|
|
72
|
+
</Hosts>
|
|
73
|
+
<Resources>
|
|
74
|
+
<bt:Images>
|
|
75
|
+
<bt:Image id="Icon.16x16" DefaultValue="https://localhost:3000/assets/icon-32.png"/>
|
|
76
|
+
<bt:Image id="Icon.32x32" DefaultValue="https://localhost:3000/assets/icon-32.png"/>
|
|
77
|
+
<bt:Image id="Icon.80x80" DefaultValue="https://localhost:3000/assets/icon-80.png"/>
|
|
78
|
+
</bt:Images>
|
|
79
|
+
<bt:Urls>
|
|
80
|
+
<bt:Url id="GetStarted.LearnMoreUrl" DefaultValue="https://xpertai.cn"/>
|
|
81
|
+
<bt:Url id="Taskpane.Url" DefaultValue="https://localhost:3000/taskpane.html"/>
|
|
82
|
+
</bt:Urls>
|
|
83
|
+
<bt:ShortStrings>
|
|
84
|
+
<bt:String id="CommandsGroup.Label" DefaultValue="XpertAI"/>
|
|
85
|
+
<bt:String id="GetStarted.Title" DefaultValue="XpertAI Copilot loaded"/>
|
|
86
|
+
<bt:String id="TaskpaneButton.Label" DefaultValue="XpertAI Copilot"/>
|
|
87
|
+
</bt:ShortStrings>
|
|
88
|
+
<bt:LongStrings>
|
|
89
|
+
<bt:String id="GetStarted.Description" DefaultValue="Open the task pane to chat with XpertAI and edit the presentation."/>
|
|
90
|
+
<bt:String id="TaskpaneButton.Tooltip" DefaultValue="Open XpertAI PowerPoint Copilot."/>
|
|
91
|
+
</bt:LongStrings>
|
|
92
|
+
</Resources>
|
|
93
|
+
</VersionOverrides>
|
|
94
|
+
</OfficeApp>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../server/index.ts"],"names":[],"mappings":""}
|