@vite-plugin-opencode-assistant/components 1.0.15 → 1.0.17

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.
@@ -1,4 +1,4 @@
1
- import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createStaticVNode, createVNode, defineComponent, inject, normalizeClass, normalizeStyle, onMounted, onUnmounted, openBlock, provide, ref, renderList, renderSlot, toDisplayString, toRef, useSlots, vShow, watch, withCtx, withDirectives, withModifiers } from "vue";
1
+ import { Fragment, Teleport, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createStaticVNode, createVNode, defineComponent, inject, normalizeClass, normalizeStyle, onMounted, onUnmounted, openBlock, provide, ref, renderList, renderSlot, toDisplayString, toRef, useSlots, vShow, watch, withCtx, withDirectives, withModifiers } from "vue";
2
2
  import { truncate } from "@vite-plugin-opencode-assistant/shared";
3
3
  //#region es/open-code-widget/src/context.js
4
4
  var CONTEXT_KEY = /* @__PURE__ */ Symbol("OpenCodeWidgetContext");
@@ -29,38 +29,22 @@ var __spreadValues$1 = (a, b) => {
29
29
  }
30
30
  return a;
31
31
  };
32
- var __vue_sfc__$7 = /* @__PURE__ */ defineComponent({
32
+ var __vue_sfc__$6 = /* @__PURE__ */ defineComponent({
33
33
  __name: "Frame",
34
34
  setup(__props, { expose: __expose }) {
35
- __expose();
36
35
  const iframeRef = ref(null);
37
- const { frameLoading, showEmptyState, showError, iframeSource: iframeSrc, emptyStateText, emptyStateActionText, handleEmptyAction, handleFrameLoaded, theme, resolvedTheme } = useOpenCodeWidgetContext();
38
- const iframeReady = ref(false);
36
+ const { frameLoading, showEmptyState, showError, iframeSource: iframeSrc, emptyStateText, emptyStateActionText, handleEmptyAction, handleFrameLoaded } = useOpenCodeWidgetContext();
39
37
  function sendMessageToIframe(type, data) {
40
38
  var _a;
41
39
  if (!((_a = iframeRef.value) == null ? void 0 : _a.contentWindow)) return;
42
40
  iframeRef.value.contentWindow.postMessage(__spreadValues$1({ type }, data), "*");
43
41
  }
44
- function syncIframeTheme() {
45
- sendMessageToIframe("OPENCODE_SET_THEME", { theme: resolvedTheme.value });
46
- }
47
- function handleIframeMessage(event) {
48
- var _a;
49
- if (((_a = event.data) == null ? void 0 : _a.type) === "OPENCODE_READY") syncIframeTheme();
50
- }
51
- watch([theme, resolvedTheme], () => {
52
- syncIframeTheme();
53
- });
54
42
  onMounted(() => {
55
43
  if (iframeRef.value) iframeRef.value.addEventListener("load", () => {
56
- iframeReady.value = true;
57
44
  handleFrameLoaded();
58
45
  });
59
- window.addEventListener("message", handleIframeMessage);
60
- });
61
- onUnmounted(() => {
62
- window.removeEventListener("message", handleIframeMessage);
63
46
  });
47
+ __expose({ sendMessageToIframe });
64
48
  const __returned__ = {
65
49
  iframeRef,
66
50
  frameLoading,
@@ -71,12 +55,7 @@ var __vue_sfc__$7 = /* @__PURE__ */ defineComponent({
71
55
  emptyStateActionText,
72
56
  handleEmptyAction,
73
57
  handleFrameLoaded,
74
- theme,
75
- resolvedTheme,
76
- iframeReady,
77
- sendMessageToIframe,
78
- syncIframeTheme,
79
- handleIframeMessage
58
+ sendMessageToIframe
80
59
  };
81
60
  Object.defineProperty(__returned__, "__isScriptSetup", {
82
61
  enumerable: false,
@@ -85,11 +64,11 @@ var __vue_sfc__$7 = /* @__PURE__ */ defineComponent({
85
64
  return __returned__;
86
65
  }
87
66
  });
88
- var _hoisted_1$7 = { class: "opencode-iframe-container" };
89
- var _hoisted_2$5 = { class: "opencode-empty-state-text" };
90
- var _hoisted_3$5 = ["src"];
91
- function __vue_render__$7(_ctx, _cache, $props, $setup, $data, $options) {
92
- return openBlock(), createElementBlock("div", _hoisted_1$7, [
67
+ var _hoisted_1$6 = { class: "opencode-iframe-container" };
68
+ var _hoisted_2$4 = { class: "opencode-empty-state-text" };
69
+ var _hoisted_3$4 = ["src"];
70
+ function __vue_render__$6(_ctx, _cache, $props, $setup, $data, $options) {
71
+ return openBlock(), createElementBlock("div", _hoisted_1$6, [
93
72
  createElementVNode("div", { class: normalizeClass(["opencode-empty-state-overlay", { visible: $setup.showEmptyState }]) }, [renderSlot(_ctx.$slots, "empty-state", {}, () => [
94
73
  _cache[1] || (_cache[1] = createElementVNode("div", { class: "opencode-empty-state-icon" }, [createElementVNode("svg", {
95
74
  viewBox: "0 0 24 24",
@@ -104,7 +83,7 @@ function __vue_render__$7(_ctx, _cache, $props, $setup, $data, $options) {
104
83
  "stroke-linejoin": "round",
105
84
  d: "M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 0 1-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z"
106
85
  })])], -1)),
107
- createElementVNode("div", _hoisted_2$5, toDisplayString($setup.emptyStateText), 1),
86
+ createElementVNode("div", _hoisted_2$4, toDisplayString($setup.emptyStateText), 1),
108
87
  createElementVNode("button", {
109
88
  class: "opencode-empty-state-btn",
110
89
  type: "button",
@@ -119,14 +98,14 @@ function __vue_render__$7(_ctx, _cache, $props, $setup, $data, $options) {
119
98
  src: $setup.iframeSrc,
120
99
  allow: "clipboard-write; clipboard-read",
121
100
  referrerpolicy: "origin"
122
- }, null, 8, _hoisted_3$5)])
101
+ }, null, 8, _hoisted_3$4)])
123
102
  ]);
124
103
  }
125
- __vue_sfc__$7.render = __vue_render__$7;
126
- var Frame_vue_default = __vue_sfc__$7;
104
+ __vue_sfc__$6.render = __vue_render__$6;
105
+ var Frame_vue_default = __vue_sfc__$6;
127
106
  //#endregion
128
107
  //#region es/open-code-widget/src/components/Header.vue.js
129
- var __vue_sfc__$6 = /* @__PURE__ */ defineComponent({
108
+ var __vue_sfc__$5 = /* @__PURE__ */ defineComponent({
130
109
  __name: "Header",
131
110
  setup(__props, { expose: __expose }) {
132
111
  __expose();
@@ -165,15 +144,15 @@ var __vue_sfc__$6 = /* @__PURE__ */ defineComponent({
165
144
  return __returned__;
166
145
  }
167
146
  });
168
- var _hoisted_1$6 = { class: "opencode-chat-header" };
169
- var _hoisted_2$4 = { class: "opencode-chat-header-left" };
170
- var _hoisted_3$4 = [
147
+ var _hoisted_1$5 = { class: "opencode-chat-header" };
148
+ var _hoisted_2$3 = { class: "opencode-chat-header-left" };
149
+ var _hoisted_3$3 = [
171
150
  "title",
172
151
  "aria-label",
173
152
  "aria-expanded"
174
153
  ];
175
- var _hoisted_4$4 = ["aria-pressed", "disabled"];
176
- var _hoisted_5$4 = ["title", "aria-label"];
154
+ var _hoisted_4$3 = ["aria-pressed", "disabled"];
155
+ var _hoisted_5$3 = ["title", "aria-label"];
177
156
  var _hoisted_6$3 = {
178
157
  key: 0,
179
158
  viewBox: "0 0 24 24",
@@ -204,11 +183,11 @@ var _hoisted_8$2 = {
204
183
  "stroke-width": "2",
205
184
  "aria-hidden": "true"
206
185
  };
207
- var _hoisted_9$1 = { class: "opencode-chat-header-title" };
186
+ var _hoisted_9$2 = { class: "opencode-chat-header-title" };
208
187
  var _hoisted_10 = { class: "opencode-chat-header-actions" };
209
- function __vue_render__$6(_ctx, _cache, $props, $setup, $data, $options) {
210
- return openBlock(), createElementBlock("div", _hoisted_1$6, [
211
- createElementVNode("div", _hoisted_2$4, [
188
+ function __vue_render__$5(_ctx, _cache, $props, $setup, $data, $options) {
189
+ return openBlock(), createElementBlock("div", _hoisted_1$5, [
190
+ createElementVNode("div", _hoisted_2$3, [
212
191
  createElementVNode("button", {
213
192
  class: normalizeClass(["opencode-header-btn session-toggle", { active: !$setup.sessionListCollapsed }]),
214
193
  type: "button",
@@ -227,7 +206,7 @@ function __vue_render__$6(_ctx, _cache, $props, $setup, $data, $options) {
227
206
  }, [createElementVNode("path", {
228
207
  d: "M4 6h16M4 12h16M4 18h16",
229
208
  "stroke-linecap": "round"
230
- })], -1))])], 10, _hoisted_3$4),
209
+ })], -1))])], 10, _hoisted_3$3),
231
210
  createElementVNode("button", {
232
211
  class: normalizeClass(["opencode-header-btn select-btn", { active: $setup.selectMode }]),
233
212
  type: "button",
@@ -247,16 +226,16 @@ function __vue_render__$6(_ctx, _cache, $props, $setup, $data, $options) {
247
226
  }), createElementVNode("path", {
248
227
  fill: "currentColor",
249
228
  d: "M512 96a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V128a32 32 0 0 1 32-32m0 576a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V704a32 32 0 0 1 32-32M96 512a32 32 0 0 1 32-32h192a32 32 0 0 1 0 64H128a32 32 0 0 1-32-32m576 0a32 32 0 0 1 32-32h192a32 32 0 1 1 0 64H704a32 32 0 0 1-32-32"
250
- })], -1))])], 10, _hoisted_4$4),
229
+ })], -1))])], 10, _hoisted_4$3),
251
230
  createElementVNode("button", {
252
231
  class: "opencode-header-btn theme-btn",
253
232
  type: "button",
254
233
  title: $setup.themeIconTitle,
255
234
  "aria-label": $setup.themeIconLabel,
256
235
  onClick: _cache[2] || (_cache[2] = (...args) => $setup.handleToggleTheme && $setup.handleToggleTheme(...args))
257
- }, [renderSlot(_ctx.$slots, "theme-icon", {}, () => [$setup.theme === "light" ? (openBlock(), createElementBlock("svg", _hoisted_6$3, [..._cache[6] || (_cache[6] = [createStaticVNode("<circle cx=\"12\" cy=\"12\" r=\"5\"></circle><line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"3\"></line><line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"23\"></line><line x1=\"4.22\" y1=\"4.22\" x2=\"5.64\" y2=\"5.64\"></line><line x1=\"18.36\" y1=\"18.36\" x2=\"19.78\" y2=\"19.78\"></line><line x1=\"1\" y1=\"12\" x2=\"3\" y2=\"12\"></line><line x1=\"21\" y1=\"12\" x2=\"23\" y2=\"12\"></line><line x1=\"4.22\" y1=\"19.78\" x2=\"5.64\" y2=\"18.36\"></line><line x1=\"18.36\" y1=\"5.64\" x2=\"19.78\" y2=\"4.22\"></line>", 9)])])) : $setup.theme === "dark" ? (openBlock(), createElementBlock("svg", _hoisted_7$2, [..._cache[7] || (_cache[7] = [createElementVNode("path", { d: "M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" }, null, -1)])])) : (openBlock(), createElementBlock("svg", _hoisted_8$2, [..._cache[8] || (_cache[8] = [createStaticVNode("<rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"></rect><line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\"></line><line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\"></line><circle cx=\"12\" cy=\"10\" r=\"3\"></circle><path d=\"M7 7l2 2M17 7l-2 2M7 13l2-2M17 13l-2-2\"></path>", 5)])]))])], 8, _hoisted_5$4)
236
+ }, [renderSlot(_ctx.$slots, "theme-icon", {}, () => [$setup.theme === "light" ? (openBlock(), createElementBlock("svg", _hoisted_6$3, [..._cache[6] || (_cache[6] = [createStaticVNode("<circle cx=\"12\" cy=\"12\" r=\"5\"></circle><line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"3\"></line><line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"23\"></line><line x1=\"4.22\" y1=\"4.22\" x2=\"5.64\" y2=\"5.64\"></line><line x1=\"18.36\" y1=\"18.36\" x2=\"19.78\" y2=\"19.78\"></line><line x1=\"1\" y1=\"12\" x2=\"3\" y2=\"12\"></line><line x1=\"21\" y1=\"12\" x2=\"23\" y2=\"12\"></line><line x1=\"4.22\" y1=\"19.78\" x2=\"5.64\" y2=\"18.36\"></line><line x1=\"18.36\" y1=\"5.64\" x2=\"19.78\" y2=\"4.22\"></line>", 9)])])) : $setup.theme === "dark" ? (openBlock(), createElementBlock("svg", _hoisted_7$2, [..._cache[7] || (_cache[7] = [createElementVNode("path", { d: "M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" }, null, -1)])])) : (openBlock(), createElementBlock("svg", _hoisted_8$2, [..._cache[8] || (_cache[8] = [createStaticVNode("<rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"></rect><line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\"></line><line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\"></line><circle cx=\"12\" cy=\"10\" r=\"3\"></circle><path d=\"M7 7l2 2M17 7l-2 2M7 13l2-2M17 13l-2-2\"></path>", 5)])]))])], 8, _hoisted_5$3)
258
237
  ]),
259
- createElementVNode("span", _hoisted_9$1, toDisplayString($setup.title), 1),
238
+ createElementVNode("span", _hoisted_9$2, toDisplayString($setup.title), 1),
260
239
  createElementVNode("div", _hoisted_10, [createElementVNode("button", {
261
240
  class: "opencode-header-btn close",
262
241
  type: "button",
@@ -274,11 +253,11 @@ function __vue_render__$6(_ctx, _cache, $props, $setup, $data, $options) {
274
253
  }, [createElementVNode("path", { d: "M18 6L6 18M6 6l12 12" })], -1))])])])
275
254
  ]);
276
255
  }
277
- __vue_sfc__$6.render = __vue_render__$6;
278
- var Header_vue_default = __vue_sfc__$6;
256
+ __vue_sfc__$5.render = __vue_render__$5;
257
+ var Header_vue_default = __vue_sfc__$5;
279
258
  //#endregion
280
259
  //#region es/open-code-widget/src/components/SelectHint.vue.js
281
- var __vue_sfc__$5 = /* @__PURE__ */ defineComponent({
260
+ var __vue_sfc__$4 = /* @__PURE__ */ defineComponent({
282
261
  __name: "SelectHint",
283
262
  setup(__props, { expose: __expose }) {
284
263
  __expose();
@@ -294,72 +273,12 @@ var __vue_sfc__$5 = /* @__PURE__ */ defineComponent({
294
273
  return __returned__;
295
274
  }
296
275
  });
297
- var _hoisted_1$5 = { class: "opencode-hint-shortcut" };
298
- function __vue_render__$5(_ctx, _cache, $props, $setup, $data, $options) {
299
- return openBlock(), createElementBlock("div", { class: normalizeClass(["opencode-select-mode-hint", { visible: $setup.visible }]) }, [_cache[0] || (_cache[0] = createElementVNode("span", null, "🎯 选择模式已开启 - 点击元素进行选择", -1)), createElementVNode("span", _hoisted_1$5, toDisplayString($setup.shortcutLabel), 1)], 2);
300
- }
301
- __vue_sfc__$5.render = __vue_render__$5;
302
- var SelectHint_vue_default = __vue_sfc__$5;
303
- //#endregion
304
- //#region es/open-code-widget/src/components/SelectedBubbles.vue.js
305
- var __vue_sfc__$4 = /* @__PURE__ */ defineComponent({
306
- __name: "SelectedBubbles",
307
- setup(__props, { expose: __expose }) {
308
- __expose();
309
- const { bubbleVisible: visible, selectedElementItems: items, handleClickSelectedNode, handleRemoveSelectedNode } = useOpenCodeWidgetContext();
310
- const __returned__ = {
311
- visible,
312
- items,
313
- handleClickSelectedNode,
314
- handleRemoveSelectedNode
315
- };
316
- Object.defineProperty(__returned__, "__isScriptSetup", {
317
- enumerable: false,
318
- value: true
319
- });
320
- return __returned__;
321
- }
322
- });
323
- var _hoisted_1$4 = {
324
- key: 0,
325
- class: "opencode-bubble-empty"
326
- };
327
- var _hoisted_2$3 = ["onClick"];
328
- var _hoisted_3$3 = { class: "opencode-bubble-text" };
329
- var _hoisted_4$3 = {
330
- key: 0,
331
- class: "opencode-bubble-file"
332
- };
333
- var _hoisted_5$3 = ["aria-label", "onClick"];
276
+ var _hoisted_1$4 = { class: "opencode-hint-shortcut" };
334
277
  function __vue_render__$4(_ctx, _cache, $props, $setup, $data, $options) {
335
- return openBlock(), createElementBlock("div", {
336
- class: normalizeClass(["opencode-selected-bubbles", { visible: $setup.visible }]),
337
- role: "list",
338
- "aria-label": "已选元素列表"
339
- }, [$setup.items.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_1$4, "暂无选中元素")) : (openBlock(true), createElementBlock(Fragment, { key: 1 }, renderList($setup.items, (item, index) => {
340
- return openBlock(), createElementBlock("div", {
341
- key: item.key,
342
- class: "opencode-selected-bubble",
343
- role: "listitem",
344
- onClick: ($event) => $setup.handleClickSelectedNode(item)
345
- }, [
346
- createElementVNode("span", _hoisted_3$3, toDisplayString(item.description), 1),
347
- item.bubbleFileText ? (openBlock(), createElementBlock("span", _hoisted_4$3, toDisplayString(item.bubbleFileText), 1)) : createCommentVNode("v-if", true),
348
- createElementVNode("button", {
349
- class: "opencode-bubble-remove",
350
- type: "button",
351
- "aria-label": `\u79FB\u9664\u5143\u7D20: ${item.description}`,
352
- onClick: withModifiers(($event) => $setup.handleRemoveSelectedNode({
353
- item,
354
- index,
355
- source: "bubble"
356
- }), ["stop"])
357
- }, " × ", 8, _hoisted_5$3)
358
- ], 8, _hoisted_2$3);
359
- }), 128))], 2);
278
+ return openBlock(), createElementBlock("div", { class: normalizeClass(["opencode-select-mode-hint", { visible: $setup.visible }]) }, [_cache[0] || (_cache[0] = createElementVNode("span", null, "🎯 选择模式已开启 - 点击元素进行选择", -1)), createElementVNode("span", _hoisted_1$4, toDisplayString($setup.shortcutLabel), 1)], 2);
360
279
  }
361
280
  __vue_sfc__$4.render = __vue_render__$4;
362
- var SelectedBubbles_vue_default = __vue_sfc__$4;
281
+ var SelectHint_vue_default = __vue_sfc__$4;
363
282
  //#endregion
364
283
  //#region es/open-code-widget/src/components/SelectedNodes.vue.js
365
284
  var __vue_sfc__$3 = /* @__PURE__ */ defineComponent({
@@ -488,7 +407,7 @@ var _hoisted_5$1 = ["aria-selected", "onClick"];
488
407
  var _hoisted_6$1 = { class: "opencode-session-header" };
489
408
  var _hoisted_7$1 = { class: "opencode-session-title" };
490
409
  var _hoisted_8$1 = ["aria-label", "onClick"];
491
- var _hoisted_9 = { class: "opencode-session-meta" };
410
+ var _hoisted_9$1 = { class: "opencode-session-meta" };
492
411
  function __vue_render__$2(_ctx, _cache, $props, $setup, $data, $options) {
493
412
  return openBlock(), createElementBlock("div", { class: normalizeClass(["opencode-session-list", { collapsed: $setup.collapsed }]) }, [
494
413
  createCommentVNode(" Header "),
@@ -517,7 +436,7 @@ function __vue_render__$2(_ctx, _cache, $props, $setup, $data, $options) {
517
436
  type: "button",
518
437
  "aria-label": `\u5220\u9664\u4F1A\u8BDD: ${item.title}`,
519
438
  onClick: withModifiers(($event) => $setup.handleDeleteSession(item), ["stop"])
520
- }, " × ", 8, _hoisted_8$1)]), createElementVNode("div", _hoisted_9, toDisplayString(item.meta), 1)], 10, _hoisted_5$1);
439
+ }, " × ", 8, _hoisted_8$1)]), createElementVNode("div", _hoisted_9$1, toDisplayString(item.meta), 1)], 10, _hoisted_5$1);
521
440
  }), 128)) : (openBlock(), createElementBlock(Fragment, { key: 2 }, [createCommentVNode(" Empty State "), renderSlot(_ctx.$slots, "empty")], 64))])], 2112))
522
441
  ], 2);
523
442
  }
@@ -529,11 +448,12 @@ var __vue_sfc__$1 = /* @__PURE__ */ defineComponent({
529
448
  __name: "Trigger",
530
449
  setup(__props, { expose: __expose }) {
531
450
  __expose();
532
- const { buttonActive: active, open, hotkeyLabel, handleToggle } = useOpenCodeWidgetContext();
451
+ const { buttonActive: active, open, hotkeyLabel, thinking, handleToggle } = useOpenCodeWidgetContext();
533
452
  const __returned__ = {
534
453
  active,
535
454
  open,
536
455
  hotkeyLabel,
456
+ thinking,
537
457
  handleToggle
538
458
  };
539
459
  Object.defineProperty(__returned__, "__isScriptSetup", {
@@ -546,7 +466,10 @@ var __vue_sfc__$1 = /* @__PURE__ */ defineComponent({
546
466
  var _hoisted_1$1 = ["aria-expanded", "title"];
547
467
  function __vue_render__$1(_ctx, _cache, $props, $setup, $data, $options) {
548
468
  return openBlock(), createElementBlock("button", {
549
- class: normalizeClass(["opencode-button", { active: $setup.active }]),
469
+ class: normalizeClass(["opencode-button", {
470
+ active: $setup.active,
471
+ thinking: $setup.thinking
472
+ }]),
550
473
  type: "button",
551
474
  "aria-expanded": $setup.open,
552
475
  "aria-label": "打开 AI 助手",
@@ -1165,6 +1088,11 @@ var __vue_sfc__ = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
1165
1088
  type: Boolean,
1166
1089
  required: false,
1167
1090
  default: true
1091
+ },
1092
+ thinking: {
1093
+ type: Boolean,
1094
+ required: false,
1095
+ default: false
1168
1096
  }
1169
1097
  },
1170
1098
  emits: [
@@ -1174,6 +1102,7 @@ var __vue_sfc__ = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
1174
1102
  "update:currentSessionId",
1175
1103
  "update:selectedElements",
1176
1104
  "update:theme",
1105
+ "update:thinking",
1177
1106
  "toggle",
1178
1107
  "close",
1179
1108
  "toggle-session-list",
@@ -1186,7 +1115,8 @@ var __vue_sfc__ = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
1186
1115
  "remove-selected-node",
1187
1116
  "clear-selected-nodes",
1188
1117
  "empty-action",
1189
- "frame-loaded"
1118
+ "frame-loaded",
1119
+ "thinking-change"
1190
1120
  ],
1191
1121
  setup(__props, { expose: __expose, emit: __emit }) {
1192
1122
  const props = __props;
@@ -1194,10 +1124,13 @@ var __vue_sfc__ = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
1194
1124
  const slots = useSlots();
1195
1125
  const notificationMessage = ref("");
1196
1126
  const notificationVisible = ref(false);
1127
+ const notificationMode = ref("widget");
1197
1128
  let notificationTimer = null;
1198
- const showNotification = (message, duration = 3e3) => {
1129
+ const showNotification = (message, options) => {
1130
+ const { duration = 3e3, mode = "widget" } = options || {};
1199
1131
  notificationMessage.value = message;
1200
1132
  notificationVisible.value = true;
1133
+ notificationMode.value = mode;
1201
1134
  if (notificationTimer) clearTimeout(notificationTimer);
1202
1135
  notificationTimer = setTimeout(() => {
1203
1136
  notificationVisible.value = false;
@@ -1221,12 +1154,18 @@ var __vue_sfc__ = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
1221
1154
  dialogVisible.value = false;
1222
1155
  if (dialogResolve) dialogResolve(false);
1223
1156
  };
1157
+ const frameRef = ref(null);
1158
+ const sendMessageToIframe = (type, data) => {
1159
+ var _a;
1160
+ (_a = frameRef.value) == null || _a.sendMessageToIframe(type, data);
1161
+ };
1224
1162
  const handleFrameLoaded = () => {
1225
1163
  emit("frame-loaded");
1226
1164
  };
1227
1165
  __expose({
1228
1166
  showNotification,
1229
- showConfirmDialog
1167
+ showConfirmDialog,
1168
+ sendMessageToIframe
1230
1169
  });
1231
1170
  const localSessionListCollapsed = ref(props.sessionListCollapsed);
1232
1171
  watch(() => props.sessionListCollapsed, (val) => {
@@ -1323,6 +1262,7 @@ var __vue_sfc__ = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
1323
1262
  emptyStateActionText: toRef(props, "emptyStateActionText"),
1324
1263
  showClearAll: toRef(props, "showClearAll"),
1325
1264
  open: toRef(props, "open"),
1265
+ thinking: toRef(props, "thinking"),
1326
1266
  iframeSource,
1327
1267
  buttonActive,
1328
1268
  sessionListTitle,
@@ -1350,6 +1290,7 @@ var __vue_sfc__ = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
1350
1290
  slots,
1351
1291
  notificationMessage,
1352
1292
  notificationVisible,
1293
+ notificationMode,
1353
1294
  get notificationTimer() {
1354
1295
  return notificationTimer;
1355
1296
  },
@@ -1368,6 +1309,8 @@ var __vue_sfc__ = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
1368
1309
  showConfirmDialog,
1369
1310
  handleDialogConfirm,
1370
1311
  handleDialogCancel,
1312
+ frameRef,
1313
+ sendMessageToIframe,
1371
1314
  handleFrameLoaded,
1372
1315
  localSessionListCollapsed,
1373
1316
  buttonActive,
@@ -1399,7 +1342,6 @@ var __vue_sfc__ = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
1399
1342
  Frame: Frame_vue_default,
1400
1343
  Header: Header_vue_default,
1401
1344
  SelectHint: SelectHint_vue_default,
1402
- SelectedBubbles: SelectedBubbles_vue_default,
1403
1345
  SelectedNodes: SelectedNodes_vue_default,
1404
1346
  SessionList: SessionList_vue_default,
1405
1347
  Trigger: Trigger_vue_default
@@ -1420,7 +1362,7 @@ var _hoisted_2 = { class: "opencode-chat-content" };
1420
1362
  var _hoisted_3 = { class: "opencode-tooltip-tag" };
1421
1363
  var _hoisted_4 = { class: "opencode-tooltip-file" };
1422
1364
  var _hoisted_5 = {
1423
- key: 1,
1365
+ key: 0,
1424
1366
  class: "opencode-dialog-overlay"
1425
1367
  };
1426
1368
  var _hoisted_6 = {
@@ -1430,6 +1372,11 @@ var _hoisted_6 = {
1430
1372
  };
1431
1373
  var _hoisted_7 = { class: "opencode-dialog-content" };
1432
1374
  var _hoisted_8 = { class: "opencode-dialog-message" };
1375
+ var _hoisted_9 = {
1376
+ key: 0,
1377
+ class: "opencode-page-notification",
1378
+ role: "alert"
1379
+ };
1433
1380
  function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
1434
1381
  return openBlock(), createElementBlock("div", { class: normalizeClass($setup.containerClasses) }, [
1435
1382
  createVNode($setup["Trigger"], null, createSlots({ _: 2 }, [$setup.slots["button-icon"] ? {
@@ -1437,7 +1384,7 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
1437
1384
  fn: withCtx(() => [renderSlot(_ctx.$slots, "button-icon")]),
1438
1385
  key: "0"
1439
1386
  } : void 0]), 1024),
1440
- $setup.bubbleVisible ? (openBlock(), createBlock($setup["SelectedBubbles"], { key: 0 })) : createCommentVNode("v-if", true),
1387
+ createCommentVNode(" <SelectedBubbles v-if=\"bubbleVisible\" /> "),
1441
1388
  withDirectives(createElementVNode("div", { class: normalizeClass(["opencode-chat", { open: $props.open }]) }, [
1442
1389
  createVNode($setup["Header"], null, createSlots({ _: 2 }, [
1443
1390
  $setup.slots["session-toggle-icon"] ? {
@@ -1457,13 +1404,13 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
1457
1404
  } : void 0
1458
1405
  ]), 1024),
1459
1406
  createCommentVNode(" Notification "),
1460
- $setup.notificationVisible ? (openBlock(), createElementBlock("div", _hoisted_1, toDisplayString($setup.notificationMessage), 1)) : createCommentVNode("v-if", true),
1407
+ $setup.notificationVisible && $setup.notificationMode === "widget" ? (openBlock(), createElementBlock("div", _hoisted_1, toDisplayString($setup.notificationMessage), 1)) : createCommentVNode("v-if", true),
1461
1408
  createElementVNode("div", _hoisted_2, [
1462
1409
  createVNode($setup["SessionList"], null, {
1463
1410
  empty: withCtx(() => [renderSlot(_ctx.$slots, "sessions-empty", {}, () => [_cache[0] || (_cache[0] = createElementVNode("div", { class: "opencode-session-empty" }, "暂无会话", -1))])]),
1464
1411
  _: 3
1465
1412
  }),
1466
- createVNode($setup["Frame"], null, createSlots({ _: 2 }, [
1413
+ createVNode($setup["Frame"], { ref: "frameRef" }, createSlots({ _: 2 }, [
1467
1414
  $setup.slots["empty-state"] ? {
1468
1415
  name: "empty-state",
1469
1416
  fn: withCtx(() => [renderSlot(_ctx.$slots, "empty-state")]),
@@ -1484,7 +1431,7 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
1484
1431
  fn: withCtx(() => [renderSlot(_ctx.$slots, "content")]),
1485
1432
  key: "3"
1486
1433
  } : void 0
1487
- ]), 1024),
1434
+ ]), 1536),
1488
1435
  createVNode($setup["SelectedNodes"])
1489
1436
  ])
1490
1437
  ], 2), [[vShow, !$props.selectMode]]),
@@ -1506,7 +1453,9 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
1506
1453
  }, "取消"), createElementVNode("button", {
1507
1454
  class: "opencode-dialog-btn confirm",
1508
1455
  onClick: $setup.handleDialogConfirm
1509
- }, "确认")])])])) : createCommentVNode("v-if", true)
1456
+ }, "确认")])])])) : createCommentVNode("v-if", true),
1457
+ createCommentVNode(" Page-level Notification "),
1458
+ (openBlock(), createBlock(Teleport, { to: "body" }, [$setup.notificationVisible && $setup.notificationMode === "page" ? (openBlock(), createElementBlock("div", _hoisted_9, toDisplayString($setup.notificationMessage), 1)) : createCommentVNode("v-if", true)]))
1510
1459
  ], 2);
1511
1460
  }
1512
1461
  __vue_sfc__.render = __vue_render__;
@@ -1515,7 +1464,7 @@ __vue_sfc__.render = __vue_render__;
1515
1464
  var open_code_widget_default = __vue_sfc__;
1516
1465
  //#endregion
1517
1466
  //#region es/index.js
1518
- var version = "1.0.15";
1467
+ var version = "1.0.17";
1519
1468
  function install(app, options) {
1520
1469
  [open_code_widget_default].forEach((item) => {
1521
1470
  if (item.install) app.use(item, options);
@@ -1,9 +1,8 @@
1
- .opencode-widget{--oc-bg-main: #ffffff;--oc-bg-secondary: #f8f9fa;--oc-bg-tertiary: #f3f4f6;--oc-overlay-bg: rgba(255, 255, 255, .9);--oc-bg-inverse: #1e1e1e;--oc-text-primary: #282828;--oc-text-secondary: #4b5563;--oc-text-tertiary: #6b7280;--oc-text-placeholder: #9ca3af;--oc-text-inverse: #ffffff;--oc-border-primary: #e5e7eb;--oc-border-secondary: #d1d5db;--oc-primary: #3b82f6;--oc-primary-hover: #2563eb;--oc-primary-bg: rgba(59, 130, 246, .1);--oc-danger: #ef4444;--oc-danger-hover: #dc2626;--oc-danger-active: #b91c1c;--oc-success: #10b981;--oc-overlay: rgba(0, 0, 0, .5);--oc-tooltip-bg: #1e1e1e;--oc-dialog-overlay: rgba(0, 0, 0, .5);--oc-skeleton-bg: #e5e7eb;--oc-skeleton-gradient: linear-gradient(90deg, #e5e7eb 25%, #f3f4f6 50%, #e5e7eb 75%);--oc-shadow-sm: 0 2px 4px rgba(0, 0, 0, .1);--oc-shadow-md: 0 4px 12px rgba(0, 0, 0, .15);--oc-shadow-lg: 0 8px 32px rgba(0, 0, 0, .12);--oc-shadow-xl: 0 20px 60px rgba(0, 0, 0, .3);--oc-shadow-primary: 0 2px 4px rgba(59, 130, 246, .2);--oc-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .3);--oc-shadow-danger: 0 4px 12px rgba(239, 68, 68, .3);--oc-trigger-bg: linear-gradient(135deg, #667eea 0%, #764ba2 100%);--oc-trigger-bg-hover: linear-gradient(135deg, #764ba2 0%, #667eea 100%);--oc-trigger-bg-active: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);--oc-trigger-shadow: 0 4px 15px rgba(102, 126, 234, .4);--oc-trigger-shadow-hover: 0 6px 20px rgba(102, 126, 234, .6);--oc-trigger-shadow-active: 0 6px 20px rgba(240, 147, 251, .4);position:fixed;z-index:999999;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.opencode-widget.opencode-theme-dark{--oc-bg-main: #1a1a1a;--oc-bg-secondary: #1e1e1e;--oc-bg-tertiary: #282828;--oc-overlay-bg: rgba(26, 26, 26, .9);--oc-bg-inverse: #ffffff;--oc-text-primary: #f3f4f6;--oc-text-secondary: #d1d5db;--oc-text-tertiary: #9ca3af;--oc-text-placeholder: #6b7280;--oc-text-inverse: #282828;--oc-border-primary: #282828;--oc-border-secondary: #4b5563;--oc-primary: #3b82f6;--oc-primary-hover: #2563eb;--oc-primary-bg: rgba(59, 130, 246, .15);--oc-danger: #ef4444;--oc-danger-hover: #dc2626;--oc-danger-active: #b91c1c;--oc-success: #10b981;--oc-overlay: rgba(26, 26, 26, .9);--oc-tooltip-bg: #282828;--oc-dialog-overlay: rgba(0, 0, 0, .7);--oc-skeleton-bg: #151515;--oc-skeleton-gradient: linear-gradient(90deg, #282828 25%, #4b5563 50%, #282828 75%);--oc-shadow-sm: 0 2px 4px rgba(0, 0, 0, .3);--oc-shadow-md: 0 4px 12px rgba(0, 0, 0, .4);--oc-shadow-lg: 0 8px 32px rgba(0, 0, 0, .4);--oc-shadow-xl: 0 20px 60px rgba(0, 0, 0, .6);--oc-shadow-primary: 0 2px 4px rgba(59, 130, 246, .3);--oc-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .4);--oc-shadow-danger: 0 4px 12px rgba(239, 68, 68, .4);--oc-trigger-bg: linear-gradient(135deg, #667eea 0%, #764ba2 100%);--oc-trigger-bg-hover: linear-gradient(135deg, #764ba2 0%, #667eea 100%);--oc-trigger-bg-active: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);--oc-trigger-shadow: 0 4px 15px rgba(102, 126, 234, .5);--oc-trigger-shadow-hover: 0 6px 20px rgba(102, 126, 234, .7);--oc-trigger-shadow-active: 0 6px 20px rgba(240, 147, 251, .5)}.opencode-widget.bottom-right{bottom:20px;right:20px}.opencode-widget.bottom-left{bottom:20px;left:20px}.opencode-widget.top-right{top:20px;right:20px}.opencode-widget.top-left{top:20px;left:20px}.opencode-chat{position:absolute;width:700px;height:86vh;background:var(--oc-bg-main);border-radius:16px;box-shadow:var(--oc-shadow-lg);overflow:hidden;opacity:0;visibility:hidden;transform:translateY(20px) scale(.95);transition:all .3s ease;display:flex;flex-direction:column}.opencode-chat-content{display:flex;flex:1;overflow:hidden}.opencode-widget.bottom-right .opencode-chat{bottom:56px;right:0}.opencode-widget.bottom-left .opencode-chat{bottom:56px;left:0}.opencode-widget.top-right .opencode-chat{top:56px;right:0}.opencode-widget.top-left .opencode-chat{top:56px;left:0}.opencode-widget.bottom-right .opencode-selected-bubbles{bottom:56px;right:0}.opencode-widget.bottom-left .opencode-selected-bubbles{bottom:56px;left:0}.opencode-widget.top-right .opencode-selected-bubbles{top:56px;bottom:auto;right:0}.opencode-widget.top-left .opencode-selected-bubbles{top:56px;bottom:auto;left:0}.opencode-chat.open{opacity:1;visibility:visible;transform:translateY(0) scale(1)}.opencode-notification{position:absolute;top:20px;left:50%;transform:translate(-50%);padding:12px 24px;background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;border-radius:10px;font-size:14px;font-weight:500;box-shadow:0 4px 16px rgba(59,130,246,.4),0 0 0 2px rgba(59,130,246,.2);animation:slideDown .3s ease;z-index:10000000;display:flex;align-items:center;gap:10px}.opencode-notification:before{content:"\1f4a1";font-size:16px}.opencode-dialog-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:var(--oc-dialog-overlay);display:flex;align-items:center;justify-content:center;z-index:9999999;animation:fadeIn .2s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.opencode-dialog{background:var(--oc-bg-main);border-radius:12px;padding:24px;min-width:320px;max-width:400px;box-shadow:var(--oc-shadow-xl);animation:scaleIn .2s ease}@keyframes scaleIn{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}.opencode-dialog-content{margin-bottom:20px}.opencode-dialog-message{font-size:15px;color:var(--oc-text-primary);line-height:1.5}.opencode-dialog-actions{display:flex;gap:12px;justify-content:flex-end}.opencode-dialog-btn{padding:10px 20px;border-radius:8px;border:none;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s}.opencode-dialog-btn.cancel{background:var(--oc-bg-tertiary);color:var(--oc-text-primary)}.opencode-dialog-btn.cancel:hover{background:var(--oc-text-primary);color:var(--oc-bg-main)}.opencode-dialog-btn.confirm{background:var(--oc-danger);color:#fff}.opencode-dialog-btn.confirm:hover{background:var(--oc-danger-hover)}@keyframes slideDown{0%{transform:translate(-50%) translateY(-100%);opacity:0}to{transform:translate(-50%) translateY(0);opacity:1}}.opencode-element-highlight{position:fixed;pointer-events:none;z-index:999998;display:none;transition:all .1s ease;border-radius:4px}#vue-inspector-container{display:none!important}.opencode-element-tooltip{position:fixed;background:var(--oc-tooltip-bg);color:#fff;padding:8px 12px;border-radius:6px;font-size:12px;z-index:9999998;display:none;box-shadow:var(--oc-shadow-md);max-width:300px;pointer-events:none}.opencode-tooltip-tag{font-weight:500;margin-bottom:4px;word-break:break-all}.opencode-tooltip-file{font-size:11px;color:var(--oc-text-placeholder);word-break:break-all}.opencode-element-highlight-temp{position:absolute;pointer-events:none;z-index:999998;border-radius:4px;animation:highlight-pulse 2s ease-out forwards}@keyframes highlight-pulse{0%{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.02)}to{opacity:0;transform:scale(1)}}@media(max-width:768px){.opencode-chat{width:calc(100vw - 40px);height:calc(100vh - 100px)}}
1
+ .opencode-widget{--oc-bg-main: #ffffff;--oc-bg-secondary: #f8f9fa;--oc-bg-tertiary: #f3f4f6;--oc-overlay-bg: rgba(255, 255, 255, .9);--oc-bg-inverse: #1e1e1e;--oc-text-primary: #282828;--oc-text-secondary: #4b5563;--oc-text-tertiary: #6b7280;--oc-text-placeholder: #9ca3af;--oc-text-inverse: #ffffff;--oc-border-primary: #e5e7eb;--oc-border-secondary: #d1d5db;--oc-primary: #3b82f6;--oc-primary-hover: #2563eb;--oc-primary-bg: rgba(59, 130, 246, .1);--oc-danger: #ef4444;--oc-danger-hover: #dc2626;--oc-danger-active: #b91c1c;--oc-success: #10b981;--oc-overlay: rgba(0, 0, 0, .5);--oc-tooltip-bg: #1e1e1e;--oc-dialog-overlay: rgba(0, 0, 0, .5);--oc-thinking-gradient-1: #10b981;--oc-thinking-gradient-2: #059669;--oc-thinking-glow: rgba(16, 185, 129, .3);--oc-thinking-glow-strong: rgba(16, 185, 129, .6);--oc-skeleton-bg: #e5e7eb;--oc-skeleton-gradient: linear-gradient(90deg, #e5e7eb 25%, #f3f4f6 50%, #e5e7eb 75%);--oc-shadow-sm: 0 2px 4px rgba(0, 0, 0, .1);--oc-shadow-md: 0 4px 12px rgba(0, 0, 0, .15);--oc-shadow-lg: 0 8px 32px rgba(0, 0, 0, .12);--oc-shadow-xl: 0 20px 60px rgba(0, 0, 0, .3);--oc-shadow-primary: 0 2px 4px rgba(59, 130, 246, .2);--oc-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .3);--oc-shadow-danger: 0 4px 12px rgba(239, 68, 68, .3);--oc-trigger-bg: #3b82f6;--oc-trigger-bg-hover: #2563eb;--oc-trigger-bg-active: #1d4ed8;--oc-trigger-shadow: 0 2px 8px rgba(59, 130, 246, .3);--oc-trigger-shadow-hover: 0 4px 12px rgba(59, 130, 246, .4);--oc-trigger-shadow-active: 0 4px 12px rgba(59, 130, 246, .5);position:fixed;z-index:999999;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.opencode-widget.opencode-theme-dark{--oc-bg-main: #1a1a1a;--oc-bg-secondary: #1e1e1e;--oc-bg-tertiary: #282828;--oc-overlay-bg: rgba(26, 26, 26, .9);--oc-bg-inverse: #ffffff;--oc-text-primary: #f3f4f6;--oc-text-secondary: #d1d5db;--oc-text-tertiary: #9ca3af;--oc-text-placeholder: #6b7280;--oc-text-inverse: #282828;--oc-border-primary: #282828;--oc-border-secondary: #4b5563;--oc-primary: #3b82f6;--oc-primary-hover: #2563eb;--oc-primary-bg: rgba(59, 130, 246, .15);--oc-danger: #ef4444;--oc-danger-hover: #dc2626;--oc-danger-active: #b91c1c;--oc-success: #10b981;--oc-overlay: rgba(26, 26, 26, .9);--oc-tooltip-bg: #282828;--oc-dialog-overlay: rgba(0, 0, 0, .7);--oc-thinking-gradient-1: #34d399;--oc-thinking-gradient-2: #10b981;--oc-thinking-glow: rgba(52, 211, 153, .3);--oc-thinking-glow-strong: rgba(52, 211, 153, .6);--oc-skeleton-bg: #151515;--oc-skeleton-gradient: linear-gradient(90deg, #282828 25%, #4b5563 50%, #282828 75%);--oc-shadow-sm: 0 2px 4px rgba(0, 0, 0, .3);--oc-shadow-md: 0 4px 12px rgba(0, 0, 0, .4);--oc-shadow-lg: 0 8px 32px rgba(0, 0, 0, .4);--oc-shadow-xl: 0 20px 60px rgba(0, 0, 0, .6);--oc-shadow-primary: 0 2px 4px rgba(59, 130, 246, .3);--oc-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .4);--oc-shadow-danger: 0 4px 12px rgba(239, 68, 68, .4);--oc-trigger-bg: #60a5fa;--oc-trigger-bg-hover: #3b82f6;--oc-trigger-bg-active: #2563eb;--oc-trigger-shadow: 0 2px 8px rgba(96, 165, 250, .4);--oc-trigger-shadow-hover: 0 4px 12px rgba(96, 165, 250, .5);--oc-trigger-shadow-active: 0 4px 12px rgba(96, 165, 250, .6)}.opencode-widget.bottom-right{bottom:20px;right:20px}.opencode-widget.bottom-left{bottom:20px;left:20px}.opencode-widget.top-right{top:20px;right:20px}.opencode-widget.top-left{top:20px;left:20px}.opencode-chat{position:absolute;width:700px;height:86vh;background:var(--oc-bg-main);border-radius:16px;box-shadow:var(--oc-shadow-lg);overflow:hidden;opacity:0;visibility:hidden;transform:translateY(20px) scale(.95);transition:all .3s ease;display:flex;flex-direction:column}.opencode-chat-content{display:flex;flex:1;overflow:hidden}.opencode-widget.bottom-right .opencode-chat{bottom:56px;right:0}.opencode-widget.bottom-left .opencode-chat{bottom:56px;left:0}.opencode-widget.top-right .opencode-chat{top:56px;right:0}.opencode-widget.top-left .opencode-chat{top:56px;left:0}.opencode-widget.bottom-right .opencode-selected-bubbles{bottom:56px;right:0}.opencode-widget.bottom-left .opencode-selected-bubbles{bottom:56px;left:0}.opencode-widget.top-right .opencode-selected-bubbles{top:56px;bottom:auto;right:0}.opencode-widget.top-left .opencode-selected-bubbles{top:56px;bottom:auto;left:0}.opencode-chat.open{opacity:1;visibility:visible;transform:translateY(0) scale(1)}.opencode-notification{position:absolute;top:20px;left:50%;transform:translate(-50%);padding:12px 24px;background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;border-radius:10px;font-size:14px;font-weight:500;box-shadow:0 4px 16px rgba(59,130,246,.4),0 0 0 2px rgba(59,130,246,.2);animation:slideDown .3s ease;z-index:10000000;display:flex;align-items:center;gap:10px}.opencode-notification:before{content:"\1f4a1";font-size:16px}.opencode-dialog-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:var(--oc-dialog-overlay);display:flex;align-items:center;justify-content:center;z-index:9999999;animation:fadeIn .2s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.opencode-dialog{background:var(--oc-bg-main);border-radius:12px;padding:24px;min-width:320px;max-width:400px;box-shadow:var(--oc-shadow-xl);animation:scaleIn .2s ease}@keyframes scaleIn{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}.opencode-dialog-content{margin-bottom:20px}.opencode-dialog-message{font-size:15px;color:var(--oc-text-primary);line-height:1.5}.opencode-dialog-actions{display:flex;gap:12px;justify-content:flex-end}.opencode-dialog-btn{padding:10px 20px;border-radius:8px;border:none;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s}.opencode-dialog-btn.cancel{background:var(--oc-bg-tertiary);color:var(--oc-text-primary)}.opencode-dialog-btn.cancel:hover{background:var(--oc-text-primary);color:var(--oc-bg-main)}.opencode-dialog-btn.confirm{background:var(--oc-danger);color:#fff}.opencode-dialog-btn.confirm:hover{background:var(--oc-danger-hover)}@keyframes slideDown{0%{transform:translate(-50%) translateY(-100%);opacity:0}to{transform:translate(-50%) translateY(0);opacity:1}}.opencode-page-notification{position:fixed;top:20px;left:50%;transform:translate(-50%);padding:12px 24px;background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;border-radius:10px;font-size:14px;font-weight:500;box-shadow:0 4px 16px rgba(59,130,246,.4),0 0 0 2px rgba(59,130,246,.2);animation:slideDown .3s ease;z-index:2147483647;display:flex;align-items:center;gap:10px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.opencode-page-notification:before{content:"\1f4a1";font-size:16px}.opencode-element-highlight{position:fixed;pointer-events:none;z-index:999998;display:none;transition:all .1s ease;border-radius:4px}#vue-inspector-container{display:none!important}.opencode-element-tooltip{position:fixed;background:var(--oc-tooltip-bg);color:#fff;padding:8px 12px;border-radius:6px;font-size:12px;z-index:9999998;display:none;box-shadow:var(--oc-shadow-md);max-width:300px;pointer-events:none}.opencode-tooltip-tag{font-weight:500;margin-bottom:4px;word-break:break-all}.opencode-tooltip-file{font-size:11px;color:var(--oc-text-placeholder);word-break:break-all}.opencode-element-highlight-temp{position:absolute;pointer-events:none;z-index:999998;border-radius:4px;animation:highlight-pulse 2s ease-out forwards}@keyframes highlight-pulse{0%{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.02)}to{opacity:0;transform:scale(1)}}@media(max-width:768px){.opencode-chat{width:calc(100vw - 40px);height:calc(100vh - 100px)}}
2
2
  .opencode-iframe-container{flex:1;position:relative;overflow:hidden;display:flex;flex-direction:column;margin-top:-42px}.opencode-loading-overlay{position:absolute;top:0;left:0;right:0;bottom:0;background:var(--oc-overlay-bg);display:none;flex-direction:column;align-items:center;justify-content:center;z-index:10;transition:opacity .3s ease}.opencode-loading-overlay.visible{display:flex}.opencode-loading-spinner{width:40px;height:40px;border:3px solid var(--oc-border-primary);border-top-color:var(--oc-primary);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.opencode-loading-text{margin-top:12px;font-size:14px;color:var(--oc-text-placeholder)}.opencode-error-overlay{position:absolute;top:0;left:0;right:0;bottom:0;z-index:15;margin-top:42px;display:none}.opencode-error-overlay.visible{display:flex}.opencode-empty-state-overlay{position:absolute;top:0;left:0;right:0;bottom:0;background:var(--oc-bg-secondary);display:none;flex-direction:column;align-items:center;justify-content:center;z-index:5;transition:opacity .3s ease;margin-top:42px}.opencode-empty-state-overlay.visible{display:flex}.opencode-empty-state-icon{color:var(--oc-text-placeholder);margin-bottom:16px}.opencode-empty-state-text{color:var(--oc-text-primary);font-size:16px;font-weight:500;margin-bottom:24px}.opencode-empty-state-btn{padding:10px 24px;border-radius:8px;border:none;background:var(--oc-primary);color:#fff;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s;box-shadow:var(--oc-shadow-primary)}.opencode-empty-state-btn:hover{background:var(--oc-primary-hover);transform:translateY(-1px);box-shadow:var(--oc-shadow-primary-hover)}.opencode-empty-state-btn:active{transform:translateY(0)}.opencode-iframe{width:100%;height:100%;border:none}
3
3
  .opencode-chat-header{position:relative;flex-shrink:0;display:flex;align-items:center;justify-content:space-between;padding:0 12px;height:40px;background:var(--oc-bg-secondary);border-bottom:1px solid var(--oc-border-primary);z-index:5}.opencode-chat-header-left{display:flex;align-items:center;gap:4px}.opencode-chat-header-title{font-size:14px;font-weight:600;color:var(--oc-text-primary);position:absolute;left:50%;transform:translate(-50%)}.opencode-chat-header-actions{display:flex;gap:4px}.opencode-header-btn{width:28px;height:28px;border-radius:6px;border:none;background:transparent;color:var(--oc-text-placeholder);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s}.opencode-header-btn:hover{background:var(--oc-bg-tertiary);color:var(--oc-text-primary)}.opencode-header-btn.close:hover{background:var(--oc-danger);color:#fff}.opencode-header-btn.select-btn.active,.opencode-header-btn.session-toggle.active{background:var(--oc-primary);color:#fff}
4
4
  .opencode-select-mode-hint{position:fixed;top:20px;left:50%;transform:translate(-50%);padding:10px;background:linear-gradient(135deg,#ef4444,#dc2626);color:#fff;border-radius:12px;font-size:14px;font-weight:500;box-shadow:0 6px 20px rgba(239,68,68,.5),0 0 0 3px rgba(239,68,68,.3);z-index:9999999;display:none;align-items:center;gap:12px;border:1px solid rgba(255,255,255,.3)}.opencode-select-mode-hint.visible{display:flex;animation:slideDown .3s ease,pulseHint 2s ease-in-out infinite}.opencode-hint-shortcut{padding:4px 10px;background:rgba(255,255,255,.25);border-radius:6px;font-size:13px;font-weight:600;border:1px solid rgba(255,255,255,.4)}@keyframes pulseHint{0%,to{box-shadow:0 6px 20px rgba(239,68,68,.5),0 0 0 3px rgba(239,68,68,.3)}50%{box-shadow:0 6px 20px rgba(239,68,68,.6),0 0 0 6px rgba(239,68,68,.4)}}
5
- .opencode-selected-bubbles{position:absolute;display:none;flex-direction:column;gap:6px;max-width:220px;max-height:300px;overflow-y:auto}.opencode-selected-bubbles.visible{display:flex}.opencode-selected-bubble{display:flex;flex-direction:column;gap:2px;padding:8px 24px 8px 10px;background:var(--oc-bg-main);border:1px solid var(--oc-border-primary);border-radius:8px;font-size:12px;box-shadow:var(--oc-shadow-sm);position:relative;cursor:pointer;transition:all .2s}.opencode-selected-bubble:hover{border-color:var(--oc-primary);box-shadow:var(--oc-shadow-primary)}.opencode-bubble-text{color:var(--oc-text-primary);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.opencode-bubble-file{color:var(--oc-text-placeholder);font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.opencode-bubble-remove{position:absolute;top:8px;right:6px;width:16px;height:16px;border-radius:50%;border:none;background:transparent;color:var(--oc-text-placeholder);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:12px;transition:all .2s}.opencode-bubble-remove:hover{background:var(--oc-danger);color:#fff}.opencode-bubble-empty{padding:8px 12px;background:var(--oc-bg-main);border:1px dashed var(--oc-border-secondary);border-radius:8px;color:var(--oc-text-placeholder);font-size:12px;text-align:center}
6
5
  .opencode-right-toolbar{width:140px;background:var(--oc-bg-secondary);border-left:1px solid var(--oc-border-primary);display:flex;flex-direction:column;flex-shrink:0;transition:width .2s ease;overflow:hidden}.opencode-right-toolbar.collapsed{width:0;overflow:hidden}.opencode-right-toolbar.collapsed .opencode-selected-nodes-header,.opencode-right-toolbar.collapsed .opencode-selected-nodes,.opencode-right-toolbar.collapsed .opencode-clear-all-btn{display:none}.opencode-selected-nodes-header{padding:12px 8px 8px;border-bottom:1px solid var(--oc-border-primary)}.opencode-selected-nodes-title{font-size:14px;font-weight:600;color:var(--oc-text-primary);margin-bottom:4px}.opencode-selected-nodes-desc{font-size:11px;color:var(--oc-text-placeholder);line-height:1.4}.opencode-selected-nodes{flex:1;display:flex;flex-direction:column;padding:8px;gap:6px;overflow-y:auto;overflow-x:hidden}.opencode-selected-nodes:empty:before{content:"\6682\65e0\9009\4e2d\5143\7d20";color:var(--oc-text-placeholder);font-size:12px;text-align:center;padding:20px 10px}.opencode-selected-node{display:flex;align-items:center;gap:8px;padding:8px 10px;background:var(--oc-bg-main);border:1px solid var(--oc-border-primary);border-radius:6px;font-size:12px;transition:all .2s}.opencode-selected-node:hover{border-color:var(--oc-primary);box-shadow:var(--oc-shadow-primary)}.opencode-node-content{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.opencode-node-text{color:var(--oc-text-primary);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.opencode-node-file{color:var(--oc-text-placeholder);font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.opencode-node-remove{width:18px;height:18px;border-radius:4px;border:none;background:transparent;color:var(--oc-text-placeholder);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:14px;transition:all .2s;flex-shrink:0}.opencode-node-remove:hover{background:var(--oc-danger);color:#fff}.opencode-clear-all-btn{width:calc(100% - 16px);margin:8px;padding:8px 12px;border-radius:6px;border:none;background:var(--oc-danger);color:#fff;font-size:12px;font-weight:500;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:4px;transition:all .2s}.opencode-clear-all-btn:hover{background:var(--oc-danger-hover);transform:scale(1.02)}
7
6
  .opencode-session-list{width:240px;background:var(--oc-bg-secondary);border-right:1px solid var(--oc-border-primary);display:flex;flex-direction:column;flex-shrink:0;transition:width .2s ease}.opencode-session-list.collapsed{width:0;overflow:hidden}.opencode-session-list.collapsed .opencode-session-list-header,.opencode-session-list.collapsed .opencode-session-list-content{display:none}.opencode-session-list-header{padding:16px;border-bottom:1px solid var(--oc-border-primary);display:flex;justify-content:space-between;align-items:center;font-weight:600;font-size:14px;color:var(--oc-text-primary)}.opencode-new-session-btn{width:28px;height:28px;border-radius:6px;border:none;background:var(--oc-primary);color:#fff;font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s}.opencode-new-session-btn:hover{background:var(--oc-primary-hover);transform:scale(1.05)}.opencode-session-list-content{flex:1;overflow-y:auto;padding:8px;position:relative}.opencode-session-list-loading-overlay{position:absolute;top:0;left:0;right:0;bottom:0;background:var(--oc-overlay-bg);display:flex;align-items:center;justify-content:center;z-index:10;border-radius:8px}.opencode-loading-spinner.small{width:24px;height:24px;border-width:2px}.opencode-session-item{padding:12px;border-radius:8px;cursor:pointer;transition:transform .2s;margin-bottom:4px;color:var(--oc-text-primary)}.opencode-session-item:hover{background:var(--oc-bg-tertiary)}.opencode-session-item.active{background:var(--oc-primary);color:#fff;transition:none}.opencode-session-title{font-size:14px;font-weight:500;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.opencode-session-meta{font-size:12px;opacity:.6}.opencode-session-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}.opencode-session-delete-btn{width:20px;height:20px;border-radius:4px;border:none;background:transparent;color:var(--oc-text-placeholder);font-size:16px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s;opacity:0;flex-shrink:0}.opencode-session-item:hover .opencode-session-delete-btn{opacity:1}.opencode-session-delete-btn:hover{background:var(--oc-danger);color:#fff}.opencode-session-item.active .opencode-session-delete-btn{color:rgba(255,255,255,.7)}.opencode-session-item.active .opencode-session-delete-btn:hover{background:rgba(255,255,255,.2);color:#fff}.opencode-session-header-skeleton{padding:16px;border-bottom:1px solid var(--oc-border-primary);display:none;justify-content:space-between;align-items:center}.opencode-session-header-skeleton.visible{display:flex}.opencode-skeleton-header-title{height:18px;width:80px;background:var(--oc-skeleton-gradient);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:4px}.opencode-skeleton-header-btn{width:28px;height:28px;background:var(--oc-skeleton-gradient);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:6px}.opencode-session-skeleton{flex:1;overflow-y:auto;padding:8px;display:none}.opencode-session-skeleton.visible{display:block}.opencode-skeleton-item{padding:12px;border-radius:8px;margin-bottom:4px;background:var(--oc-skeleton-bg)}.opencode-skeleton-title{height:16px;background:var(--oc-skeleton-gradient);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:4px;margin-bottom:8px;width:70%}.opencode-skeleton-meta{height:12px;background:var(--oc-skeleton-gradient);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:4px;width:50%}.opencode-session-empty{padding:32px 16px;text-align:center;color:var(--oc-text-placeholder);font-size:13px}@keyframes skeleton-loading{0%{background-position:200% 0}to{background-position:-200% 0}}
8
- .opencode-button{width:44px;height:44px;border-radius:50%;background:var(--oc-trigger-bg);border:none;cursor:pointer;box-shadow:var(--oc-trigger-shadow);transition:all .3s ease;display:flex;align-items:center;justify-content:center;color:#fff;padding:0;position:relative}.opencode-button:before{content:"";position:absolute;top:-8px;left:-8px;right:-8px;bottom:-8px;border-radius:50%}.opencode-button:hover{transform:scale(1.1);box-shadow:var(--oc-trigger-shadow-hover);background:var(--oc-trigger-bg-hover)}.opencode-button.active{background:var(--oc-trigger-bg-active);box-shadow:var(--oc-trigger-shadow-active)}.opencode-button.active svg{transform:rotate(180deg)}.opencode-button svg{transition:transform .3s ease}.opencode-button.loading{animation:pulse 1s infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}
7
+ .opencode-button{width:44px;height:44px;border-radius:50%;background:var(--oc-trigger-bg);border:none;cursor:pointer;box-shadow:var(--oc-trigger-shadow);transition:all .3s ease;display:flex;align-items:center;justify-content:center;color:#fff;padding:0;position:relative;overflow:visible}.opencode-button svg{transform:rotate(180deg);transition:transform .3s ease}.opencode-button:before{content:"";position:absolute;top:-8px;left:-8px;right:-8px;bottom:-8px;border-radius:50%}.opencode-button:hover{transform:scale(1.1);box-shadow:var(--oc-trigger-shadow-hover);background:var(--oc-trigger-bg-hover)}.opencode-button.thinking{background:linear-gradient(135deg,#667eea,#764ba2,#667eea);background-size:200% 200%;animation:thinking-gradient 2s ease infinite,thinking-pulse 2s ease-in-out infinite;box-shadow:0 0 20px rgba(102,126,234,.5),0 0 40px rgba(118,75,162,.3)}.opencode-button.thinking svg{animation:none}.opencode-button.thinking:before{content:"";position:absolute;top:50%;left:50%;width:100%;height:100%;border-radius:50%;background:radial-gradient(circle,rgba(102,126,234,.7) 0%,rgba(118,75,162,.5) 50%,transparent 70%);transform:translate(-50%,-50%);animation:ripple-wave 2s ease-out infinite;pointer-events:none}.opencode-button.thinking:after{content:"";position:absolute;top:50%;left:50%;width:100%;height:100%;border-radius:50%;background:radial-gradient(circle,rgba(118,75,162,.6) 0%,rgba(102,126,234,.4) 50%,transparent 70%);transform:translate(-50%,-50%);animation:ripple-wave 2s ease-out infinite;animation-delay:1s;pointer-events:none}@keyframes thinking-gradient{0%{background-position:0% 50%}50%{background-position:100% 50%}to{background-position:0% 50%}}@keyframes ripple-wave{0%{transform:translate(-50%,-50%) scale(1);opacity:.8}to{transform:translate(-50%,-50%) scale(2.5);opacity:0}}@keyframes thinking-pulse{0%,to{transform:scale(1)}50%{transform:scale(.9)}}.opencode-button.loading{animation:pulse 1s infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}
9
8
  /*$vite$:1*/
package/lib/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import OpenCodeWidget from './open-code-widget';
2
2
  import type { App } from 'vue';
3
- declare const version = "1.0.15";
3
+ declare const version = "1.0.17";
4
4
  declare function install(app: App<any>, options?: any): void;
5
5
  export { install, version, OpenCodeWidget };
6
6
  export default install;
package/lib/index.js CHANGED
@@ -34,7 +34,7 @@ __export(lib_exports, {
34
34
  });
35
35
  module.exports = __toCommonJS(lib_exports);
36
36
  var import_open_code_widget = __toESM(require("./open-code-widget"));
37
- const version = "1.0.15";
37
+ const version = "1.0.17";
38
38
  function install(app, options) {
39
39
  const components = [
40
40
  import_open_code_widget.default
@@ -1,3 +1,4 @@
1
+ declare function sendMessageToIframe(type: string, data?: Record<string, unknown>): void;
1
2
  declare var __VLS_1: {}, __VLS_3: {}, __VLS_5: {}, __VLS_7: {};
2
3
  type __VLS_Slots = {} & {
3
4
  'empty-state'?: (props: typeof __VLS_1) => any;
@@ -8,7 +9,9 @@ type __VLS_Slots = {} & {
8
9
  } & {
9
10
  content?: (props: typeof __VLS_7) => any;
10
11
  };
11
- declare const __VLS_component: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
12
+ declare const __VLS_component: import("vue").DefineComponent<{}, {
13
+ sendMessageToIframe: typeof sendMessageToIframe;
14
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
12
15
  declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
13
16
  export default _default;
14
17
  type __VLS_WithSlots<T, S> = T & {
@@ -42,7 +42,6 @@ var import_vue3 = require("vue");
42
42
  const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)({
43
43
  __name: "Frame",
44
44
  setup(__props, { expose: __expose }) {
45
- __expose();
46
45
  const iframeRef = (0, import_vue2.ref)(null);
47
46
  const {
48
47
  frameLoading,
@@ -52,41 +51,24 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)({
52
51
  emptyStateText,
53
52
  emptyStateActionText,
54
53
  handleEmptyAction,
55
- handleFrameLoaded,
56
- theme,
57
- resolvedTheme
54
+ handleFrameLoaded
58
55
  } = (0, import_context.useOpenCodeWidgetContext)();
59
- const iframeReady = (0, import_vue2.ref)(false);
60
56
  function sendMessageToIframe(type, data) {
61
57
  var _a;
62
58
  if (!((_a = iframeRef.value) == null ? void 0 : _a.contentWindow)) return;
63
59
  iframeRef.value.contentWindow.postMessage(__spreadValues({ type }, data), "*");
64
60
  }
65
- function syncIframeTheme() {
66
- sendMessageToIframe("OPENCODE_SET_THEME", { theme: resolvedTheme.value });
67
- }
68
- function handleIframeMessage(event) {
69
- var _a;
70
- if (((_a = event.data) == null ? void 0 : _a.type) === "OPENCODE_READY") {
71
- syncIframeTheme();
72
- }
73
- }
74
- (0, import_vue2.watch)([theme, resolvedTheme], () => {
75
- syncIframeTheme();
76
- });
77
61
  (0, import_vue2.onMounted)(() => {
78
62
  if (iframeRef.value) {
79
63
  iframeRef.value.addEventListener("load", () => {
80
- iframeReady.value = true;
81
64
  handleFrameLoaded();
82
65
  });
83
66
  }
84
- window.addEventListener("message", handleIframeMessage);
85
67
  });
86
- (0, import_vue2.onUnmounted)(() => {
87
- window.removeEventListener("message", handleIframeMessage);
68
+ __expose({
69
+ sendMessageToIframe
88
70
  });
89
- const __returned__ = { iframeRef, frameLoading, showEmptyState, showError, iframeSrc, emptyStateText, emptyStateActionText, handleEmptyAction, handleFrameLoaded, theme, resolvedTheme, iframeReady, sendMessageToIframe, syncIframeTheme, handleIframeMessage };
71
+ const __returned__ = { iframeRef, frameLoading, showEmptyState, showError, iframeSrc, emptyStateText, emptyStateActionText, handleEmptyAction, handleFrameLoaded, sendMessageToIframe };
90
72
  Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
91
73
  return __returned__;
92
74
  }