@vite-plugin-opencode-assistant/components 1.0.92 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/index.d.ts +1 -1
- package/es/index.mjs +1 -1
- package/es/open-code-widget/composables/use-persist-state.d.ts +2 -0
- package/es/open-code-widget/composables/use-persist-state.mjs +2 -0
- package/es/open-code-widget/src/components/ChatPanel.vue.d.ts +2 -2
- package/es/open-code-widget/src/components/Frame.vue.mjs +7 -13
- package/es/open-code-widget/src/components/Header-sfc.css +1 -1
- package/es/open-code-widget/src/components/Header.vue.mjs +55 -23
- package/es/open-code-widget/src/components/SelectHint-sfc.css +1 -1
- package/es/open-code-widget/src/components/SelectHint.vue.mjs +2 -8
- package/es/open-code-widget/src/context.d.ts +2 -0
- package/es/open-code-widget/src/index-sfc.css +1 -1
- package/es/open-code-widget/src/index.vue.mjs +13 -1
- package/lib/@vite-plugin-opencode-assistant/components.cjs.js +65 -30
- package/lib/@vite-plugin-opencode-assistant/components.es.js +65 -30
- package/lib/components.css +3 -3
- package/lib/index.cjs +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/open-code-widget/composables/use-persist-state.cjs +2 -0
- package/lib/open-code-widget/composables/use-persist-state.d.ts +2 -0
- package/lib/open-code-widget/src/components/ChatPanel.vue.d.ts +2 -2
- package/lib/open-code-widget/src/components/Frame.vue.cjs +6 -12
- package/lib/open-code-widget/src/components/Header-sfc.css +1 -1
- package/lib/open-code-widget/src/components/Header.vue.cjs +55 -23
- package/lib/open-code-widget/src/components/SelectHint-sfc.css +1 -1
- package/lib/open-code-widget/src/components/SelectHint.vue.cjs +1 -7
- package/lib/open-code-widget/src/context.d.ts +2 -0
- package/lib/open-code-widget/src/index-sfc.css +1 -1
- package/lib/open-code-widget/src/index.vue.cjs +13 -1
- package/lib/web-types.json +1 -1
- package/package.json +2 -2
|
@@ -40,11 +40,6 @@ var __vue_sfc__$9 = /* @__PURE__ */ defineComponent({
|
|
|
40
40
|
if (!((_a = iframeRef.value) == null ? void 0 : _a.contentWindow)) return;
|
|
41
41
|
iframeRef.value.contentWindow.postMessage(__spreadValues$4({ type }, data), "*");
|
|
42
42
|
}
|
|
43
|
-
onMounted(() => {
|
|
44
|
-
if (iframeRef.value) iframeRef.value.addEventListener("load", () => {
|
|
45
|
-
handleFrameLoaded();
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
43
|
__expose({ sendMessageToIframe });
|
|
49
44
|
const __returned__ = {
|
|
50
45
|
iframeRef,
|
|
@@ -71,7 +66,7 @@ var _hoisted_3$5 = ["src"];
|
|
|
71
66
|
function __vue_render__$9(_ctx, _cache, $props, $setup, $data, $options) {
|
|
72
67
|
return openBlock(), createElementBlock("div", _hoisted_1$7, [
|
|
73
68
|
createElementVNode("div", { class: normalizeClass(["opencode-empty-state-overlay", { visible: $setup.showEmptyState }]) }, [renderSlot(_ctx.$slots, "empty-state", {}, () => [
|
|
74
|
-
_cache[
|
|
69
|
+
_cache[2] || (_cache[2] = createElementVNode("div", { class: "opencode-empty-state-icon" }, [createElementVNode("svg", {
|
|
75
70
|
viewBox: "0 0 24 24",
|
|
76
71
|
width: "48",
|
|
77
72
|
height: "48",
|
|
@@ -91,15 +86,16 @@ function __vue_render__$9(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
91
86
|
onClick: _cache[0] || (_cache[0] = (...args) => $setup.handleEmptyAction && $setup.handleEmptyAction(...args))
|
|
92
87
|
}, toDisplayString($setup.emptyStateActionText), 1)
|
|
93
88
|
])], 2),
|
|
94
|
-
createElementVNode("div", { class: normalizeClass(["opencode-loading-overlay", { visible: $setup.frameLoading }]) }, [renderSlot(_ctx.$slots, "loading", {}, () => [_cache[
|
|
89
|
+
createElementVNode("div", { class: normalizeClass(["opencode-loading-overlay", { visible: $setup.frameLoading }]) }, [renderSlot(_ctx.$slots, "loading", {}, () => [_cache[3] || (_cache[3] = createElementVNode("div", { class: "opencode-loading-spinner" }, null, -1)), _cache[4] || (_cache[4] = createElementVNode("div", { class: "opencode-loading-text" }, "加载中...", -1))])], 2),
|
|
95
90
|
createElementVNode("div", { class: normalizeClass(["opencode-error-overlay", { visible: $setup.showError }]) }, [renderSlot(_ctx.$slots, "error")], 2),
|
|
96
91
|
renderSlot(_ctx.$slots, "content", {}, () => [createElementVNode("iframe", {
|
|
97
92
|
ref: "iframeRef",
|
|
98
93
|
class: "opencode-iframe",
|
|
99
94
|
src: $setup.iframeSrc,
|
|
100
95
|
allow: "clipboard-write; clipboard-read",
|
|
101
|
-
referrerpolicy: "origin"
|
|
102
|
-
|
|
96
|
+
referrerpolicy: "origin",
|
|
97
|
+
onLoad: _cache[1] || (_cache[1] = (...args) => $setup.handleFrameLoaded && $setup.handleFrameLoaded(...args))
|
|
98
|
+
}, null, 40, _hoisted_3$5)])
|
|
103
99
|
]);
|
|
104
100
|
}
|
|
105
101
|
__vue_sfc__$9.render = __vue_render__$9;
|
|
@@ -110,7 +106,7 @@ var __vue_sfc__$8 = /* @__PURE__ */ defineComponent({
|
|
|
110
106
|
__name: "Header",
|
|
111
107
|
setup(__props, { expose: __expose }) {
|
|
112
108
|
__expose();
|
|
113
|
-
const { title, sessionListTitle, sessionListCollapsed, selectMode, selectEnabled, theme, resolvedTheme, minimized, promptDockVisible, mode, displayMode, splitPosition, handleToggleSessionList, handleToggleSelectMode, handleToggleTheme, handleToggleDisplayMode, handleToggleSplitPosition, handleClose, handleToggleMinimize, handleTogglePromptDock, handleRefresh } = useOpenCodeWidgetContext();
|
|
109
|
+
const { title, sessionListTitle, sessionListCollapsed, selectMode, selectEnabled, theme, resolvedTheme, minimized, promptDockVisible, reviewPanelVisible, mode, displayMode, splitPosition, handleToggleSessionList, handleToggleSelectMode, handleToggleTheme, handleToggleDisplayMode, handleToggleSplitPosition, handleClose, handleToggleMinimize, handleTogglePromptDock, handleToggleReviewPanel, handleRefresh } = useOpenCodeWidgetContext();
|
|
114
110
|
const __returned__ = {
|
|
115
111
|
title,
|
|
116
112
|
sessionListTitle,
|
|
@@ -121,6 +117,7 @@ var __vue_sfc__$8 = /* @__PURE__ */ defineComponent({
|
|
|
121
117
|
resolvedTheme,
|
|
122
118
|
minimized,
|
|
123
119
|
promptDockVisible,
|
|
120
|
+
reviewPanelVisible,
|
|
124
121
|
mode,
|
|
125
122
|
displayMode,
|
|
126
123
|
splitPosition,
|
|
@@ -132,6 +129,7 @@ var __vue_sfc__$8 = /* @__PURE__ */ defineComponent({
|
|
|
132
129
|
handleClose,
|
|
133
130
|
handleToggleMinimize,
|
|
134
131
|
handleTogglePromptDock,
|
|
132
|
+
handleToggleReviewPanel,
|
|
135
133
|
handleRefresh,
|
|
136
134
|
isSplitMode: computed(() => mode.value === "split"),
|
|
137
135
|
themeIconTitle: computed(() => {
|
|
@@ -292,7 +290,12 @@ var _hoisted_19 = [
|
|
|
292
290
|
"aria-label",
|
|
293
291
|
"aria-pressed"
|
|
294
292
|
];
|
|
295
|
-
var _hoisted_20 =
|
|
293
|
+
var _hoisted_20 = [
|
|
294
|
+
"title",
|
|
295
|
+
"aria-label",
|
|
296
|
+
"aria-pressed"
|
|
297
|
+
];
|
|
298
|
+
var _hoisted_21 = {
|
|
296
299
|
key: 0,
|
|
297
300
|
viewBox: "0 0 24 24",
|
|
298
301
|
width: "14",
|
|
@@ -302,7 +305,7 @@ var _hoisted_20 = {
|
|
|
302
305
|
"stroke-width": "2",
|
|
303
306
|
"aria-hidden": "true"
|
|
304
307
|
};
|
|
305
|
-
var
|
|
308
|
+
var _hoisted_22 = {
|
|
306
309
|
key: 1,
|
|
307
310
|
viewBox: "0 0 24 24",
|
|
308
311
|
width: "14",
|
|
@@ -322,7 +325,7 @@ function __vue_render__$8(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
322
325
|
"aria-label": $setup.sessionListTitle,
|
|
323
326
|
"aria-expanded": !$setup.sessionListCollapsed,
|
|
324
327
|
onClick: _cache[0] || (_cache[0] = (...args) => $setup.handleToggleSessionList && $setup.handleToggleSessionList(...args))
|
|
325
|
-
}, [renderSlot(_ctx.$slots, "session-toggle-icon", {}, () => [_cache[
|
|
328
|
+
}, [renderSlot(_ctx.$slots, "session-toggle-icon", {}, () => [_cache[10] || (_cache[10] = createElementVNode("svg", {
|
|
326
329
|
viewBox: "0 0 24 24",
|
|
327
330
|
width: "16",
|
|
328
331
|
height: "16",
|
|
@@ -342,7 +345,7 @@ function __vue_render__$8(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
342
345
|
"aria-pressed": $setup.selectMode,
|
|
343
346
|
disabled: !$setup.selectEnabled,
|
|
344
347
|
onClick: _cache[1] || (_cache[1] = (...args) => $setup.handleToggleSelectMode && $setup.handleToggleSelectMode(...args))
|
|
345
|
-
}, [renderSlot(_ctx.$slots, "select-icon", {}, () => [_cache[
|
|
348
|
+
}, [renderSlot(_ctx.$slots, "select-icon", {}, () => [_cache[11] || (_cache[11] = createElementVNode("svg", {
|
|
346
349
|
viewBox: "0 0 1024 1024",
|
|
347
350
|
width: "16",
|
|
348
351
|
height: "16",
|
|
@@ -360,7 +363,7 @@ function __vue_render__$8(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
360
363
|
title: $setup.themeIconTitle,
|
|
361
364
|
"aria-label": $setup.themeIconLabel,
|
|
362
365
|
onClick: _cache[2] || (_cache[2] = (...args) => $setup.handleToggleTheme && $setup.handleToggleTheme(...args))
|
|
363
|
-
}, [renderSlot(_ctx.$slots, "theme-icon", {}, () => [$setup.theme === "light" ? (openBlock(), createElementBlock("svg", _hoisted_6$4, [..._cache[
|
|
366
|
+
}, [renderSlot(_ctx.$slots, "theme-icon", {}, () => [$setup.theme === "light" ? (openBlock(), createElementBlock("svg", _hoisted_6$4, [..._cache[12] || (_cache[12] = [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[13] || (_cache[13] = [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$1, [..._cache[14] || (_cache[14] = [createStaticVNode("<rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"></rect><line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\"></line><line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\"></line><circle cx=\"12\" cy=\"10\" r=\"3\"></circle><path d=\"M7 7l2 2M17 7l-2 2M7 13l2-2M17 13l-2-2\"></path>", 5)])]))])], 8, _hoisted_5$4),
|
|
364
367
|
$setup.displayMode !== "extension" ? (openBlock(), createElementBlock("button", {
|
|
365
368
|
key: 0,
|
|
366
369
|
class: "opencode-header-btn display-mode-btn",
|
|
@@ -368,7 +371,7 @@ function __vue_render__$8(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
368
371
|
title: $setup.displayModeIconTitle,
|
|
369
372
|
"aria-label": $setup.displayModeIconLabel,
|
|
370
373
|
onClick: _cache[3] || (_cache[3] = (...args) => $setup.handleToggleDisplayMode && $setup.handleToggleDisplayMode(...args))
|
|
371
|
-
}, [renderSlot(_ctx.$slots, "display-mode-icon", {}, () => [$setup.displayMode === "bubble" ? (openBlock(), createElementBlock("svg", _hoisted_10$1, [..._cache[
|
|
374
|
+
}, [renderSlot(_ctx.$slots, "display-mode-icon", {}, () => [$setup.displayMode === "bubble" ? (openBlock(), createElementBlock("svg", _hoisted_10$1, [..._cache[15] || (_cache[15] = [
|
|
372
375
|
createElementVNode("circle", {
|
|
373
376
|
cx: "12",
|
|
374
377
|
cy: "12",
|
|
@@ -392,7 +395,7 @@ function __vue_render__$8(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
392
395
|
y2: "9",
|
|
393
396
|
"stroke-linecap": "round"
|
|
394
397
|
}, null, -1)
|
|
395
|
-
])])) : $setup.displayMode === "split" ? (openBlock(), createElementBlock("svg", _hoisted_11, [..._cache[
|
|
398
|
+
])])) : $setup.displayMode === "split" ? (openBlock(), createElementBlock("svg", _hoisted_11, [..._cache[16] || (_cache[16] = [createElementVNode("rect", {
|
|
396
399
|
x: "3",
|
|
397
400
|
y: "3",
|
|
398
401
|
width: "18",
|
|
@@ -403,7 +406,7 @@ function __vue_render__$8(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
403
406
|
y1: "3",
|
|
404
407
|
x2: "12",
|
|
405
408
|
y2: "21"
|
|
406
|
-
}, null, -1)])])) : (openBlock(), createElementBlock("svg", _hoisted_12, [..._cache[
|
|
409
|
+
}, null, -1)])])) : (openBlock(), createElementBlock("svg", _hoisted_12, [..._cache[17] || (_cache[17] = [
|
|
407
410
|
createElementVNode("rect", {
|
|
408
411
|
x: "3",
|
|
409
412
|
y: "3",
|
|
@@ -441,7 +444,7 @@ function __vue_render__$8(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
441
444
|
title: "刷新面板",
|
|
442
445
|
"aria-label": "刷新面板",
|
|
443
446
|
onClick: _cache[4] || (_cache[4] = (...args) => $setup.handleRefresh && $setup.handleRefresh(...args))
|
|
444
|
-
}, [..._cache[
|
|
447
|
+
}, [..._cache[18] || (_cache[18] = [createElementVNode("svg", {
|
|
445
448
|
viewBox: "0 0 24 24",
|
|
446
449
|
width: "16",
|
|
447
450
|
height: "16",
|
|
@@ -457,7 +460,7 @@ function __vue_render__$8(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
457
460
|
title: $setup.splitPositionIconTitle,
|
|
458
461
|
"aria-label": $setup.splitPositionIconLabel,
|
|
459
462
|
onClick: _cache[5] || (_cache[5] = (...args) => $setup.handleToggleSplitPosition && $setup.handleToggleSplitPosition(...args))
|
|
460
|
-
}, [renderSlot(_ctx.$slots, "split-position-icon", {}, () => [$setup.splitPosition === "right" ? (openBlock(), createElementBlock("svg", _hoisted_16, [..._cache[
|
|
463
|
+
}, [renderSlot(_ctx.$slots, "split-position-icon", {}, () => [$setup.splitPosition === "right" ? (openBlock(), createElementBlock("svg", _hoisted_16, [..._cache[19] || (_cache[19] = [createElementVNode("rect", {
|
|
461
464
|
x: "3",
|
|
462
465
|
y: "3",
|
|
463
466
|
width: "18",
|
|
@@ -468,7 +471,7 @@ function __vue_render__$8(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
468
471
|
y1: "3",
|
|
469
472
|
x2: "15",
|
|
470
473
|
y2: "21"
|
|
471
|
-
}, null, -1)])])) : (openBlock(), createElementBlock("svg", _hoisted_17, [..._cache[
|
|
474
|
+
}, null, -1)])])) : (openBlock(), createElementBlock("svg", _hoisted_17, [..._cache[20] || (_cache[20] = [createElementVNode("rect", {
|
|
472
475
|
x: "3",
|
|
473
476
|
y: "3",
|
|
474
477
|
width: "18",
|
|
@@ -480,6 +483,24 @@ function __vue_render__$8(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
480
483
|
x2: "9",
|
|
481
484
|
y2: "21"
|
|
482
485
|
}, null, -1)])]))])], 8, _hoisted_15)) : createCommentVNode("v-if", true),
|
|
486
|
+
createElementVNode("button", {
|
|
487
|
+
class: normalizeClass(["opencode-header-btn review-panel", { active: $setup.reviewPanelVisible }]),
|
|
488
|
+
type: "button",
|
|
489
|
+
title: $setup.reviewPanelVisible ? "收起审查面板" : "展开审查面板",
|
|
490
|
+
"aria-label": $setup.reviewPanelVisible ? "收起审查面板" : "展开审查面板",
|
|
491
|
+
"aria-pressed": $setup.reviewPanelVisible,
|
|
492
|
+
onClick: _cache[6] || (_cache[6] = (...args) => $setup.handleToggleReviewPanel && $setup.handleToggleReviewPanel(...args))
|
|
493
|
+
}, [..._cache[21] || (_cache[21] = [createElementVNode("svg", {
|
|
494
|
+
viewBox: "0 0 24 24",
|
|
495
|
+
width: "15",
|
|
496
|
+
height: "15",
|
|
497
|
+
fill: "none",
|
|
498
|
+
stroke: "currentColor",
|
|
499
|
+
"stroke-width": "2",
|
|
500
|
+
"stroke-linecap": "round",
|
|
501
|
+
"stroke-linejoin": "round",
|
|
502
|
+
"aria-hidden": "true"
|
|
503
|
+
}, [createElementVNode("polyline", { points: "16 18 22 12 16 6" }), createElementVNode("polyline", { points: "8 6 2 12 8 18" })], -1)])], 10, _hoisted_18),
|
|
483
504
|
!$setup.isSplitMode ? (openBlock(), createElementBlock("button", {
|
|
484
505
|
key: 2,
|
|
485
506
|
class: "opencode-header-btn prompt-dock",
|
|
@@ -487,8 +508,8 @@ function __vue_render__$8(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
487
508
|
title: $setup.promptDockVisible ? "隐藏对话框" : "显示对话框",
|
|
488
509
|
"aria-label": $setup.promptDockVisible ? "隐藏对话框" : "显示对话框",
|
|
489
510
|
"aria-pressed": $setup.promptDockVisible,
|
|
490
|
-
onClick: _cache[
|
|
491
|
-
}, [renderSlot(_ctx.$slots, "prompt-dock-icon", {}, () => [_cache[
|
|
511
|
+
onClick: _cache[7] || (_cache[7] = (...args) => $setup.handleTogglePromptDock && $setup.handleTogglePromptDock(...args))
|
|
512
|
+
}, [renderSlot(_ctx.$slots, "prompt-dock-icon", {}, () => [_cache[22] || (_cache[22] = createElementVNode("svg", {
|
|
492
513
|
viewBox: "0 0 24 24",
|
|
493
514
|
width: "14",
|
|
494
515
|
height: "14",
|
|
@@ -496,7 +517,7 @@ function __vue_render__$8(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
496
517
|
stroke: "currentColor",
|
|
497
518
|
"stroke-width": "2",
|
|
498
519
|
"aria-hidden": "true"
|
|
499
|
-
}, [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,
|
|
520
|
+
}, [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_19)) : createCommentVNode("v-if", true),
|
|
500
521
|
!$setup.isSplitMode ? (openBlock(), createElementBlock("button", {
|
|
501
522
|
key: 3,
|
|
502
523
|
class: "opencode-header-btn minimize",
|
|
@@ -504,16 +525,16 @@ function __vue_render__$8(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
504
525
|
title: $setup.minimized ? "展开" : "最小化",
|
|
505
526
|
"aria-label": $setup.minimized ? "展开面板" : "最小化面板",
|
|
506
527
|
"aria-pressed": $setup.minimized,
|
|
507
|
-
onClick: _cache[
|
|
508
|
-
}, [renderSlot(_ctx.$slots, "minimize-icon", {}, () => [$setup.minimized ? (openBlock(), createElementBlock("svg",
|
|
528
|
+
onClick: _cache[8] || (_cache[8] = (...args) => $setup.handleToggleMinimize && $setup.handleToggleMinimize(...args))
|
|
529
|
+
}, [renderSlot(_ctx.$slots, "minimize-icon", {}, () => [$setup.minimized ? (openBlock(), createElementBlock("svg", _hoisted_21, [..._cache[23] || (_cache[23] = [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_22, [..._cache[24] || (_cache[24] = [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_20)) : createCommentVNode("v-if", true),
|
|
509
530
|
!$setup.isSplitMode ? (openBlock(), createElementBlock("button", {
|
|
510
531
|
key: 4,
|
|
511
532
|
class: "opencode-header-btn close",
|
|
512
533
|
type: "button",
|
|
513
534
|
title: "关闭",
|
|
514
535
|
"aria-label": "关闭面板",
|
|
515
|
-
onClick: _cache[
|
|
516
|
-
}, [renderSlot(_ctx.$slots, "close-icon", {}, () => [_cache[
|
|
536
|
+
onClick: _cache[9] || (_cache[9] = (...args) => $setup.handleClose && $setup.handleClose(...args))
|
|
537
|
+
}, [renderSlot(_ctx.$slots, "close-icon", {}, () => [_cache[25] || (_cache[25] = createElementVNode("svg", {
|
|
517
538
|
viewBox: "0 0 24 24",
|
|
518
539
|
width: "14",
|
|
519
540
|
height: "14",
|
|
@@ -1163,7 +1184,7 @@ var __vue_sfc__$3 = /* @__PURE__ */ defineComponent({
|
|
|
1163
1184
|
});
|
|
1164
1185
|
var _hoisted_1$2 = { class: "opencode-hint-shortcut" };
|
|
1165
1186
|
function __vue_render__$3(_ctx, _cache, $props, $setup, $data, $options) {
|
|
1166
|
-
return openBlock(), createElementBlock("div", { class: normalizeClass(["opencode-select-mode-hint", { visible: $setup.visible }]) }, [_cache[0] || (_cache[0] =
|
|
1187
|
+
return openBlock(), createElementBlock("div", { class: normalizeClass(["opencode-select-mode-hint", { visible: $setup.visible }]) }, [_cache[0] || (_cache[0] = createStaticVNode("<span class=\"opencode-hint-main\"><span class=\"opencode-hint-icon\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"8\"></circle><circle cx=\"12\" cy=\"12\" r=\"2.5\" fill=\"currentColor\"></circle><line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"5\"></line><line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"22\"></line><line x1=\"2\" y1=\"12\" x2=\"5\" y2=\"12\"></line><line x1=\"19\" y1=\"12\" x2=\"22\" y2=\"12\"></line></svg></span><span class=\"opencode-hint-text\">选择模式已开启 · 点击元素进行选择</span></span>", 1)), createElementVNode("span", _hoisted_1$2, toDisplayString($setup.shortcutLabel), 1)], 2);
|
|
1167
1188
|
}
|
|
1168
1189
|
__vue_sfc__$3.render = __vue_render__$3;
|
|
1169
1190
|
var SelectHint_vue_default = __vue_sfc__$3;
|
|
@@ -2292,6 +2313,7 @@ function usePersistState(options) {
|
|
|
2292
2313
|
open: options.open.value,
|
|
2293
2314
|
minimized: options.minimized.value,
|
|
2294
2315
|
promptDockVisible: options.promptDockVisible.value,
|
|
2316
|
+
reviewPanelVisible: options.reviewPanelVisible.value,
|
|
2295
2317
|
bubbleOffset: options.bubbleOffset.value,
|
|
2296
2318
|
theme: options.theme.value,
|
|
2297
2319
|
sessionListCollapsed: options.sessionListCollapsed.value,
|
|
@@ -2307,6 +2329,7 @@ function usePersistState(options) {
|
|
|
2307
2329
|
options.open,
|
|
2308
2330
|
options.minimized,
|
|
2309
2331
|
options.promptDockVisible,
|
|
2332
|
+
options.reviewPanelVisible,
|
|
2310
2333
|
options.bubbleOffset,
|
|
2311
2334
|
options.theme,
|
|
2312
2335
|
options.sessionListCollapsed
|
|
@@ -2677,6 +2700,7 @@ var __vue_sfc__ = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
|
|
|
2677
2700
|
const localSplitPosition = ref((_b = (_a = props.splitMode) == null ? void 0 : _a.position) != null ? _b : "right");
|
|
2678
2701
|
const minimized = ref(false);
|
|
2679
2702
|
const promptDockVisible = ref(true);
|
|
2703
|
+
const reviewPanelVisible = ref(false);
|
|
2680
2704
|
const isRestoring = ref(true);
|
|
2681
2705
|
const iframeLoaded = ref(false);
|
|
2682
2706
|
const splitPanelWidth = ref(props.splitPanelWidth);
|
|
@@ -2684,6 +2708,7 @@ var __vue_sfc__ = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
|
|
|
2684
2708
|
if (!iframeLoaded.value) return;
|
|
2685
2709
|
sendMessageToIframe(WIDGET_MSG.PROMPT_DOCK_VISIBILITY, { visible: promptDockVisible.value });
|
|
2686
2710
|
sendMessageToIframe(WIDGET_MSG.MINIMIZE_STATE, { minimized: minimized.value });
|
|
2711
|
+
sendMessageToIframe(WIDGET_MSG.REVIEW_PANEL_TOGGLE, { visible: reviewPanelVisible.value });
|
|
2687
2712
|
};
|
|
2688
2713
|
const handleFrameLoaded = () => {
|
|
2689
2714
|
emit("frame-loaded");
|
|
@@ -2803,6 +2828,7 @@ var __vue_sfc__ = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
|
|
|
2803
2828
|
open: toRef(props, "open"),
|
|
2804
2829
|
minimized,
|
|
2805
2830
|
promptDockVisible,
|
|
2831
|
+
reviewPanelVisible,
|
|
2806
2832
|
bubbleOffset,
|
|
2807
2833
|
theme: toRef(props, "theme"),
|
|
2808
2834
|
sessionListCollapsed: localSessionListCollapsed,
|
|
@@ -2835,6 +2861,7 @@ var __vue_sfc__ = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
|
|
|
2835
2861
|
}
|
|
2836
2862
|
if (state.promptDockVisible !== void 0) promptDockVisible.value = state.promptDockVisible;
|
|
2837
2863
|
else if (minimized.value) promptDockVisible.value = false;
|
|
2864
|
+
if (state.reviewPanelVisible !== void 0) reviewPanelVisible.value = state.reviewPanelVisible;
|
|
2838
2865
|
if (state.splitPanelWidth !== void 0 && state.splitPanelWidth !== props.splitPanelWidth) handleResize(state.splitPanelWidth);
|
|
2839
2866
|
if (state.displayMode !== void 0 && state.displayMode !== props.displayMode) localDisplayMode.value = state.displayMode;
|
|
2840
2867
|
if (state.splitPosition !== void 0) localSplitPosition.value = state.splitPosition;
|
|
@@ -2856,6 +2883,10 @@ var __vue_sfc__ = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
|
|
|
2856
2883
|
promptDockVisible.value = !promptDockVisible.value;
|
|
2857
2884
|
sendMessageToIframe(WIDGET_MSG.PROMPT_DOCK_VISIBILITY, { visible: promptDockVisible.value });
|
|
2858
2885
|
};
|
|
2886
|
+
const handleToggleReviewPanel = () => {
|
|
2887
|
+
reviewPanelVisible.value = !reviewPanelVisible.value;
|
|
2888
|
+
sendMessageToIframe(WIDGET_MSG.REVIEW_PANEL_TOGGLE, { visible: reviewPanelVisible.value });
|
|
2889
|
+
};
|
|
2859
2890
|
const handleRefresh = () => {
|
|
2860
2891
|
window.location.reload();
|
|
2861
2892
|
};
|
|
@@ -2990,6 +3021,7 @@ var __vue_sfc__ = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
|
|
|
2990
3021
|
thinking: toRef(props, "thinking"),
|
|
2991
3022
|
minimized,
|
|
2992
3023
|
promptDockVisible,
|
|
3024
|
+
reviewPanelVisible,
|
|
2993
3025
|
bubbleOffset,
|
|
2994
3026
|
mode: effectiveMode,
|
|
2995
3027
|
displayMode: localDisplayMode,
|
|
@@ -3009,6 +3041,7 @@ var __vue_sfc__ = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
|
|
|
3009
3041
|
handleClose,
|
|
3010
3042
|
handleToggleMinimize,
|
|
3011
3043
|
handleTogglePromptDock,
|
|
3044
|
+
handleToggleReviewPanel,
|
|
3012
3045
|
handleToggleSessionList,
|
|
3013
3046
|
handleToggleTheme,
|
|
3014
3047
|
handleToggleDisplayMode,
|
|
@@ -3064,6 +3097,7 @@ var __vue_sfc__ = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
|
|
|
3064
3097
|
localSplitPosition,
|
|
3065
3098
|
minimized,
|
|
3066
3099
|
promptDockVisible,
|
|
3100
|
+
reviewPanelVisible,
|
|
3067
3101
|
isRestoring,
|
|
3068
3102
|
iframeLoaded,
|
|
3069
3103
|
splitPanelWidth,
|
|
@@ -3108,6 +3142,7 @@ var __vue_sfc__ = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
|
|
|
3108
3142
|
handleTogglePosition,
|
|
3109
3143
|
handleToggleMinimize,
|
|
3110
3144
|
handleTogglePromptDock,
|
|
3145
|
+
handleToggleReviewPanel,
|
|
3111
3146
|
handleRefresh,
|
|
3112
3147
|
windowWidth,
|
|
3113
3148
|
windowHeight,
|
|
@@ -3277,7 +3312,7 @@ __vue_sfc__.render = __vue_render__;
|
|
|
3277
3312
|
var open_code_widget_default = __vue_sfc__;
|
|
3278
3313
|
//#endregion
|
|
3279
3314
|
//#region es/index.mjs
|
|
3280
|
-
var version = "1.0
|
|
3315
|
+
var version = "1.1.0";
|
|
3281
3316
|
function install(app, options) {
|
|
3282
3317
|
[open_code_widget_default].forEach((item) => {
|
|
3283
3318
|
if (item.install) app.use(item, options);
|
package/lib/components.css
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
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-chat{position:fixed;bottom:20px;width:700px;height:86vh;max-height:calc(100vh - 40px);background:var(--oc-bg-main);border-radius:16px;box-shadow:var(--oc-shadow-lg);overflow:hidden;opacity:0;visibility:hidden;transform:translate3d(var(---chatAnimationOrigin\.x),var(---chatAnimationOrigin\.y),0) scale(.95);transition:all .3s ease;display:flex;flex-direction:column;z-index:99999}.opencode-chat.open{opacity:1;visibility:visible;transform:translateZ(0) scale(1)}.opencode-chat.no-transition,.opencode-chat.no-transition.open{transition:none!important}.opencode-chat.minimized{width:320px;height:320px}.opencode-chat.minimized .opencode-iframe-container{margin-top:-146px}.opencode-chat-content{display:flex;flex:1;overflow:hidden}.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 #3b82f666,0 0 0 2px #3b82f633;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;inset: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 #3b82f666,0 0 0 2px #3b82f633;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;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;box-shadow:var(--oc-shadow-md);max-width:300px;pointer-events:none;line-height:1}.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)}}body.has-opencode-split{transition:padding .3s ease;min-width:auto}body.has-opencode-split-right{padding-right:var(--opencode-split-width, 500px)}body.has-opencode-split-left{padding-left:var(--opencode-split-width, 500px)}.opencode-widget.extension-mode{position:
|
|
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-chat{position:fixed;bottom:20px;width:700px;height:86vh;max-height:calc(100vh - 40px);background:var(--oc-bg-main);border-radius:16px;box-shadow:var(--oc-shadow-lg);overflow:hidden;opacity:0;visibility:hidden;transform:translate3d(var(---chatAnimationOrigin\.x),var(---chatAnimationOrigin\.y),0) scale(.95);transition:all .3s ease;display:flex;flex-direction:column;z-index:99999}.opencode-chat.open{opacity:1;visibility:visible;transform:translateZ(0) scale(1)}.opencode-chat.no-transition,.opencode-chat.no-transition.open{transition:none!important}.opencode-chat.minimized{width:320px;height:320px}.opencode-chat.minimized .opencode-iframe-container{margin-top:-146px}.opencode-chat-content{display:flex;flex:1;overflow:hidden}.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 #3b82f666,0 0 0 2px #3b82f633;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;inset: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 #3b82f666,0 0 0 2px #3b82f633;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;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;box-shadow:var(--oc-shadow-md);max-width:300px;pointer-events:none;line-height:1}.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)}}body.has-opencode-split{transition:padding .3s ease;min-width:auto}body.has-opencode-split-right{padding-right:var(--opencode-split-width, 500px)}body.has-opencode-split-left{padding-left:var(--opencode-split-width, 500px)}.opencode-widget.extension-mode{position:relative;width:100%;height:100%;display:flex}.opencode-widget.extension-mode .opencode-select-mode-hint,.opencode-widget.extension-mode .opencode-dialog-overlay{position:absolute}
|
|
2
2
|
.opencode-chat{position:fixed;bottom:20px;width:700px;height:86vh;max-height:calc(100vh - 40px);background:var(--oc-bg-main);border-radius:16px;box-shadow:var(--oc-shadow-lg);overflow:hidden;display:flex;flex-direction:column;z-index:99999}.opencode-chat:not(.split-mode){opacity:0;visibility:hidden;transition:all .3s ease;transform:translate3d(var(---animationOrigin\.x),var(---animationOrigin\.y),0) scale(.95)}.opencode-chat.split-mode{position:fixed;top:0;bottom:0;height:100vh;max-height:100vh;border-radius:0;box-shadow:var(--oc-shadow-lg);overflow:visible;opacity:1;visibility:visible;transition:transform .3s ease}.opencode-chat.split-mode.split-right{right:0;border-left:1px solid var(--oc-border-primary);transform:translate(100%)}.opencode-chat.split-mode.split-left{left:0;border-right:1px solid var(--oc-border-primary);transform:translate(-100%)}.opencode-chat.split-mode .opencode-chat-content{overflow:hidden;flex:1}.opencode-chat.split-mode.open{transform:translate(0)}.opencode-chat.split-mode.dragging{transition:none}.opencode-chat.dragging .opencode-iframe{pointer-events:none}.opencode-chat.extension-mode{position:static;width:100%;height:100%;bottom:auto;left:auto;right:auto;border-radius:0;border-left:none;border-right:none;max-height:none;box-shadow:none;transform:none;opacity:1;visibility:visible}.opencode-chat:not(.split-mode){opacity:0;visibility:hidden;transition:all .3s ease}.opencode-chat:not(.split-mode).open{opacity:1;visibility:visible;transform:translateZ(0) scale(1)}.opencode-chat.no-transition,.opencode-chat.no-transition.open{transition:none!important}.opencode-chat.minimized:not(.split-mode){width:320px;height:320px}.opencode-chat.minimized:not(.split-mode) .opencode-iframe-container{margin-top:-146px}.opencode-chat-content{display:flex;flex:1;overflow:hidden}.opencode-session-empty{padding:24px;text-align:center;color:var(--oc-text-placeholder);font-size:14px}.opencode-split-toggle-btn{position:absolute;left:-21px;top:50%;transform:translateY(-50%);width:20px;height:48px;background:#fff;border:none;border-radius:8px 0 0 8px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:#667eea;box-shadow:0 4px 12px #667eea66;transition:all .3s ease;z-index:5;transform-origin:right center}.opencode-split-toggle-btn.split-left{left:auto;right:-21px;border-radius:0 8px 8px 0;transform-origin:left center}.opencode-split-toggle-btn:hover{transform:translateY(-50%) scale(1.1);box-shadow:0 6px 16px #667eea80}.opencode-split-toggle-btn.split-left:hover{transform:translateY(-50%) scale(1.1)}.opencode-split-toggle-btn.opencode-theme-dark{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;box-shadow:0 4px 12px #667eea4d}.opencode-split-toggle-btn.opencode-theme-dark:before{content:"";position:absolute;inset:-2px 0 -2px -2px;border-radius:8px 0 0 8px;background:linear-gradient(135deg,#8b9cf5,#9d6bc7);z-index:-1}.opencode-split-toggle-btn.opencode-theme-dark.split-left:before{left:0;right:-2px;border-radius:0 8px 8px 0}.opencode-split-toggle-btn.opencode-theme-dark:hover{box-shadow:0 6px 16px #667eea66}.opencode-split-toggle-btn.thinking{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;animation:split-thinking-glow 2s ease-in-out infinite,split-thinking-pulse 2s ease-in-out infinite;box-shadow:0 0 20px #667eea99,0 0 40px #764ba266,0 0 60px #667eea33}.opencode-split-toggle-btn.thinking:before{content:"";position:absolute;inset:-2px 0 -2px -2px;border-radius:8px 0 0 8px;background:linear-gradient(135deg,#8b9cf5,#9d6bc7);z-index:-1}.opencode-split-toggle-btn.thinking.split-left:before{left:0;right:-2px;border-radius:0 8px 8px 0}.opencode-split-toggle-btn.thinking:after{content:"";position:absolute;inset:-3px -1px -3px -3px;border-radius:8px 0 0 8px;background:conic-gradient(from 180deg,transparent,rgba(102,126,234,.3),transparent,rgba(118,75,162,.3),transparent);z-index:-2;animation:split-thinking-rotate 2s linear infinite reverse;filter:blur(8px)}.opencode-split-toggle-btn.thinking.split-left:after{left:-1px;right:-3px;border-radius:0 8px 8px 0}@keyframes split-thinking-glow{0%,to{box-shadow:0 0 20px #667eea99,0 0 40px #764ba266,0 0 60px #667eea33}50%{box-shadow:0 0 30px #667eeacc,0 0 60px #764ba299,0 0 90px #667eea4d}}@keyframes split-thinking-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes split-thinking-pulse{0%,to{transform:translateY(-50%) scale(1)}50%{transform:translateY(-50%) scale(.92)}}.opencode-split-toggle-icon{display:flex;align-items:center;justify-content:center;transition:transform .25s ease}.opencode-split-toggle-btn:hover .opencode-split-toggle-icon{transform:scale(1.1)}
|
|
3
3
|
.opencode-iframe-container{flex:1;position:relative;overflow:hidden;display:flex;flex-direction:column}.opencode-loading-overlay{position:absolute;inset: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;inset:0;z-index:15;display:none}.opencode-error-overlay.visible{display:flex}.opencode-empty-state-overlay{position:absolute;inset:0;background:var(--oc-bg-secondary);display:none;flex-direction:column;align-items:center;justify-content:center;z-index:5;transition:opacity .3s ease}.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}
|
|
4
|
-
.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
|
+
.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,.opencode-header-btn.review-panel.active{background:var(--oc-primary);color:#fff}
|
|
5
5
|
.opencode-session-list{width:240px;background:var(--oc-bg-secondary);border-right:1px solid var(--oc-border-primary);display:flex;flex-direction:column;flex-shrink:0;transition:width .2s ease}.opencode-session-list.collapsed{width:0;overflow:hidden}.opencode-session-list.collapsed .opencode-session-list-header,.opencode-session-list.collapsed .opencode-session-list-content{display:none}.opencode-session-list-header{padding:16px;border-bottom:1px solid var(--oc-border-primary);display:flex;justify-content:space-between;align-items:center;font-weight:600;font-size:14px;color:var(--oc-text-primary)}.opencode-new-session-btn{width:28px;height:28px;border-radius:6px;border:none;background:var(--oc-primary);color:#fff;font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s}.opencode-new-session-btn:hover{background:var(--oc-primary-hover);transform:scale(1.05)}.opencode-session-list-content{flex:1;overflow-y:auto;padding:8px;position:relative}.opencode-session-list-loading-overlay{position:absolute;inset:0;background:var(--oc-overlay-bg);display:flex;align-items:center;justify-content:center;z-index:10;border-radius:8px}.opencode-loading-spinner.small{width:24px;height:24px;border-width:2px}.opencode-session-item{padding:12px;border-radius:8px;cursor:pointer;transition:transform .2s;margin-bottom:4px;color:var(--oc-text-primary)}.opencode-session-item:hover{background:var(--oc-bg-tertiary)}.opencode-session-item.active{background:var(--oc-primary);color:#fff;transition:none}.opencode-session-title{font-size:14px;font-weight:500;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.opencode-session-meta{font-size:12px;opacity:.6}.opencode-session-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}.opencode-session-delete-btn{width:20px;height:20px;border-radius:4px;border:none;background:transparent;color:var(--oc-text-placeholder);font-size:16px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s;opacity:0;flex-shrink:0}.opencode-session-item:hover .opencode-session-delete-btn{opacity:1}.opencode-session-delete-btn:hover{background:var(--oc-danger);color:#fff}.opencode-session-item.active .opencode-session-delete-btn{color:#ffffffb3}.opencode-session-item.active .opencode-session-delete-btn:hover{background:#fff3;color:#fff}.opencode-session-header-skeleton{padding:16px;border-bottom:1px solid var(--oc-border-primary);display:none;justify-content:space-between;align-items:center}.opencode-session-header-skeleton.visible{display:flex}.opencode-skeleton-header-title{height:18px;width:80px;background:var(--oc-skeleton-gradient);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:4px}.opencode-skeleton-header-btn{width:28px;height:28px;background:var(--oc-skeleton-gradient);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:6px}.opencode-session-skeleton{flex:1;overflow-y:auto;padding:8px;display:none}.opencode-session-skeleton.visible{display:block}.opencode-skeleton-item{padding:12px;border-radius:8px;margin-bottom:4px;background:var(--oc-skeleton-bg)}.opencode-skeleton-title{height:16px;background:var(--oc-skeleton-gradient);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:4px;margin-bottom:8px;width:70%}.opencode-skeleton-meta{height:12px;background:var(--oc-skeleton-gradient);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:4px;width:50%}.opencode-session-empty{padding:32px 16px;text-align:center;color:var(--oc-text-placeholder);font-size:13px}.opencode-thinking-loading{display:inline-block;width:12px;height:12px;margin-right:6px;border:2px solid var(--oc-border-secondary);border-top-color:var(--oc-text-secondary);border-radius:50%;animation:thinking-spin .8s linear infinite;vertical-align:middle}.opencode-session-item.active .opencode-thinking-loading{border-color:#ffffff4d;border-top-color:#ffffffe6}@keyframes thinking-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes skeleton-loading{0%{background-position:200% 0}to{background-position:-200% 0}}
|
|
6
6
|
.opencode-right-toolbar{width:140px;background:var(--oc-bg-secondary);border-left:1px solid var(--oc-border-primary);display:flex;flex-direction:column;flex-shrink:0;transition:width .2s ease;overflow:hidden}.opencode-right-toolbar.collapsed{width:0;overflow:hidden}.opencode-right-toolbar.collapsed .opencode-selected-nodes-header,.opencode-right-toolbar.collapsed .opencode-selected-nodes,.opencode-right-toolbar.collapsed .opencode-clear-all-btn{display:none}.opencode-selected-nodes-header{padding:12px 8px 8px;border-bottom:1px solid var(--oc-border-primary)}.opencode-selected-nodes-title{font-size:14px;font-weight:600;color:var(--oc-text-primary);margin-bottom:4px}.opencode-selected-nodes-desc{font-size:11px;color:var(--oc-text-placeholder);line-height:1.4}.opencode-selected-nodes{flex:1;display:flex;flex-direction:column;padding:8px;gap:6px;overflow-y:auto;overflow-x:hidden}.opencode-selected-nodes:empty:before{content:"\6682\65e0\9009\4e2d\5143\7d20";color:var(--oc-text-placeholder);font-size:12px;text-align:center;padding:20px 10px}.opencode-selected-node{display:flex;align-items:center;gap:8px;padding:8px 10px;background:var(--oc-bg-main);border:1px solid var(--oc-border-primary);border-radius:6px;font-size:12px;transition:all .2s}.opencode-selected-node:hover{border-color:var(--oc-primary);box-shadow:var(--oc-shadow-primary)}.opencode-node-content{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.opencode-node-text{color:var(--oc-text-primary);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.opencode-node-file{color:var(--oc-text-placeholder);font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.opencode-node-remove{width:18px;height:18px;border-radius:4px;border:none;background:transparent;color:var(--oc-text-placeholder);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:14px;transition:all .2s;flex-shrink:0}.opencode-node-remove:hover{background:var(--oc-danger);color:#fff}.opencode-clear-all-btn{width:calc(100% - 16px);margin:8px;padding:8px 12px;border-radius:6px;border:none;background:var(--oc-danger);color:#fff;font-size:12px;font-weight:500;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:4px;transition:all .2s}.opencode-clear-all-btn:hover{background:var(--oc-danger-hover);transform:scale(1.02)}
|
|
7
7
|
.opencode-resize-handle{position:absolute;left:0;top:0;bottom:0;width:6px;cursor:col-resize;background:transparent;z-index:10;transition:background .2s ease}.opencode-resize-handle.handle-left{left:auto;right:0}.opencode-resize-handle:hover,.opencode-resize-handle.resizing{background:var(--oc-primary-bg)}.opencode-resize-handle:after{content:"";position:absolute;left:2px;top:50%;transform:translateY(-50%);width:2px;height:40px;background:var(--oc-border-secondary);border-radius:1px;opacity:0;transition:opacity .2s ease}.opencode-resize-handle.handle-left:after{left:auto;right:2px}.opencode-resize-handle:hover:after,.opencode-resize-handle.resizing:after{opacity:1}
|
|
8
|
-
.opencode-select-mode-hint{position:fixed;top:
|
|
8
|
+
.opencode-select-mode-hint{position:fixed;top:16px;left:50%;transform:translate(-50%) translateY(-16px);width:280px;padding:8px 14px;background:linear-gradient(135deg,#ef4444,#dc2626);color:#fff;border-radius:18px;font-size:13px;font-weight:500;line-height:1.4;box-shadow:0 6px 20px #ef444480,0 0 0 3px #ef44444d;z-index:9999999;display:none;flex-direction:column;align-items:center;justify-content:center;gap:6px;border:1px solid rgba(255,255,255,.25);opacity:0;transition:opacity .2s ease,transform .25s cubic-bezier(.16,1,.3,1);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);box-sizing:border-box}.opencode-select-mode-hint.visible{display:flex;opacity:1;transform:translate(-50%) translateY(0);animation:hintSlideIn .3s cubic-bezier(.16,1,.3,1),pulseHint 2s ease-in-out .3s infinite}.opencode-hint-main{display:inline-flex;align-items:center;gap:8px;min-width:0}.opencode-hint-icon{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:#fff3;color:#fff;flex-shrink:0}.opencode-hint-icon svg{display:block}.opencode-hint-text{font-size:13px;font-weight:500;letter-spacing:.2px;white-space:nowrap;text-shadow:0 1px 2px rgba(0,0,0,.15)}.opencode-hint-shortcut{display:inline-flex;align-items:center;padding:4px 10px;background:#0000002e;border-radius:999px;font-size:12px;font-weight:600;letter-spacing:.3px;border:1px solid rgba(255,255,255,.2);white-space:nowrap;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,monospace}@keyframes hintSlideIn{0%{opacity:0;transform:translate(-50%) translateY(-16px)}to{opacity:1;transform:translate(-50%) translateY(0)}}@keyframes pulseHint{0%,to{box-shadow:0 6px 20px #ef444480,0 0 0 3px #ef44444d}50%{box-shadow:0 6px 20px #ef444499,0 0 0 6px #ef444466}}
|
|
9
9
|
.opencode-button{width:42px;height:42px;border-radius:50%;background:#fff;border:none;cursor:pointer;box-shadow:0 4px 12px #667eea66;transition:all .3s ease;display:flex;align-items:center;justify-content:center;padding:0;position:relative}.opencode-button svg{transform:rotate(180deg) scale(1.1);transition:transform .3s ease;width:100%;height:100%;display:block}.opencode-button:hover svg{transform:rotate(180deg) scale(1.1)}.opencode-button:hover{transform:scale(1.1);box-shadow:0 6px 16px #667eea80}.opencode-button.thinking{background:linear-gradient(135deg,#667eea,#764ba2);animation:thinking-glow 2s ease-in-out infinite,thinking-pulse 2s ease-in-out infinite;box-shadow:0 0 20px #667eea99,0 0 40px #764ba266,0 0 60px #667eea33}.opencode-button.thinking svg path{fill:#fff}.opencode-button.thinking:before{content:"";position:absolute;inset:-2px;border-radius:50%;background:linear-gradient(135deg,#8b9cf5,#9d6bc7);z-index:-1}.opencode-button.thinking:after{content:"";position:absolute;inset:-3px;border-radius:50%;background:conic-gradient(from 180deg,transparent,rgba(102,126,234,.3),transparent,rgba(118,75,162,.3),transparent);z-index:-2;animation:thinking-rotate 2s linear infinite reverse;filter:blur(8px)}@keyframes thinking-glow{0%,to{box-shadow:0 0 20px #667eea99,0 0 40px #764ba266,0 0 60px #667eea33}50%{box-shadow:0 0 30px #667eeacc,0 0 60px #764ba299,0 0 90px #667eea4d}}@keyframes thinking-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes thinking-pulse{0%,to{transform:scale(1)}50%{transform:scale(.92)}}.opencode-button.opencode-theme-dark{background:linear-gradient(135deg,#667eea,#764ba2);box-shadow:0 4px 12px #667eea4d}.opencode-button.opencode-theme-dark:before{content:"";position:absolute;inset:-2px;border-radius:50%;background:linear-gradient(135deg,#8b9cf5,#9d6bc7);z-index:-1}.opencode-button.opencode-theme-dark:hover{box-shadow:0 6px 16px #667eea66}.opencode-button.opencode-theme-dark svg path{fill:#fff}
|
|
10
10
|
.floating-bubble{position:fixed;top:0;left:0;z-index:999999;cursor:grab;-webkit-user-select:none;-moz-user-select:none;user-select:none;touch-action:none;will-change:transform}.floating-bubble:active{cursor:grabbing}body.floating-bubble-dragging *{pointer-events:none!important}body.floating-bubble-dragging .floating-bubble,body.floating-bubble-dragging .floating-bubble *{pointer-events:auto!important}
|
|
11
11
|
/*$vite$:1*/
|
package/lib/index.cjs
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/index.cjs"));
|
|
37
|
-
const version = "1.0
|
|
37
|
+
const version = "1.1.0";
|
|
38
38
|
function install(app, options) {
|
|
39
39
|
const components = [
|
|
40
40
|
import_open_code_widget.default
|
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.1.0";
|
|
4
4
|
declare function install(app: App<any>, options?: any): void;
|
|
5
5
|
export { install, version, OpenCodeWidget };
|
|
6
6
|
export default install;
|
|
@@ -56,6 +56,7 @@ function usePersistState(options) {
|
|
|
56
56
|
open: options.open.value,
|
|
57
57
|
minimized: options.minimized.value,
|
|
58
58
|
promptDockVisible: options.promptDockVisible.value,
|
|
59
|
+
reviewPanelVisible: options.reviewPanelVisible.value,
|
|
59
60
|
bubbleOffset: options.bubbleOffset.value,
|
|
60
61
|
theme: options.theme.value,
|
|
61
62
|
sessionListCollapsed: options.sessionListCollapsed.value,
|
|
@@ -71,6 +72,7 @@ function usePersistState(options) {
|
|
|
71
72
|
options.open,
|
|
72
73
|
options.minimized,
|
|
73
74
|
options.promptDockVisible,
|
|
75
|
+
options.reviewPanelVisible,
|
|
74
76
|
options.bubbleOffset,
|
|
75
77
|
options.theme,
|
|
76
78
|
options.sessionListCollapsed
|
|
@@ -5,6 +5,7 @@ export interface WidgetPersistState {
|
|
|
5
5
|
open: boolean;
|
|
6
6
|
minimized: boolean;
|
|
7
7
|
promptDockVisible: boolean;
|
|
8
|
+
reviewPanelVisible: boolean;
|
|
8
9
|
bubbleOffset?: FloatingBubbleOffset;
|
|
9
10
|
theme: OpenCodeWidgetTheme;
|
|
10
11
|
sessionListCollapsed: boolean;
|
|
@@ -16,6 +17,7 @@ export interface UsePersistStateOptions {
|
|
|
16
17
|
open: Ref<boolean>;
|
|
17
18
|
minimized: Ref<boolean>;
|
|
18
19
|
promptDockVisible: Ref<boolean>;
|
|
20
|
+
reviewPanelVisible: Ref<boolean>;
|
|
19
21
|
bubbleOffset: Ref<FloatingBubbleOffset | undefined>;
|
|
20
22
|
theme: Ref<OpenCodeWidgetTheme>;
|
|
21
23
|
sessionListCollapsed: Ref<boolean>;
|
|
@@ -141,14 +141,14 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
|
|
|
141
141
|
}) | null>;
|
|
142
142
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
143
143
|
resize: (width: number) => any;
|
|
144
|
-
toggle: () => any;
|
|
145
144
|
"resize-start": () => any;
|
|
146
145
|
"resize-end": () => any;
|
|
146
|
+
toggle: () => any;
|
|
147
147
|
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
148
148
|
onResize?: ((width: number) => any) | undefined;
|
|
149
|
-
onToggle?: (() => any) | undefined;
|
|
150
149
|
"onResize-start"?: (() => any) | undefined;
|
|
151
150
|
"onResize-end"?: (() => any) | undefined;
|
|
151
|
+
onToggle?: (() => any) | undefined;
|
|
152
152
|
}>, {
|
|
153
153
|
extension: boolean;
|
|
154
154
|
resolvedTheme: "light" | "dark";
|
|
@@ -58,13 +58,6 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)({
|
|
|
58
58
|
if (!((_a = iframeRef.value) == null ? void 0 : _a.contentWindow)) return;
|
|
59
59
|
iframeRef.value.contentWindow.postMessage(__spreadValues({ type }, data), "*");
|
|
60
60
|
}
|
|
61
|
-
(0, import_vue2.onMounted)(() => {
|
|
62
|
-
if (iframeRef.value) {
|
|
63
|
-
iframeRef.value.addEventListener("load", () => {
|
|
64
|
-
handleFrameLoaded();
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
61
|
__expose({
|
|
69
62
|
sendMessageToIframe
|
|
70
63
|
});
|
|
@@ -85,7 +78,7 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
85
78
|
},
|
|
86
79
|
[
|
|
87
80
|
(0, import_vue3.renderSlot)(_ctx.$slots, "empty-state", {}, () => [
|
|
88
|
-
_cache[
|
|
81
|
+
_cache[2] || (_cache[2] = (0, import_vue3.createElementVNode)(
|
|
89
82
|
"div",
|
|
90
83
|
{ class: "opencode-empty-state-icon" },
|
|
91
84
|
[
|
|
@@ -138,14 +131,14 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
138
131
|
},
|
|
139
132
|
[
|
|
140
133
|
(0, import_vue3.renderSlot)(_ctx.$slots, "loading", {}, () => [
|
|
141
|
-
_cache[
|
|
134
|
+
_cache[3] || (_cache[3] = (0, import_vue3.createElementVNode)(
|
|
142
135
|
"div",
|
|
143
136
|
{ class: "opencode-loading-spinner" },
|
|
144
137
|
null,
|
|
145
138
|
-1
|
|
146
139
|
/* CACHED */
|
|
147
140
|
)),
|
|
148
|
-
_cache[
|
|
141
|
+
_cache[4] || (_cache[4] = (0, import_vue3.createElementVNode)(
|
|
149
142
|
"div",
|
|
150
143
|
{ class: "opencode-loading-text" },
|
|
151
144
|
"\u52A0\u8F7D\u4E2D...",
|
|
@@ -174,8 +167,9 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
174
167
|
class: "opencode-iframe",
|
|
175
168
|
src: $setup.iframeSrc,
|
|
176
169
|
allow: "clipboard-write; clipboard-read",
|
|
177
|
-
referrerpolicy: "origin"
|
|
178
|
-
|
|
170
|
+
referrerpolicy: "origin",
|
|
171
|
+
onLoad: _cache[1] || (_cache[1] = (...args) => $setup.handleFrameLoaded && $setup.handleFrameLoaded(...args))
|
|
172
|
+
}, null, 40, _hoisted_3)
|
|
179
173
|
])
|
|
180
174
|
]);
|
|
181
175
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.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}
|
|
1
|
+
.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,.opencode-header-btn.review-panel.active{background:var(--oc-primary);color:#fff}
|