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