@vite-plugin-opencode-assistant/components 1.0.5

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 (105) hide show
  1. package/es/env.d.ts +10 -0
  2. package/es/index.d.ts +6 -0
  3. package/es/index.js +21 -0
  4. package/es/open-code-widget/composables/use-inspector.d.ts +52 -0
  5. package/es/open-code-widget/composables/use-inspector.js +188 -0
  6. package/es/open-code-widget/composables/use-selection.d.ts +19 -0
  7. package/es/open-code-widget/composables/use-selection.js +142 -0
  8. package/es/open-code-widget/composables/use-session.d.ts +16 -0
  9. package/es/open-code-widget/composables/use-session.js +68 -0
  10. package/es/open-code-widget/composables/use-widget.d.ts +24 -0
  11. package/es/open-code-widget/composables/use-widget.js +44 -0
  12. package/es/open-code-widget/index.d.ts +3 -0
  13. package/es/open-code-widget/index.js +6 -0
  14. package/es/open-code-widget/src/components/Frame-sfc.css +1 -0
  15. package/es/open-code-widget/src/components/Frame.vue.d.ts +16 -0
  16. package/es/open-code-widget/src/components/Frame.vue.js +120 -0
  17. package/es/open-code-widget/src/components/Header-sfc.css +1 -0
  18. package/es/open-code-widget/src/components/Header.vue.d.ts +16 -0
  19. package/es/open-code-widget/src/components/Header.vue.js +140 -0
  20. package/es/open-code-widget/src/components/SelectHint-sfc.css +1 -0
  21. package/es/open-code-widget/src/components/SelectHint.vue.d.ts +2 -0
  22. package/es/open-code-widget/src/components/SelectHint.vue.js +46 -0
  23. package/es/open-code-widget/src/components/SelectedBubbles-sfc.css +1 -0
  24. package/es/open-code-widget/src/components/SelectedBubbles.vue.d.ts +2 -0
  25. package/es/open-code-widget/src/components/SelectedBubbles.vue.js +84 -0
  26. package/es/open-code-widget/src/components/SelectedNodes-sfc.css +1 -0
  27. package/es/open-code-widget/src/components/SelectedNodes.vue.d.ts +2 -0
  28. package/es/open-code-widget/src/components/SelectedNodes.vue.js +103 -0
  29. package/es/open-code-widget/src/components/SessionList-sfc.css +1 -0
  30. package/es/open-code-widget/src/components/SessionList.vue.d.ts +12 -0
  31. package/es/open-code-widget/src/components/SessionList.vue.js +209 -0
  32. package/es/open-code-widget/src/components/Trigger-sfc.css +1 -0
  33. package/es/open-code-widget/src/components/Trigger.vue.d.ts +12 -0
  34. package/es/open-code-widget/src/components/Trigger.vue.js +66 -0
  35. package/es/open-code-widget/src/context.d.ts +42 -0
  36. package/es/open-code-widget/src/context.js +16 -0
  37. package/es/open-code-widget/src/index-sfc.css +1 -0
  38. package/es/open-code-widget/src/index.vue.d.ts +83 -0
  39. package/es/open-code-widget/src/index.vue.js +464 -0
  40. package/es/open-code-widget/src/types.d.ts +74 -0
  41. package/es/open-code-widget/src/types.js +0 -0
  42. package/es/open-code-widget/style/index-pure.d.ts +0 -0
  43. package/es/open-code-widget/style/index-pure.js +0 -0
  44. package/es/open-code-widget/style/index.d.ts +0 -0
  45. package/es/open-code-widget/style/index.js +0 -0
  46. package/es/open-code-widget/style/less-pure.d.ts +0 -0
  47. package/es/open-code-widget/style/less-pure.js +0 -0
  48. package/es/open-code-widget/style/less.d.ts +0 -0
  49. package/es/open-code-widget/style/less.js +0 -0
  50. package/lib/@vite-plugin-opencode-assistant/components.cjs.js +1322 -0
  51. package/lib/@vite-plugin-opencode-assistant/components.es.js +1315 -0
  52. package/lib/components.css +9 -0
  53. package/lib/env.d.ts +10 -0
  54. package/lib/index.css +0 -0
  55. package/lib/index.d.ts +6 -0
  56. package/lib/index.js +50 -0
  57. package/lib/index.less +0 -0
  58. package/lib/open-code-widget/composables/use-inspector.d.ts +52 -0
  59. package/lib/open-code-widget/composables/use-inspector.js +207 -0
  60. package/lib/open-code-widget/composables/use-selection.d.ts +19 -0
  61. package/lib/open-code-widget/composables/use-selection.js +161 -0
  62. package/lib/open-code-widget/composables/use-session.d.ts +16 -0
  63. package/lib/open-code-widget/composables/use-session.js +87 -0
  64. package/lib/open-code-widget/composables/use-widget.d.ts +24 -0
  65. package/lib/open-code-widget/composables/use-widget.js +63 -0
  66. package/lib/open-code-widget/index.d.ts +3 -0
  67. package/lib/open-code-widget/index.js +36 -0
  68. package/lib/open-code-widget/src/components/Frame-sfc.css +1 -0
  69. package/lib/open-code-widget/src/components/Frame.vue.d.ts +16 -0
  70. package/lib/open-code-widget/src/components/Frame.vue.js +139 -0
  71. package/lib/open-code-widget/src/components/Header-sfc.css +1 -0
  72. package/lib/open-code-widget/src/components/Header.vue.d.ts +16 -0
  73. package/lib/open-code-widget/src/components/Header.vue.js +159 -0
  74. package/lib/open-code-widget/src/components/SelectHint-sfc.css +1 -0
  75. package/lib/open-code-widget/src/components/SelectHint.vue.d.ts +2 -0
  76. package/lib/open-code-widget/src/components/SelectHint.vue.js +65 -0
  77. package/lib/open-code-widget/src/components/SelectedBubbles-sfc.css +1 -0
  78. package/lib/open-code-widget/src/components/SelectedBubbles.vue.d.ts +2 -0
  79. package/lib/open-code-widget/src/components/SelectedBubbles.vue.js +103 -0
  80. package/lib/open-code-widget/src/components/SelectedNodes-sfc.css +1 -0
  81. package/lib/open-code-widget/src/components/SelectedNodes.vue.d.ts +2 -0
  82. package/lib/open-code-widget/src/components/SelectedNodes.vue.js +122 -0
  83. package/lib/open-code-widget/src/components/SessionList-sfc.css +1 -0
  84. package/lib/open-code-widget/src/components/SessionList.vue.d.ts +12 -0
  85. package/lib/open-code-widget/src/components/SessionList.vue.js +228 -0
  86. package/lib/open-code-widget/src/components/Trigger-sfc.css +1 -0
  87. package/lib/open-code-widget/src/components/Trigger.vue.d.ts +12 -0
  88. package/lib/open-code-widget/src/components/Trigger.vue.js +85 -0
  89. package/lib/open-code-widget/src/context.d.ts +42 -0
  90. package/lib/open-code-widget/src/context.js +35 -0
  91. package/lib/open-code-widget/src/index-sfc.css +1 -0
  92. package/lib/open-code-widget/src/index.vue.d.ts +83 -0
  93. package/lib/open-code-widget/src/index.vue.js +491 -0
  94. package/lib/open-code-widget/src/types.d.ts +74 -0
  95. package/lib/open-code-widget/src/types.js +15 -0
  96. package/lib/open-code-widget/style/index-pure.d.ts +0 -0
  97. package/lib/open-code-widget/style/index-pure.js +0 -0
  98. package/lib/open-code-widget/style/index.d.ts +0 -0
  99. package/lib/open-code-widget/style/index.js +0 -0
  100. package/lib/open-code-widget/style/less-pure.d.ts +0 -0
  101. package/lib/open-code-widget/style/less-pure.js +0 -0
  102. package/lib/open-code-widget/style/less.d.ts +0 -0
  103. package/lib/open-code-widget/style/less.js +0 -0
  104. package/lib/web-types.json +1 -0
  105. package/package.json +46 -0
@@ -0,0 +1,491 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __defProps = Object.defineProperties;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
8
+ var __getProtoOf = Object.getPrototypeOf;
9
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
10
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
11
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
12
+ var __spreadValues = (a, b) => {
13
+ for (var prop in b || (b = {}))
14
+ if (__hasOwnProp.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ if (__getOwnPropSymbols)
17
+ for (var prop of __getOwnPropSymbols(b)) {
18
+ if (__propIsEnum.call(b, prop))
19
+ __defNormalProp(a, prop, b[prop]);
20
+ }
21
+ return a;
22
+ };
23
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
24
+ var __export = (target, all) => {
25
+ for (var name in all)
26
+ __defProp(target, name, { get: all[name], enumerable: true });
27
+ };
28
+ var __copyProps = (to, from, except, desc) => {
29
+ if (from && typeof from === "object" || typeof from === "function") {
30
+ for (let key of __getOwnPropNames(from))
31
+ if (!__hasOwnProp.call(to, key) && key !== except)
32
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
33
+ }
34
+ return to;
35
+ };
36
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
37
+ // If the importer is in node compatibility mode or this is not an ESM
38
+ // file that has been converted to a CommonJS file using a Babel-
39
+ // compatible transform (i.e. "__esModule" has not been set), then set
40
+ // "default" to the CommonJS "module.exports" for node compatibility.
41
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
42
+ mod
43
+ ));
44
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
45
+ var index_vue_exports = {};
46
+ __export(index_vue_exports, {
47
+ default: () => index_vue_default
48
+ });
49
+ module.exports = __toCommonJS(index_vue_exports);
50
+ var import_index_sfc = require("./index-sfc.css");
51
+ var import_vue = require("vue");
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"));
55
+ var import_SelectHint_vue = __toESM(require("./components/SelectHint.vue.js"));
56
+ var import_SelectedBubbles_vue = __toESM(require("./components/SelectedBubbles.vue.js"));
57
+ var import_SelectedNodes_vue = __toESM(require("./components/SelectedNodes.vue.js"));
58
+ var import_SessionList_vue = __toESM(require("./components/SessionList.vue.js"));
59
+ var import_Trigger_vue = __toESM(require("./components/Trigger.vue.js"));
60
+ var import_use_selection = require("../composables/use-selection");
61
+ var import_use_session = require("../composables/use-session");
62
+ var import_use_widget = require("../composables/use-widget");
63
+ var import_use_inspector = require("../composables/use-inspector");
64
+ var import_context = require("./context");
65
+ var import_vue3 = require("vue");
66
+ const __vue_sfc__ = /* @__PURE__ */ (0, import_vue.defineComponent)(__spreadProps(__spreadValues({}, {
67
+ name: "OpencodeWidget"
68
+ }), {
69
+ __name: "index",
70
+ props: {
71
+ position: { type: String, required: false, default: "bottom-right" },
72
+ open: { type: Boolean, required: false, default: false },
73
+ theme: { type: String, required: false, default: "light" },
74
+ title: { type: String, required: false, default: "AI \u52A9\u624B" },
75
+ hotkeyLabel: { type: String, required: false, default: "Ctrl+K" },
76
+ selectShortcutLabel: { type: String, required: false, default: "\u6309 ESC \u6216 Ctrl+P \u9000\u51FA" },
77
+ selectMode: { type: Boolean, required: false, default: false },
78
+ sessionListCollapsed: { type: Boolean, required: false, default: true },
79
+ loading: { type: Boolean, required: false, default: false },
80
+ loadingSessionList: { type: Boolean, required: false },
81
+ showEmptyState: { type: Boolean, required: false, default: false },
82
+ iframeSrc: { type: String, required: false, default: "" },
83
+ sessions: { type: Array, required: false, default: () => [] },
84
+ currentSessionId: { type: [String, null], required: false, default: null },
85
+ selectedElements: { type: Array, required: false, default: () => [] },
86
+ showClearAll: { type: Boolean, required: false, default: true },
87
+ selectEnabled: { type: Boolean, required: false, default: true },
88
+ emptyStateText: { type: String, required: false, default: "\u5F53\u524D\u9879\u76EE\u6682\u65E0\u4F1A\u8BDD" },
89
+ emptyStateActionText: { type: String, required: false, default: "\u7ACB\u5373\u521B\u5EFA" }
90
+ },
91
+ emits: ["update:open", "update:selectMode", "update:sessionListCollapsed", "update:currentSessionId", "update:selectedElements", "toggle", "close", "toggle-session-list", "toggle-select-mode", "create-session", "select-session", "delete-session", "click-selected-node", "remove-selected-node", "clear-selected-nodes", "empty-action"],
92
+ setup(__props, { expose: __expose, emit: __emit }) {
93
+ const props = __props;
94
+ const emit = __emit;
95
+ const slots = (0, import_vue2.useSlots)();
96
+ const notificationMessage = (0, import_vue2.ref)("");
97
+ const notificationVisible = (0, import_vue2.ref)(false);
98
+ let notificationTimer = null;
99
+ const showNotification = (message, duration = 3e3) => {
100
+ notificationMessage.value = message;
101
+ notificationVisible.value = true;
102
+ if (notificationTimer) clearTimeout(notificationTimer);
103
+ notificationTimer = setTimeout(() => {
104
+ notificationVisible.value = false;
105
+ }, duration);
106
+ };
107
+ const dialogVisible = (0, import_vue2.ref)(false);
108
+ const dialogMessage = (0, import_vue2.ref)("");
109
+ let dialogResolve = null;
110
+ const showConfirmDialog = (message) => {
111
+ dialogMessage.value = message;
112
+ dialogVisible.value = true;
113
+ return new Promise((resolve) => {
114
+ dialogResolve = resolve;
115
+ });
116
+ };
117
+ const handleDialogConfirm = () => {
118
+ dialogVisible.value = false;
119
+ if (dialogResolve) dialogResolve(true);
120
+ };
121
+ const handleDialogCancel = () => {
122
+ dialogVisible.value = false;
123
+ if (dialogResolve) dialogResolve(false);
124
+ };
125
+ __expose({
126
+ showNotification,
127
+ showConfirmDialog
128
+ });
129
+ const localSessionListCollapsed = (0, import_vue2.ref)(props.sessionListCollapsed);
130
+ (0, import_vue2.watch)(
131
+ () => props.sessionListCollapsed,
132
+ (val) => {
133
+ localSessionListCollapsed.value = val;
134
+ }
135
+ );
136
+ const {
137
+ buttonActive,
138
+ containerClasses,
139
+ iframeSource,
140
+ sessionListTitle,
141
+ handleClose,
142
+ handleEmptyAction,
143
+ handleToggle,
144
+ handleToggleSessionList
145
+ } = (0, import_use_widget.useWidget)({
146
+ position: (0, import_vue2.toRef)(props, "position"),
147
+ theme: (0, import_vue2.toRef)(props, "theme"),
148
+ open: (0, import_vue2.toRef)(props, "open"),
149
+ selectMode: (0, import_vue2.toRef)(props, "selectMode"),
150
+ iframeSrc: (0, import_vue2.toRef)(props, "iframeSrc"),
151
+ sessionListCollapsed: localSessionListCollapsed,
152
+ onToggle: (nextOpen) => {
153
+ emit("update:open", nextOpen);
154
+ emit("toggle", nextOpen);
155
+ },
156
+ onToggleSelectMode: (mode) => {
157
+ emit("update:selectMode", mode);
158
+ emit("toggle-select-mode", mode);
159
+ },
160
+ onClose: () => {
161
+ emit("update:open", false);
162
+ emit("close");
163
+ },
164
+ onToggleSessionList: (collapsed) => {
165
+ localSessionListCollapsed.value = collapsed;
166
+ emit("update:sessionListCollapsed", collapsed);
167
+ emit("toggle-session-list", collapsed);
168
+ },
169
+ onEmptyAction: () => {
170
+ emit("empty-action");
171
+ }
172
+ });
173
+ const { sessionItems, handleCreateSession, handleDeleteSession, handleSelectSession } = (0, import_use_session.useSession)({
174
+ sessions: (0, import_vue2.toRef)(props, "sessions"),
175
+ currentSessionId: (0, import_vue2.toRef)(props, "currentSessionId"),
176
+ onCreateSession: () => emit("create-session"),
177
+ onSelectSession: (session) => {
178
+ emit("update:currentSessionId", session.id);
179
+ emit("select-session", session);
180
+ },
181
+ onDeleteSession: (session) => emit("delete-session", session),
182
+ showConfirmDialog
183
+ });
184
+ const {
185
+ bubbleVisible,
186
+ hasSelectedElements,
187
+ selectedElementItems,
188
+ handleClearSelectedNodes,
189
+ handleClickSelectedNode,
190
+ handleRemoveSelectedNode,
191
+ handleToggleSelectMode
192
+ } = (0, import_use_selection.useSelection)({
193
+ selectMode: (0, import_vue2.toRef)(props, "selectMode"),
194
+ selectedElements: (0, import_vue2.toRef)(props, "selectedElements"),
195
+ onToggleSelectMode: (mode) => {
196
+ emit("update:selectMode", mode);
197
+ emit("toggle-select-mode", mode);
198
+ },
199
+ onRemoveSelectedNode: (payload) => {
200
+ emit("remove-selected-node", payload);
201
+ const newElements = [...props.selectedElements];
202
+ newElements.splice(payload.index, 1);
203
+ emit("update:selectedElements", newElements);
204
+ },
205
+ onClearSelectedNodes: () => {
206
+ emit("clear-selected-nodes");
207
+ emit("update:selectedElements", []);
208
+ },
209
+ showConfirmDialog
210
+ });
211
+ const { highlightVisible, highlightStyle, tooltipVisible, tooltipStyle, tooltipContent } = (0, import_use_inspector.useInspector)({
212
+ selectMode: (0, import_vue2.toRef)(props, "selectMode"),
213
+ onAddSelectedNode: (element) => {
214
+ emit("click-selected-node", element);
215
+ },
216
+ onExitSelectMode: () => {
217
+ emit("update:selectMode", false);
218
+ emit("toggle-select-mode", false);
219
+ }
220
+ });
221
+ (0, import_context.provideOpenCodeWidgetContext)({
222
+ theme: (0, import_vue2.toRef)(props, "theme"),
223
+ title: (0, import_vue2.toRef)(props, "title"),
224
+ hotkeyLabel: (0, import_vue2.toRef)(props, "hotkeyLabel"),
225
+ selectShortcutLabel: (0, import_vue2.toRef)(props, "selectShortcutLabel"),
226
+ selectMode: (0, import_vue2.toRef)(props, "selectMode"),
227
+ selectEnabled: (0, import_vue2.toRef)(props, "selectEnabled"),
228
+ sessionListCollapsed: localSessionListCollapsed,
229
+ loading: (0, import_vue2.toRef)(props, "loading"),
230
+ loadingSessionList: (0, import_vue2.toRef)(props, "loadingSessionList"),
231
+ showEmptyState: (0, import_vue2.toRef)(props, "showEmptyState"),
232
+ emptyStateText: (0, import_vue2.toRef)(props, "emptyStateText"),
233
+ emptyStateActionText: (0, import_vue2.toRef)(props, "emptyStateActionText"),
234
+ showClearAll: (0, import_vue2.toRef)(props, "showClearAll"),
235
+ open: (0, import_vue2.toRef)(props, "open"),
236
+ iframeSource,
237
+ buttonActive,
238
+ sessionListTitle,
239
+ bubbleVisible,
240
+ hasSelectedElements,
241
+ sessionItems,
242
+ selectedElementItems,
243
+ handleToggle,
244
+ handleClose,
245
+ handleToggleSessionList,
246
+ handleEmptyAction,
247
+ handleCreateSession,
248
+ handleSelectSession,
249
+ handleDeleteSession,
250
+ handleToggleSelectMode,
251
+ handleClickSelectedNode,
252
+ handleRemoveSelectedNode: (payload) => handleRemoveSelectedNode(payload.item, payload.index, payload.source),
253
+ handleClearSelectedNodes
254
+ });
255
+ const __returned__ = { props, emit, slots, notificationMessage, notificationVisible, get notificationTimer() {
256
+ return notificationTimer;
257
+ }, set notificationTimer(v) {
258
+ notificationTimer = v;
259
+ }, showNotification, dialogVisible, dialogMessage, get dialogResolve() {
260
+ return dialogResolve;
261
+ }, set dialogResolve(v) {
262
+ dialogResolve = v;
263
+ }, showConfirmDialog, handleDialogConfirm, handleDialogCancel, localSessionListCollapsed, buttonActive, containerClasses, iframeSource, sessionListTitle, handleClose, handleEmptyAction, handleToggle, handleToggleSessionList, 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 };
264
+ Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
265
+ return __returned__;
266
+ }
267
+ }));
268
+ const _hoisted_1 = {
269
+ key: 0,
270
+ class: "opencode-notification",
271
+ role: "alert"
272
+ };
273
+ const _hoisted_2 = { class: "opencode-chat-content" };
274
+ const _hoisted_3 = { class: "opencode-tooltip-tag" };
275
+ const _hoisted_4 = { class: "opencode-tooltip-file" };
276
+ const _hoisted_5 = {
277
+ key: 1,
278
+ class: "opencode-dialog-overlay"
279
+ };
280
+ const _hoisted_6 = {
281
+ class: "opencode-dialog",
282
+ role: "alertdialog",
283
+ "aria-modal": "true"
284
+ };
285
+ const _hoisted_7 = { class: "opencode-dialog-content" };
286
+ const _hoisted_8 = { class: "opencode-dialog-message" };
287
+ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
288
+ return (0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)(
289
+ "div",
290
+ {
291
+ class: (0, import_vue3.normalizeClass)($setup.containerClasses)
292
+ },
293
+ [
294
+ (0, import_vue3.createVNode)(
295
+ $setup["Trigger"],
296
+ null,
297
+ (0, import_vue3.createSlots)({
298
+ _: 2
299
+ /* DYNAMIC */
300
+ }, [
301
+ $setup.slots["button-icon"] ? {
302
+ name: "default",
303
+ fn: (0, import_vue3.withCtx)(() => [
304
+ (0, import_vue3.renderSlot)(_ctx.$slots, "button-icon")
305
+ ]),
306
+ key: "0"
307
+ } : void 0
308
+ ]),
309
+ 1024
310
+ /* DYNAMIC_SLOTS */
311
+ ),
312
+ $setup.bubbleVisible ? ((0, import_vue3.openBlock)(), (0, import_vue3.createBlock)($setup["SelectedBubbles"], { key: 0 })) : (0, import_vue3.createCommentVNode)("v-if", true),
313
+ (0, import_vue3.withDirectives)((0, import_vue3.createElementVNode)(
314
+ "div",
315
+ {
316
+ class: (0, import_vue3.normalizeClass)(["opencode-chat", { open: $props.open }])
317
+ },
318
+ [
319
+ (0, import_vue3.createVNode)(
320
+ $setup["Header"],
321
+ null,
322
+ (0, import_vue3.createSlots)({
323
+ _: 2
324
+ /* DYNAMIC */
325
+ }, [
326
+ $setup.slots["session-toggle-icon"] ? {
327
+ name: "session-toggle-icon",
328
+ fn: (0, import_vue3.withCtx)(() => [
329
+ (0, import_vue3.renderSlot)(_ctx.$slots, "session-toggle-icon")
330
+ ]),
331
+ key: "0"
332
+ } : void 0,
333
+ $setup.slots["select-icon"] ? {
334
+ name: "select-icon",
335
+ fn: (0, import_vue3.withCtx)(() => [
336
+ (0, import_vue3.renderSlot)(_ctx.$slots, "select-icon")
337
+ ]),
338
+ key: "1"
339
+ } : void 0,
340
+ $setup.slots["close-icon"] ? {
341
+ name: "close-icon",
342
+ fn: (0, import_vue3.withCtx)(() => [
343
+ (0, import_vue3.renderSlot)(_ctx.$slots, "close-icon")
344
+ ]),
345
+ key: "2"
346
+ } : void 0
347
+ ]),
348
+ 1024
349
+ /* DYNAMIC_SLOTS */
350
+ ),
351
+ (0, import_vue3.createCommentVNode)(" Notification "),
352
+ $setup.notificationVisible ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)(
353
+ "div",
354
+ _hoisted_1,
355
+ (0, import_vue3.toDisplayString)($setup.notificationMessage),
356
+ 1
357
+ /* TEXT */
358
+ )) : (0, import_vue3.createCommentVNode)("v-if", true),
359
+ (0, import_vue3.createElementVNode)("div", _hoisted_2, [
360
+ (0, import_vue3.createVNode)($setup["SessionList"], null, {
361
+ empty: (0, import_vue3.withCtx)(() => [
362
+ (0, import_vue3.renderSlot)(_ctx.$slots, "sessions-empty", {}, () => [
363
+ _cache[0] || (_cache[0] = (0, import_vue3.createElementVNode)(
364
+ "div",
365
+ { class: "opencode-session-empty" },
366
+ "\u6682\u65E0\u4F1A\u8BDD",
367
+ -1
368
+ /* CACHED */
369
+ ))
370
+ ])
371
+ ]),
372
+ _: 3
373
+ /* FORWARDED */
374
+ }),
375
+ (0, import_vue3.createVNode)(
376
+ $setup["Frame"],
377
+ null,
378
+ (0, import_vue3.createSlots)({
379
+ _: 2
380
+ /* DYNAMIC */
381
+ }, [
382
+ $setup.slots["empty-state"] ? {
383
+ name: "empty-state",
384
+ fn: (0, import_vue3.withCtx)(() => [
385
+ (0, import_vue3.renderSlot)(_ctx.$slots, "empty-state")
386
+ ]),
387
+ key: "0"
388
+ } : void 0,
389
+ $setup.slots.loading ? {
390
+ name: "loading",
391
+ fn: (0, import_vue3.withCtx)(() => [
392
+ (0, import_vue3.renderSlot)(_ctx.$slots, "loading")
393
+ ]),
394
+ key: "1"
395
+ } : void 0,
396
+ $setup.slots.content ? {
397
+ name: "content",
398
+ fn: (0, import_vue3.withCtx)(() => [
399
+ (0, import_vue3.renderSlot)(_ctx.$slots, "content")
400
+ ]),
401
+ key: "2"
402
+ } : void 0
403
+ ]),
404
+ 1024
405
+ /* DYNAMIC_SLOTS */
406
+ ),
407
+ (0, import_vue3.createVNode)($setup["SelectedNodes"])
408
+ ])
409
+ ],
410
+ 2
411
+ /* CLASS */
412
+ ), [
413
+ [import_vue3.vShow, !$props.selectMode]
414
+ ]),
415
+ (0, import_vue3.createVNode)($setup["SelectHint"]),
416
+ (0, import_vue3.createCommentVNode)(" Inspector Highlight "),
417
+ (0, import_vue3.withDirectives)((0, import_vue3.createElementVNode)(
418
+ "div",
419
+ {
420
+ class: "opencode-element-highlight",
421
+ style: (0, import_vue3.normalizeStyle)(__spreadValues({
422
+ display: $setup.highlightVisible ? "block" : "none"
423
+ }, $setup.highlightStyle))
424
+ },
425
+ null,
426
+ 4
427
+ /* STYLE */
428
+ ), [
429
+ [import_vue3.vShow, $setup.highlightVisible]
430
+ ]),
431
+ (0, import_vue3.createCommentVNode)(" Inspector Tooltip "),
432
+ (0, import_vue3.withDirectives)((0, import_vue3.createElementVNode)(
433
+ "div",
434
+ {
435
+ class: "opencode-element-tooltip",
436
+ style: (0, import_vue3.normalizeStyle)(__spreadValues({
437
+ display: $setup.tooltipVisible ? "block" : "none"
438
+ }, $setup.tooltipStyle))
439
+ },
440
+ [
441
+ (0, import_vue3.createElementVNode)(
442
+ "div",
443
+ _hoisted_3,
444
+ (0, import_vue3.toDisplayString)($setup.tooltipContent.description),
445
+ 1
446
+ /* TEXT */
447
+ ),
448
+ (0, import_vue3.createElementVNode)(
449
+ "div",
450
+ _hoisted_4,
451
+ (0, import_vue3.toDisplayString)($setup.tooltipContent.fileInfo),
452
+ 1
453
+ /* TEXT */
454
+ )
455
+ ],
456
+ 4
457
+ /* STYLE */
458
+ ), [
459
+ [import_vue3.vShow, $setup.tooltipVisible]
460
+ ]),
461
+ (0, import_vue3.createCommentVNode)(" Dialog "),
462
+ $setup.dialogVisible ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("div", _hoisted_5, [
463
+ (0, import_vue3.createElementVNode)("div", _hoisted_6, [
464
+ (0, import_vue3.createElementVNode)("div", _hoisted_7, [
465
+ (0, import_vue3.createElementVNode)(
466
+ "div",
467
+ _hoisted_8,
468
+ (0, import_vue3.toDisplayString)($setup.dialogMessage),
469
+ 1
470
+ /* TEXT */
471
+ )
472
+ ]),
473
+ (0, import_vue3.createElementVNode)("div", { class: "opencode-dialog-actions" }, [
474
+ (0, import_vue3.createElementVNode)("button", {
475
+ class: "opencode-dialog-btn cancel",
476
+ onClick: $setup.handleDialogCancel
477
+ }, "\u53D6\u6D88"),
478
+ (0, import_vue3.createElementVNode)("button", {
479
+ class: "opencode-dialog-btn confirm",
480
+ onClick: $setup.handleDialogConfirm
481
+ }, "\u786E\u8BA4")
482
+ ])
483
+ ])
484
+ ])) : (0, import_vue3.createCommentVNode)("v-if", true)
485
+ ],
486
+ 2
487
+ /* CLASS */
488
+ );
489
+ }
490
+ __vue_sfc__.render = __vue_render__;
491
+ var index_vue_default = __vue_sfc__;
@@ -0,0 +1,74 @@
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
+ loading?: boolean;
27
+ loadingSessionList?: boolean;
28
+ showEmptyState?: boolean;
29
+ iframeSrc?: string;
30
+ sessions?: OpenCodeWidgetSession[];
31
+ currentSessionId?: string | null;
32
+ selectedElements?: OpenCodeSelectedElement[];
33
+ showClearAll?: boolean;
34
+ selectEnabled?: boolean;
35
+ emptyStateText?: string;
36
+ emptyStateActionText?: string;
37
+ }
38
+ export type OpenCodeWidgetEmits = {
39
+ (e: "update:open", value: boolean): void;
40
+ (e: "update:selectMode", value: boolean): void;
41
+ (e: "update:sessionListCollapsed", value: boolean): void;
42
+ (e: "update:currentSessionId", value: string | null): void;
43
+ (e: "update:selectedElements", value: OpenCodeSelectedElement[]): void;
44
+ (e: "toggle", value: boolean): void;
45
+ (e: "close"): void;
46
+ (e: "toggle-session-list", value: boolean): void;
47
+ (e: "toggle-select-mode", value: boolean): void;
48
+ (e: "create-session"): void;
49
+ (e: "select-session", session: OpenCodeWidgetSession): void;
50
+ (e: "delete-session", session: OpenCodeWidgetSession): void;
51
+ (e: "click-selected-node", element: OpenCodeSelectedElement): void;
52
+ (e: "remove-selected-node", payload: OpenCodeRemoveSelectedPayload): void;
53
+ (e: "clear-selected-nodes"): void;
54
+ (e: "empty-action"): void;
55
+ };
56
+ export interface OpenCodeRemoveSelectedPayload {
57
+ element: OpenCodeSelectedElement;
58
+ index: number;
59
+ source: "panel" | "bubble";
60
+ }
61
+ export interface OpenCodeWidgetSessionItem {
62
+ key: string;
63
+ title: string;
64
+ meta: string;
65
+ active: boolean;
66
+ session: OpenCodeWidgetSession;
67
+ }
68
+ export interface OpenCodeSelectedElementItem {
69
+ key: string;
70
+ description: string;
71
+ bubbleFileText: string;
72
+ panelFileText: string;
73
+ element: OpenCodeSelectedElement;
74
+ }
@@ -0,0 +1,15 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __copyProps = (to, from, except, desc) => {
6
+ if (from && typeof from === "object" || typeof from === "function") {
7
+ for (let key of __getOwnPropNames(from))
8
+ if (!__hasOwnProp.call(to, key) && key !== except)
9
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
10
+ }
11
+ return to;
12
+ };
13
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
14
+ var types_exports = {};
15
+ module.exports = __toCommonJS(types_exports);
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +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.5","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 ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@vite-plugin-opencode-assistant/components",
3
+ "version": "1.0.5",
4
+ "description": "Reusable OpenCode widget components built with Pagoda CLI",
5
+ "type": "module",
6
+ "main": "lib/index.js",
7
+ "module": "es/index.js",
8
+ "types": "es/index.d.ts",
9
+ "files": [
10
+ "es",
11
+ "lib"
12
+ ],
13
+ "exports": {
14
+ ".": {
15
+ "types": "./es/index.d.ts",
16
+ "import": "./es/index.js",
17
+ "require": "./lib/index.js"
18
+ },
19
+ "./style.css": "./lib/index.css"
20
+ },
21
+ "publishConfig": {
22
+ "access": "public",
23
+ "registry": "https://registry.npmjs.org/"
24
+ },
25
+ "sideEffects": [
26
+ "**/*.css",
27
+ "**/*.vue"
28
+ ],
29
+ "peerDependencies": {
30
+ "vue": "^3.5.0"
31
+ },
32
+ "devDependencies": {
33
+ "@vitejs/plugin-vue": "^6.0.5",
34
+ "@vue/test-utils": "^2.4.6",
35
+ "jsdom": "^29.0.2",
36
+ "vitest": "^1.6.1",
37
+ "vue": "^3.5.13",
38
+ "vue-tsc": "^2.2.12"
39
+ },
40
+ "scripts": {
41
+ "build": "pagoda-cli build",
42
+ "docs:dev": "pagoda-cli site",
43
+ "docs:build": "pagoda-cli build-site",
44
+ "test": "vitest run"
45
+ }
46
+ }