@aipanel/ui 1.2.11 → 1.2.13

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 (51) hide show
  1. package/es/AI-panel-widget/composables/use-inspector.mjs +4 -4
  2. package/es/AI-panel-widget/composables/use-selection.mjs +4 -4
  3. package/es/AI-panel-widget/src/components/ChatPanel-sfc.css +1 -1
  4. package/es/AI-panel-widget/src/components/ChatPanel.vue.d.ts +3 -0
  5. package/es/AI-panel-widget/src/components/ChatPanel.vue.mjs +13 -4
  6. package/es/AI-panel-widget/src/components/Frame-sfc.css +1 -1
  7. package/es/AI-panel-widget/src/components/Header-sfc.css +1 -1
  8. package/es/AI-panel-widget/src/components/Header.vue.mjs +14 -5
  9. package/es/AI-panel-widget/src/components/ResizeHandle-sfc.css +1 -1
  10. package/es/AI-panel-widget/src/components/SelectedBubbles-sfc.css +1 -1
  11. package/es/AI-panel-widget/src/components/SelectedBubbles.vue.mjs +1 -1
  12. package/es/AI-panel-widget/src/components/SelectedNodes-sfc.css +1 -1
  13. package/es/AI-panel-widget/src/components/SessionList-sfc.css +1 -1
  14. package/es/AI-panel-widget/src/components/SessionList.vue.mjs +86 -67
  15. package/es/AI-panel-widget/src/context.d.ts +5 -1
  16. package/es/AI-panel-widget/src/index-sfc.css +1 -1
  17. package/es/AI-panel-widget/src/index.vue.d.ts +2 -0
  18. package/es/AI-panel-widget/src/index.vue.mjs +34 -2
  19. package/es/AI-panel-widget/src/types.d.ts +1 -1
  20. package/es/env.d.ts +0 -8
  21. package/es/index.d.ts +1 -1
  22. package/es/index.mjs +1 -1
  23. package/lib/AI-panel-widget/composables/use-inspector.cjs +4 -4
  24. package/lib/AI-panel-widget/composables/use-selection.cjs +4 -4
  25. package/lib/AI-panel-widget/src/components/ChatPanel-sfc.css +1 -1
  26. package/lib/AI-panel-widget/src/components/ChatPanel.vue.cjs +13 -4
  27. package/lib/AI-panel-widget/src/components/ChatPanel.vue.d.ts +3 -0
  28. package/lib/AI-panel-widget/src/components/Frame-sfc.css +1 -1
  29. package/lib/AI-panel-widget/src/components/Header-sfc.css +1 -1
  30. package/lib/AI-panel-widget/src/components/Header.vue.cjs +14 -5
  31. package/lib/AI-panel-widget/src/components/ResizeHandle-sfc.css +1 -1
  32. package/lib/AI-panel-widget/src/components/SelectedBubbles-sfc.css +1 -1
  33. package/lib/AI-panel-widget/src/components/SelectedBubbles.vue.cjs +1 -1
  34. package/lib/AI-panel-widget/src/components/SelectedNodes-sfc.css +1 -1
  35. package/lib/AI-panel-widget/src/components/SessionList-sfc.css +1 -1
  36. package/lib/AI-panel-widget/src/components/SessionList.vue.cjs +86 -67
  37. package/lib/AI-panel-widget/src/context.d.ts +5 -1
  38. package/lib/AI-panel-widget/src/index-sfc.css +1 -1
  39. package/lib/AI-panel-widget/src/index.vue.cjs +34 -2
  40. package/lib/AI-panel-widget/src/index.vue.d.ts +2 -0
  41. package/lib/AI-panel-widget/src/types.d.ts +1 -1
  42. package/lib/env.d.ts +0 -8
  43. package/lib/index.cjs +1 -1
  44. package/lib/index.d.ts +1 -1
  45. package/package.json +2 -2
  46. package/es/AI-panel-widget/src/components/SplitTrigger-sfc.css +0 -1
  47. package/es/AI-panel-widget/src/components/SplitTrigger.vue.d.ts +0 -18
  48. package/es/AI-panel-widget/src/components/SplitTrigger.vue.mjs +0 -112
  49. package/lib/AI-panel-widget/src/components/SplitTrigger-sfc.css +0 -1
  50. package/lib/AI-panel-widget/src/components/SplitTrigger.vue.cjs +0 -131
  51. package/lib/AI-panel-widget/src/components/SplitTrigger.vue.d.ts +0 -18
@@ -126,19 +126,20 @@ const _hoisted_4 = {
126
126
  class: "aipanel-session-list-loading-overlay"
127
127
  };
128
128
  const _hoisted_5 = ["aria-selected", "onClick"];
129
- const _hoisted_6 = { class: "aipanel-session-header" };
130
- const _hoisted_7 = { class: "aipanel-session-title" };
131
- const _hoisted_8 = ["title"];
132
- const _hoisted_9 = ["title"];
133
- const _hoisted_10 = ["x", "y"];
134
- const _hoisted_11 = {
129
+ const _hoisted_6 = ["title"];
130
+ const _hoisted_7 = ["title"];
131
+ const _hoisted_8 = ["x", "y"];
132
+ const _hoisted_9 = {
135
133
  key: 2,
136
134
  class: "aipanel-session-state aipanel-session-state-completed",
137
135
  title: "\u5DF2\u5B8C\u6210"
138
136
  };
139
- const _hoisted_12 = { class: "aipanel-session-title-text" };
140
- const _hoisted_13 = ["aria-label", "onClick"];
141
- const _hoisted_14 = { class: "aipanel-session-meta" };
137
+ const _hoisted_10 = { class: "aipanel-session-title-text" };
138
+ const _hoisted_11 = {
139
+ key: 3,
140
+ class: "aipanel-session-meta"
141
+ };
142
+ const _hoisted_12 = ["aria-label", "onClick"];
142
143
  function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
143
144
  return (0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)(
144
145
  "div",
@@ -148,9 +149,12 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
148
149
  [
149
150
  (0, import_vue3.createCommentVNode)(" Header "),
150
151
  !$setup.showSkeleton ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("div", _hoisted_1, [
151
- _cache[1] || (_cache[1] = (0, import_vue3.createElementVNode)(
152
+ _cache[2] || (_cache[2] = (0, import_vue3.createElementVNode)(
152
153
  "span",
153
- { id: "aipanel-session-list-title" },
154
+ {
155
+ id: "aipanel-session-list-title",
156
+ class: "aipanel-session-list-title"
157
+ },
154
158
  "\u4F1A\u8BDD\u5217\u8868",
155
159
  -1
156
160
  /* CACHED */
@@ -161,13 +165,32 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
161
165
  title: "\u65B0\u5EFA\u4F1A\u8BDD",
162
166
  "aria-label": "\u65B0\u5EFA\u4F1A\u8BDD",
163
167
  onClick: _cache[0] || (_cache[0] = (...args) => $setup.handleCreateSession && $setup.handleCreateSession(...args))
164
- }, " + ")
168
+ }, [..._cache[1] || (_cache[1] = [
169
+ (0, import_vue3.createElementVNode)(
170
+ "svg",
171
+ {
172
+ viewBox: "0 0 16 16",
173
+ width: "12",
174
+ height: "12",
175
+ fill: "none",
176
+ stroke: "currentColor",
177
+ "stroke-width": "1.6",
178
+ "stroke-linecap": "round",
179
+ "aria-hidden": "true"
180
+ },
181
+ [
182
+ (0, import_vue3.createElementVNode)("path", { d: "M8 3v10M3 8h10" })
183
+ ],
184
+ -1
185
+ /* CACHED */
186
+ )
187
+ ])])
165
188
  ])) : ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)(
166
189
  import_vue3.Fragment,
167
190
  { key: 1 },
168
191
  [
169
192
  (0, import_vue3.createCommentVNode)(" Header Skeleton "),
170
- _cache[2] || (_cache[2] = (0, import_vue3.createElementVNode)(
193
+ _cache[3] || (_cache[3] = (0, import_vue3.createElementVNode)(
171
194
  "div",
172
195
  { class: "aipanel-session-header-skeleton visible" },
173
196
  [
@@ -190,7 +213,7 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
190
213
  return (0, import_vue3.createElementVNode)("div", {
191
214
  key: `skeleton-${i}`,
192
215
  class: "aipanel-skeleton-item"
193
- }, [..._cache[3] || (_cache[3] = [
216
+ }, [..._cache[4] || (_cache[4] = [
194
217
  (0, import_vue3.createElementVNode)(
195
218
  "div",
196
219
  { class: "aipanel-skeleton-title" },
@@ -216,7 +239,7 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
216
239
  [
217
240
  (0, import_vue3.createCommentVNode)(" Content "),
218
241
  (0, import_vue3.createElementVNode)("div", _hoisted_3, [
219
- $setup.loadingSessionList ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("div", _hoisted_4, [..._cache[4] || (_cache[4] = [
242
+ $setup.loadingSessionList ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("div", _hoisted_4, [..._cache[5] || (_cache[5] = [
220
243
  (0, import_vue3.createElementVNode)(
221
244
  "div",
222
245
  { class: "aipanel-loading-spinner small" },
@@ -236,62 +259,58 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
236
259
  "aria-selected": item.active,
237
260
  onClick: ($event) => $setup.handleSelectSession(item)
238
261
  }, [
239
- (0, import_vue3.createElementVNode)("div", _hoisted_6, [
240
- (0, import_vue3.createElementVNode)("div", _hoisted_7, [
241
- (0, import_vue3.createCommentVNode)(" \u72B6\u6001\u6307\u793A\uFF1Apending=\u7425\u73C0\u70B9 > \u6D3B\u8DC3(thinking/running/\u5B50\u4EE3\u7406)=\u8F6C\u5708 > completed=\u7EFF\u70B9 > idle "),
242
- $setup.isSessionPending(item.id) ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("span", {
243
- key: 0,
244
- class: "aipanel-session-state aipanel-session-state-pending",
245
- title: $setup.pendingLabel(item.id)
246
- }, null, 8, _hoisted_8)) : $setup.isSessionActive(item.id) ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("svg", {
247
- key: 1,
248
- class: "aipanel-session-state aipanel-session-state-ongoing",
249
- title: $setup.runningLabel(item.id),
250
- viewBox: "0 0 10 10",
251
- width: "10",
252
- height: "10",
253
- "aria-hidden": "true"
254
- }, [
255
- ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)(
256
- import_vue3.Fragment,
257
- null,
258
- (0, import_vue3.renderList)($setup.ONGOING_CELLS, (c) => {
259
- return (0, import_vue3.createElementVNode)("rect", {
260
- key: c.x + "-" + c.y,
261
- x: c.x,
262
- y: c.y,
263
- width: "2",
264
- height: "2",
265
- style: (0, import_vue3.normalizeStyle)({ animationDelay: c.delay }),
266
- class: "aipanel-session-ongoing-cell"
267
- }, null, 12, _hoisted_10);
268
- }),
269
- 64
270
- /* STABLE_FRAGMENT */
271
- ))
272
- ], 8, _hoisted_9)) : $setup.isSessionCompleted(item.id) ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("span", _hoisted_11)) : (0, import_vue3.createCommentVNode)("v-if", true),
273
- (0, import_vue3.createElementVNode)(
274
- "span",
275
- _hoisted_12,
276
- (0, import_vue3.toDisplayString)(item.title),
277
- 1
278
- /* TEXT */
279
- )
280
- ]),
281
- (0, import_vue3.createElementVNode)("button", {
282
- class: "aipanel-session-delete-btn",
283
- type: "button",
284
- "aria-label": `\u5220\u9664\u4F1A\u8BDD: ${item.title}`,
285
- onClick: (0, import_vue3.withModifiers)(($event) => $setup.handleDeleteSession(item), ["stop"])
286
- }, " \xD7 ", 8, _hoisted_13)
287
- ]),
262
+ (0, import_vue3.createCommentVNode)(" \u72B6\u6001\u6307\u793A\uFF1Apending=\u7425\u73C0\u70B9 > \u6D3B\u8DC3(thinking/running/\u5B50\u4EE3\u7406)=\u8F6C\u5708 > completed=\u7EFF\u70B9 > idle "),
263
+ $setup.isSessionPending(item.id) ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("span", {
264
+ key: 0,
265
+ class: "aipanel-session-state aipanel-session-state-pending",
266
+ title: $setup.pendingLabel(item.id)
267
+ }, null, 8, _hoisted_6)) : $setup.isSessionActive(item.id) ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("svg", {
268
+ key: 1,
269
+ class: "aipanel-session-state aipanel-session-state-ongoing",
270
+ title: $setup.runningLabel(item.id),
271
+ viewBox: "0 0 10 10",
272
+ width: "10",
273
+ height: "10",
274
+ "aria-hidden": "true"
275
+ }, [
276
+ ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)(
277
+ import_vue3.Fragment,
278
+ null,
279
+ (0, import_vue3.renderList)($setup.ONGOING_CELLS, (c) => {
280
+ return (0, import_vue3.createElementVNode)("rect", {
281
+ key: c.x + "-" + c.y,
282
+ x: c.x,
283
+ y: c.y,
284
+ width: "2",
285
+ height: "2",
286
+ style: (0, import_vue3.normalizeStyle)({ animationDelay: c.delay }),
287
+ class: "aipanel-session-ongoing-cell"
288
+ }, null, 12, _hoisted_8);
289
+ }),
290
+ 64
291
+ /* STABLE_FRAGMENT */
292
+ ))
293
+ ], 8, _hoisted_7)) : $setup.isSessionCompleted(item.id) ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("span", _hoisted_9)) : (0, import_vue3.createCommentVNode)("v-if", true),
288
294
  (0, import_vue3.createElementVNode)(
289
- "div",
290
- _hoisted_14,
295
+ "span",
296
+ _hoisted_10,
297
+ (0, import_vue3.toDisplayString)(item.title),
298
+ 1
299
+ /* TEXT */
300
+ ),
301
+ item.meta ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)(
302
+ "span",
303
+ _hoisted_11,
291
304
  (0, import_vue3.toDisplayString)(item.meta),
292
305
  1
293
306
  /* TEXT */
294
- )
307
+ )) : (0, import_vue3.createCommentVNode)("v-if", true),
308
+ (0, import_vue3.createElementVNode)("button", {
309
+ class: "aipanel-session-delete-btn",
310
+ type: "button",
311
+ "aria-label": `\u5220\u9664\u4F1A\u8BDD: ${item.title}`,
312
+ onClick: (0, import_vue3.withModifiers)(($event) => $setup.handleDeleteSession(item), ["stop"])
313
+ }, " \xD7 ", 8, _hoisted_12)
295
314
  ], 10, _hoisted_5);
296
315
  }),
297
316
  128
@@ -1,5 +1,5 @@
1
1
  import { type Ref } from "vue";
2
- import type { AIPanelWidgetSessionItem, AIPanelSelectedElementItem, AIPanelRemoveSelectedPayload, AIPanelSessionThinkingState, DisplayMode } from "./types";
2
+ import type { AIPanelWidgetSessionItem, AIPanelSelectedElementItem, AIPanelRemoveSelectedPayload, AIPanelSessionThinkingState, DisplayMode, ProviderSidebarCollapseControl } from "./types";
3
3
  import type { FloatingBubbleOffset } from "./components/FloatingBubble/types";
4
4
  export interface AIPanelWidgetContext {
5
5
  theme: Ref<string>;
@@ -26,6 +26,10 @@ export interface AIPanelWidgetContext {
26
26
  reviewPanelVisible: Ref<boolean>;
27
27
  /** 是否支持代码审查面板(右上角 </> 按钮);由 Provider capabilities.reviewPanel 决定 */
28
28
  reviewPanelEnabled: Ref<boolean>;
29
+ /** Provider 接管会话侧栏(隐藏原生会话列表,Provider 自家侧栏渲染);由 capabilities.sidebar.takeover 决定 */
30
+ providerSidebar: Ref<boolean>;
31
+ /** 侧栏折叠开关归属(host=宿主左上角按钮驱动 / provider=Provider 自带开关);由 capabilities.sidebar.collapseControl 决定 */
32
+ sidebarCollapseControl: Ref<ProviderSidebarCollapseControl>;
29
33
  bubbleOffset: Ref<FloatingBubbleOffset | undefined>;
30
34
  mode: Ref<"bubble" | "split">;
31
35
  displayMode: Ref<DisplayMode>;
@@ -1 +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-state-pending: #f59e0b;--ap-state-completed: #22c55e;--ap-state-ongoing: #5686fe;--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-state-pending: #fbbf24;--ap-state-completed: #22c55e;--ap-state-ongoing: #5686fe;--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}
1
+ .aipanel-widget{--ap-bg-main: #ffffff;--ap-bg-secondary: #f9fafb;--ap-bg-tertiary: #ebeef2;--ap-overlay-bg: rgba(249, 250, 251, .92);--ap-text-primary: #0f1115;--ap-text-secondary: #61666b;--ap-text-tertiary: #81858c;--ap-text-placeholder: #adb2b8;--ap-border-faint: rgba(15, 17, 21, .04);--ap-border-primary: rgba(15, 17, 21, .1);--ap-border-secondary: rgba(15, 17, 21, .12);--ap-hover-bg: rgba(38, 49, 72, .06);--ap-elevated-fill: #ffffff;--ap-elevated-hover: #f1f3f5;--ap-press-bg: rgba(38, 49, 72, .1);--ap-primary: #0f1115;--ap-primary-hover: #43454a;--ap-on-primary: #ffffff;--ap-accent: #4176e6;--ap-accent-hover: #5686fe;--ap-accent-bg: rgba(65, 118, 230, .1);--ap-danger: #ec1313;--ap-danger-hover: #c40f0f;--ap-state-pending: #f59e0b;--ap-state-completed: #22c55e;--ap-state-ongoing: #5686fe;--ap-tooltip-bg: #1e1e1e;--ap-dialog-overlay: rgba(0, 0, 0, .24);--ap-dialog-bg: #ffffff;--ap-scrollbar-thumb: #e5e5e5;--ap-scrollbar-thumb-hover: #d4d4d4;--ap-thinking-glow: rgba(86, 134, 254, .3);--ap-thinking-glow-strong: rgba(86, 134, 254, .55);--ap-skeleton-bg: rgba(15, 17, 21, .06);--ap-skeleton-gradient: linear-gradient( 90deg, rgba(15, 17, 21, .04) 25%, rgba(15, 17, 21, .1) 50%, rgba(15, 17, 21, .04) 75% );--ap-shadow-sm: 0 1px 2px rgba(15, 17, 21, .04), 0 1px 3px rgba(15, 17, 21, .06);--ap-shadow-md: 0 2px 8px rgba(15, 17, 21, .06), 0 4px 16px rgba(15, 17, 21, .06);--ap-shadow-lg: 0 0 0 .5px rgba(15, 17, 21, .06), 0 4px 16px rgba(15, 17, 21, .08), 0 16px 48px rgba(15, 17, 21, .1);--ap-shadow-xl: 0 0 0 .5px rgba(15, 17, 21, .08), 0 8px 32px rgba(15, 17, 21, .12), 0 24px 72px rgba(15, 17, 21, .14);--ap-shadow-accent: 0 1px 2px rgba(65, 118, 230, .14), 0 0 0 1px rgba(65, 118, 230, .18);position:fixed;z-index:999999;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}.aipanel-widget.aipanel-theme-dark{--ap-bg-main: #151517;--ap-bg-secondary: #1b1b1c;--ap-bg-tertiary: #2c2c2e;--ap-overlay-bg: rgba(21, 21, 23, .92);--ap-text-primary: #f9fafb;--ap-text-secondary: #cfd3d6;--ap-text-tertiary: #adb2b8;--ap-text-placeholder: #81858c;--ap-border-faint: rgba(255, 255, 255, .06);--ap-border-primary: rgba(255, 255, 255, .12);--ap-border-secondary: rgba(255, 255, 255, .16);--ap-hover-bg: rgba(255, 255, 255, .08);--ap-elevated-fill: #43454a;--ap-elevated-hover: #353638;--ap-press-bg: rgba(255, 255, 255, .14);--ap-primary: #f9fafb;--ap-primary-hover: #ebeef2;--ap-on-primary: #0f1115;--ap-accent: #679efe;--ap-accent-hover: #5686fe;--ap-accent-bg: rgba(103, 158, 254, .16);--ap-danger: #f25a5a;--ap-danger-hover: #ff8383;--ap-state-pending: #f59e0b;--ap-state-completed: #22c55e;--ap-state-ongoing: #5686fe;--ap-tooltip-bg: #282828;--ap-dialog-overlay: rgba(0, 0, 0, .5);--ap-dialog-bg: #2c2c2e;--ap-scrollbar-thumb: #3c3c3d;--ap-scrollbar-thumb-hover: #545557;--ap-thinking-glow: rgba(103, 158, 254, .35);--ap-thinking-glow-strong: rgba(103, 158, 254, .6);--ap-skeleton-bg: rgba(255, 255, 255, .07);--ap-skeleton-gradient: linear-gradient( 90deg, rgba(255, 255, 255, .05) 25%, rgba(255, 255, 255, .12) 50%, rgba(255, 255, 255, .05) 75% );--ap-shadow-sm: 0 1px 2px rgba(0, 0, 0, .3), 0 1px 3px rgba(0, 0, 0, .24);--ap-shadow-md: 0 2px 8px rgba(0, 0, 0, .3), 0 4px 16px rgba(0, 0, 0, .2);--ap-shadow-lg: 0 0 0 .5px rgba(255, 255, 255, .06), 0 4px 16px rgba(0, 0, 0, .3), 0 16px 48px rgba(0, 0, 0, .25);--ap-shadow-xl: 0 0 0 .5px rgba(255, 255, 255, .08), 0 8px 32px rgba(0, 0, 0, .36), 0 24px 72px rgba(0, 0, 0, .3);--ap-shadow-accent: 0 1px 2px rgba(103, 158, 254, .2), 0 0 0 1px rgba(103, 158, 254, .25)}@supports not selector(::-webkit-scrollbar){.aipanel-widget,.aipanel-widget *{scrollbar-width:thin;scrollbar-color:var(--ap-scrollbar-thumb) transparent}}.aipanel-widget ::-webkit-scrollbar,.aipanel-widget *::-webkit-scrollbar{width:8px;height:8px}.aipanel-widget ::-webkit-scrollbar-track,.aipanel-widget *::-webkit-scrollbar-track{background:transparent}.aipanel-widget ::-webkit-scrollbar-thumb,.aipanel-widget *::-webkit-scrollbar-thumb{border-radius:4px;background:var(--ap-scrollbar-thumb)}.aipanel-widget ::-webkit-scrollbar-thumb:hover,.aipanel-widget *::-webkit-scrollbar-thumb:hover{background:var(--ap-scrollbar-thumb-hover)}.aipanel-widget ::-webkit-scrollbar-corner,.aipanel-widget *::-webkit-scrollbar-corner{background:transparent}.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);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);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{width:min(380px,100%);background:var(--ap-dialog-bg);border-radius:24px;padding:24px 24px 20px;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:14px;line-height:22px;font-weight:400;color:var(--ap-text-primary)}.aipanel-dialog-actions{display:flex;gap:8px;justify-content:flex-end}.aipanel-dialog-btn{height:36px;padding:0 20px;border-radius:999px;border:1px solid transparent;font-size:14px;line-height:22px;font-weight:500;cursor:pointer;transition:all .2s}.aipanel-dialog-btn.cancel{background:transparent;border-color:var(--ap-border-primary);color:var(--ap-text-secondary)}.aipanel-dialog-btn.cancel:hover{background:var(--ap-hover-bg);color:var(--ap-text-primary)}.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}
@@ -78,7 +78,9 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)({
78
78
  splitMode: { type: Object, required: false, default: void 0 },
79
79
  splitPanelWidth: { type: Number, required: false, default: 500 },
80
80
  hideBubble: { type: Boolean, required: false, default: false },
81
- reviewPanelEnabled: { type: Boolean, required: false, default: false }
81
+ reviewPanelEnabled: { type: Boolean, required: false, default: false },
82
+ providerSidebar: { type: Boolean, required: false, default: false },
83
+ sidebarCollapseControl: { type: String, required: false, default: "host" }
82
84
  },
83
85
  emits: ["update:open", "update:selectMode", "update:sessionListCollapsed", "update:currentSessionId", "update:selectedElements", "update:theme", "update:thinking", "update:splitPanelWidth", "toggle", "close", "toggle-session-list", "toggle-select-mode", "toggle-theme", "create-session", "select-session", "delete-session", "click-selected-node", "remove-selected-node", "clear-selected-nodes", "empty-action", "frame-loaded", "thinking-change", "split-panel-width-change"],
84
86
  setup(__props, { expose: __expose, emit: __emit }) {
@@ -140,6 +142,14 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)({
140
142
  if (!iframeLoaded.value || !iframeReady.value) return;
141
143
  sendMessageToIframe(import_core.WIDGET_MSG.PROMPT_DOCK_VISIBILITY, { visible: promptDockVisible.value });
142
144
  sendMessageToIframe(import_core.WIDGET_MSG.MINIMIZE_STATE, { minimized: minimized.value });
145
+ sendMessageToIframe(import_core.WIDGET_MSG.SIDEBAR_MODE, {
146
+ mode: props.providerSidebar ? "provider" : "host"
147
+ });
148
+ if (props.providerSidebar && props.sidebarCollapseControl === "host") {
149
+ sendMessageToIframe(import_core.WIDGET_MSG.SIDEBAR_COLLAPSE, {
150
+ collapsed: localSessionListCollapsed.value
151
+ });
152
+ }
143
153
  if (props.reviewPanelEnabled) {
144
154
  sendMessageToIframe(import_core.WIDGET_MSG.REVIEW_PANEL_TOGGLE, { visible: reviewPanelVisible.value });
145
155
  }
@@ -166,6 +176,12 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)({
166
176
  localDisplayMode.value = val;
167
177
  }
168
178
  );
179
+ (0, import_vue2.watch)(
180
+ () => [props.providerSidebar, props.sidebarCollapseControl],
181
+ () => {
182
+ syncStateToIframe();
183
+ }
184
+ );
169
185
  const handleToggleDisplayMode = () => {
170
186
  if (localDisplayMode.value === "extension" || localDisplayMode.value === "extension-selector")
171
187
  return;
@@ -207,6 +223,9 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)({
207
223
  localSessionListCollapsed.value = collapsed;
208
224
  emit("update:sessionListCollapsed", collapsed);
209
225
  emit("toggle-session-list", collapsed);
226
+ if (props.providerSidebar && props.sidebarCollapseControl === "host") {
227
+ sendMessageToIframe(import_core.WIDGET_MSG.SIDEBAR_COLLAPSE, { collapsed });
228
+ }
210
229
  },
211
230
  onEmptyAction: () => {
212
231
  emit("empty-action");
@@ -387,6 +406,16 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)({
387
406
  iframeReady.value = true;
388
407
  syncStateToIframe();
389
408
  }
409
+ if (event.data?.type === import_core.WIDGET_MSG.SIDEBAR_STATE) {
410
+ if (props.providerSidebar && props.sidebarCollapseControl === "host") {
411
+ const collapsed = event.data.collapsed === true;
412
+ if (collapsed !== localSessionListCollapsed.value) {
413
+ localSessionListCollapsed.value = collapsed;
414
+ emit("update:sessionListCollapsed", collapsed);
415
+ emit("toggle-session-list", collapsed);
416
+ }
417
+ }
418
+ }
390
419
  };
391
420
  (0, import_vue2.onMounted)(() => {
392
421
  if (typeof window !== "undefined") {
@@ -532,6 +561,8 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)({
532
561
  promptDockVisible,
533
562
  reviewPanelVisible,
534
563
  reviewPanelEnabled: (0, import_vue2.toRef)(props, "reviewPanelEnabled"),
564
+ providerSidebar: (0, import_vue2.toRef)(props, "providerSidebar"),
565
+ sidebarCollapseControl: (0, import_vue2.toRef)(props, "sidebarCollapseControl"),
535
566
  bubbleOffset,
536
567
  mode: effectiveMode,
537
568
  displayMode: localDisplayMode,
@@ -652,6 +683,7 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
652
683
  "resolved-theme": $setup.resolvedTheme,
653
684
  "split-position": $setup.splitPosition,
654
685
  extension: $setup.isExtensionMode,
686
+ "provider-sidebar": $setup.props.providerSidebar,
655
687
  onResize: $setup.handleResize,
656
688
  onResizeStart: $setup.handleResizeStart,
657
689
  onResizeEnd: $setup.handleResizeEnd,
@@ -720,7 +752,7 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
720
752
  ]),
721
753
  key: "6"
722
754
  } : void 0
723
- ]), 1032, ["mode", "open", "minimized", "position-style", "animation-origin", "panel-width", "resizable", "min-width", "max-width", "no-transition", "dragging", "thinking", "resolved-theme", "split-position", "extension", "onResize", "onToggle"]),
755
+ ]), 1032, ["mode", "open", "minimized", "position-style", "animation-origin", "panel-width", "resizable", "min-width", "max-width", "no-transition", "dragging", "thinking", "resolved-theme", "split-position", "extension", "provider-sidebar", "onResize", "onToggle"]),
724
756
  (0, import_vue3.createVNode)($setup["SelectHint"])
725
757
  ],
726
758
  64
@@ -44,6 +44,8 @@ declare const __VLS_base: import("vue").DefineComponent<AIPanelWidgetProps, {
44
44
  selectEnabled: boolean;
45
45
  theme: import("@aipanel/core").AIPanelWidgetTheme;
46
46
  reviewPanelEnabled: boolean;
47
+ providerSidebar: boolean;
48
+ sidebarCollapseControl: import("@aipanel/core").ProviderSidebarCollapseControl;
47
49
  displayMode: import("@aipanel/core").DisplayMode;
48
50
  showSessionListSkeleton: boolean;
49
51
  sessionKey: string;
@@ -1 +1 @@
1
- export type { AIPanelWidgetTheme, AIPanelWidgetSession, AIPanelSelectedElement, AIPanelRemoveSelectedPayload, AIPanelWidgetSessionItem, AIPanelSelectedElementItem, AIPanelWidgetProps, AIPanelWidgetEmits, AIPanelSessionThinkingState, DisplayMode, SplitModeOptions, } from "@aipanel/core";
1
+ export type { AIPanelWidgetTheme, AIPanelWidgetSession, AIPanelSelectedElement, AIPanelRemoveSelectedPayload, AIPanelWidgetSessionItem, AIPanelSelectedElementItem, AIPanelWidgetProps, AIPanelWidgetEmits, AIPanelSessionThinkingState, DisplayMode, SplitModeOptions, ProviderSidebarCollapseControl, } from "@aipanel/core";
package/lib/env.d.ts CHANGED
@@ -1,14 +1,6 @@
1
1
  /// <reference lib="dom" />
2
2
  /// <reference lib="dom.iterable" />
3
3
 
4
- declare module "*.vue" {
5
- import type { DefineComponent } from "vue";
6
-
7
- const component: DefineComponent<Record<string, never>, Record<string, never>, unknown>;
8
-
9
- export default component;
10
- }
11
-
12
4
  declare module "*.svg?raw" {
13
5
  const content: string;
14
6
  export default content;
package/lib/index.cjs CHANGED
@@ -26,7 +26,7 @@ module.exports = __toCommonJS(lib_exports);
26
26
  var import_AI_panel_widget = require("./AI-panel-widget/index.cjs");
27
27
  __reExport(lib_exports, require("./AI-panel-widget/index.cjs"), module.exports);
28
28
  __reExport(lib_exports, require("./setup.cjs"), module.exports);
29
- const version = "1.2.11";
29
+ const version = "1.2.13";
30
30
  function install(app, options) {
31
31
  const components = [
32
32
  import_AI_panel_widget.AIPanelWidget
package/lib/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { App } from 'vue';
2
- declare const version = "1.2.11";
2
+ declare const version = "1.2.13";
3
3
  declare function install(app: App<any>, options?: any): void;
4
4
  export { install, version, };
5
5
  export * from './AI-panel-widget';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aipanel/ui",
3
- "version": "1.2.11",
3
+ "version": "1.2.13",
4
4
  "description": "Reusable AIPanel widget components built with Pagoda CLI",
5
5
  "type": "module",
6
6
  "main": "lib/index.cjs",
@@ -31,7 +31,7 @@
31
31
  },
32
32
  "dependencies": {
33
33
  "css-selector-generator": "^3.9.2",
34
- "@aipanel/core": "1.2.11"
34
+ "@aipanel/core": "1.2.13"
35
35
  },
36
36
  "scripts": {
37
37
  "build": "pagoda-cli build",
@@ -1 +0,0 @@
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)}}
@@ -1,18 +0,0 @@
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;
@@ -1,112 +0,0 @@
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
- };
@@ -1 +0,0 @@
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)}}