@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,209 @@
1
+ import "./SessionList-sfc.css";
2
+ import { defineComponent as _defineComponent } from "vue";
3
+ import { ref, watch, computed } from "vue";
4
+ import { useOpenCodeWidgetContext } from "../context";
5
+ const __vue_sfc__ = /* @__PURE__ */ _defineComponent({
6
+ __name: "SessionList",
7
+ setup(__props, { expose: __expose }) {
8
+ __expose();
9
+ const {
10
+ sessionListCollapsed: collapsed,
11
+ sessionItems: sessions,
12
+ loadingSessionList,
13
+ handleCreateSession,
14
+ handleSelectSession,
15
+ handleDeleteSession
16
+ } = useOpenCodeWidgetContext();
17
+ const isAnimating = ref(false);
18
+ let animTimer = null;
19
+ watch(collapsed, () => {
20
+ isAnimating.value = true;
21
+ if (animTimer) clearTimeout(animTimer);
22
+ animTimer = setTimeout(() => {
23
+ isAnimating.value = false;
24
+ }, 200);
25
+ });
26
+ const showSkeleton = computed(() => {
27
+ if (isAnimating.value) return true;
28
+ return false;
29
+ });
30
+ const __returned__ = { collapsed, sessions, loadingSessionList, handleCreateSession, handleSelectSession, handleDeleteSession, isAnimating, get animTimer() {
31
+ return animTimer;
32
+ }, set animTimer(v) {
33
+ animTimer = v;
34
+ }, showSkeleton };
35
+ Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
36
+ return __returned__;
37
+ }
38
+ });
39
+ import { createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, Fragment as _Fragment, renderList as _renderList, toDisplayString as _toDisplayString, withModifiers as _withModifiers, normalizeClass as _normalizeClass, renderSlot as _renderSlot } from "vue";
40
+ const _hoisted_1 = {
41
+ key: 0,
42
+ class: "opencode-session-list-header"
43
+ };
44
+ const _hoisted_2 = {
45
+ key: 2,
46
+ class: "opencode-session-skeleton visible"
47
+ };
48
+ const _hoisted_3 = {
49
+ class: "opencode-session-list-content",
50
+ role: "listbox",
51
+ "aria-labelledby": "opencode-session-list-title"
52
+ };
53
+ const _hoisted_4 = {
54
+ key: 0,
55
+ class: "opencode-session-list-loading-overlay"
56
+ };
57
+ const _hoisted_5 = ["aria-selected", "onClick"];
58
+ const _hoisted_6 = { class: "opencode-session-header" };
59
+ const _hoisted_7 = { class: "opencode-session-title" };
60
+ const _hoisted_8 = ["aria-label", "onClick"];
61
+ const _hoisted_9 = { class: "opencode-session-meta" };
62
+ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
63
+ return _openBlock(), _createElementBlock(
64
+ "div",
65
+ {
66
+ class: _normalizeClass(["opencode-session-list", { collapsed: $setup.collapsed }])
67
+ },
68
+ [
69
+ _createCommentVNode(" Header "),
70
+ !$setup.showSkeleton ? (_openBlock(), _createElementBlock("div", _hoisted_1, [
71
+ _cache[1] || (_cache[1] = _createElementVNode(
72
+ "span",
73
+ { id: "opencode-session-list-title" },
74
+ "\u4F1A\u8BDD\u5217\u8868",
75
+ -1
76
+ /* CACHED */
77
+ )),
78
+ _createElementVNode("button", {
79
+ class: "opencode-new-session-btn",
80
+ type: "button",
81
+ title: "\u65B0\u5EFA\u4F1A\u8BDD",
82
+ "aria-label": "\u65B0\u5EFA\u4F1A\u8BDD",
83
+ onClick: _cache[0] || (_cache[0] = (...args) => $setup.handleCreateSession && $setup.handleCreateSession(...args))
84
+ }, " + ")
85
+ ])) : (_openBlock(), _createElementBlock(
86
+ _Fragment,
87
+ { key: 1 },
88
+ [
89
+ _createCommentVNode(" Header Skeleton "),
90
+ _cache[2] || (_cache[2] = _createElementVNode(
91
+ "div",
92
+ { class: "opencode-session-header-skeleton visible" },
93
+ [
94
+ _createElementVNode("div", { class: "opencode-skeleton-header-title" }),
95
+ _createElementVNode("div", { class: "opencode-skeleton-header-btn" })
96
+ ],
97
+ -1
98
+ /* CACHED */
99
+ ))
100
+ ],
101
+ 2112
102
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
103
+ )),
104
+ _createCommentVNode(" Content Skeleton "),
105
+ $setup.showSkeleton ? (_openBlock(), _createElementBlock("div", _hoisted_2, [
106
+ (_openBlock(), _createElementBlock(
107
+ _Fragment,
108
+ null,
109
+ _renderList(5, (i) => {
110
+ return _createElementVNode("div", {
111
+ key: `skeleton-${i}`,
112
+ class: "opencode-skeleton-item"
113
+ }, [..._cache[3] || (_cache[3] = [
114
+ _createElementVNode(
115
+ "div",
116
+ { class: "opencode-skeleton-title" },
117
+ null,
118
+ -1
119
+ /* CACHED */
120
+ ),
121
+ _createElementVNode(
122
+ "div",
123
+ { class: "opencode-skeleton-meta" },
124
+ null,
125
+ -1
126
+ /* CACHED */
127
+ )
128
+ ])]);
129
+ }),
130
+ 64
131
+ /* STABLE_FRAGMENT */
132
+ ))
133
+ ])) : (_openBlock(), _createElementBlock(
134
+ _Fragment,
135
+ { key: 3 },
136
+ [
137
+ _createCommentVNode(" Content "),
138
+ _createElementVNode("div", _hoisted_3, [
139
+ $setup.loadingSessionList ? (_openBlock(), _createElementBlock("div", _hoisted_4, [..._cache[4] || (_cache[4] = [
140
+ _createElementVNode(
141
+ "div",
142
+ { class: "opencode-loading-spinner small" },
143
+ null,
144
+ -1
145
+ /* CACHED */
146
+ )
147
+ ])])) : _createCommentVNode("v-if", true),
148
+ $setup.sessions.length > 0 ? (_openBlock(true), _createElementBlock(
149
+ _Fragment,
150
+ { key: 1 },
151
+ _renderList($setup.sessions, (item) => {
152
+ return _openBlock(), _createElementBlock("div", {
153
+ key: item.key,
154
+ class: _normalizeClass(["opencode-session-item", { active: item.active }]),
155
+ role: "option",
156
+ "aria-selected": item.active,
157
+ onClick: ($event) => $setup.handleSelectSession(item)
158
+ }, [
159
+ _createElementVNode("div", _hoisted_6, [
160
+ _createElementVNode(
161
+ "div",
162
+ _hoisted_7,
163
+ _toDisplayString(item.title),
164
+ 1
165
+ /* TEXT */
166
+ ),
167
+ _createElementVNode("button", {
168
+ class: "opencode-session-delete-btn",
169
+ type: "button",
170
+ "aria-label": `\u5220\u9664\u4F1A\u8BDD: ${item.title}`,
171
+ onClick: _withModifiers(($event) => $setup.handleDeleteSession(item), ["stop"])
172
+ }, " \xD7 ", 8, _hoisted_8)
173
+ ]),
174
+ _createElementVNode(
175
+ "div",
176
+ _hoisted_9,
177
+ _toDisplayString(item.meta),
178
+ 1
179
+ /* TEXT */
180
+ )
181
+ ], 10, _hoisted_5);
182
+ }),
183
+ 128
184
+ /* KEYED_FRAGMENT */
185
+ )) : (_openBlock(), _createElementBlock(
186
+ _Fragment,
187
+ { key: 2 },
188
+ [
189
+ _createCommentVNode(" Empty State "),
190
+ _renderSlot(_ctx.$slots, "empty")
191
+ ],
192
+ 64
193
+ /* STABLE_FRAGMENT */
194
+ ))
195
+ ])
196
+ ],
197
+ 2112
198
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
199
+ ))
200
+ ],
201
+ 2
202
+ /* CLASS */
203
+ );
204
+ }
205
+ __vue_sfc__.render = __vue_render__;
206
+ var SessionList_vue_default = __vue_sfc__;
207
+ export {
208
+ SessionList_vue_default as default
209
+ };
@@ -0,0 +1 @@
1
+ .opencode-button{width:44px;height:44px;border-radius:50%;background:var(--oc-trigger-bg);border:none;cursor:pointer;box-shadow:var(--oc-trigger-shadow);transition:all .3s ease;display:flex;align-items:center;justify-content:center;color:#fff;padding:0;position:relative}.opencode-button:before{content:"";position:absolute;top:-8px;left:-8px;right:-8px;bottom:-8px;border-radius:50%}.opencode-button:hover{transform:scale(1.1);box-shadow:var(--oc-trigger-shadow-hover);background:var(--oc-trigger-bg-hover)}.opencode-button.active{background:var(--oc-trigger-bg-active);box-shadow:var(--oc-trigger-shadow-active)}.opencode-button.active svg{transform:rotate(180deg)}.opencode-button svg{transition:transform .3s ease}.opencode-button.loading{animation:pulse 1s infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}
@@ -0,0 +1,12 @@
1
+ declare var __VLS_1: {};
2
+ type __VLS_Slots = {} & {
3
+ default?: (props: typeof __VLS_1) => any;
4
+ };
5
+ declare const __VLS_component: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
6
+ declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
7
+ export default _default;
8
+ type __VLS_WithSlots<T, S> = T & {
9
+ new (): {
10
+ $slots: S;
11
+ };
12
+ };
@@ -0,0 +1,66 @@
1
+ import "./Trigger-sfc.css";
2
+ import { defineComponent as _defineComponent } from "vue";
3
+ import { useOpenCodeWidgetContext } from "../context";
4
+ const __vue_sfc__ = /* @__PURE__ */ _defineComponent({
5
+ __name: "Trigger",
6
+ setup(__props, { expose: __expose }) {
7
+ __expose();
8
+ const { buttonActive: active, open, hotkeyLabel, handleToggle } = useOpenCodeWidgetContext();
9
+ const __returned__ = { active, open, hotkeyLabel, handleToggle };
10
+ Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
11
+ return __returned__;
12
+ }
13
+ });
14
+ import { renderSlot as _renderSlot, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock } from "vue";
15
+ const _hoisted_1 = ["aria-expanded", "title"];
16
+ function __vue_render__(_ctx, _cache, $props, $setup, $data, $options) {
17
+ return _openBlock(), _createElementBlock("button", {
18
+ class: _normalizeClass(["opencode-button", { active: $setup.active }]),
19
+ type: "button",
20
+ "aria-expanded": $setup.open,
21
+ "aria-label": "\u6253\u5F00 AI \u52A9\u624B",
22
+ title: `AI \u52A9\u624B (${$setup.hotkeyLabel})`,
23
+ onClick: _cache[0] || (_cache[0] = (...args) => $setup.handleToggle && $setup.handleToggle(...args))
24
+ }, [
25
+ _renderSlot(_ctx.$slots, "default", {}, () => [
26
+ _cache[1] || (_cache[1] = _createElementVNode(
27
+ "svg",
28
+ {
29
+ t: "1775402599580",
30
+ class: "icon",
31
+ viewBox: "0 0 1024 1024",
32
+ version: "1.1",
33
+ xmlns: "http://www.w3.org/2000/svg",
34
+ "p-id": "5390",
35
+ "xmlns:xlink": "http://www.w3.org/1999/xlink",
36
+ width: "100%",
37
+ height: "100%"
38
+ },
39
+ [
40
+ _createElementVNode("path", {
41
+ d: "M512 981.33H85.34c-15.85 0-30.38-8.77-37.77-22.81a42.624 42.624 0 0 1 2.6-44.02L135 791.08C75.25 710.5 42.67 612.6 42.67 512 42.67 253.21 253.21 42.67 512 42.67S981.34 253.21 981.34 512 770.8 981.33 512 981.33zM166.44 896H512c211.73 0 384-172.27 384-384S723.73 128 512 128 128 300.27 128 512c0 91.29 32.83 179.9 92.46 249.46 12.58 14.69 13.73 36 2.77 51.94L166.44 896z",
42
+ fill: "white",
43
+ "p-id": "5391"
44
+ }),
45
+ _createElementVNode("path", {
46
+ d: "M384 448m-64 0a64 64 0 1 0 128 0 64 64 0 1 0 -128 0Z",
47
+ fill: "white",
48
+ "p-id": "5392"
49
+ }),
50
+ _createElementVNode("path", {
51
+ d: "M640 448m-64 0a64 64 0 1 0 128 0 64 64 0 1 0 -128 0Z",
52
+ fill: "white",
53
+ "p-id": "5393"
54
+ })
55
+ ],
56
+ -1
57
+ /* CACHED */
58
+ ))
59
+ ])
60
+ ], 10, _hoisted_1);
61
+ }
62
+ __vue_sfc__.render = __vue_render__;
63
+ var Trigger_vue_default = __vue_sfc__;
64
+ export {
65
+ Trigger_vue_default as default
66
+ };
@@ -0,0 +1,42 @@
1
+ import { type Ref } from "vue";
2
+ import type { OpenCodeWidgetSessionItem, OpenCodeSelectedElementItem, OpenCodeRemoveSelectedPayload } from "./types";
3
+ export interface OpenCodeWidgetContext {
4
+ theme: Ref<string>;
5
+ title: Ref<string>;
6
+ hotkeyLabel: Ref<string>;
7
+ selectShortcutLabel: Ref<string>;
8
+ selectMode: Ref<boolean>;
9
+ selectEnabled: Ref<boolean>;
10
+ sessionListCollapsed: Ref<boolean>;
11
+ loading: Ref<boolean>;
12
+ loadingSessionList: Ref<boolean | undefined>;
13
+ showEmptyState: Ref<boolean>;
14
+ emptyStateText: Ref<string>;
15
+ emptyStateActionText: Ref<string>;
16
+ showClearAll: Ref<boolean>;
17
+ open: Ref<boolean>;
18
+ iframeSource: Ref<string>;
19
+ buttonActive: Ref<boolean>;
20
+ sessionListTitle: Ref<string>;
21
+ bubbleVisible: Ref<boolean>;
22
+ hasSelectedElements: Ref<boolean>;
23
+ sessionItems: Ref<OpenCodeWidgetSessionItem[]>;
24
+ selectedElementItems: Ref<OpenCodeSelectedElementItem[]>;
25
+ handleToggle: () => void;
26
+ handleClose: () => void;
27
+ handleToggleSessionList: () => void;
28
+ handleEmptyAction: () => void;
29
+ handleCreateSession: () => void;
30
+ handleSelectSession: (item: OpenCodeWidgetSessionItem) => void;
31
+ handleDeleteSession: (item: OpenCodeWidgetSessionItem) => void;
32
+ handleToggleSelectMode: () => void;
33
+ handleClickSelectedNode: (item: OpenCodeSelectedElementItem) => void;
34
+ handleRemoveSelectedNode: (payload: {
35
+ item: OpenCodeSelectedElementItem;
36
+ index: number;
37
+ source: OpenCodeRemoveSelectedPayload["source"];
38
+ }) => void;
39
+ handleClearSelectedNodes: () => void;
40
+ }
41
+ export declare function provideOpenCodeWidgetContext(context: OpenCodeWidgetContext): void;
42
+ export declare function useOpenCodeWidgetContext(): OpenCodeWidgetContext;
@@ -0,0 +1,16 @@
1
+ import { inject, provide } from "vue";
2
+ const CONTEXT_KEY = /* @__PURE__ */ Symbol("OpenCodeWidgetContext");
3
+ function provideOpenCodeWidgetContext(context) {
4
+ provide(CONTEXT_KEY, context);
5
+ }
6
+ function useOpenCodeWidgetContext() {
7
+ const context = inject(CONTEXT_KEY);
8
+ if (!context) {
9
+ throw new Error("useOpenCodeWidgetContext must be used within OpenCodeWidget");
10
+ }
11
+ return context;
12
+ }
13
+ export {
14
+ provideOpenCodeWidgetContext,
15
+ useOpenCodeWidgetContext
16
+ };
@@ -0,0 +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-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: linear-gradient(135deg, #667eea 0%, #764ba2 100%);--oc-trigger-bg-hover: linear-gradient(135deg, #764ba2 0%, #667eea 100%);--oc-trigger-bg-active: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);--oc-trigger-shadow: 0 4px 15px rgba(102, 126, 234, .4);--oc-trigger-shadow-hover: 0 6px 20px rgba(102, 126, 234, .6);--oc-trigger-shadow-active: 0 6px 20px rgba(240, 147, 251, .4);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-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: linear-gradient(135deg, #667eea 0%, #764ba2 100%);--oc-trigger-bg-hover: linear-gradient(135deg, #764ba2 0%, #667eea 100%);--oc-trigger-bg-active: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);--oc-trigger-shadow: 0 4px 15px rgba(102, 126, 234, .5);--oc-trigger-shadow-hover: 0 6px 20px rgba(102, 126, 234, .7);--oc-trigger-shadow-active: 0 6px 20px rgba(240, 147, 251, .5)}.opencode-widget.bottom-right{bottom:20px;right:20px}.opencode-widget.bottom-left{bottom:20px;left:20px}.opencode-widget.top-right{top:20px;right:20px}.opencode-widget.top-left{top:20px;left:20px}.opencode-chat{position:absolute;width:700px;height:86vh;background:var(--oc-bg-main);border-radius:16px;box-shadow:var(--oc-shadow-lg);overflow:hidden;opacity:0;visibility:hidden;transform:translateY(20px) scale(.95);transition:all .3s ease;display:flex;flex-direction:column}.opencode-chat-content{display:flex;flex:1;overflow:hidden}.opencode-widget.bottom-right .opencode-chat{bottom:56px;right:0}.opencode-widget.bottom-left .opencode-chat{bottom:56px;left:0}.opencode-widget.top-right .opencode-chat{top:56px;right:0}.opencode-widget.top-left .opencode-chat{top:56px;left:0}.opencode-widget.bottom-right .opencode-selected-bubbles{bottom:56px;right:0}.opencode-widget.bottom-left .opencode-selected-bubbles{bottom:56px;left:0}.opencode-widget.top-right .opencode-selected-bubbles{top:56px;bottom:auto;right:0}.opencode-widget.top-left .opencode-selected-bubbles{top:56px;bottom:auto;left:0}.opencode-chat.open{opacity:1;visibility:visible;transform:translateY(0) scale(1)}.opencode-notification{position:absolute;top:20px;left:50%;transform:translate(-50%);padding:12px 20px;background:var(--oc-bg-main);color:var(--oc-text-primary);border:1px solid var(--oc-border-primary);border-radius:8px;font-size:14px;box-shadow:var(--oc-shadow-lg);animation:slideDown .3s ease;z-index:10000000}.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-element-highlight{position:fixed;pointer-events:none;z-index:999998;display:none;transition:all .1s ease;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;display:none;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)}}
@@ -0,0 +1,83 @@
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: {};
3
+ type __VLS_Slots = {} & {
4
+ 'button-icon'?: (props: typeof __VLS_4) => any;
5
+ } & {
6
+ 'session-toggle-icon'?: (props: typeof __VLS_12) => any;
7
+ } & {
8
+ 'select-icon'?: (props: typeof __VLS_14) => any;
9
+ } & {
10
+ 'close-icon'?: (props: typeof __VLS_16) => any;
11
+ } & {
12
+ 'sessions-empty'?: (props: typeof __VLS_21) => any;
13
+ } & {
14
+ 'empty-state'?: (props: typeof __VLS_26) => any;
15
+ } & {
16
+ loading?: (props: typeof __VLS_28) => any;
17
+ } & {
18
+ content?: (props: typeof __VLS_30) => any;
19
+ };
20
+ declare const __VLS_component: import("vue").DefineComponent<OpenCodeWidgetProps, {
21
+ showNotification: (message: string, duration?: number) => void;
22
+ showConfirmDialog: (message: string) => Promise<boolean>;
23
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
24
+ "update:open": (value: boolean) => any;
25
+ "update:selectMode": (value: boolean) => any;
26
+ "update:sessionListCollapsed": (value: boolean) => any;
27
+ "update:currentSessionId": (value: string | null) => any;
28
+ "update:selectedElements": (value: import("./types").OpenCodeSelectedElement[]) => any;
29
+ toggle: (value: boolean) => any;
30
+ close: () => any;
31
+ "toggle-session-list": (value: boolean) => any;
32
+ "toggle-select-mode": (value: boolean) => any;
33
+ "create-session": () => any;
34
+ "select-session": (session: import("./types").OpenCodeWidgetSession) => any;
35
+ "delete-session": (session: import("./types").OpenCodeWidgetSession) => any;
36
+ "click-selected-node": (element: import("./types").OpenCodeSelectedElement) => any;
37
+ "remove-selected-node": (payload: import("./types").OpenCodeRemoveSelectedPayload) => any;
38
+ "clear-selected-nodes": () => any;
39
+ "empty-action": () => any;
40
+ }, string, import("vue").PublicProps, Readonly<OpenCodeWidgetProps> & Readonly<{
41
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
42
+ "onUpdate:selectMode"?: ((value: boolean) => any) | undefined;
43
+ "onUpdate:sessionListCollapsed"?: ((value: boolean) => any) | undefined;
44
+ "onUpdate:currentSessionId"?: ((value: string | null) => any) | undefined;
45
+ "onUpdate:selectedElements"?: ((value: import("./types").OpenCodeSelectedElement[]) => any) | undefined;
46
+ onToggle?: ((value: boolean) => any) | undefined;
47
+ onClose?: (() => any) | undefined;
48
+ "onToggle-session-list"?: ((value: boolean) => any) | undefined;
49
+ "onToggle-select-mode"?: ((value: boolean) => any) | undefined;
50
+ "onCreate-session"?: (() => any) | undefined;
51
+ "onSelect-session"?: ((session: import("./types").OpenCodeWidgetSession) => any) | undefined;
52
+ "onDelete-session"?: ((session: import("./types").OpenCodeWidgetSession) => any) | undefined;
53
+ "onClick-selected-node"?: ((element: import("./types").OpenCodeSelectedElement) => any) | undefined;
54
+ "onRemove-selected-node"?: ((payload: import("./types").OpenCodeRemoveSelectedPayload) => any) | undefined;
55
+ "onClear-selected-nodes"?: (() => any) | undefined;
56
+ "onEmpty-action"?: (() => any) | undefined;
57
+ }>, {
58
+ loading: boolean;
59
+ showEmptyState: boolean;
60
+ emptyStateText: string;
61
+ emptyStateActionText: string;
62
+ iframeSrc: string;
63
+ title: string;
64
+ sessionListCollapsed: boolean;
65
+ selectMode: boolean;
66
+ selectEnabled: boolean;
67
+ selectShortcutLabel: string;
68
+ showClearAll: boolean;
69
+ sessions: import("./types").OpenCodeWidgetSession[];
70
+ open: boolean;
71
+ hotkeyLabel: string;
72
+ position: import("./types").OpenCodeWidgetPosition;
73
+ theme: import("./types").OpenCodeWidgetTheme;
74
+ currentSessionId: string | null;
75
+ selectedElements: import("./types").OpenCodeSelectedElement[];
76
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
77
+ declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
78
+ export default _default;
79
+ type __VLS_WithSlots<T, S> = T & {
80
+ new (): {
81
+ $slots: S;
82
+ };
83
+ };