@burdenoff/microfe-vibecontrols 2026.625.2 → 2026.625.3

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.
@@ -2,8 +2,8 @@ import { useListTargetsQuery as e } from "../generated/wspace-operations.js";
2
2
  import { useVibeControls as t, useVibeNavigate as n } from "../providers/VibeControlsProvider.js";
3
3
  import r from "../hooks/useCachedInitialData.js";
4
4
  import { PageHeader as i } from "../components/shared/PageHeader.js";
5
- import { LoadingState as ee } from "../components/shared/LoadingState.js";
6
- import { ErrorState as a } from "../components/shared/ErrorState.js";
5
+ import { LoadingState as a } from "../components/shared/LoadingState.js";
6
+ import { ErrorState as ee } from "../components/shared/ErrorState.js";
7
7
  import { Card as o } from "../components/shared/Card.js";
8
8
  import { StatCard as s } from "../components/shared/StatCard.js";
9
9
  import { AgentSetupBanner as c } from "../components/shared/AgentSetupBanner.js";
@@ -13,32 +13,32 @@ import { AgentCard as u } from "../components/agents/AgentCard.js";
13
13
  import "../components/agents/index.js";
14
14
  import { SessionCard as te } from "../components/sessions/SessionCard.js";
15
15
  import "../components/sessions/index.js";
16
- import { VibeCard as ne } from "../components/vibes/VibeCard.js";
16
+ import { VibeCard as d } from "../components/vibes/VibeCard.js";
17
17
  import "../components/vibes/index.js";
18
- import { useCallback as re, useMemo as d } from "react";
19
- import { useI18n as f } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
20
- import { Activity as p, Bot as m, FileText as h, GitBranch as g, Play as _, RefreshCw as v, Server as y, Terminal as b, Zap as x } from "lucide-react";
21
- import { usePermissions as ie } from "@burdenoff/fe-libs/shared/providers/shell";
22
- import { jsx as S, jsxs as C } from "react/jsx-runtime";
23
- import { EmphasisPanel as ae } from "@burdenoff/fe-libs/ui";
24
- import { MotionItem as w, MotionList as T, MotionPage as oe } from "@burdenoff/fe-libs/shared/motion";
18
+ import { useCallback as f, useMemo as p } from "react";
19
+ import { useI18n as ne } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
20
+ import { Activity as m, Bot as h, FileText as re, GitBranch as ie, Play as g, RefreshCw as ae, Server as _, Terminal as v, Zap as y } from "lucide-react";
21
+ import { usePermissions as b } from "@burdenoff/fe-libs/shared/providers/shell";
22
+ import { Fragment as oe, jsx as x, jsxs as S } from "react/jsx-runtime";
23
+ import { AuroraBackground as se, EmphasisPanel as ce, GradientText as C, IllustratedEmptyState as w } from "@burdenoff/fe-libs/ui";
24
+ import { MotionItem as T, MotionList as E, MotionPage as D } from "@burdenoff/fe-libs/shared/motion";
25
25
  //#region src/pages/OverviewPage.tsx
26
- function E() {
27
- let E = n(), { t: D } = f(), { hasPermission: O, isLoading: k } = ie(), A = (e, t, n) => {
28
- let r = D(e, n), i = r === e ? t : r;
26
+ function O() {
27
+ let O = n(), { t: k } = ne(), { hasPermission: A, isLoading: j } = b(), M = (e, t, n) => {
28
+ let r = k(e, n), i = r === e ? t : r;
29
29
  return n ? Object.entries(n).reduce((e, [t, n]) => e.replace(`{{${t}}}`, String(n)), i) : i;
30
- }, { agents: j, vibes: M, sessions: N, loading: P, error: F, totals: I, refetch: L } = r(), { workspaceId: R } = t(), z = e({
30
+ }, { agents: N, vibes: P, sessions: F, loading: I, error: L, totals: R, refetch: z } = r(), { workspaceId: B } = t(), V = e({
31
31
  variables: {
32
- workspaceId: R || "",
32
+ workspaceId: B || "",
33
33
  limit: 50
34
34
  },
35
- skip: !R,
35
+ skip: !B,
36
36
  fetchPolicy: "cache-and-network"
37
- }), B = z.refetch, V = re(() => {
38
- L(), B();
39
- }, [L, B]), H = z.data?.targets.items ?? [], U = z.data?.targets.total ?? 0, W = U > H.length, G = H.filter((e) => e.status === "connected" || e.status === "active").length;
40
- F && console.error("[overview] failed to load initial workspace data", F);
41
- let K = d(() => j.map((e) => ({
37
+ }), H = V.refetch, U = f(() => {
38
+ z(), H();
39
+ }, [z, H]), W = V.data?.targets.items ?? [], G = V.data?.targets.total ?? 0, le = G > W.length, ue = W.filter((e) => e.status === "connected" || e.status === "active").length;
40
+ L && console.error("[overview] failed to load initial workspace data", L);
41
+ let K = p(() => N.map((e) => ({
42
42
  id: e.id,
43
43
  workspaceId: "",
44
44
  name: e.name,
@@ -58,7 +58,7 @@ function E() {
58
58
  metadata: {},
59
59
  createdAt: e.createdAt || "",
60
60
  updatedAt: ""
61
- })), [j]), q = d(() => M.map((e) => ({
61
+ })), [N]), q = p(() => P.map((e) => ({
62
62
  id: e.id,
63
63
  workspaceId: "",
64
64
  name: e.name,
@@ -77,7 +77,7 @@ function E() {
77
77
  updatedAt: "",
78
78
  archivedAt: null,
79
79
  agents: e.agents ?? []
80
- })), [M]), J = d(() => N.map((e) => ({
80
+ })), [P]), J = p(() => F.map((e) => ({
81
81
  id: e.id,
82
82
  workspaceId: "",
83
83
  agentId: e.agentId ?? null,
@@ -97,29 +97,29 @@ function E() {
97
97
  updatedAt: "",
98
98
  agent: void 0,
99
99
  vibe: void 0
100
- })), [N]), Y = K.filter((e) => e.isActive), X = J.filter((e) => e.status === "RUNNING"), Z = q.filter((e) => e.status === "ACTIVE"), Q = {
100
+ })), [F]), Y = K.filter((e) => e.isActive), X = J.filter((e) => e.status === "RUNNING"), Z = q.filter((e) => e.status === "ACTIVE"), Q = {
101
101
  agents: {
102
- total: I.agents,
102
+ total: R.agents,
103
103
  active: Y.length,
104
104
  offline: K.filter((e) => !e.isActive).length
105
105
  },
106
106
  vibes: {
107
- total: I.vibes,
107
+ total: R.vibes,
108
108
  active: Z.length,
109
109
  archived: q.filter((e) => e.status === "ARCHIVED").length
110
110
  },
111
111
  sessions: {
112
- total: I.sessions,
112
+ total: R.sessions,
113
113
  running: X.length,
114
114
  stopped: J.filter((e) => e.status === "STOPPED").length
115
115
  }
116
- }, $ = d(() => {
116
+ }, $ = p(() => {
117
117
  let e = [];
118
118
  return J.slice(0, 3).forEach((t) => {
119
119
  e.push({
120
120
  id: `session-${t.id}`,
121
121
  type: "session_started",
122
- title: t.status === "RUNNING" ? A("overviewPage.activity.sessionRunning", "Session Running") : A("overviewPage.activity.sessionStatus", "Session {{status}}", { status: t.status.toLowerCase() }),
122
+ title: t.status === "RUNNING" ? M("overviewPage.activity.sessionRunning", "Session Running") : M("overviewPage.activity.sessionStatus", "Session {{status}}", { status: t.status.toLowerCase() }),
123
123
  description: `${t.name}`,
124
124
  timestamp: t.createdAt,
125
125
  color: t.status === "RUNNING" ? "green" : "blue"
@@ -128,41 +128,41 @@ function E() {
128
128
  e.push({
129
129
  id: `agent-${t.id}`,
130
130
  type: "agent_connected",
131
- title: A("overviewPage.activity.agentOnline", "Agent Online"),
132
- description: A("overviewPage.activity.agentOnlineDescription", "{{name}} is active", { name: t.name }),
131
+ title: M("overviewPage.activity.agentOnline", "Agent Online"),
132
+ description: M("overviewPage.activity.agentOnlineDescription", "{{name}} is active", { name: t.name }),
133
133
  timestamp: t.lastHeartbeat || t.updatedAt,
134
134
  color: "blue"
135
135
  });
136
136
  }), e.sort((e, t) => new Date(t.timestamp).getTime() - new Date(e.timestamp).getTime()).slice(0, 6);
137
137
  }, [J, Y]);
138
- if (k || P && j.length === 0 && M.length === 0 && N.length === 0) return /* @__PURE__ */ S("div", {
138
+ if (j || I && N.length === 0 && P.length === 0 && F.length === 0) return /* @__PURE__ */ x("div", {
139
139
  className: "flex items-center justify-center min-h-[400px]",
140
- children: /* @__PURE__ */ S(ee, { message: A("overviewPage.loadingPermissions", "Loading permissions...") })
140
+ children: /* @__PURE__ */ x(a, { message: M("overviewPage.loadingPermissions", "Loading permissions...") })
141
141
  });
142
- if (!O(l.VIBE_LIST)) return /* @__PURE__ */ S("div", {
142
+ if (!A(l.VIBE_LIST)) return /* @__PURE__ */ x("div", {
143
143
  className: "flex items-center justify-center min-h-[400px] px-4",
144
- children: /* @__PURE__ */ C("div", {
144
+ children: /* @__PURE__ */ S("div", {
145
145
  className: "text-center space-y-2 max-w-sm",
146
- children: [/* @__PURE__ */ S("h2", {
146
+ children: [/* @__PURE__ */ x("h2", {
147
147
  className: "text-lg font-semibold tracking-tight text-text-primary",
148
- children: A("common.accessDeniedTitle", "Access Denied")
149
- }), /* @__PURE__ */ S("p", {
148
+ children: M("common.accessDeniedTitle", "Access Denied")
149
+ }), /* @__PURE__ */ x("p", {
150
150
  className: "text-sm text-text-secondary",
151
- children: A("overviewPage.accessDeniedDescription", "You don't have permission to access this page.")
151
+ children: M("overviewPage.accessDeniedDescription", "You don't have permission to access this page.")
152
152
  })]
153
153
  })
154
154
  });
155
- let se = (e) => {
156
- if (!e) return A("overviewPage.time.unknown", "Unknown");
155
+ let de = (e) => {
156
+ if (!e) return M("overviewPage.time.unknown", "Unknown");
157
157
  let t = Date.now() - new Date(e).getTime();
158
- return t < 6e4 ? A("overviewPage.time.justNow", "Just now") : t < 36e5 ? A("overviewPage.time.minutesAgo", "{{count}}m ago", { count: Math.floor(t / 6e4) }) : t < 864e5 ? A("overviewPage.time.hoursAgo", "{{count}}h ago", { count: Math.floor(t / 36e5) }) : A("overviewPage.time.daysAgo", "{{count}}d ago", { count: Math.floor(t / 864e5) });
159
- }, ce = (e) => /* @__PURE__ */ S({
160
- session_started: _,
161
- agent_connected: y,
162
- vibe_updated: g,
163
- note_created: h,
164
- module_installed: p
165
- }[e] || p, { className: "size-4" }), le = (e) => ({
158
+ return t < 6e4 ? M("overviewPage.time.justNow", "Just now") : t < 36e5 ? M("overviewPage.time.minutesAgo", "{{count}}m ago", { count: Math.floor(t / 6e4) }) : t < 864e5 ? M("overviewPage.time.hoursAgo", "{{count}}h ago", { count: Math.floor(t / 36e5) }) : M("overviewPage.time.daysAgo", "{{count}}d ago", { count: Math.floor(t / 864e5) });
159
+ }, fe = (e) => /* @__PURE__ */ x({
160
+ session_started: g,
161
+ agent_connected: _,
162
+ vibe_updated: ie,
163
+ note_created: re,
164
+ module_installed: m
165
+ }[e] || m, { className: "size-4" }), pe = (e) => ({
166
166
  green: "bg-status-success-bg-subtle text-status-success-text",
167
167
  blue: "bg-[var(--color-accent-soft)] text-text-primary",
168
168
  purple: "bg-accent-purple-subtle text-text-primary",
@@ -171,294 +171,274 @@ function E() {
171
171
  yellow: "bg-status-warning-bg-subtle text-status-warning-text",
172
172
  pink: "bg-accent-purple-subtle text-text-primary"
173
173
  })[e] || "bg-bg-sunken text-text-secondary";
174
- return /* @__PURE__ */ C(oe, {
174
+ return /* @__PURE__ */ S(D, {
175
175
  className: "space-y-6 px-6 lg:px-8 py-6 bg-bg-canvas min-h-screen",
176
176
  children: [
177
- /* @__PURE__ */ S(i, {
178
- title: A("overviewPage.title", "VibeControls Overview"),
179
- description: A("overviewPage.description", "Monitor and manage your development environments"),
180
- actions: /* @__PURE__ */ C("button", {
181
- type: "button",
182
- onClick: V,
183
- disabled: P,
184
- className: "inline-flex items-center gap-2 px-3 py-2 text-sm bg-bg-surface border border-border-subtle rounded-button text-text-primary hover:bg-bg-sunken hover:border-border-strong transition-all duration-200 disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus",
185
- children: [/* @__PURE__ */ S(v, {
186
- className: `size-4 ${P ? "animate-spin" : ""}`,
187
- "aria-hidden": "true"
188
- }), A("overviewPage.refresh", "Refresh")]
189
- })
177
+ /* @__PURE__ */ S("div", {
178
+ className: "relative overflow-hidden rounded-card -mx-2 px-2 pt-1",
179
+ children: [/* @__PURE__ */ x(se, { intensity: "subtle" }), /* @__PURE__ */ x(i, {
180
+ title: /* @__PURE__ */ S(oe, { children: [
181
+ /* @__PURE__ */ x(C, { children: M("overviewPage.titleNoun", "VibeControls") }),
182
+ " ",
183
+ M("overviewPage.titleSuffix", "Overview")
184
+ ] }),
185
+ description: M("overviewPage.description", "Monitor and manage your development environments"),
186
+ actions: /* @__PURE__ */ S("button", {
187
+ type: "button",
188
+ onClick: U,
189
+ disabled: I,
190
+ className: "inline-flex items-center gap-2 px-3 py-2 text-sm bg-bg-surface border border-border-subtle rounded-button text-text-primary hover:bg-bg-sunken hover:border-border-strong transition-all duration-200 disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus",
191
+ children: [/* @__PURE__ */ x(ae, {
192
+ className: `size-4 ${I ? "animate-spin" : ""}`,
193
+ "aria-hidden": "true"
194
+ }), M("overviewPage.refresh", "Refresh")]
195
+ })
196
+ })]
190
197
  }),
191
- F && !P && /* @__PURE__ */ S(a, {
192
- title: A("overviewPage.loadFailed.title", "Could not load workspace data"),
193
- message: A("overviewPage.loadFailed.message", "We couldn't load your VibeControls overview. Please try again in a moment."),
194
- onRetry: V
198
+ L && !I && /* @__PURE__ */ x(ee, {
199
+ title: M("overviewPage.loadFailed.title", "Could not load workspace data"),
200
+ message: M("overviewPage.loadFailed.message", "We couldn't load your VibeControls overview. Please try again in a moment."),
201
+ onRetry: U
195
202
  }),
196
- !F && K.length === 0 && !P && /* @__PURE__ */ S(c, {
203
+ !L && K.length === 0 && !I && /* @__PURE__ */ x(c, {
197
204
  variant: "full",
198
205
  dismissKey: "vibecontrols-overview-setup-banner"
199
206
  }),
200
- /* @__PURE__ */ C(T, {
207
+ /* @__PURE__ */ S(E, {
201
208
  "data-tour": "overview-stats",
202
209
  className: "grid grid-cols-2 sm:grid-cols-4 gap-4",
203
210
  stagger: .06,
204
211
  children: [
205
- /* @__PURE__ */ S(w, {
212
+ /* @__PURE__ */ x(T, {
206
213
  variant: "fadeScale",
207
- children: /* @__PURE__ */ S(s, {
208
- title: A("overviewPage.stats.targets", "Targets"),
209
- value: P ? "-" : U,
210
- subtitle: P || W ? "" : A("overviewPage.stats.connected", "{{count}} connected", { count: G }),
211
- icon: /* @__PURE__ */ S(y, { className: "size-6" }),
212
- variant: !P && U > 0 ? "success" : "default",
213
- onClick: () => E("/targets")
214
+ children: /* @__PURE__ */ x(s, {
215
+ title: M("overviewPage.stats.targets", "Targets"),
216
+ value: I ? "-" : G,
217
+ subtitle: I || le ? "" : M("overviewPage.stats.connected", "{{count}} connected", { count: ue }),
218
+ icon: /* @__PURE__ */ x(_, { className: "size-6" }),
219
+ variant: !I && G > 0 ? "success" : "default",
220
+ onClick: () => O("/targets")
214
221
  })
215
222
  }),
216
- /* @__PURE__ */ S(w, {
223
+ /* @__PURE__ */ x(T, {
217
224
  variant: "fadeScale",
218
- children: /* @__PURE__ */ S(s, {
219
- title: A("overviewPage.stats.agents", "Agents"),
220
- value: P ? "-" : Q.agents.total,
221
- subtitle: P ? "" : A("overviewPage.stats.active", "{{count}} active", { count: Q.agents.active }),
222
- icon: /* @__PURE__ */ S(m, { className: "size-6" }),
223
- variant: !P && Q.agents.active > 0 ? "success" : "default",
224
- onClick: () => E("/agents")
225
+ children: /* @__PURE__ */ x(s, {
226
+ title: M("overviewPage.stats.agents", "Agents"),
227
+ value: I ? "-" : Q.agents.total,
228
+ subtitle: I ? "" : M("overviewPage.stats.active", "{{count}} active", { count: Q.agents.active }),
229
+ icon: /* @__PURE__ */ x(h, { className: "size-6" }),
230
+ variant: !I && Q.agents.active > 0 ? "success" : "default",
231
+ onClick: () => O("/agents")
225
232
  })
226
233
  }),
227
- /* @__PURE__ */ S(w, {
234
+ /* @__PURE__ */ x(T, {
228
235
  variant: "fadeScale",
229
- children: /* @__PURE__ */ S(s, {
230
- title: A("overviewPage.stats.vibes", "Vibes"),
231
- value: P ? "-" : Q.vibes.total,
232
- subtitle: P ? "" : A("overviewPage.stats.active", "{{count}} active", { count: Q.vibes.active }),
233
- icon: /* @__PURE__ */ S(x, { className: "size-6" }),
234
- onClick: () => E("/vibes")
236
+ children: /* @__PURE__ */ x(s, {
237
+ title: M("overviewPage.stats.vibes", "Vibes"),
238
+ value: I ? "-" : Q.vibes.total,
239
+ subtitle: I ? "" : M("overviewPage.stats.active", "{{count}} active", { count: Q.vibes.active }),
240
+ icon: /* @__PURE__ */ x(y, { className: "size-6" }),
241
+ onClick: () => O("/vibes")
235
242
  })
236
243
  }),
237
- /* @__PURE__ */ S(w, {
244
+ /* @__PURE__ */ x(T, {
238
245
  variant: "fadeScale",
239
- children: /* @__PURE__ */ S(s, {
240
- title: A("overviewPage.stats.sessions", "Sessions"),
241
- value: P ? "-" : Q.sessions.total,
242
- subtitle: P ? "" : A("overviewPage.stats.running", "{{count}} running", { count: Q.sessions.running }),
243
- icon: /* @__PURE__ */ S(b, { className: "size-6" }),
244
- variant: !P && Q.sessions.running > 0 ? "success" : "default",
245
- onClick: () => E("/sessions")
246
+ children: /* @__PURE__ */ x(s, {
247
+ title: M("overviewPage.stats.sessions", "Sessions"),
248
+ value: I ? "-" : Q.sessions.total,
249
+ subtitle: I ? "" : M("overviewPage.stats.running", "{{count}} running", { count: Q.sessions.running }),
250
+ icon: /* @__PURE__ */ x(v, { className: "size-6" }),
251
+ variant: !I && Q.sessions.running > 0 ? "success" : "default",
252
+ onClick: () => O("/sessions")
246
253
  })
247
254
  })
248
255
  ]
249
256
  }),
250
- /* @__PURE__ */ C(T, {
257
+ /* @__PURE__ */ S(E, {
251
258
  className: "grid grid-cols-1 gap-6 xl:grid-cols-3",
252
259
  stagger: .08,
253
- children: [/* @__PURE__ */ S(w, {
260
+ children: [/* @__PURE__ */ x(T, {
254
261
  className: "xl:col-span-2 h-full",
255
- children: /* @__PURE__ */ C(ae, {
256
- className: "flex h-full flex-col",
257
- children: [/* @__PURE__ */ C("div", {
262
+ children: /* @__PURE__ */ S(ce, {
263
+ className: "flex h-full flex-col border-[color-mix(in_oklab,var(--color-action-primary-bg)_34%,transparent)] shadow-[var(--shadow-glow)]",
264
+ children: [/* @__PURE__ */ S("div", {
258
265
  className: "flex items-center justify-between mb-5",
259
- children: [/* @__PURE__ */ C("h2", {
266
+ children: [/* @__PURE__ */ S("h2", {
260
267
  className: "text-lg font-semibold tracking-tight text-text-primary flex items-center gap-2.5",
261
- children: [/* @__PURE__ */ S("span", {
268
+ children: [/* @__PURE__ */ x("span", {
262
269
  className: "inline-flex size-8 items-center justify-center rounded-lg bg-[var(--color-accent-soft)] text-text-primary",
263
- children: /* @__PURE__ */ S(m, { className: "size-5" })
264
- }), A("overviewPage.sections.activeAgents", "Active Agents")]
265
- }), /* @__PURE__ */ S("button", {
270
+ children: /* @__PURE__ */ x(h, { className: "size-5" })
271
+ }), M("overviewPage.sections.activeAgents", "Active Agents")]
272
+ }), /* @__PURE__ */ x("button", {
266
273
  type: "button",
267
- onClick: () => E("/agents"),
274
+ onClick: () => O("/agents"),
268
275
  className: "text-sm font-medium text-text-link hover:underline",
269
- "aria-label": A("overviewPage.sections.viewAllAgents", "View all agents"),
270
- children: A("overviewPage.sections.viewAll", "View all")
276
+ "aria-label": M("overviewPage.sections.viewAllAgents", "View all agents"),
277
+ children: M("overviewPage.sections.viewAll", "View all")
271
278
  })]
272
- }), Y.length > 0 ? /* @__PURE__ */ S(T, {
279
+ }), Y.length > 0 ? /* @__PURE__ */ x(E, {
273
280
  className: "grid grid-cols-1 sm:grid-cols-2 gap-4 flex-1 content-start",
274
281
  stagger: .04,
275
- children: Y.slice(0, 4).map((e) => /* @__PURE__ */ S(w, { children: /* @__PURE__ */ S(u, {
282
+ children: Y.slice(0, 4).map((e) => /* @__PURE__ */ x(T, { children: /* @__PURE__ */ x(u, {
276
283
  agent: e,
277
- onSelect: (e) => E(`/agents/${e.id}`)
284
+ onSelect: (e) => O(`/agents/${e.id}`)
278
285
  }) }, e.id))
279
- }) : /* @__PURE__ */ C("div", {
280
- className: "flex flex-1 flex-col items-center justify-center text-center py-8 text-text-secondary",
281
- children: [
282
- /* @__PURE__ */ S("span", {
283
- className: "inline-flex size-12 items-center justify-center rounded-full bg-[var(--color-accent-soft)] text-text-primary mb-3",
284
- children: /* @__PURE__ */ S(m, { className: "size-6" })
285
- }),
286
- /* @__PURE__ */ S("p", {
287
- className: "text-base font-semibold text-text-primary",
288
- children: A("overviewPage.empty.noActiveAgents", "No active agents")
289
- }),
290
- /* @__PURE__ */ S("p", {
291
- className: "text-xs text-text-muted mt-1 mb-4",
292
- children: A("overviewPage.empty.installCliHint", "Install the agent CLI to get started")
293
- }),
294
- /* @__PURE__ */ C("div", {
295
- className: "flex flex-wrap items-center justify-center gap-2",
296
- children: [
297
- /* @__PURE__ */ S("button", {
298
- type: "button",
299
- onClick: () => E("/getting-started"),
300
- className: "text-sm font-medium text-text-link hover:underline",
301
- children: A("overviewPage.empty.setupGuide", "Setup guide")
302
- }),
303
- /* @__PURE__ */ S("span", {
304
- className: "text-text-muted",
305
- children: "·"
306
- }),
307
- /* @__PURE__ */ S("button", {
308
- type: "button",
309
- onClick: () => E("/agents"),
310
- className: "text-sm text-text-link hover:underline",
311
- children: A("overviewPage.empty.addAgent", "Add agent")
312
- })
313
- ]
314
- })
315
- ]
286
+ }) : /* @__PURE__ */ x(w, {
287
+ className: "flex-1 py-8",
288
+ illustration: "empty-agents",
289
+ title: M("overviewPage.empty.noActiveAgents", "No active agents"),
290
+ description: M("overviewPage.empty.installCliHint", "Install the agent CLI to get started"),
291
+ action: /* @__PURE__ */ S("div", {
292
+ className: "flex flex-wrap items-center justify-center gap-2",
293
+ children: [
294
+ /* @__PURE__ */ x("button", {
295
+ type: "button",
296
+ onClick: () => O("/getting-started"),
297
+ className: "text-sm font-medium text-text-link hover:underline",
298
+ children: M("overviewPage.empty.setupGuide", "Setup guide")
299
+ }),
300
+ /* @__PURE__ */ x("span", {
301
+ className: "text-text-muted",
302
+ children: "·"
303
+ }),
304
+ /* @__PURE__ */ x("button", {
305
+ type: "button",
306
+ onClick: () => O("/agents"),
307
+ className: "text-sm text-text-link hover:underline",
308
+ children: M("overviewPage.empty.addAgent", "Add agent")
309
+ })
310
+ ]
311
+ })
316
312
  })]
317
313
  })
318
- }), /* @__PURE__ */ S(w, {
314
+ }), /* @__PURE__ */ x(T, {
319
315
  className: "h-full",
320
- children: /* @__PURE__ */ C(o, {
316
+ children: /* @__PURE__ */ S(o, {
321
317
  className: "flex h-full flex-col",
322
- children: [/* @__PURE__ */ C("div", {
318
+ children: [/* @__PURE__ */ S("div", {
323
319
  className: "flex items-center justify-between mb-5",
324
- children: [/* @__PURE__ */ C("h2", {
320
+ children: [/* @__PURE__ */ S("h2", {
325
321
  className: "text-lg font-semibold tracking-tight text-text-primary flex items-center gap-2.5",
326
- children: [/* @__PURE__ */ S("span", {
322
+ children: [/* @__PURE__ */ x("span", {
327
323
  className: "inline-flex size-8 items-center justify-center rounded-lg bg-[var(--color-accent-soft)] text-text-primary",
328
- children: /* @__PURE__ */ S(p, { className: "size-5" })
329
- }), A("overviewPage.sections.recentActivity", "Recent Activity")]
330
- }), /* @__PURE__ */ S("button", {
324
+ children: /* @__PURE__ */ x(m, { className: "size-5" })
325
+ }), M("overviewPage.sections.recentActivity", "Recent Activity")]
326
+ }), /* @__PURE__ */ x("button", {
331
327
  type: "button",
332
- onClick: () => E("/audit"),
328
+ onClick: () => O("/audit"),
333
329
  className: "text-sm font-medium text-text-link hover:underline",
334
- "aria-label": A("overviewPage.sections.viewAllActivity", "View all activity"),
330
+ "aria-label": M("overviewPage.sections.viewAllActivity", "View all activity"),
335
331
  children: "View all"
336
332
  })]
337
- }), /* @__PURE__ */ S(T, {
333
+ }), /* @__PURE__ */ x(E, {
338
334
  className: "space-y-3 flex-1",
339
335
  stagger: .04,
340
- children: $.length > 0 ? $.map((e) => /* @__PURE__ */ S(w, {
336
+ children: $.length > 0 ? $.map((e) => /* @__PURE__ */ x(T, {
341
337
  variant: "fadeRight",
342
- children: /* @__PURE__ */ C("div", {
338
+ children: /* @__PURE__ */ S("div", {
343
339
  className: "flex items-start gap-3",
344
340
  children: [
345
- /* @__PURE__ */ S("div", {
346
- className: `flex-shrink-0 size-8 rounded-full flex items-center justify-center ${le(e.color)}`,
347
- children: ce(e.type)
341
+ /* @__PURE__ */ x("div", {
342
+ className: `flex-shrink-0 size-8 rounded-full flex items-center justify-center ${pe(e.color)}`,
343
+ children: fe(e.type)
348
344
  }),
349
- /* @__PURE__ */ C("div", {
345
+ /* @__PURE__ */ S("div", {
350
346
  className: "flex-1 min-w-0",
351
- children: [/* @__PURE__ */ S("p", {
347
+ children: [/* @__PURE__ */ x("p", {
352
348
  className: "text-sm font-medium text-text-primary truncate",
353
349
  children: e.title
354
- }), /* @__PURE__ */ S("p", {
350
+ }), /* @__PURE__ */ x("p", {
355
351
  className: "text-xs text-text-secondary truncate",
356
352
  children: e.description
357
353
  })]
358
354
  }),
359
- /* @__PURE__ */ S("span", {
355
+ /* @__PURE__ */ x("span", {
360
356
  className: "text-xs text-text-secondary flex-shrink-0",
361
- children: se(e.timestamp)
357
+ children: de(e.timestamp)
362
358
  })
363
359
  ]
364
360
  })
365
- }, e.id)) : /* @__PURE__ */ C("div", {
366
- className: "flex h-full flex-col items-center justify-center text-center py-4 text-text-secondary text-sm",
367
- children: [/* @__PURE__ */ S("p", { children: A("overviewPage.empty.noRecentActivity", "No recent activity") }), /* @__PURE__ */ S("button", {
361
+ }, e.id)) : /* @__PURE__ */ x(w, {
362
+ className: "h-full py-6",
363
+ illustration: "empty-notifications",
364
+ title: M("overviewPage.empty.noRecentActivity", "No recent activity"),
365
+ action: /* @__PURE__ */ x("button", {
368
366
  type: "button",
369
- onClick: () => E("/audit"),
370
- className: "mt-2 text-sm text-text-link hover:underline",
371
- children: A("overviewPage.empty.viewAuditLog", "View audit log")
372
- })]
367
+ onClick: () => O("/audit"),
368
+ className: "text-sm text-text-link hover:underline",
369
+ children: M("overviewPage.empty.viewAuditLog", "View audit log")
370
+ })
373
371
  })
374
372
  })]
375
373
  })
376
374
  })]
377
375
  }),
378
- /* @__PURE__ */ S(w, { children: /* @__PURE__ */ C(o, { children: [/* @__PURE__ */ C("div", {
376
+ /* @__PURE__ */ x(T, { children: /* @__PURE__ */ S(o, { children: [/* @__PURE__ */ S("div", {
379
377
  className: "flex items-center justify-between mb-5",
380
- children: [/* @__PURE__ */ C("h2", {
378
+ children: [/* @__PURE__ */ S("h2", {
381
379
  className: "text-lg font-semibold tracking-tight text-text-primary flex items-center gap-2.5",
382
- children: [/* @__PURE__ */ S("span", {
380
+ children: [/* @__PURE__ */ x("span", {
383
381
  className: "inline-flex size-8 items-center justify-center rounded-lg bg-[var(--color-accent-soft)] text-text-primary",
384
- children: /* @__PURE__ */ S(b, { className: "size-5" })
385
- }), A("overviewPage.sections.runningSessions", "Running Sessions")]
386
- }), /* @__PURE__ */ S("button", {
382
+ children: /* @__PURE__ */ x(v, { className: "size-5" })
383
+ }), M("overviewPage.sections.runningSessions", "Running Sessions")]
384
+ }), /* @__PURE__ */ x("button", {
387
385
  type: "button",
388
- onClick: () => E("/sessions"),
386
+ onClick: () => O("/sessions"),
389
387
  className: "text-sm font-medium text-text-link hover:underline",
390
- children: A("overviewPage.sections.viewAll", "View all")
388
+ children: M("overviewPage.sections.viewAll", "View all")
391
389
  })]
392
- }), X.length > 0 ? /* @__PURE__ */ S(T, {
390
+ }), X.length > 0 ? /* @__PURE__ */ x(E, {
393
391
  className: "grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-3 gap-4",
394
392
  stagger: .04,
395
- children: X.slice(0, 6).map((e) => /* @__PURE__ */ S(w, { children: /* @__PURE__ */ S(te, {
393
+ children: X.slice(0, 6).map((e) => /* @__PURE__ */ x(T, { children: /* @__PURE__ */ x(te, {
396
394
  session: e,
397
- onOpen: (e) => E(`/sessions/${e.id}`)
395
+ onOpen: (e) => O(`/sessions/${e.id}`)
398
396
  }) }, e.id))
399
- }) : /* @__PURE__ */ C("div", {
400
- className: "flex flex-col items-center text-center py-10 text-text-secondary",
401
- children: [
402
- /* @__PURE__ */ S("span", {
403
- className: "inline-flex size-12 items-center justify-center rounded-full bg-[var(--color-accent-soft)] text-text-primary mb-3",
404
- children: /* @__PURE__ */ S(b, { className: "size-6" })
405
- }),
406
- /* @__PURE__ */ S("p", {
407
- className: "text-base font-semibold text-text-primary",
408
- children: A("overviewPage.empty.noRunningSessions", "No running sessions")
409
- }),
410
- /* @__PURE__ */ S("button", {
411
- type: "button",
412
- onClick: () => E("/sessions"),
413
- className: "mt-3 text-sm font-medium text-text-link hover:underline",
414
- children: A("overviewPage.empty.startSession", "Start a session")
415
- })
416
- ]
397
+ }) : /* @__PURE__ */ x(w, {
398
+ illustration: "empty-sessions",
399
+ title: M("overviewPage.empty.noRunningSessions", "No running sessions"),
400
+ action: /* @__PURE__ */ x("button", {
401
+ type: "button",
402
+ onClick: () => O("/sessions"),
403
+ className: "text-sm font-medium text-text-link hover:underline",
404
+ children: M("overviewPage.empty.startSession", "Start a session")
405
+ })
417
406
  })] }) }),
418
- /* @__PURE__ */ S(w, { children: /* @__PURE__ */ C(o, { children: [/* @__PURE__ */ C("div", {
407
+ /* @__PURE__ */ x(T, { children: /* @__PURE__ */ S(o, { children: [/* @__PURE__ */ S("div", {
419
408
  className: "flex items-center justify-between mb-5",
420
- children: [/* @__PURE__ */ C("h2", {
409
+ children: [/* @__PURE__ */ S("h2", {
421
410
  className: "text-lg font-semibold tracking-tight text-text-primary flex items-center gap-2.5",
422
- children: [/* @__PURE__ */ S("span", {
411
+ children: [/* @__PURE__ */ x("span", {
423
412
  className: "inline-flex size-8 items-center justify-center rounded-lg bg-[var(--color-accent-soft)] text-text-primary",
424
- children: /* @__PURE__ */ S(x, { className: "size-5" })
425
- }), A("overviewPage.sections.activeVibes", "Active Vibes")]
426
- }), /* @__PURE__ */ S("button", {
413
+ children: /* @__PURE__ */ x(y, { className: "size-5" })
414
+ }), M("overviewPage.sections.activeVibes", "Active Vibes")]
415
+ }), /* @__PURE__ */ x("button", {
427
416
  type: "button",
428
- onClick: () => E("/vibes"),
417
+ onClick: () => O("/vibes"),
429
418
  className: "text-sm font-medium text-text-link hover:underline",
430
- children: A("overviewPage.sections.viewAll", "View all")
419
+ children: M("overviewPage.sections.viewAll", "View all")
431
420
  })]
432
- }), Z.length > 0 ? /* @__PURE__ */ S(T, {
421
+ }), Z.length > 0 ? /* @__PURE__ */ x(E, {
433
422
  className: "grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-3 gap-4",
434
423
  stagger: .04,
435
- children: Z.slice(0, 6).map((e) => /* @__PURE__ */ S(w, { children: /* @__PURE__ */ S(ne, {
424
+ children: Z.slice(0, 6).map((e) => /* @__PURE__ */ x(T, { children: /* @__PURE__ */ x(d, {
436
425
  vibe: e,
437
- onOpen: (e) => E(`/vibes/${e.id}`)
426
+ onOpen: (e) => O(`/vibes/${e.id}`)
438
427
  }) }, e.id))
439
- }) : /* @__PURE__ */ C("div", {
440
- className: "flex flex-col items-center text-center py-10 text-text-secondary",
441
- children: [
442
- /* @__PURE__ */ S("span", {
443
- className: "inline-flex size-12 items-center justify-center rounded-full bg-[var(--color-accent-soft)] text-text-primary mb-3",
444
- children: /* @__PURE__ */ S(x, { className: "size-6" })
445
- }),
446
- /* @__PURE__ */ S("p", {
447
- className: "text-base font-semibold text-text-primary",
448
- children: A("overviewPage.empty.noActiveVibes", "No active vibes")
449
- }),
450
- /* @__PURE__ */ S("button", {
451
- type: "button",
452
- onClick: () => E("/vibes"),
453
- className: "mt-3 text-sm font-medium text-text-link hover:underline",
454
- children: A("overviewPage.empty.addVibe", "Add a vibe")
455
- })
456
- ]
428
+ }) : /* @__PURE__ */ x(w, {
429
+ illustration: "empty-vibes",
430
+ title: M("overviewPage.empty.noActiveVibes", "No active vibes"),
431
+ action: /* @__PURE__ */ x("button", {
432
+ type: "button",
433
+ onClick: () => O("/vibes"),
434
+ className: "text-sm font-medium text-text-link hover:underline",
435
+ children: M("overviewPage.empty.addVibe", "Add a vibe")
436
+ })
457
437
  })] }) })
458
438
  ]
459
439
  });
460
440
  }
461
441
  //#endregion
462
- export { E as OverviewPage };
442
+ export { O as OverviewPage };
463
443
 
464
444
  //# sourceMappingURL=OverviewPage.js.map