@burdenoff/microfe-vibecontrols 2026.1003.2 → 2026.1004.1
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/assistant/assistantProduct.js +51 -1
- package/dist/components/assistant/assistantProduct.js.map +1 -1
- package/dist/pages/TemplatesPage.js +94 -75
- package/dist/pages/TemplatesPage.js.map +1 -1
- package/dist/pages/VibesPage.js +309 -247
- package/dist/pages/VibesPage.js.map +1 -1
- package/package.json +2 -2
package/dist/pages/VibesPage.js
CHANGED
|
@@ -33,80 +33,109 @@ import { AnimatePresence as ze } from "framer-motion";
|
|
|
33
33
|
import { Fragment as Be, jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
34
34
|
import { Button as Ve, CTAOverflowMenu as He, PagePurpose as Ue } from "@burdenoff/fe-libs/ui";
|
|
35
35
|
import { AccessDenied as We, PermissionButton as f, PermissionGate as Ge } from "@burdenoff/fe-libs/shared/components";
|
|
36
|
-
import { MotionItem as Ke, MotionList as
|
|
36
|
+
import { MotionItem as Ke, MotionList as qe, MotionPage as Je } from "@burdenoff/fe-libs/shared/motion";
|
|
37
|
+
import { useAssistantPageControls as Ye } from "@burdenoff/fe-libs/shared/assistant/appControls/useAssistantControl";
|
|
38
|
+
import { enumFilter as Xe, filtersOf as Ze, openersOf as Qe, searchOf as $e } from "@burdenoff/fe-libs/shared/assistant/appControls/pageAdapters";
|
|
37
39
|
//#region src/pages/VibesPage.tsx
|
|
38
|
-
function
|
|
39
|
-
let { onVibeActivate:
|
|
40
|
-
let r =
|
|
40
|
+
function et() {
|
|
41
|
+
let { onVibeActivate: et, workspaceId: p } = oe(), tt = se(), { hasPermission: m, isLoading: h, permissions: nt } = Re(), { t: rt } = Oe(), { isFree: it, approachingLimits: at } = ke({ resource: "vibes" }), g = at[0], _ = o((e, t, n) => {
|
|
42
|
+
let r = rt(e, n), i = r === e ? t : r;
|
|
41
43
|
return n ? Object.entries(n).reduce((e, [t, n]) => e.replace(`{{${t}}}`, String(n)), i) : i;
|
|
42
|
-
}, [
|
|
44
|
+
}, [rt]), v = s(() => [
|
|
43
45
|
{
|
|
44
46
|
value: "all",
|
|
45
|
-
label:
|
|
47
|
+
label: _("vibesPage.statusAll", "All Statuses")
|
|
46
48
|
},
|
|
47
49
|
{
|
|
48
50
|
value: "ACTIVE",
|
|
49
|
-
label:
|
|
51
|
+
label: _("vibesPage.statusActive", "Active")
|
|
50
52
|
},
|
|
51
53
|
{
|
|
52
54
|
value: "INACTIVE",
|
|
53
|
-
label:
|
|
55
|
+
label: _("vibesPage.statusInactive", "Inactive")
|
|
54
56
|
},
|
|
55
57
|
{
|
|
56
58
|
value: "ARCHIVED",
|
|
57
|
-
label:
|
|
59
|
+
label: _("vibesPage.statusArchived", "Archived")
|
|
58
60
|
},
|
|
59
61
|
{
|
|
60
62
|
value: "ERROR",
|
|
61
|
-
label:
|
|
63
|
+
label: _("vibesPage.statusError", "Error")
|
|
62
64
|
}
|
|
63
|
-
]
|
|
64
|
-
|
|
65
|
-
|
|
65
|
+
], [_]), ot = s(() => [
|
|
66
|
+
{
|
|
67
|
+
value: "all",
|
|
68
|
+
label: _("vibesPage.typeAll", "All Types")
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
value: "PROJECT",
|
|
72
|
+
label: _("vibesPage.typeProject", "Project")
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
value: "REPOSITORY",
|
|
76
|
+
label: _("vibesPage.typeRepository", "Repository")
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
value: "WORKSPACE",
|
|
80
|
+
label: _("vibesPage.typeWorkspace", "Workspace")
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
value: "MONOREPO",
|
|
84
|
+
label: _("vibesPage.typeMonorepo", "Monorepo")
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
value: "PACKAGE",
|
|
88
|
+
label: _("vibesPage.typePackage", "Package")
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
value: "CUSTOM",
|
|
92
|
+
label: _("vibesPage.typeCustom", "Custom")
|
|
93
|
+
}
|
|
94
|
+
], [_]), st = m(a.VIBE_LIST), ct = m(a.VIBE_UPDATE), lt = m(a.VIBE_DELETE), y = h || !st, [b, ut] = l(""), [x, dt] = l("all"), [S, ft] = l("all"), [C, pt] = l("all"), [w, mt] = l("grid"), [ht, T] = l(!1), [gt, E] = l(null), [D, _t] = l(!1), [vt, O] = l(null), [yt, k] = l(!1), [A, j] = l({}), [bt, M] = l(null), [N, P] = l(/* @__PURE__ */ new Set()), [xt, F] = l(null), I = c(null);
|
|
66
95
|
De(() => () => {
|
|
67
|
-
|
|
96
|
+
I.current && clearTimeout(I.current);
|
|
68
97
|
}, []);
|
|
69
|
-
let
|
|
70
|
-
|
|
71
|
-
}, []),
|
|
98
|
+
let St = o(() => {
|
|
99
|
+
M(null), I.current &&= (clearTimeout(I.current), null);
|
|
100
|
+
}, []), Ct = c(null), wt = c(null), Tt = c(null), Et = c(null), [Dt] = n(), [Ot] = t(), { setDraftTagIds: kt, flushTags: At } = me("VIBECONTROLS_VIBE"), [jt] = te(), [Mt] = e(), [Nt, { loading: Pt }] = r(), [L, R] = l(null), { data: Ft, loading: z, error: It, refetch: B } = ee({
|
|
72
101
|
variables: s(() => {
|
|
73
102
|
let e = {};
|
|
74
|
-
return
|
|
103
|
+
return p && (e.workspaceId = p), x !== "all" && (e.status = x), S !== "all" && (e.type = S), C !== "all" && (e.attachedAgentIds = [C]), {
|
|
75
104
|
filter: e,
|
|
76
105
|
pagination: { limit: 50 }
|
|
77
106
|
};
|
|
78
107
|
}, [
|
|
79
|
-
|
|
108
|
+
p,
|
|
109
|
+
x,
|
|
80
110
|
S,
|
|
81
|
-
C
|
|
82
|
-
w
|
|
111
|
+
C
|
|
83
112
|
]),
|
|
84
|
-
fetchPolicy:
|
|
113
|
+
fetchPolicy: x === "all" && S === "all" && C === "all" ? "cache-first" : "cache-and-network",
|
|
85
114
|
nextFetchPolicy: "cache-first",
|
|
86
|
-
skip:
|
|
115
|
+
skip: y,
|
|
87
116
|
notifyOnNetworkStatusChange: !0
|
|
88
|
-
}), { agents:
|
|
89
|
-
|
|
90
|
-
}, [
|
|
91
|
-
let e =
|
|
117
|
+
}), { agents: Lt } = le(), [Rt, { data: zt }] = i({ fetchPolicy: "cache-first" }), Bt = c(!1), V = o(() => {
|
|
118
|
+
Bt.current || y || (Bt.current = !0, Rt({ variables: { pagination: { limit: 100 } } }));
|
|
119
|
+
}, [Rt, y]), Vt = s(() => {
|
|
120
|
+
let e = zt?.vibecontrolsAgents ?? null, t = e ? e.map((e) => ({
|
|
92
121
|
id: e.id,
|
|
93
122
|
name: e.name
|
|
94
|
-
})) :
|
|
123
|
+
})) : Lt.map((e) => ({
|
|
95
124
|
id: e.id,
|
|
96
125
|
name: e.name
|
|
97
126
|
}));
|
|
98
127
|
return [{
|
|
99
128
|
value: "all",
|
|
100
|
-
label:
|
|
129
|
+
label: _("vibesPage.allAgents", "All Agents")
|
|
101
130
|
}, ...t.map((e) => ({
|
|
102
131
|
value: e.id,
|
|
103
132
|
label: e.name
|
|
104
133
|
}))];
|
|
105
134
|
}, [
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
]),
|
|
135
|
+
zt?.vibecontrolsAgents,
|
|
136
|
+
Lt,
|
|
137
|
+
_
|
|
138
|
+
]), H = s(() => (Ft?.vibes?.items ?? []).map((e) => ({
|
|
110
139
|
id: e.id,
|
|
111
140
|
workspaceId: e.workspaceId,
|
|
112
141
|
name: e.name,
|
|
@@ -124,39 +153,39 @@ function m() {
|
|
|
124
153
|
createdAt: e.createdAt,
|
|
125
154
|
updatedAt: e.updatedAt,
|
|
126
155
|
agents: []
|
|
127
|
-
})), [
|
|
128
|
-
if (
|
|
129
|
-
let t =
|
|
156
|
+
})), [Ft?.vibes?.items]), U = s(() => H.filter((e) => {
|
|
157
|
+
if (b) {
|
|
158
|
+
let t = b.toLowerCase();
|
|
130
159
|
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;
|
|
131
160
|
}
|
|
132
161
|
return !0;
|
|
133
|
-
}), [
|
|
134
|
-
|
|
135
|
-
},
|
|
162
|
+
}), [H, b]), Ht = s(() => H.filter((e) => N.has(e.id)), [H, N]), W = Ht.filter((e) => e.status !== "ACTIVE"), G = Ht.filter((e) => e.status !== "ARCHIVED"), K = U.length > 0 && U.every((e) => N.has(e.id)), Ut = U.some((e) => N.has(e.id)) && !K, Wt = (e) => {
|
|
163
|
+
tt(`/vibes/${e.id}`);
|
|
164
|
+
}, Gt = async (e) => {
|
|
136
165
|
try {
|
|
137
|
-
(await
|
|
166
|
+
(await jt({ variables: {
|
|
138
167
|
id: e.id,
|
|
139
168
|
status: "ACTIVE"
|
|
140
|
-
} })).data?.updateVibeStatus && (
|
|
169
|
+
} })).data?.updateVibeStatus && (et?.({
|
|
141
170
|
id: e.id,
|
|
142
171
|
name: e.name,
|
|
143
172
|
type: e.type,
|
|
144
173
|
status: "ACTIVE"
|
|
145
|
-
}), await
|
|
174
|
+
}), await B());
|
|
146
175
|
} catch (e) {
|
|
147
176
|
console.error("Failed to activate vibe:", e);
|
|
148
177
|
}
|
|
149
|
-
},
|
|
178
|
+
}, q = async (e) => {
|
|
150
179
|
try {
|
|
151
|
-
await
|
|
180
|
+
await Mt({ variables: { id: e.id } }), await B();
|
|
152
181
|
} catch (e) {
|
|
153
182
|
console.error("Failed to archive vibe:", e);
|
|
154
183
|
}
|
|
155
|
-
},
|
|
156
|
-
if (!
|
|
157
|
-
let t =
|
|
184
|
+
}, Kt = async (e) => {
|
|
185
|
+
if (!L) return;
|
|
186
|
+
let t = L.id;
|
|
158
187
|
try {
|
|
159
|
-
await
|
|
188
|
+
await Nt({
|
|
160
189
|
variables: {
|
|
161
190
|
id: t,
|
|
162
191
|
deleteRelatedEntities: e
|
|
@@ -167,65 +196,98 @@ function m() {
|
|
|
167
196
|
id: t
|
|
168
197
|
}) }), e.gc();
|
|
169
198
|
}
|
|
170
|
-
}),
|
|
199
|
+
}), R(null), await B();
|
|
171
200
|
} catch (e) {
|
|
172
201
|
console.error("Failed to delete vibe:", e);
|
|
173
202
|
}
|
|
174
|
-
},
|
|
203
|
+
}, qt = ce((e) => e.preferredIdeCommand), Jt = ce((e) => e.vibeIdeOverrides), Yt = (e) => {
|
|
175
204
|
if (!e.path) {
|
|
176
|
-
|
|
177
|
-
|
|
205
|
+
M(_("vibesPage.openEditorPathMissing", "No path available to open in editor")), I.current = setTimeout(() => {
|
|
206
|
+
M(null), I.current = null;
|
|
178
207
|
}, 3e3);
|
|
179
208
|
return;
|
|
180
209
|
}
|
|
181
|
-
let t = Ce(e.id,
|
|
182
|
-
r ? window.location.href = r : (
|
|
183
|
-
|
|
210
|
+
let t = Ce(e.id, qt, Jt), n = Se(t), r = n ? xe(n, e.path) : `vscode://file/${e.path}`;
|
|
211
|
+
r ? window.location.href = r : (M(_("vibesPage.openEditorNoProtocol", `${n?.label ?? t} has no URL handler — open this Vibe and use the editor menu.`)), I.current = setTimeout(() => {
|
|
212
|
+
M(null), I.current = null;
|
|
184
213
|
}, 4e3));
|
|
185
|
-
},
|
|
186
|
-
|
|
187
|
-
}, [
|
|
214
|
+
}, J = o(() => {
|
|
215
|
+
E(null), T(!0), V();
|
|
216
|
+
}, [V]), Xt = m(a.VIBE_CREATE);
|
|
217
|
+
Ye(s(() => ({
|
|
218
|
+
page: _("vibesPage.assistantPage", "Vibes"),
|
|
219
|
+
filters: Ze([Xe({
|
|
220
|
+
id: "status",
|
|
221
|
+
label: _("vibesPage.filterStatus", "Status"),
|
|
222
|
+
options: v,
|
|
223
|
+
neutral: "all",
|
|
224
|
+
value: x,
|
|
225
|
+
set: dt
|
|
226
|
+
}), Xe({
|
|
227
|
+
id: "type",
|
|
228
|
+
label: _("vibesPage.assistantType", "Type"),
|
|
229
|
+
options: ot,
|
|
230
|
+
neutral: "all",
|
|
231
|
+
value: S,
|
|
232
|
+
set: ft
|
|
233
|
+
})]),
|
|
234
|
+
search: $e(ut),
|
|
235
|
+
...Xt ? { openers: Qe([{
|
|
236
|
+
id: "create-vibe",
|
|
237
|
+
label: _("vibesPage.assistantCreateVibe", "Create vibe"),
|
|
238
|
+
open: J
|
|
239
|
+
}]) } : {}
|
|
240
|
+
}), [
|
|
241
|
+
_,
|
|
242
|
+
v,
|
|
243
|
+
ot,
|
|
244
|
+
x,
|
|
245
|
+
S,
|
|
246
|
+
Xt,
|
|
247
|
+
J
|
|
248
|
+
]));
|
|
249
|
+
let [Y, Zt] = Le();
|
|
188
250
|
De(() => {
|
|
189
|
-
if (
|
|
190
|
-
|
|
191
|
-
let e = new URLSearchParams(
|
|
192
|
-
e.delete("create"),
|
|
251
|
+
if (Y.get("create") === "true") {
|
|
252
|
+
J();
|
|
253
|
+
let e = new URLSearchParams(Y);
|
|
254
|
+
e.delete("create"), Zt(e, { replace: !0 });
|
|
193
255
|
}
|
|
194
256
|
}, [
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
257
|
+
Y,
|
|
258
|
+
Zt,
|
|
259
|
+
J
|
|
198
260
|
]);
|
|
199
|
-
let
|
|
200
|
-
|
|
261
|
+
let Qt = (e, t) => {
|
|
262
|
+
P((n) => {
|
|
201
263
|
let r = new Set(n);
|
|
202
264
|
return t ? r.add(e.id) : r.delete(e.id), r;
|
|
203
265
|
});
|
|
204
|
-
},
|
|
205
|
-
|
|
266
|
+
}, $t = (e) => {
|
|
267
|
+
P((t) => {
|
|
206
268
|
let n = new Set(t);
|
|
207
|
-
return
|
|
269
|
+
return U.forEach((t) => {
|
|
208
270
|
e ? n.add(t.id) : n.delete(t.id);
|
|
209
271
|
}), n;
|
|
210
272
|
});
|
|
211
|
-
},
|
|
212
|
-
if (
|
|
213
|
-
let e = await Promise.allSettled(
|
|
273
|
+
}, X = () => P(/* @__PURE__ */ new Set()), en = async () => {
|
|
274
|
+
if (W.length === 0) return;
|
|
275
|
+
let e = await Promise.allSettled(W.map((e) => jt({ variables: {
|
|
214
276
|
id: e.id,
|
|
215
277
|
status: "ACTIVE"
|
|
216
278
|
} }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
|
|
217
|
-
|
|
218
|
-
},
|
|
219
|
-
if (
|
|
220
|
-
let e = await Promise.allSettled(
|
|
221
|
-
|
|
222
|
-
},
|
|
223
|
-
let e =
|
|
224
|
-
if (e || (i.name =
|
|
225
|
-
|
|
279
|
+
O(`Activated ${t} vibe${t === 1 ? "" : "s"}${n > 0 ? ` • ${n} failed` : ""}`), setTimeout(() => O(null), 4e3), X(), F(null), await B();
|
|
280
|
+
}, tn = async () => {
|
|
281
|
+
if (G.length === 0) return;
|
|
282
|
+
let e = await Promise.allSettled(G.map((e) => Mt({ variables: { id: e.id } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
|
|
283
|
+
O(`Archived ${t} vibe${t === 1 ? "" : "s"}${n > 0 ? ` • ${n} failed` : ""}`), setTimeout(() => O(null), 4e3), X(), F(null), await B();
|
|
284
|
+
}, nn = async () => {
|
|
285
|
+
let e = Ct.current?.value?.trim(), t = wt.current?.value?.trim(), n = Tt.current?.value, r = Et.current?.value, i = {};
|
|
286
|
+
if (e || (i.name = _("vibesPage.nameRequired", "Name is required")), i.name) {
|
|
287
|
+
j(i), E(_("vibesPage.fillRequired", "Please fill in all required fields"));
|
|
226
288
|
return;
|
|
227
289
|
}
|
|
228
|
-
|
|
290
|
+
j({});
|
|
229
291
|
let ee = [
|
|
230
292
|
"PROJECT",
|
|
231
293
|
"REPOSITORY",
|
|
@@ -234,147 +296,147 @@ function m() {
|
|
|
234
296
|
"PACKAGE",
|
|
235
297
|
"CUSTOM"
|
|
236
298
|
].includes(r) ? r : "PROJECT";
|
|
237
|
-
|
|
299
|
+
_t(!0), E(null);
|
|
238
300
|
try {
|
|
239
|
-
let r = await
|
|
301
|
+
let r = await Dt({ variables: { input: {
|
|
240
302
|
name: e,
|
|
241
303
|
path: t ?? "",
|
|
242
304
|
type: ee
|
|
243
305
|
} } });
|
|
244
|
-
if (!r.data?.createVibe?.id) throw Error(
|
|
306
|
+
if (!r.data?.createVibe?.id) throw Error(_("vibesPage.failedCreate", "Failed to create vibe"));
|
|
245
307
|
let i = r.data.createVibe.id;
|
|
246
308
|
if (n) try {
|
|
247
|
-
await
|
|
309
|
+
await Ot({ variables: { input: {
|
|
248
310
|
vibeId: i,
|
|
249
311
|
agentId: n
|
|
250
312
|
} } });
|
|
251
313
|
} catch {}
|
|
252
|
-
|
|
314
|
+
T(!1), O(_("vibesPage.createdSuccess", "Vibe created successfully")), await At(i), await B(), setTimeout(() => O(null), 3e3);
|
|
253
315
|
} catch (e) {
|
|
254
316
|
if (ie(e)) {
|
|
255
|
-
|
|
317
|
+
T(!1), E(null), j({}), ae(), k(!0);
|
|
256
318
|
return;
|
|
257
319
|
}
|
|
258
|
-
|
|
320
|
+
E(e instanceof Error ? e.message : _("vibesPage.failedCreate", "Failed to create vibe"));
|
|
259
321
|
} finally {
|
|
260
|
-
|
|
322
|
+
_t(!1);
|
|
261
323
|
}
|
|
262
|
-
},
|
|
263
|
-
total:
|
|
264
|
-
active:
|
|
265
|
-
inactive:
|
|
266
|
-
},
|
|
267
|
-
return /* @__PURE__ */ d(
|
|
324
|
+
}, rn = {
|
|
325
|
+
total: H.length,
|
|
326
|
+
active: H.filter((e) => e.status === "ACTIVE").length,
|
|
327
|
+
inactive: H.filter((e) => e.status === "INACTIVE").length
|
|
328
|
+
}, Z = h, Q = !h && !!nt && (nt.permissionStrings?.length ?? 0) > 0 && !st, an = !Z && !Q && z && H.length === 0, $ = !Z && !Q && !!It && H.length === 0, on = !Z && !Q && !$;
|
|
329
|
+
return /* @__PURE__ */ d(Je, {
|
|
268
330
|
className: "space-y-6 px-6 lg:px-8 py-6 bg-bg-canvas min-h-screen",
|
|
269
331
|
children: [
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
title:
|
|
273
|
-
description:
|
|
332
|
+
Z && /* @__PURE__ */ u(de, { message: _("vibesPage.loadingPermissions", "Loading permissions...") }),
|
|
333
|
+
Q && /* @__PURE__ */ u(We, {
|
|
334
|
+
title: _("vibesPage.accessDeniedTitle", "Access Denied"),
|
|
335
|
+
description: _("vibesPage.accessDeniedDescription", "You don't have permission to view vibes. Contact your workspace administrator for access.")
|
|
274
336
|
}),
|
|
275
|
-
|
|
276
|
-
title:
|
|
277
|
-
message:
|
|
278
|
-
onRetry: () =>
|
|
337
|
+
$ && /* @__PURE__ */ u(fe, {
|
|
338
|
+
title: _("vibesPage.failedLoad", "Failed to load vibes"),
|
|
339
|
+
message: It?.message ?? "",
|
|
340
|
+
onRetry: () => B()
|
|
279
341
|
}),
|
|
280
|
-
|
|
342
|
+
on && /* @__PURE__ */ d(Be, { children: [
|
|
281
343
|
/* @__PURE__ */ u(ue, {
|
|
282
|
-
title:
|
|
283
|
-
description:
|
|
284
|
-
active:
|
|
285
|
-
total:
|
|
344
|
+
title: _("vibesPage.title", "Vibes"),
|
|
345
|
+
description: _("vibesPage.descriptionActive", "{{active}} of {{total}} vibes active", {
|
|
346
|
+
active: rn.active,
|
|
347
|
+
total: rn.total
|
|
286
348
|
}),
|
|
287
349
|
actions: /* @__PURE__ */ d("div", {
|
|
288
350
|
className: "flex items-center gap-2",
|
|
289
351
|
children: [
|
|
290
|
-
|
|
352
|
+
it && g && typeof g.limit == "number" && /* @__PURE__ */ u("a", {
|
|
291
353
|
href: "/billing/plans",
|
|
292
|
-
className: `inline-flex items-center gap-1 px-2 py-1 text-xs font-medium rounded-md border ${
|
|
293
|
-
title:
|
|
294
|
-
children:
|
|
295
|
-
current:
|
|
296
|
-
limit:
|
|
354
|
+
className: `inline-flex items-center gap-1 px-2 py-1 text-xs font-medium rounded-md border ${g.current >= g.limit ? "border-status-error-border bg-status-error-bg-subtle text-status-error-text" : "border-status-warning-border bg-status-warning-bg-subtle text-status-warning-text"}`,
|
|
355
|
+
title: _("vibesPage.upgradeChipTooltip", "Free plan limit — upgrade for more vibes"),
|
|
356
|
+
children: _("vibesPage.usageChip", "{{current}} of {{limit}} vibes used", {
|
|
357
|
+
current: g.current,
|
|
358
|
+
limit: g.limit
|
|
297
359
|
})
|
|
298
360
|
}),
|
|
299
361
|
/* @__PURE__ */ u(f, {
|
|
300
362
|
permission: a.VIBE_CREATE,
|
|
301
363
|
deniedBehavior: "disable",
|
|
302
|
-
deniedTooltip:
|
|
364
|
+
deniedTooltip: _("vibesPage.deniedCreateTooltip", "You don't have permission to create vibes"),
|
|
303
365
|
children: /* @__PURE__ */ d(Ve, {
|
|
304
366
|
type: "button",
|
|
305
|
-
onClick:
|
|
367
|
+
onClick: J,
|
|
306
368
|
className: "gap-2",
|
|
307
|
-
children: [/* @__PURE__ */ u(Pe, { className: "size-4" }),
|
|
369
|
+
children: [/* @__PURE__ */ u(Pe, { className: "size-4" }), _("vibesPage.addVibe", "Add Vibe")]
|
|
308
370
|
})
|
|
309
371
|
}),
|
|
310
372
|
/* @__PURE__ */ u(He, { actions: [{
|
|
311
|
-
label:
|
|
312
|
-
onSelect: () => void
|
|
313
|
-
disabled:
|
|
314
|
-
icon: /* @__PURE__ */ u(Fe, { className: `size-4 ${
|
|
373
|
+
label: _("vibesPage.refreshTitle", "Refresh vibes"),
|
|
374
|
+
onSelect: () => void B(),
|
|
375
|
+
disabled: z,
|
|
376
|
+
icon: /* @__PURE__ */ u(Fe, { className: `size-4 ${z ? "animate-spin" : ""}` })
|
|
315
377
|
}] })
|
|
316
378
|
]
|
|
317
379
|
})
|
|
318
380
|
}),
|
|
319
381
|
/* @__PURE__ */ u(Ue, {
|
|
320
382
|
icon: /* @__PURE__ */ u(Ie, { className: "size-4" }),
|
|
321
|
-
children:
|
|
383
|
+
children: _("vibesPage.purpose", "A vibe is a workspace for a piece of work — a project, an experiment, a support task. It ties together the agent that runs your commands, the sessions you open, notes, schedules and audit history in one place. Create a vibe whenever you want a focused, shareable space to get something done with AI and your own machines.")
|
|
322
384
|
}),
|
|
323
385
|
/* @__PURE__ */ d("div", {
|
|
324
386
|
className: "space-y-3",
|
|
325
387
|
children: [/* @__PURE__ */ d("div", {
|
|
326
388
|
className: "flex items-center gap-2",
|
|
327
389
|
children: [/* @__PURE__ */ u(ge, {
|
|
328
|
-
value:
|
|
329
|
-
onChange:
|
|
330
|
-
placeholder:
|
|
390
|
+
value: b,
|
|
391
|
+
onChange: ut,
|
|
392
|
+
placeholder: _("vibesPage.searchPlaceholder", "Search vibes..."),
|
|
331
393
|
className: "flex-1 sm:w-64 sm:flex-none"
|
|
332
394
|
}), /* @__PURE__ */ d("div", {
|
|
333
395
|
className: "flex items-center gap-1 bg-bg-sunken rounded-button p-1 flex-shrink-0 border border-border-subtle",
|
|
334
396
|
children: [/* @__PURE__ */ u("button", {
|
|
335
397
|
type: "button",
|
|
336
|
-
onClick: () =>
|
|
337
|
-
className: `p-1.5 sm:p-2 rounded ${
|
|
338
|
-
title:
|
|
398
|
+
onClick: () => mt("grid"),
|
|
399
|
+
className: `p-1.5 sm:p-2 rounded ${w === "grid" ? "bg-[var(--color-accent-soft)] text-text-primary" : "text-text-secondary hover:bg-bg-surface/60"}`,
|
|
400
|
+
title: _("vibesPage.gridViewTitle", "Grid view"),
|
|
339
401
|
children: /* @__PURE__ */ u(je, { className: "size-4 text-text-secondary" })
|
|
340
402
|
}), /* @__PURE__ */ u("button", {
|
|
341
403
|
type: "button",
|
|
342
|
-
onClick: () =>
|
|
343
|
-
className: `p-1.5 sm:p-2 rounded ${
|
|
344
|
-
title:
|
|
404
|
+
onClick: () => mt("list"),
|
|
405
|
+
className: `p-1.5 sm:p-2 rounded ${w === "list" ? "bg-[var(--color-accent-soft)] text-text-primary" : "text-text-secondary hover:bg-bg-surface/60"}`,
|
|
406
|
+
title: _("vibesPage.listViewTitle", "List view"),
|
|
345
407
|
children: /* @__PURE__ */ u(Me, { className: "size-4 text-text-secondary" })
|
|
346
408
|
})]
|
|
347
409
|
})]
|
|
348
410
|
}), /* @__PURE__ */ d("div", {
|
|
349
411
|
className: "flex items-center gap-2 sm:gap-3 flex-wrap",
|
|
350
412
|
children: [/* @__PURE__ */ u(_e, {
|
|
351
|
-
label:
|
|
352
|
-
value:
|
|
353
|
-
options:
|
|
354
|
-
onChange:
|
|
413
|
+
label: _("vibesPage.filterStatus", "Status"),
|
|
414
|
+
value: x,
|
|
415
|
+
options: v,
|
|
416
|
+
onChange: dt
|
|
355
417
|
}), /* @__PURE__ */ u("div", {
|
|
356
|
-
onMouseDown:
|
|
357
|
-
onFocus:
|
|
418
|
+
onMouseDown: V,
|
|
419
|
+
onFocus: V,
|
|
358
420
|
children: /* @__PURE__ */ u(_e, {
|
|
359
|
-
label:
|
|
360
|
-
value:
|
|
361
|
-
options:
|
|
362
|
-
onChange:
|
|
421
|
+
label: _("vibesPage.filterAgent", "Agent"),
|
|
422
|
+
value: C,
|
|
423
|
+
options: Vt,
|
|
424
|
+
onChange: pt
|
|
363
425
|
})
|
|
364
426
|
})]
|
|
365
427
|
})]
|
|
366
428
|
}),
|
|
367
|
-
|
|
429
|
+
b || x !== "all" || S !== "all" || C !== "all" ? /* @__PURE__ */ d("p", {
|
|
368
430
|
className: "text-sm text-text-secondary",
|
|
369
|
-
children: [
|
|
370
|
-
filtered:
|
|
371
|
-
total:
|
|
372
|
-
}),
|
|
431
|
+
children: [_("vibesPage.showingResults", "Showing {{filtered}} of {{total}} vibes", {
|
|
432
|
+
filtered: U.length,
|
|
433
|
+
total: H.length
|
|
434
|
+
}), z && /* @__PURE__ */ u("span", {
|
|
373
435
|
className: "ml-2 text-text-muted",
|
|
374
|
-
children:
|
|
436
|
+
children: _("vibesPage.refreshing", "(refreshing...)")
|
|
375
437
|
})]
|
|
376
438
|
}) : null,
|
|
377
|
-
|
|
439
|
+
U.length > 0 && /* @__PURE__ */ u("div", {
|
|
378
440
|
className: "rounded-card border border-border-subtle bg-bg-surface shadow-elevation-1 p-5",
|
|
379
441
|
children: /* @__PURE__ */ d("div", {
|
|
380
442
|
className: "flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between",
|
|
@@ -383,17 +445,17 @@ function m() {
|
|
|
383
445
|
children: [/* @__PURE__ */ d("div", {
|
|
384
446
|
className: "flex items-center gap-2",
|
|
385
447
|
children: [/* @__PURE__ */ u(ye, {
|
|
386
|
-
checked:
|
|
387
|
-
indeterminate:
|
|
388
|
-
onChange:
|
|
448
|
+
checked: K,
|
|
449
|
+
indeterminate: Ut,
|
|
450
|
+
onChange: $t,
|
|
389
451
|
ariaLabel: "Select all visible vibes"
|
|
390
452
|
}), /* @__PURE__ */ u("span", {
|
|
391
453
|
className: "text-sm font-medium text-text-primary",
|
|
392
454
|
children: "Select all visible"
|
|
393
455
|
})]
|
|
394
|
-
}),
|
|
456
|
+
}), N.size > 0 && /* @__PURE__ */ u("button", {
|
|
395
457
|
type: "button",
|
|
396
|
-
onClick:
|
|
458
|
+
onClick: X,
|
|
397
459
|
className: "text-sm text-text-secondary hover:text-text-primary",
|
|
398
460
|
children: "Clear selection"
|
|
399
461
|
})]
|
|
@@ -402,15 +464,15 @@ function m() {
|
|
|
402
464
|
children: [
|
|
403
465
|
/* @__PURE__ */ d("span", {
|
|
404
466
|
className: "rounded-full bg-bg-sunken px-3 py-1 text-sm font-medium text-text-secondary",
|
|
405
|
-
children: [
|
|
467
|
+
children: [N.size, " selected"]
|
|
406
468
|
}),
|
|
407
469
|
/* @__PURE__ */ u(f, {
|
|
408
470
|
permission: a.VIBE_UPDATE,
|
|
409
471
|
deniedBehavior: "hide",
|
|
410
472
|
children: /* @__PURE__ */ u("button", {
|
|
411
473
|
type: "button",
|
|
412
|
-
onClick: () =>
|
|
413
|
-
disabled:
|
|
474
|
+
onClick: () => F("activate"),
|
|
475
|
+
disabled: W.length === 0,
|
|
414
476
|
title: "Mark selected vibes as ACTIVE so they appear in the default vibe list and can run sessions/tunnels via their attached agent(s).",
|
|
415
477
|
className: "rounded-button border border-status-success-border px-3 py-2 text-sm font-medium text-status-success-text hover:bg-status-success-bg-subtle transition-colors disabled:cursor-not-allowed disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus",
|
|
416
478
|
children: /* @__PURE__ */ d("span", {
|
|
@@ -418,7 +480,7 @@ function m() {
|
|
|
418
480
|
children: [
|
|
419
481
|
/* @__PURE__ */ u(Ne, { className: "size-4" }),
|
|
420
482
|
"Activate Selected",
|
|
421
|
-
|
|
483
|
+
W.length > 0 ? ` (${W.length})` : ""
|
|
422
484
|
]
|
|
423
485
|
})
|
|
424
486
|
})
|
|
@@ -428,15 +490,15 @@ function m() {
|
|
|
428
490
|
deniedBehavior: "hide",
|
|
429
491
|
children: /* @__PURE__ */ u("button", {
|
|
430
492
|
type: "button",
|
|
431
|
-
onClick: () =>
|
|
432
|
-
disabled:
|
|
493
|
+
onClick: () => F("archive"),
|
|
494
|
+
disabled: G.length === 0,
|
|
433
495
|
className: "rounded-button border border-status-warning-border px-3 py-2 text-sm font-medium text-status-warning-text hover:bg-status-warning-bg-subtle transition-colors disabled:cursor-not-allowed disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus",
|
|
434
496
|
children: /* @__PURE__ */ d("span", {
|
|
435
497
|
className: "inline-flex items-center gap-2",
|
|
436
498
|
children: [
|
|
437
499
|
/* @__PURE__ */ u(Ae, { className: "size-4" }),
|
|
438
500
|
"Archive Selected",
|
|
439
|
-
|
|
501
|
+
G.length > 0 ? ` (${G.length})` : ""
|
|
440
502
|
]
|
|
441
503
|
})
|
|
442
504
|
})
|
|
@@ -445,165 +507,165 @@ function m() {
|
|
|
445
507
|
})]
|
|
446
508
|
})
|
|
447
509
|
}),
|
|
448
|
-
|
|
510
|
+
an ? /* @__PURE__ */ u(be, {
|
|
449
511
|
variant: "cards",
|
|
450
512
|
count: 6
|
|
451
|
-
}) :
|
|
513
|
+
}) : U.length > 0 ? /* @__PURE__ */ u(ze, {
|
|
452
514
|
mode: "wait",
|
|
453
|
-
children:
|
|
515
|
+
children: w === "grid" ? /* @__PURE__ */ u(qe, {
|
|
454
516
|
"data-tour": "vibes-page-grid-view",
|
|
455
517
|
stagger: .04,
|
|
456
518
|
className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5 gap-4 xl:gap-3",
|
|
457
|
-
children:
|
|
519
|
+
children: U.map((e) => /* @__PURE__ */ u(Ke, { children: /* @__PURE__ */ u(we, {
|
|
458
520
|
vibe: e,
|
|
459
|
-
onOpen:
|
|
460
|
-
onActivate:
|
|
461
|
-
onArchive:
|
|
462
|
-
onDelete:
|
|
463
|
-
onOpenInEditor:
|
|
464
|
-
selected:
|
|
465
|
-
onToggleSelect: (t) =>
|
|
521
|
+
onOpen: Wt,
|
|
522
|
+
onActivate: ct ? Gt : void 0,
|
|
523
|
+
onArchive: ct ? q : void 0,
|
|
524
|
+
onDelete: lt ? R : void 0,
|
|
525
|
+
onOpenInEditor: Yt,
|
|
526
|
+
selected: N.has(e.id),
|
|
527
|
+
onToggleSelect: (t) => Qt(e, t)
|
|
466
528
|
}) }, e.id))
|
|
467
|
-
}, "grid") : /* @__PURE__ */ u(
|
|
468
|
-
vibes:
|
|
469
|
-
onOpen:
|
|
470
|
-
onActivate:
|
|
471
|
-
onArchive:
|
|
472
|
-
onDelete:
|
|
473
|
-
onOpenInEditor:
|
|
474
|
-
selectedVibeIds:
|
|
475
|
-
onToggleSelect:
|
|
476
|
-
onToggleAllVisible:
|
|
477
|
-
allVisibleSelected:
|
|
478
|
-
partiallySelected:
|
|
529
|
+
}, "grid") : /* @__PURE__ */ u(qe, { children: /* @__PURE__ */ u(Ee, {
|
|
530
|
+
vibes: U,
|
|
531
|
+
onOpen: Wt,
|
|
532
|
+
onActivate: Gt,
|
|
533
|
+
onArchive: q,
|
|
534
|
+
onDelete: lt ? R : void 0,
|
|
535
|
+
onOpenInEditor: Yt,
|
|
536
|
+
selectedVibeIds: N,
|
|
537
|
+
onToggleSelect: Qt,
|
|
538
|
+
onToggleAllVisible: $t,
|
|
539
|
+
allVisibleSelected: K,
|
|
540
|
+
partiallySelected: Ut
|
|
479
541
|
}) }, "list")
|
|
480
542
|
}) : /* @__PURE__ */ u(he, {
|
|
481
543
|
icon: /* @__PURE__ */ u(Ie, { className: "size-8 text-text-secondary" }),
|
|
482
|
-
illustration:
|
|
483
|
-
title:
|
|
484
|
-
description:
|
|
485
|
-
action: !
|
|
544
|
+
illustration: b || x !== "all" || S !== "all" || C !== "all" ? "empty-search" : "empty-vibes",
|
|
545
|
+
title: b || x !== "all" || S !== "all" || C !== "all" ? _("vibesPage.emptyNoVibesFound", "No vibes found") : _("vibesPage.emptyNoVibesConfigured", "No vibes configured"),
|
|
546
|
+
description: b || x !== "all" || S !== "all" || C !== "all" ? _("vibesPage.emptyAdjustSearch", "Try adjusting your search or filters") : _("vibesPage.emptyNoVibesDescription", "Add your first vibe to start managing your development projects"),
|
|
547
|
+
action: !b && x === "all" && S === "all" && C === "all" ? /* @__PURE__ */ d("div", {
|
|
486
548
|
className: "flex items-center gap-2",
|
|
487
549
|
children: [/* @__PURE__ */ u(Ge, {
|
|
488
550
|
permission: a.VIBE_CREATE,
|
|
489
551
|
children: /* @__PURE__ */ d("button", {
|
|
490
552
|
type: "button",
|
|
491
|
-
onClick:
|
|
553
|
+
onClick: J,
|
|
492
554
|
className: "flex items-center gap-2 px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-button hover:bg-action-primary-bgHover transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus",
|
|
493
|
-
children: [/* @__PURE__ */ u(Pe, { className: "size-4" }),
|
|
555
|
+
children: [/* @__PURE__ */ u(Pe, { className: "size-4" }), _("vibesPage.addVibe", "Add Vibe")]
|
|
494
556
|
})
|
|
495
557
|
}), /* @__PURE__ */ u(ve, { prompt: "What is a Vibe in VibeControls and how do I create one?" })]
|
|
496
558
|
}) : void 0
|
|
497
559
|
}),
|
|
498
|
-
|
|
560
|
+
vt && /* @__PURE__ */ u("div", {
|
|
499
561
|
className: "fixed bottom-4 right-4 z-50 px-4 py-3 bg-status-success-bg-subtle text-status-success-text border border-status-success-border rounded-card shadow-elevation-3 text-sm",
|
|
500
|
-
children:
|
|
562
|
+
children: vt
|
|
501
563
|
}),
|
|
502
564
|
/* @__PURE__ */ u(ne, {
|
|
503
|
-
isOpen:
|
|
504
|
-
onClose: () =>
|
|
505
|
-
onConfirm:
|
|
565
|
+
isOpen: xt === "activate",
|
|
566
|
+
onClose: () => F(null),
|
|
567
|
+
onConfirm: en,
|
|
506
568
|
title: "Activate selected vibes",
|
|
507
|
-
message: `Activate ${
|
|
569
|
+
message: `Activate ${W.length} selected vibe${W.length === 1 ? "" : "s"}?`,
|
|
508
570
|
confirmLabel: "Activate",
|
|
509
571
|
variant: "default"
|
|
510
572
|
}),
|
|
511
573
|
/* @__PURE__ */ u(ne, {
|
|
512
|
-
isOpen:
|
|
513
|
-
onClose: () =>
|
|
514
|
-
onConfirm:
|
|
574
|
+
isOpen: xt === "archive",
|
|
575
|
+
onClose: () => F(null),
|
|
576
|
+
onConfirm: tn,
|
|
515
577
|
title: "Archive selected vibes",
|
|
516
|
-
message: `Archive ${
|
|
578
|
+
message: `Archive ${G.length} selected vibe${G.length === 1 ? "" : "s"}? Archived vibes will be hidden from active workflows.`,
|
|
517
579
|
confirmLabel: "Archive",
|
|
518
580
|
variant: "warning"
|
|
519
581
|
}),
|
|
520
|
-
|
|
582
|
+
bt && /* @__PURE__ */ d("div", {
|
|
521
583
|
role: "alert",
|
|
522
584
|
className: "fixed bottom-4 right-4 z-50 px-4 py-3 bg-status-error-bg-subtle text-status-error-text border border-status-error-border rounded-card shadow-elevation-3 text-sm",
|
|
523
|
-
children: [
|
|
585
|
+
children: [bt, /* @__PURE__ */ u("button", {
|
|
524
586
|
type: "button",
|
|
525
|
-
onClick:
|
|
587
|
+
onClick: St,
|
|
526
588
|
className: "ml-3 text-xs underline opacity-80 hover:opacity-100",
|
|
527
|
-
children:
|
|
589
|
+
children: _("vibesPage.dismiss", "Dismiss")
|
|
528
590
|
})]
|
|
529
591
|
}),
|
|
530
|
-
|
|
592
|
+
ht && /* @__PURE__ */ u("div", {
|
|
531
593
|
className: "fixed inset-0 bg-bg-overlay flex items-center justify-center z-50 p-4",
|
|
532
594
|
children: /* @__PURE__ */ d("div", {
|
|
533
595
|
className: "bg-bg-surface rounded-card border border-border-subtle shadow-[var(--shadow-elevation-4)] p-6 w-full max-w-lg",
|
|
534
596
|
children: [
|
|
535
597
|
/* @__PURE__ */ u("h2", {
|
|
536
598
|
className: "text-lg font-semibold text-text-primary mb-4",
|
|
537
|
-
children:
|
|
599
|
+
children: _("vibesPage.addNewVibe", "Add New Vibe")
|
|
538
600
|
}),
|
|
539
601
|
/* @__PURE__ */ d("div", {
|
|
540
602
|
className: "space-y-4",
|
|
541
603
|
children: [
|
|
542
|
-
|
|
604
|
+
gt && /* @__PURE__ */ u("div", {
|
|
543
605
|
className: "p-3 bg-status-error-bg-subtle text-status-error-text border border-status-error-border text-sm rounded-card",
|
|
544
|
-
children:
|
|
606
|
+
children: gt
|
|
545
607
|
}),
|
|
546
608
|
/* @__PURE__ */ d("div", { children: [
|
|
547
609
|
/* @__PURE__ */ u("label", {
|
|
548
610
|
className: "block text-sm font-medium text-text-primary mb-1",
|
|
549
|
-
children:
|
|
611
|
+
children: _("vibesPage.nameLabel", "Name *")
|
|
550
612
|
}),
|
|
551
613
|
/* @__PURE__ */ u("input", {
|
|
552
614
|
"aria-label": "control",
|
|
553
|
-
ref:
|
|
615
|
+
ref: Ct,
|
|
554
616
|
type: "text",
|
|
555
|
-
placeholder:
|
|
556
|
-
onChange: () =>
|
|
617
|
+
placeholder: _("vibesPage.namePlaceholder", "My Project"),
|
|
618
|
+
onChange: () => A.name && j((e) => ({
|
|
557
619
|
...e,
|
|
558
620
|
name: void 0
|
|
559
621
|
})),
|
|
560
|
-
className: `w-full px-3 py-2 bg-bg-sunken border rounded-input text-text-primary placeholder:text-text-placeholder transition-colors focus:outline-none focus:ring-1 focus:ring-[var(--color-focus-ring)] focus:border-border-strong ${
|
|
622
|
+
className: `w-full px-3 py-2 bg-bg-sunken border rounded-input text-text-primary placeholder:text-text-placeholder transition-colors focus:outline-none focus:ring-1 focus:ring-[var(--color-focus-ring)] focus:border-border-strong ${A.name ? "border-status-error-border" : "border-border-subtle"}`
|
|
561
623
|
}),
|
|
562
|
-
|
|
624
|
+
A.name && /* @__PURE__ */ u("p", {
|
|
563
625
|
className: "mt-1 text-xs text-status-error-text",
|
|
564
|
-
children:
|
|
626
|
+
children: A.name
|
|
565
627
|
})
|
|
566
628
|
] }),
|
|
567
629
|
/* @__PURE__ */ d("div", { children: [
|
|
568
630
|
/* @__PURE__ */ d("label", {
|
|
569
631
|
className: "block text-sm font-medium text-text-primary mb-1",
|
|
570
|
-
children: [
|
|
632
|
+
children: [_("vibesPage.pathLabel", "Path"), /* @__PURE__ */ u("span", {
|
|
571
633
|
className: "ml-1 text-xs text-text-tertiary font-normal",
|
|
572
|
-
children:
|
|
634
|
+
children: _("vibesPage.pathOptional", "(optional)")
|
|
573
635
|
})]
|
|
574
636
|
}),
|
|
575
637
|
/* @__PURE__ */ u("input", {
|
|
576
638
|
"aria-label": "control",
|
|
577
|
-
ref:
|
|
639
|
+
ref: wt,
|
|
578
640
|
type: "text",
|
|
579
|
-
placeholder:
|
|
580
|
-
onChange: () =>
|
|
641
|
+
placeholder: _("vibesPage.pathPlaceholder", "/path/to/project"),
|
|
642
|
+
onChange: () => A.path && j((e) => ({
|
|
581
643
|
...e,
|
|
582
644
|
path: void 0
|
|
583
645
|
})),
|
|
584
|
-
className: `w-full px-3 py-2 bg-bg-sunken border rounded-input text-text-primary placeholder:text-text-placeholder transition-colors focus:outline-none focus:ring-1 focus:ring-[var(--color-focus-ring)] focus:border-border-strong ${
|
|
646
|
+
className: `w-full px-3 py-2 bg-bg-sunken border rounded-input text-text-primary placeholder:text-text-placeholder transition-colors focus:outline-none focus:ring-1 focus:ring-[var(--color-focus-ring)] focus:border-border-strong ${A.path ? "border-status-error-border" : "border-border-subtle"}`
|
|
585
647
|
}),
|
|
586
|
-
|
|
648
|
+
A.path && /* @__PURE__ */ u("p", {
|
|
587
649
|
className: "mt-1 text-xs text-status-error-text",
|
|
588
|
-
children:
|
|
650
|
+
children: A.path
|
|
589
651
|
})
|
|
590
652
|
] }),
|
|
591
653
|
/* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("label", {
|
|
592
654
|
className: "block text-sm font-medium text-text-primary mb-1",
|
|
593
|
-
children:
|
|
655
|
+
children: _("vibesPage.agentLabel", "Agent")
|
|
594
656
|
}), /* @__PURE__ */ d("select", {
|
|
595
|
-
ref:
|
|
657
|
+
ref: Tt,
|
|
596
658
|
className: "w-full px-3 py-2 bg-bg-sunken border border-border-subtle rounded-input text-text-primary transition-colors focus:outline-none focus:ring-1 focus:ring-[var(--color-focus-ring)] focus:border-border-strong",
|
|
597
659
|
children: [/* @__PURE__ */ u("option", {
|
|
598
660
|
value: "",
|
|
599
|
-
children:
|
|
600
|
-
}),
|
|
661
|
+
children: _("vibesPage.selectAgent", "Select an agent")
|
|
662
|
+
}), Vt.filter((e) => e.value !== "all").map((e) => /* @__PURE__ */ u("option", {
|
|
601
663
|
value: e.value,
|
|
602
664
|
children: e.label
|
|
603
665
|
}, e.value))]
|
|
604
666
|
})] }),
|
|
605
667
|
/* @__PURE__ */ u("input", {
|
|
606
|
-
ref:
|
|
668
|
+
ref: Et,
|
|
607
669
|
type: "hidden",
|
|
608
670
|
value: "PROJECT"
|
|
609
671
|
})
|
|
@@ -613,54 +675,54 @@ function m() {
|
|
|
613
675
|
className: "mt-4 border-t border-border-subtle pt-4",
|
|
614
676
|
children: [/* @__PURE__ */ u("h3", {
|
|
615
677
|
className: "text-sm font-medium text-text-secondary mb-2",
|
|
616
|
-
children:
|
|
678
|
+
children: _("vibesPage.tags", "Tags")
|
|
617
679
|
}), /* @__PURE__ */ u(pe, {
|
|
618
680
|
entityType: "VIBECONTROLS_VIBE",
|
|
619
|
-
onDraftChange:
|
|
681
|
+
onDraftChange: kt
|
|
620
682
|
})]
|
|
621
683
|
}),
|
|
622
684
|
/* @__PURE__ */ d("div", {
|
|
623
685
|
className: "flex flex-col sm:flex-row justify-end gap-3 mt-6",
|
|
624
686
|
children: [/* @__PURE__ */ u("button", {
|
|
625
687
|
type: "button",
|
|
626
|
-
onClick: () =>
|
|
627
|
-
disabled:
|
|
688
|
+
onClick: () => T(!1),
|
|
689
|
+
disabled: D,
|
|
628
690
|
className: "px-4 py-2 text-text-primary hover:bg-bg-sunken rounded-md transition-colors disabled:opacity-50",
|
|
629
|
-
children:
|
|
691
|
+
children: _("vibesPage.cancel", "Cancel")
|
|
630
692
|
}), /* @__PURE__ */ u("button", {
|
|
631
693
|
type: "button",
|
|
632
|
-
onClick:
|
|
633
|
-
disabled:
|
|
694
|
+
onClick: nn,
|
|
695
|
+
disabled: D,
|
|
634
696
|
className: "px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-button hover:bg-action-primary-bgHover transition-all duration-200 disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus",
|
|
635
|
-
children:
|
|
697
|
+
children: D ? _("vibesPage.creating", "Creating...") : _("vibesPage.createVibe", "Create Vibe")
|
|
636
698
|
})]
|
|
637
699
|
})
|
|
638
700
|
]
|
|
639
701
|
})
|
|
640
702
|
}),
|
|
641
703
|
/* @__PURE__ */ u(re, {
|
|
642
|
-
isOpen:
|
|
643
|
-
onClose: () =>
|
|
704
|
+
isOpen: yt,
|
|
705
|
+
onClose: () => k(!1),
|
|
644
706
|
onConfirm: () => {
|
|
645
|
-
|
|
707
|
+
k(!1), tt("/billing/plans");
|
|
646
708
|
},
|
|
647
709
|
title: "Vibe Quota Reached",
|
|
648
710
|
message: "You've used all available vibe creation quota on your current plan. Upgrade your plan to create more vibes."
|
|
649
711
|
})
|
|
650
712
|
] }),
|
|
651
|
-
|
|
713
|
+
L && /* @__PURE__ */ u(Te, {
|
|
652
714
|
vibe: {
|
|
653
|
-
id:
|
|
654
|
-
name:
|
|
715
|
+
id: L.id,
|
|
716
|
+
name: L.name
|
|
655
717
|
},
|
|
656
|
-
deleting:
|
|
657
|
-
onConfirm:
|
|
658
|
-
onCancel: () =>
|
|
718
|
+
deleting: Pt,
|
|
719
|
+
onConfirm: Kt,
|
|
720
|
+
onCancel: () => R(null)
|
|
659
721
|
})
|
|
660
722
|
]
|
|
661
723
|
});
|
|
662
724
|
}
|
|
663
725
|
//#endregion
|
|
664
|
-
export {
|
|
726
|
+
export { et as VibesPage };
|
|
665
727
|
|
|
666
728
|
//# sourceMappingURL=VibesPage.js.map
|