@vite-plugin-opencode-assistant/components 1.0.22 → 1.0.24
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/composables/use-widget.d.ts +0 -1
- package/es/open-code-widget/composables/use-widget.js +0 -1
- package/es/open-code-widget/src/components/FloatingBubble/FloatingBubble-sfc.css +1 -0
- package/es/open-code-widget/src/components/FloatingBubble/FloatingBubble.vue.d.ts +44 -0
- package/es/open-code-widget/src/components/FloatingBubble/FloatingBubble.vue.js +290 -0
- package/es/open-code-widget/src/components/FloatingBubble/index.d.ts +3 -0
- package/es/open-code-widget/src/components/FloatingBubble/index.js +5 -0
- package/es/open-code-widget/src/components/FloatingBubble/types.d.ts +24 -0
- package/es/open-code-widget/src/components/FloatingBubble/types.js +0 -0
- package/es/open-code-widget/src/components/Trigger-sfc.css +1 -1
- package/es/open-code-widget/src/components/Trigger.vue.d.ts +21 -3
- package/es/open-code-widget/src/components/Trigger.vue.js +127 -48
- package/es/open-code-widget/src/index-sfc.css +1 -1
- package/es/open-code-widget/src/index.vue.d.ts +10 -11
- package/es/open-code-widget/src/index.vue.js +82 -17
- package/es/open-code-widget/src/types.d.ts +1 -2
- package/lib/@vite-plugin-opencode-assistant/components.cjs.js +543 -99
- package/lib/@vite-plugin-opencode-assistant/components.es.js +540 -96
- package/lib/components.css +3 -2
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/open-code-widget/composables/use-widget.d.ts +0 -1
- package/lib/open-code-widget/composables/use-widget.js +0 -1
- package/lib/open-code-widget/src/components/FloatingBubble/FloatingBubble-sfc.css +1 -0
- package/lib/open-code-widget/src/components/FloatingBubble/FloatingBubble.vue.d.ts +44 -0
- package/lib/open-code-widget/src/components/FloatingBubble/FloatingBubble.vue.js +307 -0
- package/lib/open-code-widget/src/components/FloatingBubble/index.d.ts +3 -0
- package/lib/open-code-widget/src/components/FloatingBubble/index.js +35 -0
- package/lib/open-code-widget/src/components/FloatingBubble/types.d.ts +24 -0
- package/lib/open-code-widget/src/components/FloatingBubble/types.js +15 -0
- package/lib/open-code-widget/src/components/Trigger-sfc.css +1 -1
- package/lib/open-code-widget/src/components/Trigger.vue.d.ts +21 -3
- package/lib/open-code-widget/src/components/Trigger.vue.js +137 -48
- package/lib/open-code-widget/src/index-sfc.css +1 -1
- package/lib/open-code-widget/src/index.vue.d.ts +10 -11
- package/lib/open-code-widget/src/index.vue.js +80 -15
- package/lib/open-code-widget/src/types.d.ts +1 -2
- package/lib/web-types.json +1 -1
- package/package.json +2 -2
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
1
2
|
var __defProp = Object.defineProperty;
|
|
2
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
4
6
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
7
|
var __export = (target, all) => {
|
|
6
8
|
for (var name in all)
|
|
@@ -14,6 +16,14 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
14
16
|
}
|
|
15
17
|
return to;
|
|
16
18
|
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
17
27
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
28
|
var Trigger_vue_exports = {};
|
|
19
29
|
__export(Trigger_vue_exports, {
|
|
@@ -22,70 +32,149 @@ __export(Trigger_vue_exports, {
|
|
|
22
32
|
module.exports = __toCommonJS(Trigger_vue_exports);
|
|
23
33
|
var import_Trigger_sfc = require("./Trigger-sfc.css");
|
|
24
34
|
var import_vue = require("vue");
|
|
25
|
-
var import_context = require("../context");
|
|
26
35
|
var import_vue2 = require("vue");
|
|
36
|
+
var import_context = require("../context");
|
|
37
|
+
var import_FloatingBubble_vue = __toESM(require("./FloatingBubble/FloatingBubble.vue.js"));
|
|
38
|
+
var import_vue3 = require("vue");
|
|
39
|
+
const STORAGE_KEY = "opencode-bubble-offset";
|
|
27
40
|
const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)({
|
|
28
41
|
__name: "Trigger",
|
|
29
|
-
|
|
30
|
-
|
|
42
|
+
emits: ["offset-change", "drag-start", "drag-end"],
|
|
43
|
+
setup(__props, { expose: __expose, emit: __emit }) {
|
|
31
44
|
const {
|
|
32
45
|
buttonActive: active,
|
|
33
46
|
open,
|
|
34
47
|
hotkeyLabel,
|
|
35
48
|
thinking,
|
|
49
|
+
resolvedTheme,
|
|
36
50
|
handleToggle
|
|
37
51
|
} = (0, import_context.useOpenCodeWidgetContext)();
|
|
38
|
-
const
|
|
52
|
+
const loadOffset = () => {
|
|
53
|
+
try {
|
|
54
|
+
const saved = localStorage.getItem(STORAGE_KEY);
|
|
55
|
+
if (saved) {
|
|
56
|
+
const parsed = JSON.parse(saved);
|
|
57
|
+
if (parsed && (parsed.x !== 0 || parsed.y !== 0)) {
|
|
58
|
+
return parsed;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
} catch (e) {
|
|
62
|
+
}
|
|
63
|
+
return { x: 0, y: 0 };
|
|
64
|
+
};
|
|
65
|
+
const offset = (0, import_vue2.ref)(loadOffset());
|
|
66
|
+
const emit = __emit;
|
|
67
|
+
const saveOffset = (value) => {
|
|
68
|
+
try {
|
|
69
|
+
localStorage.setItem(STORAGE_KEY, JSON.stringify(value));
|
|
70
|
+
} catch (e) {
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
const handleOffsetChange = (value) => {
|
|
74
|
+
offset.value = value;
|
|
75
|
+
saveOffset(value);
|
|
76
|
+
emit("offset-change", value);
|
|
77
|
+
};
|
|
78
|
+
const bubbleRef = (0, import_vue2.ref)(null);
|
|
79
|
+
const isOnRightSide = (0, import_vue2.computed)(() => {
|
|
80
|
+
if (typeof window === "undefined") return true;
|
|
81
|
+
const centerX = window.innerWidth / 2;
|
|
82
|
+
return offset.value.x > centerX;
|
|
83
|
+
});
|
|
84
|
+
(0, import_vue2.onMounted)(() => {
|
|
85
|
+
if (offset.value.x !== 0 || offset.value.y !== 0) {
|
|
86
|
+
emit("offset-change", offset.value);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
__expose({
|
|
90
|
+
isOnRightSide,
|
|
91
|
+
offset
|
|
92
|
+
});
|
|
93
|
+
const __returned__ = { active, open, hotkeyLabel, thinking, resolvedTheme, handleToggle, STORAGE_KEY, loadOffset, offset, emit, saveOffset, handleOffsetChange, bubbleRef, isOnRightSide, FloatingBubble: import_FloatingBubble_vue.default };
|
|
39
94
|
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
40
95
|
return __returned__;
|
|
41
96
|
}
|
|
42
97
|
});
|
|
43
98
|
const _hoisted_1 = ["aria-expanded", "title"];
|
|
44
99
|
function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
45
|
-
return (0,
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
"
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
100
|
+
return (0, import_vue3.openBlock)(), (0, import_vue3.createBlock)($setup["FloatingBubble"], {
|
|
101
|
+
ref: "bubbleRef",
|
|
102
|
+
offset: $setup.offset,
|
|
103
|
+
"onUpdate:offset": _cache[0] || (_cache[0] = ($event) => $setup.offset = $event),
|
|
104
|
+
axis: "xy",
|
|
105
|
+
magnetic: "x",
|
|
106
|
+
gap: 24,
|
|
107
|
+
onClick: $setup.handleToggle,
|
|
108
|
+
onOffsetChange: $setup.handleOffsetChange,
|
|
109
|
+
onDragStart: _cache[1] || (_cache[1] = ($event) => $setup.emit("drag-start")),
|
|
110
|
+
onDragEnd: _cache[2] || (_cache[2] = ($event) => $setup.emit("drag-end"))
|
|
111
|
+
}, {
|
|
112
|
+
default: (0, import_vue3.withCtx)(() => [
|
|
113
|
+
(0, import_vue3.createElementVNode)("button", {
|
|
114
|
+
class: (0, import_vue3.normalizeClass)(["opencode-button", { active: $setup.active, thinking: $setup.thinking, "opencode-theme-dark": $setup.resolvedTheme === "dark" }]),
|
|
115
|
+
type: "button",
|
|
116
|
+
"aria-expanded": $setup.open,
|
|
117
|
+
"aria-label": "\u6253\u5F00 AI \u52A9\u624B",
|
|
118
|
+
title: `AI \u52A9\u624B (${$setup.hotkeyLabel})`
|
|
119
|
+
}, [
|
|
120
|
+
(0, import_vue3.renderSlot)(_ctx.$slots, "default", {}, () => [
|
|
121
|
+
_cache[3] || (_cache[3] = (0, import_vue3.createElementVNode)(
|
|
122
|
+
"svg",
|
|
123
|
+
{
|
|
124
|
+
t: "1775402599580",
|
|
125
|
+
class: "icon",
|
|
126
|
+
viewBox: "0 0 1024 1024",
|
|
127
|
+
version: "1.1",
|
|
128
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
129
|
+
"p-id": "5390",
|
|
130
|
+
"xmlns:xlink": "http://www.w3.org/1999/xlink",
|
|
131
|
+
width: "100%",
|
|
132
|
+
height: "100%"
|
|
133
|
+
},
|
|
134
|
+
[
|
|
135
|
+
(0, import_vue3.createElementVNode)("defs", null, [
|
|
136
|
+
(0, import_vue3.createElementVNode)("linearGradient", {
|
|
137
|
+
id: "opencode-logo-gradient",
|
|
138
|
+
x1: "0%",
|
|
139
|
+
y1: "0%",
|
|
140
|
+
x2: "100%",
|
|
141
|
+
y2: "100%"
|
|
142
|
+
}, [
|
|
143
|
+
(0, import_vue3.createElementVNode)("stop", {
|
|
144
|
+
offset: "0%",
|
|
145
|
+
style: { "stop-color": "#667eea" }
|
|
146
|
+
}),
|
|
147
|
+
(0, import_vue3.createElementVNode)("stop", {
|
|
148
|
+
offset: "100%",
|
|
149
|
+
style: { "stop-color": "#764ba2" }
|
|
150
|
+
})
|
|
151
|
+
])
|
|
152
|
+
]),
|
|
153
|
+
(0, import_vue3.createElementVNode)("path", {
|
|
154
|
+
d: "M512 981.33H85.34c-15.85 0-30.38-8.77-37.77-22.81a42.624 42.624 0 0 1 2.6-44.02L135 791.08C75.25 710.5 42.67 612.6 42.67 512 42.67 253.21 253.21 42.67 512 42.67S981.34 253.21 981.34 512 770.8 981.33 512 981.33zM166.44 896H512c211.73 0 384-172.27 384-384S723.73 128 512 128 128 300.27 128 512c0 91.29 32.83 179.9 92.46 249.46 12.58 14.69 13.73 36 2.77 51.94L166.44 896z",
|
|
155
|
+
fill: "url(#opencode-logo-gradient)",
|
|
156
|
+
"p-id": "5391"
|
|
157
|
+
}),
|
|
158
|
+
(0, import_vue3.createElementVNode)("path", {
|
|
159
|
+
d: "M384 448m-64 0a64 64 0 1 0 128 0 64 64 0 1 0 -128 0Z",
|
|
160
|
+
fill: "url(#opencode-logo-gradient)",
|
|
161
|
+
"p-id": "5392"
|
|
162
|
+
}),
|
|
163
|
+
(0, import_vue3.createElementVNode)("path", {
|
|
164
|
+
d: "M640 448m-64 0a64 64 0 1 0 128 0 64 64 0 1 0 -128 0Z",
|
|
165
|
+
fill: "url(#opencode-logo-gradient)",
|
|
166
|
+
"p-id": "5393"
|
|
167
|
+
})
|
|
168
|
+
],
|
|
169
|
+
-1
|
|
170
|
+
/* CACHED */
|
|
171
|
+
))
|
|
172
|
+
])
|
|
173
|
+
], 10, _hoisted_1)
|
|
174
|
+
]),
|
|
175
|
+
_: 3
|
|
176
|
+
/* FORWARDED */
|
|
177
|
+
}, 8, ["offset", "onClick"]);
|
|
89
178
|
}
|
|
90
179
|
__vue_sfc__.render = __vue_render__;
|
|
91
180
|
var Trigger_vue_default = __vue_sfc__;
|
|
@@ -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-
|
|
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:translateY(20px) scale(.95);transition:all .3s ease;display:flex;flex-direction:column;z-index:99999}.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-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,23 +1,23 @@
|
|
|
1
1
|
import type { OpenCodeWidgetProps } from "./types";
|
|
2
|
-
declare var
|
|
2
|
+
declare var __VLS_12: {}, __VLS_17: {}, __VLS_19: {}, __VLS_21: {}, __VLS_26: {}, __VLS_33: {}, __VLS_35: {}, __VLS_37: {}, __VLS_39: {};
|
|
3
3
|
type __VLS_Slots = {} & {
|
|
4
|
-
'button-icon'?: (props: typeof
|
|
4
|
+
'button-icon'?: (props: typeof __VLS_12) => any;
|
|
5
5
|
} & {
|
|
6
|
-
'session-toggle-icon'?: (props: typeof
|
|
6
|
+
'session-toggle-icon'?: (props: typeof __VLS_17) => any;
|
|
7
7
|
} & {
|
|
8
|
-
'select-icon'?: (props: typeof
|
|
8
|
+
'select-icon'?: (props: typeof __VLS_19) => any;
|
|
9
9
|
} & {
|
|
10
|
-
'close-icon'?: (props: typeof
|
|
10
|
+
'close-icon'?: (props: typeof __VLS_21) => any;
|
|
11
11
|
} & {
|
|
12
|
-
'sessions-empty'?: (props: typeof
|
|
12
|
+
'sessions-empty'?: (props: typeof __VLS_26) => any;
|
|
13
13
|
} & {
|
|
14
|
-
'empty-state'?: (props: typeof
|
|
14
|
+
'empty-state'?: (props: typeof __VLS_33) => any;
|
|
15
15
|
} & {
|
|
16
|
-
loading?: (props: typeof
|
|
16
|
+
loading?: (props: typeof __VLS_35) => any;
|
|
17
17
|
} & {
|
|
18
|
-
error?: (props: typeof
|
|
18
|
+
error?: (props: typeof __VLS_37) => any;
|
|
19
19
|
} & {
|
|
20
|
-
content?: (props: typeof
|
|
20
|
+
content?: (props: typeof __VLS_39) => any;
|
|
21
21
|
};
|
|
22
22
|
declare const __VLS_component: import("vue").DefineComponent<OpenCodeWidgetProps, {
|
|
23
23
|
showNotification: (message: string, options?: {
|
|
@@ -90,7 +90,6 @@ declare const __VLS_component: import("vue").DefineComponent<OpenCodeWidgetProps
|
|
|
90
90
|
open: boolean;
|
|
91
91
|
hotkeyLabel: string;
|
|
92
92
|
thinking: boolean;
|
|
93
|
-
position: import("@vite-plugin-opencode-assistant/shared").OpenCodeWidgetPosition;
|
|
94
93
|
currentSessionId: string | null;
|
|
95
94
|
selectedElements: import("@vite-plugin-opencode-assistant/shared").OpenCodeSelectedElement[];
|
|
96
95
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
@@ -67,7 +67,6 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
|
|
|
67
67
|
}), {
|
|
68
68
|
__name: "index",
|
|
69
69
|
props: {
|
|
70
|
-
position: { type: String, required: false, default: "bottom-right" },
|
|
71
70
|
open: { type: Boolean, required: false, default: false },
|
|
72
71
|
theme: { type: String, required: false, default: "auto" },
|
|
73
72
|
title: { type: String, required: false, default: "AI \u52A9\u624B" },
|
|
@@ -129,6 +128,7 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
|
|
|
129
128
|
if (dialogResolve) dialogResolve(false);
|
|
130
129
|
};
|
|
131
130
|
const frameRef = (0, import_vue2.ref)(null);
|
|
131
|
+
const triggerRef = (0, import_vue2.ref)(null);
|
|
132
132
|
const sendMessageToIframe = (type, data) => {
|
|
133
133
|
var _a;
|
|
134
134
|
(_a = frameRef.value) == null ? void 0 : _a.sendMessageToIframe(type, data);
|
|
@@ -162,7 +162,6 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
|
|
|
162
162
|
handleToggleSessionList,
|
|
163
163
|
handleToggleTheme
|
|
164
164
|
} = (0, import_use_widget.useWidget)({
|
|
165
|
-
position: (0, import_vue2.toRef)(props, "position"),
|
|
166
165
|
theme: (0, import_vue2.toRef)(props, "theme"),
|
|
167
166
|
open: (0, import_vue2.toRef)(props, "open"),
|
|
168
167
|
selectMode: (0, import_vue2.toRef)(props, "selectMode"),
|
|
@@ -251,6 +250,68 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
|
|
|
251
250
|
promptDockVisible.value = !promptDockVisible.value;
|
|
252
251
|
sendMessageToIframe("prompt-dock-visibility-change", { visible: promptDockVisible.value });
|
|
253
252
|
};
|
|
253
|
+
const bubbleOffset = (0, import_vue2.ref)({ x: 0, y: 0 });
|
|
254
|
+
const isBubbleOnRightSide = (0, import_vue2.computed)(() => {
|
|
255
|
+
if (typeof window === "undefined") return true;
|
|
256
|
+
const centerX = window.innerWidth / 2;
|
|
257
|
+
return bubbleOffset.value.x > centerX;
|
|
258
|
+
});
|
|
259
|
+
const chatPositionStyle = (0, import_vue2.computed)(() => {
|
|
260
|
+
if (typeof window === "undefined") return {};
|
|
261
|
+
const windowWidth = window.innerWidth;
|
|
262
|
+
const windowHeight = window.innerHeight;
|
|
263
|
+
const chatWidth = minimized.value ? 300 : 700;
|
|
264
|
+
const chatHeight = minimized.value ? 300 : Math.min(windowHeight * 0.86, windowHeight - 40);
|
|
265
|
+
const gap = 24;
|
|
266
|
+
const bubbleSize = 44;
|
|
267
|
+
const screenMargin = 20;
|
|
268
|
+
const style = {};
|
|
269
|
+
if (isBubbleOnRightSide.value) {
|
|
270
|
+
let rightPos = windowWidth - bubbleOffset.value.x + gap;
|
|
271
|
+
const maxRight = windowWidth - chatWidth - screenMargin;
|
|
272
|
+
if (rightPos > maxRight) {
|
|
273
|
+
rightPos = maxRight;
|
|
274
|
+
}
|
|
275
|
+
style.right = `${rightPos}px`;
|
|
276
|
+
style.left = "auto";
|
|
277
|
+
} else {
|
|
278
|
+
let leftPos = bubbleOffset.value.x + bubbleSize + gap;
|
|
279
|
+
const maxLeft = windowWidth - chatWidth - screenMargin;
|
|
280
|
+
if (leftPos > maxLeft) {
|
|
281
|
+
leftPos = maxLeft;
|
|
282
|
+
}
|
|
283
|
+
style.left = `${leftPos}px`;
|
|
284
|
+
style.right = "auto";
|
|
285
|
+
}
|
|
286
|
+
let bottomPos = windowHeight - bubbleOffset.value.y - bubbleSize;
|
|
287
|
+
const maxBottom = windowHeight - chatHeight - screenMargin;
|
|
288
|
+
if (bottomPos > maxBottom) {
|
|
289
|
+
bottomPos = maxBottom;
|
|
290
|
+
}
|
|
291
|
+
if (bottomPos < screenMargin) {
|
|
292
|
+
bottomPos = screenMargin;
|
|
293
|
+
}
|
|
294
|
+
style.bottom = `${bottomPos}px`;
|
|
295
|
+
return style;
|
|
296
|
+
});
|
|
297
|
+
const handleBubbleOffsetChange = (offset) => {
|
|
298
|
+
bubbleOffset.value = offset;
|
|
299
|
+
};
|
|
300
|
+
const isDragging = (0, import_vue2.ref)(false);
|
|
301
|
+
let wasOpenBeforeDrag = false;
|
|
302
|
+
const handleDragStart = () => {
|
|
303
|
+
isDragging.value = true;
|
|
304
|
+
wasOpenBeforeDrag = props.open;
|
|
305
|
+
if (props.open) {
|
|
306
|
+
emit("update:open", false);
|
|
307
|
+
}
|
|
308
|
+
};
|
|
309
|
+
const handleDragEnd = () => {
|
|
310
|
+
isDragging.value = false;
|
|
311
|
+
if (wasOpenBeforeDrag) {
|
|
312
|
+
emit("update:open", true);
|
|
313
|
+
}
|
|
314
|
+
};
|
|
254
315
|
(0, import_context.provideOpenCodeWidgetContext)({
|
|
255
316
|
theme: (0, import_vue2.toRef)(props, "theme"),
|
|
256
317
|
resolvedTheme,
|
|
@@ -304,7 +365,11 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
|
|
|
304
365
|
return dialogResolve;
|
|
305
366
|
}, set dialogResolve(v) {
|
|
306
367
|
dialogResolve = v;
|
|
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,
|
|
368
|
+
}, showConfirmDialog, handleDialogConfirm, handleDialogCancel, frameRef, triggerRef, 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, bubbleOffset, isBubbleOnRightSide, chatPositionStyle, handleBubbleOffsetChange, isDragging, get wasOpenBeforeDrag() {
|
|
369
|
+
return wasOpenBeforeDrag;
|
|
370
|
+
}, set wasOpenBeforeDrag(v) {
|
|
371
|
+
wasOpenBeforeDrag = v;
|
|
372
|
+
}, handleDragStart, handleDragEnd, 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 };
|
|
308
373
|
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
309
374
|
return __returned__;
|
|
310
375
|
}
|
|
@@ -342,7 +407,12 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
342
407
|
[
|
|
343
408
|
(0, import_vue3.createVNode)(
|
|
344
409
|
$setup["Trigger"],
|
|
345
|
-
|
|
410
|
+
{
|
|
411
|
+
ref: "triggerRef",
|
|
412
|
+
onOffsetChange: $setup.handleBubbleOffsetChange,
|
|
413
|
+
onDragStart: $setup.handleDragStart,
|
|
414
|
+
onDragEnd: $setup.handleDragEnd
|
|
415
|
+
},
|
|
346
416
|
(0, import_vue3.createSlots)({
|
|
347
417
|
_: 2
|
|
348
418
|
/* DYNAMIC */
|
|
@@ -355,14 +425,14 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
355
425
|
key: "0"
|
|
356
426
|
} : void 0
|
|
357
427
|
]),
|
|
358
|
-
|
|
359
|
-
/* DYNAMIC_SLOTS */
|
|
428
|
+
1536
|
|
429
|
+
/* NEED_PATCH, DYNAMIC_SLOTS */
|
|
360
430
|
),
|
|
361
|
-
(0, import_vue3.createCommentVNode)(' <SelectedBubbles v-if="bubbleVisible" /> '),
|
|
362
431
|
(0, import_vue3.withDirectives)((0, import_vue3.createElementVNode)(
|
|
363
432
|
"div",
|
|
364
433
|
{
|
|
365
|
-
class: (0, import_vue3.normalizeClass)(["opencode-chat", { open: $props.open, minimized: $setup.minimized }])
|
|
434
|
+
class: (0, import_vue3.normalizeClass)(["opencode-chat", { open: $props.open, minimized: $setup.minimized, dragging: $setup.isDragging }]),
|
|
435
|
+
style: (0, import_vue3.normalizeStyle)($setup.chatPositionStyle)
|
|
366
436
|
},
|
|
367
437
|
[
|
|
368
438
|
(0, import_vue3.createVNode)(
|
|
@@ -397,7 +467,6 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
397
467
|
1024
|
|
398
468
|
/* DYNAMIC_SLOTS */
|
|
399
469
|
),
|
|
400
|
-
(0, import_vue3.createCommentVNode)(" Notification "),
|
|
401
470
|
$setup.notificationVisible && $setup.notificationMode === "widget" ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)(
|
|
402
471
|
"div",
|
|
403
472
|
_hoisted_1,
|
|
@@ -463,13 +532,12 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
463
532
|
(0, import_vue3.createVNode)($setup["SelectedNodes"])
|
|
464
533
|
])
|
|
465
534
|
],
|
|
466
|
-
|
|
467
|
-
/* CLASS */
|
|
535
|
+
6
|
|
536
|
+
/* CLASS, STYLE */
|
|
468
537
|
), [
|
|
469
538
|
[import_vue3.vShow, !$props.selectMode]
|
|
470
539
|
]),
|
|
471
540
|
(0, import_vue3.createVNode)($setup["SelectHint"]),
|
|
472
|
-
(0, import_vue3.createCommentVNode)(" Inspector Highlight "),
|
|
473
541
|
(0, import_vue3.withDirectives)((0, import_vue3.createElementVNode)(
|
|
474
542
|
"div",
|
|
475
543
|
{
|
|
@@ -484,7 +552,6 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
484
552
|
), [
|
|
485
553
|
[import_vue3.vShow, $setup.highlightVisible]
|
|
486
554
|
]),
|
|
487
|
-
(0, import_vue3.createCommentVNode)(" Inspector Tooltip "),
|
|
488
555
|
(0, import_vue3.withDirectives)((0, import_vue3.createElementVNode)(
|
|
489
556
|
"div",
|
|
490
557
|
{
|
|
@@ -514,7 +581,6 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
514
581
|
), [
|
|
515
582
|
[import_vue3.vShow, $setup.tooltipVisible]
|
|
516
583
|
]),
|
|
517
|
-
(0, import_vue3.createCommentVNode)(" Dialog "),
|
|
518
584
|
$setup.dialogVisible ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("div", _hoisted_5, [
|
|
519
585
|
(0, import_vue3.createElementVNode)("div", _hoisted_6, [
|
|
520
586
|
(0, import_vue3.createElementVNode)("div", _hoisted_7, [
|
|
@@ -538,7 +604,6 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
538
604
|
])
|
|
539
605
|
])
|
|
540
606
|
])) : (0, import_vue3.createCommentVNode)("v-if", true),
|
|
541
|
-
(0, import_vue3.createCommentVNode)(" Page-level Notification "),
|
|
542
607
|
((0, import_vue3.openBlock)(), (0, import_vue3.createBlock)(import_vue3.Teleport, { to: "body" }, [
|
|
543
608
|
$setup.notificationVisible && $setup.notificationMode === "page" ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)(
|
|
544
609
|
"div",
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
export type {
|
|
2
|
-
export type OpenCodeWidgetPositionLocal = "bottom-right" | "bottom-left" | "top-right" | "top-left";
|
|
1
|
+
export type { OpenCodeWidgetTheme, OpenCodeWidgetSession, OpenCodeSelectedElement, OpenCodeRemoveSelectedPayload, OpenCodeWidgetSessionItem, OpenCodeSelectedElementItem, OpenCodeWidgetProps, OpenCodeWidgetEmits, } from "@vite-plugin-opencode-assistant/shared";
|
|
3
2
|
export type OpenCodeWidgetThemeLocal = "light" | "dark" | "auto";
|
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.24","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.24",
|
|
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.24"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@vitejs/plugin-vue": "^6.0.5",
|