@burdenoff/microfe-vibecontrols 2026.602.1 → 2026.602.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.
@@ -4,12 +4,12 @@ import { StatusBadge as n } from "../shared/StatusBadge.js";
4
4
  import { SelectionCheckbox as r } from "../shared/SelectionCheckbox.js";
5
5
  import { vibeTypeIcons as i } from "./icons.js";
6
6
  import { useState as a } from "react";
7
- import { Archive as o, ExternalLink as s, FolderOpen as c, GitBranch as l, MoreVertical as u, Play as d, Plus as f, Settings as p, Tag as m } from "lucide-react";
8
- import { Fragment as h, jsx as g, jsxs as _ } from "react/jsx-runtime";
7
+ import { Archive as o, ExternalLink as s, FolderOpen as c, GitBranch as l, MoreVertical as u, Play as d, Plus as f, Settings as p, Tag as m, Trash2 as h } from "lucide-react";
8
+ import { Fragment as g, jsx as _, jsxs as v } from "react/jsx-runtime";
9
9
  //#region src/components/vibes/VibeList.tsx
10
- function v({ vibe: e, onOpen: t, onActivate: a, onOpenInEditor: u, onArchive: f, selected: p, onToggleSelect: h }) {
11
- let v = i[e.type] || c;
12
- return /* @__PURE__ */ _("div", {
10
+ function y({ vibe: e, onOpen: t, onActivate: a, onOpenInEditor: u, onArchive: f, onDelete: p, selected: g, onToggleSelect: y }) {
11
+ let b = i[e.type] || c;
12
+ return /* @__PURE__ */ v("div", {
13
13
  role: "button",
14
14
  tabIndex: 0,
15
15
  onKeyDown: (n) => {
@@ -18,210 +18,227 @@ function v({ vibe: e, onOpen: t, onActivate: a, onOpenInEditor: u, onArchive: f,
18
18
  className: "p-4 border border-border-default rounded-lg bg-bg-surface hover:bg-bg-sunken/50 cursor-pointer transition-colors",
19
19
  onClick: () => t?.(e),
20
20
  children: [
21
- /* @__PURE__ */ _("div", {
21
+ /* @__PURE__ */ v("div", {
22
22
  className: "flex items-start justify-between gap-3",
23
- children: [/* @__PURE__ */ _("div", {
23
+ children: [/* @__PURE__ */ v("div", {
24
24
  className: "flex items-start gap-3 min-w-0 flex-1",
25
25
  children: [
26
- h && /* @__PURE__ */ g("div", {
26
+ y && /* @__PURE__ */ _("div", {
27
27
  onClick: (e) => e.stopPropagation(),
28
- children: /* @__PURE__ */ g(r, {
29
- checked: !!p,
30
- onChange: h,
28
+ children: /* @__PURE__ */ _(r, {
29
+ checked: !!g,
30
+ onChange: y,
31
31
  ariaLabel: `Select vibe ${e.name}`
32
32
  })
33
33
  }),
34
- /* @__PURE__ */ g(v, { className: "size-5 text-action-primary-bg flex-shrink-0 mt-0.5" }),
35
- /* @__PURE__ */ _("div", {
34
+ /* @__PURE__ */ _(b, { className: "size-5 text-action-primary-bg flex-shrink-0 mt-0.5" }),
35
+ /* @__PURE__ */ v("div", {
36
36
  className: "min-w-0 flex-1",
37
- children: [/* @__PURE__ */ g("p", {
37
+ children: [/* @__PURE__ */ _("p", {
38
38
  className: "text-sm font-medium text-text-primary truncate",
39
39
  children: e.name
40
- }), e.description && /* @__PURE__ */ g("p", {
40
+ }), e.description && /* @__PURE__ */ _("p", {
41
41
  className: "text-xs text-text-muted truncate mt-0.5",
42
42
  children: e.description
43
43
  })]
44
44
  })
45
45
  ]
46
- }), /* @__PURE__ */ g(n, { status: e.status })]
46
+ }), /* @__PURE__ */ _(n, { status: e.status })]
47
47
  }),
48
- /* @__PURE__ */ _("div", {
48
+ /* @__PURE__ */ v("div", {
49
49
  className: "mt-3 flex flex-wrap items-center gap-x-4 gap-y-2 text-xs text-text-secondary",
50
- children: [e.gitBranch && /* @__PURE__ */ _("span", {
50
+ children: [e.gitBranch && /* @__PURE__ */ v("span", {
51
51
  className: "flex items-center gap-1",
52
- children: [/* @__PURE__ */ g(l, { className: "size-3" }), e.gitBranch]
53
- }), e.tags && e.tags.length > 0 && /* @__PURE__ */ _("span", {
52
+ children: [/* @__PURE__ */ _(l, { className: "size-3" }), e.gitBranch]
53
+ }), e.tags && e.tags.length > 0 && /* @__PURE__ */ v("span", {
54
54
  className: "flex items-center gap-1",
55
55
  children: [
56
- /* @__PURE__ */ g(m, { className: "size-3" }),
56
+ /* @__PURE__ */ _(m, { className: "size-3" }),
57
57
  e.tags.length,
58
58
  " tag",
59
59
  e.tags.length === 1 ? "" : "s"
60
60
  ]
61
61
  })]
62
62
  }),
63
- e.path && /* @__PURE__ */ g("div", {
63
+ e.path && /* @__PURE__ */ _("div", {
64
64
  className: "mt-2 text-xs font-mono text-text-muted truncate",
65
65
  children: e.path
66
66
  }),
67
- /* @__PURE__ */ _("div", {
67
+ /* @__PURE__ */ v("div", {
68
68
  className: "mt-3 flex items-center gap-2 justify-end border-t border-border-default pt-3",
69
69
  children: [
70
- a && e.status !== "ACTIVE" && /* @__PURE__ */ g("button", {
70
+ a && e.status !== "ACTIVE" && /* @__PURE__ */ _("button", {
71
71
  type: "button",
72
72
  onClick: (t) => {
73
73
  t.stopPropagation(), a(e);
74
74
  },
75
75
  className: "p-2 rounded hover:bg-bg-sunken transition-colors",
76
76
  title: "Activate",
77
- children: /* @__PURE__ */ g(d, { className: "size-4 text-text-secondary" })
77
+ children: /* @__PURE__ */ _(d, { className: "size-4 text-text-secondary" })
78
78
  }),
79
- u && e.path && /* @__PURE__ */ g("button", {
79
+ u && e.path && /* @__PURE__ */ _("button", {
80
80
  type: "button",
81
81
  onClick: (t) => {
82
82
  t.stopPropagation(), u(e);
83
83
  },
84
84
  className: "p-2 rounded hover:bg-bg-sunken transition-colors",
85
85
  title: "Open in VS Code",
86
- children: /* @__PURE__ */ g(s, { className: "size-4 text-text-secondary" })
86
+ children: /* @__PURE__ */ _(s, { className: "size-4 text-text-secondary" })
87
87
  }),
88
- f && e.status !== "ARCHIVED" && /* @__PURE__ */ g("button", {
88
+ f && e.status !== "ARCHIVED" && /* @__PURE__ */ _("button", {
89
89
  type: "button",
90
90
  onClick: (t) => {
91
91
  t.stopPropagation(), f(e);
92
92
  },
93
93
  className: "p-2 rounded hover:bg-bg-sunken transition-colors",
94
94
  title: "Archive",
95
- children: /* @__PURE__ */ g(o, { className: "size-4 text-text-secondary" })
95
+ children: /* @__PURE__ */ _(o, { className: "size-4 text-text-secondary" })
96
+ }),
97
+ p && /* @__PURE__ */ _("button", {
98
+ type: "button",
99
+ onClick: (t) => {
100
+ t.stopPropagation(), p(e);
101
+ },
102
+ className: "p-2 rounded hover:bg-bg-sunken transition-colors",
103
+ title: "Delete",
104
+ children: /* @__PURE__ */ _(h, { className: "size-4 text-status-error-text" })
96
105
  })
97
106
  ]
98
107
  })
99
108
  ]
100
109
  });
101
110
  }
102
- function y({ vibe: e, onOpen: t, onEdit: f, onArchive: h, onActivate: v, onOpenInEditor: y, selected: b, onToggleSelect: x }) {
103
- let [S, C] = a(!1), w = i[e.type] || c;
104
- return /* @__PURE__ */ _("tr", {
105
- className: `border-b border-border-default hover:bg-bg-sunken/50 cursor-pointer transition-colors ${b ? "bg-bg-sunken/40" : ""}`,
111
+ function b({ vibe: e, onOpen: t, onEdit: f, onArchive: g, onDelete: y, onActivate: b, onOpenInEditor: x, selected: S, onToggleSelect: C }) {
112
+ let [w, T] = a(!1), E = i[e.type] || c;
113
+ return /* @__PURE__ */ v("tr", {
114
+ className: `border-b border-border-default hover:bg-bg-sunken/50 cursor-pointer transition-colors ${S ? "bg-bg-sunken/40" : ""}`,
106
115
  onClick: () => t?.(e),
107
116
  children: [
108
- /* @__PURE__ */ g("td", {
117
+ /* @__PURE__ */ _("td", {
109
118
  className: "px-4 py-3",
110
- children: x && /* @__PURE__ */ g("div", {
119
+ children: C && /* @__PURE__ */ _("div", {
111
120
  onClick: (e) => e.stopPropagation(),
112
- children: /* @__PURE__ */ g(r, {
113
- checked: !!b,
114
- onChange: x,
121
+ children: /* @__PURE__ */ _(r, {
122
+ checked: !!S,
123
+ onChange: C,
115
124
  ariaLabel: `Select vibe ${e.name}`
116
125
  })
117
126
  })
118
127
  }),
119
- /* @__PURE__ */ g("td", {
128
+ /* @__PURE__ */ _("td", {
120
129
  className: "px-4 py-3",
121
- children: /* @__PURE__ */ _("div", {
130
+ children: /* @__PURE__ */ v("div", {
122
131
  className: "flex items-center gap-3 min-w-0",
123
- children: [/* @__PURE__ */ g(w, { className: "size-4 text-action-primary-bg shrink-0" }), /* @__PURE__ */ _("div", {
132
+ children: [/* @__PURE__ */ _(E, { className: "size-4 text-action-primary-bg shrink-0" }), /* @__PURE__ */ v("div", {
124
133
  className: "min-w-0",
125
- children: [/* @__PURE__ */ g("p", {
134
+ children: [/* @__PURE__ */ _("p", {
126
135
  className: "text-sm font-medium text-text-primary truncate",
127
136
  children: e.name
128
- }), e.description && /* @__PURE__ */ g("p", {
137
+ }), e.description && /* @__PURE__ */ _("p", {
129
138
  className: "text-xs text-text-muted truncate max-w-[250px]",
130
139
  children: e.description
131
140
  })]
132
141
  })]
133
142
  })
134
143
  }),
135
- /* @__PURE__ */ g("td", {
144
+ /* @__PURE__ */ _("td", {
136
145
  className: "px-4 py-3",
137
- children: /* @__PURE__ */ g(n, { status: e.status })
146
+ children: /* @__PURE__ */ _(n, { status: e.status })
138
147
  }),
139
- /* @__PURE__ */ g("td", {
148
+ /* @__PURE__ */ _("td", {
140
149
  className: "px-4 py-3",
141
- children: e.path ? /* @__PURE__ */ g("span", {
150
+ children: e.path ? /* @__PURE__ */ _("span", {
142
151
  className: "text-xs font-mono text-text-muted truncate block max-w-[180px]",
143
152
  children: e.path
144
- }) : /* @__PURE__ */ g("span", {
153
+ }) : /* @__PURE__ */ _("span", {
145
154
  className: "text-xs text-text-muted",
146
155
  children: "-"
147
156
  })
148
157
  }),
149
- /* @__PURE__ */ g("td", {
158
+ /* @__PURE__ */ _("td", {
150
159
  className: "px-4 py-3",
151
- children: e.gitBranch ? /* @__PURE__ */ _("div", {
160
+ children: e.gitBranch ? /* @__PURE__ */ v("div", {
152
161
  className: "flex items-center gap-1.5 text-xs text-text-secondary",
153
- children: [/* @__PURE__ */ g(l, { className: "size-3" }), /* @__PURE__ */ g("span", {
162
+ children: [/* @__PURE__ */ _(l, { className: "size-3" }), /* @__PURE__ */ _("span", {
154
163
  className: "truncate max-w-[100px]",
155
164
  children: e.gitBranch
156
165
  })]
157
- }) : /* @__PURE__ */ g("span", {
166
+ }) : /* @__PURE__ */ _("span", {
158
167
  className: "text-xs text-text-muted",
159
168
  children: "-"
160
169
  })
161
170
  }),
162
- /* @__PURE__ */ g("td", {
171
+ /* @__PURE__ */ _("td", {
163
172
  className: "px-4 py-3",
164
- children: e.tags && e.tags.length > 0 ? /* @__PURE__ */ _("div", {
173
+ children: e.tags && e.tags.length > 0 ? /* @__PURE__ */ v("div", {
165
174
  className: "flex flex-wrap gap-1",
166
- children: [e.tags.slice(0, 2).map((e) => /* @__PURE__ */ _("span", {
175
+ children: [e.tags.slice(0, 2).map((e) => /* @__PURE__ */ v("span", {
167
176
  className: "inline-flex items-center gap-0.5 px-1.5 py-0.5 text-xs bg-bg-sunken text-text-secondary rounded",
168
- children: [/* @__PURE__ */ g(m, { className: "size-2.5" }), e]
169
- }, e)), e.tags.length > 2 && /* @__PURE__ */ _("span", {
177
+ children: [/* @__PURE__ */ _(m, { className: "size-2.5" }), e]
178
+ }, e)), e.tags.length > 2 && /* @__PURE__ */ v("span", {
170
179
  className: "px-1.5 py-0.5 text-xs bg-bg-sunken text-text-secondary rounded",
171
180
  children: ["+", e.tags.length - 2]
172
181
  })]
173
- }) : /* @__PURE__ */ g("span", {
182
+ }) : /* @__PURE__ */ _("span", {
174
183
  className: "text-xs text-text-muted",
175
184
  children: "-"
176
185
  })
177
186
  }),
178
- /* @__PURE__ */ g("td", {
187
+ /* @__PURE__ */ _("td", {
179
188
  className: "px-4 py-3",
180
- children: /* @__PURE__ */ g("div", {
189
+ children: /* @__PURE__ */ _("div", {
181
190
  className: "flex items-center gap-1 justify-end",
182
- children: (f || h || v || y) && /* @__PURE__ */ _("div", {
191
+ children: (f || g || y || b || x) && /* @__PURE__ */ v("div", {
183
192
  className: "relative",
184
- children: [/* @__PURE__ */ g("button", {
193
+ children: [/* @__PURE__ */ _("button", {
185
194
  type: "button",
186
195
  onClick: (e) => {
187
- e.stopPropagation(), C(!S);
196
+ e.stopPropagation(), T(!w);
188
197
  },
189
198
  className: "p-1.5 rounded hover:bg-bg-sunken transition-colors",
190
- children: /* @__PURE__ */ g(u, { className: "size-3.5 text-text-secondary" })
191
- }), S && /* @__PURE__ */ _("div", {
199
+ children: /* @__PURE__ */ _(u, { className: "size-3.5 text-text-secondary" })
200
+ }), w && /* @__PURE__ */ v("div", {
192
201
  className: "absolute right-0 mt-1 w-36 bg-bg-surface border border-border-default rounded-lg shadow-lg z-10",
193
202
  children: [
194
- v && e.status !== "ACTIVE" && /* @__PURE__ */ _("button", {
203
+ b && e.status !== "ACTIVE" && /* @__PURE__ */ v("button", {
195
204
  type: "button",
196
205
  onClick: (t) => {
197
- t.stopPropagation(), v(e), C(!1);
206
+ t.stopPropagation(), b(e), T(!1);
198
207
  },
199
208
  className: "flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken rounded-t-lg",
200
- children: [/* @__PURE__ */ g(d, { className: "size-4" }), "Activate"]
209
+ children: [/* @__PURE__ */ _(d, { className: "size-4" }), "Activate"]
201
210
  }),
202
- f && /* @__PURE__ */ _("button", {
211
+ f && /* @__PURE__ */ v("button", {
203
212
  type: "button",
204
213
  onClick: (t) => {
205
- t.stopPropagation(), f(e), C(!1);
214
+ t.stopPropagation(), f(e), T(!1);
206
215
  },
207
216
  className: "flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken",
208
- children: [/* @__PURE__ */ g(p, { className: "size-4" }), "Edit"]
217
+ children: [/* @__PURE__ */ _(p, { className: "size-4" }), "Edit"]
209
218
  }),
210
- y && e.path && /* @__PURE__ */ _("button", {
219
+ x && e.path && /* @__PURE__ */ v("button", {
211
220
  type: "button",
212
221
  onClick: (t) => {
213
- t.stopPropagation(), y(e), C(!1);
222
+ t.stopPropagation(), x(e), T(!1);
214
223
  },
215
224
  className: "flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken",
216
- children: [/* @__PURE__ */ g(s, { className: "size-4" }), "Open in VS Code"]
225
+ children: [/* @__PURE__ */ _(s, { className: "size-4" }), "Open in VS Code"]
217
226
  }),
218
- h && e.status !== "ARCHIVED" && /* @__PURE__ */ _("button", {
227
+ g && e.status !== "ARCHIVED" && /* @__PURE__ */ v("button", {
219
228
  type: "button",
220
229
  onClick: (t) => {
221
- t.stopPropagation(), h(e), C(!1);
230
+ t.stopPropagation(), g(e), T(!1);
222
231
  },
223
232
  className: "flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken rounded-b-lg",
224
- children: [/* @__PURE__ */ g(o, { className: "size-4" }), "Archive"]
233
+ children: [/* @__PURE__ */ _(o, { className: "size-4" }), "Archive"]
234
+ }),
235
+ y && /* @__PURE__ */ v("button", {
236
+ type: "button",
237
+ onClick: (t) => {
238
+ t.stopPropagation(), y(e), T(!1);
239
+ },
240
+ className: "flex items-center gap-2 w-full px-3 py-2 text-sm text-status-error-text hover:bg-bg-sunken rounded-b-lg",
241
+ children: [/* @__PURE__ */ _(h, { className: "size-4" }), "Delete"]
225
242
  })
226
243
  ]
227
244
  })]
@@ -231,87 +248,89 @@ function y({ vibe: e, onOpen: t, onEdit: f, onArchive: h, onActivate: v, onOpenI
231
248
  ]
232
249
  });
233
250
  }
234
- function b({ vibes: n, onOpen: i, onEdit: a, onArchive: o, onActivate: s, onOpenInEditor: l, onCreateNew: u, isLoading: d, selectedVibeIds: p = /* @__PURE__ */ new Set(), onToggleSelect: m, onToggleAllVisible: b, allVisibleSelected: x = !1, partiallySelected: S = !1 }) {
235
- let C = e();
236
- return !d && n.length === 0 ? /* @__PURE__ */ g(t, {
237
- icon: /* @__PURE__ */ g(c, { className: "size-8 text-text-secondary" }),
238
- title: C("vibecontrols.vibes.list.emptyTitle", "No vibes yet"),
239
- description: C("vibecontrols.vibes.list.emptyDescription", "Vibes are your development projects and environments. Create your first vibe to organize your work."),
240
- action: u && /* @__PURE__ */ _("button", {
251
+ function x({ vibes: n, onOpen: i, onEdit: a, onArchive: o, onDelete: s, onActivate: l, onOpenInEditor: u, onCreateNew: d, isLoading: p, selectedVibeIds: m = /* @__PURE__ */ new Set(), onToggleSelect: h, onToggleAllVisible: x, allVisibleSelected: S = !1, partiallySelected: C = !1 }) {
252
+ let w = e();
253
+ return !p && n.length === 0 ? /* @__PURE__ */ _(t, {
254
+ icon: /* @__PURE__ */ _(c, { className: "size-8 text-text-secondary" }),
255
+ title: w("vibecontrols.vibes.list.emptyTitle", "No vibes yet"),
256
+ description: w("vibecontrols.vibes.list.emptyDescription", "Vibes are your development projects and environments. Create your first vibe to organize your work."),
257
+ action: d && /* @__PURE__ */ v("button", {
241
258
  type: "button",
242
- onClick: u,
259
+ onClick: d,
243
260
  className: "inline-flex items-center gap-2 px-4 py-2 text-sm font-medium text-action-primary-text bg-action-primary-bg rounded-md hover:bg-action-primary-bg-hover transition-colors",
244
- children: [/* @__PURE__ */ g(f, { className: "size-4" }), C("vibecontrols.vibes.list.createVibe", "Create Vibe")]
261
+ children: [/* @__PURE__ */ _(f, { className: "size-4" }), w("vibecontrols.vibes.list.createVibe", "Create Vibe")]
245
262
  })
246
- }) : /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ g("div", {
263
+ }) : /* @__PURE__ */ v(g, { children: [/* @__PURE__ */ _("div", {
247
264
  className: "sm:hidden space-y-3",
248
- children: n.map((e) => /* @__PURE__ */ g(v, {
265
+ children: n.map((e) => /* @__PURE__ */ _(y, {
249
266
  vibe: e,
250
267
  onOpen: i,
251
- onActivate: s,
252
- onOpenInEditor: l,
268
+ onActivate: l,
269
+ onOpenInEditor: u,
253
270
  onArchive: o,
254
- selected: p.has(e.id),
255
- onToggleSelect: m ? (t) => m(e, t) : void 0
271
+ onDelete: s,
272
+ selected: m.has(e.id),
273
+ onToggleSelect: h ? (t) => h(e, t) : void 0
256
274
  }, e.id))
257
- }), /* @__PURE__ */ g("div", {
275
+ }), /* @__PURE__ */ _("div", {
258
276
  className: "hidden sm:block border border-border-default rounded-lg overflow-visible",
259
- children: /* @__PURE__ */ g("div", {
277
+ children: /* @__PURE__ */ _("div", {
260
278
  className: "overflow-x-auto",
261
- children: /* @__PURE__ */ _("table", {
279
+ children: /* @__PURE__ */ v("table", {
262
280
  className: "w-full",
263
- children: [/* @__PURE__ */ g("thead", { children: /* @__PURE__ */ _("tr", {
281
+ children: [/* @__PURE__ */ _("thead", { children: /* @__PURE__ */ v("tr", {
264
282
  className: "bg-bg-sunken border-b border-border-default",
265
283
  children: [
266
- /* @__PURE__ */ g("th", {
284
+ /* @__PURE__ */ _("th", {
267
285
  className: "px-4 py-2.5 text-left text-xs font-medium text-text-secondary uppercase tracking-wider w-12",
268
- children: b ? /* @__PURE__ */ g(r, {
269
- checked: x,
270
- indeterminate: S,
271
- onChange: b,
286
+ children: x ? /* @__PURE__ */ _(r, {
287
+ checked: S,
288
+ indeterminate: C,
289
+ onChange: x,
272
290
  ariaLabel: "Select all visible vibes"
273
291
  }) : null
274
292
  }),
275
- /* @__PURE__ */ g("th", {
293
+ /* @__PURE__ */ _("th", {
276
294
  className: "px-4 py-2.5 text-left text-xs font-medium text-text-secondary uppercase tracking-wider",
277
295
  children: "Name"
278
296
  }),
279
- /* @__PURE__ */ g("th", {
297
+ /* @__PURE__ */ _("th", {
280
298
  className: "px-4 py-2.5 text-left text-xs font-medium text-text-secondary uppercase tracking-wider",
281
299
  children: "Status"
282
300
  }),
283
- /* @__PURE__ */ g("th", {
301
+ /* @__PURE__ */ _("th", {
284
302
  className: "px-4 py-2.5 text-left text-xs font-medium text-text-secondary uppercase tracking-wider",
285
303
  children: "Path"
286
304
  }),
287
- /* @__PURE__ */ g("th", {
305
+ /* @__PURE__ */ _("th", {
288
306
  className: "px-4 py-2.5 text-left text-xs font-medium text-text-secondary uppercase tracking-wider",
289
307
  children: "Branch"
290
308
  }),
291
- /* @__PURE__ */ g("th", {
309
+ /* @__PURE__ */ _("th", {
292
310
  className: "px-4 py-2.5 text-left text-xs font-medium text-text-secondary uppercase tracking-wider",
293
311
  children: "Tags"
294
312
  }),
295
- /* @__PURE__ */ g("th", {
313
+ /* @__PURE__ */ _("th", {
296
314
  className: "px-4 py-2.5 text-right text-xs font-medium text-text-secondary uppercase tracking-wider",
297
315
  children: "Actions"
298
316
  })
299
317
  ]
300
- }) }), /* @__PURE__ */ g("tbody", { children: n.map((e) => /* @__PURE__ */ g(y, {
318
+ }) }), /* @__PURE__ */ _("tbody", { children: n.map((e) => /* @__PURE__ */ _(b, {
301
319
  vibe: e,
302
320
  onOpen: i,
303
321
  onEdit: a,
304
322
  onArchive: o,
305
- onActivate: s,
306
- onOpenInEditor: l,
307
- selected: p.has(e.id),
308
- onToggleSelect: m ? (t) => m(e, t) : void 0
323
+ onDelete: s,
324
+ onActivate: l,
325
+ onOpenInEditor: u,
326
+ selected: m.has(e.id),
327
+ onToggleSelect: h ? (t) => h(e, t) : void 0
309
328
  }, e.id)) })]
310
329
  })
311
330
  })
312
331
  })] });
313
332
  }
314
333
  //#endregion
315
- export { b as VibeList };
334
+ export { x as VibeList };
316
335
 
317
336
  //# sourceMappingURL=VibeList.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"VibeList.js","names":[],"sources":["../../../src/components/vibes/VibeList.tsx"],"sourcesContent":["import type { Vibe } from './types';\nimport { vibeTypeIcons } from './icons';\nimport { StatusBadge } from '../shared/StatusBadge';\nimport { EmptyState } from '../shared/EmptyState';\nimport { SelectionCheckbox } from '../shared/SelectionCheckbox';\nimport {\n FolderOpen,\n Plus,\n GitBranch,\n Tag,\n MoreVertical,\n Play,\n Archive,\n Settings,\n ExternalLink,\n} from 'lucide-react';\nimport { useState } from 'react';\nimport { useTr } from '../../shared/hooks/useTr';\n\ninterface VibeListProps {\n vibes: Vibe[];\n onOpen?: (vibe: Vibe) => void;\n onEdit?: (vibe: Vibe) => void;\n onArchive?: (vibe: Vibe) => void;\n onActivate?: (vibe: Vibe) => void;\n onOpenInEditor?: (vibe: Vibe) => void;\n onCreateNew?: () => void;\n isLoading?: boolean;\n selectedVibeIds?: Set<string>;\n onToggleSelect?: (vibe: Vibe, checked: boolean) => void;\n onToggleAllVisible?: (checked: boolean) => void;\n allVisibleSelected?: boolean;\n partiallySelected?: boolean;\n}\n\n/**\n * Mobile card view for a single vibe\n */\nfunction VibeListCard({\n vibe,\n onOpen,\n onActivate,\n onOpenInEditor,\n onArchive,\n selected,\n onToggleSelect,\n}: {\n vibe: Vibe;\n onOpen?: (vibe: Vibe) => void;\n onActivate?: (vibe: Vibe) => void;\n onOpenInEditor?: (vibe: Vibe) => void;\n onArchive?: (vibe: Vibe) => void;\n selected?: boolean;\n onToggleSelect?: (checked: boolean) => void;\n}) {\n const Icon = vibeTypeIcons[vibe.type] || FolderOpen;\n\n return (\n <div\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n (() => onOpen?.(vibe))();\n }\n }}\n className=\"p-4 border border-border-default rounded-lg bg-bg-surface hover:bg-bg-sunken/50 cursor-pointer transition-colors\"\n onClick={() => onOpen?.(vibe)}\n >\n {/* Header: Icon, Name, Status */}\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"flex items-start gap-3 min-w-0 flex-1\">\n {onToggleSelect && (\n <div onClick={(event) => event.stopPropagation()}>\n <SelectionCheckbox\n checked={!!selected}\n onChange={onToggleSelect}\n ariaLabel={`Select vibe ${vibe.name}`}\n />\n </div>\n )}\n <Icon className=\"size-5 text-action-primary-bg flex-shrink-0 mt-0.5\" />\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-medium text-text-primary truncate\">{vibe.name}</p>\n {vibe.description && (\n <p className=\"text-xs text-text-muted truncate mt-0.5\">{vibe.description}</p>\n )}\n </div>\n </div>\n <StatusBadge status={vibe.status} />\n </div>\n\n {/* Meta info row */}\n <div className=\"mt-3 flex flex-wrap items-center gap-x-4 gap-y-2 text-xs text-text-secondary\">\n {vibe.gitBranch && (\n <span className=\"flex items-center gap-1\">\n <GitBranch className=\"size-3\" />\n {vibe.gitBranch}\n </span>\n )}\n {vibe.tags && vibe.tags.length > 0 && (\n <span className=\"flex items-center gap-1\">\n <Tag className=\"size-3\" />\n {vibe.tags.length} tag{vibe.tags.length !== 1 ? 's' : ''}\n </span>\n )}\n </div>\n\n {/* Path (if exists) */}\n {vibe.path && (\n <div className=\"mt-2 text-xs font-mono text-text-muted truncate\">{vibe.path}</div>\n )}\n\n {/* Actions */}\n <div className=\"mt-3 flex items-center gap-2 justify-end border-t border-border-default pt-3\">\n {onActivate && vibe.status !== 'ACTIVE' && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onActivate(vibe);\n }}\n className=\"p-2 rounded hover:bg-bg-sunken transition-colors\"\n title=\"Activate\"\n >\n <Play className=\"size-4 text-text-secondary\" />\n </button>\n )}\n {onOpenInEditor && vibe.path && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onOpenInEditor(vibe);\n }}\n className=\"p-2 rounded hover:bg-bg-sunken transition-colors\"\n title=\"Open in VS Code\"\n >\n <ExternalLink className=\"size-4 text-text-secondary\" />\n </button>\n )}\n {onArchive && vibe.status !== 'ARCHIVED' && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onArchive(vibe);\n }}\n className=\"p-2 rounded hover:bg-bg-sunken transition-colors\"\n title=\"Archive\"\n >\n <Archive className=\"size-4 text-text-secondary\" />\n </button>\n )}\n </div>\n </div>\n );\n}\n\nfunction VibeRow({\n vibe,\n onOpen,\n onEdit,\n onArchive,\n onActivate,\n onOpenInEditor,\n selected,\n onToggleSelect,\n}: {\n vibe: Vibe;\n onOpen?: (vibe: Vibe) => void;\n onEdit?: (vibe: Vibe) => void;\n onArchive?: (vibe: Vibe) => void;\n onActivate?: (vibe: Vibe) => void;\n onOpenInEditor?: (vibe: Vibe) => void;\n selected?: boolean;\n onToggleSelect?: (checked: boolean) => void;\n}) {\n const [showMenu, setShowMenu] = useState(false);\n const Icon = vibeTypeIcons[vibe.type] || FolderOpen;\n\n return (\n <tr\n className={`border-b border-border-default hover:bg-bg-sunken/50 cursor-pointer transition-colors ${\n selected ? 'bg-bg-sunken/40' : ''\n }`}\n onClick={() => onOpen?.(vibe)}\n >\n <td className=\"px-4 py-3\">\n {onToggleSelect && (\n <div onClick={(event) => event.stopPropagation()}>\n <SelectionCheckbox\n checked={!!selected}\n onChange={onToggleSelect}\n ariaLabel={`Select vibe ${vibe.name}`}\n />\n </div>\n )}\n </td>\n <td className=\"px-4 py-3\">\n <div className=\"flex items-center gap-3 min-w-0\">\n <Icon className=\"size-4 text-action-primary-bg shrink-0\" />\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium text-text-primary truncate\">{vibe.name}</p>\n {vibe.description && (\n <p className=\"text-xs text-text-muted truncate max-w-[250px]\">{vibe.description}</p>\n )}\n </div>\n </div>\n </td>\n <td className=\"px-4 py-3\">\n <StatusBadge status={vibe.status} />\n </td>\n <td className=\"px-4 py-3\">\n {vibe.path ? (\n <span className=\"text-xs font-mono text-text-muted truncate block max-w-[180px]\">\n {vibe.path}\n </span>\n ) : (\n <span className=\"text-xs text-text-muted\">-</span>\n )}\n </td>\n <td className=\"px-4 py-3\">\n {vibe.gitBranch ? (\n <div className=\"flex items-center gap-1.5 text-xs text-text-secondary\">\n <GitBranch className=\"size-3\" />\n <span className=\"truncate max-w-[100px]\">{vibe.gitBranch}</span>\n </div>\n ) : (\n <span className=\"text-xs text-text-muted\">-</span>\n )}\n </td>\n <td className=\"px-4 py-3\">\n {vibe.tags && vibe.tags.length > 0 ? (\n <div className=\"flex flex-wrap gap-1\">\n {vibe.tags.slice(0, 2).map((tag) => (\n <span\n key={tag}\n className=\"inline-flex items-center gap-0.5 px-1.5 py-0.5 text-xs bg-bg-sunken text-text-secondary rounded\"\n >\n <Tag className=\"size-2.5\" />\n {tag}\n </span>\n ))}\n {vibe.tags.length > 2 && (\n <span className=\"px-1.5 py-0.5 text-xs bg-bg-sunken text-text-secondary rounded\">\n +{vibe.tags.length - 2}\n </span>\n )}\n </div>\n ) : (\n <span className=\"text-xs text-text-muted\">-</span>\n )}\n </td>\n <td className=\"px-4 py-3\">\n <div className=\"flex items-center gap-1 justify-end\">\n {(onEdit || onArchive || onActivate || onOpenInEditor) && (\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n setShowMenu(!showMenu);\n }}\n className=\"p-1.5 rounded hover:bg-bg-sunken transition-colors\"\n >\n <MoreVertical className=\"size-3.5 text-text-secondary\" />\n </button>\n {showMenu && (\n <div className=\"absolute right-0 mt-1 w-36 bg-bg-surface border border-border-default rounded-lg shadow-lg z-10\">\n {onActivate && vibe.status !== 'ACTIVE' && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onActivate(vibe);\n setShowMenu(false);\n }}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken rounded-t-lg\"\n >\n <Play className=\"size-4\" />\n Activate\n </button>\n )}\n {onEdit && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onEdit(vibe);\n setShowMenu(false);\n }}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken\"\n >\n <Settings className=\"size-4\" />\n Edit\n </button>\n )}\n {onOpenInEditor && vibe.path && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onOpenInEditor(vibe);\n setShowMenu(false);\n }}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken\"\n >\n <ExternalLink className=\"size-4\" />\n Open in VS Code\n </button>\n )}\n {onArchive && vibe.status !== 'ARCHIVED' && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onArchive(vibe);\n setShowMenu(false);\n }}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken rounded-b-lg\"\n >\n <Archive className=\"size-4\" />\n Archive\n </button>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n </td>\n </tr>\n );\n}\n\nexport function VibeList({\n vibes,\n onOpen,\n onEdit,\n onArchive,\n onActivate,\n onOpenInEditor,\n onCreateNew,\n isLoading,\n selectedVibeIds = new Set<string>(),\n onToggleSelect,\n onToggleAllVisible,\n allVisibleSelected = false,\n partiallySelected = false,\n}: VibeListProps) {\n const tr = useTr();\n\n if (!isLoading && vibes.length === 0) {\n return (\n <EmptyState\n icon={<FolderOpen className=\"size-8 text-text-secondary\" />}\n title={tr('vibecontrols.vibes.list.emptyTitle', 'No vibes yet')}\n description={tr(\n 'vibecontrols.vibes.list.emptyDescription',\n 'Vibes are your development projects and environments. Create your first vibe to organize your work.'\n )}\n action={\n onCreateNew && (\n <button\n type=\"button\"\n onClick={onCreateNew}\n className=\"inline-flex items-center gap-2 px-4 py-2 text-sm font-medium text-action-primary-text bg-action-primary-bg rounded-md hover:bg-action-primary-bg-hover transition-colors\"\n >\n <Plus className=\"size-4\" />\n {tr('vibecontrols.vibes.list.createVibe', 'Create Vibe')}\n </button>\n )\n }\n />\n );\n }\n\n return (\n <>\n {/* Mobile: Card view */}\n <div className=\"sm:hidden space-y-3\">\n {vibes.map((vibe) => (\n <VibeListCard\n key={vibe.id}\n vibe={vibe}\n onOpen={onOpen}\n onActivate={onActivate}\n onOpenInEditor={onOpenInEditor}\n onArchive={onArchive}\n selected={selectedVibeIds.has(vibe.id)}\n onToggleSelect={onToggleSelect ? (checked) => onToggleSelect(vibe, checked) : undefined}\n />\n ))}\n </div>\n\n {/* Desktop: Table view */}\n <div className=\"hidden sm:block border border-border-default rounded-lg overflow-visible\">\n <div className=\"overflow-x-auto\">\n <table className=\"w-full\">\n <thead>\n <tr className=\"bg-bg-sunken border-b border-border-default\">\n <th className=\"px-4 py-2.5 text-left text-xs font-medium text-text-secondary uppercase tracking-wider w-12\">\n {onToggleAllVisible ? (\n <SelectionCheckbox\n checked={allVisibleSelected}\n indeterminate={partiallySelected}\n onChange={onToggleAllVisible}\n ariaLabel=\"Select all visible vibes\"\n />\n ) : null}\n </th>\n <th className=\"px-4 py-2.5 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Name\n </th>\n <th className=\"px-4 py-2.5 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Status\n </th>\n <th className=\"px-4 py-2.5 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Path\n </th>\n <th className=\"px-4 py-2.5 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Branch\n </th>\n <th className=\"px-4 py-2.5 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Tags\n </th>\n <th className=\"px-4 py-2.5 text-right text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Actions\n </th>\n </tr>\n </thead>\n <tbody>\n {vibes.map((vibe) => (\n <VibeRow\n key={vibe.id}\n vibe={vibe}\n onOpen={onOpen}\n onEdit={onEdit}\n onArchive={onArchive}\n onActivate={onActivate}\n onOpenInEditor={onOpenInEditor}\n selected={selectedVibeIds.has(vibe.id)}\n onToggleSelect={\n onToggleSelect ? (checked) => onToggleSelect(vibe, checked) : undefined\n }\n />\n ))}\n </tbody>\n </table>\n </div>\n </div>\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"VibeList.js","names":[],"sources":["../../../src/components/vibes/VibeList.tsx"],"sourcesContent":["import type { Vibe } from './types';\nimport { vibeTypeIcons } from './icons';\nimport { StatusBadge } from '../shared/StatusBadge';\nimport { EmptyState } from '../shared/EmptyState';\nimport { SelectionCheckbox } from '../shared/SelectionCheckbox';\nimport {\n FolderOpen,\n Plus,\n GitBranch,\n Tag,\n MoreVertical,\n Play,\n Archive,\n Settings,\n ExternalLink,\n Trash2,\n} from 'lucide-react';\nimport { useState } from 'react';\nimport { useTr } from '../../shared/hooks/useTr';\n\ninterface VibeListProps {\n vibes: Vibe[];\n onOpen?: (vibe: Vibe) => void;\n onEdit?: (vibe: Vibe) => void;\n onArchive?: (vibe: Vibe) => void;\n onDelete?: (vibe: Vibe) => void;\n onActivate?: (vibe: Vibe) => void;\n onOpenInEditor?: (vibe: Vibe) => void;\n onCreateNew?: () => void;\n isLoading?: boolean;\n selectedVibeIds?: Set<string>;\n onToggleSelect?: (vibe: Vibe, checked: boolean) => void;\n onToggleAllVisible?: (checked: boolean) => void;\n allVisibleSelected?: boolean;\n partiallySelected?: boolean;\n}\n\n/**\n * Mobile card view for a single vibe\n */\nfunction VibeListCard({\n vibe,\n onOpen,\n onActivate,\n onOpenInEditor,\n onArchive,\n onDelete,\n selected,\n onToggleSelect,\n}: {\n vibe: Vibe;\n onOpen?: (vibe: Vibe) => void;\n onActivate?: (vibe: Vibe) => void;\n onOpenInEditor?: (vibe: Vibe) => void;\n onArchive?: (vibe: Vibe) => void;\n onDelete?: (vibe: Vibe) => void;\n selected?: boolean;\n onToggleSelect?: (checked: boolean) => void;\n}) {\n const Icon = vibeTypeIcons[vibe.type] || FolderOpen;\n\n return (\n <div\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n (() => onOpen?.(vibe))();\n }\n }}\n className=\"p-4 border border-border-default rounded-lg bg-bg-surface hover:bg-bg-sunken/50 cursor-pointer transition-colors\"\n onClick={() => onOpen?.(vibe)}\n >\n {/* Header: Icon, Name, Status */}\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"flex items-start gap-3 min-w-0 flex-1\">\n {onToggleSelect && (\n <div onClick={(event) => event.stopPropagation()}>\n <SelectionCheckbox\n checked={!!selected}\n onChange={onToggleSelect}\n ariaLabel={`Select vibe ${vibe.name}`}\n />\n </div>\n )}\n <Icon className=\"size-5 text-action-primary-bg flex-shrink-0 mt-0.5\" />\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-medium text-text-primary truncate\">{vibe.name}</p>\n {vibe.description && (\n <p className=\"text-xs text-text-muted truncate mt-0.5\">{vibe.description}</p>\n )}\n </div>\n </div>\n <StatusBadge status={vibe.status} />\n </div>\n\n {/* Meta info row */}\n <div className=\"mt-3 flex flex-wrap items-center gap-x-4 gap-y-2 text-xs text-text-secondary\">\n {vibe.gitBranch && (\n <span className=\"flex items-center gap-1\">\n <GitBranch className=\"size-3\" />\n {vibe.gitBranch}\n </span>\n )}\n {vibe.tags && vibe.tags.length > 0 && (\n <span className=\"flex items-center gap-1\">\n <Tag className=\"size-3\" />\n {vibe.tags.length} tag{vibe.tags.length !== 1 ? 's' : ''}\n </span>\n )}\n </div>\n\n {/* Path (if exists) */}\n {vibe.path && (\n <div className=\"mt-2 text-xs font-mono text-text-muted truncate\">{vibe.path}</div>\n )}\n\n {/* Actions */}\n <div className=\"mt-3 flex items-center gap-2 justify-end border-t border-border-default pt-3\">\n {onActivate && vibe.status !== 'ACTIVE' && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onActivate(vibe);\n }}\n className=\"p-2 rounded hover:bg-bg-sunken transition-colors\"\n title=\"Activate\"\n >\n <Play className=\"size-4 text-text-secondary\" />\n </button>\n )}\n {onOpenInEditor && vibe.path && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onOpenInEditor(vibe);\n }}\n className=\"p-2 rounded hover:bg-bg-sunken transition-colors\"\n title=\"Open in VS Code\"\n >\n <ExternalLink className=\"size-4 text-text-secondary\" />\n </button>\n )}\n {onArchive && vibe.status !== 'ARCHIVED' && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onArchive(vibe);\n }}\n className=\"p-2 rounded hover:bg-bg-sunken transition-colors\"\n title=\"Archive\"\n >\n <Archive className=\"size-4 text-text-secondary\" />\n </button>\n )}\n {onDelete && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onDelete(vibe);\n }}\n className=\"p-2 rounded hover:bg-bg-sunken transition-colors\"\n title=\"Delete\"\n >\n <Trash2 className=\"size-4 text-status-error-text\" />\n </button>\n )}\n </div>\n </div>\n );\n}\n\nfunction VibeRow({\n vibe,\n onOpen,\n onEdit,\n onArchive,\n onDelete,\n onActivate,\n onOpenInEditor,\n selected,\n onToggleSelect,\n}: {\n vibe: Vibe;\n onOpen?: (vibe: Vibe) => void;\n onEdit?: (vibe: Vibe) => void;\n onArchive?: (vibe: Vibe) => void;\n onDelete?: (vibe: Vibe) => void;\n onActivate?: (vibe: Vibe) => void;\n onOpenInEditor?: (vibe: Vibe) => void;\n selected?: boolean;\n onToggleSelect?: (checked: boolean) => void;\n}) {\n const [showMenu, setShowMenu] = useState(false);\n const Icon = vibeTypeIcons[vibe.type] || FolderOpen;\n\n return (\n <tr\n className={`border-b border-border-default hover:bg-bg-sunken/50 cursor-pointer transition-colors ${\n selected ? 'bg-bg-sunken/40' : ''\n }`}\n onClick={() => onOpen?.(vibe)}\n >\n <td className=\"px-4 py-3\">\n {onToggleSelect && (\n <div onClick={(event) => event.stopPropagation()}>\n <SelectionCheckbox\n checked={!!selected}\n onChange={onToggleSelect}\n ariaLabel={`Select vibe ${vibe.name}`}\n />\n </div>\n )}\n </td>\n <td className=\"px-4 py-3\">\n <div className=\"flex items-center gap-3 min-w-0\">\n <Icon className=\"size-4 text-action-primary-bg shrink-0\" />\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium text-text-primary truncate\">{vibe.name}</p>\n {vibe.description && (\n <p className=\"text-xs text-text-muted truncate max-w-[250px]\">{vibe.description}</p>\n )}\n </div>\n </div>\n </td>\n <td className=\"px-4 py-3\">\n <StatusBadge status={vibe.status} />\n </td>\n <td className=\"px-4 py-3\">\n {vibe.path ? (\n <span className=\"text-xs font-mono text-text-muted truncate block max-w-[180px]\">\n {vibe.path}\n </span>\n ) : (\n <span className=\"text-xs text-text-muted\">-</span>\n )}\n </td>\n <td className=\"px-4 py-3\">\n {vibe.gitBranch ? (\n <div className=\"flex items-center gap-1.5 text-xs text-text-secondary\">\n <GitBranch className=\"size-3\" />\n <span className=\"truncate max-w-[100px]\">{vibe.gitBranch}</span>\n </div>\n ) : (\n <span className=\"text-xs text-text-muted\">-</span>\n )}\n </td>\n <td className=\"px-4 py-3\">\n {vibe.tags && vibe.tags.length > 0 ? (\n <div className=\"flex flex-wrap gap-1\">\n {vibe.tags.slice(0, 2).map((tag) => (\n <span\n key={tag}\n className=\"inline-flex items-center gap-0.5 px-1.5 py-0.5 text-xs bg-bg-sunken text-text-secondary rounded\"\n >\n <Tag className=\"size-2.5\" />\n {tag}\n </span>\n ))}\n {vibe.tags.length > 2 && (\n <span className=\"px-1.5 py-0.5 text-xs bg-bg-sunken text-text-secondary rounded\">\n +{vibe.tags.length - 2}\n </span>\n )}\n </div>\n ) : (\n <span className=\"text-xs text-text-muted\">-</span>\n )}\n </td>\n <td className=\"px-4 py-3\">\n <div className=\"flex items-center gap-1 justify-end\">\n {(onEdit || onArchive || onDelete || onActivate || onOpenInEditor) && (\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n setShowMenu(!showMenu);\n }}\n className=\"p-1.5 rounded hover:bg-bg-sunken transition-colors\"\n >\n <MoreVertical className=\"size-3.5 text-text-secondary\" />\n </button>\n {showMenu && (\n <div className=\"absolute right-0 mt-1 w-36 bg-bg-surface border border-border-default rounded-lg shadow-lg z-10\">\n {onActivate && vibe.status !== 'ACTIVE' && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onActivate(vibe);\n setShowMenu(false);\n }}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken rounded-t-lg\"\n >\n <Play className=\"size-4\" />\n Activate\n </button>\n )}\n {onEdit && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onEdit(vibe);\n setShowMenu(false);\n }}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken\"\n >\n <Settings className=\"size-4\" />\n Edit\n </button>\n )}\n {onOpenInEditor && vibe.path && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onOpenInEditor(vibe);\n setShowMenu(false);\n }}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken\"\n >\n <ExternalLink className=\"size-4\" />\n Open in VS Code\n </button>\n )}\n {onArchive && vibe.status !== 'ARCHIVED' && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onArchive(vibe);\n setShowMenu(false);\n }}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken rounded-b-lg\"\n >\n <Archive className=\"size-4\" />\n Archive\n </button>\n )}\n {onDelete && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onDelete(vibe);\n setShowMenu(false);\n }}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-sm text-status-error-text hover:bg-bg-sunken rounded-b-lg\"\n >\n <Trash2 className=\"size-4\" />\n Delete\n </button>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n </td>\n </tr>\n );\n}\n\nexport function VibeList({\n vibes,\n onOpen,\n onEdit,\n onArchive,\n onDelete,\n onActivate,\n onOpenInEditor,\n onCreateNew,\n isLoading,\n selectedVibeIds = new Set<string>(),\n onToggleSelect,\n onToggleAllVisible,\n allVisibleSelected = false,\n partiallySelected = false,\n}: VibeListProps) {\n const tr = useTr();\n\n if (!isLoading && vibes.length === 0) {\n return (\n <EmptyState\n icon={<FolderOpen className=\"size-8 text-text-secondary\" />}\n title={tr('vibecontrols.vibes.list.emptyTitle', 'No vibes yet')}\n description={tr(\n 'vibecontrols.vibes.list.emptyDescription',\n 'Vibes are your development projects and environments. Create your first vibe to organize your work.'\n )}\n action={\n onCreateNew && (\n <button\n type=\"button\"\n onClick={onCreateNew}\n className=\"inline-flex items-center gap-2 px-4 py-2 text-sm font-medium text-action-primary-text bg-action-primary-bg rounded-md hover:bg-action-primary-bg-hover transition-colors\"\n >\n <Plus className=\"size-4\" />\n {tr('vibecontrols.vibes.list.createVibe', 'Create Vibe')}\n </button>\n )\n }\n />\n );\n }\n\n return (\n <>\n {/* Mobile: Card view */}\n <div className=\"sm:hidden space-y-3\">\n {vibes.map((vibe) => (\n <VibeListCard\n key={vibe.id}\n vibe={vibe}\n onOpen={onOpen}\n onActivate={onActivate}\n onOpenInEditor={onOpenInEditor}\n onArchive={onArchive}\n onDelete={onDelete}\n selected={selectedVibeIds.has(vibe.id)}\n onToggleSelect={onToggleSelect ? (checked) => onToggleSelect(vibe, checked) : undefined}\n />\n ))}\n </div>\n\n {/* Desktop: Table view */}\n <div className=\"hidden sm:block border border-border-default rounded-lg overflow-visible\">\n <div className=\"overflow-x-auto\">\n <table className=\"w-full\">\n <thead>\n <tr className=\"bg-bg-sunken border-b border-border-default\">\n <th className=\"px-4 py-2.5 text-left text-xs font-medium text-text-secondary uppercase tracking-wider w-12\">\n {onToggleAllVisible ? (\n <SelectionCheckbox\n checked={allVisibleSelected}\n indeterminate={partiallySelected}\n onChange={onToggleAllVisible}\n ariaLabel=\"Select all visible vibes\"\n />\n ) : null}\n </th>\n <th className=\"px-4 py-2.5 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Name\n </th>\n <th className=\"px-4 py-2.5 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Status\n </th>\n <th className=\"px-4 py-2.5 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Path\n </th>\n <th className=\"px-4 py-2.5 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Branch\n </th>\n <th className=\"px-4 py-2.5 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Tags\n </th>\n <th className=\"px-4 py-2.5 text-right text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Actions\n </th>\n </tr>\n </thead>\n <tbody>\n {vibes.map((vibe) => (\n <VibeRow\n key={vibe.id}\n vibe={vibe}\n onOpen={onOpen}\n onEdit={onEdit}\n onArchive={onArchive}\n onDelete={onDelete}\n onActivate={onActivate}\n onOpenInEditor={onOpenInEditor}\n selected={selectedVibeIds.has(vibe.id)}\n onToggleSelect={\n onToggleSelect ? (checked) => onToggleSelect(vibe, checked) : undefined\n }\n />\n ))}\n </tbody>\n </table>\n </div>\n </div>\n </>\n );\n}\n"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  import "./VibeCard.js";
2
+ import "./DeleteVibeDialog.js";
2
3
  import "./VibeList.js";
3
4
  import "./VibeForm.js";
@@ -4053,8 +4053,8 @@ function Rs(e) {
4053
4053
  return t.useMutation(Ls, r);
4054
4054
  }
4055
4055
  var zs = e`
4056
- mutation DeleteVibe($id: ID!) {
4057
- deleteVibe(id: $id)
4056
+ mutation DeleteVibe($id: ID!, $deleteRelatedEntities: Boolean) {
4057
+ deleteVibe(id: $id, deleteRelatedEntities: $deleteRelatedEntities)
4058
4058
  }
4059
4059
  `;
4060
4060
  function Bs(e) {