@vite-plugin-opencode-assistant/components 1.0.48 → 1.0.50

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 (41) hide show
  1. package/es/index.d.ts +1 -1
  2. package/es/index.js +1 -1
  3. package/es/open-code-widget/composables/use-persist-state.d.ts +5 -1
  4. package/es/open-code-widget/composables/use-persist-state.js +10 -2
  5. package/es/open-code-widget/composables/use-split.d.ts +5 -0
  6. package/es/open-code-widget/composables/use-split.js +46 -12
  7. package/es/open-code-widget/src/components/ChatPanel-sfc.css +1 -1
  8. package/es/open-code-widget/src/components/ChatPanel.vue.d.ts +2 -0
  9. package/es/open-code-widget/src/components/ChatPanel.vue.js +60 -11
  10. package/es/open-code-widget/src/components/Header.vue.d.ts +8 -4
  11. package/es/open-code-widget/src/components/Header.vue.js +313 -27
  12. package/es/open-code-widget/src/components/ResizeHandle-sfc.css +1 -1
  13. package/es/open-code-widget/src/components/ResizeHandle.vue.d.ts +2 -0
  14. package/es/open-code-widget/src/components/ResizeHandle.vue.js +9 -3
  15. package/es/open-code-widget/src/context.d.ts +5 -1
  16. package/es/open-code-widget/src/index-sfc.css +1 -1
  17. package/es/open-code-widget/src/index.vue.d.ts +1 -1
  18. package/es/open-code-widget/src/index.vue.js +48 -12
  19. package/lib/@vite-plugin-opencode-assistant/components.cjs.js +372 -70
  20. package/lib/@vite-plugin-opencode-assistant/components.es.js +372 -70
  21. package/lib/components.css +3 -3
  22. package/lib/index.d.ts +1 -1
  23. package/lib/index.js +1 -1
  24. package/lib/open-code-widget/composables/use-persist-state.d.ts +5 -1
  25. package/lib/open-code-widget/composables/use-persist-state.js +10 -2
  26. package/lib/open-code-widget/composables/use-split.d.ts +5 -0
  27. package/lib/open-code-widget/composables/use-split.js +46 -12
  28. package/lib/open-code-widget/src/components/ChatPanel-sfc.css +1 -1
  29. package/lib/open-code-widget/src/components/ChatPanel.vue.d.ts +2 -0
  30. package/lib/open-code-widget/src/components/ChatPanel.vue.js +60 -11
  31. package/lib/open-code-widget/src/components/Header.vue.d.ts +8 -4
  32. package/lib/open-code-widget/src/components/Header.vue.js +313 -27
  33. package/lib/open-code-widget/src/components/ResizeHandle-sfc.css +1 -1
  34. package/lib/open-code-widget/src/components/ResizeHandle.vue.d.ts +2 -0
  35. package/lib/open-code-widget/src/components/ResizeHandle.vue.js +9 -3
  36. package/lib/open-code-widget/src/context.d.ts +5 -1
  37. package/lib/open-code-widget/src/index-sfc.css +1 -1
  38. package/lib/open-code-widget/src/index.vue.d.ts +1 -1
  39. package/lib/open-code-widget/src/index.vue.js +48 -12
  40. package/lib/web-types.json +1 -1
  41. package/package.json +2 -2
@@ -95,6 +95,7 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
95
95
  },
96
96
  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"],
97
97
  setup(__props, { expose: __expose, emit: __emit }) {
98
+ var _a, _b;
98
99
  (0, import_vue.useCssVars)((_ctx) => ({
99
100
  "-chatAnimationOrigin.x": chatAnimationOrigin.value.x,
100
101
  "-chatAnimationOrigin.y": chatAnimationOrigin.value.y
@@ -137,10 +138,14 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
137
138
  const frameRef = (0, import_vue2.ref)(null);
138
139
  const triggerRef = (0, import_vue2.ref)(null);
139
140
  const sendMessageToIframe = (type, data) => {
140
- var _a;
141
- (_a = frameRef.value) == null ? void 0 : _a.sendMessageToIframe(type, data);
141
+ var _a2;
142
+ (_a2 = frameRef.value) == null ? void 0 : _a2.sendMessageToIframe(type, data);
142
143
  };
143
144
  const localSessionListCollapsed = (0, import_vue2.ref)(props.sessionListCollapsed);
145
+ const localDisplayMode = (0, import_vue2.ref)(props.displayMode);
146
+ const localSplitPosition = (0, import_vue2.ref)(
147
+ (_b = (_a = props.splitMode) == null ? void 0 : _a.position) != null ? _b : "right"
148
+ );
144
149
  const minimized = (0, import_vue2.ref)(false);
145
150
  const promptDockVisible = (0, import_vue2.ref)(true);
146
151
  const isRestoring = (0, import_vue2.ref)(true);
@@ -168,6 +173,18 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
168
173
  splitPanelWidth.value = val;
169
174
  }
170
175
  );
176
+ (0, import_vue2.watch)(
177
+ () => props.displayMode,
178
+ (val) => {
179
+ localDisplayMode.value = val;
180
+ }
181
+ );
182
+ const handleToggleDisplayMode = () => {
183
+ const modes = ["bubble", "split", "auto"];
184
+ const currentIndex = modes.indexOf(localDisplayMode.value);
185
+ const nextIndex = (currentIndex + 1) % modes.length;
186
+ localDisplayMode.value = modes[nextIndex];
187
+ };
171
188
  const {
172
189
  buttonActive,
173
190
  containerClasses,
@@ -264,12 +281,15 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
264
281
  isSplitMode,
265
282
  panelWidth,
266
283
  splitConfig,
284
+ splitPosition,
267
285
  handleResize,
268
- handleToggle: handleSplitToggle
286
+ handleToggle: handleSplitToggle,
287
+ handleTogglePosition
269
288
  } = (0, import_use_split.useSplitMode)({
270
- displayMode: (0, import_vue2.toRef)(props, "displayMode"),
289
+ displayMode: localDisplayMode,
271
290
  splitMode: (0, import_vue2.toRef)(props, "splitMode"),
272
291
  open: (0, import_vue2.toRef)(props, "open"),
292
+ splitPosition: localSplitPosition,
273
293
  onOpenChange: (nextOpen) => {
274
294
  emit("update:open", nextOpen);
275
295
  emit("toggle", nextOpen);
@@ -278,6 +298,9 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
278
298
  splitPanelWidth.value = width;
279
299
  emit("update:splitPanelWidth", width);
280
300
  emit("split-panel-width-change", width);
301
+ },
302
+ onPositionChange: (position) => {
303
+ localSplitPosition.value = position;
281
304
  }
282
305
  });
283
306
  (0, import_use_persist_state.usePersistState)({
@@ -288,6 +311,8 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
288
311
  theme: (0, import_vue2.toRef)(props, "theme"),
289
312
  sessionListCollapsed: localSessionListCollapsed,
290
313
  splitPanelWidth,
314
+ displayMode: localDisplayMode,
315
+ splitPosition: localSplitPosition,
291
316
  onRestore: (state) => {
292
317
  if (state.open !== void 0 && state.open !== props.open) {
293
318
  emit("update:open", state.open);
@@ -322,6 +347,12 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
322
347
  if (state.splitPanelWidth !== void 0 && state.splitPanelWidth !== props.splitPanelWidth) {
323
348
  handleResize(state.splitPanelWidth);
324
349
  }
350
+ if (state.displayMode !== void 0 && state.displayMode !== props.displayMode) {
351
+ localDisplayMode.value = state.displayMode;
352
+ }
353
+ if (state.splitPosition !== void 0) {
354
+ localSplitPosition.value = state.splitPosition;
355
+ }
325
356
  (0, import_vue2.nextTick)(() => {
326
357
  syncStateToIframe();
327
358
  setTimeout(() => {
@@ -359,12 +390,12 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
359
390
  }
360
391
  });
361
392
  const bubbleQuadrant = (0, import_vue2.computed)(() => {
362
- var _a, _b, _c, _d;
393
+ var _a2, _b2, _c, _d;
363
394
  if (typeof window === "undefined") return "bottom-right";
364
395
  const centerX = windowWidth.value / 2;
365
396
  const centerY = windowHeight.value / 2;
366
397
  const bubbleSize = 44;
367
- const currentOffset = (_b = (_a = triggerRef.value) == null ? void 0 : _a.offset) != null ? _b : bubbleOffset.value;
398
+ const currentOffset = (_b2 = (_a2 = triggerRef.value) == null ? void 0 : _a2.offset) != null ? _b2 : bubbleOffset.value;
368
399
  const effectiveX = ((_c = currentOffset == null ? void 0 : currentOffset.x) != null ? _c : windowWidth.value - bubbleSize - 24) + bubbleSize / 2;
369
400
  const effectiveY = ((_d = currentOffset == null ? void 0 : currentOffset.y) != null ? _d : windowHeight.value - bubbleSize - 24) + bubbleSize / 2;
370
401
  if (effectiveX >= centerX && effectiveY >= centerY) {
@@ -382,14 +413,14 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
382
413
  return quadrant === "top-right" || quadrant === "bottom-right";
383
414
  });
384
415
  const chatPositionStyle = (0, import_vue2.computed)(() => {
385
- var _a, _b, _c;
416
+ var _a2, _b2, _c;
386
417
  if (typeof window === "undefined") return {};
387
418
  const chatWidth = minimized.value ? 300 : 700;
388
419
  const chatHeight = minimized.value ? 300 : Math.min(windowHeight.value * 0.86, windowHeight.value - 40);
389
420
  const gap = 24;
390
421
  const bubbleSize = 44;
391
422
  const screenMargin = 20;
392
- const effectiveOffset = (_c = (_b = (_a = triggerRef.value) == null ? void 0 : _a.offset) != null ? _b : bubbleOffset.value) != null ? _c : { x: windowWidth.value - bubbleSize - gap, y: windowHeight.value - bubbleSize - gap };
423
+ const effectiveOffset = (_c = (_b2 = (_a2 = triggerRef.value) == null ? void 0 : _a2.offset) != null ? _b2 : bubbleOffset.value) != null ? _c : { x: windowWidth.value - bubbleSize - gap, y: windowHeight.value - bubbleSize - gap };
393
424
  const style = {};
394
425
  if (isBubbleOnRightSide.value) {
395
426
  let rightPos = windowWidth.value - effectiveOffset.x + gap;
@@ -489,9 +520,11 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
489
520
  promptDockVisible,
490
521
  bubbleOffset,
491
522
  mode: effectiveMode,
523
+ displayMode: localDisplayMode,
524
+ splitPosition,
492
525
  sessionStates: (0, import_vue2.computed)(() => {
493
- var _a;
494
- return (_a = props.sessionStates) != null ? _a : {};
526
+ var _a2;
527
+ return (_a2 = props.sessionStates) != null ? _a2 : {};
495
528
  }),
496
529
  iframeSource,
497
530
  buttonActive,
@@ -506,6 +539,8 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
506
539
  handleTogglePromptDock,
507
540
  handleToggleSessionList,
508
541
  handleToggleTheme,
542
+ handleToggleDisplayMode,
543
+ handleToggleSplitPosition: handleTogglePosition,
509
544
  handleEmptyAction,
510
545
  handleCreateSession,
511
546
  handleSelectSession,
@@ -531,7 +566,7 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
531
566
  return dialogResolve;
532
567
  }, set dialogResolve(v) {
533
568
  dialogResolve = v;
534
- }, showConfirmDialog, handleDialogConfirm, handleDialogCancel, frameRef, triggerRef, sendMessageToIframe, localSessionListCollapsed, minimized, promptDockVisible, isRestoring, iframeLoaded, splitPanelWidth, syncStateToIframe, handleFrameLoaded, buttonActive, containerClasses, iframeSource, sessionListTitle, resolvedTheme, handleClose, handleEmptyAction, handleToggle, handleToggleSessionList, handleToggleTheme, sessionItems, handleCreateSession, handleDeleteSession, handleSelectSession, bubbleVisible, hasSelectedElements, selectedElementItems, handleClearSelectedNodes, handleClickSelectedNode, handleRemoveSelectedNode, handleToggleSelectMode, highlightVisible, highlightStyle, tooltipVisible, tooltipStyle, tooltipContent, bubbleOffset, effectiveMode, isSplitMode, panelWidth, splitConfig, handleResize, handleSplitToggle, handleToggleMinimize, handleTogglePromptDock, windowWidth, windowHeight, handleWindowResize, bubbleQuadrant, isBubbleOnRightSide, chatPositionStyle, handleBubbleOffsetChange, handleResizeStart, handleResizeEnd, chatAnimationOrigin, isDragging, get wasOpenBeforeDrag() {
569
+ }, showConfirmDialog, handleDialogConfirm, handleDialogCancel, frameRef, triggerRef, sendMessageToIframe, localSessionListCollapsed, localDisplayMode, localSplitPosition, minimized, promptDockVisible, isRestoring, iframeLoaded, splitPanelWidth, syncStateToIframe, handleFrameLoaded, handleToggleDisplayMode, buttonActive, containerClasses, iframeSource, sessionListTitle, resolvedTheme, handleClose, handleEmptyAction, handleToggle, handleToggleSessionList, handleToggleTheme, sessionItems, handleCreateSession, handleDeleteSession, handleSelectSession, bubbleVisible, hasSelectedElements, selectedElementItems, handleClearSelectedNodes, handleClickSelectedNode, handleRemoveSelectedNode, handleToggleSelectMode, highlightVisible, highlightStyle, tooltipVisible, tooltipStyle, tooltipContent, bubbleOffset, effectiveMode, isSplitMode, panelWidth, splitConfig, splitPosition, handleResize, handleSplitToggle, handleTogglePosition, handleToggleMinimize, handleTogglePromptDock, windowWidth, windowHeight, handleWindowResize, bubbleQuadrant, isBubbleOnRightSide, chatPositionStyle, handleBubbleOffsetChange, handleResizeStart, handleResizeEnd, chatAnimationOrigin, isDragging, get wasOpenBeforeDrag() {
535
570
  return wasOpenBeforeDrag;
536
571
  }, set wasOpenBeforeDrag(v) {
537
572
  wasOpenBeforeDrag = v;
@@ -606,6 +641,7 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
606
641
  "notification-mode": $setup.notificationMode,
607
642
  thinking: $props.thinking,
608
643
  "resolved-theme": $setup.resolvedTheme,
644
+ "split-position": $setup.splitPosition,
609
645
  onResize: $setup.handleResize,
610
646
  onResizeStart: $setup.handleResizeStart,
611
647
  onResizeEnd: $setup.handleResizeEnd,
@@ -674,7 +710,7 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
674
710
  ]),
675
711
  key: "6"
676
712
  } : void 0
677
- ]), 1032, ["mode", "open", "minimized", "position-style", "animation-origin", "panel-width", "resizable", "min-width", "max-width", "no-transition", "dragging", "notification-visible", "notification-message", "notification-mode", "thinking", "resolved-theme", "onResize", "onToggle"]),
713
+ ]), 1032, ["mode", "open", "minimized", "position-style", "animation-origin", "panel-width", "resizable", "min-width", "max-width", "no-transition", "dragging", "notification-visible", "notification-message", "notification-mode", "thinking", "resolved-theme", "split-position", "onResize", "onToggle"]),
678
714
  (0, import_vue3.createVNode)($setup["SelectHint"]),
679
715
  (0, import_vue3.withDirectives)((0, import_vue3.createElementVNode)(
680
716
  "div",
@@ -1 +1 @@
1
- {"$schema":"https://raw.githubusercontent.com/JetBrains/web-types/master/schema/web-types.json","framework":"vue","name":"@vite-plugin-opencode-assistant/components","version":"1.0.48","contributions":{"html":{"tags":[{"name":"open-code","attributes":[{"name":"","default":"`'bottom-right'`","description":"挂件显示的位置","value":{"type":"`'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'`","kind":"expression"}},{"name":"","default":"`false`","description":"挂件是否打开","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`'auto'`","description":"主题模式","value":{"type":"`'light' | 'dark' | 'auto'`","kind":"expression"}},{"name":"","default":"`'AI 助手'`","description":"助手头部显示的标题","value":{"type":"`string`","kind":"expression"}},{"name":"","default":"`'Ctrl+K'`","description":"快捷键提示文本","value":{"type":"`string`","kind":"expression"}},{"name":"","default":"`'按 ESC 或 Ctrl+P 退出'`","description":"选择模式快捷键提示文本","value":{"type":"`string`","kind":"expression"}},{"name":"","default":"`false`","description":"是否进入选择页面元素模式","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`true`","description":"会话列表是否折叠","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`'id'`","description":"会话列表项的唯一键字段","value":{"type":"`string`","kind":"expression"}},{"name":"","default":"`false`","description":"iframe 是否显示加载状态","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`undefined`","description":"会话列表是否加载中","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`false`","description":"是否显示会话列表骨架屏","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`false`","description":"是否显示空状态","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`false`","description":"是否显示错误状态","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`'当前项目暂无会话'`","description":"空状态显示的文本","value":{"type":"`string`","kind":"expression"}},{"name":"","default":"`'立即创建'`","description":"空状态操作按钮文本","value":{"type":"`string`","kind":"expression"}},{"name":"","default":"`''`","description":"Web UI 的 URL 来源","value":{"type":"`string`","kind":"expression"}},{"name":"","default":"`[]`","description":"会话列表数据","value":{"type":"`OpenCodeWidgetSession[]`","kind":"expression"}},{"name":"","default":"`null`","description":"当前选中的会话 ID","value":{"type":"`string | null`","kind":"expression"}},{"name":"","default":"`[]`","description":"已选中的元素列表","value":{"type":"`OpenCodeSelectedElement[]`","kind":"expression"}},{"name":"","default":"`true`","description":"是否显示\"一键清空\"按钮","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`true`","description":"是否启用选择模式","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`false`","description":"是否显示思考状态(加载中)","value":{"type":"`boolean`","kind":"expression"}}],"events":[{"name":"`update:open`","description":"当挂件打开或关闭时触发","arguments":[{"name":"open","type":"en"},{"name":"boolean"}]},{"name":"`update:selectMode`","description":"当选择模式切换时触发","arguments":[{"name":"mode","type":"de"},{"name":"boolean"}]},{"name":"`update:sessionListCollapsed`","description":"当会话列表折叠状态改变时触发","arguments":[{"name":"collapsed","type":"ed"},{"name":"boolean"}]},{"name":"`update:currentSessionId`","description":"当选中的会话 ID 改变时触发","arguments":[{"name":"sessionId","type":"Id"},{"name":"string | null"}]},{"name":"`update:selectedElements`","description":"当已选中的元素列表改变时触发","arguments":[{"name":"elements","type":"ts"},{"name":"OpenCodeSelectedElement[]"}]},{"name":"`update:theme`","description":"当主题模式改变时触发","arguments":[{"name":"theme","type":"me"},{"name":"'light' | 'dark' | 'auto'"}]},{"name":"`update:thinking`","description":"当思考状态改变时触发","arguments":[{"name":"thinking","type":"ng"},{"name":"boolean"}]},{"name":"","description":"点击触发挂件开关","arguments":[{"name":"open","type":"en"},{"name":"boolean"}]},{"name":"","description":"点击关闭按钮时触发","arguments":[]},{"name":"`toggle-session-list`","description":"点击会话列表切换按钮时触发","arguments":[{"name":"collapsed","type":"ed"},{"name":"boolean"}]},{"name":"`toggle-select-mode`","description":"点击选择模式切换按钮时触发","arguments":[{"name":"mode","type":"de"},{"name":"boolean"}]},{"name":"`toggle-theme`","description":"点击主题切换按钮时触发","arguments":[{"name":"theme","type":"me"},{"name":"'light' | 'dark' | 'auto'"}]},{"name":"`create-session`","description":"点击创建新会话时触发","arguments":[]},{"name":"`select-session`","description":"选中某个历史会话时触发","arguments":[{"name":"session","type":"on"},{"name":"OpenCodeWidgetSession"}]},{"name":"`delete-session`","description":"删除某个历史会话时触发","arguments":[{"name":"session","type":"on"},{"name":"OpenCodeWidgetSession"}]},{"name":"`click-selected-node`","description":"点击已选中的气泡或节点卡片时触发","arguments":[{"name":"element","type":"nt"},{"name":"OpenCodeSelectedElement"}]},{"name":"`remove-selected-node`","description":"删除已选中的元素时触发","arguments":[{"name":"payload","type":"ad"},{"name":"OpenCodeRemoveSelectedPayload"}]},{"name":"`clear-selected-nodes`","description":"清空所有选中元素时触发","arguments":[]},{"name":"`empty-action`","description":"点击空状态操作按钮时触发","arguments":[]},{"name":"`frame-loaded`","description":"iframe 加载完成时触发","arguments":[]},{"name":"`thinking-change`","description":"思考状态改变时触发(用于显示加载动画)","arguments":[{"name":"thinking","type":"ng"},{"name":"boolean"}]}],"slots":[{"name":"`button-icon`","description":"自定义触发按钮图标"},{"name":"`session-toggle-icon`","description":"自定义会话列表切换图标"},{"name":"`select-icon`","description":"自定义选择模式切换图标"},{"name":"`close-icon`","description":"自定义关闭按钮图标"},{"name":"`theme-icon`","description":"自定义主题切换图标"},{"name":"`sessions-empty`","description":"自定义会话列表空状态"},{"name":"`empty-state`","description":"自定义 iframe 空状态"},{"name":"","description":"自定义 iframe 加载状态"},{"name":"","description":"自定义错误状态"},{"name":"","description":"自定义 iframe 内容"}]}],"attributes":[]}},"js-types-syntax":"typescript"}
1
+ {"$schema":"https://raw.githubusercontent.com/JetBrains/web-types/master/schema/web-types.json","framework":"vue","name":"@vite-plugin-opencode-assistant/components","version":"1.0.50","contributions":{"html":{"tags":[{"name":"open-code","attributes":[{"name":"","default":"`'bottom-right'`","description":"挂件显示的位置","value":{"type":"`'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'`","kind":"expression"}},{"name":"","default":"`false`","description":"挂件是否打开","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`'auto'`","description":"主题模式","value":{"type":"`'light' | 'dark' | 'auto'`","kind":"expression"}},{"name":"","default":"`'AI 助手'`","description":"助手头部显示的标题","value":{"type":"`string`","kind":"expression"}},{"name":"","default":"`'Ctrl+K'`","description":"快捷键提示文本","value":{"type":"`string`","kind":"expression"}},{"name":"","default":"`'按 ESC 或 Ctrl+P 退出'`","description":"选择模式快捷键提示文本","value":{"type":"`string`","kind":"expression"}},{"name":"","default":"`false`","description":"是否进入选择页面元素模式","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`true`","description":"会话列表是否折叠","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`'id'`","description":"会话列表项的唯一键字段","value":{"type":"`string`","kind":"expression"}},{"name":"","default":"`false`","description":"iframe 是否显示加载状态","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`undefined`","description":"会话列表是否加载中","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`false`","description":"是否显示会话列表骨架屏","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`false`","description":"是否显示空状态","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`false`","description":"是否显示错误状态","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`'当前项目暂无会话'`","description":"空状态显示的文本","value":{"type":"`string`","kind":"expression"}},{"name":"","default":"`'立即创建'`","description":"空状态操作按钮文本","value":{"type":"`string`","kind":"expression"}},{"name":"","default":"`''`","description":"Web UI 的 URL 来源","value":{"type":"`string`","kind":"expression"}},{"name":"","default":"`[]`","description":"会话列表数据","value":{"type":"`OpenCodeWidgetSession[]`","kind":"expression"}},{"name":"","default":"`null`","description":"当前选中的会话 ID","value":{"type":"`string | null`","kind":"expression"}},{"name":"","default":"`[]`","description":"已选中的元素列表","value":{"type":"`OpenCodeSelectedElement[]`","kind":"expression"}},{"name":"","default":"`true`","description":"是否显示\"一键清空\"按钮","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`true`","description":"是否启用选择模式","value":{"type":"`boolean`","kind":"expression"}},{"name":"","default":"`false`","description":"是否显示思考状态(加载中)","value":{"type":"`boolean`","kind":"expression"}}],"events":[{"name":"`update:open`","description":"当挂件打开或关闭时触发","arguments":[{"name":"open","type":"en"},{"name":"boolean"}]},{"name":"`update:selectMode`","description":"当选择模式切换时触发","arguments":[{"name":"mode","type":"de"},{"name":"boolean"}]},{"name":"`update:sessionListCollapsed`","description":"当会话列表折叠状态改变时触发","arguments":[{"name":"collapsed","type":"ed"},{"name":"boolean"}]},{"name":"`update:currentSessionId`","description":"当选中的会话 ID 改变时触发","arguments":[{"name":"sessionId","type":"Id"},{"name":"string | null"}]},{"name":"`update:selectedElements`","description":"当已选中的元素列表改变时触发","arguments":[{"name":"elements","type":"ts"},{"name":"OpenCodeSelectedElement[]"}]},{"name":"`update:theme`","description":"当主题模式改变时触发","arguments":[{"name":"theme","type":"me"},{"name":"'light' | 'dark' | 'auto'"}]},{"name":"`update:thinking`","description":"当思考状态改变时触发","arguments":[{"name":"thinking","type":"ng"},{"name":"boolean"}]},{"name":"","description":"点击触发挂件开关","arguments":[{"name":"open","type":"en"},{"name":"boolean"}]},{"name":"","description":"点击关闭按钮时触发","arguments":[]},{"name":"`toggle-session-list`","description":"点击会话列表切换按钮时触发","arguments":[{"name":"collapsed","type":"ed"},{"name":"boolean"}]},{"name":"`toggle-select-mode`","description":"点击选择模式切换按钮时触发","arguments":[{"name":"mode","type":"de"},{"name":"boolean"}]},{"name":"`toggle-theme`","description":"点击主题切换按钮时触发","arguments":[{"name":"theme","type":"me"},{"name":"'light' | 'dark' | 'auto'"}]},{"name":"`create-session`","description":"点击创建新会话时触发","arguments":[]},{"name":"`select-session`","description":"选中某个历史会话时触发","arguments":[{"name":"session","type":"on"},{"name":"OpenCodeWidgetSession"}]},{"name":"`delete-session`","description":"删除某个历史会话时触发","arguments":[{"name":"session","type":"on"},{"name":"OpenCodeWidgetSession"}]},{"name":"`click-selected-node`","description":"点击已选中的气泡或节点卡片时触发","arguments":[{"name":"element","type":"nt"},{"name":"OpenCodeSelectedElement"}]},{"name":"`remove-selected-node`","description":"删除已选中的元素时触发","arguments":[{"name":"payload","type":"ad"},{"name":"OpenCodeRemoveSelectedPayload"}]},{"name":"`clear-selected-nodes`","description":"清空所有选中元素时触发","arguments":[]},{"name":"`empty-action`","description":"点击空状态操作按钮时触发","arguments":[]},{"name":"`frame-loaded`","description":"iframe 加载完成时触发","arguments":[]},{"name":"`thinking-change`","description":"思考状态改变时触发(用于显示加载动画)","arguments":[{"name":"thinking","type":"ng"},{"name":"boolean"}]}],"slots":[{"name":"`button-icon`","description":"自定义触发按钮图标"},{"name":"`session-toggle-icon`","description":"自定义会话列表切换图标"},{"name":"`select-icon`","description":"自定义选择模式切换图标"},{"name":"`close-icon`","description":"自定义关闭按钮图标"},{"name":"`theme-icon`","description":"自定义主题切换图标"},{"name":"`sessions-empty`","description":"自定义会话列表空状态"},{"name":"`empty-state`","description":"自定义 iframe 空状态"},{"name":"","description":"自定义 iframe 加载状态"},{"name":"","description":"自定义错误状态"},{"name":"","description":"自定义 iframe 内容"}]}],"attributes":[]}},"js-types-syntax":"typescript"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vite-plugin-opencode-assistant/components",
3
- "version": "1.0.48",
3
+ "version": "1.0.50",
4
4
  "description": "Reusable OpenCode widget components built with Pagoda CLI",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
@@ -31,7 +31,7 @@
31
31
  },
32
32
  "dependencies": {
33
33
  "css-selector-generator": "^3.9.1",
34
- "@vite-plugin-opencode-assistant/shared": "1.0.48"
34
+ "@vite-plugin-opencode-assistant/shared": "1.0.50"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@vitejs/plugin-vue": "^6.0.5",