@vite-plugin-opencode-assistant/components 1.0.20 → 1.0.21
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/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/open-code-widget/src/components/Header.vue.d.ts +6 -2
- package/es/open-code-widget/src/components/Header.vue.js +91 -9
- package/es/open-code-widget/src/context.d.ts +4 -0
- package/es/open-code-widget/src/index-sfc.css +1 -1
- package/es/open-code-widget/src/index.vue.js +18 -2
- package/lib/@vite-plugin-opencode-assistant/components.cjs.js +104 -21
- package/lib/@vite-plugin-opencode-assistant/components.es.js +104 -21
- package/lib/components.css +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/open-code-widget/src/components/Header.vue.d.ts +6 -2
- package/lib/open-code-widget/src/components/Header.vue.js +91 -9
- package/lib/open-code-widget/src/context.d.ts +4 -0
- package/lib/open-code-widget/src/index-sfc.css +1 -1
- package/lib/open-code-widget/src/index.vue.js +18 -2
- package/lib/web-types.json +1 -1
- package/package.json +2 -2
package/es/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.
|
|
3
|
+
declare const version = "1.0.21";
|
|
4
4
|
declare function install(app: App<any>, options?: any): void;
|
|
5
5
|
export { install, version, OpenCodeWidget };
|
|
6
6
|
export default install;
|
package/es/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
declare var __VLS_1: {}, __VLS_3: {}, __VLS_5: {}, __VLS_7: {};
|
|
1
|
+
declare var __VLS_1: {}, __VLS_3: {}, __VLS_5: {}, __VLS_7: {}, __VLS_9: {}, __VLS_11: {};
|
|
2
2
|
type __VLS_Slots = {} & {
|
|
3
3
|
'session-toggle-icon'?: (props: typeof __VLS_1) => any;
|
|
4
4
|
} & {
|
|
@@ -6,7 +6,11 @@ type __VLS_Slots = {} & {
|
|
|
6
6
|
} & {
|
|
7
7
|
'theme-icon'?: (props: typeof __VLS_5) => any;
|
|
8
8
|
} & {
|
|
9
|
-
'
|
|
9
|
+
'prompt-dock-icon'?: (props: typeof __VLS_7) => any;
|
|
10
|
+
} & {
|
|
11
|
+
'minimize-icon'?: (props: typeof __VLS_9) => any;
|
|
12
|
+
} & {
|
|
13
|
+
'close-icon'?: (props: typeof __VLS_11) => any;
|
|
10
14
|
};
|
|
11
15
|
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
16
|
declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
|
|
@@ -14,10 +14,14 @@ const __vue_sfc__ = /* @__PURE__ */ _defineComponent({
|
|
|
14
14
|
selectEnabled,
|
|
15
15
|
theme,
|
|
16
16
|
resolvedTheme,
|
|
17
|
+
minimized,
|
|
18
|
+
promptDockVisible,
|
|
17
19
|
handleToggleSessionList,
|
|
18
20
|
handleToggleSelectMode,
|
|
19
21
|
handleToggleTheme,
|
|
20
|
-
handleClose
|
|
22
|
+
handleClose,
|
|
23
|
+
handleToggleMinimize,
|
|
24
|
+
handleTogglePromptDock
|
|
21
25
|
} = useOpenCodeWidgetContext();
|
|
22
26
|
const themeIconTitle = computed(() => {
|
|
23
27
|
const themeLabels = {
|
|
@@ -35,7 +39,7 @@ const __vue_sfc__ = /* @__PURE__ */ _defineComponent({
|
|
|
35
39
|
};
|
|
36
40
|
return `\u5207\u6362\u4E3B\u9898 - \u5F53\u524D: ${themeLabels[theme.value]}`;
|
|
37
41
|
});
|
|
38
|
-
const __returned__ = { title, sessionListTitle, sessionListCollapsed, selectMode, selectEnabled, theme, resolvedTheme, handleToggleSessionList, handleToggleSelectMode, handleToggleTheme, handleClose, themeIconTitle, themeIconLabel };
|
|
42
|
+
const __returned__ = { title, sessionListTitle, sessionListCollapsed, selectMode, selectEnabled, theme, resolvedTheme, minimized, promptDockVisible, handleToggleSessionList, handleToggleSelectMode, handleToggleTheme, handleClose, handleToggleMinimize, handleTogglePromptDock, themeIconTitle, themeIconLabel };
|
|
39
43
|
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
40
44
|
return __returned__;
|
|
41
45
|
}
|
|
@@ -78,6 +82,28 @@ const _hoisted_8 = {
|
|
|
78
82
|
};
|
|
79
83
|
const _hoisted_9 = { class: "opencode-chat-header-title" };
|
|
80
84
|
const _hoisted_10 = { class: "opencode-chat-header-actions" };
|
|
85
|
+
const _hoisted_11 = ["title", "aria-label", "aria-pressed"];
|
|
86
|
+
const _hoisted_12 = ["title", "aria-label", "aria-pressed"];
|
|
87
|
+
const _hoisted_13 = {
|
|
88
|
+
key: 0,
|
|
89
|
+
viewBox: "0 0 24 24",
|
|
90
|
+
width: "14",
|
|
91
|
+
height: "14",
|
|
92
|
+
fill: "none",
|
|
93
|
+
stroke: "currentColor",
|
|
94
|
+
"stroke-width": "2",
|
|
95
|
+
"aria-hidden": "true"
|
|
96
|
+
};
|
|
97
|
+
const _hoisted_14 = {
|
|
98
|
+
key: 1,
|
|
99
|
+
viewBox: "0 0 24 24",
|
|
100
|
+
width: "14",
|
|
101
|
+
height: "14",
|
|
102
|
+
fill: "none",
|
|
103
|
+
stroke: "currentColor",
|
|
104
|
+
"stroke-width": "2",
|
|
105
|
+
"aria-hidden": "true"
|
|
106
|
+
};
|
|
81
107
|
function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
82
108
|
return _openBlock(), _createElementBlock("div", _hoisted_1, [
|
|
83
109
|
_createElementVNode("div", _hoisted_2, [
|
|
@@ -90,7 +116,7 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
90
116
|
onClick: _cache[0] || (_cache[0] = (...args) => $setup.handleToggleSessionList && $setup.handleToggleSessionList(...args))
|
|
91
117
|
}, [
|
|
92
118
|
_renderSlot(_ctx.$slots, "session-toggle-icon", {}, () => [
|
|
93
|
-
_cache[
|
|
119
|
+
_cache[6] || (_cache[6] = _createElementVNode(
|
|
94
120
|
"svg",
|
|
95
121
|
{
|
|
96
122
|
viewBox: "0 0 24 24",
|
|
@@ -122,7 +148,7 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
122
148
|
onClick: _cache[1] || (_cache[1] = (...args) => $setup.handleToggleSelectMode && $setup.handleToggleSelectMode(...args))
|
|
123
149
|
}, [
|
|
124
150
|
_renderSlot(_ctx.$slots, "select-icon", {}, () => [
|
|
125
|
-
_cache[
|
|
151
|
+
_cache[7] || (_cache[7] = _createElementVNode(
|
|
126
152
|
"svg",
|
|
127
153
|
{
|
|
128
154
|
viewBox: "0 0 1024 1024",
|
|
@@ -153,9 +179,9 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
153
179
|
onClick: _cache[2] || (_cache[2] = (...args) => $setup.handleToggleTheme && $setup.handleToggleTheme(...args))
|
|
154
180
|
}, [
|
|
155
181
|
_renderSlot(_ctx.$slots, "theme-icon", {}, () => [
|
|
156
|
-
$setup.theme === "light" ? (_openBlock(), _createElementBlock("svg", _hoisted_6, [..._cache[
|
|
182
|
+
$setup.theme === "light" ? (_openBlock(), _createElementBlock("svg", _hoisted_6, [..._cache[8] || (_cache[8] = [
|
|
157
183
|
_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)
|
|
158
|
-
])])) : $setup.theme === "dark" ? (_openBlock(), _createElementBlock("svg", _hoisted_7, [..._cache[
|
|
184
|
+
])])) : $setup.theme === "dark" ? (_openBlock(), _createElementBlock("svg", _hoisted_7, [..._cache[9] || (_cache[9] = [
|
|
159
185
|
_createElementVNode(
|
|
160
186
|
"path",
|
|
161
187
|
{ d: "M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" },
|
|
@@ -163,7 +189,7 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
163
189
|
-1
|
|
164
190
|
/* CACHED */
|
|
165
191
|
)
|
|
166
|
-
])])) : (_openBlock(), _createElementBlock("svg", _hoisted_8, [..._cache[
|
|
192
|
+
])])) : (_openBlock(), _createElementBlock("svg", _hoisted_8, [..._cache[10] || (_cache[10] = [
|
|
167
193
|
_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)
|
|
168
194
|
])]))
|
|
169
195
|
])
|
|
@@ -177,15 +203,71 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
177
203
|
/* TEXT */
|
|
178
204
|
),
|
|
179
205
|
_createElementVNode("div", _hoisted_10, [
|
|
206
|
+
_createElementVNode("button", {
|
|
207
|
+
class: "opencode-header-btn prompt-dock",
|
|
208
|
+
type: "button",
|
|
209
|
+
title: $setup.promptDockVisible ? "\u9690\u85CF\u5BF9\u8BDD\u6846" : "\u663E\u793A\u5BF9\u8BDD\u6846",
|
|
210
|
+
"aria-label": $setup.promptDockVisible ? "\u9690\u85CF\u5BF9\u8BDD\u6846" : "\u663E\u793A\u5BF9\u8BDD\u6846",
|
|
211
|
+
"aria-pressed": $setup.promptDockVisible,
|
|
212
|
+
onClick: _cache[3] || (_cache[3] = (...args) => $setup.handleTogglePromptDock && $setup.handleTogglePromptDock(...args))
|
|
213
|
+
}, [
|
|
214
|
+
_renderSlot(_ctx.$slots, "prompt-dock-icon", {}, () => [
|
|
215
|
+
_cache[11] || (_cache[11] = _createElementVNode(
|
|
216
|
+
"svg",
|
|
217
|
+
{
|
|
218
|
+
viewBox: "0 0 24 24",
|
|
219
|
+
width: "14",
|
|
220
|
+
height: "14",
|
|
221
|
+
fill: "none",
|
|
222
|
+
stroke: "currentColor",
|
|
223
|
+
"stroke-width": "2",
|
|
224
|
+
"aria-hidden": "true"
|
|
225
|
+
},
|
|
226
|
+
[
|
|
227
|
+
_createElementVNode("path", { d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z" })
|
|
228
|
+
],
|
|
229
|
+
-1
|
|
230
|
+
/* CACHED */
|
|
231
|
+
))
|
|
232
|
+
])
|
|
233
|
+
], 8, _hoisted_11),
|
|
234
|
+
_createElementVNode("button", {
|
|
235
|
+
class: "opencode-header-btn minimize",
|
|
236
|
+
type: "button",
|
|
237
|
+
title: $setup.minimized ? "\u5C55\u5F00" : "\u6700\u5C0F\u5316",
|
|
238
|
+
"aria-label": $setup.minimized ? "\u5C55\u5F00\u9762\u677F" : "\u6700\u5C0F\u5316\u9762\u677F",
|
|
239
|
+
"aria-pressed": $setup.minimized,
|
|
240
|
+
onClick: _cache[4] || (_cache[4] = (...args) => $setup.handleToggleMinimize && $setup.handleToggleMinimize(...args))
|
|
241
|
+
}, [
|
|
242
|
+
_renderSlot(_ctx.$slots, "minimize-icon", {}, () => [
|
|
243
|
+
$setup.minimized ? (_openBlock(), _createElementBlock("svg", _hoisted_13, [..._cache[12] || (_cache[12] = [
|
|
244
|
+
_createElementVNode(
|
|
245
|
+
"path",
|
|
246
|
+
{ d: "M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3" },
|
|
247
|
+
null,
|
|
248
|
+
-1
|
|
249
|
+
/* CACHED */
|
|
250
|
+
)
|
|
251
|
+
])])) : (_openBlock(), _createElementBlock("svg", _hoisted_14, [..._cache[13] || (_cache[13] = [
|
|
252
|
+
_createElementVNode(
|
|
253
|
+
"path",
|
|
254
|
+
{ d: "M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3" },
|
|
255
|
+
null,
|
|
256
|
+
-1
|
|
257
|
+
/* CACHED */
|
|
258
|
+
)
|
|
259
|
+
])]))
|
|
260
|
+
])
|
|
261
|
+
], 8, _hoisted_12),
|
|
180
262
|
_createElementVNode("button", {
|
|
181
263
|
class: "opencode-header-btn close",
|
|
182
264
|
type: "button",
|
|
183
265
|
title: "\u5173\u95ED",
|
|
184
266
|
"aria-label": "\u5173\u95ED\u9762\u677F",
|
|
185
|
-
onClick: _cache[
|
|
267
|
+
onClick: _cache[5] || (_cache[5] = (...args) => $setup.handleClose && $setup.handleClose(...args))
|
|
186
268
|
}, [
|
|
187
269
|
_renderSlot(_ctx.$slots, "close-icon", {}, () => [
|
|
188
|
-
_cache[
|
|
270
|
+
_cache[14] || (_cache[14] = _createElementVNode(
|
|
189
271
|
"svg",
|
|
190
272
|
{
|
|
191
273
|
viewBox: "0 0 24 24",
|
|
@@ -20,6 +20,8 @@ export interface OpenCodeWidgetContext {
|
|
|
20
20
|
showClearAll: Ref<boolean>;
|
|
21
21
|
open: Ref<boolean>;
|
|
22
22
|
thinking: Ref<boolean>;
|
|
23
|
+
minimized: Ref<boolean>;
|
|
24
|
+
promptDockVisible: Ref<boolean>;
|
|
23
25
|
iframeSource: Ref<string>;
|
|
24
26
|
buttonActive: Ref<boolean>;
|
|
25
27
|
sessionListTitle: Ref<string>;
|
|
@@ -29,6 +31,8 @@ export interface OpenCodeWidgetContext {
|
|
|
29
31
|
selectedElementItems: Ref<OpenCodeSelectedElementItem[]>;
|
|
30
32
|
handleToggle: () => void;
|
|
31
33
|
handleClose: () => void;
|
|
34
|
+
handleToggleMinimize: () => void;
|
|
35
|
+
handleTogglePromptDock: () => void;
|
|
32
36
|
handleToggleSessionList: () => void;
|
|
33
37
|
handleToggleTheme: () => void;
|
|
34
38
|
handleEmptyAction: () => void;
|
|
@@ -1 +1 @@
|
|
|
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)}}
|
|
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.minimized{width:300px;height:300px}.opencode-chat.minimized .opencode-iframe-container{margin-top:-146px}.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)}}
|
|
@@ -111,6 +111,8 @@ const __vue_sfc__ = /* @__PURE__ */ _defineComponent(__spreadProps(__spreadValue
|
|
|
111
111
|
sendMessageToIframe
|
|
112
112
|
});
|
|
113
113
|
const localSessionListCollapsed = ref(props.sessionListCollapsed);
|
|
114
|
+
const minimized = ref(false);
|
|
115
|
+
const promptDockVisible = ref(true);
|
|
114
116
|
watch(
|
|
115
117
|
() => props.sessionListCollapsed,
|
|
116
118
|
(val) => {
|
|
@@ -208,6 +210,16 @@ const __vue_sfc__ = /* @__PURE__ */ _defineComponent(__spreadProps(__spreadValue
|
|
|
208
210
|
emit("toggle-select-mode", false);
|
|
209
211
|
}
|
|
210
212
|
});
|
|
213
|
+
const handleToggleMinimize = () => {
|
|
214
|
+
minimized.value = !minimized.value;
|
|
215
|
+
promptDockVisible.value = !minimized.value;
|
|
216
|
+
sendMessageToIframe("prompt-dock-visibility-change", { visible: promptDockVisible.value });
|
|
217
|
+
sendMessageToIframe("minimize-state-change", { minimized: minimized.value });
|
|
218
|
+
};
|
|
219
|
+
const handleTogglePromptDock = () => {
|
|
220
|
+
promptDockVisible.value = !promptDockVisible.value;
|
|
221
|
+
sendMessageToIframe("prompt-dock-visibility-change", { visible: promptDockVisible.value });
|
|
222
|
+
};
|
|
211
223
|
provideOpenCodeWidgetContext({
|
|
212
224
|
theme: toRef(props, "theme"),
|
|
213
225
|
resolvedTheme,
|
|
@@ -228,6 +240,8 @@ const __vue_sfc__ = /* @__PURE__ */ _defineComponent(__spreadProps(__spreadValue
|
|
|
228
240
|
showClearAll: toRef(props, "showClearAll"),
|
|
229
241
|
open: toRef(props, "open"),
|
|
230
242
|
thinking: toRef(props, "thinking"),
|
|
243
|
+
minimized,
|
|
244
|
+
promptDockVisible,
|
|
231
245
|
iframeSource,
|
|
232
246
|
buttonActive,
|
|
233
247
|
sessionListTitle,
|
|
@@ -237,6 +251,8 @@ const __vue_sfc__ = /* @__PURE__ */ _defineComponent(__spreadProps(__spreadValue
|
|
|
237
251
|
selectedElementItems,
|
|
238
252
|
handleToggle,
|
|
239
253
|
handleClose,
|
|
254
|
+
handleToggleMinimize,
|
|
255
|
+
handleTogglePromptDock,
|
|
240
256
|
handleToggleSessionList,
|
|
241
257
|
handleToggleTheme,
|
|
242
258
|
handleEmptyAction,
|
|
@@ -257,7 +273,7 @@ const __vue_sfc__ = /* @__PURE__ */ _defineComponent(__spreadProps(__spreadValue
|
|
|
257
273
|
return dialogResolve;
|
|
258
274
|
}, set dialogResolve(v) {
|
|
259
275
|
dialogResolve = v;
|
|
260
|
-
}, showConfirmDialog, handleDialogConfirm, handleDialogCancel, frameRef, sendMessageToIframe, handleFrameLoaded, localSessionListCollapsed, buttonActive, containerClasses, iframeSource, sessionListTitle, resolvedTheme, handleClose, handleEmptyAction, handleToggle, handleToggleSessionList, handleToggleTheme, sessionItems, handleCreateSession, handleDeleteSession, handleSelectSession, bubbleVisible, hasSelectedElements, selectedElementItems, handleClearSelectedNodes, handleClickSelectedNode, handleRemoveSelectedNode, handleToggleSelectMode, highlightVisible, highlightStyle, tooltipVisible, tooltipStyle, tooltipContent, Frame, Header, SelectHint, SelectedNodes, SessionList, Trigger };
|
|
276
|
+
}, showConfirmDialog, handleDialogConfirm, handleDialogCancel, frameRef, sendMessageToIframe, handleFrameLoaded, localSessionListCollapsed, minimized, promptDockVisible, buttonActive, containerClasses, iframeSource, sessionListTitle, resolvedTheme, handleClose, handleEmptyAction, handleToggle, handleToggleSessionList, handleToggleTheme, sessionItems, handleCreateSession, handleDeleteSession, handleSelectSession, bubbleVisible, hasSelectedElements, selectedElementItems, handleClearSelectedNodes, handleClickSelectedNode, handleRemoveSelectedNode, handleToggleSelectMode, highlightVisible, highlightStyle, tooltipVisible, tooltipStyle, tooltipContent, handleToggleMinimize, handleTogglePromptDock, Frame, Header, SelectHint, SelectedNodes, SessionList, Trigger };
|
|
261
277
|
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
262
278
|
return __returned__;
|
|
263
279
|
}
|
|
@@ -316,7 +332,7 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
316
332
|
_withDirectives(_createElementVNode(
|
|
317
333
|
"div",
|
|
318
334
|
{
|
|
319
|
-
class: _normalizeClass(["opencode-chat", { open: $props.open }])
|
|
335
|
+
class: _normalizeClass(["opencode-chat", { open: $props.open, minimized: $setup.minimized }])
|
|
320
336
|
},
|
|
321
337
|
[
|
|
322
338
|
_createVNode(
|
|
@@ -137,7 +137,7 @@ var __vue_sfc__$5 = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
137
137
|
__name: "Header",
|
|
138
138
|
setup(__props, { expose: __expose }) {
|
|
139
139
|
__expose();
|
|
140
|
-
const { title, sessionListTitle, sessionListCollapsed, selectMode, selectEnabled, theme, resolvedTheme, handleToggleSessionList, handleToggleSelectMode, handleToggleTheme, handleClose } = useOpenCodeWidgetContext();
|
|
140
|
+
const { title, sessionListTitle, sessionListCollapsed, selectMode, selectEnabled, theme, resolvedTheme, minimized, promptDockVisible, handleToggleSessionList, handleToggleSelectMode, handleToggleTheme, handleClose, handleToggleMinimize, handleTogglePromptDock } = useOpenCodeWidgetContext();
|
|
141
141
|
const __returned__ = {
|
|
142
142
|
title,
|
|
143
143
|
sessionListTitle,
|
|
@@ -146,10 +146,14 @@ var __vue_sfc__$5 = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
146
146
|
selectEnabled,
|
|
147
147
|
theme,
|
|
148
148
|
resolvedTheme,
|
|
149
|
+
minimized,
|
|
150
|
+
promptDockVisible,
|
|
149
151
|
handleToggleSessionList,
|
|
150
152
|
handleToggleSelectMode,
|
|
151
153
|
handleToggleTheme,
|
|
152
154
|
handleClose,
|
|
155
|
+
handleToggleMinimize,
|
|
156
|
+
handleTogglePromptDock,
|
|
153
157
|
themeIconTitle: (0, vue.computed)(() => {
|
|
154
158
|
return `\u4E3B\u9898: ${{
|
|
155
159
|
auto: "自动",
|
|
@@ -213,6 +217,36 @@ var _hoisted_8$2 = {
|
|
|
213
217
|
};
|
|
214
218
|
var _hoisted_9$2 = { class: "opencode-chat-header-title" };
|
|
215
219
|
var _hoisted_10 = { class: "opencode-chat-header-actions" };
|
|
220
|
+
var _hoisted_11 = [
|
|
221
|
+
"title",
|
|
222
|
+
"aria-label",
|
|
223
|
+
"aria-pressed"
|
|
224
|
+
];
|
|
225
|
+
var _hoisted_12 = [
|
|
226
|
+
"title",
|
|
227
|
+
"aria-label",
|
|
228
|
+
"aria-pressed"
|
|
229
|
+
];
|
|
230
|
+
var _hoisted_13 = {
|
|
231
|
+
key: 0,
|
|
232
|
+
viewBox: "0 0 24 24",
|
|
233
|
+
width: "14",
|
|
234
|
+
height: "14",
|
|
235
|
+
fill: "none",
|
|
236
|
+
stroke: "currentColor",
|
|
237
|
+
"stroke-width": "2",
|
|
238
|
+
"aria-hidden": "true"
|
|
239
|
+
};
|
|
240
|
+
var _hoisted_14 = {
|
|
241
|
+
key: 1,
|
|
242
|
+
viewBox: "0 0 24 24",
|
|
243
|
+
width: "14",
|
|
244
|
+
height: "14",
|
|
245
|
+
fill: "none",
|
|
246
|
+
stroke: "currentColor",
|
|
247
|
+
"stroke-width": "2",
|
|
248
|
+
"aria-hidden": "true"
|
|
249
|
+
};
|
|
216
250
|
function __vue_render__$5(_ctx, _cache, $props, $setup, $data, $options) {
|
|
217
251
|
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$5, [
|
|
218
252
|
(0, vue.createElementVNode)("div", _hoisted_2$3, [
|
|
@@ -223,7 +257,7 @@ function __vue_render__$5(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
223
257
|
"aria-label": $setup.sessionListTitle,
|
|
224
258
|
"aria-expanded": !$setup.sessionListCollapsed,
|
|
225
259
|
onClick: _cache[0] || (_cache[0] = (...args) => $setup.handleToggleSessionList && $setup.handleToggleSessionList(...args))
|
|
226
|
-
}, [(0, vue.renderSlot)(_ctx.$slots, "session-toggle-icon", {}, () => [_cache[
|
|
260
|
+
}, [(0, vue.renderSlot)(_ctx.$slots, "session-toggle-icon", {}, () => [_cache[6] || (_cache[6] = (0, vue.createElementVNode)("svg", {
|
|
227
261
|
viewBox: "0 0 24 24",
|
|
228
262
|
width: "16",
|
|
229
263
|
height: "16",
|
|
@@ -243,7 +277,7 @@ function __vue_render__$5(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
243
277
|
"aria-pressed": $setup.selectMode,
|
|
244
278
|
disabled: !$setup.selectEnabled,
|
|
245
279
|
onClick: _cache[1] || (_cache[1] = (...args) => $setup.handleToggleSelectMode && $setup.handleToggleSelectMode(...args))
|
|
246
|
-
}, [(0, vue.renderSlot)(_ctx.$slots, "select-icon", {}, () => [_cache[
|
|
280
|
+
}, [(0, vue.renderSlot)(_ctx.$slots, "select-icon", {}, () => [_cache[7] || (_cache[7] = (0, vue.createElementVNode)("svg", {
|
|
247
281
|
viewBox: "0 0 1024 1024",
|
|
248
282
|
width: "16",
|
|
249
283
|
height: "16",
|
|
@@ -261,24 +295,50 @@ function __vue_render__$5(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
261
295
|
title: $setup.themeIconTitle,
|
|
262
296
|
"aria-label": $setup.themeIconLabel,
|
|
263
297
|
onClick: _cache[2] || (_cache[2] = (...args) => $setup.handleToggleTheme && $setup.handleToggleTheme(...args))
|
|
264
|
-
}, [(0, vue.renderSlot)(_ctx.$slots, "theme-icon", {}, () => [$setup.theme === "light" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", _hoisted_6$3, [..._cache[
|
|
298
|
+
}, [(0, vue.renderSlot)(_ctx.$slots, "theme-icon", {}, () => [$setup.theme === "light" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", _hoisted_6$3, [..._cache[8] || (_cache[8] = [(0, vue.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" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", _hoisted_7$2, [..._cache[9] || (_cache[9] = [(0, vue.createElementVNode)("path", { d: "M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" }, null, -1)])])) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", _hoisted_8$2, [..._cache[10] || (_cache[10] = [(0, vue.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)
|
|
265
299
|
]),
|
|
266
300
|
(0, vue.createElementVNode)("span", _hoisted_9$2, (0, vue.toDisplayString)($setup.title), 1),
|
|
267
|
-
(0, vue.createElementVNode)("div", _hoisted_10, [
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
301
|
+
(0, vue.createElementVNode)("div", _hoisted_10, [
|
|
302
|
+
(0, vue.createElementVNode)("button", {
|
|
303
|
+
class: "opencode-header-btn prompt-dock",
|
|
304
|
+
type: "button",
|
|
305
|
+
title: $setup.promptDockVisible ? "隐藏对话框" : "显示对话框",
|
|
306
|
+
"aria-label": $setup.promptDockVisible ? "隐藏对话框" : "显示对话框",
|
|
307
|
+
"aria-pressed": $setup.promptDockVisible,
|
|
308
|
+
onClick: _cache[3] || (_cache[3] = (...args) => $setup.handleTogglePromptDock && $setup.handleTogglePromptDock(...args))
|
|
309
|
+
}, [(0, vue.renderSlot)(_ctx.$slots, "prompt-dock-icon", {}, () => [_cache[11] || (_cache[11] = (0, vue.createElementVNode)("svg", {
|
|
310
|
+
viewBox: "0 0 24 24",
|
|
311
|
+
width: "14",
|
|
312
|
+
height: "14",
|
|
313
|
+
fill: "none",
|
|
314
|
+
stroke: "currentColor",
|
|
315
|
+
"stroke-width": "2",
|
|
316
|
+
"aria-hidden": "true"
|
|
317
|
+
}, [(0, vue.createElementVNode)("path", { d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z" })], -1))])], 8, _hoisted_11),
|
|
318
|
+
(0, vue.createElementVNode)("button", {
|
|
319
|
+
class: "opencode-header-btn minimize",
|
|
320
|
+
type: "button",
|
|
321
|
+
title: $setup.minimized ? "展开" : "最小化",
|
|
322
|
+
"aria-label": $setup.minimized ? "展开面板" : "最小化面板",
|
|
323
|
+
"aria-pressed": $setup.minimized,
|
|
324
|
+
onClick: _cache[4] || (_cache[4] = (...args) => $setup.handleToggleMinimize && $setup.handleToggleMinimize(...args))
|
|
325
|
+
}, [(0, vue.renderSlot)(_ctx.$slots, "minimize-icon", {}, () => [$setup.minimized ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", _hoisted_13, [..._cache[12] || (_cache[12] = [(0, vue.createElementVNode)("path", { d: "M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3" }, null, -1)])])) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", _hoisted_14, [..._cache[13] || (_cache[13] = [(0, vue.createElementVNode)("path", { d: "M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3" }, null, -1)])]))])], 8, _hoisted_12),
|
|
326
|
+
(0, vue.createElementVNode)("button", {
|
|
327
|
+
class: "opencode-header-btn close",
|
|
328
|
+
type: "button",
|
|
329
|
+
title: "关闭",
|
|
330
|
+
"aria-label": "关闭面板",
|
|
331
|
+
onClick: _cache[5] || (_cache[5] = (...args) => $setup.handleClose && $setup.handleClose(...args))
|
|
332
|
+
}, [(0, vue.renderSlot)(_ctx.$slots, "close-icon", {}, () => [_cache[14] || (_cache[14] = (0, vue.createElementVNode)("svg", {
|
|
333
|
+
viewBox: "0 0 24 24",
|
|
334
|
+
width: "14",
|
|
335
|
+
height: "14",
|
|
336
|
+
fill: "none",
|
|
337
|
+
stroke: "currentColor",
|
|
338
|
+
"stroke-width": "2",
|
|
339
|
+
"aria-hidden": "true"
|
|
340
|
+
}, [(0, vue.createElementVNode)("path", { d: "M18 6L6 18M6 6l12 12" })], -1))])])
|
|
341
|
+
])
|
|
282
342
|
]);
|
|
283
343
|
}
|
|
284
344
|
__vue_sfc__$5.render = __vue_render__$5;
|
|
@@ -1383,6 +1443,8 @@ var __vue_sfc__ = /* @__PURE__ */ (0, vue.defineComponent)(__spreadProps(__sprea
|
|
|
1383
1443
|
sendMessageToIframe
|
|
1384
1444
|
});
|
|
1385
1445
|
const localSessionListCollapsed = (0, vue.ref)(props.sessionListCollapsed);
|
|
1446
|
+
const minimized = (0, vue.ref)(false);
|
|
1447
|
+
const promptDockVisible = (0, vue.ref)(true);
|
|
1386
1448
|
(0, vue.watch)(() => props.sessionListCollapsed, (val) => {
|
|
1387
1449
|
localSessionListCollapsed.value = val;
|
|
1388
1450
|
});
|
|
@@ -1458,6 +1520,16 @@ var __vue_sfc__ = /* @__PURE__ */ (0, vue.defineComponent)(__spreadProps(__sprea
|
|
|
1458
1520
|
emit("toggle-select-mode", false);
|
|
1459
1521
|
}
|
|
1460
1522
|
});
|
|
1523
|
+
const handleToggleMinimize = () => {
|
|
1524
|
+
minimized.value = !minimized.value;
|
|
1525
|
+
promptDockVisible.value = !minimized.value;
|
|
1526
|
+
sendMessageToIframe("prompt-dock-visibility-change", { visible: promptDockVisible.value });
|
|
1527
|
+
sendMessageToIframe("minimize-state-change", { minimized: minimized.value });
|
|
1528
|
+
};
|
|
1529
|
+
const handleTogglePromptDock = () => {
|
|
1530
|
+
promptDockVisible.value = !promptDockVisible.value;
|
|
1531
|
+
sendMessageToIframe("prompt-dock-visibility-change", { visible: promptDockVisible.value });
|
|
1532
|
+
};
|
|
1461
1533
|
provideOpenCodeWidgetContext({
|
|
1462
1534
|
theme: (0, vue.toRef)(props, "theme"),
|
|
1463
1535
|
resolvedTheme,
|
|
@@ -1478,6 +1550,8 @@ var __vue_sfc__ = /* @__PURE__ */ (0, vue.defineComponent)(__spreadProps(__sprea
|
|
|
1478
1550
|
showClearAll: (0, vue.toRef)(props, "showClearAll"),
|
|
1479
1551
|
open: (0, vue.toRef)(props, "open"),
|
|
1480
1552
|
thinking: (0, vue.toRef)(props, "thinking"),
|
|
1553
|
+
minimized,
|
|
1554
|
+
promptDockVisible,
|
|
1481
1555
|
iframeSource,
|
|
1482
1556
|
buttonActive,
|
|
1483
1557
|
sessionListTitle,
|
|
@@ -1487,6 +1561,8 @@ var __vue_sfc__ = /* @__PURE__ */ (0, vue.defineComponent)(__spreadProps(__sprea
|
|
|
1487
1561
|
selectedElementItems,
|
|
1488
1562
|
handleToggle,
|
|
1489
1563
|
handleClose,
|
|
1564
|
+
handleToggleMinimize,
|
|
1565
|
+
handleTogglePromptDock,
|
|
1490
1566
|
handleToggleSessionList,
|
|
1491
1567
|
handleToggleTheme,
|
|
1492
1568
|
handleEmptyAction,
|
|
@@ -1528,6 +1604,8 @@ var __vue_sfc__ = /* @__PURE__ */ (0, vue.defineComponent)(__spreadProps(__sprea
|
|
|
1528
1604
|
sendMessageToIframe,
|
|
1529
1605
|
handleFrameLoaded,
|
|
1530
1606
|
localSessionListCollapsed,
|
|
1607
|
+
minimized,
|
|
1608
|
+
promptDockVisible,
|
|
1531
1609
|
buttonActive,
|
|
1532
1610
|
containerClasses,
|
|
1533
1611
|
iframeSource,
|
|
@@ -1554,6 +1632,8 @@ var __vue_sfc__ = /* @__PURE__ */ (0, vue.defineComponent)(__spreadProps(__sprea
|
|
|
1554
1632
|
tooltipVisible,
|
|
1555
1633
|
tooltipStyle,
|
|
1556
1634
|
tooltipContent,
|
|
1635
|
+
handleToggleMinimize,
|
|
1636
|
+
handleTogglePromptDock,
|
|
1557
1637
|
Frame: Frame_vue_default,
|
|
1558
1638
|
Header: Header_vue_default,
|
|
1559
1639
|
SelectHint: SelectHint_vue_default,
|
|
@@ -1600,7 +1680,10 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
1600
1680
|
key: "0"
|
|
1601
1681
|
} : void 0]), 1024),
|
|
1602
1682
|
(0, vue.createCommentVNode)(" <SelectedBubbles v-if=\"bubbleVisible\" /> "),
|
|
1603
|
-
(0, vue.withDirectives)((0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(["opencode-chat", {
|
|
1683
|
+
(0, vue.withDirectives)((0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(["opencode-chat", {
|
|
1684
|
+
open: $props.open,
|
|
1685
|
+
minimized: $setup.minimized
|
|
1686
|
+
}]) }, [
|
|
1604
1687
|
(0, vue.createVNode)($setup["Header"], null, (0, vue.createSlots)({ _: 2 }, [
|
|
1605
1688
|
$setup.slots["session-toggle-icon"] ? {
|
|
1606
1689
|
name: "session-toggle-icon",
|
|
@@ -1679,7 +1762,7 @@ __vue_sfc__.render = __vue_render__;
|
|
|
1679
1762
|
var open_code_widget_default = __vue_sfc__;
|
|
1680
1763
|
//#endregion
|
|
1681
1764
|
//#region es/index.js
|
|
1682
|
-
var version = "1.0.
|
|
1765
|
+
var version = "1.0.21";
|
|
1683
1766
|
function install(app, options) {
|
|
1684
1767
|
[open_code_widget_default].forEach((item) => {
|
|
1685
1768
|
if (item.install) app.use(item, options);
|
|
@@ -110,7 +110,7 @@ var __vue_sfc__$5 = /* @__PURE__ */ defineComponent({
|
|
|
110
110
|
__name: "Header",
|
|
111
111
|
setup(__props, { expose: __expose }) {
|
|
112
112
|
__expose();
|
|
113
|
-
const { title, sessionListTitle, sessionListCollapsed, selectMode, selectEnabled, theme, resolvedTheme, handleToggleSessionList, handleToggleSelectMode, handleToggleTheme, handleClose } = useOpenCodeWidgetContext();
|
|
113
|
+
const { title, sessionListTitle, sessionListCollapsed, selectMode, selectEnabled, theme, resolvedTheme, minimized, promptDockVisible, handleToggleSessionList, handleToggleSelectMode, handleToggleTheme, handleClose, handleToggleMinimize, handleTogglePromptDock } = useOpenCodeWidgetContext();
|
|
114
114
|
const __returned__ = {
|
|
115
115
|
title,
|
|
116
116
|
sessionListTitle,
|
|
@@ -119,10 +119,14 @@ var __vue_sfc__$5 = /* @__PURE__ */ defineComponent({
|
|
|
119
119
|
selectEnabled,
|
|
120
120
|
theme,
|
|
121
121
|
resolvedTheme,
|
|
122
|
+
minimized,
|
|
123
|
+
promptDockVisible,
|
|
122
124
|
handleToggleSessionList,
|
|
123
125
|
handleToggleSelectMode,
|
|
124
126
|
handleToggleTheme,
|
|
125
127
|
handleClose,
|
|
128
|
+
handleToggleMinimize,
|
|
129
|
+
handleTogglePromptDock,
|
|
126
130
|
themeIconTitle: computed(() => {
|
|
127
131
|
return `\u4E3B\u9898: ${{
|
|
128
132
|
auto: "自动",
|
|
@@ -186,6 +190,36 @@ var _hoisted_8$2 = {
|
|
|
186
190
|
};
|
|
187
191
|
var _hoisted_9$2 = { class: "opencode-chat-header-title" };
|
|
188
192
|
var _hoisted_10 = { class: "opencode-chat-header-actions" };
|
|
193
|
+
var _hoisted_11 = [
|
|
194
|
+
"title",
|
|
195
|
+
"aria-label",
|
|
196
|
+
"aria-pressed"
|
|
197
|
+
];
|
|
198
|
+
var _hoisted_12 = [
|
|
199
|
+
"title",
|
|
200
|
+
"aria-label",
|
|
201
|
+
"aria-pressed"
|
|
202
|
+
];
|
|
203
|
+
var _hoisted_13 = {
|
|
204
|
+
key: 0,
|
|
205
|
+
viewBox: "0 0 24 24",
|
|
206
|
+
width: "14",
|
|
207
|
+
height: "14",
|
|
208
|
+
fill: "none",
|
|
209
|
+
stroke: "currentColor",
|
|
210
|
+
"stroke-width": "2",
|
|
211
|
+
"aria-hidden": "true"
|
|
212
|
+
};
|
|
213
|
+
var _hoisted_14 = {
|
|
214
|
+
key: 1,
|
|
215
|
+
viewBox: "0 0 24 24",
|
|
216
|
+
width: "14",
|
|
217
|
+
height: "14",
|
|
218
|
+
fill: "none",
|
|
219
|
+
stroke: "currentColor",
|
|
220
|
+
"stroke-width": "2",
|
|
221
|
+
"aria-hidden": "true"
|
|
222
|
+
};
|
|
189
223
|
function __vue_render__$5(_ctx, _cache, $props, $setup, $data, $options) {
|
|
190
224
|
return openBlock(), createElementBlock("div", _hoisted_1$5, [
|
|
191
225
|
createElementVNode("div", _hoisted_2$3, [
|
|
@@ -196,7 +230,7 @@ function __vue_render__$5(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
196
230
|
"aria-label": $setup.sessionListTitle,
|
|
197
231
|
"aria-expanded": !$setup.sessionListCollapsed,
|
|
198
232
|
onClick: _cache[0] || (_cache[0] = (...args) => $setup.handleToggleSessionList && $setup.handleToggleSessionList(...args))
|
|
199
|
-
}, [renderSlot(_ctx.$slots, "session-toggle-icon", {}, () => [_cache[
|
|
233
|
+
}, [renderSlot(_ctx.$slots, "session-toggle-icon", {}, () => [_cache[6] || (_cache[6] = createElementVNode("svg", {
|
|
200
234
|
viewBox: "0 0 24 24",
|
|
201
235
|
width: "16",
|
|
202
236
|
height: "16",
|
|
@@ -216,7 +250,7 @@ function __vue_render__$5(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
216
250
|
"aria-pressed": $setup.selectMode,
|
|
217
251
|
disabled: !$setup.selectEnabled,
|
|
218
252
|
onClick: _cache[1] || (_cache[1] = (...args) => $setup.handleToggleSelectMode && $setup.handleToggleSelectMode(...args))
|
|
219
|
-
}, [renderSlot(_ctx.$slots, "select-icon", {}, () => [_cache[
|
|
253
|
+
}, [renderSlot(_ctx.$slots, "select-icon", {}, () => [_cache[7] || (_cache[7] = createElementVNode("svg", {
|
|
220
254
|
viewBox: "0 0 1024 1024",
|
|
221
255
|
width: "16",
|
|
222
256
|
height: "16",
|
|
@@ -234,24 +268,50 @@ function __vue_render__$5(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
234
268
|
title: $setup.themeIconTitle,
|
|
235
269
|
"aria-label": $setup.themeIconLabel,
|
|
236
270
|
onClick: _cache[2] || (_cache[2] = (...args) => $setup.handleToggleTheme && $setup.handleToggleTheme(...args))
|
|
237
|
-
}, [renderSlot(_ctx.$slots, "theme-icon", {}, () => [$setup.theme === "light" ? (openBlock(), createElementBlock("svg", _hoisted_6$3, [..._cache[
|
|
271
|
+
}, [renderSlot(_ctx.$slots, "theme-icon", {}, () => [$setup.theme === "light" ? (openBlock(), createElementBlock("svg", _hoisted_6$3, [..._cache[8] || (_cache[8] = [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[9] || (_cache[9] = [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[10] || (_cache[10] = [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)
|
|
238
272
|
]),
|
|
239
273
|
createElementVNode("span", _hoisted_9$2, toDisplayString($setup.title), 1),
|
|
240
|
-
createElementVNode("div", _hoisted_10, [
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
274
|
+
createElementVNode("div", _hoisted_10, [
|
|
275
|
+
createElementVNode("button", {
|
|
276
|
+
class: "opencode-header-btn prompt-dock",
|
|
277
|
+
type: "button",
|
|
278
|
+
title: $setup.promptDockVisible ? "隐藏对话框" : "显示对话框",
|
|
279
|
+
"aria-label": $setup.promptDockVisible ? "隐藏对话框" : "显示对话框",
|
|
280
|
+
"aria-pressed": $setup.promptDockVisible,
|
|
281
|
+
onClick: _cache[3] || (_cache[3] = (...args) => $setup.handleTogglePromptDock && $setup.handleTogglePromptDock(...args))
|
|
282
|
+
}, [renderSlot(_ctx.$slots, "prompt-dock-icon", {}, () => [_cache[11] || (_cache[11] = createElementVNode("svg", {
|
|
283
|
+
viewBox: "0 0 24 24",
|
|
284
|
+
width: "14",
|
|
285
|
+
height: "14",
|
|
286
|
+
fill: "none",
|
|
287
|
+
stroke: "currentColor",
|
|
288
|
+
"stroke-width": "2",
|
|
289
|
+
"aria-hidden": "true"
|
|
290
|
+
}, [createElementVNode("path", { d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z" })], -1))])], 8, _hoisted_11),
|
|
291
|
+
createElementVNode("button", {
|
|
292
|
+
class: "opencode-header-btn minimize",
|
|
293
|
+
type: "button",
|
|
294
|
+
title: $setup.minimized ? "展开" : "最小化",
|
|
295
|
+
"aria-label": $setup.minimized ? "展开面板" : "最小化面板",
|
|
296
|
+
"aria-pressed": $setup.minimized,
|
|
297
|
+
onClick: _cache[4] || (_cache[4] = (...args) => $setup.handleToggleMinimize && $setup.handleToggleMinimize(...args))
|
|
298
|
+
}, [renderSlot(_ctx.$slots, "minimize-icon", {}, () => [$setup.minimized ? (openBlock(), createElementBlock("svg", _hoisted_13, [..._cache[12] || (_cache[12] = [createElementVNode("path", { d: "M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3" }, null, -1)])])) : (openBlock(), createElementBlock("svg", _hoisted_14, [..._cache[13] || (_cache[13] = [createElementVNode("path", { d: "M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3" }, null, -1)])]))])], 8, _hoisted_12),
|
|
299
|
+
createElementVNode("button", {
|
|
300
|
+
class: "opencode-header-btn close",
|
|
301
|
+
type: "button",
|
|
302
|
+
title: "关闭",
|
|
303
|
+
"aria-label": "关闭面板",
|
|
304
|
+
onClick: _cache[5] || (_cache[5] = (...args) => $setup.handleClose && $setup.handleClose(...args))
|
|
305
|
+
}, [renderSlot(_ctx.$slots, "close-icon", {}, () => [_cache[14] || (_cache[14] = createElementVNode("svg", {
|
|
306
|
+
viewBox: "0 0 24 24",
|
|
307
|
+
width: "14",
|
|
308
|
+
height: "14",
|
|
309
|
+
fill: "none",
|
|
310
|
+
stroke: "currentColor",
|
|
311
|
+
"stroke-width": "2",
|
|
312
|
+
"aria-hidden": "true"
|
|
313
|
+
}, [createElementVNode("path", { d: "M18 6L6 18M6 6l12 12" })], -1))])])
|
|
314
|
+
])
|
|
255
315
|
]);
|
|
256
316
|
}
|
|
257
317
|
__vue_sfc__$5.render = __vue_render__$5;
|
|
@@ -1356,6 +1416,8 @@ var __vue_sfc__ = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
|
|
|
1356
1416
|
sendMessageToIframe
|
|
1357
1417
|
});
|
|
1358
1418
|
const localSessionListCollapsed = ref(props.sessionListCollapsed);
|
|
1419
|
+
const minimized = ref(false);
|
|
1420
|
+
const promptDockVisible = ref(true);
|
|
1359
1421
|
watch(() => props.sessionListCollapsed, (val) => {
|
|
1360
1422
|
localSessionListCollapsed.value = val;
|
|
1361
1423
|
});
|
|
@@ -1431,6 +1493,16 @@ var __vue_sfc__ = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
|
|
|
1431
1493
|
emit("toggle-select-mode", false);
|
|
1432
1494
|
}
|
|
1433
1495
|
});
|
|
1496
|
+
const handleToggleMinimize = () => {
|
|
1497
|
+
minimized.value = !minimized.value;
|
|
1498
|
+
promptDockVisible.value = !minimized.value;
|
|
1499
|
+
sendMessageToIframe("prompt-dock-visibility-change", { visible: promptDockVisible.value });
|
|
1500
|
+
sendMessageToIframe("minimize-state-change", { minimized: minimized.value });
|
|
1501
|
+
};
|
|
1502
|
+
const handleTogglePromptDock = () => {
|
|
1503
|
+
promptDockVisible.value = !promptDockVisible.value;
|
|
1504
|
+
sendMessageToIframe("prompt-dock-visibility-change", { visible: promptDockVisible.value });
|
|
1505
|
+
};
|
|
1434
1506
|
provideOpenCodeWidgetContext({
|
|
1435
1507
|
theme: toRef(props, "theme"),
|
|
1436
1508
|
resolvedTheme,
|
|
@@ -1451,6 +1523,8 @@ var __vue_sfc__ = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
|
|
|
1451
1523
|
showClearAll: toRef(props, "showClearAll"),
|
|
1452
1524
|
open: toRef(props, "open"),
|
|
1453
1525
|
thinking: toRef(props, "thinking"),
|
|
1526
|
+
minimized,
|
|
1527
|
+
promptDockVisible,
|
|
1454
1528
|
iframeSource,
|
|
1455
1529
|
buttonActive,
|
|
1456
1530
|
sessionListTitle,
|
|
@@ -1460,6 +1534,8 @@ var __vue_sfc__ = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
|
|
|
1460
1534
|
selectedElementItems,
|
|
1461
1535
|
handleToggle,
|
|
1462
1536
|
handleClose,
|
|
1537
|
+
handleToggleMinimize,
|
|
1538
|
+
handleTogglePromptDock,
|
|
1463
1539
|
handleToggleSessionList,
|
|
1464
1540
|
handleToggleTheme,
|
|
1465
1541
|
handleEmptyAction,
|
|
@@ -1501,6 +1577,8 @@ var __vue_sfc__ = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
|
|
|
1501
1577
|
sendMessageToIframe,
|
|
1502
1578
|
handleFrameLoaded,
|
|
1503
1579
|
localSessionListCollapsed,
|
|
1580
|
+
minimized,
|
|
1581
|
+
promptDockVisible,
|
|
1504
1582
|
buttonActive,
|
|
1505
1583
|
containerClasses,
|
|
1506
1584
|
iframeSource,
|
|
@@ -1527,6 +1605,8 @@ var __vue_sfc__ = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
|
|
|
1527
1605
|
tooltipVisible,
|
|
1528
1606
|
tooltipStyle,
|
|
1529
1607
|
tooltipContent,
|
|
1608
|
+
handleToggleMinimize,
|
|
1609
|
+
handleTogglePromptDock,
|
|
1530
1610
|
Frame: Frame_vue_default,
|
|
1531
1611
|
Header: Header_vue_default,
|
|
1532
1612
|
SelectHint: SelectHint_vue_default,
|
|
@@ -1573,7 +1653,10 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
1573
1653
|
key: "0"
|
|
1574
1654
|
} : void 0]), 1024),
|
|
1575
1655
|
createCommentVNode(" <SelectedBubbles v-if=\"bubbleVisible\" /> "),
|
|
1576
|
-
withDirectives(createElementVNode("div", { class: normalizeClass(["opencode-chat", {
|
|
1656
|
+
withDirectives(createElementVNode("div", { class: normalizeClass(["opencode-chat", {
|
|
1657
|
+
open: $props.open,
|
|
1658
|
+
minimized: $setup.minimized
|
|
1659
|
+
}]) }, [
|
|
1577
1660
|
createVNode($setup["Header"], null, createSlots({ _: 2 }, [
|
|
1578
1661
|
$setup.slots["session-toggle-icon"] ? {
|
|
1579
1662
|
name: "session-toggle-icon",
|
|
@@ -1652,7 +1735,7 @@ __vue_sfc__.render = __vue_render__;
|
|
|
1652
1735
|
var open_code_widget_default = __vue_sfc__;
|
|
1653
1736
|
//#endregion
|
|
1654
1737
|
//#region es/index.js
|
|
1655
|
-
var version = "1.0.
|
|
1738
|
+
var version = "1.0.21";
|
|
1656
1739
|
function install(app, options) {
|
|
1657
1740
|
[open_code_widget_default].forEach((item) => {
|
|
1658
1741
|
if (item.install) app.use(item, options);
|
package/lib/components.css
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
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)}}
|
|
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.minimized{width:300px;height:300px}.opencode-chat.minimized .opencode-iframe-container{margin-top:-146px}.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)}}
|
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.
|
|
3
|
+
declare const version = "1.0.21";
|
|
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.
|
|
37
|
+
const version = "1.0.21";
|
|
38
38
|
function install(app, options) {
|
|
39
39
|
const components = [
|
|
40
40
|
import_open_code_widget.default
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
declare var __VLS_1: {}, __VLS_3: {}, __VLS_5: {}, __VLS_7: {};
|
|
1
|
+
declare var __VLS_1: {}, __VLS_3: {}, __VLS_5: {}, __VLS_7: {}, __VLS_9: {}, __VLS_11: {};
|
|
2
2
|
type __VLS_Slots = {} & {
|
|
3
3
|
'session-toggle-icon'?: (props: typeof __VLS_1) => any;
|
|
4
4
|
} & {
|
|
@@ -6,7 +6,11 @@ type __VLS_Slots = {} & {
|
|
|
6
6
|
} & {
|
|
7
7
|
'theme-icon'?: (props: typeof __VLS_5) => any;
|
|
8
8
|
} & {
|
|
9
|
-
'
|
|
9
|
+
'prompt-dock-icon'?: (props: typeof __VLS_7) => any;
|
|
10
|
+
} & {
|
|
11
|
+
'minimize-icon'?: (props: typeof __VLS_9) => any;
|
|
12
|
+
} & {
|
|
13
|
+
'close-icon'?: (props: typeof __VLS_11) => any;
|
|
10
14
|
};
|
|
11
15
|
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
16
|
declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
|
|
@@ -37,10 +37,14 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)({
|
|
|
37
37
|
selectEnabled,
|
|
38
38
|
theme,
|
|
39
39
|
resolvedTheme,
|
|
40
|
+
minimized,
|
|
41
|
+
promptDockVisible,
|
|
40
42
|
handleToggleSessionList,
|
|
41
43
|
handleToggleSelectMode,
|
|
42
44
|
handleToggleTheme,
|
|
43
|
-
handleClose
|
|
45
|
+
handleClose,
|
|
46
|
+
handleToggleMinimize,
|
|
47
|
+
handleTogglePromptDock
|
|
44
48
|
} = (0, import_context.useOpenCodeWidgetContext)();
|
|
45
49
|
const themeIconTitle = (0, import_vue2.computed)(() => {
|
|
46
50
|
const themeLabels = {
|
|
@@ -58,7 +62,7 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)({
|
|
|
58
62
|
};
|
|
59
63
|
return `\u5207\u6362\u4E3B\u9898 - \u5F53\u524D: ${themeLabels[theme.value]}`;
|
|
60
64
|
});
|
|
61
|
-
const __returned__ = { title, sessionListTitle, sessionListCollapsed, selectMode, selectEnabled, theme, resolvedTheme, handleToggleSessionList, handleToggleSelectMode, handleToggleTheme, handleClose, themeIconTitle, themeIconLabel };
|
|
65
|
+
const __returned__ = { title, sessionListTitle, sessionListCollapsed, selectMode, selectEnabled, theme, resolvedTheme, minimized, promptDockVisible, handleToggleSessionList, handleToggleSelectMode, handleToggleTheme, handleClose, handleToggleMinimize, handleTogglePromptDock, themeIconTitle, themeIconLabel };
|
|
62
66
|
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
63
67
|
return __returned__;
|
|
64
68
|
}
|
|
@@ -100,6 +104,28 @@ const _hoisted_8 = {
|
|
|
100
104
|
};
|
|
101
105
|
const _hoisted_9 = { class: "opencode-chat-header-title" };
|
|
102
106
|
const _hoisted_10 = { class: "opencode-chat-header-actions" };
|
|
107
|
+
const _hoisted_11 = ["title", "aria-label", "aria-pressed"];
|
|
108
|
+
const _hoisted_12 = ["title", "aria-label", "aria-pressed"];
|
|
109
|
+
const _hoisted_13 = {
|
|
110
|
+
key: 0,
|
|
111
|
+
viewBox: "0 0 24 24",
|
|
112
|
+
width: "14",
|
|
113
|
+
height: "14",
|
|
114
|
+
fill: "none",
|
|
115
|
+
stroke: "currentColor",
|
|
116
|
+
"stroke-width": "2",
|
|
117
|
+
"aria-hidden": "true"
|
|
118
|
+
};
|
|
119
|
+
const _hoisted_14 = {
|
|
120
|
+
key: 1,
|
|
121
|
+
viewBox: "0 0 24 24",
|
|
122
|
+
width: "14",
|
|
123
|
+
height: "14",
|
|
124
|
+
fill: "none",
|
|
125
|
+
stroke: "currentColor",
|
|
126
|
+
"stroke-width": "2",
|
|
127
|
+
"aria-hidden": "true"
|
|
128
|
+
};
|
|
103
129
|
function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
104
130
|
return (0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("div", _hoisted_1, [
|
|
105
131
|
(0, import_vue3.createElementVNode)("div", _hoisted_2, [
|
|
@@ -112,7 +138,7 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
112
138
|
onClick: _cache[0] || (_cache[0] = (...args) => $setup.handleToggleSessionList && $setup.handleToggleSessionList(...args))
|
|
113
139
|
}, [
|
|
114
140
|
(0, import_vue3.renderSlot)(_ctx.$slots, "session-toggle-icon", {}, () => [
|
|
115
|
-
_cache[
|
|
141
|
+
_cache[6] || (_cache[6] = (0, import_vue3.createElementVNode)(
|
|
116
142
|
"svg",
|
|
117
143
|
{
|
|
118
144
|
viewBox: "0 0 24 24",
|
|
@@ -144,7 +170,7 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
144
170
|
onClick: _cache[1] || (_cache[1] = (...args) => $setup.handleToggleSelectMode && $setup.handleToggleSelectMode(...args))
|
|
145
171
|
}, [
|
|
146
172
|
(0, import_vue3.renderSlot)(_ctx.$slots, "select-icon", {}, () => [
|
|
147
|
-
_cache[
|
|
173
|
+
_cache[7] || (_cache[7] = (0, import_vue3.createElementVNode)(
|
|
148
174
|
"svg",
|
|
149
175
|
{
|
|
150
176
|
viewBox: "0 0 1024 1024",
|
|
@@ -175,9 +201,9 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
175
201
|
onClick: _cache[2] || (_cache[2] = (...args) => $setup.handleToggleTheme && $setup.handleToggleTheme(...args))
|
|
176
202
|
}, [
|
|
177
203
|
(0, import_vue3.renderSlot)(_ctx.$slots, "theme-icon", {}, () => [
|
|
178
|
-
$setup.theme === "light" ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("svg", _hoisted_6, [..._cache[
|
|
204
|
+
$setup.theme === "light" ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("svg", _hoisted_6, [..._cache[8] || (_cache[8] = [
|
|
179
205
|
(0, import_vue3.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)
|
|
180
|
-
])])) : $setup.theme === "dark" ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("svg", _hoisted_7, [..._cache[
|
|
206
|
+
])])) : $setup.theme === "dark" ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("svg", _hoisted_7, [..._cache[9] || (_cache[9] = [
|
|
181
207
|
(0, import_vue3.createElementVNode)(
|
|
182
208
|
"path",
|
|
183
209
|
{ d: "M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" },
|
|
@@ -185,7 +211,7 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
185
211
|
-1
|
|
186
212
|
/* CACHED */
|
|
187
213
|
)
|
|
188
|
-
])])) : ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("svg", _hoisted_8, [..._cache[
|
|
214
|
+
])])) : ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("svg", _hoisted_8, [..._cache[10] || (_cache[10] = [
|
|
189
215
|
(0, import_vue3.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)
|
|
190
216
|
])]))
|
|
191
217
|
])
|
|
@@ -199,15 +225,71 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
199
225
|
/* TEXT */
|
|
200
226
|
),
|
|
201
227
|
(0, import_vue3.createElementVNode)("div", _hoisted_10, [
|
|
228
|
+
(0, import_vue3.createElementVNode)("button", {
|
|
229
|
+
class: "opencode-header-btn prompt-dock",
|
|
230
|
+
type: "button",
|
|
231
|
+
title: $setup.promptDockVisible ? "\u9690\u85CF\u5BF9\u8BDD\u6846" : "\u663E\u793A\u5BF9\u8BDD\u6846",
|
|
232
|
+
"aria-label": $setup.promptDockVisible ? "\u9690\u85CF\u5BF9\u8BDD\u6846" : "\u663E\u793A\u5BF9\u8BDD\u6846",
|
|
233
|
+
"aria-pressed": $setup.promptDockVisible,
|
|
234
|
+
onClick: _cache[3] || (_cache[3] = (...args) => $setup.handleTogglePromptDock && $setup.handleTogglePromptDock(...args))
|
|
235
|
+
}, [
|
|
236
|
+
(0, import_vue3.renderSlot)(_ctx.$slots, "prompt-dock-icon", {}, () => [
|
|
237
|
+
_cache[11] || (_cache[11] = (0, import_vue3.createElementVNode)(
|
|
238
|
+
"svg",
|
|
239
|
+
{
|
|
240
|
+
viewBox: "0 0 24 24",
|
|
241
|
+
width: "14",
|
|
242
|
+
height: "14",
|
|
243
|
+
fill: "none",
|
|
244
|
+
stroke: "currentColor",
|
|
245
|
+
"stroke-width": "2",
|
|
246
|
+
"aria-hidden": "true"
|
|
247
|
+
},
|
|
248
|
+
[
|
|
249
|
+
(0, import_vue3.createElementVNode)("path", { d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z" })
|
|
250
|
+
],
|
|
251
|
+
-1
|
|
252
|
+
/* CACHED */
|
|
253
|
+
))
|
|
254
|
+
])
|
|
255
|
+
], 8, _hoisted_11),
|
|
256
|
+
(0, import_vue3.createElementVNode)("button", {
|
|
257
|
+
class: "opencode-header-btn minimize",
|
|
258
|
+
type: "button",
|
|
259
|
+
title: $setup.minimized ? "\u5C55\u5F00" : "\u6700\u5C0F\u5316",
|
|
260
|
+
"aria-label": $setup.minimized ? "\u5C55\u5F00\u9762\u677F" : "\u6700\u5C0F\u5316\u9762\u677F",
|
|
261
|
+
"aria-pressed": $setup.minimized,
|
|
262
|
+
onClick: _cache[4] || (_cache[4] = (...args) => $setup.handleToggleMinimize && $setup.handleToggleMinimize(...args))
|
|
263
|
+
}, [
|
|
264
|
+
(0, import_vue3.renderSlot)(_ctx.$slots, "minimize-icon", {}, () => [
|
|
265
|
+
$setup.minimized ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("svg", _hoisted_13, [..._cache[12] || (_cache[12] = [
|
|
266
|
+
(0, import_vue3.createElementVNode)(
|
|
267
|
+
"path",
|
|
268
|
+
{ d: "M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3" },
|
|
269
|
+
null,
|
|
270
|
+
-1
|
|
271
|
+
/* CACHED */
|
|
272
|
+
)
|
|
273
|
+
])])) : ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("svg", _hoisted_14, [..._cache[13] || (_cache[13] = [
|
|
274
|
+
(0, import_vue3.createElementVNode)(
|
|
275
|
+
"path",
|
|
276
|
+
{ d: "M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3" },
|
|
277
|
+
null,
|
|
278
|
+
-1
|
|
279
|
+
/* CACHED */
|
|
280
|
+
)
|
|
281
|
+
])]))
|
|
282
|
+
])
|
|
283
|
+
], 8, _hoisted_12),
|
|
202
284
|
(0, import_vue3.createElementVNode)("button", {
|
|
203
285
|
class: "opencode-header-btn close",
|
|
204
286
|
type: "button",
|
|
205
287
|
title: "\u5173\u95ED",
|
|
206
288
|
"aria-label": "\u5173\u95ED\u9762\u677F",
|
|
207
|
-
onClick: _cache[
|
|
289
|
+
onClick: _cache[5] || (_cache[5] = (...args) => $setup.handleClose && $setup.handleClose(...args))
|
|
208
290
|
}, [
|
|
209
291
|
(0, import_vue3.renderSlot)(_ctx.$slots, "close-icon", {}, () => [
|
|
210
|
-
_cache[
|
|
292
|
+
_cache[14] || (_cache[14] = (0, import_vue3.createElementVNode)(
|
|
211
293
|
"svg",
|
|
212
294
|
{
|
|
213
295
|
viewBox: "0 0 24 24",
|
|
@@ -20,6 +20,8 @@ export interface OpenCodeWidgetContext {
|
|
|
20
20
|
showClearAll: Ref<boolean>;
|
|
21
21
|
open: Ref<boolean>;
|
|
22
22
|
thinking: Ref<boolean>;
|
|
23
|
+
minimized: Ref<boolean>;
|
|
24
|
+
promptDockVisible: Ref<boolean>;
|
|
23
25
|
iframeSource: Ref<string>;
|
|
24
26
|
buttonActive: Ref<boolean>;
|
|
25
27
|
sessionListTitle: Ref<string>;
|
|
@@ -29,6 +31,8 @@ export interface OpenCodeWidgetContext {
|
|
|
29
31
|
selectedElementItems: Ref<OpenCodeSelectedElementItem[]>;
|
|
30
32
|
handleToggle: () => void;
|
|
31
33
|
handleClose: () => void;
|
|
34
|
+
handleToggleMinimize: () => void;
|
|
35
|
+
handleTogglePromptDock: () => void;
|
|
32
36
|
handleToggleSessionList: () => void;
|
|
33
37
|
handleToggleTheme: () => void;
|
|
34
38
|
handleEmptyAction: () => void;
|
|
@@ -1 +1 @@
|
|
|
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)}}
|
|
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.minimized{width:300px;height:300px}.opencode-chat.minimized .opencode-iframe-container{margin-top:-146px}.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)}}
|
|
@@ -142,6 +142,8 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
|
|
|
142
142
|
sendMessageToIframe
|
|
143
143
|
});
|
|
144
144
|
const localSessionListCollapsed = (0, import_vue2.ref)(props.sessionListCollapsed);
|
|
145
|
+
const minimized = (0, import_vue2.ref)(false);
|
|
146
|
+
const promptDockVisible = (0, import_vue2.ref)(true);
|
|
145
147
|
(0, import_vue2.watch)(
|
|
146
148
|
() => props.sessionListCollapsed,
|
|
147
149
|
(val) => {
|
|
@@ -239,6 +241,16 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
|
|
|
239
241
|
emit("toggle-select-mode", false);
|
|
240
242
|
}
|
|
241
243
|
});
|
|
244
|
+
const handleToggleMinimize = () => {
|
|
245
|
+
minimized.value = !minimized.value;
|
|
246
|
+
promptDockVisible.value = !minimized.value;
|
|
247
|
+
sendMessageToIframe("prompt-dock-visibility-change", { visible: promptDockVisible.value });
|
|
248
|
+
sendMessageToIframe("minimize-state-change", { minimized: minimized.value });
|
|
249
|
+
};
|
|
250
|
+
const handleTogglePromptDock = () => {
|
|
251
|
+
promptDockVisible.value = !promptDockVisible.value;
|
|
252
|
+
sendMessageToIframe("prompt-dock-visibility-change", { visible: promptDockVisible.value });
|
|
253
|
+
};
|
|
242
254
|
(0, import_context.provideOpenCodeWidgetContext)({
|
|
243
255
|
theme: (0, import_vue2.toRef)(props, "theme"),
|
|
244
256
|
resolvedTheme,
|
|
@@ -259,6 +271,8 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
|
|
|
259
271
|
showClearAll: (0, import_vue2.toRef)(props, "showClearAll"),
|
|
260
272
|
open: (0, import_vue2.toRef)(props, "open"),
|
|
261
273
|
thinking: (0, import_vue2.toRef)(props, "thinking"),
|
|
274
|
+
minimized,
|
|
275
|
+
promptDockVisible,
|
|
262
276
|
iframeSource,
|
|
263
277
|
buttonActive,
|
|
264
278
|
sessionListTitle,
|
|
@@ -268,6 +282,8 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
|
|
|
268
282
|
selectedElementItems,
|
|
269
283
|
handleToggle,
|
|
270
284
|
handleClose,
|
|
285
|
+
handleToggleMinimize,
|
|
286
|
+
handleTogglePromptDock,
|
|
271
287
|
handleToggleSessionList,
|
|
272
288
|
handleToggleTheme,
|
|
273
289
|
handleEmptyAction,
|
|
@@ -288,7 +304,7 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
|
|
|
288
304
|
return dialogResolve;
|
|
289
305
|
}, set dialogResolve(v) {
|
|
290
306
|
dialogResolve = v;
|
|
291
|
-
}, showConfirmDialog, handleDialogConfirm, handleDialogCancel, frameRef, sendMessageToIframe, handleFrameLoaded, localSessionListCollapsed, buttonActive, containerClasses, iframeSource, sessionListTitle, resolvedTheme, handleClose, handleEmptyAction, handleToggle, handleToggleSessionList, handleToggleTheme, sessionItems, handleCreateSession, handleDeleteSession, handleSelectSession, bubbleVisible, hasSelectedElements, selectedElementItems, handleClearSelectedNodes, handleClickSelectedNode, handleRemoveSelectedNode, handleToggleSelectMode, highlightVisible, highlightStyle, tooltipVisible, tooltipStyle, tooltipContent, Frame: import_Frame_vue.default, Header: import_Header_vue.default, SelectHint: import_SelectHint_vue.default, SelectedNodes: import_SelectedNodes_vue.default, SessionList: import_SessionList_vue.default, Trigger: import_Trigger_vue.default };
|
|
307
|
+
}, showConfirmDialog, handleDialogConfirm, handleDialogCancel, frameRef, sendMessageToIframe, handleFrameLoaded, localSessionListCollapsed, minimized, promptDockVisible, buttonActive, containerClasses, iframeSource, sessionListTitle, resolvedTheme, handleClose, handleEmptyAction, handleToggle, handleToggleSessionList, handleToggleTheme, sessionItems, handleCreateSession, handleDeleteSession, handleSelectSession, bubbleVisible, hasSelectedElements, selectedElementItems, handleClearSelectedNodes, handleClickSelectedNode, handleRemoveSelectedNode, handleToggleSelectMode, highlightVisible, highlightStyle, tooltipVisible, tooltipStyle, tooltipContent, handleToggleMinimize, handleTogglePromptDock, Frame: import_Frame_vue.default, Header: import_Header_vue.default, SelectHint: import_SelectHint_vue.default, SelectedNodes: import_SelectedNodes_vue.default, SessionList: import_SessionList_vue.default, Trigger: import_Trigger_vue.default };
|
|
292
308
|
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
293
309
|
return __returned__;
|
|
294
310
|
}
|
|
@@ -346,7 +362,7 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
346
362
|
(0, import_vue3.withDirectives)((0, import_vue3.createElementVNode)(
|
|
347
363
|
"div",
|
|
348
364
|
{
|
|
349
|
-
class: (0, import_vue3.normalizeClass)(["opencode-chat", { open: $props.open }])
|
|
365
|
+
class: (0, import_vue3.normalizeClass)(["opencode-chat", { open: $props.open, minimized: $setup.minimized }])
|
|
350
366
|
},
|
|
351
367
|
[
|
|
352
368
|
(0, import_vue3.createVNode)(
|
package/lib/web-types.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"$schema":"https://raw.githubusercontent.com/JetBrains/web-types/master/schema/web-types.json","framework":"vue","name":"@vite-plugin-opencode-assistant/components","version":"1.0.
|
|
1
|
+
{"$schema":"https://raw.githubusercontent.com/JetBrains/web-types/master/schema/web-types.json","framework":"vue","name":"@vite-plugin-opencode-assistant/components","version":"1.0.21","contributions":{"html":{"tags":[{"name":"open-code","attributes":[{"name":"","default":"`'bottom-right'`","description":"挂件显示的位置","value":{"type":"`'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'`","kind":"expression"}},{"name":"","default":"`false`","description":"挂件是否打开","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`'auto'`","description":"主题模式","value":{"type":"`'light' | 'dark' | 'auto'`","kind":"expression"}},{"name":"","default":"`'AI 助手'`","description":"助手头部显示的标题","value":{"type":"`string`","kind":"expression"}},{"name":"","default":"`'Ctrl+K'`","description":"快捷键提示文本","value":{"type":"`string`","kind":"expression"}},{"name":"","default":"`'按 ESC 或 Ctrl+P 退出'`","description":"选择模式快捷键提示文本","value":{"type":"`string`","kind":"expression"}},{"name":"","default":"`false`","description":"是否进入选择页面元素模式","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`true`","description":"会话列表是否折叠","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`'id'`","description":"会话列表项的唯一键字段","value":{"type":"`string`","kind":"expression"}},{"name":"","default":"`false`","description":"iframe 是否显示加载状态","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`undefined`","description":"会话列表是否加载中","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`false`","description":"是否显示会话列表骨架屏","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`false`","description":"是否显示空状态","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`false`","description":"是否显示错误状态","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`'当前项目暂无会话'`","description":"空状态显示的文本","value":{"type":"`string`","kind":"expression"}},{"name":"","default":"`'立即创建'`","description":"空状态操作按钮文本","value":{"type":"`string`","kind":"expression"}},{"name":"","default":"`''`","description":"Web UI 的 URL 来源","value":{"type":"`string`","kind":"expression"}},{"name":"","default":"`[]`","description":"会话列表数据","value":{"type":"`OpenCodeWidgetSession[]`","kind":"expression"}},{"name":"","default":"`null`","description":"当前选中的会话 ID","value":{"type":"`string | null`","kind":"expression"}},{"name":"","default":"`[]`","description":"已选中的元素列表","value":{"type":"`OpenCodeSelectedElement[]`","kind":"expression"}},{"name":"","default":"`true`","description":"是否显示\"一键清空\"按钮","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`true`","description":"是否启用选择模式","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`false`","description":"是否显示思考状态(加载中)","value":{"type":"`boolean`","kind":"expression"}}],"events":[{"name":"`update:open`","description":"当挂件打开或关闭时触发","arguments":[{"name":"open","type":"en"},{"name":"boolean"}]},{"name":"`update:selectMode`","description":"当选择模式切换时触发","arguments":[{"name":"mode","type":"de"},{"name":"boolean"}]},{"name":"`update:sessionListCollapsed`","description":"当会话列表折叠状态改变时触发","arguments":[{"name":"collapsed","type":"ed"},{"name":"boolean"}]},{"name":"`update:currentSessionId`","description":"当选中的会话 ID 改变时触发","arguments":[{"name":"sessionId","type":"Id"},{"name":"string | null"}]},{"name":"`update:selectedElements`","description":"当已选中的元素列表改变时触发","arguments":[{"name":"elements","type":"ts"},{"name":"OpenCodeSelectedElement[]"}]},{"name":"`update:theme`","description":"当主题模式改变时触发","arguments":[{"name":"theme","type":"me"},{"name":"'light' | 'dark' | 'auto'"}]},{"name":"`update:thinking`","description":"当思考状态改变时触发","arguments":[{"name":"thinking","type":"ng"},{"name":"boolean"}]},{"name":"","description":"点击触发挂件开关","arguments":[{"name":"open","type":"en"},{"name":"boolean"}]},{"name":"","description":"点击关闭按钮时触发","arguments":[]},{"name":"`toggle-session-list`","description":"点击会话列表切换按钮时触发","arguments":[{"name":"collapsed","type":"ed"},{"name":"boolean"}]},{"name":"`toggle-select-mode`","description":"点击选择模式切换按钮时触发","arguments":[{"name":"mode","type":"de"},{"name":"boolean"}]},{"name":"`toggle-theme`","description":"点击主题切换按钮时触发","arguments":[{"name":"theme","type":"me"},{"name":"'light' | 'dark' | 'auto'"}]},{"name":"`create-session`","description":"点击创建新会话时触发","arguments":[]},{"name":"`select-session`","description":"选中某个历史会话时触发","arguments":[{"name":"session","type":"on"},{"name":"OpenCodeWidgetSession"}]},{"name":"`delete-session`","description":"删除某个历史会话时触发","arguments":[{"name":"session","type":"on"},{"name":"OpenCodeWidgetSession"}]},{"name":"`click-selected-node`","description":"点击已选中的气泡或节点卡片时触发","arguments":[{"name":"element","type":"nt"},{"name":"OpenCodeSelectedElement"}]},{"name":"`remove-selected-node`","description":"删除已选中的元素时触发","arguments":[{"name":"payload","type":"ad"},{"name":"OpenCodeRemoveSelectedPayload"}]},{"name":"`clear-selected-nodes`","description":"清空所有选中元素时触发","arguments":[]},{"name":"`empty-action`","description":"点击空状态操作按钮时触发","arguments":[]},{"name":"`frame-loaded`","description":"iframe 加载完成时触发","arguments":[]},{"name":"`thinking-change`","description":"思考状态改变时触发(用于显示加载动画)","arguments":[{"name":"thinking","type":"ng"},{"name":"boolean"}]}],"slots":[{"name":"`button-icon`","description":"自定义触发按钮图标"},{"name":"`session-toggle-icon`","description":"自定义会话列表切换图标"},{"name":"`select-icon`","description":"自定义选择模式切换图标"},{"name":"`close-icon`","description":"自定义关闭按钮图标"},{"name":"`theme-icon`","description":"自定义主题切换图标"},{"name":"`sessions-empty`","description":"自定义会话列表空状态"},{"name":"`empty-state`","description":"自定义 iframe 空状态"},{"name":"","description":"自定义 iframe 加载状态"},{"name":"","description":"自定义错误状态"},{"name":"","description":"自定义 iframe 内容"}]}],"attributes":[]}},"js-types-syntax":"typescript"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vite-plugin-opencode-assistant/components",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.21",
|
|
4
4
|
"description": "Reusable OpenCode widget components built with Pagoda CLI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"css-selector-generator": "^3.9.1",
|
|
34
|
-
"@vite-plugin-opencode-assistant/shared": "1.0.
|
|
34
|
+
"@vite-plugin-opencode-assistant/shared": "1.0.21"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@vitejs/plugin-vue": "^6.0.5",
|