@vite-plugin-opencode-assistant/components 1.0.5
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/env.d.ts +10 -0
- package/es/index.d.ts +6 -0
- package/es/index.js +21 -0
- package/es/open-code-widget/composables/use-inspector.d.ts +52 -0
- package/es/open-code-widget/composables/use-inspector.js +188 -0
- package/es/open-code-widget/composables/use-selection.d.ts +19 -0
- package/es/open-code-widget/composables/use-selection.js +142 -0
- package/es/open-code-widget/composables/use-session.d.ts +16 -0
- package/es/open-code-widget/composables/use-session.js +68 -0
- package/es/open-code-widget/composables/use-widget.d.ts +24 -0
- package/es/open-code-widget/composables/use-widget.js +44 -0
- package/es/open-code-widget/index.d.ts +3 -0
- package/es/open-code-widget/index.js +6 -0
- package/es/open-code-widget/src/components/Frame-sfc.css +1 -0
- package/es/open-code-widget/src/components/Frame.vue.d.ts +16 -0
- package/es/open-code-widget/src/components/Frame.vue.js +120 -0
- package/es/open-code-widget/src/components/Header-sfc.css +1 -0
- package/es/open-code-widget/src/components/Header.vue.d.ts +16 -0
- package/es/open-code-widget/src/components/Header.vue.js +140 -0
- package/es/open-code-widget/src/components/SelectHint-sfc.css +1 -0
- package/es/open-code-widget/src/components/SelectHint.vue.d.ts +2 -0
- package/es/open-code-widget/src/components/SelectHint.vue.js +46 -0
- package/es/open-code-widget/src/components/SelectedBubbles-sfc.css +1 -0
- package/es/open-code-widget/src/components/SelectedBubbles.vue.d.ts +2 -0
- package/es/open-code-widget/src/components/SelectedBubbles.vue.js +84 -0
- package/es/open-code-widget/src/components/SelectedNodes-sfc.css +1 -0
- package/es/open-code-widget/src/components/SelectedNodes.vue.d.ts +2 -0
- package/es/open-code-widget/src/components/SelectedNodes.vue.js +103 -0
- package/es/open-code-widget/src/components/SessionList-sfc.css +1 -0
- package/es/open-code-widget/src/components/SessionList.vue.d.ts +12 -0
- package/es/open-code-widget/src/components/SessionList.vue.js +209 -0
- package/es/open-code-widget/src/components/Trigger-sfc.css +1 -0
- package/es/open-code-widget/src/components/Trigger.vue.d.ts +12 -0
- package/es/open-code-widget/src/components/Trigger.vue.js +66 -0
- package/es/open-code-widget/src/context.d.ts +42 -0
- package/es/open-code-widget/src/context.js +16 -0
- package/es/open-code-widget/src/index-sfc.css +1 -0
- package/es/open-code-widget/src/index.vue.d.ts +83 -0
- package/es/open-code-widget/src/index.vue.js +464 -0
- package/es/open-code-widget/src/types.d.ts +74 -0
- package/es/open-code-widget/src/types.js +0 -0
- package/es/open-code-widget/style/index-pure.d.ts +0 -0
- package/es/open-code-widget/style/index-pure.js +0 -0
- package/es/open-code-widget/style/index.d.ts +0 -0
- package/es/open-code-widget/style/index.js +0 -0
- package/es/open-code-widget/style/less-pure.d.ts +0 -0
- package/es/open-code-widget/style/less-pure.js +0 -0
- package/es/open-code-widget/style/less.d.ts +0 -0
- package/es/open-code-widget/style/less.js +0 -0
- package/lib/@vite-plugin-opencode-assistant/components.cjs.js +1322 -0
- package/lib/@vite-plugin-opencode-assistant/components.es.js +1315 -0
- package/lib/components.css +9 -0
- package/lib/env.d.ts +10 -0
- package/lib/index.css +0 -0
- package/lib/index.d.ts +6 -0
- package/lib/index.js +50 -0
- package/lib/index.less +0 -0
- package/lib/open-code-widget/composables/use-inspector.d.ts +52 -0
- package/lib/open-code-widget/composables/use-inspector.js +207 -0
- package/lib/open-code-widget/composables/use-selection.d.ts +19 -0
- package/lib/open-code-widget/composables/use-selection.js +161 -0
- package/lib/open-code-widget/composables/use-session.d.ts +16 -0
- package/lib/open-code-widget/composables/use-session.js +87 -0
- package/lib/open-code-widget/composables/use-widget.d.ts +24 -0
- package/lib/open-code-widget/composables/use-widget.js +63 -0
- package/lib/open-code-widget/index.d.ts +3 -0
- package/lib/open-code-widget/index.js +36 -0
- package/lib/open-code-widget/src/components/Frame-sfc.css +1 -0
- package/lib/open-code-widget/src/components/Frame.vue.d.ts +16 -0
- package/lib/open-code-widget/src/components/Frame.vue.js +139 -0
- package/lib/open-code-widget/src/components/Header-sfc.css +1 -0
- package/lib/open-code-widget/src/components/Header.vue.d.ts +16 -0
- package/lib/open-code-widget/src/components/Header.vue.js +159 -0
- package/lib/open-code-widget/src/components/SelectHint-sfc.css +1 -0
- package/lib/open-code-widget/src/components/SelectHint.vue.d.ts +2 -0
- package/lib/open-code-widget/src/components/SelectHint.vue.js +65 -0
- package/lib/open-code-widget/src/components/SelectedBubbles-sfc.css +1 -0
- package/lib/open-code-widget/src/components/SelectedBubbles.vue.d.ts +2 -0
- package/lib/open-code-widget/src/components/SelectedBubbles.vue.js +103 -0
- package/lib/open-code-widget/src/components/SelectedNodes-sfc.css +1 -0
- package/lib/open-code-widget/src/components/SelectedNodes.vue.d.ts +2 -0
- package/lib/open-code-widget/src/components/SelectedNodes.vue.js +122 -0
- package/lib/open-code-widget/src/components/SessionList-sfc.css +1 -0
- package/lib/open-code-widget/src/components/SessionList.vue.d.ts +12 -0
- package/lib/open-code-widget/src/components/SessionList.vue.js +228 -0
- package/lib/open-code-widget/src/components/Trigger-sfc.css +1 -0
- package/lib/open-code-widget/src/components/Trigger.vue.d.ts +12 -0
- package/lib/open-code-widget/src/components/Trigger.vue.js +85 -0
- package/lib/open-code-widget/src/context.d.ts +42 -0
- package/lib/open-code-widget/src/context.js +35 -0
- package/lib/open-code-widget/src/index-sfc.css +1 -0
- package/lib/open-code-widget/src/index.vue.d.ts +83 -0
- package/lib/open-code-widget/src/index.vue.js +491 -0
- package/lib/open-code-widget/src/types.d.ts +74 -0
- package/lib/open-code-widget/src/types.js +15 -0
- package/lib/open-code-widget/style/index-pure.d.ts +0 -0
- package/lib/open-code-widget/style/index-pure.js +0 -0
- package/lib/open-code-widget/style/index.d.ts +0 -0
- package/lib/open-code-widget/style/index.js +0 -0
- package/lib/open-code-widget/style/less-pure.d.ts +0 -0
- package/lib/open-code-widget/style/less-pure.js +0 -0
- package/lib/open-code-widget/style/less.d.ts +0 -0
- package/lib/open-code-widget/style/less.js +0 -0
- package/lib/web-types.json +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type Ref } from "vue";
|
|
2
|
+
export interface UseWidgetOptions {
|
|
3
|
+
position: Ref<string>;
|
|
4
|
+
theme: Ref<string>;
|
|
5
|
+
open: Ref<boolean>;
|
|
6
|
+
selectMode: Ref<boolean>;
|
|
7
|
+
iframeSrc: Ref<string>;
|
|
8
|
+
sessionListCollapsed: Ref<boolean>;
|
|
9
|
+
onToggle: (nextOpen: boolean) => void;
|
|
10
|
+
onToggleSelectMode?: (mode: boolean) => void;
|
|
11
|
+
onClose: () => void;
|
|
12
|
+
onToggleSessionList: (collapsed: boolean) => void;
|
|
13
|
+
onEmptyAction: () => void;
|
|
14
|
+
}
|
|
15
|
+
export declare function useWidget(options: UseWidgetOptions): {
|
|
16
|
+
buttonActive: import("vue").ComputedRef<boolean>;
|
|
17
|
+
containerClasses: import("vue").ComputedRef<string[]>;
|
|
18
|
+
iframeSource: import("vue").ComputedRef<string>;
|
|
19
|
+
sessionListTitle: import("vue").ComputedRef<"展开会话列表" | "折叠会话列表">;
|
|
20
|
+
handleClose: () => void;
|
|
21
|
+
handleEmptyAction: () => void;
|
|
22
|
+
handleToggle: () => void;
|
|
23
|
+
handleToggleSessionList: () => void;
|
|
24
|
+
};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var use_widget_exports = {};
|
|
19
|
+
__export(use_widget_exports, {
|
|
20
|
+
useWidget: () => useWidget
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(use_widget_exports);
|
|
23
|
+
var import_vue = require("vue");
|
|
24
|
+
function useWidget(options) {
|
|
25
|
+
const containerClasses = (0, import_vue.computed)(() => [
|
|
26
|
+
"opencode-widget",
|
|
27
|
+
options.position.value,
|
|
28
|
+
`opencode-theme-${options.theme.value}`
|
|
29
|
+
]);
|
|
30
|
+
const buttonActive = (0, import_vue.computed)(() => !!(options.open.value || options.selectMode.value));
|
|
31
|
+
const iframeSource = (0, import_vue.computed)(() => options.iframeSrc.value || "about:blank");
|
|
32
|
+
const sessionListTitle = (0, import_vue.computed)(
|
|
33
|
+
() => options.sessionListCollapsed.value ? "\u5C55\u5F00\u4F1A\u8BDD\u5217\u8868" : "\u6298\u53E0\u4F1A\u8BDD\u5217\u8868"
|
|
34
|
+
);
|
|
35
|
+
function handleToggle() {
|
|
36
|
+
var _a;
|
|
37
|
+
if (options.selectMode.value) {
|
|
38
|
+
(_a = options.onToggleSelectMode) == null ? void 0 : _a.call(options, false);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const nextOpen = !options.open.value;
|
|
42
|
+
options.onToggle(nextOpen);
|
|
43
|
+
}
|
|
44
|
+
function handleClose() {
|
|
45
|
+
options.onClose();
|
|
46
|
+
}
|
|
47
|
+
function handleToggleSessionList() {
|
|
48
|
+
options.onToggleSessionList(!options.sessionListCollapsed.value);
|
|
49
|
+
}
|
|
50
|
+
function handleEmptyAction() {
|
|
51
|
+
options.onEmptyAction();
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
buttonActive,
|
|
55
|
+
containerClasses,
|
|
56
|
+
iframeSource,
|
|
57
|
+
sessionListTitle,
|
|
58
|
+
handleClose,
|
|
59
|
+
handleEmptyAction,
|
|
60
|
+
handleToggle,
|
|
61
|
+
handleToggleSessionList
|
|
62
|
+
};
|
|
63
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var open_code_widget_exports = {};
|
|
30
|
+
__export(open_code_widget_exports, {
|
|
31
|
+
default: () => open_code_widget_default
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(open_code_widget_exports);
|
|
34
|
+
var import_index_vue = __toESM(require("./src/index.vue.js"));
|
|
35
|
+
__reExport(open_code_widget_exports, require("./src/types"), module.exports);
|
|
36
|
+
var open_code_widget_default = import_index_vue.default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.opencode-iframe-container{flex:1;position:relative;overflow:hidden;display:flex;flex-direction:column;margin-top:-42px}.opencode-loading-overlay{position:absolute;top:0;left:0;right:0;bottom:0;background:var(--oc-overlay-bg);display:none;flex-direction:column;align-items:center;justify-content:center;z-index:10;transition:opacity .3s ease}.opencode-loading-overlay.visible{display:flex}.opencode-loading-spinner{width:40px;height:40px;border:3px solid var(--oc-border-primary);border-top-color:var(--oc-primary);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.opencode-loading-text{margin-top:12px;font-size:14px;color:var(--oc-text-placeholder)}.opencode-empty-state-overlay{position:absolute;top:0;left:0;right:0;bottom:0;background:var(--oc-bg-secondary);display:none;flex-direction:column;align-items:center;justify-content:center;z-index:5;transition:opacity .3s ease;margin-top:42px}.opencode-empty-state-overlay.visible{display:flex}.opencode-empty-state-icon{color:var(--oc-text-placeholder);margin-bottom:16px}.opencode-empty-state-text{color:var(--oc-text-primary);font-size:16px;font-weight:500;margin-bottom:24px}.opencode-empty-state-btn{padding:10px 24px;border-radius:8px;border:none;background:var(--oc-primary);color:#fff;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s;box-shadow:var(--oc-shadow-primary)}.opencode-empty-state-btn:hover{background:var(--oc-primary-hover);transform:translateY(-1px);box-shadow:var(--oc-shadow-primary-hover)}.opencode-empty-state-btn:active{transform:translateY(0)}.opencode-iframe{width:100%;height:100%;border:none}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
declare var __VLS_1: {}, __VLS_3: {}, __VLS_5: {};
|
|
2
|
+
type __VLS_Slots = {} & {
|
|
3
|
+
'empty-state'?: (props: typeof __VLS_1) => any;
|
|
4
|
+
} & {
|
|
5
|
+
loading?: (props: typeof __VLS_3) => any;
|
|
6
|
+
} & {
|
|
7
|
+
content?: (props: typeof __VLS_5) => any;
|
|
8
|
+
};
|
|
9
|
+
declare const __VLS_component: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
10
|
+
declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
|
|
11
|
+
export default _default;
|
|
12
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
13
|
+
new (): {
|
|
14
|
+
$slots: S;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var Frame_vue_exports = {};
|
|
19
|
+
__export(Frame_vue_exports, {
|
|
20
|
+
default: () => Frame_vue_default
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(Frame_vue_exports);
|
|
23
|
+
var import_Frame_sfc = require("./Frame-sfc.css");
|
|
24
|
+
var import_vue = require("vue");
|
|
25
|
+
var import_context = require("../context");
|
|
26
|
+
var import_vue2 = require("vue");
|
|
27
|
+
const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)({
|
|
28
|
+
__name: "Frame",
|
|
29
|
+
setup(__props, { expose: __expose }) {
|
|
30
|
+
__expose();
|
|
31
|
+
const {
|
|
32
|
+
loading,
|
|
33
|
+
showEmptyState,
|
|
34
|
+
iframeSource: iframeSrc,
|
|
35
|
+
emptyStateText,
|
|
36
|
+
emptyStateActionText,
|
|
37
|
+
handleEmptyAction
|
|
38
|
+
} = (0, import_context.useOpenCodeWidgetContext)();
|
|
39
|
+
const __returned__ = { loading, showEmptyState, iframeSrc, emptyStateText, emptyStateActionText, handleEmptyAction };
|
|
40
|
+
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
41
|
+
return __returned__;
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
const _hoisted_1 = { class: "opencode-iframe-container" };
|
|
45
|
+
const _hoisted_2 = { class: "opencode-empty-state-text" };
|
|
46
|
+
const _hoisted_3 = ["src"];
|
|
47
|
+
function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
48
|
+
return (0, import_vue2.openBlock)(), (0, import_vue2.createElementBlock)("div", _hoisted_1, [
|
|
49
|
+
(0, import_vue2.createElementVNode)(
|
|
50
|
+
"div",
|
|
51
|
+
{
|
|
52
|
+
class: (0, import_vue2.normalizeClass)(["opencode-empty-state-overlay", { visible: $setup.showEmptyState }])
|
|
53
|
+
},
|
|
54
|
+
[
|
|
55
|
+
(0, import_vue2.renderSlot)(_ctx.$slots, "empty-state", {}, () => [
|
|
56
|
+
_cache[1] || (_cache[1] = (0, import_vue2.createElementVNode)(
|
|
57
|
+
"div",
|
|
58
|
+
{ class: "opencode-empty-state-icon" },
|
|
59
|
+
[
|
|
60
|
+
(0, import_vue2.createElementVNode)("svg", {
|
|
61
|
+
viewBox: "0 0 24 24",
|
|
62
|
+
width: "48",
|
|
63
|
+
height: "48",
|
|
64
|
+
fill: "none",
|
|
65
|
+
stroke: "currentColor",
|
|
66
|
+
"stroke-width": "1.5",
|
|
67
|
+
"aria-hidden": "true"
|
|
68
|
+
}, [
|
|
69
|
+
(0, import_vue2.createElementVNode)("path", {
|
|
70
|
+
"stroke-linecap": "round",
|
|
71
|
+
"stroke-linejoin": "round",
|
|
72
|
+
d: "M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 0 1-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z"
|
|
73
|
+
})
|
|
74
|
+
])
|
|
75
|
+
],
|
|
76
|
+
-1
|
|
77
|
+
/* CACHED */
|
|
78
|
+
)),
|
|
79
|
+
(0, import_vue2.createElementVNode)(
|
|
80
|
+
"div",
|
|
81
|
+
_hoisted_2,
|
|
82
|
+
(0, import_vue2.toDisplayString)($setup.emptyStateText),
|
|
83
|
+
1
|
|
84
|
+
/* TEXT */
|
|
85
|
+
),
|
|
86
|
+
(0, import_vue2.createElementVNode)(
|
|
87
|
+
"button",
|
|
88
|
+
{
|
|
89
|
+
class: "opencode-empty-state-btn",
|
|
90
|
+
type: "button",
|
|
91
|
+
onClick: _cache[0] || (_cache[0] = (...args) => $setup.handleEmptyAction && $setup.handleEmptyAction(...args))
|
|
92
|
+
},
|
|
93
|
+
(0, import_vue2.toDisplayString)($setup.emptyStateActionText),
|
|
94
|
+
1
|
|
95
|
+
/* TEXT */
|
|
96
|
+
)
|
|
97
|
+
])
|
|
98
|
+
],
|
|
99
|
+
2
|
|
100
|
+
/* CLASS */
|
|
101
|
+
),
|
|
102
|
+
(0, import_vue2.createElementVNode)(
|
|
103
|
+
"div",
|
|
104
|
+
{
|
|
105
|
+
class: (0, import_vue2.normalizeClass)(["opencode-loading-overlay", { visible: $setup.loading }])
|
|
106
|
+
},
|
|
107
|
+
[
|
|
108
|
+
(0, import_vue2.renderSlot)(_ctx.$slots, "loading", {}, () => [
|
|
109
|
+
_cache[2] || (_cache[2] = (0, import_vue2.createElementVNode)(
|
|
110
|
+
"div",
|
|
111
|
+
{ class: "opencode-loading-spinner" },
|
|
112
|
+
null,
|
|
113
|
+
-1
|
|
114
|
+
/* CACHED */
|
|
115
|
+
)),
|
|
116
|
+
_cache[3] || (_cache[3] = (0, import_vue2.createElementVNode)(
|
|
117
|
+
"div",
|
|
118
|
+
{ class: "opencode-loading-text" },
|
|
119
|
+
"\u52A0\u8F7D\u4E2D...",
|
|
120
|
+
-1
|
|
121
|
+
/* CACHED */
|
|
122
|
+
))
|
|
123
|
+
])
|
|
124
|
+
],
|
|
125
|
+
2
|
|
126
|
+
/* CLASS */
|
|
127
|
+
),
|
|
128
|
+
(0, import_vue2.renderSlot)(_ctx.$slots, "content", {}, () => [
|
|
129
|
+
(0, import_vue2.createElementVNode)("iframe", {
|
|
130
|
+
class: "opencode-iframe",
|
|
131
|
+
src: $setup.iframeSrc,
|
|
132
|
+
allow: "clipboard-write; clipboard-read",
|
|
133
|
+
referrerpolicy: "origin"
|
|
134
|
+
}, null, 8, _hoisted_3)
|
|
135
|
+
])
|
|
136
|
+
]);
|
|
137
|
+
}
|
|
138
|
+
__vue_sfc__.render = __vue_render__;
|
|
139
|
+
var Frame_vue_default = __vue_sfc__;
|
|
@@ -0,0 +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{background:var(--oc-primary);color:#fff}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
declare var __VLS_1: {}, __VLS_3: {}, __VLS_5: {};
|
|
2
|
+
type __VLS_Slots = {} & {
|
|
3
|
+
'session-toggle-icon'?: (props: typeof __VLS_1) => any;
|
|
4
|
+
} & {
|
|
5
|
+
'select-icon'?: (props: typeof __VLS_3) => any;
|
|
6
|
+
} & {
|
|
7
|
+
'close-icon'?: (props: typeof __VLS_5) => any;
|
|
8
|
+
};
|
|
9
|
+
declare const __VLS_component: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
10
|
+
declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
|
|
11
|
+
export default _default;
|
|
12
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
13
|
+
new (): {
|
|
14
|
+
$slots: S;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var Header_vue_exports = {};
|
|
19
|
+
__export(Header_vue_exports, {
|
|
20
|
+
default: () => Header_vue_default
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(Header_vue_exports);
|
|
23
|
+
var import_Header_sfc = require("./Header-sfc.css");
|
|
24
|
+
var import_vue = require("vue");
|
|
25
|
+
var import_context = require("../context");
|
|
26
|
+
var import_vue2 = require("vue");
|
|
27
|
+
const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)({
|
|
28
|
+
__name: "Header",
|
|
29
|
+
setup(__props, { expose: __expose }) {
|
|
30
|
+
__expose();
|
|
31
|
+
const {
|
|
32
|
+
title,
|
|
33
|
+
sessionListTitle,
|
|
34
|
+
sessionListCollapsed,
|
|
35
|
+
selectMode,
|
|
36
|
+
selectEnabled,
|
|
37
|
+
handleToggleSessionList,
|
|
38
|
+
handleToggleSelectMode,
|
|
39
|
+
handleClose
|
|
40
|
+
} = (0, import_context.useOpenCodeWidgetContext)();
|
|
41
|
+
const __returned__ = { title, sessionListTitle, sessionListCollapsed, selectMode, selectEnabled, handleToggleSessionList, handleToggleSelectMode, handleClose };
|
|
42
|
+
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
43
|
+
return __returned__;
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
const _hoisted_1 = { class: "opencode-chat-header" };
|
|
47
|
+
const _hoisted_2 = { class: "opencode-chat-header-left" };
|
|
48
|
+
const _hoisted_3 = ["title", "aria-label", "aria-expanded"];
|
|
49
|
+
const _hoisted_4 = ["aria-pressed", "disabled"];
|
|
50
|
+
const _hoisted_5 = { class: "opencode-chat-header-title" };
|
|
51
|
+
const _hoisted_6 = { class: "opencode-chat-header-actions" };
|
|
52
|
+
function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
53
|
+
return (0, import_vue2.openBlock)(), (0, import_vue2.createElementBlock)("div", _hoisted_1, [
|
|
54
|
+
(0, import_vue2.createElementVNode)("div", _hoisted_2, [
|
|
55
|
+
(0, import_vue2.createElementVNode)("button", {
|
|
56
|
+
class: "opencode-header-btn session-toggle",
|
|
57
|
+
type: "button",
|
|
58
|
+
title: $setup.sessionListTitle,
|
|
59
|
+
"aria-label": $setup.sessionListTitle,
|
|
60
|
+
"aria-expanded": !$setup.sessionListCollapsed,
|
|
61
|
+
onClick: _cache[0] || (_cache[0] = (...args) => $setup.handleToggleSessionList && $setup.handleToggleSessionList(...args))
|
|
62
|
+
}, [
|
|
63
|
+
(0, import_vue2.renderSlot)(_ctx.$slots, "session-toggle-icon", {}, () => [
|
|
64
|
+
_cache[3] || (_cache[3] = (0, import_vue2.createElementVNode)(
|
|
65
|
+
"svg",
|
|
66
|
+
{
|
|
67
|
+
viewBox: "0 0 24 24",
|
|
68
|
+
width: "16",
|
|
69
|
+
height: "16",
|
|
70
|
+
fill: "none",
|
|
71
|
+
stroke: "currentColor",
|
|
72
|
+
"stroke-width": "2",
|
|
73
|
+
"aria-hidden": "true"
|
|
74
|
+
},
|
|
75
|
+
[
|
|
76
|
+
(0, import_vue2.createElementVNode)("path", {
|
|
77
|
+
d: "M4 6h16M4 12h16M4 18h16",
|
|
78
|
+
"stroke-linecap": "round"
|
|
79
|
+
})
|
|
80
|
+
],
|
|
81
|
+
-1
|
|
82
|
+
/* CACHED */
|
|
83
|
+
))
|
|
84
|
+
])
|
|
85
|
+
], 8, _hoisted_3),
|
|
86
|
+
(0, import_vue2.createElementVNode)("button", {
|
|
87
|
+
class: (0, import_vue2.normalizeClass)(["opencode-header-btn select-btn", { active: $setup.selectMode }]),
|
|
88
|
+
type: "button",
|
|
89
|
+
title: "\u9009\u62E9\u9875\u9762\u5143\u7D20 (Ctrl+P)",
|
|
90
|
+
"aria-label": "\u9009\u62E9\u9875\u9762\u5143\u7D20",
|
|
91
|
+
"aria-pressed": $setup.selectMode,
|
|
92
|
+
disabled: !$setup.selectEnabled,
|
|
93
|
+
onClick: _cache[1] || (_cache[1] = (...args) => $setup.handleToggleSelectMode && $setup.handleToggleSelectMode(...args))
|
|
94
|
+
}, [
|
|
95
|
+
(0, import_vue2.renderSlot)(_ctx.$slots, "select-icon", {}, () => [
|
|
96
|
+
_cache[4] || (_cache[4] = (0, import_vue2.createElementVNode)(
|
|
97
|
+
"svg",
|
|
98
|
+
{
|
|
99
|
+
viewBox: "0 0 1024 1024",
|
|
100
|
+
width: "16",
|
|
101
|
+
height: "16",
|
|
102
|
+
"aria-hidden": "true"
|
|
103
|
+
},
|
|
104
|
+
[
|
|
105
|
+
(0, import_vue2.createElementVNode)("path", {
|
|
106
|
+
fill: "currentColor",
|
|
107
|
+
d: "M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"
|
|
108
|
+
}),
|
|
109
|
+
(0, import_vue2.createElementVNode)("path", {
|
|
110
|
+
fill: "currentColor",
|
|
111
|
+
d: "M512 96a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V128a32 32 0 0 1 32-32m0 576a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V704a32 32 0 0 1 32-32M96 512a32 32 0 0 1 32-32h192a32 32 0 0 1 0 64H128a32 32 0 0 1-32-32m576 0a32 32 0 0 1 32-32h192a32 32 0 1 1 0 64H704a32 32 0 0 1-32-32"
|
|
112
|
+
})
|
|
113
|
+
],
|
|
114
|
+
-1
|
|
115
|
+
/* CACHED */
|
|
116
|
+
))
|
|
117
|
+
])
|
|
118
|
+
], 10, _hoisted_4)
|
|
119
|
+
]),
|
|
120
|
+
(0, import_vue2.createElementVNode)(
|
|
121
|
+
"span",
|
|
122
|
+
_hoisted_5,
|
|
123
|
+
(0, import_vue2.toDisplayString)($setup.title),
|
|
124
|
+
1
|
|
125
|
+
/* TEXT */
|
|
126
|
+
),
|
|
127
|
+
(0, import_vue2.createElementVNode)("div", _hoisted_6, [
|
|
128
|
+
(0, import_vue2.createElementVNode)("button", {
|
|
129
|
+
class: "opencode-header-btn close",
|
|
130
|
+
type: "button",
|
|
131
|
+
title: "\u5173\u95ED",
|
|
132
|
+
"aria-label": "\u5173\u95ED\u9762\u677F",
|
|
133
|
+
onClick: _cache[2] || (_cache[2] = (...args) => $setup.handleClose && $setup.handleClose(...args))
|
|
134
|
+
}, [
|
|
135
|
+
(0, import_vue2.renderSlot)(_ctx.$slots, "close-icon", {}, () => [
|
|
136
|
+
_cache[5] || (_cache[5] = (0, import_vue2.createElementVNode)(
|
|
137
|
+
"svg",
|
|
138
|
+
{
|
|
139
|
+
viewBox: "0 0 24 24",
|
|
140
|
+
width: "14",
|
|
141
|
+
height: "14",
|
|
142
|
+
fill: "none",
|
|
143
|
+
stroke: "currentColor",
|
|
144
|
+
"stroke-width": "2",
|
|
145
|
+
"aria-hidden": "true"
|
|
146
|
+
},
|
|
147
|
+
[
|
|
148
|
+
(0, import_vue2.createElementVNode)("path", { d: "M18 6L6 18M6 6l12 12" })
|
|
149
|
+
],
|
|
150
|
+
-1
|
|
151
|
+
/* CACHED */
|
|
152
|
+
))
|
|
153
|
+
])
|
|
154
|
+
])
|
|
155
|
+
])
|
|
156
|
+
]);
|
|
157
|
+
}
|
|
158
|
+
__vue_sfc__.render = __vue_render__;
|
|
159
|
+
var Header_vue_default = __vue_sfc__;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.opencode-select-mode-hint{position:fixed;top:20px;left:50%;transform:translate(-50%);padding:10px 16px;background:var(--oc-danger);color:#fff;border-radius:8px;font-size:13px;box-shadow:var(--oc-shadow-danger);z-index:9999999;display:none;align-items:center;gap:12px}.opencode-select-mode-hint.visible{display:flex;animation:slideDown .3s ease}.opencode-hint-shortcut{padding:2px 6px;background:rgba(255,255,255,.2);border-radius:4px;font-size:12px}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
export default _default;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var SelectHint_vue_exports = {};
|
|
19
|
+
__export(SelectHint_vue_exports, {
|
|
20
|
+
default: () => SelectHint_vue_default
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(SelectHint_vue_exports);
|
|
23
|
+
var import_SelectHint_sfc = require("./SelectHint-sfc.css");
|
|
24
|
+
var import_vue = require("vue");
|
|
25
|
+
var import_context = require("../context");
|
|
26
|
+
var import_vue2 = require("vue");
|
|
27
|
+
const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)({
|
|
28
|
+
__name: "SelectHint",
|
|
29
|
+
setup(__props, { expose: __expose }) {
|
|
30
|
+
__expose();
|
|
31
|
+
const { selectMode: visible, selectShortcutLabel: shortcutLabel } = (0, import_context.useOpenCodeWidgetContext)();
|
|
32
|
+
const __returned__ = { visible, shortcutLabel };
|
|
33
|
+
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
34
|
+
return __returned__;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
const _hoisted_1 = { class: "opencode-hint-shortcut" };
|
|
38
|
+
function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
39
|
+
return (0, import_vue2.openBlock)(), (0, import_vue2.createElementBlock)(
|
|
40
|
+
"div",
|
|
41
|
+
{
|
|
42
|
+
class: (0, import_vue2.normalizeClass)(["opencode-select-mode-hint", { visible: $setup.visible }])
|
|
43
|
+
},
|
|
44
|
+
[
|
|
45
|
+
_cache[0] || (_cache[0] = (0, import_vue2.createElementVNode)(
|
|
46
|
+
"span",
|
|
47
|
+
null,
|
|
48
|
+
"\u{1F3AF} \u9009\u62E9\u6A21\u5F0F\u5DF2\u5F00\u542F - \u70B9\u51FB\u5143\u7D20\u8FDB\u884C\u9009\u62E9",
|
|
49
|
+
-1
|
|
50
|
+
/* CACHED */
|
|
51
|
+
)),
|
|
52
|
+
(0, import_vue2.createElementVNode)(
|
|
53
|
+
"span",
|
|
54
|
+
_hoisted_1,
|
|
55
|
+
(0, import_vue2.toDisplayString)($setup.shortcutLabel),
|
|
56
|
+
1
|
|
57
|
+
/* TEXT */
|
|
58
|
+
)
|
|
59
|
+
],
|
|
60
|
+
2
|
|
61
|
+
/* CLASS */
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
__vue_sfc__.render = __vue_render__;
|
|
65
|
+
var SelectHint_vue_default = __vue_sfc__;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.opencode-selected-bubbles{position:absolute;display:none;flex-direction:column;gap:6px;max-width:220px;max-height:300px;overflow-y:auto}.opencode-selected-bubbles.visible{display:flex}.opencode-selected-bubble{display:flex;flex-direction:column;gap:2px;padding:8px 24px 8px 10px;background:var(--oc-bg-main);border:1px solid var(--oc-border-primary);border-radius:8px;font-size:12px;box-shadow:var(--oc-shadow-sm);position:relative;cursor:pointer;transition:all .2s}.opencode-selected-bubble:hover{border-color:var(--oc-primary);box-shadow:var(--oc-shadow-primary)}.opencode-bubble-text{color:var(--oc-text-primary);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.opencode-bubble-file{color:var(--oc-text-placeholder);font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.opencode-bubble-remove{position:absolute;top:8px;right:6px;width:16px;height:16px;border-radius:50%;border:none;background:transparent;color:var(--oc-text-placeholder);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:12px;transition:all .2s}.opencode-bubble-remove:hover{background:var(--oc-danger);color:#fff}.opencode-bubble-empty{padding:8px 12px;background:var(--oc-bg-main);border:1px dashed var(--oc-border-secondary);border-radius:8px;color:var(--oc-text-placeholder);font-size:12px;text-align:center}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
export default _default;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var SelectedBubbles_vue_exports = {};
|
|
19
|
+
__export(SelectedBubbles_vue_exports, {
|
|
20
|
+
default: () => SelectedBubbles_vue_default
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(SelectedBubbles_vue_exports);
|
|
23
|
+
var import_SelectedBubbles_sfc = require("./SelectedBubbles-sfc.css");
|
|
24
|
+
var import_vue = require("vue");
|
|
25
|
+
var import_context = require("../context");
|
|
26
|
+
var import_vue2 = require("vue");
|
|
27
|
+
const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)({
|
|
28
|
+
__name: "SelectedBubbles",
|
|
29
|
+
setup(__props, { expose: __expose }) {
|
|
30
|
+
__expose();
|
|
31
|
+
const {
|
|
32
|
+
bubbleVisible: visible,
|
|
33
|
+
selectedElementItems: items,
|
|
34
|
+
handleClickSelectedNode,
|
|
35
|
+
handleRemoveSelectedNode
|
|
36
|
+
} = (0, import_context.useOpenCodeWidgetContext)();
|
|
37
|
+
const __returned__ = { visible, items, handleClickSelectedNode, handleRemoveSelectedNode };
|
|
38
|
+
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
39
|
+
return __returned__;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
const _hoisted_1 = {
|
|
43
|
+
key: 0,
|
|
44
|
+
class: "opencode-bubble-empty"
|
|
45
|
+
};
|
|
46
|
+
const _hoisted_2 = ["onClick"];
|
|
47
|
+
const _hoisted_3 = { class: "opencode-bubble-text" };
|
|
48
|
+
const _hoisted_4 = {
|
|
49
|
+
key: 0,
|
|
50
|
+
class: "opencode-bubble-file"
|
|
51
|
+
};
|
|
52
|
+
const _hoisted_5 = ["aria-label", "onClick"];
|
|
53
|
+
function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
54
|
+
return (0, import_vue2.openBlock)(), (0, import_vue2.createElementBlock)(
|
|
55
|
+
"div",
|
|
56
|
+
{
|
|
57
|
+
class: (0, import_vue2.normalizeClass)(["opencode-selected-bubbles", { visible: $setup.visible }]),
|
|
58
|
+
role: "list",
|
|
59
|
+
"aria-label": "\u5DF2\u9009\u5143\u7D20\u5217\u8868"
|
|
60
|
+
},
|
|
61
|
+
[
|
|
62
|
+
$setup.items.length === 0 ? ((0, import_vue2.openBlock)(), (0, import_vue2.createElementBlock)("div", _hoisted_1, "\u6682\u65E0\u9009\u4E2D\u5143\u7D20")) : ((0, import_vue2.openBlock)(true), (0, import_vue2.createElementBlock)(
|
|
63
|
+
import_vue2.Fragment,
|
|
64
|
+
{ key: 1 },
|
|
65
|
+
(0, import_vue2.renderList)($setup.items, (item, index) => {
|
|
66
|
+
return (0, import_vue2.openBlock)(), (0, import_vue2.createElementBlock)("div", {
|
|
67
|
+
key: item.key,
|
|
68
|
+
class: "opencode-selected-bubble",
|
|
69
|
+
role: "listitem",
|
|
70
|
+
onClick: ($event) => $setup.handleClickSelectedNode(item)
|
|
71
|
+
}, [
|
|
72
|
+
(0, import_vue2.createElementVNode)(
|
|
73
|
+
"span",
|
|
74
|
+
_hoisted_3,
|
|
75
|
+
(0, import_vue2.toDisplayString)(item.description),
|
|
76
|
+
1
|
|
77
|
+
/* TEXT */
|
|
78
|
+
),
|
|
79
|
+
item.bubbleFileText ? ((0, import_vue2.openBlock)(), (0, import_vue2.createElementBlock)(
|
|
80
|
+
"span",
|
|
81
|
+
_hoisted_4,
|
|
82
|
+
(0, import_vue2.toDisplayString)(item.bubbleFileText),
|
|
83
|
+
1
|
|
84
|
+
/* TEXT */
|
|
85
|
+
)) : (0, import_vue2.createCommentVNode)("v-if", true),
|
|
86
|
+
(0, import_vue2.createElementVNode)("button", {
|
|
87
|
+
class: "opencode-bubble-remove",
|
|
88
|
+
type: "button",
|
|
89
|
+
"aria-label": `\u79FB\u9664\u5143\u7D20: ${item.description}`,
|
|
90
|
+
onClick: (0, import_vue2.withModifiers)(($event) => $setup.handleRemoveSelectedNode({ item, index, source: "bubble" }), ["stop"])
|
|
91
|
+
}, " \xD7 ", 8, _hoisted_5)
|
|
92
|
+
], 8, _hoisted_2);
|
|
93
|
+
}),
|
|
94
|
+
128
|
|
95
|
+
/* KEYED_FRAGMENT */
|
|
96
|
+
))
|
|
97
|
+
],
|
|
98
|
+
2
|
|
99
|
+
/* CLASS */
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
__vue_sfc__.render = __vue_render__;
|
|
103
|
+
var SelectedBubbles_vue_default = __vue_sfc__;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.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)}
|