@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.
Files changed (153) hide show
  1. package/es/AI-panel-widget/composables/use-inspector.d.ts +52 -0
  2. package/es/AI-panel-widget/composables/use-inspector.mjs +437 -0
  3. package/es/AI-panel-widget/composables/use-persist-state.d.ts +32 -0
  4. package/es/AI-panel-widget/composables/use-persist-state.mjs +83 -0
  5. package/es/AI-panel-widget/composables/use-selection.d.ts +19 -0
  6. package/es/AI-panel-widget/composables/use-selection.mjs +112 -0
  7. package/es/AI-panel-widget/composables/use-session.d.ts +16 -0
  8. package/es/AI-panel-widget/composables/use-session.mjs +47 -0
  9. package/es/AI-panel-widget/composables/use-split.d.ts +30 -0
  10. package/es/AI-panel-widget/composables/use-split.mjs +133 -0
  11. package/es/AI-panel-widget/composables/use-widget.d.ts +27 -0
  12. package/es/AI-panel-widget/composables/use-widget.mjs +78 -0
  13. package/es/AI-panel-widget/index.d.ts +5 -0
  14. package/es/AI-panel-widget/index.mjs +9 -0
  15. package/es/AI-panel-widget/src/assets/logo.svg +13 -0
  16. package/es/AI-panel-widget/src/components/AIPanelLogo-sfc.css +1 -0
  17. package/es/AI-panel-widget/src/components/AIPanelLogo.vue.d.ts +8 -0
  18. package/es/AI-panel-widget/src/components/AIPanelLogo.vue.mjs +40 -0
  19. package/es/AI-panel-widget/src/components/ChatPanel-sfc.css +1 -0
  20. package/es/AI-panel-widget/src/components/ChatPanel.vue.d.ts +179 -0
  21. package/es/AI-panel-widget/src/components/ChatPanel.vue.mjs +308 -0
  22. package/es/AI-panel-widget/src/components/FloatingBubble/FloatingBubble-sfc.css +1 -0
  23. package/es/AI-panel-widget/src/components/FloatingBubble/FloatingBubble.vue.d.ts +44 -0
  24. package/es/AI-panel-widget/src/components/FloatingBubble/FloatingBubble.vue.mjs +311 -0
  25. package/es/AI-panel-widget/src/components/FloatingBubble/index.d.ts +3 -0
  26. package/es/AI-panel-widget/src/components/FloatingBubble/index.mjs +5 -0
  27. package/es/AI-panel-widget/src/components/FloatingBubble/types.d.ts +24 -0
  28. package/es/AI-panel-widget/src/components/FloatingBubble/types.mjs +0 -0
  29. package/es/AI-panel-widget/src/components/Frame-sfc.css +1 -0
  30. package/es/AI-panel-widget/src/components/Frame.vue.d.ts +22 -0
  31. package/es/AI-panel-widget/src/components/Frame.vue.mjs +143 -0
  32. package/es/AI-panel-widget/src/components/Header-sfc.css +1 -0
  33. package/es/AI-panel-widget/src/components/Header.vue.d.ts +27 -0
  34. package/es/AI-panel-widget/src/components/Header.vue.mjs +683 -0
  35. package/es/AI-panel-widget/src/components/ResizeHandle-sfc.css +1 -0
  36. package/es/AI-panel-widget/src/components/ResizeHandle.vue.d.ts +22 -0
  37. package/es/AI-panel-widget/src/components/ResizeHandle.vue.mjs +79 -0
  38. package/es/AI-panel-widget/src/components/SelectHint-sfc.css +1 -0
  39. package/es/AI-panel-widget/src/components/SelectHint.vue.d.ts +3 -0
  40. package/es/AI-panel-widget/src/components/SelectHint.vue.mjs +40 -0
  41. package/es/AI-panel-widget/src/components/SelectedBubbles-sfc.css +1 -0
  42. package/es/AI-panel-widget/src/components/SelectedBubbles.vue.d.ts +3 -0
  43. package/es/AI-panel-widget/src/components/SelectedBubbles.vue.mjs +84 -0
  44. package/es/AI-panel-widget/src/components/SelectedNodes-sfc.css +1 -0
  45. package/es/AI-panel-widget/src/components/SelectedNodes.vue.d.ts +3 -0
  46. package/es/AI-panel-widget/src/components/SelectedNodes.vue.mjs +103 -0
  47. package/es/AI-panel-widget/src/components/SessionList-sfc.css +1 -0
  48. package/es/AI-panel-widget/src/components/SessionList.vue.d.ts +13 -0
  49. package/es/AI-panel-widget/src/components/SessionList.vue.mjs +222 -0
  50. package/es/AI-panel-widget/src/components/SplitTrigger-sfc.css +1 -0
  51. package/es/AI-panel-widget/src/components/SplitTrigger.vue.d.ts +18 -0
  52. package/es/AI-panel-widget/src/components/SplitTrigger.vue.mjs +112 -0
  53. package/es/AI-panel-widget/src/components/Trigger-sfc.css +1 -0
  54. package/es/AI-panel-widget/src/components/Trigger.vue.d.ts +28 -0
  55. package/es/AI-panel-widget/src/components/Trigger.vue.mjs +74 -0
  56. package/es/AI-panel-widget/src/context.d.ts +67 -0
  57. package/es/AI-panel-widget/src/context.mjs +16 -0
  58. package/es/AI-panel-widget/src/index-sfc.css +1 -0
  59. package/es/AI-panel-widget/src/index.vue.d.ts +69 -0
  60. package/es/AI-panel-widget/src/index.vue.mjs +782 -0
  61. package/es/AI-panel-widget/src/types.d.ts +2 -0
  62. package/es/AI-panel-widget/src/types.mjs +0 -0
  63. package/es/AI-panel-widget/style/index-pure.d.ts +0 -0
  64. package/es/AI-panel-widget/style/index-pure.mjs +0 -0
  65. package/es/AI-panel-widget/style/index.d.ts +0 -0
  66. package/es/AI-panel-widget/style/index.mjs +0 -0
  67. package/es/AI-panel-widget/style/less-pure.d.ts +0 -0
  68. package/es/AI-panel-widget/style/less-pure.mjs +0 -0
  69. package/es/AI-panel-widget/style/less.d.ts +0 -0
  70. package/es/AI-panel-widget/style/less.mjs +0 -0
  71. package/es/env.d.ts +15 -0
  72. package/es/index.d.ts +7 -0
  73. package/es/index.mjs +22 -0
  74. package/es/setup.d.ts +1 -0
  75. package/es/setup.mjs +4 -0
  76. package/lib/AI-panel-widget/composables/use-inspector.cjs +466 -0
  77. package/lib/AI-panel-widget/composables/use-inspector.d.ts +52 -0
  78. package/lib/AI-panel-widget/composables/use-persist-state.cjs +102 -0
  79. package/lib/AI-panel-widget/composables/use-persist-state.d.ts +32 -0
  80. package/lib/AI-panel-widget/composables/use-selection.cjs +131 -0
  81. package/lib/AI-panel-widget/composables/use-selection.d.ts +19 -0
  82. package/lib/AI-panel-widget/composables/use-session.cjs +66 -0
  83. package/lib/AI-panel-widget/composables/use-session.d.ts +16 -0
  84. package/lib/AI-panel-widget/composables/use-split.cjs +152 -0
  85. package/lib/AI-panel-widget/composables/use-split.d.ts +30 -0
  86. package/lib/AI-panel-widget/composables/use-widget.cjs +97 -0
  87. package/lib/AI-panel-widget/composables/use-widget.d.ts +27 -0
  88. package/lib/AI-panel-widget/index.cjs +39 -0
  89. package/lib/AI-panel-widget/index.d.ts +5 -0
  90. package/lib/AI-panel-widget/src/assets/logo.svg +13 -0
  91. package/lib/AI-panel-widget/src/components/AIPanelLogo-sfc.css +1 -0
  92. package/lib/AI-panel-widget/src/components/AIPanelLogo.vue.cjs +69 -0
  93. package/lib/AI-panel-widget/src/components/AIPanelLogo.vue.d.ts +8 -0
  94. package/lib/AI-panel-widget/src/components/ChatPanel-sfc.css +1 -0
  95. package/lib/AI-panel-widget/src/components/ChatPanel.vue.cjs +337 -0
  96. package/lib/AI-panel-widget/src/components/ChatPanel.vue.d.ts +179 -0
  97. package/lib/AI-panel-widget/src/components/FloatingBubble/FloatingBubble-sfc.css +1 -0
  98. package/lib/AI-panel-widget/src/components/FloatingBubble/FloatingBubble.vue.cjs +330 -0
  99. package/lib/AI-panel-widget/src/components/FloatingBubble/FloatingBubble.vue.d.ts +44 -0
  100. package/lib/AI-panel-widget/src/components/FloatingBubble/index.cjs +35 -0
  101. package/lib/AI-panel-widget/src/components/FloatingBubble/index.d.ts +3 -0
  102. package/lib/AI-panel-widget/src/components/FloatingBubble/types.cjs +15 -0
  103. package/lib/AI-panel-widget/src/components/FloatingBubble/types.d.ts +24 -0
  104. package/lib/AI-panel-widget/src/components/Frame-sfc.css +1 -0
  105. package/lib/AI-panel-widget/src/components/Frame.vue.cjs +162 -0
  106. package/lib/AI-panel-widget/src/components/Frame.vue.d.ts +22 -0
  107. package/lib/AI-panel-widget/src/components/Header-sfc.css +1 -0
  108. package/lib/AI-panel-widget/src/components/Header.vue.cjs +702 -0
  109. package/lib/AI-panel-widget/src/components/Header.vue.d.ts +27 -0
  110. package/lib/AI-panel-widget/src/components/ResizeHandle-sfc.css +1 -0
  111. package/lib/AI-panel-widget/src/components/ResizeHandle.vue.cjs +98 -0
  112. package/lib/AI-panel-widget/src/components/ResizeHandle.vue.d.ts +22 -0
  113. package/lib/AI-panel-widget/src/components/SelectHint-sfc.css +1 -0
  114. package/lib/AI-panel-widget/src/components/SelectHint.vue.cjs +59 -0
  115. package/lib/AI-panel-widget/src/components/SelectHint.vue.d.ts +3 -0
  116. package/lib/AI-panel-widget/src/components/SelectedBubbles-sfc.css +1 -0
  117. package/lib/AI-panel-widget/src/components/SelectedBubbles.vue.cjs +103 -0
  118. package/lib/AI-panel-widget/src/components/SelectedBubbles.vue.d.ts +3 -0
  119. package/lib/AI-panel-widget/src/components/SelectedNodes-sfc.css +1 -0
  120. package/lib/AI-panel-widget/src/components/SelectedNodes.vue.cjs +122 -0
  121. package/lib/AI-panel-widget/src/components/SelectedNodes.vue.d.ts +3 -0
  122. package/lib/AI-panel-widget/src/components/SessionList-sfc.css +1 -0
  123. package/lib/AI-panel-widget/src/components/SessionList.vue.cjs +241 -0
  124. package/lib/AI-panel-widget/src/components/SessionList.vue.d.ts +13 -0
  125. package/lib/AI-panel-widget/src/components/SplitTrigger-sfc.css +1 -0
  126. package/lib/AI-panel-widget/src/components/SplitTrigger.vue.cjs +131 -0
  127. package/lib/AI-panel-widget/src/components/SplitTrigger.vue.d.ts +18 -0
  128. package/lib/AI-panel-widget/src/components/Trigger-sfc.css +1 -0
  129. package/lib/AI-panel-widget/src/components/Trigger.vue.cjs +103 -0
  130. package/lib/AI-panel-widget/src/components/Trigger.vue.d.ts +28 -0
  131. package/lib/AI-panel-widget/src/context.cjs +35 -0
  132. package/lib/AI-panel-widget/src/context.d.ts +67 -0
  133. package/lib/AI-panel-widget/src/index-sfc.css +1 -0
  134. package/lib/AI-panel-widget/src/index.vue.cjs +811 -0
  135. package/lib/AI-panel-widget/src/index.vue.d.ts +69 -0
  136. package/lib/AI-panel-widget/src/types.cjs +15 -0
  137. package/lib/AI-panel-widget/src/types.d.ts +2 -0
  138. package/lib/AI-panel-widget/style/index-pure.cjs +0 -0
  139. package/lib/AI-panel-widget/style/index-pure.d.ts +0 -0
  140. package/lib/AI-panel-widget/style/index.cjs +0 -0
  141. package/lib/AI-panel-widget/style/index.d.ts +0 -0
  142. package/lib/AI-panel-widget/style/less-pure.cjs +0 -0
  143. package/lib/AI-panel-widget/style/less-pure.d.ts +0 -0
  144. package/lib/AI-panel-widget/style/less.cjs +0 -0
  145. package/lib/AI-panel-widget/style/less.d.ts +0 -0
  146. package/lib/env.d.ts +15 -0
  147. package/lib/index.cjs +42 -0
  148. package/lib/index.css +0 -0
  149. package/lib/index.d.ts +7 -0
  150. package/lib/index.less +0 -0
  151. package/lib/setup.cjs +23 -0
  152. package/lib/setup.d.ts +1 -0
  153. package/package.json +42 -0
@@ -0,0 +1,112 @@
1
+ import "./SplitTrigger-sfc.css";
2
+ import { defineComponent as _defineComponent } from "vue";
3
+ import { computed } from "vue";
4
+ const __vue_sfc__ = /* @__PURE__ */ _defineComponent({
5
+ ...{
6
+ name: "SplitTrigger"
7
+ },
8
+ __name: "SplitTrigger",
9
+ props: {
10
+ open: { type: Boolean, required: false, default: false },
11
+ thinking: { type: Boolean, required: false, default: false },
12
+ resolvedTheme: { type: String, required: false, default: "light" },
13
+ panelWidth: { type: Number, required: false, default: 500 }
14
+ },
15
+ emits: ["toggle"],
16
+ setup(__props, { expose: __expose, emit: __emit }) {
17
+ __expose();
18
+ const props = __props;
19
+ const emit = __emit;
20
+ const buttonClasses = computed(() => [
21
+ "aipanel-split-trigger",
22
+ {
23
+ open: props.open,
24
+ thinking: props.thinking,
25
+ "aipanel-theme-dark": props.resolvedTheme === "dark"
26
+ }
27
+ ]);
28
+ const buttonStyle = computed(() => {
29
+ if (props.open) {
30
+ return {
31
+ right: `${props.panelWidth}px`
32
+ };
33
+ }
34
+ return {};
35
+ });
36
+ const handleClick = () => {
37
+ emit("toggle");
38
+ };
39
+ const __returned__ = { props, emit, buttonClasses, buttonStyle, handleClick };
40
+ Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
41
+ return __returned__;
42
+ }
43
+ });
44
+ import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle } from "vue";
45
+ const _hoisted_1 = ["aria-expanded"];
46
+ const _hoisted_2 = { class: "aipanel-split-trigger-icon" };
47
+ const _hoisted_3 = {
48
+ key: 0,
49
+ viewBox: "0 0 24 24",
50
+ width: "16",
51
+ height: "16",
52
+ fill: "none",
53
+ stroke: "currentColor",
54
+ "stroke-width": "2"
55
+ };
56
+ const _hoisted_4 = {
57
+ key: 1,
58
+ viewBox: "0 0 24 24",
59
+ width: "16",
60
+ height: "16",
61
+ fill: "none",
62
+ stroke: "currentColor",
63
+ "stroke-width": "2"
64
+ };
65
+ const _hoisted_5 = {
66
+ key: 0,
67
+ class: "aipanel-split-thinking-indicator"
68
+ };
69
+ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
70
+ return _openBlock(), _createElementBlock("button", {
71
+ class: _normalizeClass($setup.buttonClasses),
72
+ style: _normalizeStyle($setup.buttonStyle),
73
+ type: "button",
74
+ "aria-expanded": $props.open,
75
+ "aria-label": "\u6253\u5F00 AI \u52A9\u624B",
76
+ onClick: $setup.handleClick
77
+ }, [
78
+ _createElementVNode("span", _hoisted_2, [
79
+ $props.open ? (_openBlock(), _createElementBlock("svg", _hoisted_3, [..._cache[0] || (_cache[0] = [
80
+ _createElementVNode(
81
+ "path",
82
+ {
83
+ d: "M9 18l6-6-6-6",
84
+ "stroke-linecap": "round",
85
+ "stroke-linejoin": "round"
86
+ },
87
+ null,
88
+ -1
89
+ /* CACHED */
90
+ )
91
+ ])])) : (_openBlock(), _createElementBlock("svg", _hoisted_4, [..._cache[1] || (_cache[1] = [
92
+ _createElementVNode(
93
+ "path",
94
+ {
95
+ d: "M15 18l-6-6 6-6",
96
+ "stroke-linecap": "round",
97
+ "stroke-linejoin": "round"
98
+ },
99
+ null,
100
+ -1
101
+ /* CACHED */
102
+ )
103
+ ])]))
104
+ ]),
105
+ $props.thinking ? (_openBlock(), _createElementBlock("span", _hoisted_5)) : _createCommentVNode("v-if", true)
106
+ ], 14, _hoisted_1);
107
+ }
108
+ __vue_sfc__.render = __vue_render__;
109
+ var SplitTrigger_vue_default = __vue_sfc__;
110
+ export {
111
+ SplitTrigger_vue_default as default
112
+ };
@@ -0,0 +1 @@
1
+ .aipanel-button{width:42px;height:42px;border-radius:50%;background:#fff;border:none;cursor:pointer;box-shadow:0 4px 12px #667eea66;transition:all .3s ease;display:flex;align-items:center;justify-content:center;padding:0;position:relative}.aipanel-button svg{transform:rotate(180deg) scale(1.1);transition:transform .3s ease;width:100%;height:100%;display:block}.aipanel-button:hover svg{transform:rotate(180deg) scale(1.1)}.aipanel-button:hover{transform:scale(1.1);box-shadow:0 6px 16px #667eea80}.aipanel-button.thinking{background:linear-gradient(135deg,#667eea,#764ba2);animation:thinking-glow 2s ease-in-out infinite,thinking-pulse 2s ease-in-out infinite;box-shadow:0 0 20px #667eea99,0 0 40px #764ba266,0 0 60px #667eea33}.aipanel-button.thinking svg path{fill:#fff}.aipanel-button.thinking:before{content:"";position:absolute;inset:-2px;border-radius:50%;background:linear-gradient(135deg,#8b9cf5,#9d6bc7);z-index:-1}.aipanel-button.thinking:after{content:"";position:absolute;inset:-3px;border-radius:50%;background:conic-gradient(from 180deg,transparent,rgba(102,126,234,.3),transparent,rgba(118,75,162,.3),transparent);z-index:-2;animation:thinking-rotate 2s linear infinite reverse;filter:blur(8px)}@keyframes thinking-glow{0%,to{box-shadow:0 0 20px #667eea99,0 0 40px #764ba266,0 0 60px #667eea33}50%{box-shadow:0 0 30px #667eeacc,0 0 60px #764ba299,0 0 90px #667eea4d}}@keyframes thinking-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes thinking-pulse{0%,to{transform:scale(1)}50%{transform:scale(.92)}}.aipanel-button.aipanel-theme-dark{background:linear-gradient(135deg,#667eea,#764ba2);box-shadow:0 4px 12px #667eea4d}.aipanel-button.aipanel-theme-dark:before{content:"";position:absolute;inset:-2px;border-radius:50%;background:linear-gradient(135deg,#8b9cf5,#9d6bc7);z-index:-1}.aipanel-button.aipanel-theme-dark:hover{box-shadow:0 6px 16px #667eea66}.aipanel-button.aipanel-theme-dark svg path{fill:#fff}
@@ -0,0 +1,28 @@
1
+ import type { FloatingBubbleOffset } from "./FloatingBubble/types";
2
+ declare var __VLS_14: {};
3
+ type __VLS_Slots = {} & {
4
+ default?: (props: typeof __VLS_14) => any;
5
+ };
6
+ declare const __VLS_base: import("vue").DefineComponent<{}, {
7
+ offset: import("vue").Ref<{
8
+ x: number;
9
+ y: number;
10
+ } | undefined, FloatingBubbleOffset | {
11
+ x: number;
12
+ y: number;
13
+ } | undefined>;
14
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
15
+ "drag-start": () => any;
16
+ "drag-end": () => any;
17
+ }, string, import("vue").PublicProps, Readonly<{}> & Readonly<{
18
+ "onDrag-start"?: (() => any) | undefined;
19
+ "onDrag-end"?: (() => any) | undefined;
20
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
21
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
22
+ declare const _default: typeof __VLS_export;
23
+ export default _default;
24
+ type __VLS_WithSlots<T, S> = T & {
25
+ new (): {
26
+ $slots: S;
27
+ };
28
+ };
@@ -0,0 +1,74 @@
1
+ import "./Trigger-sfc.css";
2
+ import { defineComponent as _defineComponent } from "vue";
3
+ import { ref, watch } from "vue";
4
+ import { useAIPanelWidgetContext } from "../context.mjs";
5
+ import FloatingBubble from "./FloatingBubble/FloatingBubble.vue.mjs";
6
+ import AIPanelLogo from "./AIPanelLogo.vue.mjs";
7
+ const __vue_sfc__ = /* @__PURE__ */ _defineComponent({
8
+ __name: "Trigger",
9
+ emits: ["drag-start", "drag-end"],
10
+ setup(__props, { expose: __expose, emit: __emit }) {
11
+ const {
12
+ buttonActive: active,
13
+ open,
14
+ hotkeyLabel,
15
+ thinking,
16
+ resolvedTheme,
17
+ handleToggle,
18
+ bubbleOffset,
19
+ handleBubbleOffsetChange
20
+ } = useAIPanelWidgetContext();
21
+ const offset = ref(bubbleOffset.value);
22
+ const emit = __emit;
23
+ const handleOffsetChange = (value) => {
24
+ offset.value = value;
25
+ handleBubbleOffsetChange(value);
26
+ };
27
+ watch(bubbleOffset, (newOffset) => {
28
+ offset.value = newOffset;
29
+ });
30
+ __expose({
31
+ offset
32
+ });
33
+ const __returned__ = { active, open, hotkeyLabel, thinking, resolvedTheme, handleToggle, bubbleOffset, handleBubbleOffsetChange, offset, emit, handleOffsetChange, FloatingBubble, AIPanelLogo };
34
+ Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
35
+ return __returned__;
36
+ }
37
+ });
38
+ import { renderSlot as _renderSlot, createVNode as _createVNode, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from "vue";
39
+ const _hoisted_1 = ["aria-expanded", "title"];
40
+ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
41
+ return _openBlock(), _createBlock($setup["FloatingBubble"], {
42
+ ref: "bubbleRef",
43
+ offset: $setup.offset,
44
+ "onUpdate:offset": _cache[0] || (_cache[0] = ($event) => $setup.offset = $event),
45
+ axis: "xy",
46
+ magnetic: "x",
47
+ gap: 24,
48
+ onClick: $setup.handleToggle,
49
+ onOffsetChange: $setup.handleOffsetChange,
50
+ onDragStart: _cache[1] || (_cache[1] = ($event) => $setup.emit("drag-start")),
51
+ onDragEnd: _cache[2] || (_cache[2] = ($event) => $setup.emit("drag-end"))
52
+ }, {
53
+ default: _withCtx(() => [
54
+ _createElementVNode("button", {
55
+ class: _normalizeClass(["aipanel-button", { active: $setup.active, thinking: $setup.thinking, "aipanel-theme-dark": $setup.resolvedTheme === "dark" }]),
56
+ type: "button",
57
+ "aria-expanded": $setup.open,
58
+ "aria-label": "\u6253\u5F00 AI \u52A9\u624B",
59
+ title: `AI \u52A9\u624B (${$setup.hotkeyLabel})`
60
+ }, [
61
+ _renderSlot(_ctx.$slots, "default", {}, () => [
62
+ _createVNode($setup["AIPanelLogo"], { size: 42 })
63
+ ])
64
+ ], 10, _hoisted_1)
65
+ ]),
66
+ _: 3
67
+ /* FORWARDED */
68
+ }, 8, ["offset", "onClick"]);
69
+ }
70
+ __vue_sfc__.render = __vue_render__;
71
+ var Trigger_vue_default = __vue_sfc__;
72
+ export {
73
+ Trigger_vue_default as default
74
+ };
@@ -0,0 +1,67 @@
1
+ import { type Ref } from "vue";
2
+ import type { AIPanelWidgetSessionItem, AIPanelSelectedElementItem, AIPanelRemoveSelectedPayload, AIPanelSessionThinkingState, DisplayMode } from "./types";
3
+ import type { FloatingBubbleOffset } from "./components/FloatingBubble/types";
4
+ export interface AIPanelWidgetContext {
5
+ theme: Ref<string>;
6
+ resolvedTheme: Ref<"light" | "dark">;
7
+ title: Ref<string>;
8
+ hotkeyLabel: Ref<string>;
9
+ selectShortcutLabel: Ref<string>;
10
+ selectMode: Ref<boolean>;
11
+ selectEnabled: Ref<boolean>;
12
+ sessionListCollapsed: Ref<boolean>;
13
+ sessionKey: Ref<string>;
14
+ frameLoading: Ref<boolean>;
15
+ loadingSessionList: Ref<boolean | undefined>;
16
+ showSessionListSkeleton: Ref<boolean>;
17
+ showEmptyState: Ref<boolean>;
18
+ showError: Ref<boolean>;
19
+ emptyStateText: Ref<string>;
20
+ emptyStateActionText: Ref<string>;
21
+ showClearAll: Ref<boolean>;
22
+ open: Ref<boolean>;
23
+ thinking: Ref<boolean>;
24
+ minimized: Ref<boolean>;
25
+ promptDockVisible: Ref<boolean>;
26
+ reviewPanelVisible: Ref<boolean>;
27
+ /** 是否支持代码审查面板(右上角 </> 按钮);由 Provider capabilities.reviewPanel 决定 */
28
+ reviewPanelEnabled: Ref<boolean>;
29
+ bubbleOffset: Ref<FloatingBubbleOffset | undefined>;
30
+ mode: Ref<"bubble" | "split">;
31
+ displayMode: Ref<DisplayMode>;
32
+ splitPosition: Ref<"left" | "right">;
33
+ sessionStates: Ref<Record<string, AIPanelSessionThinkingState>>;
34
+ iframeSource: Ref<string>;
35
+ buttonActive: Ref<boolean>;
36
+ sessionListTitle: Ref<string>;
37
+ bubbleVisible: Ref<boolean>;
38
+ hasSelectedElements: Ref<boolean>;
39
+ sessionItems: Ref<AIPanelWidgetSessionItem[]>;
40
+ selectedElementItems: Ref<AIPanelSelectedElementItem[]>;
41
+ handleToggle: () => void;
42
+ handleClose: () => void;
43
+ handleToggleMinimize: () => void;
44
+ handleTogglePromptDock: () => void;
45
+ handleToggleReviewPanel: () => void;
46
+ handleToggleSessionList: () => void;
47
+ handleToggleTheme: () => void;
48
+ handleToggleDisplayMode: () => void;
49
+ handleToggleSplitPosition: () => void;
50
+ handleEmptyAction: () => void;
51
+ handleCreateSession: () => void;
52
+ handleSelectSession: (item: AIPanelWidgetSessionItem) => void;
53
+ handleDeleteSession: (item: AIPanelWidgetSessionItem) => void;
54
+ handleToggleSelectMode: () => void;
55
+ handleClickSelectedNode: (item: AIPanelSelectedElementItem) => void;
56
+ handleRemoveSelectedNode: (payload: {
57
+ item: AIPanelSelectedElementItem;
58
+ index: number;
59
+ source: AIPanelRemoveSelectedPayload["source"];
60
+ }) => void;
61
+ handleClearSelectedNodes: () => void;
62
+ handleFrameLoaded: () => void;
63
+ handleBubbleOffsetChange: (offset: FloatingBubbleOffset | undefined) => void;
64
+ handleRefresh: () => void;
65
+ }
66
+ export declare function provideAIPanelWidgetContext(context: AIPanelWidgetContext): void;
67
+ export declare function useAIPanelWidgetContext(): AIPanelWidgetContext;
@@ -0,0 +1,16 @@
1
+ import { inject, provide } from "vue";
2
+ const CONTEXT_KEY = /* @__PURE__ */ Symbol("AIPanelWidgetContext");
3
+ function provideAIPanelWidgetContext(context) {
4
+ provide(CONTEXT_KEY, context);
5
+ }
6
+ function useAIPanelWidgetContext() {
7
+ const context = inject(CONTEXT_KEY);
8
+ if (!context) {
9
+ throw new Error("useAIPanelWidgetContext must be used within AIPanelWidget");
10
+ }
11
+ return context;
12
+ }
13
+ export {
14
+ provideAIPanelWidgetContext,
15
+ useAIPanelWidgetContext
16
+ };
@@ -0,0 +1 @@
1
+ .aipanel-widget{--ap-bg-main: #ffffff;--ap-bg-secondary: #f8f9fa;--ap-bg-tertiary: #f3f4f6;--ap-overlay-bg: rgba(255, 255, 255, .9);--ap-bg-inverse: #1e1e1e;--ap-text-primary: #282828;--ap-text-secondary: #4b5563;--ap-text-tertiary: #6b7280;--ap-text-placeholder: #9ca3af;--ap-text-inverse: #ffffff;--ap-border-primary: #e5e7eb;--ap-border-secondary: #d1d5db;--ap-primary: #3b82f6;--ap-primary-hover: #2563eb;--ap-primary-bg: rgba(59, 130, 246, .1);--ap-danger: #ef4444;--ap-danger-hover: #dc2626;--ap-danger-active: #b91c1c;--ap-success: #10b981;--ap-overlay: rgba(0, 0, 0, .5);--ap-tooltip-bg: #1e1e1e;--ap-dialog-overlay: rgba(0, 0, 0, .5);--ap-thinking-gradient-1: #10b981;--ap-thinking-gradient-2: #059669;--ap-thinking-glow: rgba(16, 185, 129, .3);--ap-thinking-glow-strong: rgba(16, 185, 129, .6);--ap-skeleton-bg: #e5e7eb;--ap-skeleton-gradient: linear-gradient(90deg, #e5e7eb 25%, #f3f4f6 50%, #e5e7eb 75%);--ap-shadow-sm: 0 2px 4px rgba(0, 0, 0, .1);--ap-shadow-md: 0 4px 12px rgba(0, 0, 0, .15);--ap-shadow-lg: 0 8px 32px rgba(0, 0, 0, .12);--ap-shadow-xl: 0 20px 60px rgba(0, 0, 0, .3);--ap-shadow-primary: 0 2px 4px rgba(59, 130, 246, .2);--ap-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .3);--ap-shadow-danger: 0 4px 12px rgba(239, 68, 68, .3);--ap-trigger-bg: #3b82f6;--ap-trigger-bg-hover: #2563eb;--ap-trigger-bg-active: #1d4ed8;--ap-trigger-shadow: 0 2px 8px rgba(59, 130, 246, .3);--ap-trigger-shadow-hover: 0 4px 12px rgba(59, 130, 246, .4);--ap-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}.aipanel-widget.aipanel-theme-dark{--ap-bg-main: #1a1a1a;--ap-bg-secondary: #1e1e1e;--ap-bg-tertiary: #282828;--ap-overlay-bg: rgba(26, 26, 26, .9);--ap-bg-inverse: #ffffff;--ap-text-primary: #f3f4f6;--ap-text-secondary: #d1d5db;--ap-text-tertiary: #9ca3af;--ap-text-placeholder: #6b7280;--ap-text-inverse: #282828;--ap-border-primary: #282828;--ap-border-secondary: #4b5563;--ap-primary: #3b82f6;--ap-primary-hover: #2563eb;--ap-primary-bg: rgba(59, 130, 246, .15);--ap-danger: #ef4444;--ap-danger-hover: #dc2626;--ap-danger-active: #b91c1c;--ap-success: #10b981;--ap-overlay: rgba(26, 26, 26, .9);--ap-tooltip-bg: #282828;--ap-dialog-overlay: rgba(0, 0, 0, .7);--ap-thinking-gradient-1: #34d399;--ap-thinking-gradient-2: #10b981;--ap-thinking-glow: rgba(52, 211, 153, .3);--ap-thinking-glow-strong: rgba(52, 211, 153, .6);--ap-skeleton-bg: #151515;--ap-skeleton-gradient: linear-gradient(90deg, #282828 25%, #4b5563 50%, #282828 75%);--ap-shadow-sm: 0 2px 4px rgba(0, 0, 0, .3);--ap-shadow-md: 0 4px 12px rgba(0, 0, 0, .4);--ap-shadow-lg: 0 8px 32px rgba(0, 0, 0, .4);--ap-shadow-xl: 0 20px 60px rgba(0, 0, 0, .6);--ap-shadow-primary: 0 2px 4px rgba(59, 130, 246, .3);--ap-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .4);--ap-shadow-danger: 0 4px 12px rgba(239, 68, 68, .4);--ap-trigger-bg: #60a5fa;--ap-trigger-bg-hover: #3b82f6;--ap-trigger-bg-active: #2563eb;--ap-trigger-shadow: 0 2px 8px rgba(96, 165, 250, .4);--ap-trigger-shadow-hover: 0 4px 12px rgba(96, 165, 250, .5);--ap-trigger-shadow-active: 0 4px 12px rgba(96, 165, 250, .6)}.aipanel-chat{position:fixed;bottom:20px;width:700px;height:86vh;max-height:calc(100vh - 40px);background:var(--ap-bg-main);border-radius:16px;box-shadow:var(--ap-shadow-lg);overflow:hidden;opacity:0;visibility:hidden;transform:translate3d(var(---chatAnimationOrigin\.x),var(---chatAnimationOrigin\.y),0) scale(.95);transition:all .3s ease;display:flex;flex-direction:column;z-index:99999}.aipanel-chat.open{opacity:1;visibility:visible;transform:translateZ(0) scale(1)}.aipanel-chat.no-transition,.aipanel-chat.no-transition.open{transition:none!important}.aipanel-chat.minimized{width:320px;height:320px}.aipanel-chat.minimized .aipanel-iframe-container{margin-top:-146px}.aipanel-chat-content{display:flex;flex:1;overflow:hidden}.aipanel-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 #3b82f666,0 0 0 2px #3b82f633;animation:slideDown .3s ease;z-index:10000000;display:flex;align-items:center;gap:10px}.aipanel-notification:before{content:"\1f4a1";font-size:16px}.aipanel-dialog-overlay{position:fixed;inset:0;background:var(--ap-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}}.aipanel-dialog{background:var(--ap-bg-main);border-radius:12px;padding:24px;min-width:320px;max-width:400px;box-shadow:var(--ap-shadow-xl);animation:scaleIn .2s ease}@keyframes scaleIn{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}.aipanel-dialog-content{margin-bottom:20px}.aipanel-dialog-message{font-size:15px;color:var(--ap-text-primary);line-height:1.5}.aipanel-dialog-actions{display:flex;gap:12px;justify-content:flex-end}.aipanel-dialog-btn{padding:10px 20px;border-radius:8px;border:none;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s}.aipanel-dialog-btn.cancel{background:var(--ap-bg-tertiary);color:var(--ap-text-primary)}.aipanel-dialog-btn.cancel:hover{background:var(--ap-text-primary);color:var(--ap-bg-main)}.aipanel-dialog-btn.confirm{background:var(--ap-danger);color:#fff}.aipanel-dialog-btn.confirm:hover{background:var(--ap-danger-hover)}@keyframes slideDown{0%{transform:translate(-50%) translateY(-100%);opacity:0}to{transform:translate(-50%) translateY(0);opacity:1}}.aipanel-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 #3b82f666,0 0 0 2px #3b82f633;animation:slideDown .3s ease;z-index:2147483647;display:flex;align-items:center;gap:10px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.aipanel-page-notification:before{content:"\1f4a1";font-size:16px}.aipanel-element-highlight{position:fixed;pointer-events:none;z-index:999998;border-radius:4px}#vue-inspector-container{display:none!important}.aipanel-element-tooltip{position:fixed;background:var(--ap-tooltip-bg);color:#fff;padding:8px 12px;border-radius:6px;font-size:12px;z-index:9999998;box-shadow:var(--ap-shadow-md);max-width:300px;pointer-events:none;line-height:1}.aipanel-tooltip-tag{font-weight:500;margin-bottom:4px;word-break:break-all}.aipanel-tooltip-file{font-size:11px;color:var(--ap-text-placeholder);word-break:break-all}.aipanel-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){.aipanel-chat{width:calc(100vw - 40px);height:calc(100vh - 100px)}}body.has-aipanel-split{transition:padding .3s ease;min-width:auto}body.has-aipanel-split-right{padding-right:var(--aipanel-split-width, 500px)}body.has-aipanel-split-left{padding-left:var(--aipanel-split-width, 500px)}.aipanel-widget.extension-mode{position:relative;width:100%;height:100%;display:flex}.aipanel-widget.extension-mode .aipanel-select-mode-hint,.aipanel-widget.extension-mode .aipanel-dialog-overlay{position:absolute}
@@ -0,0 +1,69 @@
1
+ import type { AIPanelWidgetProps } from "./types";
2
+ declare var __VLS_13: {}, __VLS_29: {}, __VLS_32: {}, __VLS_35: {}, __VLS_38: {}, __VLS_41: {}, __VLS_44: {}, __VLS_47: {}, __VLS_50: {};
3
+ type __VLS_Slots = {} & {
4
+ 'button-icon'?: (props: typeof __VLS_13) => any;
5
+ } & {
6
+ 'session-toggle-icon'?: (props: typeof __VLS_29) => any;
7
+ } & {
8
+ 'select-icon'?: (props: typeof __VLS_32) => any;
9
+ } & {
10
+ 'close-icon'?: (props: typeof __VLS_35) => any;
11
+ } & {
12
+ 'sessions-empty'?: (props: typeof __VLS_38) => any;
13
+ } & {
14
+ 'empty-state'?: (props: typeof __VLS_41) => any;
15
+ } & {
16
+ loading?: (props: typeof __VLS_44) => any;
17
+ } & {
18
+ error?: (props: typeof __VLS_47) => any;
19
+ } & {
20
+ content?: (props: typeof __VLS_50) => any;
21
+ };
22
+ declare const __VLS_base: import("vue").DefineComponent<AIPanelWidgetProps, {
23
+ showNotification: (message: string, options?: {
24
+ duration?: number;
25
+ mode?: "widget" | "page";
26
+ }) => void;
27
+ showConfirmDialog: (message: string) => Promise<boolean>;
28
+ sendMessageToIframe: (type: string, data?: Record<string, unknown>) => void;
29
+ isSplitMode: import("vue").ComputedRef<boolean>;
30
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
31
+ [x: string]: any;
32
+ }, string, import("vue").PublicProps, Readonly<AIPanelWidgetProps> & Readonly<{
33
+ [x: `on${Capitalize<any>}`]: ((...args: any) => any) | undefined;
34
+ }>, {
35
+ frameLoading: boolean;
36
+ showEmptyState: boolean;
37
+ showError: boolean;
38
+ emptyStateText: string;
39
+ emptyStateActionText: string;
40
+ iframeSrc: string;
41
+ title: string;
42
+ sessionListCollapsed: boolean;
43
+ selectMode: boolean;
44
+ selectEnabled: boolean;
45
+ theme: import("@aipanel/core").AIPanelWidgetTheme;
46
+ reviewPanelEnabled: boolean;
47
+ displayMode: import("@aipanel/core").DisplayMode;
48
+ showSessionListSkeleton: boolean;
49
+ sessionKey: string;
50
+ sessions: import("@aipanel/core").AIPanelWidgetSession[];
51
+ thinking: boolean;
52
+ showClearAll: boolean;
53
+ open: boolean;
54
+ selectShortcutLabel: string;
55
+ hotkeyLabel: string;
56
+ splitPanelWidth: number;
57
+ currentSessionId: string | null;
58
+ selectedElements: import("@aipanel/core").AIPanelSelectedElement[];
59
+ splitMode: import("@aipanel/core").SplitModeOptions;
60
+ hideBubble: boolean;
61
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
62
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
63
+ declare const _default: typeof __VLS_export;
64
+ export default _default;
65
+ type __VLS_WithSlots<T, S> = T & {
66
+ new (): {
67
+ $slots: S;
68
+ };
69
+ };