@vite-plugin-opencode-assistant/components 1.0.13 → 1.0.14

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 (31) 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-inspector.js +1 -4
  4. package/es/open-code-widget/composables/use-selection.js +1 -6
  5. package/es/open-code-widget/src/components/Frame-sfc.css +1 -1
  6. package/es/open-code-widget/src/components/Frame.vue.d.ts +4 -2
  7. package/es/open-code-widget/src/components/Frame.vue.js +17 -3
  8. package/es/open-code-widget/src/components/SelectHint-sfc.css +1 -1
  9. package/es/open-code-widget/src/components/SessionList.vue.js +3 -1
  10. package/es/open-code-widget/src/context.d.ts +4 -1
  11. package/es/open-code-widget/src/index.vue.d.ts +34 -28
  12. package/es/open-code-widget/src/index.vue.js +24 -9
  13. package/es/open-code-widget/src/types.d.ts +3 -79
  14. package/lib/@vite-plugin-opencode-assistant/components.cjs.js +52 -30
  15. package/lib/@vite-plugin-opencode-assistant/components.es.js +51 -29
  16. package/lib/components.css +2 -2
  17. package/lib/index.d.ts +1 -1
  18. package/lib/index.js +1 -1
  19. package/lib/open-code-widget/composables/use-inspector.js +2 -5
  20. package/lib/open-code-widget/composables/use-selection.js +2 -7
  21. package/lib/open-code-widget/src/components/Frame-sfc.css +1 -1
  22. package/lib/open-code-widget/src/components/Frame.vue.d.ts +4 -2
  23. package/lib/open-code-widget/src/components/Frame.vue.js +17 -3
  24. package/lib/open-code-widget/src/components/SelectHint-sfc.css +1 -1
  25. package/lib/open-code-widget/src/components/SessionList.vue.js +3 -1
  26. package/lib/open-code-widget/src/context.d.ts +4 -1
  27. package/lib/open-code-widget/src/index.vue.d.ts +34 -28
  28. package/lib/open-code-widget/src/index.vue.js +24 -9
  29. package/lib/open-code-widget/src/types.d.ts +3 -79
  30. package/lib/web-types.json +1 -1
  31. package/package.json +4 -1
@@ -45,12 +45,14 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)({
45
45
  __expose();
46
46
  const iframeRef = (0, import_vue2.ref)(null);
47
47
  const {
48
- loading,
48
+ frameLoading,
49
49
  showEmptyState,
50
+ showError,
50
51
  iframeSource: iframeSrc,
51
52
  emptyStateText,
52
53
  emptyStateActionText,
53
54
  handleEmptyAction,
55
+ handleFrameLoaded,
54
56
  theme,
55
57
  resolvedTheme
56
58
  } = (0, import_context.useOpenCodeWidgetContext)();
@@ -76,6 +78,7 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)({
76
78
  if (iframeRef.value) {
77
79
  iframeRef.value.addEventListener("load", () => {
78
80
  iframeReady.value = true;
81
+ handleFrameLoaded();
79
82
  });
80
83
  }
81
84
  window.addEventListener("message", handleIframeMessage);
@@ -83,7 +86,7 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)({
83
86
  (0, import_vue2.onUnmounted)(() => {
84
87
  window.removeEventListener("message", handleIframeMessage);
85
88
  });
86
- const __returned__ = { iframeRef, loading, showEmptyState, iframeSrc, emptyStateText, emptyStateActionText, handleEmptyAction, theme, resolvedTheme, iframeReady, sendMessageToIframe, syncIframeTheme, handleIframeMessage };
89
+ const __returned__ = { iframeRef, frameLoading, showEmptyState, showError, iframeSrc, emptyStateText, emptyStateActionText, handleEmptyAction, handleFrameLoaded, theme, resolvedTheme, iframeReady, sendMessageToIframe, syncIframeTheme, handleIframeMessage };
87
90
  Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
88
91
  return __returned__;
89
92
  }
@@ -149,7 +152,7 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
149
152
  (0, import_vue3.createElementVNode)(
150
153
  "div",
151
154
  {
152
- class: (0, import_vue3.normalizeClass)(["opencode-loading-overlay", { visible: $setup.loading }])
155
+ class: (0, import_vue3.normalizeClass)(["opencode-loading-overlay", { visible: $setup.frameLoading }])
153
156
  },
154
157
  [
155
158
  (0, import_vue3.renderSlot)(_ctx.$slots, "loading", {}, () => [
@@ -172,6 +175,17 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
172
175
  2
173
176
  /* CLASS */
174
177
  ),
178
+ (0, import_vue3.createElementVNode)(
179
+ "div",
180
+ {
181
+ class: (0, import_vue3.normalizeClass)(["opencode-error-overlay", { visible: $setup.showError }])
182
+ },
183
+ [
184
+ (0, import_vue3.renderSlot)(_ctx.$slots, "error")
185
+ ],
186
+ 2
187
+ /* CLASS */
188
+ ),
175
189
  (0, import_vue3.renderSlot)(_ctx.$slots, "content", {}, () => [
176
190
  (0, import_vue3.createElementVNode)("iframe", {
177
191
  ref: "iframeRef",
@@ -1 +1 @@
1
- .opencode-select-mode-hint{position:fixed;top:20px;left:50%;transform:translate(-50%);padding:14px 20px;background:linear-gradient(135deg,#ef4444,#dc2626);color:#fff;border-radius:12px;font-size:15px;font-weight:500;box-shadow:0 6px 20px rgba(239,68,68,.5),0 0 0 3px rgba(239,68,68,.3);z-index:9999999;display:none;align-items:center;gap:12px;border:2px solid rgba(255,255,255,.3)}.opencode-select-mode-hint.visible{display:flex;animation:slideDown .3s ease,pulseHint 2s ease-in-out infinite}.opencode-hint-shortcut{padding:4px 10px;background:rgba(255,255,255,.25);border-radius:6px;font-size:13px;font-weight:600;border:1px solid rgba(255,255,255,.4)}@keyframes pulseHint{0%,to{box-shadow:0 6px 20px rgba(239,68,68,.5),0 0 0 3px rgba(239,68,68,.3)}50%{box-shadow:0 6px 20px rgba(239,68,68,.6),0 0 0 6px rgba(239,68,68,.4)}}
1
+ .opencode-select-mode-hint{position:fixed;top:20px;left:50%;transform:translate(-50%);padding:10px;background:linear-gradient(135deg,#ef4444,#dc2626);color:#fff;border-radius:12px;font-size:14px;font-weight:500;box-shadow:0 6px 20px rgba(239,68,68,.5),0 0 0 3px rgba(239,68,68,.3);z-index:9999999;display:none;align-items:center;gap:12px;border:1px solid rgba(255,255,255,.3)}.opencode-select-mode-hint.visible{display:flex;animation:slideDown .3s ease,pulseHint 2s ease-in-out infinite}.opencode-hint-shortcut{padding:4px 10px;background:rgba(255,255,255,.25);border-radius:6px;font-size:13px;font-weight:600;border:1px solid rgba(255,255,255,.4)}@keyframes pulseHint{0%,to{box-shadow:0 6px 20px rgba(239,68,68,.5),0 0 0 3px rgba(239,68,68,.3)}50%{box-shadow:0 6px 20px rgba(239,68,68,.6),0 0 0 6px rgba(239,68,68,.4)}}
@@ -33,6 +33,7 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)({
33
33
  sessionListCollapsed: collapsed,
34
34
  sessionItems: sessions,
35
35
  loadingSessionList,
36
+ showSessionListSkeleton,
36
37
  handleCreateSession,
37
38
  handleSelectSession,
38
39
  handleDeleteSession,
@@ -49,9 +50,10 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)({
49
50
  });
50
51
  const showSkeleton = (0, import_vue2.computed)(() => {
51
52
  if (isAnimating.value) return true;
53
+ if (showSessionListSkeleton.value) return true;
52
54
  return false;
53
55
  });
54
- const __returned__ = { collapsed, sessions, loadingSessionList, handleCreateSession, handleSelectSession, handleDeleteSession, sessionKey, isAnimating, get animTimer() {
56
+ const __returned__ = { collapsed, sessions, loadingSessionList, showSessionListSkeleton, handleCreateSession, handleSelectSession, handleDeleteSession, sessionKey, isAnimating, get animTimer() {
55
57
  return animTimer;
56
58
  }, set animTimer(v) {
57
59
  animTimer = v;
@@ -10,9 +10,11 @@ export interface OpenCodeWidgetContext {
10
10
  selectEnabled: Ref<boolean>;
11
11
  sessionListCollapsed: Ref<boolean>;
12
12
  sessionKey: Ref<string>;
13
- loading: Ref<boolean>;
13
+ frameLoading: Ref<boolean>;
14
14
  loadingSessionList: Ref<boolean | undefined>;
15
+ showSessionListSkeleton: Ref<boolean>;
15
16
  showEmptyState: Ref<boolean>;
17
+ showError: Ref<boolean>;
16
18
  emptyStateText: Ref<string>;
17
19
  emptyStateActionText: Ref<string>;
18
20
  showClearAll: Ref<boolean>;
@@ -40,6 +42,7 @@ export interface OpenCodeWidgetContext {
40
42
  source: OpenCodeRemoveSelectedPayload["source"];
41
43
  }) => void;
42
44
  handleClearSelectedNodes: () => void;
45
+ handleFrameLoaded: () => void;
43
46
  }
44
47
  export declare function provideOpenCodeWidgetContext(context: OpenCodeWidgetContext): void;
45
48
  export declare function useOpenCodeWidgetContext(): OpenCodeWidgetContext;
@@ -1,5 +1,5 @@
1
1
  import type { OpenCodeWidgetProps } from "./types";
2
- declare var __VLS_4: {}, __VLS_12: {}, __VLS_14: {}, __VLS_16: {}, __VLS_21: {}, __VLS_26: {}, __VLS_28: {}, __VLS_30: {};
2
+ declare var __VLS_4: {}, __VLS_12: {}, __VLS_14: {}, __VLS_16: {}, __VLS_21: {}, __VLS_26: {}, __VLS_28: {}, __VLS_30: {}, __VLS_32: {};
3
3
  type __VLS_Slots = {} & {
4
4
  'button-icon'?: (props: typeof __VLS_4) => any;
5
5
  } & {
@@ -15,69 +15,75 @@ type __VLS_Slots = {} & {
15
15
  } & {
16
16
  loading?: (props: typeof __VLS_28) => any;
17
17
  } & {
18
- content?: (props: typeof __VLS_30) => any;
18
+ error?: (props: typeof __VLS_30) => any;
19
+ } & {
20
+ content?: (props: typeof __VLS_32) => any;
19
21
  };
20
22
  declare const __VLS_component: import("vue").DefineComponent<OpenCodeWidgetProps, {
21
23
  showNotification: (message: string, duration?: number) => void;
22
24
  showConfirmDialog: (message: string) => Promise<boolean>;
23
25
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
26
+ close: () => any;
27
+ toggle: (value: boolean) => any;
28
+ "create-session": () => any;
24
29
  "update:open": (value: boolean) => any;
30
+ "delete-session": (session: import("@vite-plugin-opencode-assistant/shared").OpenCodeWidgetSession) => any;
25
31
  "update:selectMode": (value: boolean) => any;
26
32
  "update:sessionListCollapsed": (value: boolean) => any;
27
33
  "update:currentSessionId": (value: string | null) => any;
28
- "update:selectedElements": (value: import("./types").OpenCodeSelectedElement[]) => any;
29
- "update:theme": (value: import("./types").OpenCodeWidgetTheme) => any;
30
- toggle: (value: boolean) => any;
31
- close: () => any;
34
+ "update:selectedElements": (value: import("@vite-plugin-opencode-assistant/shared").OpenCodeSelectedElement[]) => any;
35
+ "update:theme": (value: import("@vite-plugin-opencode-assistant/shared").OpenCodeWidgetTheme) => any;
32
36
  "toggle-session-list": (value: boolean) => any;
33
37
  "toggle-select-mode": (value: boolean) => any;
34
- "toggle-theme": (value: import("./types").OpenCodeWidgetTheme) => any;
35
- "create-session": () => any;
36
- "select-session": (session: import("./types").OpenCodeWidgetSession) => any;
37
- "delete-session": (session: import("./types").OpenCodeWidgetSession) => any;
38
- "click-selected-node": (element: import("./types").OpenCodeSelectedElement) => any;
39
- "remove-selected-node": (payload: import("./types").OpenCodeRemoveSelectedPayload) => any;
38
+ "toggle-theme": (value: import("@vite-plugin-opencode-assistant/shared").OpenCodeWidgetTheme) => any;
39
+ "select-session": (session: import("@vite-plugin-opencode-assistant/shared").OpenCodeWidgetSession) => any;
40
+ "click-selected-node": (element: import("@vite-plugin-opencode-assistant/shared").OpenCodeSelectedElement) => any;
41
+ "remove-selected-node": (payload: import("@vite-plugin-opencode-assistant/shared").OpenCodeRemoveSelectedPayload) => any;
40
42
  "clear-selected-nodes": () => any;
41
43
  "empty-action": () => any;
44
+ "frame-loaded": () => any;
42
45
  }, string, import("vue").PublicProps, Readonly<OpenCodeWidgetProps> & Readonly<{
46
+ onClose?: (() => any) | undefined;
47
+ onToggle?: ((value: boolean) => any) | undefined;
48
+ "onCreate-session"?: (() => any) | undefined;
43
49
  "onUpdate:open"?: ((value: boolean) => any) | undefined;
50
+ "onDelete-session"?: ((session: import("@vite-plugin-opencode-assistant/shared").OpenCodeWidgetSession) => any) | undefined;
44
51
  "onUpdate:selectMode"?: ((value: boolean) => any) | undefined;
45
52
  "onUpdate:sessionListCollapsed"?: ((value: boolean) => any) | undefined;
46
53
  "onUpdate:currentSessionId"?: ((value: string | null) => any) | undefined;
47
- "onUpdate:selectedElements"?: ((value: import("./types").OpenCodeSelectedElement[]) => any) | undefined;
48
- "onUpdate:theme"?: ((value: import("./types").OpenCodeWidgetTheme) => any) | undefined;
49
- onToggle?: ((value: boolean) => any) | undefined;
50
- onClose?: (() => any) | undefined;
54
+ "onUpdate:selectedElements"?: ((value: import("@vite-plugin-opencode-assistant/shared").OpenCodeSelectedElement[]) => any) | undefined;
55
+ "onUpdate:theme"?: ((value: import("@vite-plugin-opencode-assistant/shared").OpenCodeWidgetTheme) => any) | undefined;
51
56
  "onToggle-session-list"?: ((value: boolean) => any) | undefined;
52
57
  "onToggle-select-mode"?: ((value: boolean) => any) | undefined;
53
- "onToggle-theme"?: ((value: import("./types").OpenCodeWidgetTheme) => any) | undefined;
54
- "onCreate-session"?: (() => any) | undefined;
55
- "onSelect-session"?: ((session: import("./types").OpenCodeWidgetSession) => any) | undefined;
56
- "onDelete-session"?: ((session: import("./types").OpenCodeWidgetSession) => any) | undefined;
57
- "onClick-selected-node"?: ((element: import("./types").OpenCodeSelectedElement) => any) | undefined;
58
- "onRemove-selected-node"?: ((payload: import("./types").OpenCodeRemoveSelectedPayload) => any) | undefined;
58
+ "onToggle-theme"?: ((value: import("@vite-plugin-opencode-assistant/shared").OpenCodeWidgetTheme) => any) | undefined;
59
+ "onSelect-session"?: ((session: import("@vite-plugin-opencode-assistant/shared").OpenCodeWidgetSession) => any) | undefined;
60
+ "onClick-selected-node"?: ((element: import("@vite-plugin-opencode-assistant/shared").OpenCodeSelectedElement) => any) | undefined;
61
+ "onRemove-selected-node"?: ((payload: import("@vite-plugin-opencode-assistant/shared").OpenCodeRemoveSelectedPayload) => any) | undefined;
59
62
  "onClear-selected-nodes"?: (() => any) | undefined;
60
63
  "onEmpty-action"?: (() => any) | undefined;
64
+ "onFrame-loaded"?: (() => any) | undefined;
61
65
  }>, {
62
- title: string;
63
- loading: boolean;
66
+ frameLoading: boolean;
64
67
  showEmptyState: boolean;
68
+ showError: boolean;
65
69
  emptyStateText: string;
66
70
  emptyStateActionText: string;
67
- theme: import("./types").OpenCodeWidgetTheme;
71
+ theme: import("@vite-plugin-opencode-assistant/shared").OpenCodeWidgetTheme;
68
72
  iframeSrc: string;
73
+ title: string;
69
74
  sessionListCollapsed: boolean;
70
75
  selectMode: boolean;
71
76
  selectEnabled: boolean;
72
77
  selectShortcutLabel: string;
73
78
  showClearAll: boolean;
79
+ showSessionListSkeleton: boolean;
74
80
  sessionKey: string;
75
- sessions: import("./types").OpenCodeWidgetSession[];
81
+ sessions: import("@vite-plugin-opencode-assistant/shared").OpenCodeWidgetSession[];
76
82
  open: boolean;
77
83
  hotkeyLabel: string;
78
- position: import("./types").OpenCodeWidgetPosition;
84
+ position: import("@vite-plugin-opencode-assistant/shared").OpenCodeWidgetPosition;
79
85
  currentSessionId: string | null;
80
- selectedElements: import("./types").OpenCodeSelectedElement[];
86
+ selectedElements: import("@vite-plugin-opencode-assistant/shared").OpenCodeSelectedElement[];
81
87
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
82
88
  declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
83
89
  export default _default;
@@ -77,19 +77,21 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
77
77
  selectMode: { type: Boolean, required: false, default: false },
78
78
  sessionListCollapsed: { type: Boolean, required: false, default: true },
79
79
  sessionKey: { type: String, required: false, default: "id" },
80
- loading: { type: Boolean, required: false, default: false },
80
+ frameLoading: { type: Boolean, required: false, default: false },
81
81
  loadingSessionList: { type: Boolean, required: false },
82
+ showSessionListSkeleton: { type: Boolean, required: false, default: false },
82
83
  showEmptyState: { type: Boolean, required: false, default: false },
84
+ showError: { type: Boolean, required: false, default: false },
85
+ emptyStateText: { type: String, required: false, default: "\u5F53\u524D\u9879\u76EE\u6682\u65E0\u4F1A\u8BDD" },
86
+ emptyStateActionText: { type: String, required: false, default: "\u7ACB\u5373\u521B\u5EFA" },
83
87
  iframeSrc: { type: String, required: false, default: "" },
84
88
  sessions: { type: Array, required: false, default: () => [] },
85
89
  currentSessionId: { type: [String, null], required: false, default: null },
86
90
  selectedElements: { type: Array, required: false, default: () => [] },
87
91
  showClearAll: { type: Boolean, required: false, default: true },
88
- selectEnabled: { type: Boolean, required: false, default: true },
89
- emptyStateText: { type: String, required: false, default: "\u5F53\u524D\u9879\u76EE\u6682\u65E0\u4F1A\u8BDD" },
90
- emptyStateActionText: { type: String, required: false, default: "\u7ACB\u5373\u521B\u5EFA" }
92
+ selectEnabled: { type: Boolean, required: false, default: true }
91
93
  },
92
- emits: ["update:open", "update:selectMode", "update:sessionListCollapsed", "update:currentSessionId", "update:selectedElements", "update:theme", "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"],
94
+ emits: ["update:open", "update:selectMode", "update:sessionListCollapsed", "update:currentSessionId", "update:selectedElements", "update:theme", "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"],
93
95
  setup(__props, { expose: __expose, emit: __emit }) {
94
96
  const props = __props;
95
97
  const emit = __emit;
@@ -123,6 +125,9 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
123
125
  dialogVisible.value = false;
124
126
  if (dialogResolve) dialogResolve(false);
125
127
  };
128
+ const handleFrameLoaded = () => {
129
+ emit("frame-loaded");
130
+ };
126
131
  __expose({
127
132
  showNotification,
128
133
  showConfirmDialog
@@ -235,9 +240,11 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
235
240
  selectEnabled: (0, import_vue2.toRef)(props, "selectEnabled"),
236
241
  sessionListCollapsed: localSessionListCollapsed,
237
242
  sessionKey: (0, import_vue2.toRef)(props, "sessionKey"),
238
- loading: (0, import_vue2.toRef)(props, "loading"),
243
+ frameLoading: (0, import_vue2.toRef)(props, "frameLoading"),
239
244
  loadingSessionList: (0, import_vue2.toRef)(props, "loadingSessionList"),
245
+ showSessionListSkeleton: (0, import_vue2.toRef)(props, "showSessionListSkeleton"),
240
246
  showEmptyState: (0, import_vue2.toRef)(props, "showEmptyState"),
247
+ showError: (0, import_vue2.toRef)(props, "showError"),
241
248
  emptyStateText: (0, import_vue2.toRef)(props, "emptyStateText"),
242
249
  emptyStateActionText: (0, import_vue2.toRef)(props, "emptyStateActionText"),
243
250
  showClearAll: (0, import_vue2.toRef)(props, "showClearAll"),
@@ -260,7 +267,8 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
260
267
  handleToggleSelectMode,
261
268
  handleClickSelectedNode,
262
269
  handleRemoveSelectedNode: (payload) => handleRemoveSelectedNode(payload.item, payload.index, payload.source),
263
- handleClearSelectedNodes
270
+ handleClearSelectedNodes,
271
+ handleFrameLoaded
264
272
  });
265
273
  const __returned__ = { props, emit, slots, notificationMessage, notificationVisible, get notificationTimer() {
266
274
  return notificationTimer;
@@ -270,7 +278,7 @@ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProp
270
278
  return dialogResolve;
271
279
  }, set dialogResolve(v) {
272
280
  dialogResolve = v;
273
- }, showConfirmDialog, handleDialogConfirm, handleDialogCancel, localSessionListCollapsed, 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, Frame: import_Frame_vue.default, Header: import_Header_vue.default, SelectHint: import_SelectHint_vue.default, SelectedBubbles: import_SelectedBubbles_vue.default, SelectedNodes: import_SelectedNodes_vue.default, SessionList: import_SessionList_vue.default, Trigger: import_Trigger_vue.default };
281
+ }, showConfirmDialog, handleDialogConfirm, handleDialogCancel, handleFrameLoaded, localSessionListCollapsed, 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, Frame: import_Frame_vue.default, Header: import_Header_vue.default, SelectHint: import_SelectHint_vue.default, SelectedBubbles: import_SelectedBubbles_vue.default, SelectedNodes: import_SelectedNodes_vue.default, SessionList: import_SessionList_vue.default, Trigger: import_Trigger_vue.default };
274
282
  Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
275
283
  return __returned__;
276
284
  }
@@ -403,12 +411,19 @@ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
403
411
  ]),
404
412
  key: "1"
405
413
  } : void 0,
414
+ $setup.slots.error ? {
415
+ name: "error",
416
+ fn: (0, import_vue3.withCtx)(() => [
417
+ (0, import_vue3.renderSlot)(_ctx.$slots, "error")
418
+ ]),
419
+ key: "2"
420
+ } : void 0,
406
421
  $setup.slots.content ? {
407
422
  name: "content",
408
423
  fn: (0, import_vue3.withCtx)(() => [
409
424
  (0, import_vue3.renderSlot)(_ctx.$slots, "content")
410
425
  ]),
411
- key: "2"
426
+ key: "3"
412
427
  } : void 0
413
428
  ]),
414
429
  1024
@@ -1,79 +1,3 @@
1
- export type OpenCodeWidgetPosition = "bottom-right" | "bottom-left" | "top-right" | "top-left";
2
- export type OpenCodeWidgetTheme = "light" | "dark" | "auto";
3
- export interface OpenCodeWidgetSession {
4
- id: string;
5
- title?: string;
6
- updatedAt?: string | number | Date;
7
- meta?: string;
8
- directory?: string;
9
- }
10
- export interface OpenCodeSelectedElement {
11
- filePath: string | null;
12
- line: number | null;
13
- column: number | null;
14
- innerText: string;
15
- description: string;
16
- }
17
- export interface OpenCodeWidgetProps {
18
- position?: OpenCodeWidgetPosition;
19
- open?: boolean;
20
- theme?: OpenCodeWidgetTheme;
21
- title?: string;
22
- hotkeyLabel?: string;
23
- selectShortcutLabel?: string;
24
- selectMode?: boolean;
25
- sessionListCollapsed?: boolean;
26
- sessionKey?: string;
27
- loading?: boolean;
28
- loadingSessionList?: boolean;
29
- showEmptyState?: boolean;
30
- iframeSrc?: string;
31
- sessions?: OpenCodeWidgetSession[];
32
- currentSessionId?: string | null;
33
- selectedElements?: OpenCodeSelectedElement[];
34
- showClearAll?: boolean;
35
- selectEnabled?: boolean;
36
- emptyStateText?: string;
37
- emptyStateActionText?: string;
38
- }
39
- export type OpenCodeWidgetEmits = {
40
- (e: "update:open", value: boolean): void;
41
- (e: "update:selectMode", value: boolean): void;
42
- (e: "update:sessionListCollapsed", value: boolean): void;
43
- (e: "update:currentSessionId", value: string | null): void;
44
- (e: "update:selectedElements", value: OpenCodeSelectedElement[]): void;
45
- (e: "update:theme", value: OpenCodeWidgetTheme): void;
46
- (e: "toggle", value: boolean): void;
47
- (e: "close"): void;
48
- (e: "toggle-session-list", value: boolean): void;
49
- (e: "toggle-select-mode", value: boolean): void;
50
- (e: "toggle-theme", value: OpenCodeWidgetTheme): void;
51
- (e: "create-session"): void;
52
- (e: "select-session", session: OpenCodeWidgetSession): void;
53
- (e: "delete-session", session: OpenCodeWidgetSession): void;
54
- (e: "click-selected-node", element: OpenCodeSelectedElement): void;
55
- (e: "remove-selected-node", payload: OpenCodeRemoveSelectedPayload): void;
56
- (e: "clear-selected-nodes"): void;
57
- (e: "empty-action"): void;
58
- };
59
- export interface OpenCodeRemoveSelectedPayload {
60
- element: OpenCodeSelectedElement;
61
- index: number;
62
- source: "panel" | "bubble";
63
- }
64
- export interface OpenCodeWidgetSessionItem {
65
- key: string;
66
- id: string;
67
- title: string;
68
- meta: string;
69
- active: boolean;
70
- session: OpenCodeWidgetSession;
71
- [key: string]: any;
72
- }
73
- export interface OpenCodeSelectedElementItem {
74
- key: string;
75
- description: string;
76
- bubbleFileText: string;
77
- panelFileText: string;
78
- element: OpenCodeSelectedElement;
79
- }
1
+ export type { OpenCodeWidgetPosition, OpenCodeWidgetTheme, OpenCodeWidgetSession, OpenCodeSelectedElement, OpenCodeRemoveSelectedPayload, OpenCodeWidgetSessionItem, OpenCodeSelectedElementItem, OpenCodeWidgetProps, OpenCodeWidgetEmits, } from "@vite-plugin-opencode-assistant/shared";
2
+ export type OpenCodeWidgetPositionLocal = "bottom-right" | "bottom-left" | "top-right" | "top-left";
3
+ 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.13","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":"`'light'`","description":"主题模式","value":{"type":"`'light' | 'dark' | 'auto'`","kind":"expression"}},{"name":"","default":"`'AI 助手'`","description":"助手头部显示的标题","value":{"type":"`string`","kind":"expression"}},{"name":"","default":"`''`","description":"Web UI 的 URL 来源","value":{"type":"`string`","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":"`OpenCodeWidgetSessionItem[]`","kind":"expression"}},{"name":"","default":"`null`","description":"当前选中的会话 ID","value":{"type":"`string | null`","kind":"expression"}},{"name":"","default":"`[]`","description":"已选中的元素列表","value":{"type":"`OpenCodeSelectedElement[]`","kind":"expression"}}],"events":[{"name":"`update:open`","description":"当挂件打开或关闭时触发","arguments":[{"name":"open","type":"en"},{"name":"boolean"}]},{"name":"","description":"点击触发挂件开关","arguments":[{"name":"open","type":"en"},{"name":"boolean"}]},{"name":"","description":"点击关闭按钮时触发","arguments":[]},{"name":"`toggle-select-mode`","description":"点击选择模式切换按钮时触发","arguments":[{"name":"mode","type":"de"},{"name":"boolean"}]},{"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":"`create-session`","description":"点击创建新会话时触发","arguments":[]},{"name":"`select-session`","description":"选中某个历史会话时触发","arguments":[{"name":"session","type":"on"},{"name":"OpenCodeWidgetSessionItem"}]},{"name":"`delete-session`","description":"删除某个历史会话时触发","arguments":[{"name":"session","type":"on"},{"name":"OpenCodeWidgetSessionItem"}]}]}],"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.14","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":"`'light'`","description":"主题模式","value":{"type":"`'light' | 'dark' | 'auto'`","kind":"expression"}},{"name":"","default":"`'AI 助手'`","description":"助手头部显示的标题","value":{"type":"`string`","kind":"expression"}},{"name":"","default":"`''`","description":"Web UI 的 URL 来源","value":{"type":"`string`","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":"`OpenCodeWidgetSessionItem[]`","kind":"expression"}},{"name":"","default":"`null`","description":"当前选中的会话 ID","value":{"type":"`string | null`","kind":"expression"}},{"name":"","default":"`[]`","description":"已选中的元素列表","value":{"type":"`OpenCodeSelectedElement[]`","kind":"expression"}}],"events":[{"name":"`update:open`","description":"当挂件打开或关闭时触发","arguments":[{"name":"open","type":"en"},{"name":"boolean"}]},{"name":"","description":"点击触发挂件开关","arguments":[{"name":"open","type":"en"},{"name":"boolean"}]},{"name":"","description":"点击关闭按钮时触发","arguments":[]},{"name":"`toggle-select-mode`","description":"点击选择模式切换按钮时触发","arguments":[{"name":"mode","type":"de"},{"name":"boolean"}]},{"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":"`create-session`","description":"点击创建新会话时触发","arguments":[]},{"name":"`select-session`","description":"选中某个历史会话时触发","arguments":[{"name":"session","type":"on"},{"name":"OpenCodeWidgetSessionItem"}]},{"name":"`delete-session`","description":"删除某个历史会话时触发","arguments":[{"name":"session","type":"on"},{"name":"OpenCodeWidgetSessionItem"}]}]}],"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.13",
3
+ "version": "1.0.14",
4
4
  "description": "Reusable OpenCode widget components built with Pagoda CLI",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
@@ -29,6 +29,9 @@
29
29
  "peerDependencies": {
30
30
  "vue": "^3.5.0"
31
31
  },
32
+ "dependencies": {
33
+ "@vite-plugin-opencode-assistant/shared": "1.0.14"
34
+ },
32
35
  "devDependencies": {
33
36
  "@vitejs/plugin-vue": "^6.0.5",
34
37
  "@vue/test-utils": "^2.4.6",