@burdenoff/microfe-vibecontrols 2026.522.7 → 2026.522.8
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.
- package/dist/components/agents/OpenInBrowserEditorButton.js +65 -66
- package/dist/components/agents/OpenInBrowserEditorButton.js.map +1 -1
- package/dist/components/ai/AIProviderCredentialsCard.js.map +1 -1
- package/dist/components/security/SecurityProviderDrawer.js +106 -31
- package/dist/components/security/SecurityProviderDrawer.js.map +1 -1
- package/dist/components/vibe/VibeAgentSwitcher.js +237 -0
- package/dist/components/vibe/VibeAgentSwitcher.js.map +1 -0
- package/dist/components/vibes/VibeCard.js +2 -2
- package/dist/components/vibes/VibeCard.js.map +1 -1
- package/dist/components/vibes/VibeList.js +12 -30
- package/dist/components/vibes/VibeList.js.map +1 -1
- package/dist/pages/AgentDetailsPage.js +172 -123
- package/dist/pages/AgentDetailsPage.js.map +1 -1
- package/dist/pages/VibeDetailsPage.js +383 -397
- package/dist/pages/VibeDetailsPage.js.map +1 -1
- package/dist/pages/VibesPage.js +155 -190
- package/dist/pages/VibesPage.js.map +1 -1
- package/dist/services/aiApi.js +1 -1
- package/dist/services/aiApi.js.map +1 -1
- package/package.json +1 -1
package/dist/pages/VibesPage.js
CHANGED
|
@@ -56,42 +56,15 @@ function h() {
|
|
|
56
56
|
value: "ERROR",
|
|
57
57
|
label: x("vibesPage.statusError", "Error")
|
|
58
58
|
}
|
|
59
|
-
]
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
label: x("vibesPage.typeAll", "All Types")
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
value: "PROJECT",
|
|
66
|
-
label: x("vibesPage.typeProject", "Project")
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
value: "REPOSITORY",
|
|
70
|
-
label: x("vibesPage.typeRepository", "Repository")
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
value: "WORKSPACE",
|
|
74
|
-
label: x("vibesPage.typeWorkspace", "Workspace")
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
value: "MONOREPO",
|
|
78
|
-
label: x("vibesPage.typeMonorepo", "Monorepo")
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
value: "PACKAGE",
|
|
82
|
-
label: x("vibesPage.typePackage", "Package")
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
value: "CUSTOM",
|
|
86
|
-
label: x("vibesPage.typeCustom", "Custom")
|
|
87
|
-
}
|
|
88
|
-
], S = _(s.VIBE_LIST), C = _(s.VIBE_UPDATE), w = v || !S, [T, Be] = d(""), [E, Ve] = d("all"), [D, He] = d("all"), [O, Ue] = d("all"), [k, We] = d("grid"), [Ge, A] = d(!1), [Ke, j] = d(null), [M, qe] = d(!1), [Je, N] = d(null), [Ye, P] = d(!1), [F, I] = d({}), [Xe, L] = d(null), [R, z] = d(/* @__PURE__ */ new Set()), [Ze, B] = d(null), V = u(null);
|
|
59
|
+
];
|
|
60
|
+
x("vibesPage.typeAll", "All Types"), x("vibesPage.typeProject", "Project"), x("vibesPage.typeRepository", "Repository"), x("vibesPage.typeWorkspace", "Workspace"), x("vibesPage.typeMonorepo", "Monorepo"), x("vibesPage.typePackage", "Package"), x("vibesPage.typeCustom", "Custom");
|
|
61
|
+
let S = _(s.VIBE_LIST), C = _(s.VIBE_UPDATE), w = v || !S, [T, ze] = d(""), [E, Be] = d("all"), [D, Ve] = d("all"), [O, He] = d("all"), [k, Ue] = d("grid"), [We, A] = d(!1), [j, M] = d(null), [N, Ge] = d(!1), [Ke, P] = d(null), [qe, F] = d(!1), [I, L] = d({}), [Je, R] = d(null), [z, B] = d(/* @__PURE__ */ new Set()), [Ye, V] = d(null), H = u(null);
|
|
89
62
|
xe(() => () => {
|
|
90
|
-
|
|
63
|
+
H.current && clearTimeout(H.current);
|
|
91
64
|
}, []);
|
|
92
|
-
let
|
|
93
|
-
|
|
94
|
-
}, []),
|
|
65
|
+
let Xe = c(() => {
|
|
66
|
+
R(null), H.current &&= (clearTimeout(H.current), null);
|
|
67
|
+
}, []), Ze = u(null), Qe = u(null), $e = u(null), et = u(null), [tt] = t(), { setDraftTagIds: nt, flushTags: rt } = ue("VIBECONTROLS_VIBE"), [it] = i(), [at] = e(), { data: ot, loading: U, error: st, refetch: W } = r({
|
|
95
68
|
variables: l(() => ({ filter: {
|
|
96
69
|
status: E === "all" ? void 0 : E,
|
|
97
70
|
type: D === "all" ? void 0 : D,
|
|
@@ -105,13 +78,13 @@ function h() {
|
|
|
105
78
|
nextFetchPolicy: "cache-first",
|
|
106
79
|
skip: w,
|
|
107
80
|
notifyOnNetworkStatusChange: !0
|
|
108
|
-
}), { agents:
|
|
109
|
-
|
|
110
|
-
}, [
|
|
111
|
-
let e =
|
|
81
|
+
}), { agents: ct } = re(), [lt, { data: ut }] = n({ fetchPolicy: "cache-first" }), dt = u(!1), G = c(() => {
|
|
82
|
+
dt.current || w || (dt.current = !0, lt({ variables: { pagination: { limit: 100 } } }));
|
|
83
|
+
}, [lt, w]), ft = l(() => {
|
|
84
|
+
let e = ut?.vibecontrolsAgents ?? null, t = e ? e.map((e) => ({
|
|
112
85
|
id: e.id,
|
|
113
86
|
name: e.name
|
|
114
|
-
})) :
|
|
87
|
+
})) : ct.map((e) => ({
|
|
115
88
|
id: e.id,
|
|
116
89
|
name: e.name
|
|
117
90
|
}));
|
|
@@ -123,10 +96,10 @@ function h() {
|
|
|
123
96
|
label: e.name
|
|
124
97
|
}))];
|
|
125
98
|
}, [
|
|
126
|
-
|
|
127
|
-
|
|
99
|
+
ut?.vibecontrolsAgents,
|
|
100
|
+
ct,
|
|
128
101
|
x
|
|
129
|
-
]),
|
|
102
|
+
]), K = l(() => (ot?.vibes?.items ?? []).map((e) => ({
|
|
130
103
|
id: e.id,
|
|
131
104
|
workspaceId: e.workspaceId,
|
|
132
105
|
name: e.name,
|
|
@@ -149,17 +122,17 @@ function h() {
|
|
|
149
122
|
isActive: e.isActive,
|
|
150
123
|
ownerUserId: e.ownerUserId ?? null
|
|
151
124
|
}))
|
|
152
|
-
})), [
|
|
125
|
+
})), [ot?.vibes?.items]), q = l(() => K.filter((e) => {
|
|
153
126
|
if (T) {
|
|
154
127
|
let t = T.toLowerCase();
|
|
155
128
|
if (!(e.name.toLowerCase().includes(t) || e.description?.toLowerCase().includes(t) || e.path?.toLowerCase().includes(t) || e.tags?.some((e) => e.toLowerCase().includes(t)))) return !1;
|
|
156
129
|
}
|
|
157
130
|
return !0;
|
|
158
|
-
}), [
|
|
131
|
+
}), [K, T]), pt = l(() => K.filter((e) => z.has(e.id)), [K, z]), J = pt.filter((e) => e.status !== "ACTIVE"), Y = pt.filter((e) => e.status !== "ARCHIVED"), X = q.length > 0 && q.every((e) => z.has(e.id)), mt = q.some((e) => z.has(e.id)) && !X, ht = (e) => {
|
|
159
132
|
g(`/vibes/${e.id}`);
|
|
160
|
-
},
|
|
133
|
+
}, gt = async (e) => {
|
|
161
134
|
try {
|
|
162
|
-
(await
|
|
135
|
+
(await it({ variables: {
|
|
163
136
|
id: e.id,
|
|
164
137
|
status: "ACTIVE"
|
|
165
138
|
} })).data?.updateVibeStatus && h?.({
|
|
@@ -171,55 +144,55 @@ function h() {
|
|
|
171
144
|
} catch (e) {
|
|
172
145
|
console.error("Failed to activate vibe:", e);
|
|
173
146
|
}
|
|
174
|
-
},
|
|
147
|
+
}, _t = async (e) => {
|
|
175
148
|
try {
|
|
176
|
-
await
|
|
149
|
+
await at({ variables: { id: e.id } });
|
|
177
150
|
} catch (e) {
|
|
178
151
|
console.error("Failed to archive vibe:", e);
|
|
179
152
|
}
|
|
180
|
-
},
|
|
153
|
+
}, vt = ne((e) => e.preferredIdeCommand), yt = ne((e) => e.vibeIdeOverrides), bt = (e) => {
|
|
181
154
|
if (!e.path) {
|
|
182
|
-
|
|
183
|
-
|
|
155
|
+
R(x("vibesPage.openEditorPathMissing", "No path available to open in editor")), H.current = setTimeout(() => {
|
|
156
|
+
R(null), H.current = null;
|
|
184
157
|
}, 3e3);
|
|
185
158
|
return;
|
|
186
159
|
}
|
|
187
|
-
let t = ve(e.id,
|
|
188
|
-
r ? window.location.href = r : (
|
|
189
|
-
|
|
160
|
+
let t = ve(e.id, vt, yt), n = _e(t), r = n ? ge(n, e.path) : `vscode://file/${e.path}`;
|
|
161
|
+
r ? window.location.href = r : (R(x("vibesPage.openEditorNoProtocol", `${n?.label ?? t} has no URL handler — open this Vibe and use the editor menu.`)), H.current = setTimeout(() => {
|
|
162
|
+
R(null), H.current = null;
|
|
190
163
|
}, 4e3));
|
|
191
|
-
},
|
|
192
|
-
|
|
193
|
-
},
|
|
194
|
-
|
|
164
|
+
}, xt = () => {
|
|
165
|
+
M(null), A(!0), G();
|
|
166
|
+
}, St = (e, t) => {
|
|
167
|
+
B((n) => {
|
|
195
168
|
let r = new Set(n);
|
|
196
169
|
return t ? r.add(e.id) : r.delete(e.id), r;
|
|
197
170
|
});
|
|
198
|
-
},
|
|
199
|
-
|
|
171
|
+
}, Ct = (e) => {
|
|
172
|
+
B((t) => {
|
|
200
173
|
let n = new Set(t);
|
|
201
|
-
return
|
|
174
|
+
return q.forEach((t) => {
|
|
202
175
|
e ? n.add(t.id) : n.delete(t.id);
|
|
203
176
|
}), n;
|
|
204
177
|
});
|
|
205
|
-
}, Z = () =>
|
|
206
|
-
if (
|
|
207
|
-
let e = await Promise.allSettled(
|
|
178
|
+
}, Z = () => B(/* @__PURE__ */ new Set()), wt = async () => {
|
|
179
|
+
if (J.length === 0) return;
|
|
180
|
+
let e = await Promise.allSettled(J.map((e) => it({ variables: {
|
|
208
181
|
id: e.id,
|
|
209
182
|
status: "ACTIVE"
|
|
210
183
|
} }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
|
|
211
|
-
|
|
184
|
+
P(`Activated ${t} vibe${t === 1 ? "" : "s"}${n > 0 ? ` • ${n} failed` : ""}`), setTimeout(() => P(null), 4e3), Z(), V(null), await W();
|
|
185
|
+
}, Tt = async () => {
|
|
186
|
+
if (Y.length === 0) return;
|
|
187
|
+
let e = await Promise.allSettled(Y.map((e) => at({ variables: { id: e.id } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
|
|
188
|
+
P(`Archived ${t} vibe${t === 1 ? "" : "s"}${n > 0 ? ` • ${n} failed` : ""}`), setTimeout(() => P(null), 4e3), Z(), V(null), await W();
|
|
212
189
|
}, Et = async () => {
|
|
213
|
-
|
|
214
|
-
let e = await Promise.allSettled(J.map((e) => st({ variables: { id: e.id } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
|
|
215
|
-
N(`Archived ${t} vibe${t === 1 ? "" : "s"}${n > 0 ? ` • ${n} failed` : ""}`), setTimeout(() => N(null), 4e3), Z(), B(null), await U();
|
|
216
|
-
}, Dt = async () => {
|
|
217
|
-
let e = $e.current?.value?.trim(), t = et.current?.value?.trim(), n = tt.current?.value, r = nt.current?.value, i = {};
|
|
190
|
+
let e = Ze.current?.value?.trim(), t = Qe.current?.value?.trim(), n = $e.current?.value, r = et.current?.value, i = {};
|
|
218
191
|
if (e || (i.name = x("vibesPage.nameRequired", "Name is required")), t || (i.path = x("vibesPage.pathRequired", "Path is required")), i.name || i.path) {
|
|
219
|
-
|
|
192
|
+
L(i), M(x("vibesPage.fillRequired", "Please fill in all required fields"));
|
|
220
193
|
return;
|
|
221
194
|
}
|
|
222
|
-
|
|
195
|
+
L({});
|
|
223
196
|
let ee = [
|
|
224
197
|
"PROJECT",
|
|
225
198
|
"REPOSITORY",
|
|
@@ -228,9 +201,9 @@ function h() {
|
|
|
228
201
|
"PACKAGE",
|
|
229
202
|
"CUSTOM"
|
|
230
203
|
].includes(r) ? r : "PROJECT";
|
|
231
|
-
|
|
204
|
+
Ge(!0), M(null);
|
|
232
205
|
try {
|
|
233
|
-
let r = await
|
|
206
|
+
let r = await tt({ variables: { input: {
|
|
234
207
|
name: e,
|
|
235
208
|
path: t,
|
|
236
209
|
type: ee,
|
|
@@ -238,21 +211,21 @@ function h() {
|
|
|
238
211
|
} } });
|
|
239
212
|
if (!r.data?.createVibe?.id) throw Error(x("vibesPage.failedCreate", "Failed to create vibe"));
|
|
240
213
|
let i = r.data.createVibe.id;
|
|
241
|
-
A(!1),
|
|
214
|
+
A(!1), P(x("vibesPage.createdSuccess", "Vibe created successfully")), await rt(i), await W(), setTimeout(() => P(null), 3e3);
|
|
242
215
|
} catch (e) {
|
|
243
216
|
if (ce(e)) {
|
|
244
|
-
A(!1),
|
|
217
|
+
A(!1), M(null), L({}), F(!0);
|
|
245
218
|
return;
|
|
246
219
|
}
|
|
247
|
-
|
|
220
|
+
M(e instanceof Error ? e.message : x("vibesPage.failedCreate", "Failed to create vibe"));
|
|
248
221
|
} finally {
|
|
249
|
-
|
|
222
|
+
Ge(!1);
|
|
250
223
|
}
|
|
251
|
-
},
|
|
252
|
-
total:
|
|
253
|
-
active:
|
|
254
|
-
inactive:
|
|
255
|
-
}, Q = v, $ = !v && !!y && (y.permissionStrings?.length ?? 0) > 0 && !S,
|
|
224
|
+
}, Dt = {
|
|
225
|
+
total: K.length,
|
|
226
|
+
active: K.filter((e) => e.status === "ACTIVE").length,
|
|
227
|
+
inactive: K.filter((e) => e.status === "INACTIVE").length
|
|
228
|
+
}, Q = v, $ = !v && !!y && (y.permissionStrings?.length ?? 0) > 0 && !S, Ot = !Q && !$ && U && K.length === 0, kt = !Q && !$ && !!st && K.length === 0, At = !Q && !$ && !kt;
|
|
256
229
|
return /* @__PURE__ */ p(Pe, {
|
|
257
230
|
className: "space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen",
|
|
258
231
|
children: [
|
|
@@ -261,32 +234,32 @@ function h() {
|
|
|
261
234
|
title: x("vibesPage.accessDeniedTitle", "Access Denied"),
|
|
262
235
|
description: x("vibesPage.accessDeniedDescription", "You don't have permission to view vibes. Contact your workspace administrator for access.")
|
|
263
236
|
}),
|
|
264
|
-
|
|
237
|
+
kt && /* @__PURE__ */ f(oe, {
|
|
265
238
|
title: x("vibesPage.failedLoad", "Failed to load vibes"),
|
|
266
|
-
message:
|
|
267
|
-
onRetry: () =>
|
|
239
|
+
message: st?.message ?? "",
|
|
240
|
+
onRetry: () => W()
|
|
268
241
|
}),
|
|
269
|
-
|
|
242
|
+
At && /* @__PURE__ */ p(Me, { children: [
|
|
270
243
|
/* @__PURE__ */ f(ie, {
|
|
271
244
|
title: x("vibesPage.title", "Vibes"),
|
|
272
245
|
description: x("vibesPage.descriptionActive", "{{active}} of {{total}} vibes active", {
|
|
273
|
-
active:
|
|
274
|
-
total:
|
|
246
|
+
active: Dt.active,
|
|
247
|
+
total: Dt.total
|
|
275
248
|
}),
|
|
276
249
|
actions: /* @__PURE__ */ p("div", {
|
|
277
250
|
className: "flex items-center gap-2",
|
|
278
251
|
children: [/* @__PURE__ */ f("button", {
|
|
279
|
-
onClick: () =>
|
|
280
|
-
disabled:
|
|
252
|
+
onClick: () => W(),
|
|
253
|
+
disabled: U,
|
|
281
254
|
className: "flex items-center gap-2 px-3 py-2 text-text-secondary hover:bg-bg-sunken rounded-md transition-colors disabled:opacity-50",
|
|
282
255
|
title: x("vibesPage.refreshTitle", "Refresh vibes"),
|
|
283
|
-
children: /* @__PURE__ */ f(Oe, { className: `w-4 h-4 ${
|
|
256
|
+
children: /* @__PURE__ */ f(Oe, { className: `w-4 h-4 ${U ? "animate-spin" : ""}` })
|
|
284
257
|
}), /* @__PURE__ */ f(Ie, {
|
|
285
258
|
permission: s.VIBE_CREATE,
|
|
286
259
|
deniedBehavior: "disable",
|
|
287
260
|
deniedTooltip: x("vibesPage.deniedCreateTooltip", "You don't have permission to create vibes"),
|
|
288
261
|
children: /* @__PURE__ */ p("button", {
|
|
289
|
-
onClick:
|
|
262
|
+
onClick: xt,
|
|
290
263
|
className: "flex items-center gap-2 px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
|
|
291
264
|
children: [/* @__PURE__ */ f(De, { className: "w-4 h-4" }), x("vibesPage.addVibe", "Add Vibe")]
|
|
292
265
|
})
|
|
@@ -299,18 +272,18 @@ function h() {
|
|
|
299
272
|
className: "flex items-center gap-2",
|
|
300
273
|
children: [/* @__PURE__ */ f(fe, {
|
|
301
274
|
value: T,
|
|
302
|
-
onChange:
|
|
275
|
+
onChange: ze,
|
|
303
276
|
placeholder: x("vibesPage.searchPlaceholder", "Search vibes..."),
|
|
304
277
|
className: "flex-1 sm:w-64 sm:flex-none"
|
|
305
278
|
}), /* @__PURE__ */ p("div", {
|
|
306
279
|
className: "flex items-center gap-1 bg-bg-sunken rounded-md p-1 flex-shrink-0",
|
|
307
280
|
children: [/* @__PURE__ */ f("button", {
|
|
308
|
-
onClick: () =>
|
|
281
|
+
onClick: () => Ue("grid"),
|
|
309
282
|
className: `p-1.5 sm:p-2 rounded ${k === "grid" ? "bg-bg-surface shadow-sm" : "hover:bg-bg-surface/50"}`,
|
|
310
283
|
title: x("vibesPage.gridViewTitle", "Grid view"),
|
|
311
284
|
children: /* @__PURE__ */ f(we, { className: "w-4 h-4 text-text-secondary" })
|
|
312
285
|
}), /* @__PURE__ */ f("button", {
|
|
313
|
-
onClick: () =>
|
|
286
|
+
onClick: () => Ue("list"),
|
|
314
287
|
className: `p-1.5 sm:p-2 rounded ${k === "list" ? "bg-bg-surface shadow-sm" : "hover:bg-bg-surface/50"}`,
|
|
315
288
|
title: x("vibesPage.listViewTitle", "List view"),
|
|
316
289
|
children: /* @__PURE__ */ f(Te, { className: "w-4 h-4 text-text-secondary" })
|
|
@@ -318,43 +291,34 @@ function h() {
|
|
|
318
291
|
})]
|
|
319
292
|
}), /* @__PURE__ */ p("div", {
|
|
320
293
|
className: "flex items-center gap-2 sm:gap-3 flex-wrap",
|
|
321
|
-
children: [
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
294
|
+
children: [/* @__PURE__ */ f(o, {
|
|
295
|
+
label: x("vibesPage.filterStatus", "Status"),
|
|
296
|
+
value: E,
|
|
297
|
+
options: Re,
|
|
298
|
+
onChange: Be
|
|
299
|
+
}), /* @__PURE__ */ f("div", {
|
|
300
|
+
onMouseDown: G,
|
|
301
|
+
onFocus: G,
|
|
302
|
+
children: /* @__PURE__ */ f(o, {
|
|
303
|
+
label: x("vibesPage.filterAgent", "Agent"),
|
|
304
|
+
value: O,
|
|
305
|
+
options: ft,
|
|
332
306
|
onChange: He
|
|
333
|
-
}),
|
|
334
|
-
/* @__PURE__ */ f("div", {
|
|
335
|
-
onMouseDown: W,
|
|
336
|
-
onFocus: W,
|
|
337
|
-
children: /* @__PURE__ */ f(o, {
|
|
338
|
-
label: x("vibesPage.filterAgent", "Agent"),
|
|
339
|
-
value: O,
|
|
340
|
-
options: mt,
|
|
341
|
-
onChange: Ue
|
|
342
|
-
})
|
|
343
307
|
})
|
|
344
|
-
]
|
|
308
|
+
})]
|
|
345
309
|
})]
|
|
346
310
|
}),
|
|
347
311
|
T || E !== "all" || D !== "all" || O !== "all" ? /* @__PURE__ */ p("p", {
|
|
348
312
|
className: "text-sm text-text-secondary",
|
|
349
313
|
children: [x("vibesPage.showingResults", "Showing {{filtered}} of {{total}} vibes", {
|
|
350
|
-
filtered:
|
|
351
|
-
total:
|
|
352
|
-
}),
|
|
314
|
+
filtered: q.length,
|
|
315
|
+
total: K.length
|
|
316
|
+
}), U && /* @__PURE__ */ f("span", {
|
|
353
317
|
className: "ml-2 text-text-muted",
|
|
354
318
|
children: x("vibesPage.refreshing", "(refreshing...)")
|
|
355
319
|
})]
|
|
356
320
|
}) : null,
|
|
357
|
-
|
|
321
|
+
q.length > 0 && /* @__PURE__ */ f("div", {
|
|
358
322
|
className: "rounded-lg border border-border-default bg-bg-surface p-4",
|
|
359
323
|
children: /* @__PURE__ */ p("div", {
|
|
360
324
|
className: "flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between",
|
|
@@ -363,15 +327,15 @@ function h() {
|
|
|
363
327
|
children: [/* @__PURE__ */ p("div", {
|
|
364
328
|
className: "flex items-center gap-2",
|
|
365
329
|
children: [/* @__PURE__ */ f(me, {
|
|
366
|
-
checked:
|
|
367
|
-
indeterminate:
|
|
368
|
-
onChange:
|
|
330
|
+
checked: X,
|
|
331
|
+
indeterminate: mt,
|
|
332
|
+
onChange: Ct,
|
|
369
333
|
ariaLabel: "Select all visible vibes"
|
|
370
334
|
}), /* @__PURE__ */ f("span", {
|
|
371
335
|
className: "text-sm font-medium text-text-primary",
|
|
372
336
|
children: "Select all visible"
|
|
373
337
|
})]
|
|
374
|
-
}),
|
|
338
|
+
}), z.size > 0 && /* @__PURE__ */ f("button", {
|
|
375
339
|
onClick: Z,
|
|
376
340
|
className: "text-sm text-text-secondary hover:text-text-primary",
|
|
377
341
|
children: "Clear selection"
|
|
@@ -381,31 +345,32 @@ function h() {
|
|
|
381
345
|
children: [
|
|
382
346
|
/* @__PURE__ */ p("span", {
|
|
383
347
|
className: "rounded-full bg-bg-sunken px-3 py-1 text-sm font-medium text-text-secondary",
|
|
384
|
-
children: [
|
|
348
|
+
children: [z.size, " selected"]
|
|
385
349
|
}),
|
|
386
350
|
/* @__PURE__ */ f("button", {
|
|
387
|
-
onClick: () =>
|
|
388
|
-
disabled:
|
|
351
|
+
onClick: () => V("activate"),
|
|
352
|
+
disabled: J.length === 0,
|
|
353
|
+
title: "Mark selected vibes as ACTIVE so they appear in the default vibe list and can run sessions/tunnels via their attached agent(s).",
|
|
389
354
|
className: "rounded-md border border-status-success-border px-3 py-2 text-sm font-medium text-status-success-text hover:bg-status-success-bg disabled:cursor-not-allowed disabled:opacity-50",
|
|
390
355
|
children: /* @__PURE__ */ p("span", {
|
|
391
356
|
className: "inline-flex items-center gap-2",
|
|
392
357
|
children: [
|
|
393
358
|
/* @__PURE__ */ f(Ee, { className: "w-4 h-4" }),
|
|
394
359
|
"Activate Selected",
|
|
395
|
-
|
|
360
|
+
J.length > 0 ? ` (${J.length})` : ""
|
|
396
361
|
]
|
|
397
362
|
})
|
|
398
363
|
}),
|
|
399
364
|
/* @__PURE__ */ f("button", {
|
|
400
|
-
onClick: () =>
|
|
401
|
-
disabled:
|
|
365
|
+
onClick: () => V("archive"),
|
|
366
|
+
disabled: Y.length === 0,
|
|
402
367
|
className: "rounded-md border border-status-warning-border px-3 py-2 text-sm font-medium text-status-warning-text hover:bg-status-warning-bg disabled:cursor-not-allowed disabled:opacity-50",
|
|
403
368
|
children: /* @__PURE__ */ p("span", {
|
|
404
369
|
className: "inline-flex items-center gap-2",
|
|
405
370
|
children: [
|
|
406
371
|
/* @__PURE__ */ f(Ce, { className: "w-4 h-4" }),
|
|
407
372
|
"Archive Selected",
|
|
408
|
-
|
|
373
|
+
Y.length > 0 ? ` (${Y.length})` : ""
|
|
409
374
|
]
|
|
410
375
|
})
|
|
411
376
|
})
|
|
@@ -413,34 +378,34 @@ function h() {
|
|
|
413
378
|
})]
|
|
414
379
|
})
|
|
415
380
|
}),
|
|
416
|
-
|
|
381
|
+
Ot ? /* @__PURE__ */ f(he, {
|
|
417
382
|
variant: "cards",
|
|
418
383
|
count: 6
|
|
419
|
-
}) :
|
|
384
|
+
}) : q.length > 0 ? /* @__PURE__ */ f(je, {
|
|
420
385
|
mode: "wait",
|
|
421
386
|
children: k === "grid" ? /* @__PURE__ */ f(m, {
|
|
422
387
|
stagger: .04,
|
|
423
388
|
className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",
|
|
424
|
-
children:
|
|
389
|
+
children: q.map((e) => /* @__PURE__ */ f(Ne, { children: /* @__PURE__ */ f(ye, {
|
|
425
390
|
vibe: e,
|
|
426
|
-
onOpen:
|
|
427
|
-
onActivate: C ?
|
|
428
|
-
onArchive: C ?
|
|
429
|
-
onOpenInEditor:
|
|
430
|
-
selected:
|
|
431
|
-
onToggleSelect: (t) =>
|
|
391
|
+
onOpen: ht,
|
|
392
|
+
onActivate: C ? gt : void 0,
|
|
393
|
+
onArchive: C ? _t : void 0,
|
|
394
|
+
onOpenInEditor: bt,
|
|
395
|
+
selected: z.has(e.id),
|
|
396
|
+
onToggleSelect: (t) => St(e, t)
|
|
432
397
|
}) }, e.id))
|
|
433
398
|
}, "grid") : /* @__PURE__ */ f(m, { children: /* @__PURE__ */ f(be, {
|
|
434
|
-
vibes:
|
|
435
|
-
onOpen:
|
|
436
|
-
onActivate:
|
|
437
|
-
onArchive:
|
|
438
|
-
onOpenInEditor:
|
|
439
|
-
selectedVibeIds:
|
|
440
|
-
onToggleSelect:
|
|
441
|
-
onToggleAllVisible:
|
|
442
|
-
allVisibleSelected:
|
|
443
|
-
partiallySelected:
|
|
399
|
+
vibes: q,
|
|
400
|
+
onOpen: ht,
|
|
401
|
+
onActivate: gt,
|
|
402
|
+
onArchive: _t,
|
|
403
|
+
onOpenInEditor: bt,
|
|
404
|
+
selectedVibeIds: z,
|
|
405
|
+
onToggleSelect: St,
|
|
406
|
+
onToggleAllVisible: Ct,
|
|
407
|
+
allVisibleSelected: X,
|
|
408
|
+
partiallySelected: mt
|
|
444
409
|
}) }, "list")
|
|
445
410
|
}) : /* @__PURE__ */ f(de, {
|
|
446
411
|
icon: /* @__PURE__ */ f(ke, { className: "w-8 h-8 text-text-secondary" }),
|
|
@@ -451,45 +416,45 @@ function h() {
|
|
|
451
416
|
children: [/* @__PURE__ */ f(Le, {
|
|
452
417
|
permission: s.VIBE_CREATE,
|
|
453
418
|
children: /* @__PURE__ */ p("button", {
|
|
454
|
-
onClick:
|
|
419
|
+
onClick: xt,
|
|
455
420
|
className: "flex items-center gap-2 px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors",
|
|
456
421
|
children: [/* @__PURE__ */ f(De, { className: "w-4 h-4" }), x("vibesPage.addVibe", "Add Vibe")]
|
|
457
422
|
})
|
|
458
423
|
}), /* @__PURE__ */ f(pe, { prompt: "What is a Vibe in VibeControls and how do I create one?" })]
|
|
459
424
|
}) : void 0
|
|
460
425
|
}),
|
|
461
|
-
|
|
426
|
+
Ke && /* @__PURE__ */ f("div", {
|
|
462
427
|
className: "fixed bottom-4 right-4 z-50 px-4 py-3 bg-status-success-bg text-status-success-text rounded-md shadow-lg text-sm",
|
|
463
|
-
children:
|
|
428
|
+
children: Ke
|
|
464
429
|
}),
|
|
465
430
|
/* @__PURE__ */ f(a, {
|
|
466
|
-
isOpen:
|
|
467
|
-
onClose: () =>
|
|
468
|
-
onConfirm:
|
|
431
|
+
isOpen: Ye === "activate",
|
|
432
|
+
onClose: () => V(null),
|
|
433
|
+
onConfirm: wt,
|
|
469
434
|
title: "Activate selected vibes",
|
|
470
|
-
message: `Activate ${
|
|
435
|
+
message: `Activate ${J.length} selected vibe${J.length === 1 ? "" : "s"}?`,
|
|
471
436
|
confirmLabel: "Activate",
|
|
472
437
|
variant: "default"
|
|
473
438
|
}),
|
|
474
439
|
/* @__PURE__ */ f(a, {
|
|
475
|
-
isOpen:
|
|
476
|
-
onClose: () =>
|
|
477
|
-
onConfirm:
|
|
440
|
+
isOpen: Ye === "archive",
|
|
441
|
+
onClose: () => V(null),
|
|
442
|
+
onConfirm: Tt,
|
|
478
443
|
title: "Archive selected vibes",
|
|
479
|
-
message: `Archive ${
|
|
444
|
+
message: `Archive ${Y.length} selected vibe${Y.length === 1 ? "" : "s"}? Archived vibes will be hidden from active workflows.`,
|
|
480
445
|
confirmLabel: "Archive",
|
|
481
446
|
variant: "warning"
|
|
482
447
|
}),
|
|
483
|
-
|
|
448
|
+
Je && /* @__PURE__ */ p("div", {
|
|
484
449
|
role: "alert",
|
|
485
450
|
className: "fixed bottom-4 right-4 z-50 px-4 py-3 bg-status-error-bg text-status-error-text rounded-md shadow-lg text-sm",
|
|
486
|
-
children: [
|
|
487
|
-
onClick:
|
|
451
|
+
children: [Je, /* @__PURE__ */ f("button", {
|
|
452
|
+
onClick: Xe,
|
|
488
453
|
className: "ml-3 text-xs underline opacity-80 hover:opacity-100",
|
|
489
454
|
children: x("vibesPage.dismiss", "Dismiss")
|
|
490
455
|
})]
|
|
491
456
|
}),
|
|
492
|
-
|
|
457
|
+
We && /* @__PURE__ */ f("div", {
|
|
493
458
|
className: "fixed inset-0 bg-bg-overlay flex items-center justify-center z-50 p-4",
|
|
494
459
|
children: /* @__PURE__ */ p("div", {
|
|
495
460
|
className: "bg-bg-surface rounded-lg p-6 w-full max-w-lg",
|
|
@@ -501,9 +466,9 @@ function h() {
|
|
|
501
466
|
/* @__PURE__ */ p("div", {
|
|
502
467
|
className: "space-y-4",
|
|
503
468
|
children: [
|
|
504
|
-
|
|
469
|
+
j && /* @__PURE__ */ f("div", {
|
|
505
470
|
className: "p-3 bg-status-error-bg text-status-error-text text-sm rounded-md",
|
|
506
|
-
children:
|
|
471
|
+
children: j
|
|
507
472
|
}),
|
|
508
473
|
/* @__PURE__ */ p("div", { children: [
|
|
509
474
|
/* @__PURE__ */ f("label", {
|
|
@@ -511,18 +476,18 @@ function h() {
|
|
|
511
476
|
children: x("vibesPage.nameLabel", "Name *")
|
|
512
477
|
}),
|
|
513
478
|
/* @__PURE__ */ f("input", {
|
|
514
|
-
ref:
|
|
479
|
+
ref: Ze,
|
|
515
480
|
type: "text",
|
|
516
481
|
placeholder: x("vibesPage.namePlaceholder", "My Project"),
|
|
517
|
-
onChange: () =>
|
|
482
|
+
onChange: () => I.name && L((e) => ({
|
|
518
483
|
...e,
|
|
519
484
|
name: void 0
|
|
520
485
|
})),
|
|
521
|
-
className: `w-full px-3 py-2 bg-bg-sunken border rounded-md text-text-primary placeholder:text-text-placeholder ${
|
|
486
|
+
className: `w-full px-3 py-2 bg-bg-sunken border rounded-md text-text-primary placeholder:text-text-placeholder ${I.name ? "border-status-error-border" : "border-border-default"}`
|
|
522
487
|
}),
|
|
523
|
-
|
|
488
|
+
I.name && /* @__PURE__ */ f("p", {
|
|
524
489
|
className: "mt-1 text-xs text-status-error-text",
|
|
525
|
-
children:
|
|
490
|
+
children: I.name
|
|
526
491
|
})
|
|
527
492
|
] }),
|
|
528
493
|
/* @__PURE__ */ p("div", { children: [
|
|
@@ -531,30 +496,30 @@ function h() {
|
|
|
531
496
|
children: x("vibesPage.pathLabel", "Path *")
|
|
532
497
|
}),
|
|
533
498
|
/* @__PURE__ */ f("input", {
|
|
534
|
-
ref:
|
|
499
|
+
ref: Qe,
|
|
535
500
|
type: "text",
|
|
536
501
|
placeholder: x("vibesPage.pathPlaceholder", "/path/to/project"),
|
|
537
|
-
onChange: () =>
|
|
502
|
+
onChange: () => I.path && L((e) => ({
|
|
538
503
|
...e,
|
|
539
504
|
path: void 0
|
|
540
505
|
})),
|
|
541
|
-
className: `w-full px-3 py-2 bg-bg-sunken border rounded-md text-text-primary placeholder:text-text-placeholder ${
|
|
506
|
+
className: `w-full px-3 py-2 bg-bg-sunken border rounded-md text-text-primary placeholder:text-text-placeholder ${I.path ? "border-status-error-border" : "border-border-default"}`
|
|
542
507
|
}),
|
|
543
|
-
|
|
508
|
+
I.path && /* @__PURE__ */ f("p", {
|
|
544
509
|
className: "mt-1 text-xs text-status-error-text",
|
|
545
|
-
children:
|
|
510
|
+
children: I.path
|
|
546
511
|
})
|
|
547
512
|
] }),
|
|
548
513
|
/* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f("label", {
|
|
549
514
|
className: "block text-sm font-medium text-text-primary mb-1",
|
|
550
515
|
children: x("vibesPage.agentLabel", "Agent")
|
|
551
516
|
}), /* @__PURE__ */ p("select", {
|
|
552
|
-
ref:
|
|
517
|
+
ref: $e,
|
|
553
518
|
className: "w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary",
|
|
554
519
|
children: [/* @__PURE__ */ f("option", {
|
|
555
520
|
value: "",
|
|
556
521
|
children: x("vibesPage.selectAgent", "Select an agent")
|
|
557
|
-
}),
|
|
522
|
+
}), ft.filter((e) => e.value !== "all").map((e) => /* @__PURE__ */ f("option", {
|
|
558
523
|
value: e.value,
|
|
559
524
|
children: e.label
|
|
560
525
|
}, e.value))]
|
|
@@ -563,7 +528,7 @@ function h() {
|
|
|
563
528
|
className: "block text-sm font-medium text-text-primary mb-1",
|
|
564
529
|
children: x("vibesPage.typeLabel", "Type")
|
|
565
530
|
}), /* @__PURE__ */ p("select", {
|
|
566
|
-
ref:
|
|
531
|
+
ref: et,
|
|
567
532
|
className: "w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary",
|
|
568
533
|
children: [
|
|
569
534
|
/* @__PURE__ */ f("option", {
|
|
@@ -601,31 +566,31 @@ function h() {
|
|
|
601
566
|
children: x("vibesPage.tags", "Tags")
|
|
602
567
|
}), /* @__PURE__ */ f(le, {
|
|
603
568
|
entityType: "VIBECONTROLS_VIBE",
|
|
604
|
-
onDraftChange:
|
|
569
|
+
onDraftChange: nt
|
|
605
570
|
})]
|
|
606
571
|
}),
|
|
607
572
|
/* @__PURE__ */ p("div", {
|
|
608
573
|
className: "flex flex-col sm:flex-row justify-end gap-3 mt-6",
|
|
609
574
|
children: [/* @__PURE__ */ f("button", {
|
|
610
575
|
onClick: () => A(!1),
|
|
611
|
-
disabled:
|
|
576
|
+
disabled: N,
|
|
612
577
|
className: "px-4 py-2 text-text-primary hover:bg-bg-sunken rounded-md transition-colors disabled:opacity-50",
|
|
613
578
|
children: x("vibesPage.cancel", "Cancel")
|
|
614
579
|
}), /* @__PURE__ */ f("button", {
|
|
615
|
-
onClick:
|
|
616
|
-
disabled:
|
|
580
|
+
onClick: Et,
|
|
581
|
+
disabled: N,
|
|
617
582
|
className: "px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-50",
|
|
618
|
-
children:
|
|
583
|
+
children: N ? x("vibesPage.creating", "Creating...") : x("vibesPage.createVibe", "Create Vibe")
|
|
619
584
|
})]
|
|
620
585
|
})
|
|
621
586
|
]
|
|
622
587
|
})
|
|
623
588
|
}),
|
|
624
589
|
/* @__PURE__ */ f(se, {
|
|
625
|
-
isOpen:
|
|
626
|
-
onClose: () =>
|
|
590
|
+
isOpen: qe,
|
|
591
|
+
onClose: () => F(!1),
|
|
627
592
|
onConfirm: () => {
|
|
628
|
-
|
|
593
|
+
F(!1), g("/billing");
|
|
629
594
|
},
|
|
630
595
|
title: "Vibe Quota Reached",
|
|
631
596
|
message: "You've used all available vibe creation quota on your current plan. Upgrade your plan to create more vibes."
|