@vite-plugin-opencode-assistant/components 1.0.22 → 1.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/open-code-widget/composables/use-widget.d.ts +0 -1
- package/es/open-code-widget/composables/use-widget.js +0 -1
- package/es/open-code-widget/src/components/FloatingBubble/FloatingBubble-sfc.css +1 -0
- package/es/open-code-widget/src/components/FloatingBubble/FloatingBubble.vue.d.ts +44 -0
- package/es/open-code-widget/src/components/FloatingBubble/FloatingBubble.vue.js +290 -0
- package/es/open-code-widget/src/components/FloatingBubble/index.d.ts +3 -0
- package/es/open-code-widget/src/components/FloatingBubble/index.js +5 -0
- package/es/open-code-widget/src/components/FloatingBubble/types.d.ts +24 -0
- package/es/open-code-widget/src/components/FloatingBubble/types.js +0 -0
- package/es/open-code-widget/src/components/Trigger-sfc.css +1 -1
- package/es/open-code-widget/src/components/Trigger.vue.d.ts +21 -3
- package/es/open-code-widget/src/components/Trigger.vue.js +127 -48
- package/es/open-code-widget/src/index-sfc.css +1 -1
- package/es/open-code-widget/src/index.vue.d.ts +10 -11
- package/es/open-code-widget/src/index.vue.js +82 -17
- package/es/open-code-widget/src/types.d.ts +1 -2
- package/lib/@vite-plugin-opencode-assistant/components.cjs.js +543 -99
- package/lib/@vite-plugin-opencode-assistant/components.es.js +540 -96
- package/lib/components.css +3 -2
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/open-code-widget/composables/use-widget.d.ts +0 -1
- package/lib/open-code-widget/composables/use-widget.js +0 -1
- package/lib/open-code-widget/src/components/FloatingBubble/FloatingBubble-sfc.css +1 -0
- package/lib/open-code-widget/src/components/FloatingBubble/FloatingBubble.vue.d.ts +44 -0
- package/lib/open-code-widget/src/components/FloatingBubble/FloatingBubble.vue.js +307 -0
- package/lib/open-code-widget/src/components/FloatingBubble/index.d.ts +3 -0
- package/lib/open-code-widget/src/components/FloatingBubble/index.js +35 -0
- package/lib/open-code-widget/src/components/FloatingBubble/types.d.ts +24 -0
- package/lib/open-code-widget/src/components/FloatingBubble/types.js +15 -0
- package/lib/open-code-widget/src/components/Trigger-sfc.css +1 -1
- package/lib/open-code-widget/src/components/Trigger.vue.d.ts +21 -3
- package/lib/open-code-widget/src/components/Trigger.vue.js +137 -48
- package/lib/open-code-widget/src/index-sfc.css +1 -1
- package/lib/open-code-widget/src/index.vue.d.ts +10 -11
- package/lib/open-code-widget/src/index.vue.js +80 -15
- package/lib/open-code-widget/src/types.d.ts +1 -2
- package/lib/web-types.json +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
.opencode-widget{--oc-bg-main: #ffffff;--oc-bg-secondary: #f8f9fa;--oc-bg-tertiary: #f3f4f6;--oc-overlay-bg: rgba(255, 255, 255, .9);--oc-bg-inverse: #1e1e1e;--oc-text-primary: #282828;--oc-text-secondary: #4b5563;--oc-text-tertiary: #6b7280;--oc-text-placeholder: #9ca3af;--oc-text-inverse: #ffffff;--oc-border-primary: #e5e7eb;--oc-border-secondary: #d1d5db;--oc-primary: #3b82f6;--oc-primary-hover: #2563eb;--oc-primary-bg: rgba(59, 130, 246, .1);--oc-danger: #ef4444;--oc-danger-hover: #dc2626;--oc-danger-active: #b91c1c;--oc-success: #10b981;--oc-overlay: rgba(0, 0, 0, .5);--oc-tooltip-bg: #1e1e1e;--oc-dialog-overlay: rgba(0, 0, 0, .5);--oc-thinking-gradient-1: #10b981;--oc-thinking-gradient-2: #059669;--oc-thinking-glow: rgba(16, 185, 129, .3);--oc-thinking-glow-strong: rgba(16, 185, 129, .6);--oc-skeleton-bg: #e5e7eb;--oc-skeleton-gradient: linear-gradient(90deg, #e5e7eb 25%, #f3f4f6 50%, #e5e7eb 75%);--oc-shadow-sm: 0 2px 4px rgba(0, 0, 0, .1);--oc-shadow-md: 0 4px 12px rgba(0, 0, 0, .15);--oc-shadow-lg: 0 8px 32px rgba(0, 0, 0, .12);--oc-shadow-xl: 0 20px 60px rgba(0, 0, 0, .3);--oc-shadow-primary: 0 2px 4px rgba(59, 130, 246, .2);--oc-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .3);--oc-shadow-danger: 0 4px 12px rgba(239, 68, 68, .3);--oc-trigger-bg: #3b82f6;--oc-trigger-bg-hover: #2563eb;--oc-trigger-bg-active: #1d4ed8;--oc-trigger-shadow: 0 2px 8px rgba(59, 130, 246, .3);--oc-trigger-shadow-hover: 0 4px 12px rgba(59, 130, 246, .4);--oc-trigger-shadow-active: 0 4px 12px rgba(59, 130, 246, .5);position:fixed;z-index:999999;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.opencode-widget.opencode-theme-dark{--oc-bg-main: #1a1a1a;--oc-bg-secondary: #1e1e1e;--oc-bg-tertiary: #282828;--oc-overlay-bg: rgba(26, 26, 26, .9);--oc-bg-inverse: #ffffff;--oc-text-primary: #f3f4f6;--oc-text-secondary: #d1d5db;--oc-text-tertiary: #9ca3af;--oc-text-placeholder: #6b7280;--oc-text-inverse: #282828;--oc-border-primary: #282828;--oc-border-secondary: #4b5563;--oc-primary: #3b82f6;--oc-primary-hover: #2563eb;--oc-primary-bg: rgba(59, 130, 246, .15);--oc-danger: #ef4444;--oc-danger-hover: #dc2626;--oc-danger-active: #b91c1c;--oc-success: #10b981;--oc-overlay: rgba(26, 26, 26, .9);--oc-tooltip-bg: #282828;--oc-dialog-overlay: rgba(0, 0, 0, .7);--oc-thinking-gradient-1: #34d399;--oc-thinking-gradient-2: #10b981;--oc-thinking-glow: rgba(52, 211, 153, .3);--oc-thinking-glow-strong: rgba(52, 211, 153, .6);--oc-skeleton-bg: #151515;--oc-skeleton-gradient: linear-gradient(90deg, #282828 25%, #4b5563 50%, #282828 75%);--oc-shadow-sm: 0 2px 4px rgba(0, 0, 0, .3);--oc-shadow-md: 0 4px 12px rgba(0, 0, 0, .4);--oc-shadow-lg: 0 8px 32px rgba(0, 0, 0, .4);--oc-shadow-xl: 0 20px 60px rgba(0, 0, 0, .6);--oc-shadow-primary: 0 2px 4px rgba(59, 130, 246, .3);--oc-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .4);--oc-shadow-danger: 0 4px 12px rgba(239, 68, 68, .4);--oc-trigger-bg: #60a5fa;--oc-trigger-bg-hover: #3b82f6;--oc-trigger-bg-active: #2563eb;--oc-trigger-shadow: 0 2px 8px rgba(96, 165, 250, .4);--oc-trigger-shadow-hover: 0 4px 12px rgba(96, 165, 250, .5);--oc-trigger-shadow-active: 0 4px 12px rgba(96, 165, 250, .6)}.opencode-
|
|
1
|
+
.opencode-widget{--oc-bg-main: #ffffff;--oc-bg-secondary: #f8f9fa;--oc-bg-tertiary: #f3f4f6;--oc-overlay-bg: rgba(255, 255, 255, .9);--oc-bg-inverse: #1e1e1e;--oc-text-primary: #282828;--oc-text-secondary: #4b5563;--oc-text-tertiary: #6b7280;--oc-text-placeholder: #9ca3af;--oc-text-inverse: #ffffff;--oc-border-primary: #e5e7eb;--oc-border-secondary: #d1d5db;--oc-primary: #3b82f6;--oc-primary-hover: #2563eb;--oc-primary-bg: rgba(59, 130, 246, .1);--oc-danger: #ef4444;--oc-danger-hover: #dc2626;--oc-danger-active: #b91c1c;--oc-success: #10b981;--oc-overlay: rgba(0, 0, 0, .5);--oc-tooltip-bg: #1e1e1e;--oc-dialog-overlay: rgba(0, 0, 0, .5);--oc-thinking-gradient-1: #10b981;--oc-thinking-gradient-2: #059669;--oc-thinking-glow: rgba(16, 185, 129, .3);--oc-thinking-glow-strong: rgba(16, 185, 129, .6);--oc-skeleton-bg: #e5e7eb;--oc-skeleton-gradient: linear-gradient(90deg, #e5e7eb 25%, #f3f4f6 50%, #e5e7eb 75%);--oc-shadow-sm: 0 2px 4px rgba(0, 0, 0, .1);--oc-shadow-md: 0 4px 12px rgba(0, 0, 0, .15);--oc-shadow-lg: 0 8px 32px rgba(0, 0, 0, .12);--oc-shadow-xl: 0 20px 60px rgba(0, 0, 0, .3);--oc-shadow-primary: 0 2px 4px rgba(59, 130, 246, .2);--oc-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .3);--oc-shadow-danger: 0 4px 12px rgba(239, 68, 68, .3);--oc-trigger-bg: #3b82f6;--oc-trigger-bg-hover: #2563eb;--oc-trigger-bg-active: #1d4ed8;--oc-trigger-shadow: 0 2px 8px rgba(59, 130, 246, .3);--oc-trigger-shadow-hover: 0 4px 12px rgba(59, 130, 246, .4);--oc-trigger-shadow-active: 0 4px 12px rgba(59, 130, 246, .5);position:fixed;z-index:999999;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.opencode-widget.opencode-theme-dark{--oc-bg-main: #1a1a1a;--oc-bg-secondary: #1e1e1e;--oc-bg-tertiary: #282828;--oc-overlay-bg: rgba(26, 26, 26, .9);--oc-bg-inverse: #ffffff;--oc-text-primary: #f3f4f6;--oc-text-secondary: #d1d5db;--oc-text-tertiary: #9ca3af;--oc-text-placeholder: #6b7280;--oc-text-inverse: #282828;--oc-border-primary: #282828;--oc-border-secondary: #4b5563;--oc-primary: #3b82f6;--oc-primary-hover: #2563eb;--oc-primary-bg: rgba(59, 130, 246, .15);--oc-danger: #ef4444;--oc-danger-hover: #dc2626;--oc-danger-active: #b91c1c;--oc-success: #10b981;--oc-overlay: rgba(26, 26, 26, .9);--oc-tooltip-bg: #282828;--oc-dialog-overlay: rgba(0, 0, 0, .7);--oc-thinking-gradient-1: #34d399;--oc-thinking-gradient-2: #10b981;--oc-thinking-glow: rgba(52, 211, 153, .3);--oc-thinking-glow-strong: rgba(52, 211, 153, .6);--oc-skeleton-bg: #151515;--oc-skeleton-gradient: linear-gradient(90deg, #282828 25%, #4b5563 50%, #282828 75%);--oc-shadow-sm: 0 2px 4px rgba(0, 0, 0, .3);--oc-shadow-md: 0 4px 12px rgba(0, 0, 0, .4);--oc-shadow-lg: 0 8px 32px rgba(0, 0, 0, .4);--oc-shadow-xl: 0 20px 60px rgba(0, 0, 0, .6);--oc-shadow-primary: 0 2px 4px rgba(59, 130, 246, .3);--oc-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .4);--oc-shadow-danger: 0 4px 12px rgba(239, 68, 68, .4);--oc-trigger-bg: #60a5fa;--oc-trigger-bg-hover: #3b82f6;--oc-trigger-bg-active: #2563eb;--oc-trigger-shadow: 0 2px 8px rgba(96, 165, 250, .4);--oc-trigger-shadow-hover: 0 4px 12px rgba(96, 165, 250, .5);--oc-trigger-shadow-active: 0 4px 12px rgba(96, 165, 250, .6)}.opencode-chat{position:fixed;bottom:20px;width:700px;height:86vh;max-height:calc(100vh - 40px);background:var(--oc-bg-main);border-radius:16px;box-shadow:var(--oc-shadow-lg);overflow:hidden;opacity:0;visibility:hidden;transform:translateY(20px) scale(.95);transition:all .3s ease;display:flex;flex-direction:column;z-index:99999}.opencode-chat.minimized{width:300px;height:300px}.opencode-chat.minimized .opencode-iframe-container{margin-top:-146px}.opencode-chat-content{display:flex;flex:1;overflow:hidden}.opencode-chat.open{opacity:1;visibility:visible;transform:translateY(0) scale(1)}.opencode-notification{position:absolute;top:20px;left:50%;transform:translate(-50%);padding:12px 24px;background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;border-radius:10px;font-size:14px;font-weight:500;box-shadow:0 4px 16px rgba(59,130,246,.4),0 0 0 2px rgba(59,130,246,.2);animation:slideDown .3s ease;z-index:10000000;display:flex;align-items:center;gap:10px}.opencode-notification:before{content:"\1f4a1";font-size:16px}.opencode-dialog-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:var(--oc-dialog-overlay);display:flex;align-items:center;justify-content:center;z-index:9999999;animation:fadeIn .2s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.opencode-dialog{background:var(--oc-bg-main);border-radius:12px;padding:24px;min-width:320px;max-width:400px;box-shadow:var(--oc-shadow-xl);animation:scaleIn .2s ease}@keyframes scaleIn{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}.opencode-dialog-content{margin-bottom:20px}.opencode-dialog-message{font-size:15px;color:var(--oc-text-primary);line-height:1.5}.opencode-dialog-actions{display:flex;gap:12px;justify-content:flex-end}.opencode-dialog-btn{padding:10px 20px;border-radius:8px;border:none;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s}.opencode-dialog-btn.cancel{background:var(--oc-bg-tertiary);color:var(--oc-text-primary)}.opencode-dialog-btn.cancel:hover{background:var(--oc-text-primary);color:var(--oc-bg-main)}.opencode-dialog-btn.confirm{background:var(--oc-danger);color:#fff}.opencode-dialog-btn.confirm:hover{background:var(--oc-danger-hover)}@keyframes slideDown{0%{transform:translate(-50%) translateY(-100%);opacity:0}to{transform:translate(-50%) translateY(0);opacity:1}}.opencode-page-notification{position:fixed;top:20px;left:50%;transform:translate(-50%);padding:12px 24px;background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;border-radius:10px;font-size:14px;font-weight:500;box-shadow:0 4px 16px rgba(59,130,246,.4),0 0 0 2px rgba(59,130,246,.2);animation:slideDown .3s ease;z-index:2147483647;display:flex;align-items:center;gap:10px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.opencode-page-notification:before{content:"\1f4a1";font-size:16px}.opencode-element-highlight{position:fixed;pointer-events:none;z-index:999998;display:none;transition:all .1s ease;border-radius:4px}#vue-inspector-container{display:none!important}.opencode-element-tooltip{position:fixed;background:var(--oc-tooltip-bg);color:#fff;padding:8px 12px;border-radius:6px;font-size:12px;z-index:9999998;display:none;box-shadow:var(--oc-shadow-md);max-width:300px;pointer-events:none}.opencode-tooltip-tag{font-weight:500;margin-bottom:4px;word-break:break-all}.opencode-tooltip-file{font-size:11px;color:var(--oc-text-placeholder);word-break:break-all}.opencode-element-highlight-temp{position:absolute;pointer-events:none;z-index:999998;border-radius:4px;animation:highlight-pulse 2s ease-out forwards}@keyframes highlight-pulse{0%{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.02)}to{opacity:0;transform:scale(1)}}@media(max-width:768px){.opencode-chat{width:calc(100vw - 40px);height:calc(100vh - 100px)}}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
import type { OpenCodeWidgetProps } from "./types";
|
|
2
|
-
declare var
|
|
2
|
+
declare var __VLS_12: {}, __VLS_17: {}, __VLS_19: {}, __VLS_21: {}, __VLS_26: {}, __VLS_33: {}, __VLS_35: {}, __VLS_37: {}, __VLS_39: {};
|
|
3
3
|
type __VLS_Slots = {} & {
|
|
4
|
-
'button-icon'?: (props: typeof
|
|
4
|
+
'button-icon'?: (props: typeof __VLS_12) => any;
|
|
5
5
|
} & {
|
|
6
|
-
'session-toggle-icon'?: (props: typeof
|
|
6
|
+
'session-toggle-icon'?: (props: typeof __VLS_17) => any;
|
|
7
7
|
} & {
|
|
8
|
-
'select-icon'?: (props: typeof
|
|
8
|
+
'select-icon'?: (props: typeof __VLS_19) => any;
|
|
9
9
|
} & {
|
|
10
|
-
'close-icon'?: (props: typeof
|
|
10
|
+
'close-icon'?: (props: typeof __VLS_21) => any;
|
|
11
11
|
} & {
|
|
12
|
-
'sessions-empty'?: (props: typeof
|
|
12
|
+
'sessions-empty'?: (props: typeof __VLS_26) => any;
|
|
13
13
|
} & {
|
|
14
|
-
'empty-state'?: (props: typeof
|
|
14
|
+
'empty-state'?: (props: typeof __VLS_33) => any;
|
|
15
15
|
} & {
|
|
16
|
-
loading?: (props: typeof
|
|
16
|
+
loading?: (props: typeof __VLS_35) => any;
|
|
17
17
|
} & {
|
|
18
|
-
error?: (props: typeof
|
|
18
|
+
error?: (props: typeof __VLS_37) => any;
|
|
19
19
|
} & {
|
|
20
|
-
content?: (props: typeof
|
|
20
|
+
content?: (props: typeof __VLS_39) => any;
|
|
21
21
|
};
|
|
22
22
|
declare const __VLS_component: import("vue").DefineComponent<OpenCodeWidgetProps, {
|
|
23
23
|
showNotification: (message: string, options?: {
|
|
@@ -90,7 +90,6 @@ declare const __VLS_component: import("vue").DefineComponent<OpenCodeWidgetProps
|
|
|
90
90
|
open: boolean;
|
|
91
91
|
hotkeyLabel: string;
|
|
92
92
|
thinking: boolean;
|
|
93
|
-
position: import("@vite-plugin-opencode-assistant/shared").OpenCodeWidgetPosition;
|
|
94
93
|
currentSessionId: string | null;
|
|
95
94
|
selectedElements: import("@vite-plugin-opencode-assistant/shared").OpenCodeSelectedElement[];
|
|
96
95
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
@@ -19,7 +19,7 @@ var __spreadValues = (a, b) => {
|
|
|
19
19
|
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
20
|
import "./index-sfc.css";
|
|
21
21
|
import { defineComponent as _defineComponent } from "vue";
|
|
22
|
-
import { useSlots, toRef, ref, watch } from "vue";
|
|
22
|
+
import { useSlots, toRef, ref, watch, computed } 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";
|
|
@@ -36,7 +36,6 @@ const __vue_sfc__ = /* @__PURE__ */ _defineComponent(__spreadProps(__spreadValue
|
|
|
36
36
|
}), {
|
|
37
37
|
__name: "index",
|
|
38
38
|
props: {
|
|
39
|
-
position: { type: String, required: false, default: "bottom-right" },
|
|
40
39
|
open: { type: Boolean, required: false, default: false },
|
|
41
40
|
theme: { type: String, required: false, default: "auto" },
|
|
42
41
|
title: { type: String, required: false, default: "AI \u52A9\u624B" },
|
|
@@ -98,6 +97,7 @@ const __vue_sfc__ = /* @__PURE__ */ _defineComponent(__spreadProps(__spreadValue
|
|
|
98
97
|
if (dialogResolve) dialogResolve(false);
|
|
99
98
|
};
|
|
100
99
|
const frameRef = ref(null);
|
|
100
|
+
const triggerRef = ref(null);
|
|
101
101
|
const sendMessageToIframe = (type, data) => {
|
|
102
102
|
var _a;
|
|
103
103
|
(_a = frameRef.value) == null ? void 0 : _a.sendMessageToIframe(type, data);
|
|
@@ -131,7 +131,6 @@ const __vue_sfc__ = /* @__PURE__ */ _defineComponent(__spreadProps(__spreadValue
|
|
|
131
131
|
handleToggleSessionList,
|
|
132
132
|
handleToggleTheme
|
|
133
133
|
} = useWidget({
|
|
134
|
-
position: toRef(props, "position"),
|
|
135
134
|
theme: toRef(props, "theme"),
|
|
136
135
|
open: toRef(props, "open"),
|
|
137
136
|
selectMode: toRef(props, "selectMode"),
|
|
@@ -220,6 +219,68 @@ const __vue_sfc__ = /* @__PURE__ */ _defineComponent(__spreadProps(__spreadValue
|
|
|
220
219
|
promptDockVisible.value = !promptDockVisible.value;
|
|
221
220
|
sendMessageToIframe("prompt-dock-visibility-change", { visible: promptDockVisible.value });
|
|
222
221
|
};
|
|
222
|
+
const bubbleOffset = ref({ x: 0, y: 0 });
|
|
223
|
+
const isBubbleOnRightSide = computed(() => {
|
|
224
|
+
if (typeof window === "undefined") return true;
|
|
225
|
+
const centerX = window.innerWidth / 2;
|
|
226
|
+
return bubbleOffset.value.x > centerX;
|
|
227
|
+
});
|
|
228
|
+
const chatPositionStyle = computed(() => {
|
|
229
|
+
if (typeof window === "undefined") return {};
|
|
230
|
+
const windowWidth = window.innerWidth;
|
|
231
|
+
const windowHeight = window.innerHeight;
|
|
232
|
+
const chatWidth = minimized.value ? 300 : 700;
|
|
233
|
+
const chatHeight = minimized.value ? 300 : Math.min(windowHeight * 0.86, windowHeight - 40);
|
|
234
|
+
const gap = 24;
|
|
235
|
+
const bubbleSize = 44;
|
|
236
|
+
const screenMargin = 20;
|
|
237
|
+
const style = {};
|
|
238
|
+
if (isBubbleOnRightSide.value) {
|
|
239
|
+
let rightPos = windowWidth - bubbleOffset.value.x + gap;
|
|
240
|
+
const maxRight = windowWidth - chatWidth - screenMargin;
|
|
241
|
+
if (rightPos > maxRight) {
|
|
242
|
+
rightPos = maxRight;
|
|
243
|
+
}
|
|
244
|
+
style.right = `${rightPos}px`;
|
|
245
|
+
style.left = "auto";
|
|
246
|
+
} else {
|
|
247
|
+
let leftPos = bubbleOffset.value.x + bubbleSize + gap;
|
|
248
|
+
const maxLeft = windowWidth - chatWidth - screenMargin;
|
|
249
|
+
if (leftPos > maxLeft) {
|
|
250
|
+
leftPos = maxLeft;
|
|
251
|
+
}
|
|
252
|
+
style.left = `${leftPos}px`;
|
|
253
|
+
style.right = "auto";
|
|
254
|
+
}
|
|
255
|
+
let bottomPos = windowHeight - bubbleOffset.value.y - bubbleSize;
|
|
256
|
+
const maxBottom = windowHeight - chatHeight - screenMargin;
|
|
257
|
+
if (bottomPos > maxBottom) {
|
|
258
|
+
bottomPos = maxBottom;
|
|
259
|
+
}
|
|
260
|
+
if (bottomPos < screenMargin) {
|
|
261
|
+
bottomPos = screenMargin;
|
|
262
|
+
}
|
|
263
|
+
style.bottom = `${bottomPos}px`;
|
|
264
|
+
return style;
|
|
265
|
+
});
|
|
266
|
+
const handleBubbleOffsetChange = (offset) => {
|
|
267
|
+
bubbleOffset.value = offset;
|
|
268
|
+
};
|
|
269
|
+
const isDragging = ref(false);
|
|
270
|
+
let wasOpenBeforeDrag = false;
|
|
271
|
+
const handleDragStart = () => {
|
|
272
|
+
isDragging.value = true;
|
|
273
|
+
wasOpenBeforeDrag = props.open;
|
|
274
|
+
if (props.open) {
|
|
275
|
+
emit("update:open", false);
|
|
276
|
+
}
|
|
277
|
+
};
|
|
278
|
+
const handleDragEnd = () => {
|
|
279
|
+
isDragging.value = false;
|
|
280
|
+
if (wasOpenBeforeDrag) {
|
|
281
|
+
emit("update:open", true);
|
|
282
|
+
}
|
|
283
|
+
};
|
|
223
284
|
provideOpenCodeWidgetContext({
|
|
224
285
|
theme: toRef(props, "theme"),
|
|
225
286
|
resolvedTheme,
|
|
@@ -273,12 +334,16 @@ const __vue_sfc__ = /* @__PURE__ */ _defineComponent(__spreadProps(__spreadValue
|
|
|
273
334
|
return dialogResolve;
|
|
274
335
|
}, set dialogResolve(v) {
|
|
275
336
|
dialogResolve = v;
|
|
276
|
-
}, showConfirmDialog, handleDialogConfirm, handleDialogCancel, frameRef, sendMessageToIframe, handleFrameLoaded, localSessionListCollapsed, minimized, promptDockVisible, buttonActive, containerClasses, iframeSource, sessionListTitle, resolvedTheme, handleClose, handleEmptyAction, handleToggle, handleToggleSessionList, handleToggleTheme, sessionItems, handleCreateSession, handleDeleteSession, handleSelectSession, bubbleVisible, hasSelectedElements, selectedElementItems, handleClearSelectedNodes, handleClickSelectedNode, handleRemoveSelectedNode, handleToggleSelectMode, highlightVisible, highlightStyle, tooltipVisible, tooltipStyle, tooltipContent, handleToggleMinimize, handleTogglePromptDock,
|
|
337
|
+
}, showConfirmDialog, handleDialogConfirm, handleDialogCancel, frameRef, triggerRef, sendMessageToIframe, handleFrameLoaded, localSessionListCollapsed, minimized, promptDockVisible, buttonActive, containerClasses, iframeSource, sessionListTitle, resolvedTheme, handleClose, handleEmptyAction, handleToggle, handleToggleSessionList, handleToggleTheme, sessionItems, handleCreateSession, handleDeleteSession, handleSelectSession, bubbleVisible, hasSelectedElements, selectedElementItems, handleClearSelectedNodes, handleClickSelectedNode, handleRemoveSelectedNode, handleToggleSelectMode, highlightVisible, highlightStyle, tooltipVisible, tooltipStyle, tooltipContent, handleToggleMinimize, handleTogglePromptDock, bubbleOffset, isBubbleOnRightSide, chatPositionStyle, handleBubbleOffsetChange, isDragging, get wasOpenBeforeDrag() {
|
|
338
|
+
return wasOpenBeforeDrag;
|
|
339
|
+
}, set wasOpenBeforeDrag(v) {
|
|
340
|
+
wasOpenBeforeDrag = v;
|
|
341
|
+
}, handleDragStart, handleDragEnd, Frame, Header, SelectHint, SelectedNodes, SessionList, Trigger };
|
|
277
342
|
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
278
343
|
return __returned__;
|
|
279
344
|
}
|
|
280
345
|
}));
|
|
281
|
-
import { renderSlot as _renderSlot, withCtx as _withCtx, createSlots as _createSlots, createVNode as _createVNode,
|
|
346
|
+
import { renderSlot as _renderSlot, withCtx as _withCtx, createSlots as _createSlots, createVNode as _createVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, vShow as _vShow, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, withDirectives as _withDirectives, Teleport as _Teleport, createBlock as _createBlock } from "vue";
|
|
282
347
|
const _hoisted_1 = {
|
|
283
348
|
key: 0,
|
|
284
349
|
class: "opencode-notification",
|
|
@@ -312,7 +377,12 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
312
377
|
[
|
|
313
378
|
_createVNode(
|
|
314
379
|
$setup["Trigger"],
|
|
315
|
-
|
|
380
|
+
{
|
|
381
|
+
ref: "triggerRef",
|
|
382
|
+
onOffsetChange: $setup.handleBubbleOffsetChange,
|
|
383
|
+
onDragStart: $setup.handleDragStart,
|
|
384
|
+
onDragEnd: $setup.handleDragEnd
|
|
385
|
+
},
|
|
316
386
|
_createSlots({
|
|
317
387
|
_: 2
|
|
318
388
|
/* DYNAMIC */
|
|
@@ -325,14 +395,14 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
325
395
|
key: "0"
|
|
326
396
|
} : void 0
|
|
327
397
|
]),
|
|
328
|
-
|
|
329
|
-
/* DYNAMIC_SLOTS */
|
|
398
|
+
1536
|
|
399
|
+
/* NEED_PATCH, DYNAMIC_SLOTS */
|
|
330
400
|
),
|
|
331
|
-
_createCommentVNode(' <SelectedBubbles v-if="bubbleVisible" /> '),
|
|
332
401
|
_withDirectives(_createElementVNode(
|
|
333
402
|
"div",
|
|
334
403
|
{
|
|
335
|
-
class: _normalizeClass(["opencode-chat", { open: $props.open, minimized: $setup.minimized }])
|
|
404
|
+
class: _normalizeClass(["opencode-chat", { open: $props.open, minimized: $setup.minimized, dragging: $setup.isDragging }]),
|
|
405
|
+
style: _normalizeStyle($setup.chatPositionStyle)
|
|
336
406
|
},
|
|
337
407
|
[
|
|
338
408
|
_createVNode(
|
|
@@ -367,7 +437,6 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
367
437
|
1024
|
|
368
438
|
/* DYNAMIC_SLOTS */
|
|
369
439
|
),
|
|
370
|
-
_createCommentVNode(" Notification "),
|
|
371
440
|
$setup.notificationVisible && $setup.notificationMode === "widget" ? (_openBlock(), _createElementBlock(
|
|
372
441
|
"div",
|
|
373
442
|
_hoisted_1,
|
|
@@ -433,13 +502,12 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
433
502
|
_createVNode($setup["SelectedNodes"])
|
|
434
503
|
])
|
|
435
504
|
],
|
|
436
|
-
|
|
437
|
-
/* CLASS */
|
|
505
|
+
6
|
|
506
|
+
/* CLASS, STYLE */
|
|
438
507
|
), [
|
|
439
508
|
[_vShow, !$props.selectMode]
|
|
440
509
|
]),
|
|
441
510
|
_createVNode($setup["SelectHint"]),
|
|
442
|
-
_createCommentVNode(" Inspector Highlight "),
|
|
443
511
|
_withDirectives(_createElementVNode(
|
|
444
512
|
"div",
|
|
445
513
|
{
|
|
@@ -454,7 +522,6 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
454
522
|
), [
|
|
455
523
|
[_vShow, $setup.highlightVisible]
|
|
456
524
|
]),
|
|
457
|
-
_createCommentVNode(" Inspector Tooltip "),
|
|
458
525
|
_withDirectives(_createElementVNode(
|
|
459
526
|
"div",
|
|
460
527
|
{
|
|
@@ -484,7 +551,6 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
484
551
|
), [
|
|
485
552
|
[_vShow, $setup.tooltipVisible]
|
|
486
553
|
]),
|
|
487
|
-
_createCommentVNode(" Dialog "),
|
|
488
554
|
$setup.dialogVisible ? (_openBlock(), _createElementBlock("div", _hoisted_5, [
|
|
489
555
|
_createElementVNode("div", _hoisted_6, [
|
|
490
556
|
_createElementVNode("div", _hoisted_7, [
|
|
@@ -508,7 +574,6 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
508
574
|
])
|
|
509
575
|
])
|
|
510
576
|
])) : _createCommentVNode("v-if", true),
|
|
511
|
-
_createCommentVNode(" Page-level Notification "),
|
|
512
577
|
(_openBlock(), _createBlock(_Teleport, { to: "body" }, [
|
|
513
578
|
$setup.notificationVisible && $setup.notificationMode === "page" ? (_openBlock(), _createElementBlock(
|
|
514
579
|
"div",
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
export type {
|
|
2
|
-
export type OpenCodeWidgetPositionLocal = "bottom-right" | "bottom-left" | "top-right" | "top-left";
|
|
1
|
+
export type { OpenCodeWidgetTheme, OpenCodeWidgetSession, OpenCodeSelectedElement, OpenCodeRemoveSelectedPayload, OpenCodeWidgetSessionItem, OpenCodeSelectedElementItem, OpenCodeWidgetProps, OpenCodeWidgetEmits, } from "@vite-plugin-opencode-assistant/shared";
|
|
3
2
|
export type OpenCodeWidgetThemeLocal = "light" | "dark" | "auto";
|