@aipanel/ui 1.2.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/AI-panel-widget/composables/use-inspector.d.ts +52 -0
- package/es/AI-panel-widget/composables/use-inspector.mjs +437 -0
- package/es/AI-panel-widget/composables/use-persist-state.d.ts +32 -0
- package/es/AI-panel-widget/composables/use-persist-state.mjs +83 -0
- package/es/AI-panel-widget/composables/use-selection.d.ts +19 -0
- package/es/AI-panel-widget/composables/use-selection.mjs +112 -0
- package/es/AI-panel-widget/composables/use-session.d.ts +16 -0
- package/es/AI-panel-widget/composables/use-session.mjs +47 -0
- package/es/AI-panel-widget/composables/use-split.d.ts +30 -0
- package/es/AI-panel-widget/composables/use-split.mjs +133 -0
- package/es/AI-panel-widget/composables/use-widget.d.ts +27 -0
- package/es/AI-panel-widget/composables/use-widget.mjs +78 -0
- package/es/AI-panel-widget/index.d.ts +5 -0
- package/es/AI-panel-widget/index.mjs +9 -0
- package/es/AI-panel-widget/src/assets/logo.svg +13 -0
- package/es/AI-panel-widget/src/components/AIPanelLogo-sfc.css +1 -0
- package/es/AI-panel-widget/src/components/AIPanelLogo.vue.d.ts +8 -0
- package/es/AI-panel-widget/src/components/AIPanelLogo.vue.mjs +40 -0
- package/es/AI-panel-widget/src/components/ChatPanel-sfc.css +1 -0
- package/es/AI-panel-widget/src/components/ChatPanel.vue.d.ts +179 -0
- package/es/AI-panel-widget/src/components/ChatPanel.vue.mjs +308 -0
- package/es/AI-panel-widget/src/components/FloatingBubble/FloatingBubble-sfc.css +1 -0
- package/es/AI-panel-widget/src/components/FloatingBubble/FloatingBubble.vue.d.ts +44 -0
- package/es/AI-panel-widget/src/components/FloatingBubble/FloatingBubble.vue.mjs +311 -0
- package/es/AI-panel-widget/src/components/FloatingBubble/index.d.ts +3 -0
- package/es/AI-panel-widget/src/components/FloatingBubble/index.mjs +5 -0
- package/es/AI-panel-widget/src/components/FloatingBubble/types.d.ts +24 -0
- package/es/AI-panel-widget/src/components/FloatingBubble/types.mjs +0 -0
- package/es/AI-panel-widget/src/components/Frame-sfc.css +1 -0
- package/es/AI-panel-widget/src/components/Frame.vue.d.ts +22 -0
- package/es/AI-panel-widget/src/components/Frame.vue.mjs +143 -0
- package/es/AI-panel-widget/src/components/Header-sfc.css +1 -0
- package/es/AI-panel-widget/src/components/Header.vue.d.ts +27 -0
- package/es/AI-panel-widget/src/components/Header.vue.mjs +683 -0
- package/es/AI-panel-widget/src/components/ResizeHandle-sfc.css +1 -0
- package/es/AI-panel-widget/src/components/ResizeHandle.vue.d.ts +22 -0
- package/es/AI-panel-widget/src/components/ResizeHandle.vue.mjs +79 -0
- package/es/AI-panel-widget/src/components/SelectHint-sfc.css +1 -0
- package/es/AI-panel-widget/src/components/SelectHint.vue.d.ts +3 -0
- package/es/AI-panel-widget/src/components/SelectHint.vue.mjs +40 -0
- package/es/AI-panel-widget/src/components/SelectedBubbles-sfc.css +1 -0
- package/es/AI-panel-widget/src/components/SelectedBubbles.vue.d.ts +3 -0
- package/es/AI-panel-widget/src/components/SelectedBubbles.vue.mjs +84 -0
- package/es/AI-panel-widget/src/components/SelectedNodes-sfc.css +1 -0
- package/es/AI-panel-widget/src/components/SelectedNodes.vue.d.ts +3 -0
- package/es/AI-panel-widget/src/components/SelectedNodes.vue.mjs +103 -0
- package/es/AI-panel-widget/src/components/SessionList-sfc.css +1 -0
- package/es/AI-panel-widget/src/components/SessionList.vue.d.ts +13 -0
- package/es/AI-panel-widget/src/components/SessionList.vue.mjs +222 -0
- package/es/AI-panel-widget/src/components/SplitTrigger-sfc.css +1 -0
- package/es/AI-panel-widget/src/components/SplitTrigger.vue.d.ts +18 -0
- package/es/AI-panel-widget/src/components/SplitTrigger.vue.mjs +112 -0
- package/es/AI-panel-widget/src/components/Trigger-sfc.css +1 -0
- package/es/AI-panel-widget/src/components/Trigger.vue.d.ts +28 -0
- package/es/AI-panel-widget/src/components/Trigger.vue.mjs +74 -0
- package/es/AI-panel-widget/src/context.d.ts +67 -0
- package/es/AI-panel-widget/src/context.mjs +16 -0
- package/es/AI-panel-widget/src/index-sfc.css +1 -0
- package/es/AI-panel-widget/src/index.vue.d.ts +69 -0
- package/es/AI-panel-widget/src/index.vue.mjs +782 -0
- package/es/AI-panel-widget/src/types.d.ts +2 -0
- package/es/AI-panel-widget/src/types.mjs +0 -0
- package/es/AI-panel-widget/style/index-pure.d.ts +0 -0
- package/es/AI-panel-widget/style/index-pure.mjs +0 -0
- package/es/AI-panel-widget/style/index.d.ts +0 -0
- package/es/AI-panel-widget/style/index.mjs +0 -0
- package/es/AI-panel-widget/style/less-pure.d.ts +0 -0
- package/es/AI-panel-widget/style/less-pure.mjs +0 -0
- package/es/AI-panel-widget/style/less.d.ts +0 -0
- package/es/AI-panel-widget/style/less.mjs +0 -0
- package/es/env.d.ts +15 -0
- package/es/index.d.ts +7 -0
- package/es/index.mjs +22 -0
- package/es/setup.d.ts +1 -0
- package/es/setup.mjs +4 -0
- package/lib/AI-panel-widget/composables/use-inspector.cjs +466 -0
- package/lib/AI-panel-widget/composables/use-inspector.d.ts +52 -0
- package/lib/AI-panel-widget/composables/use-persist-state.cjs +102 -0
- package/lib/AI-panel-widget/composables/use-persist-state.d.ts +32 -0
- package/lib/AI-panel-widget/composables/use-selection.cjs +131 -0
- package/lib/AI-panel-widget/composables/use-selection.d.ts +19 -0
- package/lib/AI-panel-widget/composables/use-session.cjs +66 -0
- package/lib/AI-panel-widget/composables/use-session.d.ts +16 -0
- package/lib/AI-panel-widget/composables/use-split.cjs +152 -0
- package/lib/AI-panel-widget/composables/use-split.d.ts +30 -0
- package/lib/AI-panel-widget/composables/use-widget.cjs +97 -0
- package/lib/AI-panel-widget/composables/use-widget.d.ts +27 -0
- package/lib/AI-panel-widget/index.cjs +39 -0
- package/lib/AI-panel-widget/index.d.ts +5 -0
- package/lib/AI-panel-widget/src/assets/logo.svg +13 -0
- package/lib/AI-panel-widget/src/components/AIPanelLogo-sfc.css +1 -0
- package/lib/AI-panel-widget/src/components/AIPanelLogo.vue.cjs +69 -0
- package/lib/AI-panel-widget/src/components/AIPanelLogo.vue.d.ts +8 -0
- package/lib/AI-panel-widget/src/components/ChatPanel-sfc.css +1 -0
- package/lib/AI-panel-widget/src/components/ChatPanel.vue.cjs +337 -0
- package/lib/AI-panel-widget/src/components/ChatPanel.vue.d.ts +179 -0
- package/lib/AI-panel-widget/src/components/FloatingBubble/FloatingBubble-sfc.css +1 -0
- package/lib/AI-panel-widget/src/components/FloatingBubble/FloatingBubble.vue.cjs +330 -0
- package/lib/AI-panel-widget/src/components/FloatingBubble/FloatingBubble.vue.d.ts +44 -0
- package/lib/AI-panel-widget/src/components/FloatingBubble/index.cjs +35 -0
- package/lib/AI-panel-widget/src/components/FloatingBubble/index.d.ts +3 -0
- package/lib/AI-panel-widget/src/components/FloatingBubble/types.cjs +15 -0
- package/lib/AI-panel-widget/src/components/FloatingBubble/types.d.ts +24 -0
- package/lib/AI-panel-widget/src/components/Frame-sfc.css +1 -0
- package/lib/AI-panel-widget/src/components/Frame.vue.cjs +162 -0
- package/lib/AI-panel-widget/src/components/Frame.vue.d.ts +22 -0
- package/lib/AI-panel-widget/src/components/Header-sfc.css +1 -0
- package/lib/AI-panel-widget/src/components/Header.vue.cjs +702 -0
- package/lib/AI-panel-widget/src/components/Header.vue.d.ts +27 -0
- package/lib/AI-panel-widget/src/components/ResizeHandle-sfc.css +1 -0
- package/lib/AI-panel-widget/src/components/ResizeHandle.vue.cjs +98 -0
- package/lib/AI-panel-widget/src/components/ResizeHandle.vue.d.ts +22 -0
- package/lib/AI-panel-widget/src/components/SelectHint-sfc.css +1 -0
- package/lib/AI-panel-widget/src/components/SelectHint.vue.cjs +59 -0
- package/lib/AI-panel-widget/src/components/SelectHint.vue.d.ts +3 -0
- package/lib/AI-panel-widget/src/components/SelectedBubbles-sfc.css +1 -0
- package/lib/AI-panel-widget/src/components/SelectedBubbles.vue.cjs +103 -0
- package/lib/AI-panel-widget/src/components/SelectedBubbles.vue.d.ts +3 -0
- package/lib/AI-panel-widget/src/components/SelectedNodes-sfc.css +1 -0
- package/lib/AI-panel-widget/src/components/SelectedNodes.vue.cjs +122 -0
- package/lib/AI-panel-widget/src/components/SelectedNodes.vue.d.ts +3 -0
- package/lib/AI-panel-widget/src/components/SessionList-sfc.css +1 -0
- package/lib/AI-panel-widget/src/components/SessionList.vue.cjs +241 -0
- package/lib/AI-panel-widget/src/components/SessionList.vue.d.ts +13 -0
- package/lib/AI-panel-widget/src/components/SplitTrigger-sfc.css +1 -0
- package/lib/AI-panel-widget/src/components/SplitTrigger.vue.cjs +131 -0
- package/lib/AI-panel-widget/src/components/SplitTrigger.vue.d.ts +18 -0
- package/lib/AI-panel-widget/src/components/Trigger-sfc.css +1 -0
- package/lib/AI-panel-widget/src/components/Trigger.vue.cjs +103 -0
- package/lib/AI-panel-widget/src/components/Trigger.vue.d.ts +28 -0
- package/lib/AI-panel-widget/src/context.cjs +35 -0
- package/lib/AI-panel-widget/src/context.d.ts +67 -0
- package/lib/AI-panel-widget/src/index-sfc.css +1 -0
- package/lib/AI-panel-widget/src/index.vue.cjs +811 -0
- package/lib/AI-panel-widget/src/index.vue.d.ts +69 -0
- package/lib/AI-panel-widget/src/types.cjs +15 -0
- package/lib/AI-panel-widget/src/types.d.ts +2 -0
- package/lib/AI-panel-widget/style/index-pure.cjs +0 -0
- package/lib/AI-panel-widget/style/index-pure.d.ts +0 -0
- package/lib/AI-panel-widget/style/index.cjs +0 -0
- package/lib/AI-panel-widget/style/index.d.ts +0 -0
- package/lib/AI-panel-widget/style/less-pure.cjs +0 -0
- package/lib/AI-panel-widget/style/less-pure.d.ts +0 -0
- package/lib/AI-panel-widget/style/less.cjs +0 -0
- package/lib/AI-panel-widget/style/less.d.ts +0 -0
- package/lib/env.d.ts +15 -0
- package/lib/index.cjs +42 -0
- package/lib/index.css +0 -0
- package/lib/index.d.ts +7 -0
- package/lib/index.less +0 -0
- package/lib/setup.cjs +23 -0
- package/lib/setup.d.ts +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
width?: number;
|
|
3
|
+
minWidth?: number;
|
|
4
|
+
maxWidth?: number;
|
|
5
|
+
position?: "left" | "right";
|
|
6
|
+
};
|
|
7
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
8
|
+
resize: (width: number) => any;
|
|
9
|
+
"resize-start": () => any;
|
|
10
|
+
"resize-end": () => any;
|
|
11
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
12
|
+
onResize?: ((width: number) => any) | undefined;
|
|
13
|
+
"onResize-start"?: (() => any) | undefined;
|
|
14
|
+
"onResize-end"?: (() => any) | undefined;
|
|
15
|
+
}>, {
|
|
16
|
+
width: number;
|
|
17
|
+
minWidth: number;
|
|
18
|
+
maxWidth: number;
|
|
19
|
+
position: "left" | "right";
|
|
20
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
21
|
+
declare const _default: typeof __VLS_export;
|
|
22
|
+
export default _default;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import "./ResizeHandle-sfc.css";
|
|
2
|
+
import { defineComponent as _defineComponent } from "vue";
|
|
3
|
+
import { ref, onUnmounted } from "vue";
|
|
4
|
+
const __vue_sfc__ = /* @__PURE__ */ _defineComponent({
|
|
5
|
+
...{
|
|
6
|
+
name: "ResizeHandle"
|
|
7
|
+
},
|
|
8
|
+
__name: "ResizeHandle",
|
|
9
|
+
props: {
|
|
10
|
+
width: { type: Number, required: false, default: 500 },
|
|
11
|
+
minWidth: { type: Number, required: false, default: 400 },
|
|
12
|
+
maxWidth: { type: Number, required: false, default: 800 },
|
|
13
|
+
position: { type: String, required: false, default: "right" }
|
|
14
|
+
},
|
|
15
|
+
emits: ["resize", "resize-start", "resize-end"],
|
|
16
|
+
setup(__props, { expose: __expose, emit: __emit }) {
|
|
17
|
+
__expose();
|
|
18
|
+
const props = __props;
|
|
19
|
+
const emit = __emit;
|
|
20
|
+
const isResizing = ref(false);
|
|
21
|
+
const startX = ref(0);
|
|
22
|
+
const startWidth = ref(0);
|
|
23
|
+
const handleMouseDown = (e) => {
|
|
24
|
+
e.preventDefault();
|
|
25
|
+
isResizing.value = true;
|
|
26
|
+
startX.value = e.clientX;
|
|
27
|
+
startWidth.value = props.width;
|
|
28
|
+
emit("resize-start");
|
|
29
|
+
document.addEventListener("mousemove", handleMouseMove);
|
|
30
|
+
document.addEventListener("mouseup", handleMouseUp);
|
|
31
|
+
};
|
|
32
|
+
const handleMouseMove = (e) => {
|
|
33
|
+
if (!isResizing.value) return;
|
|
34
|
+
let deltaX;
|
|
35
|
+
if (props.position === "right") {
|
|
36
|
+
deltaX = startX.value - e.clientX;
|
|
37
|
+
} else {
|
|
38
|
+
deltaX = e.clientX - startX.value;
|
|
39
|
+
}
|
|
40
|
+
const newWidth = Math.max(props.minWidth, Math.min(props.maxWidth, startWidth.value + deltaX));
|
|
41
|
+
emit("resize", newWidth);
|
|
42
|
+
};
|
|
43
|
+
const handleMouseUp = () => {
|
|
44
|
+
isResizing.value = false;
|
|
45
|
+
emit("resize-end");
|
|
46
|
+
document.removeEventListener("mousemove", handleMouseMove);
|
|
47
|
+
document.removeEventListener("mouseup", handleMouseUp);
|
|
48
|
+
};
|
|
49
|
+
const handleDoubleClick = () => {
|
|
50
|
+
emit("resize", 500);
|
|
51
|
+
};
|
|
52
|
+
onUnmounted(() => {
|
|
53
|
+
document.removeEventListener("mousemove", handleMouseMove);
|
|
54
|
+
document.removeEventListener("mouseup", handleMouseUp);
|
|
55
|
+
});
|
|
56
|
+
const __returned__ = { props, emit, isResizing, startX, startWidth, handleMouseDown, handleMouseMove, handleMouseUp, handleDoubleClick };
|
|
57
|
+
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
58
|
+
return __returned__;
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
import { normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock } from "vue";
|
|
62
|
+
function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
63
|
+
return _openBlock(), _createElementBlock(
|
|
64
|
+
"div",
|
|
65
|
+
{
|
|
66
|
+
class: _normalizeClass(["aipanel-resize-handle", { resizing: $setup.isResizing, "handle-left": $props.position === "left" }]),
|
|
67
|
+
onMousedown: $setup.handleMouseDown,
|
|
68
|
+
onDblclick: $setup.handleDoubleClick
|
|
69
|
+
},
|
|
70
|
+
null,
|
|
71
|
+
34
|
|
72
|
+
/* CLASS, NEED_HYDRATION */
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
__vue_sfc__.render = __vue_render__;
|
|
76
|
+
var ResizeHandle_vue_default = __vue_sfc__;
|
|
77
|
+
export {
|
|
78
|
+
ResizeHandle_vue_default as default
|
|
79
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.aipanel-select-mode-hint{position:fixed;top:16px;left:50%;transform:translate(-50%) translateY(-16px);width:280px;padding:8px 14px;background:linear-gradient(135deg,#ef4444,#dc2626);color:#fff;border-radius:18px;font-size:13px;font-weight:500;line-height:1.4;box-shadow:0 6px 20px #ef444480,0 0 0 3px #ef44444d;z-index:9999999;display:none;flex-direction:column;align-items:center;justify-content:center;gap:6px;border:1px solid rgba(255,255,255,.25);opacity:0;transition:opacity .2s ease,transform .25s cubic-bezier(.16,1,.3,1);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);box-sizing:border-box}.aipanel-select-mode-hint.visible{display:flex;opacity:1;transform:translate(-50%) translateY(0);animation:hintSlideIn .3s cubic-bezier(.16,1,.3,1),pulseHint 2s ease-in-out .3s infinite}.aipanel-hint-main{display:inline-flex;align-items:center;gap:8px;min-width:0}.aipanel-hint-icon{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:#fff3;color:#fff;flex-shrink:0}.aipanel-hint-icon svg{display:block}.aipanel-hint-text{font-size:13px;font-weight:500;letter-spacing:.2px;white-space:nowrap;text-shadow:0 1px 2px rgba(0,0,0,.15)}.aipanel-hint-shortcut{display:inline-flex;align-items:center;padding:4px 10px;background:#0000002e;border-radius:999px;font-size:12px;font-weight:600;letter-spacing:.3px;border:1px solid rgba(255,255,255,.2);white-space:nowrap;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,monospace}@keyframes hintSlideIn{0%{opacity:0;transform:translate(-50%) translateY(-16px)}to{opacity:1;transform:translate(-50%) translateY(0)}}@keyframes pulseHint{0%,to{box-shadow:0 6px 20px #ef444480,0 0 0 3px #ef44444d}50%{box-shadow:0 6px 20px #ef444499,0 0 0 6px #ef444466}}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
declare const _default: typeof __VLS_export;
|
|
3
|
+
export default _default;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import "./SelectHint-sfc.css";
|
|
2
|
+
import { defineComponent as _defineComponent } from "vue";
|
|
3
|
+
import { useAIPanelWidgetContext } from "../context.mjs";
|
|
4
|
+
const __vue_sfc__ = /* @__PURE__ */ _defineComponent({
|
|
5
|
+
__name: "SelectHint",
|
|
6
|
+
setup(__props, { expose: __expose }) {
|
|
7
|
+
__expose();
|
|
8
|
+
const { selectMode: visible, selectShortcutLabel: shortcutLabel } = useAIPanelWidgetContext();
|
|
9
|
+
const __returned__ = { visible, shortcutLabel };
|
|
10
|
+
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
11
|
+
return __returned__;
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createStaticVNode as _createStaticVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from "vue";
|
|
15
|
+
const _hoisted_1 = { class: "aipanel-hint-shortcut" };
|
|
16
|
+
function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
17
|
+
return _openBlock(), _createElementBlock(
|
|
18
|
+
"div",
|
|
19
|
+
{
|
|
20
|
+
class: _normalizeClass(["aipanel-select-mode-hint", { visible: $setup.visible }])
|
|
21
|
+
},
|
|
22
|
+
[
|
|
23
|
+
_cache[0] || (_cache[0] = _createStaticVNode('<span class="aipanel-hint-main"><span class="aipanel-hint-icon" aria-hidden="true"><svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="8"></circle><circle cx="12" cy="12" r="2.5" fill="currentColor"></circle><line x1="12" y1="2" x2="12" y2="5"></line><line x1="12" y1="19" x2="12" y2="22"></line><line x1="2" y1="12" x2="5" y2="12"></line><line x1="19" y1="12" x2="22" y2="12"></line></svg></span><span class="aipanel-hint-text">\u9009\u62E9\u6A21\u5F0F\u5DF2\u5F00\u542F \xB7 \u70B9\u51FB\u5143\u7D20\u8FDB\u884C\u9009\u62E9</span></span>', 1)),
|
|
24
|
+
_createElementVNode(
|
|
25
|
+
"span",
|
|
26
|
+
_hoisted_1,
|
|
27
|
+
_toDisplayString($setup.shortcutLabel),
|
|
28
|
+
1
|
|
29
|
+
/* TEXT */
|
|
30
|
+
)
|
|
31
|
+
],
|
|
32
|
+
2
|
|
33
|
+
/* CLASS */
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
__vue_sfc__.render = __vue_render__;
|
|
37
|
+
var SelectHint_vue_default = __vue_sfc__;
|
|
38
|
+
export {
|
|
39
|
+
SelectHint_vue_default as default
|
|
40
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.aipanel-selected-bubbles{position:absolute;display:none;flex-direction:column;gap:6px;max-width:220px;max-height:300px;overflow-y:auto}.aipanel-selected-bubbles.visible{display:flex}.aipanel-selected-bubble{display:flex;flex-direction:column;gap:2px;padding:8px 24px 8px 10px;background:var(--ap-bg-main);border:1px solid var(--ap-border-primary);border-radius:8px;font-size:12px;box-shadow:var(--ap-shadow-sm);position:relative;cursor:pointer;transition:all .2s}.aipanel-selected-bubble:hover{border-color:var(--ap-primary);box-shadow:var(--ap-shadow-primary)}.aipanel-bubble-text{color:var(--ap-text-primary);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.aipanel-bubble-file{color:var(--ap-text-placeholder);font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.aipanel-bubble-remove{position:absolute;top:8px;right:6px;width:16px;height:16px;border-radius:50%;border:none;background:transparent;color:var(--ap-text-placeholder);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:12px;transition:all .2s}.aipanel-bubble-remove:hover{background:var(--ap-danger);color:#fff}.aipanel-bubble-empty{padding:8px 12px;background:var(--ap-bg-main);border:1px dashed var(--ap-border-secondary);border-radius:8px;color:var(--ap-text-placeholder);font-size:12px;text-align:center}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
declare const _default: typeof __VLS_export;
|
|
3
|
+
export default _default;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import "./SelectedBubbles-sfc.css";
|
|
2
|
+
import { defineComponent as _defineComponent } from "vue";
|
|
3
|
+
import { useAIPanelWidgetContext } from "../context.mjs";
|
|
4
|
+
const __vue_sfc__ = /* @__PURE__ */ _defineComponent({
|
|
5
|
+
__name: "SelectedBubbles",
|
|
6
|
+
setup(__props, { expose: __expose }) {
|
|
7
|
+
__expose();
|
|
8
|
+
const {
|
|
9
|
+
bubbleVisible: visible,
|
|
10
|
+
selectedElementItems: items,
|
|
11
|
+
handleClickSelectedNode,
|
|
12
|
+
handleRemoveSelectedNode
|
|
13
|
+
} = useAIPanelWidgetContext();
|
|
14
|
+
const __returned__ = { visible, items, handleClickSelectedNode, handleRemoveSelectedNode };
|
|
15
|
+
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
16
|
+
return __returned__;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
import { openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, withModifiers as _withModifiers, normalizeClass as _normalizeClass } from "vue";
|
|
20
|
+
const _hoisted_1 = {
|
|
21
|
+
key: 0,
|
|
22
|
+
class: "aipanel-bubble-empty"
|
|
23
|
+
};
|
|
24
|
+
const _hoisted_2 = ["onClick"];
|
|
25
|
+
const _hoisted_3 = { class: "aipanel-bubble-text" };
|
|
26
|
+
const _hoisted_4 = {
|
|
27
|
+
key: 0,
|
|
28
|
+
class: "aipanel-bubble-file"
|
|
29
|
+
};
|
|
30
|
+
const _hoisted_5 = ["aria-label", "onClick"];
|
|
31
|
+
function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
32
|
+
return _openBlock(), _createElementBlock(
|
|
33
|
+
"div",
|
|
34
|
+
{
|
|
35
|
+
class: _normalizeClass(["aipanel-selected-bubbles", { visible: $setup.visible }]),
|
|
36
|
+
role: "list",
|
|
37
|
+
"aria-label": "\u5DF2\u9009\u5143\u7D20\u5217\u8868"
|
|
38
|
+
},
|
|
39
|
+
[
|
|
40
|
+
$setup.items.length === 0 ? (_openBlock(), _createElementBlock("div", _hoisted_1, "\u6682\u65E0\u9009\u4E2D\u5143\u7D20")) : (_openBlock(true), _createElementBlock(
|
|
41
|
+
_Fragment,
|
|
42
|
+
{ key: 1 },
|
|
43
|
+
_renderList($setup.items, (item, index) => {
|
|
44
|
+
return _openBlock(), _createElementBlock("div", {
|
|
45
|
+
key: item.key,
|
|
46
|
+
class: "aipanel-selected-bubble",
|
|
47
|
+
role: "listitem",
|
|
48
|
+
onClick: ($event) => $setup.handleClickSelectedNode(item)
|
|
49
|
+
}, [
|
|
50
|
+
_createElementVNode(
|
|
51
|
+
"span",
|
|
52
|
+
_hoisted_3,
|
|
53
|
+
_toDisplayString(item.description),
|
|
54
|
+
1
|
|
55
|
+
/* TEXT */
|
|
56
|
+
),
|
|
57
|
+
item.bubbleFileText ? (_openBlock(), _createElementBlock(
|
|
58
|
+
"span",
|
|
59
|
+
_hoisted_4,
|
|
60
|
+
_toDisplayString(item.bubbleFileText),
|
|
61
|
+
1
|
|
62
|
+
/* TEXT */
|
|
63
|
+
)) : _createCommentVNode("v-if", true),
|
|
64
|
+
_createElementVNode("button", {
|
|
65
|
+
class: "aipanel-bubble-remove",
|
|
66
|
+
type: "button",
|
|
67
|
+
"aria-label": `\u79FB\u9664\u5143\u7D20: ${item.description}`,
|
|
68
|
+
onClick: _withModifiers(($event) => $setup.handleRemoveSelectedNode({ item, index, source: "bubble" }), ["stop"])
|
|
69
|
+
}, " \xD7 ", 8, _hoisted_5)
|
|
70
|
+
], 8, _hoisted_2);
|
|
71
|
+
}),
|
|
72
|
+
128
|
|
73
|
+
/* KEYED_FRAGMENT */
|
|
74
|
+
))
|
|
75
|
+
],
|
|
76
|
+
2
|
|
77
|
+
/* CLASS */
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
__vue_sfc__.render = __vue_render__;
|
|
81
|
+
var SelectedBubbles_vue_default = __vue_sfc__;
|
|
82
|
+
export {
|
|
83
|
+
SelectedBubbles_vue_default as default
|
|
84
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.aipanel-right-toolbar{width:140px;background:var(--ap-bg-secondary);border-left:1px solid var(--ap-border-primary);display:flex;flex-direction:column;flex-shrink:0;transition:width .2s ease;overflow:hidden}.aipanel-right-toolbar.collapsed{width:0;overflow:hidden}.aipanel-right-toolbar.collapsed .aipanel-selected-nodes-header,.aipanel-right-toolbar.collapsed .aipanel-selected-nodes,.aipanel-right-toolbar.collapsed .aipanel-clear-all-btn{display:none}.aipanel-selected-nodes-header{padding:12px 8px 8px;border-bottom:1px solid var(--ap-border-primary)}.aipanel-selected-nodes-title{font-size:14px;font-weight:600;color:var(--ap-text-primary);margin-bottom:4px}.aipanel-selected-nodes-desc{font-size:11px;color:var(--ap-text-placeholder);line-height:1.4}.aipanel-selected-nodes{flex:1;display:flex;flex-direction:column;padding:8px;gap:6px;overflow-y:auto;overflow-x:hidden}.aipanel-selected-nodes:empty:before{content:"\6682\65e0\9009\4e2d\5143\7d20";color:var(--ap-text-placeholder);font-size:12px;text-align:center;padding:20px 10px}.aipanel-selected-node{display:flex;align-items:center;gap:8px;padding:8px 10px;background:var(--ap-bg-main);border:1px solid var(--ap-border-primary);border-radius:6px;font-size:12px;transition:all .2s}.aipanel-selected-node:hover{border-color:var(--ap-primary);box-shadow:var(--ap-shadow-primary)}.aipanel-node-content{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.aipanel-node-text{color:var(--ap-text-primary);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.aipanel-node-file{color:var(--ap-text-placeholder);font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.aipanel-node-remove{width:18px;height:18px;border-radius:4px;border:none;background:transparent;color:var(--ap-text-placeholder);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:14px;transition:all .2s;flex-shrink:0}.aipanel-node-remove:hover{background:var(--ap-danger);color:#fff}.aipanel-clear-all-btn{width:calc(100% - 16px);margin:8px;padding:8px 12px;border-radius:6px;border:none;background:var(--ap-danger);color:#fff;font-size:12px;font-weight:500;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:4px;transition:all .2s}.aipanel-clear-all-btn:hover{background:var(--ap-danger-hover);transform:scale(1.02)}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
declare const _default: typeof __VLS_export;
|
|
3
|
+
export default _default;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import "./SelectedNodes-sfc.css";
|
|
2
|
+
import { defineComponent as _defineComponent } from "vue";
|
|
3
|
+
import { useAIPanelWidgetContext } from "../context.mjs";
|
|
4
|
+
const __vue_sfc__ = /* @__PURE__ */ _defineComponent({
|
|
5
|
+
__name: "SelectedNodes",
|
|
6
|
+
setup(__props, { expose: __expose }) {
|
|
7
|
+
__expose();
|
|
8
|
+
const {
|
|
9
|
+
selectedElementItems: items,
|
|
10
|
+
showClearAll,
|
|
11
|
+
handleClickSelectedNode,
|
|
12
|
+
handleRemoveSelectedNode,
|
|
13
|
+
handleClearSelectedNodes
|
|
14
|
+
} = useAIPanelWidgetContext();
|
|
15
|
+
const __returned__ = { items, showClearAll, handleClickSelectedNode, handleRemoveSelectedNode, handleClearSelectedNodes };
|
|
16
|
+
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
17
|
+
return __returned__;
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
import { createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, withModifiers as _withModifiers, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass } from "vue";
|
|
21
|
+
const _hoisted_1 = {
|
|
22
|
+
class: "aipanel-selected-nodes",
|
|
23
|
+
role: "list",
|
|
24
|
+
"aria-label": "\u5DF2\u9009\u5143\u7D20\u5217\u8868"
|
|
25
|
+
};
|
|
26
|
+
const _hoisted_2 = ["onClick"];
|
|
27
|
+
const _hoisted_3 = { class: "aipanel-node-content" };
|
|
28
|
+
const _hoisted_4 = { class: "aipanel-node-text" };
|
|
29
|
+
const _hoisted_5 = { class: "aipanel-node-file" };
|
|
30
|
+
const _hoisted_6 = ["aria-label", "onClick"];
|
|
31
|
+
function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
32
|
+
return _openBlock(), _createElementBlock(
|
|
33
|
+
"div",
|
|
34
|
+
{
|
|
35
|
+
class: _normalizeClass(["aipanel-right-toolbar", { collapsed: $setup.items.length === 0 }])
|
|
36
|
+
},
|
|
37
|
+
[
|
|
38
|
+
_cache[1] || (_cache[1] = _createElementVNode(
|
|
39
|
+
"div",
|
|
40
|
+
{ class: "aipanel-selected-nodes-header" },
|
|
41
|
+
[
|
|
42
|
+
_createElementVNode("div", { class: "aipanel-selected-nodes-title" }, "\u5DF2\u9009\u8282\u70B9"),
|
|
43
|
+
_createElementVNode("div", { class: "aipanel-selected-nodes-desc" }, "\u9009\u4E2D\u7684\u8282\u70B9\u4F1A\u5728\u5BF9\u8BDD\u65F6\u4E00\u8D77\u53D1\u9001\u7ED9\u52A9\u624B")
|
|
44
|
+
],
|
|
45
|
+
-1
|
|
46
|
+
/* CACHED */
|
|
47
|
+
)),
|
|
48
|
+
_createElementVNode("div", _hoisted_1, [
|
|
49
|
+
(_openBlock(true), _createElementBlock(
|
|
50
|
+
_Fragment,
|
|
51
|
+
null,
|
|
52
|
+
_renderList($setup.items, (item, index) => {
|
|
53
|
+
return _openBlock(), _createElementBlock("div", {
|
|
54
|
+
key: item.key,
|
|
55
|
+
class: "aipanel-selected-node",
|
|
56
|
+
role: "listitem",
|
|
57
|
+
onClick: ($event) => $setup.handleClickSelectedNode(item)
|
|
58
|
+
}, [
|
|
59
|
+
_createElementVNode("div", _hoisted_3, [
|
|
60
|
+
_createElementVNode(
|
|
61
|
+
"span",
|
|
62
|
+
_hoisted_4,
|
|
63
|
+
_toDisplayString(item.description),
|
|
64
|
+
1
|
|
65
|
+
/* TEXT */
|
|
66
|
+
),
|
|
67
|
+
_createElementVNode(
|
|
68
|
+
"span",
|
|
69
|
+
_hoisted_5,
|
|
70
|
+
_toDisplayString(item.panelFileText),
|
|
71
|
+
1
|
|
72
|
+
/* TEXT */
|
|
73
|
+
)
|
|
74
|
+
]),
|
|
75
|
+
_createElementVNode("button", {
|
|
76
|
+
class: "aipanel-node-remove",
|
|
77
|
+
type: "button",
|
|
78
|
+
"aria-label": `\u79FB\u9664\u5143\u7D20: ${item.description}`,
|
|
79
|
+
onClick: _withModifiers(($event) => $setup.handleRemoveSelectedNode({ item, index, source: "panel" }), ["stop"])
|
|
80
|
+
}, " \xD7 ", 8, _hoisted_6)
|
|
81
|
+
], 8, _hoisted_2);
|
|
82
|
+
}),
|
|
83
|
+
128
|
|
84
|
+
/* KEYED_FRAGMENT */
|
|
85
|
+
))
|
|
86
|
+
]),
|
|
87
|
+
$setup.showClearAll && $setup.items.length > 0 ? (_openBlock(), _createElementBlock("button", {
|
|
88
|
+
key: 0,
|
|
89
|
+
class: "aipanel-clear-all-btn",
|
|
90
|
+
type: "button",
|
|
91
|
+
"aria-label": "\u6E05\u7A7A\u6240\u6709\u5DF2\u9009\u8282\u70B9",
|
|
92
|
+
onClick: _cache[0] || (_cache[0] = (...args) => $setup.handleClearSelectedNodes && $setup.handleClearSelectedNodes(...args))
|
|
93
|
+
}, " \u4E00\u952E\u6E05\u7A7A ")) : _createCommentVNode("v-if", true)
|
|
94
|
+
],
|
|
95
|
+
2
|
|
96
|
+
/* CLASS */
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
__vue_sfc__.render = __vue_render__;
|
|
100
|
+
var SelectedNodes_vue_default = __vue_sfc__;
|
|
101
|
+
export {
|
|
102
|
+
SelectedNodes_vue_default as default
|
|
103
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.aipanel-session-list{width:240px;background:var(--ap-bg-secondary);border-right:1px solid var(--ap-border-primary);display:flex;flex-direction:column;flex-shrink:0;transition:width .2s ease}.aipanel-session-list.collapsed{width:0;overflow:hidden}.aipanel-session-list.collapsed .aipanel-session-list-header,.aipanel-session-list.collapsed .aipanel-session-list-content{display:none}.aipanel-session-list-header{padding:16px;border-bottom:1px solid var(--ap-border-primary);display:flex;justify-content:space-between;align-items:center;font-weight:600;font-size:14px;color:var(--ap-text-primary)}.aipanel-new-session-btn{width:28px;height:28px;border-radius:6px;border:none;background:var(--ap-primary);color:#fff;font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s}.aipanel-new-session-btn:hover{background:var(--ap-primary-hover);transform:scale(1.05)}.aipanel-session-list-content{flex:1;overflow-y:auto;padding:8px;position:relative}.aipanel-session-list-loading-overlay{position:absolute;inset:0;background:var(--ap-overlay-bg);display:flex;align-items:center;justify-content:center;z-index:10;border-radius:8px}.aipanel-loading-spinner.small{width:24px;height:24px;border-width:2px}.aipanel-session-item{padding:12px;border-radius:8px;cursor:pointer;transition:transform .2s;margin-bottom:4px;color:var(--ap-text-primary)}.aipanel-session-item:hover{background:var(--ap-bg-tertiary)}.aipanel-session-item.active{background:var(--ap-primary);color:#fff;transition:none}.aipanel-session-title{font-size:14px;font-weight:500;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.aipanel-session-meta{font-size:12px;opacity:.6}.aipanel-session-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}.aipanel-session-delete-btn{width:20px;height:20px;border-radius:4px;border:none;background:transparent;color:var(--ap-text-placeholder);font-size:16px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s;opacity:0;flex-shrink:0}.aipanel-session-item:hover .aipanel-session-delete-btn{opacity:1}.aipanel-session-delete-btn:hover{background:var(--ap-danger);color:#fff}.aipanel-session-item.active .aipanel-session-delete-btn{color:#ffffffb3}.aipanel-session-item.active .aipanel-session-delete-btn:hover{background:#fff3;color:#fff}.aipanel-session-header-skeleton{padding:16px;border-bottom:1px solid var(--ap-border-primary);display:none;justify-content:space-between;align-items:center}.aipanel-session-header-skeleton.visible{display:flex}.aipanel-skeleton-header-title{height:18px;width:80px;background:var(--ap-skeleton-gradient);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:4px}.aipanel-skeleton-header-btn{width:28px;height:28px;background:var(--ap-skeleton-gradient);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:6px}.aipanel-session-skeleton{flex:1;overflow-y:auto;padding:8px;display:none}.aipanel-session-skeleton.visible{display:block}.aipanel-skeleton-item{padding:12px;border-radius:8px;margin-bottom:4px;background:var(--ap-skeleton-bg)}.aipanel-skeleton-title{height:16px;background:var(--ap-skeleton-gradient);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:4px;margin-bottom:8px;width:70%}.aipanel-skeleton-meta{height:12px;background:var(--ap-skeleton-gradient);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:4px;width:50%}.aipanel-session-empty{padding:32px 16px;text-align:center;color:var(--ap-text-placeholder);font-size:13px}.aipanel-thinking-loading{display:inline-block;width:12px;height:12px;margin-right:6px;border:2px solid var(--ap-border-secondary);border-top-color:var(--ap-text-secondary);border-radius:50%;animation:thinking-spin .8s linear infinite;vertical-align:middle}.aipanel-session-item.active .aipanel-thinking-loading{border-color:#ffffff4d;border-top-color:#ffffffe6}@keyframes thinking-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes skeleton-loading{0%{background-position:200% 0}to{background-position:-200% 0}}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
declare var __VLS_1: {};
|
|
2
|
+
type __VLS_Slots = {} & {
|
|
3
|
+
empty?: (props: typeof __VLS_1) => any;
|
|
4
|
+
};
|
|
5
|
+
declare const __VLS_base: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
6
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
7
|
+
declare const _default: typeof __VLS_export;
|
|
8
|
+
export default _default;
|
|
9
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
10
|
+
new (): {
|
|
11
|
+
$slots: S;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import "./SessionList-sfc.css";
|
|
2
|
+
import { defineComponent as _defineComponent } from "vue";
|
|
3
|
+
import { ref, watch, computed } from "vue";
|
|
4
|
+
import { useAIPanelWidgetContext } from "../context.mjs";
|
|
5
|
+
const __vue_sfc__ = /* @__PURE__ */ _defineComponent({
|
|
6
|
+
__name: "SessionList",
|
|
7
|
+
setup(__props, { expose: __expose }) {
|
|
8
|
+
__expose();
|
|
9
|
+
const {
|
|
10
|
+
sessionListCollapsed: collapsed,
|
|
11
|
+
sessionItems: sessions,
|
|
12
|
+
loadingSessionList,
|
|
13
|
+
showSessionListSkeleton,
|
|
14
|
+
handleCreateSession,
|
|
15
|
+
handleSelectSession,
|
|
16
|
+
handleDeleteSession,
|
|
17
|
+
sessionKey,
|
|
18
|
+
sessionStates
|
|
19
|
+
} = useAIPanelWidgetContext();
|
|
20
|
+
const isAnimating = ref(false);
|
|
21
|
+
let animTimer = null;
|
|
22
|
+
watch(collapsed, () => {
|
|
23
|
+
isAnimating.value = true;
|
|
24
|
+
if (animTimer) clearTimeout(animTimer);
|
|
25
|
+
animTimer = setTimeout(() => {
|
|
26
|
+
isAnimating.value = false;
|
|
27
|
+
}, 200);
|
|
28
|
+
});
|
|
29
|
+
const showSkeleton = computed(() => {
|
|
30
|
+
if (isAnimating.value) return true;
|
|
31
|
+
if (showSessionListSkeleton.value) return true;
|
|
32
|
+
return false;
|
|
33
|
+
});
|
|
34
|
+
function isSessionThinking(sessionId) {
|
|
35
|
+
if (!sessionStates?.value || !sessionId) return false;
|
|
36
|
+
return sessionStates.value[sessionId]?.thinking ?? false;
|
|
37
|
+
}
|
|
38
|
+
const __returned__ = { collapsed, sessions, loadingSessionList, showSessionListSkeleton, handleCreateSession, handleSelectSession, handleDeleteSession, sessionKey, sessionStates, isAnimating, get animTimer() {
|
|
39
|
+
return animTimer;
|
|
40
|
+
}, set animTimer(v) {
|
|
41
|
+
animTimer = v;
|
|
42
|
+
}, showSkeleton, isSessionThinking };
|
|
43
|
+
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
44
|
+
return __returned__;
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
import { createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, Fragment as _Fragment, renderList as _renderList, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withModifiers as _withModifiers, normalizeClass as _normalizeClass, renderSlot as _renderSlot } from "vue";
|
|
48
|
+
const _hoisted_1 = {
|
|
49
|
+
key: 0,
|
|
50
|
+
class: "aipanel-session-list-header"
|
|
51
|
+
};
|
|
52
|
+
const _hoisted_2 = {
|
|
53
|
+
key: 2,
|
|
54
|
+
class: "aipanel-session-skeleton visible"
|
|
55
|
+
};
|
|
56
|
+
const _hoisted_3 = {
|
|
57
|
+
class: "aipanel-session-list-content",
|
|
58
|
+
role: "listbox",
|
|
59
|
+
"aria-labelledby": "aipanel-session-list-title"
|
|
60
|
+
};
|
|
61
|
+
const _hoisted_4 = {
|
|
62
|
+
key: 0,
|
|
63
|
+
class: "aipanel-session-list-loading-overlay"
|
|
64
|
+
};
|
|
65
|
+
const _hoisted_5 = ["aria-selected", "onClick"];
|
|
66
|
+
const _hoisted_6 = { class: "aipanel-session-header" };
|
|
67
|
+
const _hoisted_7 = { class: "aipanel-session-title" };
|
|
68
|
+
const _hoisted_8 = {
|
|
69
|
+
key: 0,
|
|
70
|
+
class: "aipanel-thinking-loading"
|
|
71
|
+
};
|
|
72
|
+
const _hoisted_9 = ["aria-label", "onClick"];
|
|
73
|
+
const _hoisted_10 = { class: "aipanel-session-meta" };
|
|
74
|
+
function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
|
|
75
|
+
return _openBlock(), _createElementBlock(
|
|
76
|
+
"div",
|
|
77
|
+
{
|
|
78
|
+
class: _normalizeClass(["aipanel-session-list", { collapsed: $setup.collapsed }])
|
|
79
|
+
},
|
|
80
|
+
[
|
|
81
|
+
_createCommentVNode(" Header "),
|
|
82
|
+
!$setup.showSkeleton ? (_openBlock(), _createElementBlock("div", _hoisted_1, [
|
|
83
|
+
_cache[1] || (_cache[1] = _createElementVNode(
|
|
84
|
+
"span",
|
|
85
|
+
{ id: "aipanel-session-list-title" },
|
|
86
|
+
"\u4F1A\u8BDD\u5217\u8868",
|
|
87
|
+
-1
|
|
88
|
+
/* CACHED */
|
|
89
|
+
)),
|
|
90
|
+
_createElementVNode("button", {
|
|
91
|
+
class: "aipanel-new-session-btn",
|
|
92
|
+
type: "button",
|
|
93
|
+
title: "\u65B0\u5EFA\u4F1A\u8BDD",
|
|
94
|
+
"aria-label": "\u65B0\u5EFA\u4F1A\u8BDD",
|
|
95
|
+
onClick: _cache[0] || (_cache[0] = (...args) => $setup.handleCreateSession && $setup.handleCreateSession(...args))
|
|
96
|
+
}, " + ")
|
|
97
|
+
])) : (_openBlock(), _createElementBlock(
|
|
98
|
+
_Fragment,
|
|
99
|
+
{ key: 1 },
|
|
100
|
+
[
|
|
101
|
+
_createCommentVNode(" Header Skeleton "),
|
|
102
|
+
_cache[2] || (_cache[2] = _createElementVNode(
|
|
103
|
+
"div",
|
|
104
|
+
{ class: "aipanel-session-header-skeleton visible" },
|
|
105
|
+
[
|
|
106
|
+
_createElementVNode("div", { class: "aipanel-skeleton-header-title" }),
|
|
107
|
+
_createElementVNode("div", { class: "aipanel-skeleton-header-btn" })
|
|
108
|
+
],
|
|
109
|
+
-1
|
|
110
|
+
/* CACHED */
|
|
111
|
+
))
|
|
112
|
+
],
|
|
113
|
+
2112
|
|
114
|
+
/* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
|
|
115
|
+
)),
|
|
116
|
+
_createCommentVNode(" Content Skeleton "),
|
|
117
|
+
$setup.showSkeleton ? (_openBlock(), _createElementBlock("div", _hoisted_2, [
|
|
118
|
+
(_openBlock(), _createElementBlock(
|
|
119
|
+
_Fragment,
|
|
120
|
+
null,
|
|
121
|
+
_renderList(5, (i) => {
|
|
122
|
+
return _createElementVNode("div", {
|
|
123
|
+
key: `skeleton-${i}`,
|
|
124
|
+
class: "aipanel-skeleton-item"
|
|
125
|
+
}, [..._cache[3] || (_cache[3] = [
|
|
126
|
+
_createElementVNode(
|
|
127
|
+
"div",
|
|
128
|
+
{ class: "aipanel-skeleton-title" },
|
|
129
|
+
null,
|
|
130
|
+
-1
|
|
131
|
+
/* CACHED */
|
|
132
|
+
),
|
|
133
|
+
_createElementVNode(
|
|
134
|
+
"div",
|
|
135
|
+
{ class: "aipanel-skeleton-meta" },
|
|
136
|
+
null,
|
|
137
|
+
-1
|
|
138
|
+
/* CACHED */
|
|
139
|
+
)
|
|
140
|
+
])]);
|
|
141
|
+
}),
|
|
142
|
+
64
|
|
143
|
+
/* STABLE_FRAGMENT */
|
|
144
|
+
))
|
|
145
|
+
])) : (_openBlock(), _createElementBlock(
|
|
146
|
+
_Fragment,
|
|
147
|
+
{ key: 3 },
|
|
148
|
+
[
|
|
149
|
+
_createCommentVNode(" Content "),
|
|
150
|
+
_createElementVNode("div", _hoisted_3, [
|
|
151
|
+
$setup.loadingSessionList ? (_openBlock(), _createElementBlock("div", _hoisted_4, [..._cache[4] || (_cache[4] = [
|
|
152
|
+
_createElementVNode(
|
|
153
|
+
"div",
|
|
154
|
+
{ class: "aipanel-loading-spinner small" },
|
|
155
|
+
null,
|
|
156
|
+
-1
|
|
157
|
+
/* CACHED */
|
|
158
|
+
)
|
|
159
|
+
])])) : _createCommentVNode("v-if", true),
|
|
160
|
+
$setup.sessions.length > 0 ? (_openBlock(true), _createElementBlock(
|
|
161
|
+
_Fragment,
|
|
162
|
+
{ key: 1 },
|
|
163
|
+
_renderList($setup.sessions, (item) => {
|
|
164
|
+
return _openBlock(), _createElementBlock("div", {
|
|
165
|
+
key: item[$setup.sessionKey],
|
|
166
|
+
class: _normalizeClass(["aipanel-session-item", { active: item.active, thinking: $setup.isSessionThinking(item.id) }]),
|
|
167
|
+
role: "option",
|
|
168
|
+
"aria-selected": item.active,
|
|
169
|
+
onClick: ($event) => $setup.handleSelectSession(item)
|
|
170
|
+
}, [
|
|
171
|
+
_createElementVNode("div", _hoisted_6, [
|
|
172
|
+
_createElementVNode("div", _hoisted_7, [
|
|
173
|
+
$setup.isSessionThinking(item.id) ? (_openBlock(), _createElementBlock("span", _hoisted_8)) : _createCommentVNode("v-if", true),
|
|
174
|
+
_createTextVNode(
|
|
175
|
+
" " + _toDisplayString(item.title),
|
|
176
|
+
1
|
|
177
|
+
/* TEXT */
|
|
178
|
+
)
|
|
179
|
+
]),
|
|
180
|
+
_createElementVNode("button", {
|
|
181
|
+
class: "aipanel-session-delete-btn",
|
|
182
|
+
type: "button",
|
|
183
|
+
"aria-label": `\u5220\u9664\u4F1A\u8BDD: ${item.title}`,
|
|
184
|
+
onClick: _withModifiers(($event) => $setup.handleDeleteSession(item), ["stop"])
|
|
185
|
+
}, " \xD7 ", 8, _hoisted_9)
|
|
186
|
+
]),
|
|
187
|
+
_createElementVNode(
|
|
188
|
+
"div",
|
|
189
|
+
_hoisted_10,
|
|
190
|
+
_toDisplayString(item.meta),
|
|
191
|
+
1
|
|
192
|
+
/* TEXT */
|
|
193
|
+
)
|
|
194
|
+
], 10, _hoisted_5);
|
|
195
|
+
}),
|
|
196
|
+
128
|
|
197
|
+
/* KEYED_FRAGMENT */
|
|
198
|
+
)) : (_openBlock(), _createElementBlock(
|
|
199
|
+
_Fragment,
|
|
200
|
+
{ key: 2 },
|
|
201
|
+
[
|
|
202
|
+
_createCommentVNode(" Empty State "),
|
|
203
|
+
_renderSlot(_ctx.$slots, "empty")
|
|
204
|
+
],
|
|
205
|
+
64
|
|
206
|
+
/* STABLE_FRAGMENT */
|
|
207
|
+
))
|
|
208
|
+
])
|
|
209
|
+
],
|
|
210
|
+
2112
|
|
211
|
+
/* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
|
|
212
|
+
))
|
|
213
|
+
],
|
|
214
|
+
2
|
|
215
|
+
/* CLASS */
|
|
216
|
+
);
|
|
217
|
+
}
|
|
218
|
+
__vue_sfc__.render = __vue_render__;
|
|
219
|
+
var SessionList_vue_default = __vue_sfc__;
|
|
220
|
+
export {
|
|
221
|
+
SessionList_vue_default as default
|
|
222
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.aipanel-split-trigger{position:fixed;right:0;top:50%;transform:translateY(-50%);width:20px;height:48px;background:linear-gradient(135deg,#3b82f6,#2563eb);border:none;border-radius:8px 0 0 8px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:#fff;box-shadow:-2px 0 8px #3b82f640;transition:right .3s ease,width .25s cubic-bezier(.4,0,.2,1),background .25s ease,box-shadow .25s ease;z-index:99998}.aipanel-split-trigger:hover{width:24px;background:linear-gradient(135deg,#2563eb,#1d4ed8);box-shadow:-3px 0 12px #3b82f659}.aipanel-split-trigger.open{width:20px;background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;border-radius:8px 0 0 8px;box-shadow:-2px 0 8px #3b82f640}.aipanel-split-trigger.open:hover{width:24px;background:linear-gradient(135deg,#2563eb,#1d4ed8);box-shadow:-3px 0 12px #3b82f659}.aipanel-split-trigger-icon{display:flex;align-items:center;justify-content:center;transition:transform .25s ease}.aipanel-split-trigger:hover .aipanel-split-trigger-icon{transform:scale(1.1)}.aipanel-split-thinking-indicator{position:absolute;top:6px;right:6px;width:5px;height:5px;background:var(--ap-success);border-radius:50%;animation:aipanel-thinking-pulse 1.5s ease-in-out infinite;box-shadow:0 0 4px #10b98180}@keyframes aipanel-thinking-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.6;transform:scale(1.3)}}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
open?: boolean;
|
|
3
|
+
thinking?: boolean;
|
|
4
|
+
resolvedTheme?: "light" | "dark";
|
|
5
|
+
panelWidth?: number;
|
|
6
|
+
};
|
|
7
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
8
|
+
toggle: () => any;
|
|
9
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
10
|
+
onToggle?: (() => any) | undefined;
|
|
11
|
+
}>, {
|
|
12
|
+
resolvedTheme: "light" | "dark";
|
|
13
|
+
thinking: boolean;
|
|
14
|
+
open: boolean;
|
|
15
|
+
panelWidth: number;
|
|
16
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
17
|
+
declare const _default: typeof __VLS_export;
|
|
18
|
+
export default _default;
|