@vite-plugin-opencode-assistant/components 1.0.36 → 1.0.38

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 (47) 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 +2 -0
  4. package/es/open-code-widget/composables/use-persist-state.js +24 -9
  5. package/es/open-code-widget/composables/use-split.d.ts +24 -0
  6. package/es/open-code-widget/composables/use-split.js +90 -0
  7. package/es/open-code-widget/src/components/ChatPanel-sfc.css +1 -0
  8. package/es/open-code-widget/src/components/ChatPanel.vue.d.ts +180 -0
  9. package/es/open-code-widget/src/components/ChatPanel.vue.js +288 -0
  10. package/es/open-code-widget/src/components/Header.vue.js +13 -8
  11. package/es/open-code-widget/src/components/ResizeHandle-sfc.css +1 -0
  12. package/es/open-code-widget/src/components/ResizeHandle.vue.d.ts +19 -0
  13. package/es/open-code-widget/src/components/ResizeHandle.vue.js +91 -0
  14. package/es/open-code-widget/src/components/SplitTrigger-sfc.css +1 -0
  15. package/es/open-code-widget/src/components/SplitTrigger.vue.d.ts +17 -0
  16. package/es/open-code-widget/src/components/SplitTrigger.vue.js +130 -0
  17. package/es/open-code-widget/src/context.d.ts +1 -0
  18. package/es/open-code-widget/src/index-sfc.css +1 -1
  19. package/es/open-code-widget/src/index.vue.d.ts +16 -53
  20. package/es/open-code-widget/src/index.vue.js +150 -140
  21. package/es/open-code-widget/src/types.d.ts +1 -1
  22. package/lib/@vite-plugin-opencode-assistant/components.cjs.js +806 -248
  23. package/lib/@vite-plugin-opencode-assistant/components.es.js +802 -244
  24. package/lib/components.css +5 -3
  25. package/lib/index.d.ts +1 -1
  26. package/lib/index.js +1 -1
  27. package/lib/open-code-widget/composables/use-persist-state.d.ts +2 -0
  28. package/lib/open-code-widget/composables/use-persist-state.js +24 -9
  29. package/lib/open-code-widget/composables/use-split.d.ts +24 -0
  30. package/lib/open-code-widget/composables/use-split.js +109 -0
  31. package/lib/open-code-widget/src/components/ChatPanel-sfc.css +1 -0
  32. package/lib/open-code-widget/src/components/ChatPanel.vue.d.ts +180 -0
  33. package/lib/open-code-widget/src/components/ChatPanel.vue.js +315 -0
  34. package/lib/open-code-widget/src/components/Header.vue.js +12 -7
  35. package/lib/open-code-widget/src/components/ResizeHandle-sfc.css +1 -0
  36. package/lib/open-code-widget/src/components/ResizeHandle.vue.d.ts +19 -0
  37. package/lib/open-code-widget/src/components/ResizeHandle.vue.js +108 -0
  38. package/lib/open-code-widget/src/components/SplitTrigger-sfc.css +1 -0
  39. package/lib/open-code-widget/src/components/SplitTrigger.vue.d.ts +17 -0
  40. package/lib/open-code-widget/src/components/SplitTrigger.vue.js +147 -0
  41. package/lib/open-code-widget/src/context.d.ts +1 -0
  42. package/lib/open-code-widget/src/index-sfc.css +1 -1
  43. package/lib/open-code-widget/src/index.vue.d.ts +16 -53
  44. package/lib/open-code-widget/src/index.vue.js +149 -139
  45. package/lib/open-code-widget/src/types.d.ts +1 -1
  46. package/lib/web-types.json +1 -1
  47. package/package.json +2 -2
@@ -24,6 +24,7 @@ export interface OpenCodeWidgetContext {
24
24
  minimized: Ref<boolean>;
25
25
  promptDockVisible: Ref<boolean>;
26
26
  bubbleOffset: Ref<FloatingBubbleOffset | undefined>;
27
+ mode: Ref<"bubble" | "split">;
27
28
  sessionStates: Ref<Record<string, OpencodeSessionThinkingState>>;
28
29
  iframeSource: Ref<string>;
29
30
  buttonActive: Ref<boolean>;
@@ -1 +1 @@
1
- .opencode-widget{--oc-bg-main: #ffffff;--oc-bg-secondary: #f8f9fa;--oc-bg-tertiary: #f3f4f6;--oc-overlay-bg: rgba(255, 255, 255, .9);--oc-bg-inverse: #1e1e1e;--oc-text-primary: #282828;--oc-text-secondary: #4b5563;--oc-text-tertiary: #6b7280;--oc-text-placeholder: #9ca3af;--oc-text-inverse: #ffffff;--oc-border-primary: #e5e7eb;--oc-border-secondary: #d1d5db;--oc-primary: #3b82f6;--oc-primary-hover: #2563eb;--oc-primary-bg: rgba(59, 130, 246, .1);--oc-danger: #ef4444;--oc-danger-hover: #dc2626;--oc-danger-active: #b91c1c;--oc-success: #10b981;--oc-overlay: rgba(0, 0, 0, .5);--oc-tooltip-bg: #1e1e1e;--oc-dialog-overlay: rgba(0, 0, 0, .5);--oc-thinking-gradient-1: #10b981;--oc-thinking-gradient-2: #059669;--oc-thinking-glow: rgba(16, 185, 129, .3);--oc-thinking-glow-strong: rgba(16, 185, 129, .6);--oc-skeleton-bg: #e5e7eb;--oc-skeleton-gradient: linear-gradient(90deg, #e5e7eb 25%, #f3f4f6 50%, #e5e7eb 75%);--oc-shadow-sm: 0 2px 4px rgba(0, 0, 0, .1);--oc-shadow-md: 0 4px 12px rgba(0, 0, 0, .15);--oc-shadow-lg: 0 8px 32px rgba(0, 0, 0, .12);--oc-shadow-xl: 0 20px 60px rgba(0, 0, 0, .3);--oc-shadow-primary: 0 2px 4px rgba(59, 130, 246, .2);--oc-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .3);--oc-shadow-danger: 0 4px 12px rgba(239, 68, 68, .3);--oc-trigger-bg: #3b82f6;--oc-trigger-bg-hover: #2563eb;--oc-trigger-bg-active: #1d4ed8;--oc-trigger-shadow: 0 2px 8px rgba(59, 130, 246, .3);--oc-trigger-shadow-hover: 0 4px 12px rgba(59, 130, 246, .4);--oc-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}.opencode-widget.opencode-theme-dark{--oc-bg-main: #1a1a1a;--oc-bg-secondary: #1e1e1e;--oc-bg-tertiary: #282828;--oc-overlay-bg: rgba(26, 26, 26, .9);--oc-bg-inverse: #ffffff;--oc-text-primary: #f3f4f6;--oc-text-secondary: #d1d5db;--oc-text-tertiary: #9ca3af;--oc-text-placeholder: #6b7280;--oc-text-inverse: #282828;--oc-border-primary: #282828;--oc-border-secondary: #4b5563;--oc-primary: #3b82f6;--oc-primary-hover: #2563eb;--oc-primary-bg: rgba(59, 130, 246, .15);--oc-danger: #ef4444;--oc-danger-hover: #dc2626;--oc-danger-active: #b91c1c;--oc-success: #10b981;--oc-overlay: rgba(26, 26, 26, .9);--oc-tooltip-bg: #282828;--oc-dialog-overlay: rgba(0, 0, 0, .7);--oc-thinking-gradient-1: #34d399;--oc-thinking-gradient-2: #10b981;--oc-thinking-glow: rgba(52, 211, 153, .3);--oc-thinking-glow-strong: rgba(52, 211, 153, .6);--oc-skeleton-bg: #151515;--oc-skeleton-gradient: linear-gradient(90deg, #282828 25%, #4b5563 50%, #282828 75%);--oc-shadow-sm: 0 2px 4px rgba(0, 0, 0, .3);--oc-shadow-md: 0 4px 12px rgba(0, 0, 0, .4);--oc-shadow-lg: 0 8px 32px rgba(0, 0, 0, .4);--oc-shadow-xl: 0 20px 60px rgba(0, 0, 0, .6);--oc-shadow-primary: 0 2px 4px rgba(59, 130, 246, .3);--oc-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .4);--oc-shadow-danger: 0 4px 12px rgba(239, 68, 68, .4);--oc-trigger-bg: #60a5fa;--oc-trigger-bg-hover: #3b82f6;--oc-trigger-bg-active: #2563eb;--oc-trigger-shadow: 0 2px 8px rgba(96, 165, 250, .4);--oc-trigger-shadow-hover: 0 4px 12px rgba(96, 165, 250, .5);--oc-trigger-shadow-active: 0 4px 12px rgba(96, 165, 250, .6)}.opencode-chat{position:fixed;bottom:20px;width:700px;height:86vh;max-height:calc(100vh - 40px);background:var(--oc-bg-main);border-radius:16px;box-shadow:var(--oc-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}.opencode-chat.open{opacity:1;visibility:visible;transform:translateZ(0) scale(1)}.opencode-chat.no-transition,.opencode-chat.no-transition.open{transition:none!important}.opencode-chat.minimized{width:300px;height:300px}.opencode-chat.minimized .opencode-iframe-container{margin-top:-146px}.opencode-chat-content{display:flex;flex:1;overflow:hidden}.opencode-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 rgba(59,130,246,.4),0 0 0 2px rgba(59,130,246,.2);animation:slideDown .3s ease;z-index:10000000;display:flex;align-items:center;gap:10px}.opencode-notification:before{content:"\1f4a1";font-size:16px}.opencode-dialog-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:var(--oc-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}}.opencode-dialog{background:var(--oc-bg-main);border-radius:12px;padding:24px;min-width:320px;max-width:400px;box-shadow:var(--oc-shadow-xl);animation:scaleIn .2s ease}@keyframes scaleIn{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}.opencode-dialog-content{margin-bottom:20px}.opencode-dialog-message{font-size:15px;color:var(--oc-text-primary);line-height:1.5}.opencode-dialog-actions{display:flex;gap:12px;justify-content:flex-end}.opencode-dialog-btn{padding:10px 20px;border-radius:8px;border:none;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s}.opencode-dialog-btn.cancel{background:var(--oc-bg-tertiary);color:var(--oc-text-primary)}.opencode-dialog-btn.cancel:hover{background:var(--oc-text-primary);color:var(--oc-bg-main)}.opencode-dialog-btn.confirm{background:var(--oc-danger);color:#fff}.opencode-dialog-btn.confirm:hover{background:var(--oc-danger-hover)}@keyframes slideDown{0%{transform:translate(-50%) translateY(-100%);opacity:0}to{transform:translate(-50%) translateY(0);opacity:1}}.opencode-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 rgba(59,130,246,.4),0 0 0 2px rgba(59,130,246,.2);animation:slideDown .3s ease;z-index:2147483647;display:flex;align-items:center;gap:10px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.opencode-page-notification:before{content:"\1f4a1";font-size:16px}.opencode-element-highlight{position:fixed;pointer-events:none;z-index:999998;border-radius:4px}#vue-inspector-container{display:none!important}.opencode-element-tooltip{position:fixed;background:var(--oc-tooltip-bg);color:#fff;padding:8px 12px;border-radius:6px;font-size:12px;z-index:9999998;box-shadow:var(--oc-shadow-md);max-width:300px;pointer-events:none}.opencode-tooltip-tag{font-weight:500;margin-bottom:4px;word-break:break-all}.opencode-tooltip-file{font-size:11px;color:var(--oc-text-placeholder);word-break:break-all}.opencode-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){.opencode-chat{width:calc(100vw - 40px);height:calc(100vh - 100px)}}
1
+ .opencode-widget{--oc-bg-main: #ffffff;--oc-bg-secondary: #f8f9fa;--oc-bg-tertiary: #f3f4f6;--oc-overlay-bg: rgba(255, 255, 255, .9);--oc-bg-inverse: #1e1e1e;--oc-text-primary: #282828;--oc-text-secondary: #4b5563;--oc-text-tertiary: #6b7280;--oc-text-placeholder: #9ca3af;--oc-text-inverse: #ffffff;--oc-border-primary: #e5e7eb;--oc-border-secondary: #d1d5db;--oc-primary: #3b82f6;--oc-primary-hover: #2563eb;--oc-primary-bg: rgba(59, 130, 246, .1);--oc-danger: #ef4444;--oc-danger-hover: #dc2626;--oc-danger-active: #b91c1c;--oc-success: #10b981;--oc-overlay: rgba(0, 0, 0, .5);--oc-tooltip-bg: #1e1e1e;--oc-dialog-overlay: rgba(0, 0, 0, .5);--oc-thinking-gradient-1: #10b981;--oc-thinking-gradient-2: #059669;--oc-thinking-glow: rgba(16, 185, 129, .3);--oc-thinking-glow-strong: rgba(16, 185, 129, .6);--oc-skeleton-bg: #e5e7eb;--oc-skeleton-gradient: linear-gradient(90deg, #e5e7eb 25%, #f3f4f6 50%, #e5e7eb 75%);--oc-shadow-sm: 0 2px 4px rgba(0, 0, 0, .1);--oc-shadow-md: 0 4px 12px rgba(0, 0, 0, .15);--oc-shadow-lg: 0 8px 32px rgba(0, 0, 0, .12);--oc-shadow-xl: 0 20px 60px rgba(0, 0, 0, .3);--oc-shadow-primary: 0 2px 4px rgba(59, 130, 246, .2);--oc-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .3);--oc-shadow-danger: 0 4px 12px rgba(239, 68, 68, .3);--oc-trigger-bg: #3b82f6;--oc-trigger-bg-hover: #2563eb;--oc-trigger-bg-active: #1d4ed8;--oc-trigger-shadow: 0 2px 8px rgba(59, 130, 246, .3);--oc-trigger-shadow-hover: 0 4px 12px rgba(59, 130, 246, .4);--oc-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}.opencode-widget.opencode-theme-dark{--oc-bg-main: #1a1a1a;--oc-bg-secondary: #1e1e1e;--oc-bg-tertiary: #282828;--oc-overlay-bg: rgba(26, 26, 26, .9);--oc-bg-inverse: #ffffff;--oc-text-primary: #f3f4f6;--oc-text-secondary: #d1d5db;--oc-text-tertiary: #9ca3af;--oc-text-placeholder: #6b7280;--oc-text-inverse: #282828;--oc-border-primary: #282828;--oc-border-secondary: #4b5563;--oc-primary: #3b82f6;--oc-primary-hover: #2563eb;--oc-primary-bg: rgba(59, 130, 246, .15);--oc-danger: #ef4444;--oc-danger-hover: #dc2626;--oc-danger-active: #b91c1c;--oc-success: #10b981;--oc-overlay: rgba(26, 26, 26, .9);--oc-tooltip-bg: #282828;--oc-dialog-overlay: rgba(0, 0, 0, .7);--oc-thinking-gradient-1: #34d399;--oc-thinking-gradient-2: #10b981;--oc-thinking-glow: rgba(52, 211, 153, .3);--oc-thinking-glow-strong: rgba(52, 211, 153, .6);--oc-skeleton-bg: #151515;--oc-skeleton-gradient: linear-gradient(90deg, #282828 25%, #4b5563 50%, #282828 75%);--oc-shadow-sm: 0 2px 4px rgba(0, 0, 0, .3);--oc-shadow-md: 0 4px 12px rgba(0, 0, 0, .4);--oc-shadow-lg: 0 8px 32px rgba(0, 0, 0, .4);--oc-shadow-xl: 0 20px 60px rgba(0, 0, 0, .6);--oc-shadow-primary: 0 2px 4px rgba(59, 130, 246, .3);--oc-shadow-primary-hover: 0 4px 6px rgba(59, 130, 246, .4);--oc-shadow-danger: 0 4px 12px rgba(239, 68, 68, .4);--oc-trigger-bg: #60a5fa;--oc-trigger-bg-hover: #3b82f6;--oc-trigger-bg-active: #2563eb;--oc-trigger-shadow: 0 2px 8px rgba(96, 165, 250, .4);--oc-trigger-shadow-hover: 0 4px 12px rgba(96, 165, 250, .5);--oc-trigger-shadow-active: 0 4px 12px rgba(96, 165, 250, .6)}.opencode-chat{position:fixed;bottom:20px;width:700px;height:86vh;max-height:calc(100vh - 40px);background:var(--oc-bg-main);border-radius:16px;box-shadow:var(--oc-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}.opencode-chat.open{opacity:1;visibility:visible;transform:translateZ(0) scale(1)}.opencode-chat.no-transition,.opencode-chat.no-transition.open{transition:none!important}.opencode-chat.minimized{width:300px;height:300px}.opencode-chat.minimized .opencode-iframe-container{margin-top:-146px}.opencode-chat-content{display:flex;flex:1;overflow:hidden}.opencode-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 rgba(59,130,246,.4),0 0 0 2px rgba(59,130,246,.2);animation:slideDown .3s ease;z-index:10000000;display:flex;align-items:center;gap:10px}.opencode-notification:before{content:"\1f4a1";font-size:16px}.opencode-dialog-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:var(--oc-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}}.opencode-dialog{background:var(--oc-bg-main);border-radius:12px;padding:24px;min-width:320px;max-width:400px;box-shadow:var(--oc-shadow-xl);animation:scaleIn .2s ease}@keyframes scaleIn{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}.opencode-dialog-content{margin-bottom:20px}.opencode-dialog-message{font-size:15px;color:var(--oc-text-primary);line-height:1.5}.opencode-dialog-actions{display:flex;gap:12px;justify-content:flex-end}.opencode-dialog-btn{padding:10px 20px;border-radius:8px;border:none;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s}.opencode-dialog-btn.cancel{background:var(--oc-bg-tertiary);color:var(--oc-text-primary)}.opencode-dialog-btn.cancel:hover{background:var(--oc-text-primary);color:var(--oc-bg-main)}.opencode-dialog-btn.confirm{background:var(--oc-danger);color:#fff}.opencode-dialog-btn.confirm:hover{background:var(--oc-danger-hover)}@keyframes slideDown{0%{transform:translate(-50%) translateY(-100%);opacity:0}to{transform:translate(-50%) translateY(0);opacity:1}}.opencode-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 rgba(59,130,246,.4),0 0 0 2px rgba(59,130,246,.2);animation:slideDown .3s ease;z-index:2147483647;display:flex;align-items:center;gap:10px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.opencode-page-notification:before{content:"\1f4a1";font-size:16px}.opencode-element-highlight{position:fixed;pointer-events:none;z-index:999998;border-radius:4px}#vue-inspector-container{display:none!important}.opencode-element-tooltip{position:fixed;background:var(--oc-tooltip-bg);color:#fff;padding:8px 12px;border-radius:6px;font-size:12px;z-index:9999998;box-shadow:var(--oc-shadow-md);max-width:300px;pointer-events:none}.opencode-tooltip-tag{font-weight:500;margin-bottom:4px;word-break:break-all}.opencode-tooltip-file{font-size:11px;color:var(--oc-text-placeholder);word-break:break-all}.opencode-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){.opencode-chat{width:calc(100vw - 40px);height:calc(100vh - 100px)}}body.has-opencode-split{padding-right:var(--opencode-split-width, 500px);transition:padding-right .3s ease}body.has-opencode-split *:not(.opencode-chat){max-width:calc(100vw - var(--opencode-split-width, 500px))!important}
@@ -1,23 +1,23 @@
1
1
  import type { OpenCodeWidgetProps } from "./types";
2
- declare var __VLS_11: {}, __VLS_16: {}, __VLS_18: {}, __VLS_20: {}, __VLS_25: {}, __VLS_32: {}, __VLS_34: {}, __VLS_36: {}, __VLS_38: {};
2
+ declare var __VLS_11: {}, __VLS_25: {}, __VLS_27: {}, __VLS_29: {}, __VLS_31: {}, __VLS_33: {}, __VLS_35: {}, __VLS_37: {}, __VLS_39: {};
3
3
  type __VLS_Slots = {} & {
4
4
  'button-icon'?: (props: typeof __VLS_11) => any;
5
5
  } & {
6
- 'session-toggle-icon'?: (props: typeof __VLS_16) => any;
6
+ 'session-toggle-icon'?: (props: typeof __VLS_25) => any;
7
7
  } & {
8
- 'select-icon'?: (props: typeof __VLS_18) => any;
8
+ 'select-icon'?: (props: typeof __VLS_27) => any;
9
9
  } & {
10
- 'close-icon'?: (props: typeof __VLS_20) => any;
10
+ 'close-icon'?: (props: typeof __VLS_29) => any;
11
11
  } & {
12
- 'sessions-empty'?: (props: typeof __VLS_25) => any;
12
+ 'sessions-empty'?: (props: typeof __VLS_31) => any;
13
13
  } & {
14
- 'empty-state'?: (props: typeof __VLS_32) => any;
14
+ 'empty-state'?: (props: typeof __VLS_33) => any;
15
15
  } & {
16
- loading?: (props: typeof __VLS_34) => any;
16
+ loading?: (props: typeof __VLS_35) => any;
17
17
  } & {
18
- error?: (props: typeof __VLS_36) => any;
18
+ error?: (props: typeof __VLS_37) => any;
19
19
  } & {
20
- content?: (props: typeof __VLS_38) => any;
20
+ content?: (props: typeof __VLS_39) => any;
21
21
  };
22
22
  declare const __VLS_component: import("vue").DefineComponent<OpenCodeWidgetProps, {
23
23
  showNotification: (message: string, options?: {
@@ -27,49 +27,9 @@ declare const __VLS_component: import("vue").DefineComponent<OpenCodeWidgetProps
27
27
  showConfirmDialog: (message: string) => Promise<boolean>;
28
28
  sendMessageToIframe: (type: string, data?: Record<string, unknown>) => void;
29
29
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
30
- close: () => any;
31
- toggle: (value: boolean) => any;
32
- "create-session": () => any;
33
- "update:open": (value: boolean) => any;
34
- "delete-session": (session: import("@vite-plugin-opencode-assistant/shared").OpenCodeWidgetSession) => any;
35
- "update:selectMode": (value: boolean) => any;
36
- "update:sessionListCollapsed": (value: boolean) => any;
37
- "update:currentSessionId": (value: string | null) => any;
38
- "update:selectedElements": (value: import("@vite-plugin-opencode-assistant/shared").OpenCodeSelectedElement[]) => any;
39
- "update:theme": (value: import("@vite-plugin-opencode-assistant/shared").OpenCodeWidgetTheme) => any;
40
- "update:thinking": (value: boolean) => any;
41
- "toggle-session-list": (value: boolean) => any;
42
- "toggle-select-mode": (value: boolean) => any;
43
- "toggle-theme": (value: import("@vite-plugin-opencode-assistant/shared").OpenCodeWidgetTheme) => any;
44
- "select-session": (session: import("@vite-plugin-opencode-assistant/shared").OpenCodeWidgetSession) => any;
45
- "click-selected-node": (element: import("@vite-plugin-opencode-assistant/shared").OpenCodeSelectedElement) => any;
46
- "remove-selected-node": (payload: import("@vite-plugin-opencode-assistant/shared").OpenCodeRemoveSelectedPayload) => any;
47
- "clear-selected-nodes": () => any;
48
- "empty-action": () => any;
49
- "frame-loaded": () => any;
50
- "thinking-change": (value: boolean) => any;
30
+ [x: string]: any;
51
31
  }, string, import("vue").PublicProps, Readonly<OpenCodeWidgetProps> & Readonly<{
52
- onClose?: (() => any) | undefined;
53
- onToggle?: ((value: boolean) => any) | undefined;
54
- "onCreate-session"?: (() => any) | undefined;
55
- "onUpdate:open"?: ((value: boolean) => any) | undefined;
56
- "onDelete-session"?: ((session: import("@vite-plugin-opencode-assistant/shared").OpenCodeWidgetSession) => any) | undefined;
57
- "onUpdate:selectMode"?: ((value: boolean) => any) | undefined;
58
- "onUpdate:sessionListCollapsed"?: ((value: boolean) => any) | undefined;
59
- "onUpdate:currentSessionId"?: ((value: string | null) => any) | undefined;
60
- "onUpdate:selectedElements"?: ((value: import("@vite-plugin-opencode-assistant/shared").OpenCodeSelectedElement[]) => any) | undefined;
61
- "onUpdate:theme"?: ((value: import("@vite-plugin-opencode-assistant/shared").OpenCodeWidgetTheme) => any) | undefined;
62
- "onUpdate:thinking"?: ((value: boolean) => any) | undefined;
63
- "onToggle-session-list"?: ((value: boolean) => any) | undefined;
64
- "onToggle-select-mode"?: ((value: boolean) => any) | undefined;
65
- "onToggle-theme"?: ((value: import("@vite-plugin-opencode-assistant/shared").OpenCodeWidgetTheme) => any) | undefined;
66
- "onSelect-session"?: ((session: import("@vite-plugin-opencode-assistant/shared").OpenCodeWidgetSession) => any) | undefined;
67
- "onClick-selected-node"?: ((element: import("@vite-plugin-opencode-assistant/shared").OpenCodeSelectedElement) => any) | undefined;
68
- "onRemove-selected-node"?: ((payload: import("@vite-plugin-opencode-assistant/shared").OpenCodeRemoveSelectedPayload) => any) | undefined;
69
- "onClear-selected-nodes"?: (() => any) | undefined;
70
- "onEmpty-action"?: (() => any) | undefined;
71
- "onFrame-loaded"?: (() => any) | undefined;
72
- "onThinking-change"?: ((value: boolean) => any) | undefined;
32
+ [x: `on${Capitalize<any>}`]: ((...args: any) => any) | undefined;
73
33
  }>, {
74
34
  frameLoading: boolean;
75
35
  showEmptyState: boolean;
@@ -82,16 +42,19 @@ declare const __VLS_component: import("vue").DefineComponent<OpenCodeWidgetProps
82
42
  selectMode: boolean;
83
43
  selectEnabled: boolean;
84
44
  theme: import("@vite-plugin-opencode-assistant/shared").OpenCodeWidgetTheme;
85
- selectShortcutLabel: string;
86
- showClearAll: boolean;
87
45
  showSessionListSkeleton: boolean;
88
46
  sessionKey: string;
89
47
  sessions: import("@vite-plugin-opencode-assistant/shared").OpenCodeWidgetSession[];
90
48
  thinking: boolean;
49
+ showClearAll: boolean;
91
50
  open: boolean;
51
+ selectShortcutLabel: string;
92
52
  hotkeyLabel: string;
53
+ splitPanelWidth: number;
93
54
  currentSessionId: string | null;
94
55
  selectedElements: import("@vite-plugin-opencode-assistant/shared").OpenCodeSelectedElement[];
56
+ displayMode: import("@vite-plugin-opencode-assistant/shared").DisplayMode;
57
+ splitMode: import("@vite-plugin-opencode-assistant/shared").SplitModeOptions;
95
58
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
96
59
  declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
97
60
  export default _default;
@@ -50,17 +50,15 @@ module.exports = __toCommonJS(index_vue_exports);
50
50
  var import_index_sfc = require("./index-sfc.css");
51
51
  var import_vue = require("vue");
52
52
  var import_vue2 = require("vue");
53
- var import_Frame_vue = __toESM(require("./components/Frame.vue.js"));
54
- var import_Header_vue = __toESM(require("./components/Header.vue.js"));
53
+ var import_ChatPanel_vue = __toESM(require("./components/ChatPanel.vue.js"));
55
54
  var import_SelectHint_vue = __toESM(require("./components/SelectHint.vue.js"));
56
- var import_SelectedNodes_vue = __toESM(require("./components/SelectedNodes.vue.js"));
57
- var import_SessionList_vue = __toESM(require("./components/SessionList.vue.js"));
58
55
  var import_Trigger_vue = __toESM(require("./components/Trigger.vue.js"));
59
56
  var import_use_selection = require("../composables/use-selection");
60
57
  var import_use_session = require("../composables/use-session");
61
58
  var import_use_widget = require("../composables/use-widget");
62
59
  var import_use_inspector = require("../composables/use-inspector");
63
60
  var import_use_persist_state = require("../composables/use-persist-state");
61
+ var import_use_split = require("../composables/use-split");
64
62
  var import_context = require("./context");
65
63
  var import_vue3 = require("vue");
66
64
  const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProps(__spreadValues({}, {
@@ -90,9 +88,12 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
90
88
  showClearAll: { type: Boolean, required: false, default: true },
91
89
  selectEnabled: { type: Boolean, required: false, default: true },
92
90
  thinking: { type: Boolean, required: false, default: false },
93
- sessionStates: { type: Object, required: false }
91
+ sessionStates: { type: Object, required: false },
92
+ displayMode: { type: String, required: false, default: "bubble" },
93
+ splitMode: { type: Object, required: false, default: void 0 },
94
+ splitPanelWidth: { type: Number, required: false, default: 500 }
94
95
  },
95
- emits: ["update:open", "update:selectMode", "update:sessionListCollapsed", "update:currentSessionId", "update:selectedElements", "update:theme", "update:thinking", "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"],
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"],
96
97
  setup(__props, { expose: __expose, emit: __emit }) {
97
98
  (0, import_vue.useCssVars)((_ctx) => ({
98
99
  "-chatAnimationOrigin.x": chatAnimationOrigin.value.x,
@@ -144,6 +145,7 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
144
145
  const promptDockVisible = (0, import_vue2.ref)(true);
145
146
  const isRestoring = (0, import_vue2.ref)(true);
146
147
  const iframeLoaded = (0, import_vue2.ref)(false);
148
+ const splitPanelWidth = (0, import_vue2.ref)(props.splitPanelWidth);
147
149
  const syncStateToIframe = () => {
148
150
  if (!iframeLoaded.value) return;
149
151
  sendMessageToIframe("prompt-dock-visibility-change", { visible: promptDockVisible.value });
@@ -165,6 +167,12 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
165
167
  localSessionListCollapsed.value = val;
166
168
  }
167
169
  );
170
+ (0, import_vue2.watch)(
171
+ () => props.splitPanelWidth,
172
+ (val) => {
173
+ splitPanelWidth.value = val;
174
+ }
175
+ );
168
176
  const {
169
177
  buttonActive,
170
178
  containerClasses,
@@ -256,6 +264,27 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
256
264
  }
257
265
  });
258
266
  const bubbleOffset = (0, import_vue2.ref)(void 0);
267
+ const {
268
+ effectiveMode,
269
+ isSplitMode,
270
+ panelWidth,
271
+ splitConfig,
272
+ handleResize,
273
+ handleToggle: handleSplitToggle
274
+ } = (0, import_use_split.useSplitMode)({
275
+ displayMode: (0, import_vue2.toRef)(props, "displayMode"),
276
+ splitMode: (0, import_vue2.toRef)(props, "splitMode"),
277
+ open: (0, import_vue2.toRef)(props, "open"),
278
+ onOpenChange: (nextOpen) => {
279
+ emit("update:open", nextOpen);
280
+ emit("toggle", nextOpen);
281
+ },
282
+ onWidthChange: (width) => {
283
+ splitPanelWidth.value = width;
284
+ emit("update:splitPanelWidth", width);
285
+ emit("split-panel-width-change", width);
286
+ }
287
+ });
259
288
  (0, import_use_persist_state.usePersistState)({
260
289
  open: (0, import_vue2.toRef)(props, "open"),
261
290
  minimized,
@@ -263,6 +292,7 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
263
292
  bubbleOffset,
264
293
  theme: (0, import_vue2.toRef)(props, "theme"),
265
294
  sessionListCollapsed: localSessionListCollapsed,
295
+ splitPanelWidth,
266
296
  onRestore: (state) => {
267
297
  if (state.open !== void 0 && state.open !== props.open) {
268
298
  emit("update:open", state.open);
@@ -402,6 +432,12 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
402
432
  const handleBubbleOffsetChange = (offset) => {
403
433
  bubbleOffset.value = offset;
404
434
  };
435
+ const handleResizeStart = () => {
436
+ isDragging.value = true;
437
+ };
438
+ const handleResizeEnd = () => {
439
+ isDragging.value = false;
440
+ };
405
441
  const chatAnimationOrigin = (0, import_vue2.computed)(() => {
406
442
  const quadrant = bubbleQuadrant.value;
407
443
  switch (quadrant) {
@@ -454,6 +490,7 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
454
490
  minimized,
455
491
  promptDockVisible,
456
492
  bubbleOffset,
493
+ mode: effectiveMode,
457
494
  sessionStates: (0, import_vue2.computed)(() => {
458
495
  var _a;
459
496
  return (_a = props.sessionStates) != null ? _a : {};
@@ -490,35 +527,29 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
490
527
  return dialogResolve;
491
528
  }, set dialogResolve(v) {
492
529
  dialogResolve = v;
493
- }, showConfirmDialog, handleDialogConfirm, handleDialogCancel, frameRef, triggerRef, sendMessageToIframe, localSessionListCollapsed, minimized, promptDockVisible, isRestoring, iframeLoaded, 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, handleToggleMinimize, handleTogglePromptDock, windowWidth, windowHeight, handleWindowResize, bubbleQuadrant, isBubbleOnRightSide, chatPositionStyle, handleBubbleOffsetChange, chatAnimationOrigin, isDragging, get wasOpenBeforeDrag() {
530
+ }, 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() {
494
531
  return wasOpenBeforeDrag;
495
532
  }, set wasOpenBeforeDrag(v) {
496
533
  wasOpenBeforeDrag = v;
497
- }, handleDragStart, handleDragEnd, Frame: import_Frame_vue.default, Header: import_Header_vue.default, SelectHint: import_SelectHint_vue.default, SelectedNodes: import_SelectedNodes_vue.default, SessionList: import_SessionList_vue.default, Trigger: import_Trigger_vue.default };
534
+ }, handleDragStart, handleDragEnd, ChatPanel: import_ChatPanel_vue.default, SelectHint: import_SelectHint_vue.default, Trigger: import_Trigger_vue.default };
498
535
  Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
499
536
  return __returned__;
500
537
  }
501
538
  }));
502
- const _hoisted_1 = {
503
- key: 0,
504
- class: "opencode-notification",
505
- role: "alert"
506
- };
507
- const _hoisted_2 = { class: "opencode-chat-content" };
508
- const _hoisted_3 = { class: "opencode-tooltip-tag" };
509
- const _hoisted_4 = { class: "opencode-tooltip-file" };
510
- const _hoisted_5 = {
511
- key: 0,
539
+ const _hoisted_1 = { class: "opencode-tooltip-tag" };
540
+ const _hoisted_2 = { class: "opencode-tooltip-file" };
541
+ const _hoisted_3 = {
542
+ key: 1,
512
543
  class: "opencode-dialog-overlay"
513
544
  };
514
- const _hoisted_6 = {
545
+ const _hoisted_4 = {
515
546
  class: "opencode-dialog",
516
547
  role: "alertdialog",
517
548
  "aria-modal": "true"
518
549
  };
519
- const _hoisted_7 = { class: "opencode-dialog-content" };
520
- const _hoisted_8 = { class: "opencode-dialog-message" };
521
- const _hoisted_9 = {
550
+ const _hoisted_5 = { class: "opencode-dialog-content" };
551
+ const _hoisted_6 = { class: "opencode-dialog-message" };
552
+ const _hoisted_7 = {
522
553
  key: 0,
523
554
  class: "opencode-page-notification",
524
555
  role: "alert"
@@ -530,9 +561,10 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
530
561
  class: (0, import_vue3.normalizeClass)($setup.containerClasses)
531
562
  },
532
563
  [
533
- (0, import_vue3.createVNode)(
564
+ !$setup.isSplitMode ? ((0, import_vue3.openBlock)(), (0, import_vue3.createBlock)(
534
565
  $setup["Trigger"],
535
566
  {
567
+ key: 0,
536
568
  ref: "triggerRef",
537
569
  onDragStart: $setup.handleDragStart,
538
570
  onDragEnd: $setup.handleDragEnd
@@ -551,116 +583,94 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
551
583
  ]),
552
584
  1536
553
585
  /* NEED_PATCH, DYNAMIC_SLOTS */
554
- ),
555
- (0, import_vue3.withDirectives)((0, import_vue3.createElementVNode)(
556
- "div",
557
- {
558
- class: (0, import_vue3.normalizeClass)(["opencode-chat", { open: $props.open, minimized: $setup.minimized, dragging: $setup.isDragging, "no-transition": $setup.isRestoring }]),
559
- style: (0, import_vue3.normalizeStyle)($setup.chatPositionStyle)
560
- },
561
- [
562
- (0, import_vue3.createVNode)(
563
- $setup["Header"],
564
- null,
565
- (0, import_vue3.createSlots)({
566
- _: 2
567
- /* DYNAMIC */
568
- }, [
569
- $setup.slots["session-toggle-icon"] ? {
570
- name: "session-toggle-icon",
571
- fn: (0, import_vue3.withCtx)(() => [
572
- (0, import_vue3.renderSlot)(_ctx.$slots, "session-toggle-icon")
573
- ]),
574
- key: "0"
575
- } : void 0,
576
- $setup.slots["select-icon"] ? {
577
- name: "select-icon",
578
- fn: (0, import_vue3.withCtx)(() => [
579
- (0, import_vue3.renderSlot)(_ctx.$slots, "select-icon")
580
- ]),
581
- key: "1"
582
- } : void 0,
583
- $setup.slots["close-icon"] ? {
584
- name: "close-icon",
585
- fn: (0, import_vue3.withCtx)(() => [
586
- (0, import_vue3.renderSlot)(_ctx.$slots, "close-icon")
587
- ]),
588
- key: "2"
589
- } : void 0
590
- ]),
591
- 1024
592
- /* DYNAMIC_SLOTS */
593
- ),
594
- $setup.notificationVisible && $setup.notificationMode === "widget" ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)(
595
- "div",
596
- _hoisted_1,
597
- (0, import_vue3.toDisplayString)($setup.notificationMessage),
598
- 1
599
- /* TEXT */
600
- )) : (0, import_vue3.createCommentVNode)("v-if", true),
601
- (0, import_vue3.createElementVNode)("div", _hoisted_2, [
602
- (0, import_vue3.createVNode)($setup["SessionList"], null, {
603
- empty: (0, import_vue3.withCtx)(() => [
604
- (0, import_vue3.renderSlot)(_ctx.$slots, "sessions-empty", {}, () => [
605
- _cache[0] || (_cache[0] = (0, import_vue3.createElementVNode)(
606
- "div",
607
- { class: "opencode-session-empty" },
608
- "\u6682\u65E0\u4F1A\u8BDD",
609
- -1
610
- /* CACHED */
611
- ))
612
- ])
613
- ]),
614
- _: 3
615
- /* FORWARDED */
616
- }),
617
- (0, import_vue3.createVNode)(
618
- $setup["Frame"],
619
- { ref: "frameRef" },
620
- (0, import_vue3.createSlots)({
621
- _: 2
622
- /* DYNAMIC */
623
- }, [
624
- $setup.slots["empty-state"] ? {
625
- name: "empty-state",
626
- fn: (0, import_vue3.withCtx)(() => [
627
- (0, import_vue3.renderSlot)(_ctx.$slots, "empty-state")
628
- ]),
629
- key: "0"
630
- } : void 0,
631
- $setup.slots.loading ? {
632
- name: "loading",
633
- fn: (0, import_vue3.withCtx)(() => [
634
- (0, import_vue3.renderSlot)(_ctx.$slots, "loading")
635
- ]),
636
- key: "1"
637
- } : void 0,
638
- $setup.slots.error ? {
639
- name: "error",
640
- fn: (0, import_vue3.withCtx)(() => [
641
- (0, import_vue3.renderSlot)(_ctx.$slots, "error")
642
- ]),
643
- key: "2"
644
- } : void 0,
645
- $setup.slots.content ? {
646
- name: "content",
647
- fn: (0, import_vue3.withCtx)(() => [
648
- (0, import_vue3.renderSlot)(_ctx.$slots, "content")
649
- ]),
650
- key: "3"
651
- } : void 0
652
- ]),
653
- 1536
654
- /* NEED_PATCH, DYNAMIC_SLOTS */
655
- ),
656
- (0, import_vue3.createVNode)($setup["SelectedNodes"])
586
+ )) : (0, import_vue3.createCommentVNode)("v-if", true),
587
+ (0, import_vue3.createVNode)($setup["ChatPanel"], {
588
+ ref: "frameRef",
589
+ mode: $setup.effectiveMode,
590
+ open: $props.open,
591
+ minimized: $setup.minimized,
592
+ "position-style": $setup.chatPositionStyle,
593
+ "animation-origin": $setup.chatAnimationOrigin,
594
+ "panel-width": $setup.panelWidth,
595
+ resizable: $setup.splitConfig.resizable,
596
+ "min-width": $setup.splitConfig.minWidth,
597
+ "max-width": $setup.splitConfig.maxWidth,
598
+ "no-transition": $setup.isRestoring,
599
+ dragging: $setup.isDragging,
600
+ "notification-visible": $setup.notificationVisible,
601
+ "notification-message": $setup.notificationMessage,
602
+ "notification-mode": $setup.notificationMode,
603
+ thinking: $props.thinking,
604
+ "resolved-theme": $setup.resolvedTheme,
605
+ onResize: $setup.handleResize,
606
+ onResizeStart: $setup.handleResizeStart,
607
+ onResizeEnd: $setup.handleResizeEnd,
608
+ onToggle: $setup.handleSplitToggle
609
+ }, (0, import_vue3.createSlots)({
610
+ "sessions-empty": (0, import_vue3.withCtx)(() => [
611
+ (0, import_vue3.renderSlot)(_ctx.$slots, "sessions-empty", {}, () => [
612
+ _cache[0] || (_cache[0] = (0, import_vue3.createElementVNode)(
613
+ "div",
614
+ { class: "opencode-session-empty" },
615
+ "\u6682\u65E0\u4F1A\u8BDD",
616
+ -1
617
+ /* CACHED */
618
+ ))
657
619
  ])
658
- ],
659
- 6
660
- /* CLASS, STYLE */
661
- ), [
662
- [import_vue3.vShow, !$props.selectMode]
663
- ]),
620
+ ]),
621
+ _: 2
622
+ /* DYNAMIC */
623
+ }, [
624
+ $setup.slots["session-toggle-icon"] ? {
625
+ name: "session-toggle-icon",
626
+ fn: (0, import_vue3.withCtx)(() => [
627
+ (0, import_vue3.renderSlot)(_ctx.$slots, "session-toggle-icon")
628
+ ]),
629
+ key: "0"
630
+ } : void 0,
631
+ $setup.slots["select-icon"] ? {
632
+ name: "select-icon",
633
+ fn: (0, import_vue3.withCtx)(() => [
634
+ (0, import_vue3.renderSlot)(_ctx.$slots, "select-icon")
635
+ ]),
636
+ key: "1"
637
+ } : void 0,
638
+ $setup.slots["close-icon"] ? {
639
+ name: "close-icon",
640
+ fn: (0, import_vue3.withCtx)(() => [
641
+ (0, import_vue3.renderSlot)(_ctx.$slots, "close-icon")
642
+ ]),
643
+ key: "2"
644
+ } : void 0,
645
+ $setup.slots["empty-state"] ? {
646
+ name: "empty-state",
647
+ fn: (0, import_vue3.withCtx)(() => [
648
+ (0, import_vue3.renderSlot)(_ctx.$slots, "empty-state")
649
+ ]),
650
+ key: "3"
651
+ } : void 0,
652
+ $setup.slots.loading ? {
653
+ name: "loading",
654
+ fn: (0, import_vue3.withCtx)(() => [
655
+ (0, import_vue3.renderSlot)(_ctx.$slots, "loading")
656
+ ]),
657
+ key: "4"
658
+ } : void 0,
659
+ $setup.slots.error ? {
660
+ name: "error",
661
+ fn: (0, import_vue3.withCtx)(() => [
662
+ (0, import_vue3.renderSlot)(_ctx.$slots, "error")
663
+ ]),
664
+ key: "5"
665
+ } : void 0,
666
+ $setup.slots.content ? {
667
+ name: "content",
668
+ fn: (0, import_vue3.withCtx)(() => [
669
+ (0, import_vue3.renderSlot)(_ctx.$slots, "content")
670
+ ]),
671
+ key: "6"
672
+ } : void 0
673
+ ]), 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"]),
664
674
  (0, import_vue3.createVNode)($setup["SelectHint"]),
665
675
  (0, import_vue3.withDirectives)((0, import_vue3.createElementVNode)(
666
676
  "div",
@@ -683,14 +693,14 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
683
693
  [
684
694
  (0, import_vue3.createElementVNode)(
685
695
  "div",
686
- _hoisted_3,
696
+ _hoisted_1,
687
697
  (0, import_vue3.toDisplayString)($setup.tooltipContent.description),
688
698
  1
689
699
  /* TEXT */
690
700
  ),
691
701
  (0, import_vue3.createElementVNode)(
692
702
  "div",
693
- _hoisted_4,
703
+ _hoisted_2,
694
704
  (0, import_vue3.toDisplayString)($setup.tooltipContent.fileInfo),
695
705
  1
696
706
  /* TEXT */
@@ -701,12 +711,12 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
701
711
  ), [
702
712
  [import_vue3.vShow, $setup.tooltipVisible]
703
713
  ]),
704
- $setup.dialogVisible ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("div", _hoisted_5, [
705
- (0, import_vue3.createElementVNode)("div", _hoisted_6, [
706
- (0, import_vue3.createElementVNode)("div", _hoisted_7, [
714
+ $setup.dialogVisible ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("div", _hoisted_3, [
715
+ (0, import_vue3.createElementVNode)("div", _hoisted_4, [
716
+ (0, import_vue3.createElementVNode)("div", _hoisted_5, [
707
717
  (0, import_vue3.createElementVNode)(
708
718
  "div",
709
- _hoisted_8,
719
+ _hoisted_6,
710
720
  (0, import_vue3.toDisplayString)($setup.dialogMessage),
711
721
  1
712
722
  /* TEXT */
@@ -727,7 +737,7 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
727
737
  ((0, import_vue3.openBlock)(), (0, import_vue3.createBlock)(import_vue3.Teleport, { to: "body" }, [
728
738
  $setup.notificationVisible && $setup.notificationMode === "page" ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)(
729
739
  "div",
730
- _hoisted_9,
740
+ _hoisted_7,
731
741
  (0, import_vue3.toDisplayString)($setup.notificationMessage),
732
742
  1
733
743
  /* TEXT */
@@ -1,2 +1,2 @@
1
- export type { OpenCodeWidgetTheme, OpenCodeWidgetSession, OpenCodeSelectedElement, OpenCodeRemoveSelectedPayload, OpenCodeWidgetSessionItem, OpenCodeSelectedElementItem, OpenCodeWidgetProps, OpenCodeWidgetEmits, OpencodeSessionThinkingState, } from "@vite-plugin-opencode-assistant/shared";
1
+ export type { OpenCodeWidgetTheme, OpenCodeWidgetSession, OpenCodeSelectedElement, OpenCodeRemoveSelectedPayload, OpenCodeWidgetSessionItem, OpenCodeSelectedElementItem, OpenCodeWidgetProps, OpenCodeWidgetEmits, OpencodeSessionThinkingState, DisplayMode, SplitModeOptions, } from "@vite-plugin-opencode-assistant/shared";
2
2
  export type OpenCodeWidgetThemeLocal = "light" | "dark" | "auto";
@@ -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.36","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.38","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"}