@vite-plugin-opencode-assistant/components 1.0.16 → 1.0.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/open-code-widget/src/index-sfc.css +1 -1
- package/es/open-code-widget/src/index.vue.d.ts +13 -10
- package/es/open-code-widget/src/index.vue.js +26 -9
- package/lib/@vite-plugin-opencode-assistant/components.cjs.js +49 -99
- package/lib/@vite-plugin-opencode-assistant/components.es.js +50 -100
- package/lib/components.css +1 -2
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/open-code-widget/src/index-sfc.css +1 -1
- package/lib/open-code-widget/src/index.vue.d.ts +13 -10
- package/lib/open-code-widget/src/index.vue.js +25 -8
- package/lib/web-types.json +1 -1
- package/package.json +2 -2
package/es/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import OpenCodeWidget from './open-code-widget';
|
|
2
2
|
import type { App } from 'vue';
|
|
3
|
-
declare const version = "1.0.
|
|
3
|
+
declare const version = "1.0.18";
|
|
4
4
|
declare function install(app: App<any>, options?: any): void;
|
|
5
5
|
export { install, version, OpenCodeWidget };
|
|
6
6
|
export default install;
|
package/es/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.opencode-widget{--oc-bg-main: #ffffff;--oc-bg-secondary: #f8f9fa;--oc-bg-tertiary: #f3f4f6;--oc-overlay-bg: rgba(255, 255, 255, .9);--oc-bg-inverse: #1e1e1e;--oc-text-primary: #282828;--oc-text-secondary: #4b5563;--oc-text-tertiary: #6b7280;--oc-text-placeholder: #9ca3af;--oc-text-inverse: #ffffff;--oc-border-primary: #e5e7eb;--oc-border-secondary: #d1d5db;--oc-primary: #3b82f6;--oc-primary-hover: #2563eb;--oc-primary-bg: rgba(59, 130, 246, .1);--oc-danger: #ef4444;--oc-danger-hover: #dc2626;--oc-danger-active: #b91c1c;--oc-success: #10b981;--oc-overlay: rgba(0, 0, 0, .5);--oc-tooltip-bg: #1e1e1e;--oc-dialog-overlay: rgba(0, 0, 0, .5);--oc-thinking-gradient-1: #10b981;--oc-thinking-gradient-2: #059669;--oc-thinking-glow: rgba(16, 185, 129, .3);--oc-thinking-glow-strong: rgba(16, 185, 129, .6);--oc-skeleton-bg: #e5e7eb;--oc-skeleton-gradient: linear-gradient(90deg, #e5e7eb 25%, #f3f4f6 50%, #e5e7eb 75%);--oc-shadow-sm: 0 2px 4px rgba(0, 0, 0, .1);--oc-shadow-md: 0 4px 12px rgba(0, 0, 0, .15);--oc-shadow-lg: 0 8px 32px rgba(0, 0, 0, .12);--oc-shadow-xl: 0 20px 60px rgba(0, 0, 0, .3);--oc-shadow-primary: 0 2px 4px rgba(59, 130, 246, .2);--oc-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .3);--oc-shadow-danger: 0 4px 12px rgba(239, 68, 68, .3);--oc-trigger-bg: #3b82f6;--oc-trigger-bg-hover: #2563eb;--oc-trigger-bg-active: #1d4ed8;--oc-trigger-shadow: 0 2px 8px rgba(59, 130, 246, .3);--oc-trigger-shadow-hover: 0 4px 12px rgba(59, 130, 246, .4);--oc-trigger-shadow-active: 0 4px 12px rgba(59, 130, 246, .5);position:fixed;z-index:999999;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.opencode-widget.opencode-theme-dark{--oc-bg-main: #1a1a1a;--oc-bg-secondary: #1e1e1e;--oc-bg-tertiary: #282828;--oc-overlay-bg: rgba(26, 26, 26, .9);--oc-bg-inverse: #ffffff;--oc-text-primary: #f3f4f6;--oc-text-secondary: #d1d5db;--oc-text-tertiary: #9ca3af;--oc-text-placeholder: #6b7280;--oc-text-inverse: #282828;--oc-border-primary: #282828;--oc-border-secondary: #4b5563;--oc-primary: #3b82f6;--oc-primary-hover: #2563eb;--oc-primary-bg: rgba(59, 130, 246, .15);--oc-danger: #ef4444;--oc-danger-hover: #dc2626;--oc-danger-active: #b91c1c;--oc-success: #10b981;--oc-overlay: rgba(26, 26, 26, .9);--oc-tooltip-bg: #282828;--oc-dialog-overlay: rgba(0, 0, 0, .7);--oc-thinking-gradient-1: #34d399;--oc-thinking-gradient-2: #10b981;--oc-thinking-glow: rgba(52, 211, 153, .3);--oc-thinking-glow-strong: rgba(52, 211, 153, .6);--oc-skeleton-bg: #151515;--oc-skeleton-gradient: linear-gradient(90deg, #282828 25%, #4b5563 50%, #282828 75%);--oc-shadow-sm: 0 2px 4px rgba(0, 0, 0, .3);--oc-shadow-md: 0 4px 12px rgba(0, 0, 0, .4);--oc-shadow-lg: 0 8px 32px rgba(0, 0, 0, .4);--oc-shadow-xl: 0 20px 60px rgba(0, 0, 0, .6);--oc-shadow-primary: 0 2px 4px rgba(59, 130, 246, .3);--oc-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .4);--oc-shadow-danger: 0 4px 12px rgba(239, 68, 68, .4);--oc-trigger-bg: #60a5fa;--oc-trigger-bg-hover: #3b82f6;--oc-trigger-bg-active: #2563eb;--oc-trigger-shadow: 0 2px 8px rgba(96, 165, 250, .4);--oc-trigger-shadow-hover: 0 4px 12px rgba(96, 165, 250, .5);--oc-trigger-shadow-active: 0 4px 12px rgba(96, 165, 250, .6)}.opencode-widget.bottom-right{bottom:20px;right:20px}.opencode-widget.bottom-left{bottom:20px;left:20px}.opencode-widget.top-right{top:20px;right:20px}.opencode-widget.top-left{top:20px;left:20px}.opencode-chat{position:absolute;width:700px;height:86vh;background:var(--oc-bg-main);border-radius:16px;box-shadow:var(--oc-shadow-lg);overflow:hidden;opacity:0;visibility:hidden;transform:translateY(20px) scale(.95);transition:all .3s ease;display:flex;flex-direction:column}.opencode-chat-content{display:flex;flex:1;overflow:hidden}.opencode-widget.bottom-right .opencode-chat{bottom:56px;right:0}.opencode-widget.bottom-left .opencode-chat{bottom:56px;left:0}.opencode-widget.top-right .opencode-chat{top:56px;right:0}.opencode-widget.top-left .opencode-chat{top:56px;left:0}.opencode-widget.bottom-right .opencode-selected-bubbles{bottom:56px;right:0}.opencode-widget.bottom-left .opencode-selected-bubbles{bottom:56px;left:0}.opencode-widget.top-right .opencode-selected-bubbles{top:56px;bottom:auto;right:0}.opencode-widget.top-left .opencode-selected-bubbles{top:56px;bottom:auto;left:0}.opencode-chat.open{opacity:1;visibility:visible;transform:translateY(0) scale(1)}.opencode-notification{position:absolute;top:20px;left:50%;transform:translate(-50%);padding:12px 24px;background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;border-radius:10px;font-size:14px;font-weight:500;box-shadow:0 4px 16px rgba(59,130,246,.4),0 0 0 2px rgba(59,130,246,.2);animation:slideDown .3s ease;z-index:10000000;display:flex;align-items:center;gap:10px}.opencode-notification:before{content:"\1f4a1";font-size:16px}.opencode-dialog-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:var(--oc-dialog-overlay);display:flex;align-items:center;justify-content:center;z-index:9999999;animation:fadeIn .2s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.opencode-dialog{background:var(--oc-bg-main);border-radius:12px;padding:24px;min-width:320px;max-width:400px;box-shadow:var(--oc-shadow-xl);animation:scaleIn .2s ease}@keyframes scaleIn{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}.opencode-dialog-content{margin-bottom:20px}.opencode-dialog-message{font-size:15px;color:var(--oc-text-primary);line-height:1.5}.opencode-dialog-actions{display:flex;gap:12px;justify-content:flex-end}.opencode-dialog-btn{padding:10px 20px;border-radius:8px;border:none;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s}.opencode-dialog-btn.cancel{background:var(--oc-bg-tertiary);color:var(--oc-text-primary)}.opencode-dialog-btn.cancel:hover{background:var(--oc-text-primary);color:var(--oc-bg-main)}.opencode-dialog-btn.confirm{background:var(--oc-danger);color:#fff}.opencode-dialog-btn.confirm:hover{background:var(--oc-danger-hover)}@keyframes slideDown{0%{transform:translate(-50%) translateY(-100%);opacity:0}to{transform:translate(-50%) translateY(0);opacity:1}}.opencode-element-highlight{position:fixed;pointer-events:none;z-index:999998;display:none;transition:all .1s ease;border-radius:4px}#vue-inspector-container{display:none!important}.opencode-element-tooltip{position:fixed;background:var(--oc-tooltip-bg);color:#fff;padding:8px 12px;border-radius:6px;font-size:12px;z-index:9999998;display:none;box-shadow:var(--oc-shadow-md);max-width:300px;pointer-events:none}.opencode-tooltip-tag{font-weight:500;margin-bottom:4px;word-break:break-all}.opencode-tooltip-file{font-size:11px;color:var(--oc-text-placeholder);word-break:break-all}.opencode-element-highlight-temp{position:absolute;pointer-events:none;z-index:999998;border-radius:4px;animation:highlight-pulse 2s ease-out forwards}@keyframes highlight-pulse{0%{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.02)}to{opacity:0;transform:scale(1)}}@media(max-width:768px){.opencode-chat{width:calc(100vw - 40px);height:calc(100vh - 100px)}}
|
|
1
|
+
.opencode-widget{--oc-bg-main: #ffffff;--oc-bg-secondary: #f8f9fa;--oc-bg-tertiary: #f3f4f6;--oc-overlay-bg: rgba(255, 255, 255, .9);--oc-bg-inverse: #1e1e1e;--oc-text-primary: #282828;--oc-text-secondary: #4b5563;--oc-text-tertiary: #6b7280;--oc-text-placeholder: #9ca3af;--oc-text-inverse: #ffffff;--oc-border-primary: #e5e7eb;--oc-border-secondary: #d1d5db;--oc-primary: #3b82f6;--oc-primary-hover: #2563eb;--oc-primary-bg: rgba(59, 130, 246, .1);--oc-danger: #ef4444;--oc-danger-hover: #dc2626;--oc-danger-active: #b91c1c;--oc-success: #10b981;--oc-overlay: rgba(0, 0, 0, .5);--oc-tooltip-bg: #1e1e1e;--oc-dialog-overlay: rgba(0, 0, 0, .5);--oc-thinking-gradient-1: #10b981;--oc-thinking-gradient-2: #059669;--oc-thinking-glow: rgba(16, 185, 129, .3);--oc-thinking-glow-strong: rgba(16, 185, 129, .6);--oc-skeleton-bg: #e5e7eb;--oc-skeleton-gradient: linear-gradient(90deg, #e5e7eb 25%, #f3f4f6 50%, #e5e7eb 75%);--oc-shadow-sm: 0 2px 4px rgba(0, 0, 0, .1);--oc-shadow-md: 0 4px 12px rgba(0, 0, 0, .15);--oc-shadow-lg: 0 8px 32px rgba(0, 0, 0, .12);--oc-shadow-xl: 0 20px 60px rgba(0, 0, 0, .3);--oc-shadow-primary: 0 2px 4px rgba(59, 130, 246, .2);--oc-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .3);--oc-shadow-danger: 0 4px 12px rgba(239, 68, 68, .3);--oc-trigger-bg: #3b82f6;--oc-trigger-bg-hover: #2563eb;--oc-trigger-bg-active: #1d4ed8;--oc-trigger-shadow: 0 2px 8px rgba(59, 130, 246, .3);--oc-trigger-shadow-hover: 0 4px 12px rgba(59, 130, 246, .4);--oc-trigger-shadow-active: 0 4px 12px rgba(59, 130, 246, .5);position:fixed;z-index:999999;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.opencode-widget.opencode-theme-dark{--oc-bg-main: #1a1a1a;--oc-bg-secondary: #1e1e1e;--oc-bg-tertiary: #282828;--oc-overlay-bg: rgba(26, 26, 26, .9);--oc-bg-inverse: #ffffff;--oc-text-primary: #f3f4f6;--oc-text-secondary: #d1d5db;--oc-text-tertiary: #9ca3af;--oc-text-placeholder: #6b7280;--oc-text-inverse: #282828;--oc-border-primary: #282828;--oc-border-secondary: #4b5563;--oc-primary: #3b82f6;--oc-primary-hover: #2563eb;--oc-primary-bg: rgba(59, 130, 246, .15);--oc-danger: #ef4444;--oc-danger-hover: #dc2626;--oc-danger-active: #b91c1c;--oc-success: #10b981;--oc-overlay: rgba(26, 26, 26, .9);--oc-tooltip-bg: #282828;--oc-dialog-overlay: rgba(0, 0, 0, .7);--oc-thinking-gradient-1: #34d399;--oc-thinking-gradient-2: #10b981;--oc-thinking-glow: rgba(52, 211, 153, .3);--oc-thinking-glow-strong: rgba(52, 211, 153, .6);--oc-skeleton-bg: #151515;--oc-skeleton-gradient: linear-gradient(90deg, #282828 25%, #4b5563 50%, #282828 75%);--oc-shadow-sm: 0 2px 4px rgba(0, 0, 0, .3);--oc-shadow-md: 0 4px 12px rgba(0, 0, 0, .4);--oc-shadow-lg: 0 8px 32px rgba(0, 0, 0, .4);--oc-shadow-xl: 0 20px 60px rgba(0, 0, 0, .6);--oc-shadow-primary: 0 2px 4px rgba(59, 130, 246, .3);--oc-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .4);--oc-shadow-danger: 0 4px 12px rgba(239, 68, 68, .4);--oc-trigger-bg: #60a5fa;--oc-trigger-bg-hover: #3b82f6;--oc-trigger-bg-active: #2563eb;--oc-trigger-shadow: 0 2px 8px rgba(96, 165, 250, .4);--oc-trigger-shadow-hover: 0 4px 12px rgba(96, 165, 250, .5);--oc-trigger-shadow-active: 0 4px 12px rgba(96, 165, 250, .6)}.opencode-widget.bottom-right{bottom:20px;right:20px}.opencode-widget.bottom-left{bottom:20px;left:20px}.opencode-widget.top-right{top:20px;right:20px}.opencode-widget.top-left{top:20px;left:20px}.opencode-chat{position:absolute;width:700px;height:86vh;background:var(--oc-bg-main);border-radius:16px;box-shadow:var(--oc-shadow-lg);overflow:hidden;opacity:0;visibility:hidden;transform:translateY(20px) scale(.95);transition:all .3s ease;display:flex;flex-direction:column}.opencode-chat-content{display:flex;flex:1;overflow:hidden}.opencode-widget.bottom-right .opencode-chat{bottom:56px;right:0}.opencode-widget.bottom-left .opencode-chat{bottom:56px;left:0}.opencode-widget.top-right .opencode-chat{top:56px;right:0}.opencode-widget.top-left .opencode-chat{top:56px;left:0}.opencode-widget.bottom-right .opencode-selected-bubbles{bottom:56px;right:0}.opencode-widget.bottom-left .opencode-selected-bubbles{bottom:56px;left:0}.opencode-widget.top-right .opencode-selected-bubbles{top:56px;bottom:auto;right:0}.opencode-widget.top-left .opencode-selected-bubbles{top:56px;bottom:auto;left:0}.opencode-chat.open{opacity:1;visibility:visible;transform:translateY(0) scale(1)}.opencode-notification{position:absolute;top:20px;left:50%;transform:translate(-50%);padding:12px 24px;background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;border-radius:10px;font-size:14px;font-weight:500;box-shadow:0 4px 16px rgba(59,130,246,.4),0 0 0 2px rgba(59,130,246,.2);animation:slideDown .3s ease;z-index:10000000;display:flex;align-items:center;gap:10px}.opencode-notification:before{content:"\1f4a1";font-size:16px}.opencode-dialog-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:var(--oc-dialog-overlay);display:flex;align-items:center;justify-content:center;z-index:9999999;animation:fadeIn .2s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.opencode-dialog{background:var(--oc-bg-main);border-radius:12px;padding:24px;min-width:320px;max-width:400px;box-shadow:var(--oc-shadow-xl);animation:scaleIn .2s ease}@keyframes scaleIn{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}.opencode-dialog-content{margin-bottom:20px}.opencode-dialog-message{font-size:15px;color:var(--oc-text-primary);line-height:1.5}.opencode-dialog-actions{display:flex;gap:12px;justify-content:flex-end}.opencode-dialog-btn{padding:10px 20px;border-radius:8px;border:none;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s}.opencode-dialog-btn.cancel{background:var(--oc-bg-tertiary);color:var(--oc-text-primary)}.opencode-dialog-btn.cancel:hover{background:var(--oc-text-primary);color:var(--oc-bg-main)}.opencode-dialog-btn.confirm{background:var(--oc-danger);color:#fff}.opencode-dialog-btn.confirm:hover{background:var(--oc-danger-hover)}@keyframes slideDown{0%{transform:translate(-50%) translateY(-100%);opacity:0}to{transform:translate(-50%) translateY(0);opacity:1}}.opencode-page-notification{position:fixed;top:20px;left:50%;transform:translate(-50%);padding:12px 24px;background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;border-radius:10px;font-size:14px;font-weight:500;box-shadow:0 4px 16px rgba(59,130,246,.4),0 0 0 2px rgba(59,130,246,.2);animation:slideDown .3s ease;z-index:2147483647;display:flex;align-items:center;gap:10px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.opencode-page-notification:before{content:"\1f4a1";font-size:16px}.opencode-element-highlight{position:fixed;pointer-events:none;z-index:999998;display:none;transition:all .1s ease;border-radius:4px}#vue-inspector-container{display:none!important}.opencode-element-tooltip{position:fixed;background:var(--oc-tooltip-bg);color:#fff;padding:8px 12px;border-radius:6px;font-size:12px;z-index:9999998;display:none;box-shadow:var(--oc-shadow-md);max-width:300px;pointer-events:none}.opencode-tooltip-tag{font-weight:500;margin-bottom:4px;word-break:break-all}.opencode-tooltip-file{font-size:11px;color:var(--oc-text-placeholder);word-break:break-all}.opencode-element-highlight-temp{position:absolute;pointer-events:none;z-index:999998;border-radius:4px;animation:highlight-pulse 2s ease-out forwards}@keyframes highlight-pulse{0%{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.02)}to{opacity:0;transform:scale(1)}}@media(max-width:768px){.opencode-chat{width:calc(100vw - 40px);height:calc(100vh - 100px)}}
|
|
@@ -1,26 +1,29 @@
|
|
|
1
1
|
import type { OpenCodeWidgetProps } from "./types";
|
|
2
|
-
declare var __VLS_4: {},
|
|
2
|
+
declare var __VLS_4: {}, __VLS_9: {}, __VLS_11: {}, __VLS_13: {}, __VLS_18: {}, __VLS_25: {}, __VLS_27: {}, __VLS_29: {}, __VLS_31: {};
|
|
3
3
|
type __VLS_Slots = {} & {
|
|
4
4
|
'button-icon'?: (props: typeof __VLS_4) => any;
|
|
5
5
|
} & {
|
|
6
|
-
'session-toggle-icon'?: (props: typeof
|
|
6
|
+
'session-toggle-icon'?: (props: typeof __VLS_9) => any;
|
|
7
7
|
} & {
|
|
8
|
-
'select-icon'?: (props: typeof
|
|
8
|
+
'select-icon'?: (props: typeof __VLS_11) => any;
|
|
9
9
|
} & {
|
|
10
|
-
'close-icon'?: (props: typeof
|
|
10
|
+
'close-icon'?: (props: typeof __VLS_13) => any;
|
|
11
11
|
} & {
|
|
12
|
-
'sessions-empty'?: (props: typeof
|
|
12
|
+
'sessions-empty'?: (props: typeof __VLS_18) => any;
|
|
13
13
|
} & {
|
|
14
|
-
'empty-state'?: (props: typeof
|
|
14
|
+
'empty-state'?: (props: typeof __VLS_25) => any;
|
|
15
15
|
} & {
|
|
16
|
-
loading?: (props: typeof
|
|
16
|
+
loading?: (props: typeof __VLS_27) => any;
|
|
17
17
|
} & {
|
|
18
|
-
error?: (props: typeof
|
|
18
|
+
error?: (props: typeof __VLS_29) => any;
|
|
19
19
|
} & {
|
|
20
|
-
content?: (props: typeof
|
|
20
|
+
content?: (props: typeof __VLS_31) => any;
|
|
21
21
|
};
|
|
22
22
|
declare const __VLS_component: import("vue").DefineComponent<OpenCodeWidgetProps, {
|
|
23
|
-
showNotification: (message: string,
|
|
23
|
+
showNotification: (message: string, options?: {
|
|
24
|
+
duration?: number;
|
|
25
|
+
mode?: "widget" | "page";
|
|
26
|
+
}) => void;
|
|
24
27
|
showConfirmDialog: (message: string) => Promise<boolean>;
|
|
25
28
|
sendMessageToIframe: (type: string, data?: Record<string, unknown>) => void;
|
|
26
29
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
@@ -23,7 +23,6 @@ import { useSlots, toRef, ref, watch } from "vue";
|
|
|
23
23
|
import Frame from "./components/Frame.vue.js";
|
|
24
24
|
import Header from "./components/Header.vue.js";
|
|
25
25
|
import SelectHint from "./components/SelectHint.vue.js";
|
|
26
|
-
import SelectedBubbles from "./components/SelectedBubbles.vue.js";
|
|
27
26
|
import SelectedNodes from "./components/SelectedNodes.vue.js";
|
|
28
27
|
import SessionList from "./components/SessionList.vue.js";
|
|
29
28
|
import Trigger from "./components/Trigger.vue.js";
|
|
@@ -68,10 +67,13 @@ const __vue_sfc__ = /* @__PURE__ */ _defineComponent(__spreadProps(__spreadValue
|
|
|
68
67
|
const slots = useSlots();
|
|
69
68
|
const notificationMessage = ref("");
|
|
70
69
|
const notificationVisible = ref(false);
|
|
70
|
+
const notificationMode = ref("widget");
|
|
71
71
|
let notificationTimer = null;
|
|
72
|
-
const showNotification = (message,
|
|
72
|
+
const showNotification = (message, options) => {
|
|
73
|
+
const { duration = 3e3, mode = "widget" } = options || {};
|
|
73
74
|
notificationMessage.value = message;
|
|
74
75
|
notificationVisible.value = true;
|
|
76
|
+
notificationMode.value = mode;
|
|
75
77
|
if (notificationTimer) clearTimeout(notificationTimer);
|
|
76
78
|
notificationTimer = setTimeout(() => {
|
|
77
79
|
notificationVisible.value = false;
|
|
@@ -247,7 +249,7 @@ const __vue_sfc__ = /* @__PURE__ */ _defineComponent(__spreadProps(__spreadValue
|
|
|
247
249
|
handleClearSelectedNodes,
|
|
248
250
|
handleFrameLoaded
|
|
249
251
|
});
|
|
250
|
-
const __returned__ = { props, emit, slots, notificationMessage, notificationVisible, get notificationTimer() {
|
|
252
|
+
const __returned__ = { props, emit, slots, notificationMessage, notificationVisible, notificationMode, get notificationTimer() {
|
|
251
253
|
return notificationTimer;
|
|
252
254
|
}, set notificationTimer(v) {
|
|
253
255
|
notificationTimer = v;
|
|
@@ -255,12 +257,12 @@ const __vue_sfc__ = /* @__PURE__ */ _defineComponent(__spreadProps(__spreadValue
|
|
|
255
257
|
return dialogResolve;
|
|
256
258
|
}, set dialogResolve(v) {
|
|
257
259
|
dialogResolve = v;
|
|
258
|
-
}, showConfirmDialog, handleDialogConfirm, handleDialogCancel, frameRef, sendMessageToIframe, handleFrameLoaded, localSessionListCollapsed, buttonActive, containerClasses, iframeSource, sessionListTitle, resolvedTheme, handleClose, handleEmptyAction, handleToggle, handleToggleSessionList, handleToggleTheme, sessionItems, handleCreateSession, handleDeleteSession, handleSelectSession, bubbleVisible, hasSelectedElements, selectedElementItems, handleClearSelectedNodes, handleClickSelectedNode, handleRemoveSelectedNode, handleToggleSelectMode, highlightVisible, highlightStyle, tooltipVisible, tooltipStyle, tooltipContent, Frame, Header, SelectHint,
|
|
260
|
+
}, showConfirmDialog, handleDialogConfirm, handleDialogCancel, frameRef, sendMessageToIframe, handleFrameLoaded, localSessionListCollapsed, buttonActive, containerClasses, iframeSource, sessionListTitle, resolvedTheme, handleClose, handleEmptyAction, handleToggle, handleToggleSessionList, handleToggleTheme, sessionItems, handleCreateSession, handleDeleteSession, handleSelectSession, bubbleVisible, hasSelectedElements, selectedElementItems, handleClearSelectedNodes, handleClickSelectedNode, handleRemoveSelectedNode, handleToggleSelectMode, highlightVisible, highlightStyle, tooltipVisible, tooltipStyle, tooltipContent, Frame, Header, SelectHint, SelectedNodes, SessionList, Trigger };
|
|
259
261
|
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
260
262
|
return __returned__;
|
|
261
263
|
}
|
|
262
264
|
}));
|
|
263
|
-
import { renderSlot as _renderSlot, withCtx as _withCtx, createSlots as _createSlots, createVNode as _createVNode,
|
|
265
|
+
import { renderSlot as _renderSlot, withCtx as _withCtx, createSlots as _createSlots, createVNode as _createVNode, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, vShow as _vShow, normalizeClass as _normalizeClass, withDirectives as _withDirectives, normalizeStyle as _normalizeStyle, Teleport as _Teleport, createBlock as _createBlock } from "vue";
|
|
264
266
|
const _hoisted_1 = {
|
|
265
267
|
key: 0,
|
|
266
268
|
class: "opencode-notification",
|
|
@@ -270,7 +272,7 @@ const _hoisted_2 = { class: "opencode-chat-content" };
|
|
|
270
272
|
const _hoisted_3 = { class: "opencode-tooltip-tag" };
|
|
271
273
|
const _hoisted_4 = { class: "opencode-tooltip-file" };
|
|
272
274
|
const _hoisted_5 = {
|
|
273
|
-
key:
|
|
275
|
+
key: 0,
|
|
274
276
|
class: "opencode-dialog-overlay"
|
|
275
277
|
};
|
|
276
278
|
const _hoisted_6 = {
|
|
@@ -280,6 +282,11 @@ const _hoisted_6 = {
|
|
|
280
282
|
};
|
|
281
283
|
const _hoisted_7 = { class: "opencode-dialog-content" };
|
|
282
284
|
const _hoisted_8 = { class: "opencode-dialog-message" };
|
|
285
|
+
const _hoisted_9 = {
|
|
286
|
+
key: 0,
|
|
287
|
+
class: "opencode-page-notification",
|
|
288
|
+
role: "alert"
|
|
289
|
+
};
|
|
283
290
|
function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
284
291
|
return _openBlock(), _createElementBlock(
|
|
285
292
|
"div",
|
|
@@ -305,7 +312,7 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
305
312
|
1024
|
|
306
313
|
/* DYNAMIC_SLOTS */
|
|
307
314
|
),
|
|
308
|
-
|
|
315
|
+
_createCommentVNode(' <SelectedBubbles v-if="bubbleVisible" /> '),
|
|
309
316
|
_withDirectives(_createElementVNode(
|
|
310
317
|
"div",
|
|
311
318
|
{
|
|
@@ -345,7 +352,7 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
345
352
|
/* DYNAMIC_SLOTS */
|
|
346
353
|
),
|
|
347
354
|
_createCommentVNode(" Notification "),
|
|
348
|
-
$setup.notificationVisible ? (_openBlock(), _createElementBlock(
|
|
355
|
+
$setup.notificationVisible && $setup.notificationMode === "widget" ? (_openBlock(), _createElementBlock(
|
|
349
356
|
"div",
|
|
350
357
|
_hoisted_1,
|
|
351
358
|
_toDisplayString($setup.notificationMessage),
|
|
@@ -484,7 +491,17 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
484
491
|
}, "\u786E\u8BA4")
|
|
485
492
|
])
|
|
486
493
|
])
|
|
487
|
-
])) : _createCommentVNode("v-if", true)
|
|
494
|
+
])) : _createCommentVNode("v-if", true),
|
|
495
|
+
_createCommentVNode(" Page-level Notification "),
|
|
496
|
+
(_openBlock(), _createBlock(_Teleport, { to: "body" }, [
|
|
497
|
+
$setup.notificationVisible && $setup.notificationMode === "page" ? (_openBlock(), _createElementBlock(
|
|
498
|
+
"div",
|
|
499
|
+
_hoisted_9,
|
|
500
|
+
_toDisplayString($setup.notificationMessage),
|
|
501
|
+
1
|
|
502
|
+
/* TEXT */
|
|
503
|
+
)) : _createCommentVNode("v-if", true)
|
|
504
|
+
]))
|
|
488
505
|
],
|
|
489
506
|
2
|
|
490
507
|
/* CLASS */
|
|
@@ -33,7 +33,7 @@ var __spreadValues$1 = (a, b) => {
|
|
|
33
33
|
}
|
|
34
34
|
return a;
|
|
35
35
|
};
|
|
36
|
-
var __vue_sfc__$
|
|
36
|
+
var __vue_sfc__$6 = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
37
37
|
__name: "Frame",
|
|
38
38
|
setup(__props, { expose: __expose }) {
|
|
39
39
|
const iframeRef = (0, vue.ref)(null);
|
|
@@ -68,11 +68,11 @@ var __vue_sfc__$7 = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
68
68
|
return __returned__;
|
|
69
69
|
}
|
|
70
70
|
});
|
|
71
|
-
var _hoisted_1$
|
|
72
|
-
var _hoisted_2$
|
|
73
|
-
var _hoisted_3$
|
|
74
|
-
function __vue_render__$
|
|
75
|
-
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$
|
|
71
|
+
var _hoisted_1$6 = { class: "opencode-iframe-container" };
|
|
72
|
+
var _hoisted_2$4 = { class: "opencode-empty-state-text" };
|
|
73
|
+
var _hoisted_3$4 = ["src"];
|
|
74
|
+
function __vue_render__$6(_ctx, _cache, $props, $setup, $data, $options) {
|
|
75
|
+
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$6, [
|
|
76
76
|
(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(["opencode-empty-state-overlay", { visible: $setup.showEmptyState }]) }, [(0, vue.renderSlot)(_ctx.$slots, "empty-state", {}, () => [
|
|
77
77
|
_cache[1] || (_cache[1] = (0, vue.createElementVNode)("div", { class: "opencode-empty-state-icon" }, [(0, vue.createElementVNode)("svg", {
|
|
78
78
|
viewBox: "0 0 24 24",
|
|
@@ -87,7 +87,7 @@ function __vue_render__$7(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
87
87
|
"stroke-linejoin": "round",
|
|
88
88
|
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"
|
|
89
89
|
})])], -1)),
|
|
90
|
-
(0, vue.createElementVNode)("div", _hoisted_2$
|
|
90
|
+
(0, vue.createElementVNode)("div", _hoisted_2$4, (0, vue.toDisplayString)($setup.emptyStateText), 1),
|
|
91
91
|
(0, vue.createElementVNode)("button", {
|
|
92
92
|
class: "opencode-empty-state-btn",
|
|
93
93
|
type: "button",
|
|
@@ -102,14 +102,14 @@ function __vue_render__$7(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
102
102
|
src: $setup.iframeSrc,
|
|
103
103
|
allow: "clipboard-write; clipboard-read",
|
|
104
104
|
referrerpolicy: "origin"
|
|
105
|
-
}, null, 8, _hoisted_3$
|
|
105
|
+
}, null, 8, _hoisted_3$4)])
|
|
106
106
|
]);
|
|
107
107
|
}
|
|
108
|
-
__vue_sfc__$
|
|
109
|
-
var Frame_vue_default = __vue_sfc__$
|
|
108
|
+
__vue_sfc__$6.render = __vue_render__$6;
|
|
109
|
+
var Frame_vue_default = __vue_sfc__$6;
|
|
110
110
|
//#endregion
|
|
111
111
|
//#region es/open-code-widget/src/components/Header.vue.js
|
|
112
|
-
var __vue_sfc__$
|
|
112
|
+
var __vue_sfc__$5 = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
113
113
|
__name: "Header",
|
|
114
114
|
setup(__props, { expose: __expose }) {
|
|
115
115
|
__expose();
|
|
@@ -148,15 +148,15 @@ var __vue_sfc__$6 = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
148
148
|
return __returned__;
|
|
149
149
|
}
|
|
150
150
|
});
|
|
151
|
-
var _hoisted_1$
|
|
152
|
-
var _hoisted_2$
|
|
153
|
-
var _hoisted_3$
|
|
151
|
+
var _hoisted_1$5 = { class: "opencode-chat-header" };
|
|
152
|
+
var _hoisted_2$3 = { class: "opencode-chat-header-left" };
|
|
153
|
+
var _hoisted_3$3 = [
|
|
154
154
|
"title",
|
|
155
155
|
"aria-label",
|
|
156
156
|
"aria-expanded"
|
|
157
157
|
];
|
|
158
|
-
var _hoisted_4$
|
|
159
|
-
var _hoisted_5$
|
|
158
|
+
var _hoisted_4$3 = ["aria-pressed", "disabled"];
|
|
159
|
+
var _hoisted_5$3 = ["title", "aria-label"];
|
|
160
160
|
var _hoisted_6$3 = {
|
|
161
161
|
key: 0,
|
|
162
162
|
viewBox: "0 0 24 24",
|
|
@@ -187,11 +187,11 @@ var _hoisted_8$2 = {
|
|
|
187
187
|
"stroke-width": "2",
|
|
188
188
|
"aria-hidden": "true"
|
|
189
189
|
};
|
|
190
|
-
var _hoisted_9$
|
|
190
|
+
var _hoisted_9$2 = { class: "opencode-chat-header-title" };
|
|
191
191
|
var _hoisted_10 = { class: "opencode-chat-header-actions" };
|
|
192
|
-
function __vue_render__$
|
|
193
|
-
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$
|
|
194
|
-
(0, vue.createElementVNode)("div", _hoisted_2$
|
|
192
|
+
function __vue_render__$5(_ctx, _cache, $props, $setup, $data, $options) {
|
|
193
|
+
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$5, [
|
|
194
|
+
(0, vue.createElementVNode)("div", _hoisted_2$3, [
|
|
195
195
|
(0, vue.createElementVNode)("button", {
|
|
196
196
|
class: (0, vue.normalizeClass)(["opencode-header-btn session-toggle", { active: !$setup.sessionListCollapsed }]),
|
|
197
197
|
type: "button",
|
|
@@ -210,7 +210,7 @@ function __vue_render__$6(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
210
210
|
}, [(0, vue.createElementVNode)("path", {
|
|
211
211
|
d: "M4 6h16M4 12h16M4 18h16",
|
|
212
212
|
"stroke-linecap": "round"
|
|
213
|
-
})], -1))])], 10, _hoisted_3$
|
|
213
|
+
})], -1))])], 10, _hoisted_3$3),
|
|
214
214
|
(0, vue.createElementVNode)("button", {
|
|
215
215
|
class: (0, vue.normalizeClass)(["opencode-header-btn select-btn", { active: $setup.selectMode }]),
|
|
216
216
|
type: "button",
|
|
@@ -230,16 +230,16 @@ function __vue_render__$6(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
230
230
|
}), (0, vue.createElementVNode)("path", {
|
|
231
231
|
fill: "currentColor",
|
|
232
232
|
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"
|
|
233
|
-
})], -1))])], 10, _hoisted_4$
|
|
233
|
+
})], -1))])], 10, _hoisted_4$3),
|
|
234
234
|
(0, vue.createElementVNode)("button", {
|
|
235
235
|
class: "opencode-header-btn theme-btn",
|
|
236
236
|
type: "button",
|
|
237
237
|
title: $setup.themeIconTitle,
|
|
238
238
|
"aria-label": $setup.themeIconLabel,
|
|
239
239
|
onClick: _cache[2] || (_cache[2] = (...args) => $setup.handleToggleTheme && $setup.handleToggleTheme(...args))
|
|
240
|
-
}, [(0, vue.renderSlot)(_ctx.$slots, "theme-icon", {}, () => [$setup.theme === "light" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", _hoisted_6$3, [..._cache[6] || (_cache[6] = [(0, vue.createStaticVNode)("<circle cx=\"12\" cy=\"12\" r=\"5\"></circle><line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"3\"></line><line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"23\"></line><line x1=\"4.22\" y1=\"4.22\" x2=\"5.64\" y2=\"5.64\"></line><line x1=\"18.36\" y1=\"18.36\" x2=\"19.78\" y2=\"19.78\"></line><line x1=\"1\" y1=\"12\" x2=\"3\" y2=\"12\"></line><line x1=\"21\" y1=\"12\" x2=\"23\" y2=\"12\"></line><line x1=\"4.22\" y1=\"19.78\" x2=\"5.64\" y2=\"18.36\"></line><line x1=\"18.36\" y1=\"5.64\" x2=\"19.78\" y2=\"4.22\"></line>", 9)])])) : $setup.theme === "dark" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", _hoisted_7$2, [..._cache[7] || (_cache[7] = [(0, vue.createElementVNode)("path", { d: "M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" }, null, -1)])])) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", _hoisted_8$2, [..._cache[8] || (_cache[8] = [(0, vue.createStaticVNode)("<rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"></rect><line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\"></line><line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\"></line><circle cx=\"12\" cy=\"10\" r=\"3\"></circle><path d=\"M7 7l2 2M17 7l-2 2M7 13l2-2M17 13l-2-2\"></path>", 5)])]))])], 8, _hoisted_5$
|
|
240
|
+
}, [(0, vue.renderSlot)(_ctx.$slots, "theme-icon", {}, () => [$setup.theme === "light" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", _hoisted_6$3, [..._cache[6] || (_cache[6] = [(0, vue.createStaticVNode)("<circle cx=\"12\" cy=\"12\" r=\"5\"></circle><line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"3\"></line><line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"23\"></line><line x1=\"4.22\" y1=\"4.22\" x2=\"5.64\" y2=\"5.64\"></line><line x1=\"18.36\" y1=\"18.36\" x2=\"19.78\" y2=\"19.78\"></line><line x1=\"1\" y1=\"12\" x2=\"3\" y2=\"12\"></line><line x1=\"21\" y1=\"12\" x2=\"23\" y2=\"12\"></line><line x1=\"4.22\" y1=\"19.78\" x2=\"5.64\" y2=\"18.36\"></line><line x1=\"18.36\" y1=\"5.64\" x2=\"19.78\" y2=\"4.22\"></line>", 9)])])) : $setup.theme === "dark" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", _hoisted_7$2, [..._cache[7] || (_cache[7] = [(0, vue.createElementVNode)("path", { d: "M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" }, null, -1)])])) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", _hoisted_8$2, [..._cache[8] || (_cache[8] = [(0, vue.createStaticVNode)("<rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"></rect><line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\"></line><line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\"></line><circle cx=\"12\" cy=\"10\" r=\"3\"></circle><path d=\"M7 7l2 2M17 7l-2 2M7 13l2-2M17 13l-2-2\"></path>", 5)])]))])], 8, _hoisted_5$3)
|
|
241
241
|
]),
|
|
242
|
-
(0, vue.createElementVNode)("span", _hoisted_9$
|
|
242
|
+
(0, vue.createElementVNode)("span", _hoisted_9$2, (0, vue.toDisplayString)($setup.title), 1),
|
|
243
243
|
(0, vue.createElementVNode)("div", _hoisted_10, [(0, vue.createElementVNode)("button", {
|
|
244
244
|
class: "opencode-header-btn close",
|
|
245
245
|
type: "button",
|
|
@@ -257,11 +257,11 @@ function __vue_render__$6(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
257
257
|
}, [(0, vue.createElementVNode)("path", { d: "M18 6L6 18M6 6l12 12" })], -1))])])])
|
|
258
258
|
]);
|
|
259
259
|
}
|
|
260
|
-
__vue_sfc__$
|
|
261
|
-
var Header_vue_default = __vue_sfc__$
|
|
260
|
+
__vue_sfc__$5.render = __vue_render__$5;
|
|
261
|
+
var Header_vue_default = __vue_sfc__$5;
|
|
262
262
|
//#endregion
|
|
263
263
|
//#region es/open-code-widget/src/components/SelectHint.vue.js
|
|
264
|
-
var __vue_sfc__$
|
|
264
|
+
var __vue_sfc__$4 = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
265
265
|
__name: "SelectHint",
|
|
266
266
|
setup(__props, { expose: __expose }) {
|
|
267
267
|
__expose();
|
|
@@ -277,72 +277,12 @@ var __vue_sfc__$5 = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
277
277
|
return __returned__;
|
|
278
278
|
}
|
|
279
279
|
});
|
|
280
|
-
var _hoisted_1$
|
|
281
|
-
function __vue_render__$5(_ctx, _cache, $props, $setup, $data, $options) {
|
|
282
|
-
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)(["opencode-select-mode-hint", { visible: $setup.visible }]) }, [_cache[0] || (_cache[0] = (0, vue.createElementVNode)("span", null, "🎯 选择模式已开启 - 点击元素进行选择", -1)), (0, vue.createElementVNode)("span", _hoisted_1$5, (0, vue.toDisplayString)($setup.shortcutLabel), 1)], 2);
|
|
283
|
-
}
|
|
284
|
-
__vue_sfc__$5.render = __vue_render__$5;
|
|
285
|
-
var SelectHint_vue_default = __vue_sfc__$5;
|
|
286
|
-
//#endregion
|
|
287
|
-
//#region es/open-code-widget/src/components/SelectedBubbles.vue.js
|
|
288
|
-
var __vue_sfc__$4 = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
289
|
-
__name: "SelectedBubbles",
|
|
290
|
-
setup(__props, { expose: __expose }) {
|
|
291
|
-
__expose();
|
|
292
|
-
const { bubbleVisible: visible, selectedElementItems: items, handleClickSelectedNode, handleRemoveSelectedNode } = useOpenCodeWidgetContext();
|
|
293
|
-
const __returned__ = {
|
|
294
|
-
visible,
|
|
295
|
-
items,
|
|
296
|
-
handleClickSelectedNode,
|
|
297
|
-
handleRemoveSelectedNode
|
|
298
|
-
};
|
|
299
|
-
Object.defineProperty(__returned__, "__isScriptSetup", {
|
|
300
|
-
enumerable: false,
|
|
301
|
-
value: true
|
|
302
|
-
});
|
|
303
|
-
return __returned__;
|
|
304
|
-
}
|
|
305
|
-
});
|
|
306
|
-
var _hoisted_1$4 = {
|
|
307
|
-
key: 0,
|
|
308
|
-
class: "opencode-bubble-empty"
|
|
309
|
-
};
|
|
310
|
-
var _hoisted_2$3 = ["onClick"];
|
|
311
|
-
var _hoisted_3$3 = { class: "opencode-bubble-text" };
|
|
312
|
-
var _hoisted_4$3 = {
|
|
313
|
-
key: 0,
|
|
314
|
-
class: "opencode-bubble-file"
|
|
315
|
-
};
|
|
316
|
-
var _hoisted_5$3 = ["aria-label", "onClick"];
|
|
280
|
+
var _hoisted_1$4 = { class: "opencode-hint-shortcut" };
|
|
317
281
|
function __vue_render__$4(_ctx, _cache, $props, $setup, $data, $options) {
|
|
318
|
-
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
|
|
319
|
-
class: (0, vue.normalizeClass)(["opencode-selected-bubbles", { visible: $setup.visible }]),
|
|
320
|
-
role: "list",
|
|
321
|
-
"aria-label": "已选元素列表"
|
|
322
|
-
}, [$setup.items.length === 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$4, "暂无选中元素")) : ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, { key: 1 }, (0, vue.renderList)($setup.items, (item, index) => {
|
|
323
|
-
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
|
|
324
|
-
key: item.key,
|
|
325
|
-
class: "opencode-selected-bubble",
|
|
326
|
-
role: "listitem",
|
|
327
|
-
onClick: ($event) => $setup.handleClickSelectedNode(item)
|
|
328
|
-
}, [
|
|
329
|
-
(0, vue.createElementVNode)("span", _hoisted_3$3, (0, vue.toDisplayString)(item.description), 1),
|
|
330
|
-
item.bubbleFileText ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_4$3, (0, vue.toDisplayString)(item.bubbleFileText), 1)) : (0, vue.createCommentVNode)("v-if", true),
|
|
331
|
-
(0, vue.createElementVNode)("button", {
|
|
332
|
-
class: "opencode-bubble-remove",
|
|
333
|
-
type: "button",
|
|
334
|
-
"aria-label": `\u79FB\u9664\u5143\u7D20: ${item.description}`,
|
|
335
|
-
onClick: (0, vue.withModifiers)(($event) => $setup.handleRemoveSelectedNode({
|
|
336
|
-
item,
|
|
337
|
-
index,
|
|
338
|
-
source: "bubble"
|
|
339
|
-
}), ["stop"])
|
|
340
|
-
}, " × ", 8, _hoisted_5$3)
|
|
341
|
-
], 8, _hoisted_2$3);
|
|
342
|
-
}), 128))], 2);
|
|
282
|
+
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)(["opencode-select-mode-hint", { visible: $setup.visible }]) }, [_cache[0] || (_cache[0] = (0, vue.createElementVNode)("span", null, "🎯 选择模式已开启 - 点击元素进行选择", -1)), (0, vue.createElementVNode)("span", _hoisted_1$4, (0, vue.toDisplayString)($setup.shortcutLabel), 1)], 2);
|
|
343
283
|
}
|
|
344
284
|
__vue_sfc__$4.render = __vue_render__$4;
|
|
345
|
-
var
|
|
285
|
+
var SelectHint_vue_default = __vue_sfc__$4;
|
|
346
286
|
//#endregion
|
|
347
287
|
//#region es/open-code-widget/src/components/SelectedNodes.vue.js
|
|
348
288
|
var __vue_sfc__$3 = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
@@ -471,7 +411,7 @@ var _hoisted_5$1 = ["aria-selected", "onClick"];
|
|
|
471
411
|
var _hoisted_6$1 = { class: "opencode-session-header" };
|
|
472
412
|
var _hoisted_7$1 = { class: "opencode-session-title" };
|
|
473
413
|
var _hoisted_8$1 = ["aria-label", "onClick"];
|
|
474
|
-
var _hoisted_9 = { class: "opencode-session-meta" };
|
|
414
|
+
var _hoisted_9$1 = { class: "opencode-session-meta" };
|
|
475
415
|
function __vue_render__$2(_ctx, _cache, $props, $setup, $data, $options) {
|
|
476
416
|
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)(["opencode-session-list", { collapsed: $setup.collapsed }]) }, [
|
|
477
417
|
(0, vue.createCommentVNode)(" Header "),
|
|
@@ -500,7 +440,7 @@ function __vue_render__$2(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
500
440
|
type: "button",
|
|
501
441
|
"aria-label": `\u5220\u9664\u4F1A\u8BDD: ${item.title}`,
|
|
502
442
|
onClick: (0, vue.withModifiers)(($event) => $setup.handleDeleteSession(item), ["stop"])
|
|
503
|
-
}, " × ", 8, _hoisted_8$1)]), (0, vue.createElementVNode)("div", _hoisted_9, (0, vue.toDisplayString)(item.meta), 1)], 10, _hoisted_5$1);
|
|
443
|
+
}, " × ", 8, _hoisted_8$1)]), (0, vue.createElementVNode)("div", _hoisted_9$1, (0, vue.toDisplayString)(item.meta), 1)], 10, _hoisted_5$1);
|
|
504
444
|
}), 128)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 2 }, [(0, vue.createCommentVNode)(" Empty State "), (0, vue.renderSlot)(_ctx.$slots, "empty")], 64))])], 2112))
|
|
505
445
|
], 2);
|
|
506
446
|
}
|
|
@@ -1188,10 +1128,13 @@ var __vue_sfc__ = /* @__PURE__ */ (0, vue.defineComponent)(__spreadProps(__sprea
|
|
|
1188
1128
|
const slots = (0, vue.useSlots)();
|
|
1189
1129
|
const notificationMessage = (0, vue.ref)("");
|
|
1190
1130
|
const notificationVisible = (0, vue.ref)(false);
|
|
1131
|
+
const notificationMode = (0, vue.ref)("widget");
|
|
1191
1132
|
let notificationTimer = null;
|
|
1192
|
-
const showNotification = (message,
|
|
1133
|
+
const showNotification = (message, options) => {
|
|
1134
|
+
const { duration = 3e3, mode = "widget" } = options || {};
|
|
1193
1135
|
notificationMessage.value = message;
|
|
1194
1136
|
notificationVisible.value = true;
|
|
1137
|
+
notificationMode.value = mode;
|
|
1195
1138
|
if (notificationTimer) clearTimeout(notificationTimer);
|
|
1196
1139
|
notificationTimer = setTimeout(() => {
|
|
1197
1140
|
notificationVisible.value = false;
|
|
@@ -1351,6 +1294,7 @@ var __vue_sfc__ = /* @__PURE__ */ (0, vue.defineComponent)(__spreadProps(__sprea
|
|
|
1351
1294
|
slots,
|
|
1352
1295
|
notificationMessage,
|
|
1353
1296
|
notificationVisible,
|
|
1297
|
+
notificationMode,
|
|
1354
1298
|
get notificationTimer() {
|
|
1355
1299
|
return notificationTimer;
|
|
1356
1300
|
},
|
|
@@ -1402,7 +1346,6 @@ var __vue_sfc__ = /* @__PURE__ */ (0, vue.defineComponent)(__spreadProps(__sprea
|
|
|
1402
1346
|
Frame: Frame_vue_default,
|
|
1403
1347
|
Header: Header_vue_default,
|
|
1404
1348
|
SelectHint: SelectHint_vue_default,
|
|
1405
|
-
SelectedBubbles: SelectedBubbles_vue_default,
|
|
1406
1349
|
SelectedNodes: SelectedNodes_vue_default,
|
|
1407
1350
|
SessionList: SessionList_vue_default,
|
|
1408
1351
|
Trigger: Trigger_vue_default
|
|
@@ -1423,7 +1366,7 @@ var _hoisted_2 = { class: "opencode-chat-content" };
|
|
|
1423
1366
|
var _hoisted_3 = { class: "opencode-tooltip-tag" };
|
|
1424
1367
|
var _hoisted_4 = { class: "opencode-tooltip-file" };
|
|
1425
1368
|
var _hoisted_5 = {
|
|
1426
|
-
key:
|
|
1369
|
+
key: 0,
|
|
1427
1370
|
class: "opencode-dialog-overlay"
|
|
1428
1371
|
};
|
|
1429
1372
|
var _hoisted_6 = {
|
|
@@ -1433,6 +1376,11 @@ var _hoisted_6 = {
|
|
|
1433
1376
|
};
|
|
1434
1377
|
var _hoisted_7 = { class: "opencode-dialog-content" };
|
|
1435
1378
|
var _hoisted_8 = { class: "opencode-dialog-message" };
|
|
1379
|
+
var _hoisted_9 = {
|
|
1380
|
+
key: 0,
|
|
1381
|
+
class: "opencode-page-notification",
|
|
1382
|
+
role: "alert"
|
|
1383
|
+
};
|
|
1436
1384
|
function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
1437
1385
|
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)($setup.containerClasses) }, [
|
|
1438
1386
|
(0, vue.createVNode)($setup["Trigger"], null, (0, vue.createSlots)({ _: 2 }, [$setup.slots["button-icon"] ? {
|
|
@@ -1440,7 +1388,7 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
1440
1388
|
fn: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "button-icon")]),
|
|
1441
1389
|
key: "0"
|
|
1442
1390
|
} : void 0]), 1024),
|
|
1443
|
-
|
|
1391
|
+
(0, vue.createCommentVNode)(" <SelectedBubbles v-if=\"bubbleVisible\" /> "),
|
|
1444
1392
|
(0, vue.withDirectives)((0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(["opencode-chat", { open: $props.open }]) }, [
|
|
1445
1393
|
(0, vue.createVNode)($setup["Header"], null, (0, vue.createSlots)({ _: 2 }, [
|
|
1446
1394
|
$setup.slots["session-toggle-icon"] ? {
|
|
@@ -1460,7 +1408,7 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
1460
1408
|
} : void 0
|
|
1461
1409
|
]), 1024),
|
|
1462
1410
|
(0, vue.createCommentVNode)(" Notification "),
|
|
1463
|
-
$setup.notificationVisible ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1, (0, vue.toDisplayString)($setup.notificationMessage), 1)) : (0, vue.createCommentVNode)("v-if", true),
|
|
1411
|
+
$setup.notificationVisible && $setup.notificationMode === "widget" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1, (0, vue.toDisplayString)($setup.notificationMessage), 1)) : (0, vue.createCommentVNode)("v-if", true),
|
|
1464
1412
|
(0, vue.createElementVNode)("div", _hoisted_2, [
|
|
1465
1413
|
(0, vue.createVNode)($setup["SessionList"], null, {
|
|
1466
1414
|
empty: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "sessions-empty", {}, () => [_cache[0] || (_cache[0] = (0, vue.createElementVNode)("div", { class: "opencode-session-empty" }, "暂无会话", -1))])]),
|
|
@@ -1509,7 +1457,9 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
1509
1457
|
}, "取消"), (0, vue.createElementVNode)("button", {
|
|
1510
1458
|
class: "opencode-dialog-btn confirm",
|
|
1511
1459
|
onClick: $setup.handleDialogConfirm
|
|
1512
|
-
}, "确认")])])])) : (0, vue.createCommentVNode)("v-if", true)
|
|
1460
|
+
}, "确认")])])])) : (0, vue.createCommentVNode)("v-if", true),
|
|
1461
|
+
(0, vue.createCommentVNode)(" Page-level Notification "),
|
|
1462
|
+
((0, vue.openBlock)(), (0, vue.createBlock)(vue.Teleport, { to: "body" }, [$setup.notificationVisible && $setup.notificationMode === "page" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_9, (0, vue.toDisplayString)($setup.notificationMessage), 1)) : (0, vue.createCommentVNode)("v-if", true)]))
|
|
1513
1463
|
], 2);
|
|
1514
1464
|
}
|
|
1515
1465
|
__vue_sfc__.render = __vue_render__;
|
|
@@ -1518,7 +1468,7 @@ __vue_sfc__.render = __vue_render__;
|
|
|
1518
1468
|
var open_code_widget_default = __vue_sfc__;
|
|
1519
1469
|
//#endregion
|
|
1520
1470
|
//#region es/index.js
|
|
1521
|
-
var version = "1.0.
|
|
1471
|
+
var version = "1.0.18";
|
|
1522
1472
|
function install(app, options) {
|
|
1523
1473
|
[open_code_widget_default].forEach((item) => {
|
|
1524
1474
|
if (item.install) app.use(item, options);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createStaticVNode, createVNode, defineComponent, inject, normalizeClass, normalizeStyle, onMounted, onUnmounted, openBlock, provide, ref, renderList, renderSlot, toDisplayString, toRef, useSlots, vShow, watch, withCtx, withDirectives, withModifiers } from "vue";
|
|
1
|
+
import { Fragment, Teleport, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createStaticVNode, createVNode, defineComponent, inject, normalizeClass, normalizeStyle, onMounted, onUnmounted, openBlock, provide, ref, renderList, renderSlot, toDisplayString, toRef, useSlots, vShow, watch, withCtx, withDirectives, withModifiers } from "vue";
|
|
2
2
|
import { truncate } from "@vite-plugin-opencode-assistant/shared";
|
|
3
3
|
//#region es/open-code-widget/src/context.js
|
|
4
4
|
var CONTEXT_KEY = /* @__PURE__ */ Symbol("OpenCodeWidgetContext");
|
|
@@ -29,7 +29,7 @@ var __spreadValues$1 = (a, b) => {
|
|
|
29
29
|
}
|
|
30
30
|
return a;
|
|
31
31
|
};
|
|
32
|
-
var __vue_sfc__$
|
|
32
|
+
var __vue_sfc__$6 = /* @__PURE__ */ defineComponent({
|
|
33
33
|
__name: "Frame",
|
|
34
34
|
setup(__props, { expose: __expose }) {
|
|
35
35
|
const iframeRef = ref(null);
|
|
@@ -64,11 +64,11 @@ var __vue_sfc__$7 = /* @__PURE__ */ defineComponent({
|
|
|
64
64
|
return __returned__;
|
|
65
65
|
}
|
|
66
66
|
});
|
|
67
|
-
var _hoisted_1$
|
|
68
|
-
var _hoisted_2$
|
|
69
|
-
var _hoisted_3$
|
|
70
|
-
function __vue_render__$
|
|
71
|
-
return openBlock(), createElementBlock("div", _hoisted_1$
|
|
67
|
+
var _hoisted_1$6 = { class: "opencode-iframe-container" };
|
|
68
|
+
var _hoisted_2$4 = { class: "opencode-empty-state-text" };
|
|
69
|
+
var _hoisted_3$4 = ["src"];
|
|
70
|
+
function __vue_render__$6(_ctx, _cache, $props, $setup, $data, $options) {
|
|
71
|
+
return openBlock(), createElementBlock("div", _hoisted_1$6, [
|
|
72
72
|
createElementVNode("div", { class: normalizeClass(["opencode-empty-state-overlay", { visible: $setup.showEmptyState }]) }, [renderSlot(_ctx.$slots, "empty-state", {}, () => [
|
|
73
73
|
_cache[1] || (_cache[1] = createElementVNode("div", { class: "opencode-empty-state-icon" }, [createElementVNode("svg", {
|
|
74
74
|
viewBox: "0 0 24 24",
|
|
@@ -83,7 +83,7 @@ function __vue_render__$7(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
83
83
|
"stroke-linejoin": "round",
|
|
84
84
|
d: "M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 0 1-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z"
|
|
85
85
|
})])], -1)),
|
|
86
|
-
createElementVNode("div", _hoisted_2$
|
|
86
|
+
createElementVNode("div", _hoisted_2$4, toDisplayString($setup.emptyStateText), 1),
|
|
87
87
|
createElementVNode("button", {
|
|
88
88
|
class: "opencode-empty-state-btn",
|
|
89
89
|
type: "button",
|
|
@@ -98,14 +98,14 @@ function __vue_render__$7(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
98
98
|
src: $setup.iframeSrc,
|
|
99
99
|
allow: "clipboard-write; clipboard-read",
|
|
100
100
|
referrerpolicy: "origin"
|
|
101
|
-
}, null, 8, _hoisted_3$
|
|
101
|
+
}, null, 8, _hoisted_3$4)])
|
|
102
102
|
]);
|
|
103
103
|
}
|
|
104
|
-
__vue_sfc__$
|
|
105
|
-
var Frame_vue_default = __vue_sfc__$
|
|
104
|
+
__vue_sfc__$6.render = __vue_render__$6;
|
|
105
|
+
var Frame_vue_default = __vue_sfc__$6;
|
|
106
106
|
//#endregion
|
|
107
107
|
//#region es/open-code-widget/src/components/Header.vue.js
|
|
108
|
-
var __vue_sfc__$
|
|
108
|
+
var __vue_sfc__$5 = /* @__PURE__ */ defineComponent({
|
|
109
109
|
__name: "Header",
|
|
110
110
|
setup(__props, { expose: __expose }) {
|
|
111
111
|
__expose();
|
|
@@ -144,15 +144,15 @@ var __vue_sfc__$6 = /* @__PURE__ */ defineComponent({
|
|
|
144
144
|
return __returned__;
|
|
145
145
|
}
|
|
146
146
|
});
|
|
147
|
-
var _hoisted_1$
|
|
148
|
-
var _hoisted_2$
|
|
149
|
-
var _hoisted_3$
|
|
147
|
+
var _hoisted_1$5 = { class: "opencode-chat-header" };
|
|
148
|
+
var _hoisted_2$3 = { class: "opencode-chat-header-left" };
|
|
149
|
+
var _hoisted_3$3 = [
|
|
150
150
|
"title",
|
|
151
151
|
"aria-label",
|
|
152
152
|
"aria-expanded"
|
|
153
153
|
];
|
|
154
|
-
var _hoisted_4$
|
|
155
|
-
var _hoisted_5$
|
|
154
|
+
var _hoisted_4$3 = ["aria-pressed", "disabled"];
|
|
155
|
+
var _hoisted_5$3 = ["title", "aria-label"];
|
|
156
156
|
var _hoisted_6$3 = {
|
|
157
157
|
key: 0,
|
|
158
158
|
viewBox: "0 0 24 24",
|
|
@@ -183,11 +183,11 @@ var _hoisted_8$2 = {
|
|
|
183
183
|
"stroke-width": "2",
|
|
184
184
|
"aria-hidden": "true"
|
|
185
185
|
};
|
|
186
|
-
var _hoisted_9$
|
|
186
|
+
var _hoisted_9$2 = { class: "opencode-chat-header-title" };
|
|
187
187
|
var _hoisted_10 = { class: "opencode-chat-header-actions" };
|
|
188
|
-
function __vue_render__$
|
|
189
|
-
return openBlock(), createElementBlock("div", _hoisted_1$
|
|
190
|
-
createElementVNode("div", _hoisted_2$
|
|
188
|
+
function __vue_render__$5(_ctx, _cache, $props, $setup, $data, $options) {
|
|
189
|
+
return openBlock(), createElementBlock("div", _hoisted_1$5, [
|
|
190
|
+
createElementVNode("div", _hoisted_2$3, [
|
|
191
191
|
createElementVNode("button", {
|
|
192
192
|
class: normalizeClass(["opencode-header-btn session-toggle", { active: !$setup.sessionListCollapsed }]),
|
|
193
193
|
type: "button",
|
|
@@ -206,7 +206,7 @@ function __vue_render__$6(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
206
206
|
}, [createElementVNode("path", {
|
|
207
207
|
d: "M4 6h16M4 12h16M4 18h16",
|
|
208
208
|
"stroke-linecap": "round"
|
|
209
|
-
})], -1))])], 10, _hoisted_3$
|
|
209
|
+
})], -1))])], 10, _hoisted_3$3),
|
|
210
210
|
createElementVNode("button", {
|
|
211
211
|
class: normalizeClass(["opencode-header-btn select-btn", { active: $setup.selectMode }]),
|
|
212
212
|
type: "button",
|
|
@@ -226,16 +226,16 @@ function __vue_render__$6(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
226
226
|
}), createElementVNode("path", {
|
|
227
227
|
fill: "currentColor",
|
|
228
228
|
d: "M512 96a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V128a32 32 0 0 1 32-32m0 576a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V704a32 32 0 0 1 32-32M96 512a32 32 0 0 1 32-32h192a32 32 0 0 1 0 64H128a32 32 0 0 1-32-32m576 0a32 32 0 0 1 32-32h192a32 32 0 1 1 0 64H704a32 32 0 0 1-32-32"
|
|
229
|
-
})], -1))])], 10, _hoisted_4$
|
|
229
|
+
})], -1))])], 10, _hoisted_4$3),
|
|
230
230
|
createElementVNode("button", {
|
|
231
231
|
class: "opencode-header-btn theme-btn",
|
|
232
232
|
type: "button",
|
|
233
233
|
title: $setup.themeIconTitle,
|
|
234
234
|
"aria-label": $setup.themeIconLabel,
|
|
235
235
|
onClick: _cache[2] || (_cache[2] = (...args) => $setup.handleToggleTheme && $setup.handleToggleTheme(...args))
|
|
236
|
-
}, [renderSlot(_ctx.$slots, "theme-icon", {}, () => [$setup.theme === "light" ? (openBlock(), createElementBlock("svg", _hoisted_6$3, [..._cache[6] || (_cache[6] = [createStaticVNode("<circle cx=\"12\" cy=\"12\" r=\"5\"></circle><line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"3\"></line><line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"23\"></line><line x1=\"4.22\" y1=\"4.22\" x2=\"5.64\" y2=\"5.64\"></line><line x1=\"18.36\" y1=\"18.36\" x2=\"19.78\" y2=\"19.78\"></line><line x1=\"1\" y1=\"12\" x2=\"3\" y2=\"12\"></line><line x1=\"21\" y1=\"12\" x2=\"23\" y2=\"12\"></line><line x1=\"4.22\" y1=\"19.78\" x2=\"5.64\" y2=\"18.36\"></line><line x1=\"18.36\" y1=\"5.64\" x2=\"19.78\" y2=\"4.22\"></line>", 9)])])) : $setup.theme === "dark" ? (openBlock(), createElementBlock("svg", _hoisted_7$2, [..._cache[7] || (_cache[7] = [createElementVNode("path", { d: "M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" }, null, -1)])])) : (openBlock(), createElementBlock("svg", _hoisted_8$2, [..._cache[8] || (_cache[8] = [createStaticVNode("<rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"></rect><line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\"></line><line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\"></line><circle cx=\"12\" cy=\"10\" r=\"3\"></circle><path d=\"M7 7l2 2M17 7l-2 2M7 13l2-2M17 13l-2-2\"></path>", 5)])]))])], 8, _hoisted_5$
|
|
236
|
+
}, [renderSlot(_ctx.$slots, "theme-icon", {}, () => [$setup.theme === "light" ? (openBlock(), createElementBlock("svg", _hoisted_6$3, [..._cache[6] || (_cache[6] = [createStaticVNode("<circle cx=\"12\" cy=\"12\" r=\"5\"></circle><line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"3\"></line><line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"23\"></line><line x1=\"4.22\" y1=\"4.22\" x2=\"5.64\" y2=\"5.64\"></line><line x1=\"18.36\" y1=\"18.36\" x2=\"19.78\" y2=\"19.78\"></line><line x1=\"1\" y1=\"12\" x2=\"3\" y2=\"12\"></line><line x1=\"21\" y1=\"12\" x2=\"23\" y2=\"12\"></line><line x1=\"4.22\" y1=\"19.78\" x2=\"5.64\" y2=\"18.36\"></line><line x1=\"18.36\" y1=\"5.64\" x2=\"19.78\" y2=\"4.22\"></line>", 9)])])) : $setup.theme === "dark" ? (openBlock(), createElementBlock("svg", _hoisted_7$2, [..._cache[7] || (_cache[7] = [createElementVNode("path", { d: "M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" }, null, -1)])])) : (openBlock(), createElementBlock("svg", _hoisted_8$2, [..._cache[8] || (_cache[8] = [createStaticVNode("<rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"></rect><line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\"></line><line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\"></line><circle cx=\"12\" cy=\"10\" r=\"3\"></circle><path d=\"M7 7l2 2M17 7l-2 2M7 13l2-2M17 13l-2-2\"></path>", 5)])]))])], 8, _hoisted_5$3)
|
|
237
237
|
]),
|
|
238
|
-
createElementVNode("span", _hoisted_9$
|
|
238
|
+
createElementVNode("span", _hoisted_9$2, toDisplayString($setup.title), 1),
|
|
239
239
|
createElementVNode("div", _hoisted_10, [createElementVNode("button", {
|
|
240
240
|
class: "opencode-header-btn close",
|
|
241
241
|
type: "button",
|
|
@@ -253,11 +253,11 @@ function __vue_render__$6(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
253
253
|
}, [createElementVNode("path", { d: "M18 6L6 18M6 6l12 12" })], -1))])])])
|
|
254
254
|
]);
|
|
255
255
|
}
|
|
256
|
-
__vue_sfc__$
|
|
257
|
-
var Header_vue_default = __vue_sfc__$
|
|
256
|
+
__vue_sfc__$5.render = __vue_render__$5;
|
|
257
|
+
var Header_vue_default = __vue_sfc__$5;
|
|
258
258
|
//#endregion
|
|
259
259
|
//#region es/open-code-widget/src/components/SelectHint.vue.js
|
|
260
|
-
var __vue_sfc__$
|
|
260
|
+
var __vue_sfc__$4 = /* @__PURE__ */ defineComponent({
|
|
261
261
|
__name: "SelectHint",
|
|
262
262
|
setup(__props, { expose: __expose }) {
|
|
263
263
|
__expose();
|
|
@@ -273,72 +273,12 @@ var __vue_sfc__$5 = /* @__PURE__ */ defineComponent({
|
|
|
273
273
|
return __returned__;
|
|
274
274
|
}
|
|
275
275
|
});
|
|
276
|
-
var _hoisted_1$
|
|
277
|
-
function __vue_render__$5(_ctx, _cache, $props, $setup, $data, $options) {
|
|
278
|
-
return openBlock(), createElementBlock("div", { class: normalizeClass(["opencode-select-mode-hint", { visible: $setup.visible }]) }, [_cache[0] || (_cache[0] = createElementVNode("span", null, "🎯 选择模式已开启 - 点击元素进行选择", -1)), createElementVNode("span", _hoisted_1$5, toDisplayString($setup.shortcutLabel), 1)], 2);
|
|
279
|
-
}
|
|
280
|
-
__vue_sfc__$5.render = __vue_render__$5;
|
|
281
|
-
var SelectHint_vue_default = __vue_sfc__$5;
|
|
282
|
-
//#endregion
|
|
283
|
-
//#region es/open-code-widget/src/components/SelectedBubbles.vue.js
|
|
284
|
-
var __vue_sfc__$4 = /* @__PURE__ */ defineComponent({
|
|
285
|
-
__name: "SelectedBubbles",
|
|
286
|
-
setup(__props, { expose: __expose }) {
|
|
287
|
-
__expose();
|
|
288
|
-
const { bubbleVisible: visible, selectedElementItems: items, handleClickSelectedNode, handleRemoveSelectedNode } = useOpenCodeWidgetContext();
|
|
289
|
-
const __returned__ = {
|
|
290
|
-
visible,
|
|
291
|
-
items,
|
|
292
|
-
handleClickSelectedNode,
|
|
293
|
-
handleRemoveSelectedNode
|
|
294
|
-
};
|
|
295
|
-
Object.defineProperty(__returned__, "__isScriptSetup", {
|
|
296
|
-
enumerable: false,
|
|
297
|
-
value: true
|
|
298
|
-
});
|
|
299
|
-
return __returned__;
|
|
300
|
-
}
|
|
301
|
-
});
|
|
302
|
-
var _hoisted_1$4 = {
|
|
303
|
-
key: 0,
|
|
304
|
-
class: "opencode-bubble-empty"
|
|
305
|
-
};
|
|
306
|
-
var _hoisted_2$3 = ["onClick"];
|
|
307
|
-
var _hoisted_3$3 = { class: "opencode-bubble-text" };
|
|
308
|
-
var _hoisted_4$3 = {
|
|
309
|
-
key: 0,
|
|
310
|
-
class: "opencode-bubble-file"
|
|
311
|
-
};
|
|
312
|
-
var _hoisted_5$3 = ["aria-label", "onClick"];
|
|
276
|
+
var _hoisted_1$4 = { class: "opencode-hint-shortcut" };
|
|
313
277
|
function __vue_render__$4(_ctx, _cache, $props, $setup, $data, $options) {
|
|
314
|
-
return openBlock(), createElementBlock("div", {
|
|
315
|
-
class: normalizeClass(["opencode-selected-bubbles", { visible: $setup.visible }]),
|
|
316
|
-
role: "list",
|
|
317
|
-
"aria-label": "已选元素列表"
|
|
318
|
-
}, [$setup.items.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_1$4, "暂无选中元素")) : (openBlock(true), createElementBlock(Fragment, { key: 1 }, renderList($setup.items, (item, index) => {
|
|
319
|
-
return openBlock(), createElementBlock("div", {
|
|
320
|
-
key: item.key,
|
|
321
|
-
class: "opencode-selected-bubble",
|
|
322
|
-
role: "listitem",
|
|
323
|
-
onClick: ($event) => $setup.handleClickSelectedNode(item)
|
|
324
|
-
}, [
|
|
325
|
-
createElementVNode("span", _hoisted_3$3, toDisplayString(item.description), 1),
|
|
326
|
-
item.bubbleFileText ? (openBlock(), createElementBlock("span", _hoisted_4$3, toDisplayString(item.bubbleFileText), 1)) : createCommentVNode("v-if", true),
|
|
327
|
-
createElementVNode("button", {
|
|
328
|
-
class: "opencode-bubble-remove",
|
|
329
|
-
type: "button",
|
|
330
|
-
"aria-label": `\u79FB\u9664\u5143\u7D20: ${item.description}`,
|
|
331
|
-
onClick: withModifiers(($event) => $setup.handleRemoveSelectedNode({
|
|
332
|
-
item,
|
|
333
|
-
index,
|
|
334
|
-
source: "bubble"
|
|
335
|
-
}), ["stop"])
|
|
336
|
-
}, " × ", 8, _hoisted_5$3)
|
|
337
|
-
], 8, _hoisted_2$3);
|
|
338
|
-
}), 128))], 2);
|
|
278
|
+
return openBlock(), createElementBlock("div", { class: normalizeClass(["opencode-select-mode-hint", { visible: $setup.visible }]) }, [_cache[0] || (_cache[0] = createElementVNode("span", null, "🎯 选择模式已开启 - 点击元素进行选择", -1)), createElementVNode("span", _hoisted_1$4, toDisplayString($setup.shortcutLabel), 1)], 2);
|
|
339
279
|
}
|
|
340
280
|
__vue_sfc__$4.render = __vue_render__$4;
|
|
341
|
-
var
|
|
281
|
+
var SelectHint_vue_default = __vue_sfc__$4;
|
|
342
282
|
//#endregion
|
|
343
283
|
//#region es/open-code-widget/src/components/SelectedNodes.vue.js
|
|
344
284
|
var __vue_sfc__$3 = /* @__PURE__ */ defineComponent({
|
|
@@ -467,7 +407,7 @@ var _hoisted_5$1 = ["aria-selected", "onClick"];
|
|
|
467
407
|
var _hoisted_6$1 = { class: "opencode-session-header" };
|
|
468
408
|
var _hoisted_7$1 = { class: "opencode-session-title" };
|
|
469
409
|
var _hoisted_8$1 = ["aria-label", "onClick"];
|
|
470
|
-
var _hoisted_9 = { class: "opencode-session-meta" };
|
|
410
|
+
var _hoisted_9$1 = { class: "opencode-session-meta" };
|
|
471
411
|
function __vue_render__$2(_ctx, _cache, $props, $setup, $data, $options) {
|
|
472
412
|
return openBlock(), createElementBlock("div", { class: normalizeClass(["opencode-session-list", { collapsed: $setup.collapsed }]) }, [
|
|
473
413
|
createCommentVNode(" Header "),
|
|
@@ -496,7 +436,7 @@ function __vue_render__$2(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
496
436
|
type: "button",
|
|
497
437
|
"aria-label": `\u5220\u9664\u4F1A\u8BDD: ${item.title}`,
|
|
498
438
|
onClick: withModifiers(($event) => $setup.handleDeleteSession(item), ["stop"])
|
|
499
|
-
}, " × ", 8, _hoisted_8$1)]), createElementVNode("div", _hoisted_9, toDisplayString(item.meta), 1)], 10, _hoisted_5$1);
|
|
439
|
+
}, " × ", 8, _hoisted_8$1)]), createElementVNode("div", _hoisted_9$1, toDisplayString(item.meta), 1)], 10, _hoisted_5$1);
|
|
500
440
|
}), 128)) : (openBlock(), createElementBlock(Fragment, { key: 2 }, [createCommentVNode(" Empty State "), renderSlot(_ctx.$slots, "empty")], 64))])], 2112))
|
|
501
441
|
], 2);
|
|
502
442
|
}
|
|
@@ -1184,10 +1124,13 @@ var __vue_sfc__ = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
|
|
|
1184
1124
|
const slots = useSlots();
|
|
1185
1125
|
const notificationMessage = ref("");
|
|
1186
1126
|
const notificationVisible = ref(false);
|
|
1127
|
+
const notificationMode = ref("widget");
|
|
1187
1128
|
let notificationTimer = null;
|
|
1188
|
-
const showNotification = (message,
|
|
1129
|
+
const showNotification = (message, options) => {
|
|
1130
|
+
const { duration = 3e3, mode = "widget" } = options || {};
|
|
1189
1131
|
notificationMessage.value = message;
|
|
1190
1132
|
notificationVisible.value = true;
|
|
1133
|
+
notificationMode.value = mode;
|
|
1191
1134
|
if (notificationTimer) clearTimeout(notificationTimer);
|
|
1192
1135
|
notificationTimer = setTimeout(() => {
|
|
1193
1136
|
notificationVisible.value = false;
|
|
@@ -1347,6 +1290,7 @@ var __vue_sfc__ = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
|
|
|
1347
1290
|
slots,
|
|
1348
1291
|
notificationMessage,
|
|
1349
1292
|
notificationVisible,
|
|
1293
|
+
notificationMode,
|
|
1350
1294
|
get notificationTimer() {
|
|
1351
1295
|
return notificationTimer;
|
|
1352
1296
|
},
|
|
@@ -1398,7 +1342,6 @@ var __vue_sfc__ = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
|
|
|
1398
1342
|
Frame: Frame_vue_default,
|
|
1399
1343
|
Header: Header_vue_default,
|
|
1400
1344
|
SelectHint: SelectHint_vue_default,
|
|
1401
|
-
SelectedBubbles: SelectedBubbles_vue_default,
|
|
1402
1345
|
SelectedNodes: SelectedNodes_vue_default,
|
|
1403
1346
|
SessionList: SessionList_vue_default,
|
|
1404
1347
|
Trigger: Trigger_vue_default
|
|
@@ -1419,7 +1362,7 @@ var _hoisted_2 = { class: "opencode-chat-content" };
|
|
|
1419
1362
|
var _hoisted_3 = { class: "opencode-tooltip-tag" };
|
|
1420
1363
|
var _hoisted_4 = { class: "opencode-tooltip-file" };
|
|
1421
1364
|
var _hoisted_5 = {
|
|
1422
|
-
key:
|
|
1365
|
+
key: 0,
|
|
1423
1366
|
class: "opencode-dialog-overlay"
|
|
1424
1367
|
};
|
|
1425
1368
|
var _hoisted_6 = {
|
|
@@ -1429,6 +1372,11 @@ var _hoisted_6 = {
|
|
|
1429
1372
|
};
|
|
1430
1373
|
var _hoisted_7 = { class: "opencode-dialog-content" };
|
|
1431
1374
|
var _hoisted_8 = { class: "opencode-dialog-message" };
|
|
1375
|
+
var _hoisted_9 = {
|
|
1376
|
+
key: 0,
|
|
1377
|
+
class: "opencode-page-notification",
|
|
1378
|
+
role: "alert"
|
|
1379
|
+
};
|
|
1432
1380
|
function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
1433
1381
|
return openBlock(), createElementBlock("div", { class: normalizeClass($setup.containerClasses) }, [
|
|
1434
1382
|
createVNode($setup["Trigger"], null, createSlots({ _: 2 }, [$setup.slots["button-icon"] ? {
|
|
@@ -1436,7 +1384,7 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
1436
1384
|
fn: withCtx(() => [renderSlot(_ctx.$slots, "button-icon")]),
|
|
1437
1385
|
key: "0"
|
|
1438
1386
|
} : void 0]), 1024),
|
|
1439
|
-
|
|
1387
|
+
createCommentVNode(" <SelectedBubbles v-if=\"bubbleVisible\" /> "),
|
|
1440
1388
|
withDirectives(createElementVNode("div", { class: normalizeClass(["opencode-chat", { open: $props.open }]) }, [
|
|
1441
1389
|
createVNode($setup["Header"], null, createSlots({ _: 2 }, [
|
|
1442
1390
|
$setup.slots["session-toggle-icon"] ? {
|
|
@@ -1456,7 +1404,7 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
1456
1404
|
} : void 0
|
|
1457
1405
|
]), 1024),
|
|
1458
1406
|
createCommentVNode(" Notification "),
|
|
1459
|
-
$setup.notificationVisible ? (openBlock(), createElementBlock("div", _hoisted_1, toDisplayString($setup.notificationMessage), 1)) : createCommentVNode("v-if", true),
|
|
1407
|
+
$setup.notificationVisible && $setup.notificationMode === "widget" ? (openBlock(), createElementBlock("div", _hoisted_1, toDisplayString($setup.notificationMessage), 1)) : createCommentVNode("v-if", true),
|
|
1460
1408
|
createElementVNode("div", _hoisted_2, [
|
|
1461
1409
|
createVNode($setup["SessionList"], null, {
|
|
1462
1410
|
empty: withCtx(() => [renderSlot(_ctx.$slots, "sessions-empty", {}, () => [_cache[0] || (_cache[0] = createElementVNode("div", { class: "opencode-session-empty" }, "暂无会话", -1))])]),
|
|
@@ -1505,7 +1453,9 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
1505
1453
|
}, "取消"), createElementVNode("button", {
|
|
1506
1454
|
class: "opencode-dialog-btn confirm",
|
|
1507
1455
|
onClick: $setup.handleDialogConfirm
|
|
1508
|
-
}, "确认")])])])) : createCommentVNode("v-if", true)
|
|
1456
|
+
}, "确认")])])])) : createCommentVNode("v-if", true),
|
|
1457
|
+
createCommentVNode(" Page-level Notification "),
|
|
1458
|
+
(openBlock(), createBlock(Teleport, { to: "body" }, [$setup.notificationVisible && $setup.notificationMode === "page" ? (openBlock(), createElementBlock("div", _hoisted_9, toDisplayString($setup.notificationMessage), 1)) : createCommentVNode("v-if", true)]))
|
|
1509
1459
|
], 2);
|
|
1510
1460
|
}
|
|
1511
1461
|
__vue_sfc__.render = __vue_render__;
|
|
@@ -1514,7 +1464,7 @@ __vue_sfc__.render = __vue_render__;
|
|
|
1514
1464
|
var open_code_widget_default = __vue_sfc__;
|
|
1515
1465
|
//#endregion
|
|
1516
1466
|
//#region es/index.js
|
|
1517
|
-
var version = "1.0.
|
|
1467
|
+
var version = "1.0.18";
|
|
1518
1468
|
function install(app, options) {
|
|
1519
1469
|
[open_code_widget_default].forEach((item) => {
|
|
1520
1470
|
if (item.install) app.use(item, options);
|
package/lib/components.css
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
.opencode-widget{--oc-bg-main: #ffffff;--oc-bg-secondary: #f8f9fa;--oc-bg-tertiary: #f3f4f6;--oc-overlay-bg: rgba(255, 255, 255, .9);--oc-bg-inverse: #1e1e1e;--oc-text-primary: #282828;--oc-text-secondary: #4b5563;--oc-text-tertiary: #6b7280;--oc-text-placeholder: #9ca3af;--oc-text-inverse: #ffffff;--oc-border-primary: #e5e7eb;--oc-border-secondary: #d1d5db;--oc-primary: #3b82f6;--oc-primary-hover: #2563eb;--oc-primary-bg: rgba(59, 130, 246, .1);--oc-danger: #ef4444;--oc-danger-hover: #dc2626;--oc-danger-active: #b91c1c;--oc-success: #10b981;--oc-overlay: rgba(0, 0, 0, .5);--oc-tooltip-bg: #1e1e1e;--oc-dialog-overlay: rgba(0, 0, 0, .5);--oc-thinking-gradient-1: #10b981;--oc-thinking-gradient-2: #059669;--oc-thinking-glow: rgba(16, 185, 129, .3);--oc-thinking-glow-strong: rgba(16, 185, 129, .6);--oc-skeleton-bg: #e5e7eb;--oc-skeleton-gradient: linear-gradient(90deg, #e5e7eb 25%, #f3f4f6 50%, #e5e7eb 75%);--oc-shadow-sm: 0 2px 4px rgba(0, 0, 0, .1);--oc-shadow-md: 0 4px 12px rgba(0, 0, 0, .15);--oc-shadow-lg: 0 8px 32px rgba(0, 0, 0, .12);--oc-shadow-xl: 0 20px 60px rgba(0, 0, 0, .3);--oc-shadow-primary: 0 2px 4px rgba(59, 130, 246, .2);--oc-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .3);--oc-shadow-danger: 0 4px 12px rgba(239, 68, 68, .3);--oc-trigger-bg: #3b82f6;--oc-trigger-bg-hover: #2563eb;--oc-trigger-bg-active: #1d4ed8;--oc-trigger-shadow: 0 2px 8px rgba(59, 130, 246, .3);--oc-trigger-shadow-hover: 0 4px 12px rgba(59, 130, 246, .4);--oc-trigger-shadow-active: 0 4px 12px rgba(59, 130, 246, .5);position:fixed;z-index:999999;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.opencode-widget.opencode-theme-dark{--oc-bg-main: #1a1a1a;--oc-bg-secondary: #1e1e1e;--oc-bg-tertiary: #282828;--oc-overlay-bg: rgba(26, 26, 26, .9);--oc-bg-inverse: #ffffff;--oc-text-primary: #f3f4f6;--oc-text-secondary: #d1d5db;--oc-text-tertiary: #9ca3af;--oc-text-placeholder: #6b7280;--oc-text-inverse: #282828;--oc-border-primary: #282828;--oc-border-secondary: #4b5563;--oc-primary: #3b82f6;--oc-primary-hover: #2563eb;--oc-primary-bg: rgba(59, 130, 246, .15);--oc-danger: #ef4444;--oc-danger-hover: #dc2626;--oc-danger-active: #b91c1c;--oc-success: #10b981;--oc-overlay: rgba(26, 26, 26, .9);--oc-tooltip-bg: #282828;--oc-dialog-overlay: rgba(0, 0, 0, .7);--oc-thinking-gradient-1: #34d399;--oc-thinking-gradient-2: #10b981;--oc-thinking-glow: rgba(52, 211, 153, .3);--oc-thinking-glow-strong: rgba(52, 211, 153, .6);--oc-skeleton-bg: #151515;--oc-skeleton-gradient: linear-gradient(90deg, #282828 25%, #4b5563 50%, #282828 75%);--oc-shadow-sm: 0 2px 4px rgba(0, 0, 0, .3);--oc-shadow-md: 0 4px 12px rgba(0, 0, 0, .4);--oc-shadow-lg: 0 8px 32px rgba(0, 0, 0, .4);--oc-shadow-xl: 0 20px 60px rgba(0, 0, 0, .6);--oc-shadow-primary: 0 2px 4px rgba(59, 130, 246, .3);--oc-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .4);--oc-shadow-danger: 0 4px 12px rgba(239, 68, 68, .4);--oc-trigger-bg: #60a5fa;--oc-trigger-bg-hover: #3b82f6;--oc-trigger-bg-active: #2563eb;--oc-trigger-shadow: 0 2px 8px rgba(96, 165, 250, .4);--oc-trigger-shadow-hover: 0 4px 12px rgba(96, 165, 250, .5);--oc-trigger-shadow-active: 0 4px 12px rgba(96, 165, 250, .6)}.opencode-widget.bottom-right{bottom:20px;right:20px}.opencode-widget.bottom-left{bottom:20px;left:20px}.opencode-widget.top-right{top:20px;right:20px}.opencode-widget.top-left{top:20px;left:20px}.opencode-chat{position:absolute;width:700px;height:86vh;background:var(--oc-bg-main);border-radius:16px;box-shadow:var(--oc-shadow-lg);overflow:hidden;opacity:0;visibility:hidden;transform:translateY(20px) scale(.95);transition:all .3s ease;display:flex;flex-direction:column}.opencode-chat-content{display:flex;flex:1;overflow:hidden}.opencode-widget.bottom-right .opencode-chat{bottom:56px;right:0}.opencode-widget.bottom-left .opencode-chat{bottom:56px;left:0}.opencode-widget.top-right .opencode-chat{top:56px;right:0}.opencode-widget.top-left .opencode-chat{top:56px;left:0}.opencode-widget.bottom-right .opencode-selected-bubbles{bottom:56px;right:0}.opencode-widget.bottom-left .opencode-selected-bubbles{bottom:56px;left:0}.opencode-widget.top-right .opencode-selected-bubbles{top:56px;bottom:auto;right:0}.opencode-widget.top-left .opencode-selected-bubbles{top:56px;bottom:auto;left:0}.opencode-chat.open{opacity:1;visibility:visible;transform:translateY(0) scale(1)}.opencode-notification{position:absolute;top:20px;left:50%;transform:translate(-50%);padding:12px 24px;background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;border-radius:10px;font-size:14px;font-weight:500;box-shadow:0 4px 16px rgba(59,130,246,.4),0 0 0 2px rgba(59,130,246,.2);animation:slideDown .3s ease;z-index:10000000;display:flex;align-items:center;gap:10px}.opencode-notification:before{content:"\1f4a1";font-size:16px}.opencode-dialog-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:var(--oc-dialog-overlay);display:flex;align-items:center;justify-content:center;z-index:9999999;animation:fadeIn .2s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.opencode-dialog{background:var(--oc-bg-main);border-radius:12px;padding:24px;min-width:320px;max-width:400px;box-shadow:var(--oc-shadow-xl);animation:scaleIn .2s ease}@keyframes scaleIn{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}.opencode-dialog-content{margin-bottom:20px}.opencode-dialog-message{font-size:15px;color:var(--oc-text-primary);line-height:1.5}.opencode-dialog-actions{display:flex;gap:12px;justify-content:flex-end}.opencode-dialog-btn{padding:10px 20px;border-radius:8px;border:none;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s}.opencode-dialog-btn.cancel{background:var(--oc-bg-tertiary);color:var(--oc-text-primary)}.opencode-dialog-btn.cancel:hover{background:var(--oc-text-primary);color:var(--oc-bg-main)}.opencode-dialog-btn.confirm{background:var(--oc-danger);color:#fff}.opencode-dialog-btn.confirm:hover{background:var(--oc-danger-hover)}@keyframes slideDown{0%{transform:translate(-50%) translateY(-100%);opacity:0}to{transform:translate(-50%) translateY(0);opacity:1}}.opencode-element-highlight{position:fixed;pointer-events:none;z-index:999998;display:none;transition:all .1s ease;border-radius:4px}#vue-inspector-container{display:none!important}.opencode-element-tooltip{position:fixed;background:var(--oc-tooltip-bg);color:#fff;padding:8px 12px;border-radius:6px;font-size:12px;z-index:9999998;display:none;box-shadow:var(--oc-shadow-md);max-width:300px;pointer-events:none}.opencode-tooltip-tag{font-weight:500;margin-bottom:4px;word-break:break-all}.opencode-tooltip-file{font-size:11px;color:var(--oc-text-placeholder);word-break:break-all}.opencode-element-highlight-temp{position:absolute;pointer-events:none;z-index:999998;border-radius:4px;animation:highlight-pulse 2s ease-out forwards}@keyframes highlight-pulse{0%{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.02)}to{opacity:0;transform:scale(1)}}@media(max-width:768px){.opencode-chat{width:calc(100vw - 40px);height:calc(100vh - 100px)}}
|
|
1
|
+
.opencode-widget{--oc-bg-main: #ffffff;--oc-bg-secondary: #f8f9fa;--oc-bg-tertiary: #f3f4f6;--oc-overlay-bg: rgba(255, 255, 255, .9);--oc-bg-inverse: #1e1e1e;--oc-text-primary: #282828;--oc-text-secondary: #4b5563;--oc-text-tertiary: #6b7280;--oc-text-placeholder: #9ca3af;--oc-text-inverse: #ffffff;--oc-border-primary: #e5e7eb;--oc-border-secondary: #d1d5db;--oc-primary: #3b82f6;--oc-primary-hover: #2563eb;--oc-primary-bg: rgba(59, 130, 246, .1);--oc-danger: #ef4444;--oc-danger-hover: #dc2626;--oc-danger-active: #b91c1c;--oc-success: #10b981;--oc-overlay: rgba(0, 0, 0, .5);--oc-tooltip-bg: #1e1e1e;--oc-dialog-overlay: rgba(0, 0, 0, .5);--oc-thinking-gradient-1: #10b981;--oc-thinking-gradient-2: #059669;--oc-thinking-glow: rgba(16, 185, 129, .3);--oc-thinking-glow-strong: rgba(16, 185, 129, .6);--oc-skeleton-bg: #e5e7eb;--oc-skeleton-gradient: linear-gradient(90deg, #e5e7eb 25%, #f3f4f6 50%, #e5e7eb 75%);--oc-shadow-sm: 0 2px 4px rgba(0, 0, 0, .1);--oc-shadow-md: 0 4px 12px rgba(0, 0, 0, .15);--oc-shadow-lg: 0 8px 32px rgba(0, 0, 0, .12);--oc-shadow-xl: 0 20px 60px rgba(0, 0, 0, .3);--oc-shadow-primary: 0 2px 4px rgba(59, 130, 246, .2);--oc-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .3);--oc-shadow-danger: 0 4px 12px rgba(239, 68, 68, .3);--oc-trigger-bg: #3b82f6;--oc-trigger-bg-hover: #2563eb;--oc-trigger-bg-active: #1d4ed8;--oc-trigger-shadow: 0 2px 8px rgba(59, 130, 246, .3);--oc-trigger-shadow-hover: 0 4px 12px rgba(59, 130, 246, .4);--oc-trigger-shadow-active: 0 4px 12px rgba(59, 130, 246, .5);position:fixed;z-index:999999;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.opencode-widget.opencode-theme-dark{--oc-bg-main: #1a1a1a;--oc-bg-secondary: #1e1e1e;--oc-bg-tertiary: #282828;--oc-overlay-bg: rgba(26, 26, 26, .9);--oc-bg-inverse: #ffffff;--oc-text-primary: #f3f4f6;--oc-text-secondary: #d1d5db;--oc-text-tertiary: #9ca3af;--oc-text-placeholder: #6b7280;--oc-text-inverse: #282828;--oc-border-primary: #282828;--oc-border-secondary: #4b5563;--oc-primary: #3b82f6;--oc-primary-hover: #2563eb;--oc-primary-bg: rgba(59, 130, 246, .15);--oc-danger: #ef4444;--oc-danger-hover: #dc2626;--oc-danger-active: #b91c1c;--oc-success: #10b981;--oc-overlay: rgba(26, 26, 26, .9);--oc-tooltip-bg: #282828;--oc-dialog-overlay: rgba(0, 0, 0, .7);--oc-thinking-gradient-1: #34d399;--oc-thinking-gradient-2: #10b981;--oc-thinking-glow: rgba(52, 211, 153, .3);--oc-thinking-glow-strong: rgba(52, 211, 153, .6);--oc-skeleton-bg: #151515;--oc-skeleton-gradient: linear-gradient(90deg, #282828 25%, #4b5563 50%, #282828 75%);--oc-shadow-sm: 0 2px 4px rgba(0, 0, 0, .3);--oc-shadow-md: 0 4px 12px rgba(0, 0, 0, .4);--oc-shadow-lg: 0 8px 32px rgba(0, 0, 0, .4);--oc-shadow-xl: 0 20px 60px rgba(0, 0, 0, .6);--oc-shadow-primary: 0 2px 4px rgba(59, 130, 246, .3);--oc-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .4);--oc-shadow-danger: 0 4px 12px rgba(239, 68, 68, .4);--oc-trigger-bg: #60a5fa;--oc-trigger-bg-hover: #3b82f6;--oc-trigger-bg-active: #2563eb;--oc-trigger-shadow: 0 2px 8px rgba(96, 165, 250, .4);--oc-trigger-shadow-hover: 0 4px 12px rgba(96, 165, 250, .5);--oc-trigger-shadow-active: 0 4px 12px rgba(96, 165, 250, .6)}.opencode-widget.bottom-right{bottom:20px;right:20px}.opencode-widget.bottom-left{bottom:20px;left:20px}.opencode-widget.top-right{top:20px;right:20px}.opencode-widget.top-left{top:20px;left:20px}.opencode-chat{position:absolute;width:700px;height:86vh;background:var(--oc-bg-main);border-radius:16px;box-shadow:var(--oc-shadow-lg);overflow:hidden;opacity:0;visibility:hidden;transform:translateY(20px) scale(.95);transition:all .3s ease;display:flex;flex-direction:column}.opencode-chat-content{display:flex;flex:1;overflow:hidden}.opencode-widget.bottom-right .opencode-chat{bottom:56px;right:0}.opencode-widget.bottom-left .opencode-chat{bottom:56px;left:0}.opencode-widget.top-right .opencode-chat{top:56px;right:0}.opencode-widget.top-left .opencode-chat{top:56px;left:0}.opencode-widget.bottom-right .opencode-selected-bubbles{bottom:56px;right:0}.opencode-widget.bottom-left .opencode-selected-bubbles{bottom:56px;left:0}.opencode-widget.top-right .opencode-selected-bubbles{top:56px;bottom:auto;right:0}.opencode-widget.top-left .opencode-selected-bubbles{top:56px;bottom:auto;left:0}.opencode-chat.open{opacity:1;visibility:visible;transform:translateY(0) scale(1)}.opencode-notification{position:absolute;top:20px;left:50%;transform:translate(-50%);padding:12px 24px;background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;border-radius:10px;font-size:14px;font-weight:500;box-shadow:0 4px 16px rgba(59,130,246,.4),0 0 0 2px rgba(59,130,246,.2);animation:slideDown .3s ease;z-index:10000000;display:flex;align-items:center;gap:10px}.opencode-notification:before{content:"\1f4a1";font-size:16px}.opencode-dialog-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:var(--oc-dialog-overlay);display:flex;align-items:center;justify-content:center;z-index:9999999;animation:fadeIn .2s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.opencode-dialog{background:var(--oc-bg-main);border-radius:12px;padding:24px;min-width:320px;max-width:400px;box-shadow:var(--oc-shadow-xl);animation:scaleIn .2s ease}@keyframes scaleIn{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}.opencode-dialog-content{margin-bottom:20px}.opencode-dialog-message{font-size:15px;color:var(--oc-text-primary);line-height:1.5}.opencode-dialog-actions{display:flex;gap:12px;justify-content:flex-end}.opencode-dialog-btn{padding:10px 20px;border-radius:8px;border:none;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s}.opencode-dialog-btn.cancel{background:var(--oc-bg-tertiary);color:var(--oc-text-primary)}.opencode-dialog-btn.cancel:hover{background:var(--oc-text-primary);color:var(--oc-bg-main)}.opencode-dialog-btn.confirm{background:var(--oc-danger);color:#fff}.opencode-dialog-btn.confirm:hover{background:var(--oc-danger-hover)}@keyframes slideDown{0%{transform:translate(-50%) translateY(-100%);opacity:0}to{transform:translate(-50%) translateY(0);opacity:1}}.opencode-page-notification{position:fixed;top:20px;left:50%;transform:translate(-50%);padding:12px 24px;background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;border-radius:10px;font-size:14px;font-weight:500;box-shadow:0 4px 16px rgba(59,130,246,.4),0 0 0 2px rgba(59,130,246,.2);animation:slideDown .3s ease;z-index:2147483647;display:flex;align-items:center;gap:10px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.opencode-page-notification:before{content:"\1f4a1";font-size:16px}.opencode-element-highlight{position:fixed;pointer-events:none;z-index:999998;display:none;transition:all .1s ease;border-radius:4px}#vue-inspector-container{display:none!important}.opencode-element-tooltip{position:fixed;background:var(--oc-tooltip-bg);color:#fff;padding:8px 12px;border-radius:6px;font-size:12px;z-index:9999998;display:none;box-shadow:var(--oc-shadow-md);max-width:300px;pointer-events:none}.opencode-tooltip-tag{font-weight:500;margin-bottom:4px;word-break:break-all}.opencode-tooltip-file{font-size:11px;color:var(--oc-text-placeholder);word-break:break-all}.opencode-element-highlight-temp{position:absolute;pointer-events:none;z-index:999998;border-radius:4px;animation:highlight-pulse 2s ease-out forwards}@keyframes highlight-pulse{0%{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.02)}to{opacity:0;transform:scale(1)}}@media(max-width:768px){.opencode-chat{width:calc(100vw - 40px);height:calc(100vh - 100px)}}
|
|
2
2
|
.opencode-iframe-container{flex:1;position:relative;overflow:hidden;display:flex;flex-direction:column;margin-top:-42px}.opencode-loading-overlay{position:absolute;top:0;left:0;right:0;bottom:0;background:var(--oc-overlay-bg);display:none;flex-direction:column;align-items:center;justify-content:center;z-index:10;transition:opacity .3s ease}.opencode-loading-overlay.visible{display:flex}.opencode-loading-spinner{width:40px;height:40px;border:3px solid var(--oc-border-primary);border-top-color:var(--oc-primary);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.opencode-loading-text{margin-top:12px;font-size:14px;color:var(--oc-text-placeholder)}.opencode-error-overlay{position:absolute;top:0;left:0;right:0;bottom:0;z-index:15;margin-top:42px;display:none}.opencode-error-overlay.visible{display:flex}.opencode-empty-state-overlay{position:absolute;top:0;left:0;right:0;bottom:0;background:var(--oc-bg-secondary);display:none;flex-direction:column;align-items:center;justify-content:center;z-index:5;transition:opacity .3s ease;margin-top:42px}.opencode-empty-state-overlay.visible{display:flex}.opencode-empty-state-icon{color:var(--oc-text-placeholder);margin-bottom:16px}.opencode-empty-state-text{color:var(--oc-text-primary);font-size:16px;font-weight:500;margin-bottom:24px}.opencode-empty-state-btn{padding:10px 24px;border-radius:8px;border:none;background:var(--oc-primary);color:#fff;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s;box-shadow:var(--oc-shadow-primary)}.opencode-empty-state-btn:hover{background:var(--oc-primary-hover);transform:translateY(-1px);box-shadow:var(--oc-shadow-primary-hover)}.opencode-empty-state-btn:active{transform:translateY(0)}.opencode-iframe{width:100%;height:100%;border:none}
|
|
3
3
|
.opencode-chat-header{position:relative;flex-shrink:0;display:flex;align-items:center;justify-content:space-between;padding:0 12px;height:40px;background:var(--oc-bg-secondary);border-bottom:1px solid var(--oc-border-primary);z-index:5}.opencode-chat-header-left{display:flex;align-items:center;gap:4px}.opencode-chat-header-title{font-size:14px;font-weight:600;color:var(--oc-text-primary);position:absolute;left:50%;transform:translate(-50%)}.opencode-chat-header-actions{display:flex;gap:4px}.opencode-header-btn{width:28px;height:28px;border-radius:6px;border:none;background:transparent;color:var(--oc-text-placeholder);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s}.opencode-header-btn:hover{background:var(--oc-bg-tertiary);color:var(--oc-text-primary)}.opencode-header-btn.close:hover{background:var(--oc-danger);color:#fff}.opencode-header-btn.select-btn.active,.opencode-header-btn.session-toggle.active{background:var(--oc-primary);color:#fff}
|
|
4
4
|
.opencode-select-mode-hint{position:fixed;top:20px;left:50%;transform:translate(-50%);padding:10px;background:linear-gradient(135deg,#ef4444,#dc2626);color:#fff;border-radius:12px;font-size:14px;font-weight:500;box-shadow:0 6px 20px rgba(239,68,68,.5),0 0 0 3px rgba(239,68,68,.3);z-index:9999999;display:none;align-items:center;gap:12px;border:1px solid rgba(255,255,255,.3)}.opencode-select-mode-hint.visible{display:flex;animation:slideDown .3s ease,pulseHint 2s ease-in-out infinite}.opencode-hint-shortcut{padding:4px 10px;background:rgba(255,255,255,.25);border-radius:6px;font-size:13px;font-weight:600;border:1px solid rgba(255,255,255,.4)}@keyframes pulseHint{0%,to{box-shadow:0 6px 20px rgba(239,68,68,.5),0 0 0 3px rgba(239,68,68,.3)}50%{box-shadow:0 6px 20px rgba(239,68,68,.6),0 0 0 6px rgba(239,68,68,.4)}}
|
|
5
|
-
.opencode-selected-bubbles{position:absolute;display:none;flex-direction:column;gap:6px;max-width:220px;max-height:300px;overflow-y:auto}.opencode-selected-bubbles.visible{display:flex}.opencode-selected-bubble{display:flex;flex-direction:column;gap:2px;padding:8px 24px 8px 10px;background:var(--oc-bg-main);border:1px solid var(--oc-border-primary);border-radius:8px;font-size:12px;box-shadow:var(--oc-shadow-sm);position:relative;cursor:pointer;transition:all .2s}.opencode-selected-bubble:hover{border-color:var(--oc-primary);box-shadow:var(--oc-shadow-primary)}.opencode-bubble-text{color:var(--oc-text-primary);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.opencode-bubble-file{color:var(--oc-text-placeholder);font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.opencode-bubble-remove{position:absolute;top:8px;right:6px;width:16px;height:16px;border-radius:50%;border:none;background:transparent;color:var(--oc-text-placeholder);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:12px;transition:all .2s}.opencode-bubble-remove:hover{background:var(--oc-danger);color:#fff}.opencode-bubble-empty{padding:8px 12px;background:var(--oc-bg-main);border:1px dashed var(--oc-border-secondary);border-radius:8px;color:var(--oc-text-placeholder);font-size:12px;text-align:center}
|
|
6
5
|
.opencode-right-toolbar{width:140px;background:var(--oc-bg-secondary);border-left:1px solid var(--oc-border-primary);display:flex;flex-direction:column;flex-shrink:0;transition:width .2s ease;overflow:hidden}.opencode-right-toolbar.collapsed{width:0;overflow:hidden}.opencode-right-toolbar.collapsed .opencode-selected-nodes-header,.opencode-right-toolbar.collapsed .opencode-selected-nodes,.opencode-right-toolbar.collapsed .opencode-clear-all-btn{display:none}.opencode-selected-nodes-header{padding:12px 8px 8px;border-bottom:1px solid var(--oc-border-primary)}.opencode-selected-nodes-title{font-size:14px;font-weight:600;color:var(--oc-text-primary);margin-bottom:4px}.opencode-selected-nodes-desc{font-size:11px;color:var(--oc-text-placeholder);line-height:1.4}.opencode-selected-nodes{flex:1;display:flex;flex-direction:column;padding:8px;gap:6px;overflow-y:auto;overflow-x:hidden}.opencode-selected-nodes:empty:before{content:"\6682\65e0\9009\4e2d\5143\7d20";color:var(--oc-text-placeholder);font-size:12px;text-align:center;padding:20px 10px}.opencode-selected-node{display:flex;align-items:center;gap:8px;padding:8px 10px;background:var(--oc-bg-main);border:1px solid var(--oc-border-primary);border-radius:6px;font-size:12px;transition:all .2s}.opencode-selected-node:hover{border-color:var(--oc-primary);box-shadow:var(--oc-shadow-primary)}.opencode-node-content{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.opencode-node-text{color:var(--oc-text-primary);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.opencode-node-file{color:var(--oc-text-placeholder);font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.opencode-node-remove{width:18px;height:18px;border-radius:4px;border:none;background:transparent;color:var(--oc-text-placeholder);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:14px;transition:all .2s;flex-shrink:0}.opencode-node-remove:hover{background:var(--oc-danger);color:#fff}.opencode-clear-all-btn{width:calc(100% - 16px);margin:8px;padding:8px 12px;border-radius:6px;border:none;background:var(--oc-danger);color:#fff;font-size:12px;font-weight:500;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:4px;transition:all .2s}.opencode-clear-all-btn:hover{background:var(--oc-danger-hover);transform:scale(1.02)}
|
|
7
6
|
.opencode-session-list{width:240px;background:var(--oc-bg-secondary);border-right:1px solid var(--oc-border-primary);display:flex;flex-direction:column;flex-shrink:0;transition:width .2s ease}.opencode-session-list.collapsed{width:0;overflow:hidden}.opencode-session-list.collapsed .opencode-session-list-header,.opencode-session-list.collapsed .opencode-session-list-content{display:none}.opencode-session-list-header{padding:16px;border-bottom:1px solid var(--oc-border-primary);display:flex;justify-content:space-between;align-items:center;font-weight:600;font-size:14px;color:var(--oc-text-primary)}.opencode-new-session-btn{width:28px;height:28px;border-radius:6px;border:none;background:var(--oc-primary);color:#fff;font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s}.opencode-new-session-btn:hover{background:var(--oc-primary-hover);transform:scale(1.05)}.opencode-session-list-content{flex:1;overflow-y:auto;padding:8px;position:relative}.opencode-session-list-loading-overlay{position:absolute;top:0;left:0;right:0;bottom:0;background:var(--oc-overlay-bg);display:flex;align-items:center;justify-content:center;z-index:10;border-radius:8px}.opencode-loading-spinner.small{width:24px;height:24px;border-width:2px}.opencode-session-item{padding:12px;border-radius:8px;cursor:pointer;transition:transform .2s;margin-bottom:4px;color:var(--oc-text-primary)}.opencode-session-item:hover{background:var(--oc-bg-tertiary)}.opencode-session-item.active{background:var(--oc-primary);color:#fff;transition:none}.opencode-session-title{font-size:14px;font-weight:500;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.opencode-session-meta{font-size:12px;opacity:.6}.opencode-session-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}.opencode-session-delete-btn{width:20px;height:20px;border-radius:4px;border:none;background:transparent;color:var(--oc-text-placeholder);font-size:16px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s;opacity:0;flex-shrink:0}.opencode-session-item:hover .opencode-session-delete-btn{opacity:1}.opencode-session-delete-btn:hover{background:var(--oc-danger);color:#fff}.opencode-session-item.active .opencode-session-delete-btn{color:rgba(255,255,255,.7)}.opencode-session-item.active .opencode-session-delete-btn:hover{background:rgba(255,255,255,.2);color:#fff}.opencode-session-header-skeleton{padding:16px;border-bottom:1px solid var(--oc-border-primary);display:none;justify-content:space-between;align-items:center}.opencode-session-header-skeleton.visible{display:flex}.opencode-skeleton-header-title{height:18px;width:80px;background:var(--oc-skeleton-gradient);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:4px}.opencode-skeleton-header-btn{width:28px;height:28px;background:var(--oc-skeleton-gradient);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:6px}.opencode-session-skeleton{flex:1;overflow-y:auto;padding:8px;display:none}.opencode-session-skeleton.visible{display:block}.opencode-skeleton-item{padding:12px;border-radius:8px;margin-bottom:4px;background:var(--oc-skeleton-bg)}.opencode-skeleton-title{height:16px;background:var(--oc-skeleton-gradient);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:4px;margin-bottom:8px;width:70%}.opencode-skeleton-meta{height:12px;background:var(--oc-skeleton-gradient);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:4px;width:50%}.opencode-session-empty{padding:32px 16px;text-align:center;color:var(--oc-text-placeholder);font-size:13px}@keyframes skeleton-loading{0%{background-position:200% 0}to{background-position:-200% 0}}
|
|
8
7
|
.opencode-button{width:44px;height:44px;border-radius:50%;background:var(--oc-trigger-bg);border:none;cursor:pointer;box-shadow:var(--oc-trigger-shadow);transition:all .3s ease;display:flex;align-items:center;justify-content:center;color:#fff;padding:0;position:relative;overflow:visible}.opencode-button svg{transform:rotate(180deg);transition:transform .3s ease}.opencode-button:before{content:"";position:absolute;top:-8px;left:-8px;right:-8px;bottom:-8px;border-radius:50%}.opencode-button:hover{transform:scale(1.1);box-shadow:var(--oc-trigger-shadow-hover);background:var(--oc-trigger-bg-hover)}.opencode-button.thinking{background:linear-gradient(135deg,#667eea,#764ba2,#667eea);background-size:200% 200%;animation:thinking-gradient 2s ease infinite,thinking-pulse 2s ease-in-out infinite;box-shadow:0 0 20px rgba(102,126,234,.5),0 0 40px rgba(118,75,162,.3)}.opencode-button.thinking svg{animation:none}.opencode-button.thinking:before{content:"";position:absolute;top:50%;left:50%;width:100%;height:100%;border-radius:50%;background:radial-gradient(circle,rgba(102,126,234,.7) 0%,rgba(118,75,162,.5) 50%,transparent 70%);transform:translate(-50%,-50%);animation:ripple-wave 2s ease-out infinite;pointer-events:none}.opencode-button.thinking:after{content:"";position:absolute;top:50%;left:50%;width:100%;height:100%;border-radius:50%;background:radial-gradient(circle,rgba(118,75,162,.6) 0%,rgba(102,126,234,.4) 50%,transparent 70%);transform:translate(-50%,-50%);animation:ripple-wave 2s ease-out infinite;animation-delay:1s;pointer-events:none}@keyframes thinking-gradient{0%{background-position:0% 50%}50%{background-position:100% 50%}to{background-position:0% 50%}}@keyframes ripple-wave{0%{transform:translate(-50%,-50%) scale(1);opacity:.8}to{transform:translate(-50%,-50%) scale(2.5);opacity:0}}@keyframes thinking-pulse{0%,to{transform:scale(1)}50%{transform:scale(.9)}}.opencode-button.loading{animation:pulse 1s infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}
|
package/lib/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import OpenCodeWidget from './open-code-widget';
|
|
2
2
|
import type { App } from 'vue';
|
|
3
|
-
declare const version = "1.0.
|
|
3
|
+
declare const version = "1.0.18";
|
|
4
4
|
declare function install(app: App<any>, options?: any): void;
|
|
5
5
|
export { install, version, OpenCodeWidget };
|
|
6
6
|
export default install;
|
package/lib/index.js
CHANGED
|
@@ -34,7 +34,7 @@ __export(lib_exports, {
|
|
|
34
34
|
});
|
|
35
35
|
module.exports = __toCommonJS(lib_exports);
|
|
36
36
|
var import_open_code_widget = __toESM(require("./open-code-widget"));
|
|
37
|
-
const version = "1.0.
|
|
37
|
+
const version = "1.0.18";
|
|
38
38
|
function install(app, options) {
|
|
39
39
|
const components = [
|
|
40
40
|
import_open_code_widget.default
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.opencode-widget{--oc-bg-main: #ffffff;--oc-bg-secondary: #f8f9fa;--oc-bg-tertiary: #f3f4f6;--oc-overlay-bg: rgba(255, 255, 255, .9);--oc-bg-inverse: #1e1e1e;--oc-text-primary: #282828;--oc-text-secondary: #4b5563;--oc-text-tertiary: #6b7280;--oc-text-placeholder: #9ca3af;--oc-text-inverse: #ffffff;--oc-border-primary: #e5e7eb;--oc-border-secondary: #d1d5db;--oc-primary: #3b82f6;--oc-primary-hover: #2563eb;--oc-primary-bg: rgba(59, 130, 246, .1);--oc-danger: #ef4444;--oc-danger-hover: #dc2626;--oc-danger-active: #b91c1c;--oc-success: #10b981;--oc-overlay: rgba(0, 0, 0, .5);--oc-tooltip-bg: #1e1e1e;--oc-dialog-overlay: rgba(0, 0, 0, .5);--oc-thinking-gradient-1: #10b981;--oc-thinking-gradient-2: #059669;--oc-thinking-glow: rgba(16, 185, 129, .3);--oc-thinking-glow-strong: rgba(16, 185, 129, .6);--oc-skeleton-bg: #e5e7eb;--oc-skeleton-gradient: linear-gradient(90deg, #e5e7eb 25%, #f3f4f6 50%, #e5e7eb 75%);--oc-shadow-sm: 0 2px 4px rgba(0, 0, 0, .1);--oc-shadow-md: 0 4px 12px rgba(0, 0, 0, .15);--oc-shadow-lg: 0 8px 32px rgba(0, 0, 0, .12);--oc-shadow-xl: 0 20px 60px rgba(0, 0, 0, .3);--oc-shadow-primary: 0 2px 4px rgba(59, 130, 246, .2);--oc-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .3);--oc-shadow-danger: 0 4px 12px rgba(239, 68, 68, .3);--oc-trigger-bg: #3b82f6;--oc-trigger-bg-hover: #2563eb;--oc-trigger-bg-active: #1d4ed8;--oc-trigger-shadow: 0 2px 8px rgba(59, 130, 246, .3);--oc-trigger-shadow-hover: 0 4px 12px rgba(59, 130, 246, .4);--oc-trigger-shadow-active: 0 4px 12px rgba(59, 130, 246, .5);position:fixed;z-index:999999;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.opencode-widget.opencode-theme-dark{--oc-bg-main: #1a1a1a;--oc-bg-secondary: #1e1e1e;--oc-bg-tertiary: #282828;--oc-overlay-bg: rgba(26, 26, 26, .9);--oc-bg-inverse: #ffffff;--oc-text-primary: #f3f4f6;--oc-text-secondary: #d1d5db;--oc-text-tertiary: #9ca3af;--oc-text-placeholder: #6b7280;--oc-text-inverse: #282828;--oc-border-primary: #282828;--oc-border-secondary: #4b5563;--oc-primary: #3b82f6;--oc-primary-hover: #2563eb;--oc-primary-bg: rgba(59, 130, 246, .15);--oc-danger: #ef4444;--oc-danger-hover: #dc2626;--oc-danger-active: #b91c1c;--oc-success: #10b981;--oc-overlay: rgba(26, 26, 26, .9);--oc-tooltip-bg: #282828;--oc-dialog-overlay: rgba(0, 0, 0, .7);--oc-thinking-gradient-1: #34d399;--oc-thinking-gradient-2: #10b981;--oc-thinking-glow: rgba(52, 211, 153, .3);--oc-thinking-glow-strong: rgba(52, 211, 153, .6);--oc-skeleton-bg: #151515;--oc-skeleton-gradient: linear-gradient(90deg, #282828 25%, #4b5563 50%, #282828 75%);--oc-shadow-sm: 0 2px 4px rgba(0, 0, 0, .3);--oc-shadow-md: 0 4px 12px rgba(0, 0, 0, .4);--oc-shadow-lg: 0 8px 32px rgba(0, 0, 0, .4);--oc-shadow-xl: 0 20px 60px rgba(0, 0, 0, .6);--oc-shadow-primary: 0 2px 4px rgba(59, 130, 246, .3);--oc-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .4);--oc-shadow-danger: 0 4px 12px rgba(239, 68, 68, .4);--oc-trigger-bg: #60a5fa;--oc-trigger-bg-hover: #3b82f6;--oc-trigger-bg-active: #2563eb;--oc-trigger-shadow: 0 2px 8px rgba(96, 165, 250, .4);--oc-trigger-shadow-hover: 0 4px 12px rgba(96, 165, 250, .5);--oc-trigger-shadow-active: 0 4px 12px rgba(96, 165, 250, .6)}.opencode-widget.bottom-right{bottom:20px;right:20px}.opencode-widget.bottom-left{bottom:20px;left:20px}.opencode-widget.top-right{top:20px;right:20px}.opencode-widget.top-left{top:20px;left:20px}.opencode-chat{position:absolute;width:700px;height:86vh;background:var(--oc-bg-main);border-radius:16px;box-shadow:var(--oc-shadow-lg);overflow:hidden;opacity:0;visibility:hidden;transform:translateY(20px) scale(.95);transition:all .3s ease;display:flex;flex-direction:column}.opencode-chat-content{display:flex;flex:1;overflow:hidden}.opencode-widget.bottom-right .opencode-chat{bottom:56px;right:0}.opencode-widget.bottom-left .opencode-chat{bottom:56px;left:0}.opencode-widget.top-right .opencode-chat{top:56px;right:0}.opencode-widget.top-left .opencode-chat{top:56px;left:0}.opencode-widget.bottom-right .opencode-selected-bubbles{bottom:56px;right:0}.opencode-widget.bottom-left .opencode-selected-bubbles{bottom:56px;left:0}.opencode-widget.top-right .opencode-selected-bubbles{top:56px;bottom:auto;right:0}.opencode-widget.top-left .opencode-selected-bubbles{top:56px;bottom:auto;left:0}.opencode-chat.open{opacity:1;visibility:visible;transform:translateY(0) scale(1)}.opencode-notification{position:absolute;top:20px;left:50%;transform:translate(-50%);padding:12px 24px;background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;border-radius:10px;font-size:14px;font-weight:500;box-shadow:0 4px 16px rgba(59,130,246,.4),0 0 0 2px rgba(59,130,246,.2);animation:slideDown .3s ease;z-index:10000000;display:flex;align-items:center;gap:10px}.opencode-notification:before{content:"\1f4a1";font-size:16px}.opencode-dialog-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:var(--oc-dialog-overlay);display:flex;align-items:center;justify-content:center;z-index:9999999;animation:fadeIn .2s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.opencode-dialog{background:var(--oc-bg-main);border-radius:12px;padding:24px;min-width:320px;max-width:400px;box-shadow:var(--oc-shadow-xl);animation:scaleIn .2s ease}@keyframes scaleIn{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}.opencode-dialog-content{margin-bottom:20px}.opencode-dialog-message{font-size:15px;color:var(--oc-text-primary);line-height:1.5}.opencode-dialog-actions{display:flex;gap:12px;justify-content:flex-end}.opencode-dialog-btn{padding:10px 20px;border-radius:8px;border:none;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s}.opencode-dialog-btn.cancel{background:var(--oc-bg-tertiary);color:var(--oc-text-primary)}.opencode-dialog-btn.cancel:hover{background:var(--oc-text-primary);color:var(--oc-bg-main)}.opencode-dialog-btn.confirm{background:var(--oc-danger);color:#fff}.opencode-dialog-btn.confirm:hover{background:var(--oc-danger-hover)}@keyframes slideDown{0%{transform:translate(-50%) translateY(-100%);opacity:0}to{transform:translate(-50%) translateY(0);opacity:1}}.opencode-element-highlight{position:fixed;pointer-events:none;z-index:999998;display:none;transition:all .1s ease;border-radius:4px}#vue-inspector-container{display:none!important}.opencode-element-tooltip{position:fixed;background:var(--oc-tooltip-bg);color:#fff;padding:8px 12px;border-radius:6px;font-size:12px;z-index:9999998;display:none;box-shadow:var(--oc-shadow-md);max-width:300px;pointer-events:none}.opencode-tooltip-tag{font-weight:500;margin-bottom:4px;word-break:break-all}.opencode-tooltip-file{font-size:11px;color:var(--oc-text-placeholder);word-break:break-all}.opencode-element-highlight-temp{position:absolute;pointer-events:none;z-index:999998;border-radius:4px;animation:highlight-pulse 2s ease-out forwards}@keyframes highlight-pulse{0%{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.02)}to{opacity:0;transform:scale(1)}}@media(max-width:768px){.opencode-chat{width:calc(100vw - 40px);height:calc(100vh - 100px)}}
|
|
1
|
+
.opencode-widget{--oc-bg-main: #ffffff;--oc-bg-secondary: #f8f9fa;--oc-bg-tertiary: #f3f4f6;--oc-overlay-bg: rgba(255, 255, 255, .9);--oc-bg-inverse: #1e1e1e;--oc-text-primary: #282828;--oc-text-secondary: #4b5563;--oc-text-tertiary: #6b7280;--oc-text-placeholder: #9ca3af;--oc-text-inverse: #ffffff;--oc-border-primary: #e5e7eb;--oc-border-secondary: #d1d5db;--oc-primary: #3b82f6;--oc-primary-hover: #2563eb;--oc-primary-bg: rgba(59, 130, 246, .1);--oc-danger: #ef4444;--oc-danger-hover: #dc2626;--oc-danger-active: #b91c1c;--oc-success: #10b981;--oc-overlay: rgba(0, 0, 0, .5);--oc-tooltip-bg: #1e1e1e;--oc-dialog-overlay: rgba(0, 0, 0, .5);--oc-thinking-gradient-1: #10b981;--oc-thinking-gradient-2: #059669;--oc-thinking-glow: rgba(16, 185, 129, .3);--oc-thinking-glow-strong: rgba(16, 185, 129, .6);--oc-skeleton-bg: #e5e7eb;--oc-skeleton-gradient: linear-gradient(90deg, #e5e7eb 25%, #f3f4f6 50%, #e5e7eb 75%);--oc-shadow-sm: 0 2px 4px rgba(0, 0, 0, .1);--oc-shadow-md: 0 4px 12px rgba(0, 0, 0, .15);--oc-shadow-lg: 0 8px 32px rgba(0, 0, 0, .12);--oc-shadow-xl: 0 20px 60px rgba(0, 0, 0, .3);--oc-shadow-primary: 0 2px 4px rgba(59, 130, 246, .2);--oc-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .3);--oc-shadow-danger: 0 4px 12px rgba(239, 68, 68, .3);--oc-trigger-bg: #3b82f6;--oc-trigger-bg-hover: #2563eb;--oc-trigger-bg-active: #1d4ed8;--oc-trigger-shadow: 0 2px 8px rgba(59, 130, 246, .3);--oc-trigger-shadow-hover: 0 4px 12px rgba(59, 130, 246, .4);--oc-trigger-shadow-active: 0 4px 12px rgba(59, 130, 246, .5);position:fixed;z-index:999999;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.opencode-widget.opencode-theme-dark{--oc-bg-main: #1a1a1a;--oc-bg-secondary: #1e1e1e;--oc-bg-tertiary: #282828;--oc-overlay-bg: rgba(26, 26, 26, .9);--oc-bg-inverse: #ffffff;--oc-text-primary: #f3f4f6;--oc-text-secondary: #d1d5db;--oc-text-tertiary: #9ca3af;--oc-text-placeholder: #6b7280;--oc-text-inverse: #282828;--oc-border-primary: #282828;--oc-border-secondary: #4b5563;--oc-primary: #3b82f6;--oc-primary-hover: #2563eb;--oc-primary-bg: rgba(59, 130, 246, .15);--oc-danger: #ef4444;--oc-danger-hover: #dc2626;--oc-danger-active: #b91c1c;--oc-success: #10b981;--oc-overlay: rgba(26, 26, 26, .9);--oc-tooltip-bg: #282828;--oc-dialog-overlay: rgba(0, 0, 0, .7);--oc-thinking-gradient-1: #34d399;--oc-thinking-gradient-2: #10b981;--oc-thinking-glow: rgba(52, 211, 153, .3);--oc-thinking-glow-strong: rgba(52, 211, 153, .6);--oc-skeleton-bg: #151515;--oc-skeleton-gradient: linear-gradient(90deg, #282828 25%, #4b5563 50%, #282828 75%);--oc-shadow-sm: 0 2px 4px rgba(0, 0, 0, .3);--oc-shadow-md: 0 4px 12px rgba(0, 0, 0, .4);--oc-shadow-lg: 0 8px 32px rgba(0, 0, 0, .4);--oc-shadow-xl: 0 20px 60px rgba(0, 0, 0, .6);--oc-shadow-primary: 0 2px 4px rgba(59, 130, 246, .3);--oc-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .4);--oc-shadow-danger: 0 4px 12px rgba(239, 68, 68, .4);--oc-trigger-bg: #60a5fa;--oc-trigger-bg-hover: #3b82f6;--oc-trigger-bg-active: #2563eb;--oc-trigger-shadow: 0 2px 8px rgba(96, 165, 250, .4);--oc-trigger-shadow-hover: 0 4px 12px rgba(96, 165, 250, .5);--oc-trigger-shadow-active: 0 4px 12px rgba(96, 165, 250, .6)}.opencode-widget.bottom-right{bottom:20px;right:20px}.opencode-widget.bottom-left{bottom:20px;left:20px}.opencode-widget.top-right{top:20px;right:20px}.opencode-widget.top-left{top:20px;left:20px}.opencode-chat{position:absolute;width:700px;height:86vh;background:var(--oc-bg-main);border-radius:16px;box-shadow:var(--oc-shadow-lg);overflow:hidden;opacity:0;visibility:hidden;transform:translateY(20px) scale(.95);transition:all .3s ease;display:flex;flex-direction:column}.opencode-chat-content{display:flex;flex:1;overflow:hidden}.opencode-widget.bottom-right .opencode-chat{bottom:56px;right:0}.opencode-widget.bottom-left .opencode-chat{bottom:56px;left:0}.opencode-widget.top-right .opencode-chat{top:56px;right:0}.opencode-widget.top-left .opencode-chat{top:56px;left:0}.opencode-widget.bottom-right .opencode-selected-bubbles{bottom:56px;right:0}.opencode-widget.bottom-left .opencode-selected-bubbles{bottom:56px;left:0}.opencode-widget.top-right .opencode-selected-bubbles{top:56px;bottom:auto;right:0}.opencode-widget.top-left .opencode-selected-bubbles{top:56px;bottom:auto;left:0}.opencode-chat.open{opacity:1;visibility:visible;transform:translateY(0) scale(1)}.opencode-notification{position:absolute;top:20px;left:50%;transform:translate(-50%);padding:12px 24px;background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;border-radius:10px;font-size:14px;font-weight:500;box-shadow:0 4px 16px rgba(59,130,246,.4),0 0 0 2px rgba(59,130,246,.2);animation:slideDown .3s ease;z-index:10000000;display:flex;align-items:center;gap:10px}.opencode-notification:before{content:"\1f4a1";font-size:16px}.opencode-dialog-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:var(--oc-dialog-overlay);display:flex;align-items:center;justify-content:center;z-index:9999999;animation:fadeIn .2s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.opencode-dialog{background:var(--oc-bg-main);border-radius:12px;padding:24px;min-width:320px;max-width:400px;box-shadow:var(--oc-shadow-xl);animation:scaleIn .2s ease}@keyframes scaleIn{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}.opencode-dialog-content{margin-bottom:20px}.opencode-dialog-message{font-size:15px;color:var(--oc-text-primary);line-height:1.5}.opencode-dialog-actions{display:flex;gap:12px;justify-content:flex-end}.opencode-dialog-btn{padding:10px 20px;border-radius:8px;border:none;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s}.opencode-dialog-btn.cancel{background:var(--oc-bg-tertiary);color:var(--oc-text-primary)}.opencode-dialog-btn.cancel:hover{background:var(--oc-text-primary);color:var(--oc-bg-main)}.opencode-dialog-btn.confirm{background:var(--oc-danger);color:#fff}.opencode-dialog-btn.confirm:hover{background:var(--oc-danger-hover)}@keyframes slideDown{0%{transform:translate(-50%) translateY(-100%);opacity:0}to{transform:translate(-50%) translateY(0);opacity:1}}.opencode-page-notification{position:fixed;top:20px;left:50%;transform:translate(-50%);padding:12px 24px;background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;border-radius:10px;font-size:14px;font-weight:500;box-shadow:0 4px 16px rgba(59,130,246,.4),0 0 0 2px rgba(59,130,246,.2);animation:slideDown .3s ease;z-index:2147483647;display:flex;align-items:center;gap:10px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.opencode-page-notification:before{content:"\1f4a1";font-size:16px}.opencode-element-highlight{position:fixed;pointer-events:none;z-index:999998;display:none;transition:all .1s ease;border-radius:4px}#vue-inspector-container{display:none!important}.opencode-element-tooltip{position:fixed;background:var(--oc-tooltip-bg);color:#fff;padding:8px 12px;border-radius:6px;font-size:12px;z-index:9999998;display:none;box-shadow:var(--oc-shadow-md);max-width:300px;pointer-events:none}.opencode-tooltip-tag{font-weight:500;margin-bottom:4px;word-break:break-all}.opencode-tooltip-file{font-size:11px;color:var(--oc-text-placeholder);word-break:break-all}.opencode-element-highlight-temp{position:absolute;pointer-events:none;z-index:999998;border-radius:4px;animation:highlight-pulse 2s ease-out forwards}@keyframes highlight-pulse{0%{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.02)}to{opacity:0;transform:scale(1)}}@media(max-width:768px){.opencode-chat{width:calc(100vw - 40px);height:calc(100vh - 100px)}}
|
|
@@ -1,26 +1,29 @@
|
|
|
1
1
|
import type { OpenCodeWidgetProps } from "./types";
|
|
2
|
-
declare var __VLS_4: {},
|
|
2
|
+
declare var __VLS_4: {}, __VLS_9: {}, __VLS_11: {}, __VLS_13: {}, __VLS_18: {}, __VLS_25: {}, __VLS_27: {}, __VLS_29: {}, __VLS_31: {};
|
|
3
3
|
type __VLS_Slots = {} & {
|
|
4
4
|
'button-icon'?: (props: typeof __VLS_4) => any;
|
|
5
5
|
} & {
|
|
6
|
-
'session-toggle-icon'?: (props: typeof
|
|
6
|
+
'session-toggle-icon'?: (props: typeof __VLS_9) => any;
|
|
7
7
|
} & {
|
|
8
|
-
'select-icon'?: (props: typeof
|
|
8
|
+
'select-icon'?: (props: typeof __VLS_11) => any;
|
|
9
9
|
} & {
|
|
10
|
-
'close-icon'?: (props: typeof
|
|
10
|
+
'close-icon'?: (props: typeof __VLS_13) => any;
|
|
11
11
|
} & {
|
|
12
|
-
'sessions-empty'?: (props: typeof
|
|
12
|
+
'sessions-empty'?: (props: typeof __VLS_18) => any;
|
|
13
13
|
} & {
|
|
14
|
-
'empty-state'?: (props: typeof
|
|
14
|
+
'empty-state'?: (props: typeof __VLS_25) => any;
|
|
15
15
|
} & {
|
|
16
|
-
loading?: (props: typeof
|
|
16
|
+
loading?: (props: typeof __VLS_27) => any;
|
|
17
17
|
} & {
|
|
18
|
-
error?: (props: typeof
|
|
18
|
+
error?: (props: typeof __VLS_29) => any;
|
|
19
19
|
} & {
|
|
20
|
-
content?: (props: typeof
|
|
20
|
+
content?: (props: typeof __VLS_31) => any;
|
|
21
21
|
};
|
|
22
22
|
declare const __VLS_component: import("vue").DefineComponent<OpenCodeWidgetProps, {
|
|
23
|
-
showNotification: (message: string,
|
|
23
|
+
showNotification: (message: string, options?: {
|
|
24
|
+
duration?: number;
|
|
25
|
+
mode?: "widget" | "page";
|
|
26
|
+
}) => void;
|
|
24
27
|
showConfirmDialog: (message: string) => Promise<boolean>;
|
|
25
28
|
sendMessageToIframe: (type: string, data?: Record<string, unknown>) => void;
|
|
26
29
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
@@ -53,7 +53,6 @@ var import_vue2 = require("vue");
|
|
|
53
53
|
var import_Frame_vue = __toESM(require("./components/Frame.vue.js"));
|
|
54
54
|
var import_Header_vue = __toESM(require("./components/Header.vue.js"));
|
|
55
55
|
var import_SelectHint_vue = __toESM(require("./components/SelectHint.vue.js"));
|
|
56
|
-
var import_SelectedBubbles_vue = __toESM(require("./components/SelectedBubbles.vue.js"));
|
|
57
56
|
var import_SelectedNodes_vue = __toESM(require("./components/SelectedNodes.vue.js"));
|
|
58
57
|
var import_SessionList_vue = __toESM(require("./components/SessionList.vue.js"));
|
|
59
58
|
var import_Trigger_vue = __toESM(require("./components/Trigger.vue.js"));
|
|
@@ -99,10 +98,13 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
|
|
|
99
98
|
const slots = (0, import_vue2.useSlots)();
|
|
100
99
|
const notificationMessage = (0, import_vue2.ref)("");
|
|
101
100
|
const notificationVisible = (0, import_vue2.ref)(false);
|
|
101
|
+
const notificationMode = (0, import_vue2.ref)("widget");
|
|
102
102
|
let notificationTimer = null;
|
|
103
|
-
const showNotification = (message,
|
|
103
|
+
const showNotification = (message, options) => {
|
|
104
|
+
const { duration = 3e3, mode = "widget" } = options || {};
|
|
104
105
|
notificationMessage.value = message;
|
|
105
106
|
notificationVisible.value = true;
|
|
107
|
+
notificationMode.value = mode;
|
|
106
108
|
if (notificationTimer) clearTimeout(notificationTimer);
|
|
107
109
|
notificationTimer = setTimeout(() => {
|
|
108
110
|
notificationVisible.value = false;
|
|
@@ -278,7 +280,7 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
|
|
|
278
280
|
handleClearSelectedNodes,
|
|
279
281
|
handleFrameLoaded
|
|
280
282
|
});
|
|
281
|
-
const __returned__ = { props, emit, slots, notificationMessage, notificationVisible, get notificationTimer() {
|
|
283
|
+
const __returned__ = { props, emit, slots, notificationMessage, notificationVisible, notificationMode, get notificationTimer() {
|
|
282
284
|
return notificationTimer;
|
|
283
285
|
}, set notificationTimer(v) {
|
|
284
286
|
notificationTimer = v;
|
|
@@ -286,7 +288,7 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
|
|
|
286
288
|
return dialogResolve;
|
|
287
289
|
}, set dialogResolve(v) {
|
|
288
290
|
dialogResolve = v;
|
|
289
|
-
}, showConfirmDialog, handleDialogConfirm, handleDialogCancel, frameRef, sendMessageToIframe, handleFrameLoaded, localSessionListCollapsed, buttonActive, containerClasses, iframeSource, sessionListTitle, resolvedTheme, handleClose, handleEmptyAction, handleToggle, handleToggleSessionList, handleToggleTheme, sessionItems, handleCreateSession, handleDeleteSession, handleSelectSession, bubbleVisible, hasSelectedElements, selectedElementItems, handleClearSelectedNodes, handleClickSelectedNode, handleRemoveSelectedNode, handleToggleSelectMode, highlightVisible, highlightStyle, tooltipVisible, tooltipStyle, tooltipContent, Frame: import_Frame_vue.default, Header: import_Header_vue.default, SelectHint: import_SelectHint_vue.default,
|
|
291
|
+
}, showConfirmDialog, handleDialogConfirm, handleDialogCancel, frameRef, sendMessageToIframe, handleFrameLoaded, localSessionListCollapsed, buttonActive, containerClasses, iframeSource, sessionListTitle, resolvedTheme, handleClose, handleEmptyAction, handleToggle, handleToggleSessionList, handleToggleTheme, sessionItems, handleCreateSession, handleDeleteSession, handleSelectSession, bubbleVisible, hasSelectedElements, selectedElementItems, handleClearSelectedNodes, handleClickSelectedNode, handleRemoveSelectedNode, handleToggleSelectMode, highlightVisible, highlightStyle, tooltipVisible, tooltipStyle, tooltipContent, Frame: import_Frame_vue.default, Header: import_Header_vue.default, SelectHint: import_SelectHint_vue.default, SelectedNodes: import_SelectedNodes_vue.default, SessionList: import_SessionList_vue.default, Trigger: import_Trigger_vue.default };
|
|
290
292
|
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
291
293
|
return __returned__;
|
|
292
294
|
}
|
|
@@ -300,7 +302,7 @@ const _hoisted_2 = { class: "opencode-chat-content" };
|
|
|
300
302
|
const _hoisted_3 = { class: "opencode-tooltip-tag" };
|
|
301
303
|
const _hoisted_4 = { class: "opencode-tooltip-file" };
|
|
302
304
|
const _hoisted_5 = {
|
|
303
|
-
key:
|
|
305
|
+
key: 0,
|
|
304
306
|
class: "opencode-dialog-overlay"
|
|
305
307
|
};
|
|
306
308
|
const _hoisted_6 = {
|
|
@@ -310,6 +312,11 @@ const _hoisted_6 = {
|
|
|
310
312
|
};
|
|
311
313
|
const _hoisted_7 = { class: "opencode-dialog-content" };
|
|
312
314
|
const _hoisted_8 = { class: "opencode-dialog-message" };
|
|
315
|
+
const _hoisted_9 = {
|
|
316
|
+
key: 0,
|
|
317
|
+
class: "opencode-page-notification",
|
|
318
|
+
role: "alert"
|
|
319
|
+
};
|
|
313
320
|
function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
314
321
|
return (0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)(
|
|
315
322
|
"div",
|
|
@@ -335,7 +342,7 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
335
342
|
1024
|
|
336
343
|
/* DYNAMIC_SLOTS */
|
|
337
344
|
),
|
|
338
|
-
|
|
345
|
+
(0, import_vue3.createCommentVNode)(' <SelectedBubbles v-if="bubbleVisible" /> '),
|
|
339
346
|
(0, import_vue3.withDirectives)((0, import_vue3.createElementVNode)(
|
|
340
347
|
"div",
|
|
341
348
|
{
|
|
@@ -375,7 +382,7 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
375
382
|
/* DYNAMIC_SLOTS */
|
|
376
383
|
),
|
|
377
384
|
(0, import_vue3.createCommentVNode)(" Notification "),
|
|
378
|
-
$setup.notificationVisible ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)(
|
|
385
|
+
$setup.notificationVisible && $setup.notificationMode === "widget" ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)(
|
|
379
386
|
"div",
|
|
380
387
|
_hoisted_1,
|
|
381
388
|
(0, import_vue3.toDisplayString)($setup.notificationMessage),
|
|
@@ -514,7 +521,17 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
514
521
|
}, "\u786E\u8BA4")
|
|
515
522
|
])
|
|
516
523
|
])
|
|
517
|
-
])) : (0, import_vue3.createCommentVNode)("v-if", true)
|
|
524
|
+
])) : (0, import_vue3.createCommentVNode)("v-if", true),
|
|
525
|
+
(0, import_vue3.createCommentVNode)(" Page-level Notification "),
|
|
526
|
+
((0, import_vue3.openBlock)(), (0, import_vue3.createBlock)(import_vue3.Teleport, { to: "body" }, [
|
|
527
|
+
$setup.notificationVisible && $setup.notificationMode === "page" ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)(
|
|
528
|
+
"div",
|
|
529
|
+
_hoisted_9,
|
|
530
|
+
(0, import_vue3.toDisplayString)($setup.notificationMessage),
|
|
531
|
+
1
|
|
532
|
+
/* TEXT */
|
|
533
|
+
)) : (0, import_vue3.createCommentVNode)("v-if", true)
|
|
534
|
+
]))
|
|
518
535
|
],
|
|
519
536
|
2
|
|
520
537
|
/* CLASS */
|
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.18","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.18",
|
|
4
4
|
"description": "Reusable OpenCode widget components built with Pagoda CLI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"vue": "^3.5.0"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@vite-plugin-opencode-assistant/shared": "1.0.
|
|
33
|
+
"@vite-plugin-opencode-assistant/shared": "1.0.18"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@vitejs/plugin-vue": "^6.0.5",
|