@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,241 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var SessionList_vue_exports = {};
19
+ __export(SessionList_vue_exports, {
20
+ default: () => SessionList_vue_default
21
+ });
22
+ module.exports = __toCommonJS(SessionList_vue_exports);
23
+ var import_SessionList_sfc = require("./SessionList-sfc.css");
24
+ var import_vue = require("vue");
25
+ var import_vue2 = require("vue");
26
+ var import_context = require("../context.cjs");
27
+ var import_vue3 = require("vue");
28
+ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)({
29
+ __name: "SessionList",
30
+ setup(__props, { expose: __expose }) {
31
+ __expose();
32
+ const {
33
+ sessionListCollapsed: collapsed,
34
+ sessionItems: sessions,
35
+ loadingSessionList,
36
+ showSessionListSkeleton,
37
+ handleCreateSession,
38
+ handleSelectSession,
39
+ handleDeleteSession,
40
+ sessionKey,
41
+ sessionStates
42
+ } = (0, import_context.useAIPanelWidgetContext)();
43
+ const isAnimating = (0, import_vue2.ref)(false);
44
+ let animTimer = null;
45
+ (0, import_vue2.watch)(collapsed, () => {
46
+ isAnimating.value = true;
47
+ if (animTimer) clearTimeout(animTimer);
48
+ animTimer = setTimeout(() => {
49
+ isAnimating.value = false;
50
+ }, 200);
51
+ });
52
+ const showSkeleton = (0, import_vue2.computed)(() => {
53
+ if (isAnimating.value) return true;
54
+ if (showSessionListSkeleton.value) return true;
55
+ return false;
56
+ });
57
+ function isSessionThinking(sessionId) {
58
+ if (!sessionStates?.value || !sessionId) return false;
59
+ return sessionStates.value[sessionId]?.thinking ?? false;
60
+ }
61
+ const __returned__ = { collapsed, sessions, loadingSessionList, showSessionListSkeleton, handleCreateSession, handleSelectSession, handleDeleteSession, sessionKey, sessionStates, isAnimating, get animTimer() {
62
+ return animTimer;
63
+ }, set animTimer(v) {
64
+ animTimer = v;
65
+ }, showSkeleton, isSessionThinking };
66
+ Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
67
+ return __returned__;
68
+ }
69
+ });
70
+ const _hoisted_1 = {
71
+ key: 0,
72
+ class: "aipanel-session-list-header"
73
+ };
74
+ const _hoisted_2 = {
75
+ key: 2,
76
+ class: "aipanel-session-skeleton visible"
77
+ };
78
+ const _hoisted_3 = {
79
+ class: "aipanel-session-list-content",
80
+ role: "listbox",
81
+ "aria-labelledby": "aipanel-session-list-title"
82
+ };
83
+ const _hoisted_4 = {
84
+ key: 0,
85
+ class: "aipanel-session-list-loading-overlay"
86
+ };
87
+ const _hoisted_5 = ["aria-selected", "onClick"];
88
+ const _hoisted_6 = { class: "aipanel-session-header" };
89
+ const _hoisted_7 = { class: "aipanel-session-title" };
90
+ const _hoisted_8 = {
91
+ key: 0,
92
+ class: "aipanel-thinking-loading"
93
+ };
94
+ const _hoisted_9 = ["aria-label", "onClick"];
95
+ const _hoisted_10 = { class: "aipanel-session-meta" };
96
+ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
97
+ return (0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)(
98
+ "div",
99
+ {
100
+ class: (0, import_vue3.normalizeClass)(["aipanel-session-list", { collapsed: $setup.collapsed }])
101
+ },
102
+ [
103
+ (0, import_vue3.createCommentVNode)(" Header "),
104
+ !$setup.showSkeleton ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("div", _hoisted_1, [
105
+ _cache[1] || (_cache[1] = (0, import_vue3.createElementVNode)(
106
+ "span",
107
+ { id: "aipanel-session-list-title" },
108
+ "\u4F1A\u8BDD\u5217\u8868",
109
+ -1
110
+ /* CACHED */
111
+ )),
112
+ (0, import_vue3.createElementVNode)("button", {
113
+ class: "aipanel-new-session-btn",
114
+ type: "button",
115
+ title: "\u65B0\u5EFA\u4F1A\u8BDD",
116
+ "aria-label": "\u65B0\u5EFA\u4F1A\u8BDD",
117
+ onClick: _cache[0] || (_cache[0] = (...args) => $setup.handleCreateSession && $setup.handleCreateSession(...args))
118
+ }, " + ")
119
+ ])) : ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)(
120
+ import_vue3.Fragment,
121
+ { key: 1 },
122
+ [
123
+ (0, import_vue3.createCommentVNode)(" Header Skeleton "),
124
+ _cache[2] || (_cache[2] = (0, import_vue3.createElementVNode)(
125
+ "div",
126
+ { class: "aipanel-session-header-skeleton visible" },
127
+ [
128
+ (0, import_vue3.createElementVNode)("div", { class: "aipanel-skeleton-header-title" }),
129
+ (0, import_vue3.createElementVNode)("div", { class: "aipanel-skeleton-header-btn" })
130
+ ],
131
+ -1
132
+ /* CACHED */
133
+ ))
134
+ ],
135
+ 2112
136
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
137
+ )),
138
+ (0, import_vue3.createCommentVNode)(" Content Skeleton "),
139
+ $setup.showSkeleton ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("div", _hoisted_2, [
140
+ ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)(
141
+ import_vue3.Fragment,
142
+ null,
143
+ (0, import_vue3.renderList)(5, (i) => {
144
+ return (0, import_vue3.createElementVNode)("div", {
145
+ key: `skeleton-${i}`,
146
+ class: "aipanel-skeleton-item"
147
+ }, [..._cache[3] || (_cache[3] = [
148
+ (0, import_vue3.createElementVNode)(
149
+ "div",
150
+ { class: "aipanel-skeleton-title" },
151
+ null,
152
+ -1
153
+ /* CACHED */
154
+ ),
155
+ (0, import_vue3.createElementVNode)(
156
+ "div",
157
+ { class: "aipanel-skeleton-meta" },
158
+ null,
159
+ -1
160
+ /* CACHED */
161
+ )
162
+ ])]);
163
+ }),
164
+ 64
165
+ /* STABLE_FRAGMENT */
166
+ ))
167
+ ])) : ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)(
168
+ import_vue3.Fragment,
169
+ { key: 3 },
170
+ [
171
+ (0, import_vue3.createCommentVNode)(" Content "),
172
+ (0, import_vue3.createElementVNode)("div", _hoisted_3, [
173
+ $setup.loadingSessionList ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("div", _hoisted_4, [..._cache[4] || (_cache[4] = [
174
+ (0, import_vue3.createElementVNode)(
175
+ "div",
176
+ { class: "aipanel-loading-spinner small" },
177
+ null,
178
+ -1
179
+ /* CACHED */
180
+ )
181
+ ])])) : (0, import_vue3.createCommentVNode)("v-if", true),
182
+ $setup.sessions.length > 0 ? ((0, import_vue3.openBlock)(true), (0, import_vue3.createElementBlock)(
183
+ import_vue3.Fragment,
184
+ { key: 1 },
185
+ (0, import_vue3.renderList)($setup.sessions, (item) => {
186
+ return (0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("div", {
187
+ key: item[$setup.sessionKey],
188
+ class: (0, import_vue3.normalizeClass)(["aipanel-session-item", { active: item.active, thinking: $setup.isSessionThinking(item.id) }]),
189
+ role: "option",
190
+ "aria-selected": item.active,
191
+ onClick: ($event) => $setup.handleSelectSession(item)
192
+ }, [
193
+ (0, import_vue3.createElementVNode)("div", _hoisted_6, [
194
+ (0, import_vue3.createElementVNode)("div", _hoisted_7, [
195
+ $setup.isSessionThinking(item.id) ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("span", _hoisted_8)) : (0, import_vue3.createCommentVNode)("v-if", true),
196
+ (0, import_vue3.createTextVNode)(
197
+ " " + (0, import_vue3.toDisplayString)(item.title),
198
+ 1
199
+ /* TEXT */
200
+ )
201
+ ]),
202
+ (0, import_vue3.createElementVNode)("button", {
203
+ class: "aipanel-session-delete-btn",
204
+ type: "button",
205
+ "aria-label": `\u5220\u9664\u4F1A\u8BDD: ${item.title}`,
206
+ onClick: (0, import_vue3.withModifiers)(($event) => $setup.handleDeleteSession(item), ["stop"])
207
+ }, " \xD7 ", 8, _hoisted_9)
208
+ ]),
209
+ (0, import_vue3.createElementVNode)(
210
+ "div",
211
+ _hoisted_10,
212
+ (0, import_vue3.toDisplayString)(item.meta),
213
+ 1
214
+ /* TEXT */
215
+ )
216
+ ], 10, _hoisted_5);
217
+ }),
218
+ 128
219
+ /* KEYED_FRAGMENT */
220
+ )) : ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)(
221
+ import_vue3.Fragment,
222
+ { key: 2 },
223
+ [
224
+ (0, import_vue3.createCommentVNode)(" Empty State "),
225
+ (0, import_vue3.renderSlot)(_ctx.$slots, "empty")
226
+ ],
227
+ 64
228
+ /* STABLE_FRAGMENT */
229
+ ))
230
+ ])
231
+ ],
232
+ 2112
233
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
234
+ ))
235
+ ],
236
+ 2
237
+ /* CLASS */
238
+ );
239
+ }
240
+ __vue_sfc__.render = __vue_render__;
241
+ var SessionList_vue_default = __vue_sfc__;
@@ -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 @@
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,131 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var SplitTrigger_vue_exports = {};
19
+ __export(SplitTrigger_vue_exports, {
20
+ default: () => SplitTrigger_vue_default
21
+ });
22
+ module.exports = __toCommonJS(SplitTrigger_vue_exports);
23
+ var import_SplitTrigger_sfc = require("./SplitTrigger-sfc.css");
24
+ var import_vue = require("vue");
25
+ var import_vue2 = require("vue");
26
+ var import_vue3 = require("vue");
27
+ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)({
28
+ ...{
29
+ name: "SplitTrigger"
30
+ },
31
+ __name: "SplitTrigger",
32
+ props: {
33
+ open: { type: Boolean, required: false, default: false },
34
+ thinking: { type: Boolean, required: false, default: false },
35
+ resolvedTheme: { type: String, required: false, default: "light" },
36
+ panelWidth: { type: Number, required: false, default: 500 }
37
+ },
38
+ emits: ["toggle"],
39
+ setup(__props, { expose: __expose, emit: __emit }) {
40
+ __expose();
41
+ const props = __props;
42
+ const emit = __emit;
43
+ const buttonClasses = (0, import_vue2.computed)(() => [
44
+ "aipanel-split-trigger",
45
+ {
46
+ open: props.open,
47
+ thinking: props.thinking,
48
+ "aipanel-theme-dark": props.resolvedTheme === "dark"
49
+ }
50
+ ]);
51
+ const buttonStyle = (0, import_vue2.computed)(() => {
52
+ if (props.open) {
53
+ return {
54
+ right: `${props.panelWidth}px`
55
+ };
56
+ }
57
+ return {};
58
+ });
59
+ const handleClick = () => {
60
+ emit("toggle");
61
+ };
62
+ const __returned__ = { props, emit, buttonClasses, buttonStyle, handleClick };
63
+ Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
64
+ return __returned__;
65
+ }
66
+ });
67
+ const _hoisted_1 = ["aria-expanded"];
68
+ const _hoisted_2 = { class: "aipanel-split-trigger-icon" };
69
+ const _hoisted_3 = {
70
+ key: 0,
71
+ viewBox: "0 0 24 24",
72
+ width: "16",
73
+ height: "16",
74
+ fill: "none",
75
+ stroke: "currentColor",
76
+ "stroke-width": "2"
77
+ };
78
+ const _hoisted_4 = {
79
+ key: 1,
80
+ viewBox: "0 0 24 24",
81
+ width: "16",
82
+ height: "16",
83
+ fill: "none",
84
+ stroke: "currentColor",
85
+ "stroke-width": "2"
86
+ };
87
+ const _hoisted_5 = {
88
+ key: 0,
89
+ class: "aipanel-split-thinking-indicator"
90
+ };
91
+ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
92
+ return (0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("button", {
93
+ class: (0, import_vue3.normalizeClass)($setup.buttonClasses),
94
+ style: (0, import_vue3.normalizeStyle)($setup.buttonStyle),
95
+ type: "button",
96
+ "aria-expanded": $props.open,
97
+ "aria-label": "\u6253\u5F00 AI \u52A9\u624B",
98
+ onClick: $setup.handleClick
99
+ }, [
100
+ (0, import_vue3.createElementVNode)("span", _hoisted_2, [
101
+ $props.open ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("svg", _hoisted_3, [..._cache[0] || (_cache[0] = [
102
+ (0, import_vue3.createElementVNode)(
103
+ "path",
104
+ {
105
+ d: "M9 18l6-6-6-6",
106
+ "stroke-linecap": "round",
107
+ "stroke-linejoin": "round"
108
+ },
109
+ null,
110
+ -1
111
+ /* CACHED */
112
+ )
113
+ ])])) : ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("svg", _hoisted_4, [..._cache[1] || (_cache[1] = [
114
+ (0, import_vue3.createElementVNode)(
115
+ "path",
116
+ {
117
+ d: "M15 18l-6-6 6-6",
118
+ "stroke-linecap": "round",
119
+ "stroke-linejoin": "round"
120
+ },
121
+ null,
122
+ -1
123
+ /* CACHED */
124
+ )
125
+ ])]))
126
+ ]),
127
+ $props.thinking ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("span", _hoisted_5)) : (0, import_vue3.createCommentVNode)("v-if", true)
128
+ ], 14, _hoisted_1);
129
+ }
130
+ __vue_sfc__.render = __vue_render__;
131
+ var SplitTrigger_vue_default = __vue_sfc__;
@@ -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;
@@ -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,103 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+ var Trigger_vue_exports = {};
29
+ __export(Trigger_vue_exports, {
30
+ default: () => Trigger_vue_default
31
+ });
32
+ module.exports = __toCommonJS(Trigger_vue_exports);
33
+ var import_Trigger_sfc = require("./Trigger-sfc.css");
34
+ var import_vue = require("vue");
35
+ var import_vue2 = require("vue");
36
+ var import_context = require("../context.cjs");
37
+ var import_FloatingBubble_vue = __toESM(require("./FloatingBubble/FloatingBubble.vue.cjs"));
38
+ var import_AIPanelLogo_vue = __toESM(require("./AIPanelLogo.vue.cjs"));
39
+ var import_vue3 = require("vue");
40
+ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)({
41
+ __name: "Trigger",
42
+ emits: ["drag-start", "drag-end"],
43
+ setup(__props, { expose: __expose, emit: __emit }) {
44
+ const {
45
+ buttonActive: active,
46
+ open,
47
+ hotkeyLabel,
48
+ thinking,
49
+ resolvedTheme,
50
+ handleToggle,
51
+ bubbleOffset,
52
+ handleBubbleOffsetChange
53
+ } = (0, import_context.useAIPanelWidgetContext)();
54
+ const offset = (0, import_vue2.ref)(bubbleOffset.value);
55
+ const emit = __emit;
56
+ const handleOffsetChange = (value) => {
57
+ offset.value = value;
58
+ handleBubbleOffsetChange(value);
59
+ };
60
+ (0, import_vue2.watch)(bubbleOffset, (newOffset) => {
61
+ offset.value = newOffset;
62
+ });
63
+ __expose({
64
+ offset
65
+ });
66
+ const __returned__ = { active, open, hotkeyLabel, thinking, resolvedTheme, handleToggle, bubbleOffset, handleBubbleOffsetChange, offset, emit, handleOffsetChange, FloatingBubble: import_FloatingBubble_vue.default, AIPanelLogo: import_AIPanelLogo_vue.default };
67
+ Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
68
+ return __returned__;
69
+ }
70
+ });
71
+ const _hoisted_1 = ["aria-expanded", "title"];
72
+ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
73
+ return (0, import_vue3.openBlock)(), (0, import_vue3.createBlock)($setup["FloatingBubble"], {
74
+ ref: "bubbleRef",
75
+ offset: $setup.offset,
76
+ "onUpdate:offset": _cache[0] || (_cache[0] = ($event) => $setup.offset = $event),
77
+ axis: "xy",
78
+ magnetic: "x",
79
+ gap: 24,
80
+ onClick: $setup.handleToggle,
81
+ onOffsetChange: $setup.handleOffsetChange,
82
+ onDragStart: _cache[1] || (_cache[1] = ($event) => $setup.emit("drag-start")),
83
+ onDragEnd: _cache[2] || (_cache[2] = ($event) => $setup.emit("drag-end"))
84
+ }, {
85
+ default: (0, import_vue3.withCtx)(() => [
86
+ (0, import_vue3.createElementVNode)("button", {
87
+ class: (0, import_vue3.normalizeClass)(["aipanel-button", { active: $setup.active, thinking: $setup.thinking, "aipanel-theme-dark": $setup.resolvedTheme === "dark" }]),
88
+ type: "button",
89
+ "aria-expanded": $setup.open,
90
+ "aria-label": "\u6253\u5F00 AI \u52A9\u624B",
91
+ title: `AI \u52A9\u624B (${$setup.hotkeyLabel})`
92
+ }, [
93
+ (0, import_vue3.renderSlot)(_ctx.$slots, "default", {}, () => [
94
+ (0, import_vue3.createVNode)($setup["AIPanelLogo"], { size: 42 })
95
+ ])
96
+ ], 10, _hoisted_1)
97
+ ]),
98
+ _: 3
99
+ /* FORWARDED */
100
+ }, 8, ["offset", "onClick"]);
101
+ }
102
+ __vue_sfc__.render = __vue_render__;
103
+ var Trigger_vue_default = __vue_sfc__;
@@ -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,35 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var context_exports = {};
19
+ __export(context_exports, {
20
+ provideAIPanelWidgetContext: () => provideAIPanelWidgetContext,
21
+ useAIPanelWidgetContext: () => useAIPanelWidgetContext
22
+ });
23
+ module.exports = __toCommonJS(context_exports);
24
+ var import_vue = require("vue");
25
+ const CONTEXT_KEY = /* @__PURE__ */ Symbol("AIPanelWidgetContext");
26
+ function provideAIPanelWidgetContext(context) {
27
+ (0, import_vue.provide)(CONTEXT_KEY, context);
28
+ }
29
+ function useAIPanelWidgetContext() {
30
+ const context = (0, import_vue.inject)(CONTEXT_KEY);
31
+ if (!context) {
32
+ throw new Error("useAIPanelWidgetContext must be used within AIPanelWidget");
33
+ }
34
+ return context;
35
+ }
@@ -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 @@
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}