@burdenoff/microfe-vibecontrols 2026.610.4 → 2026.610.6

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.
@@ -6,221 +6,237 @@ import n from "./components/shared/AgentEventsConnector.js";
6
6
  import { useEffect as r } from "react";
7
7
  import { useI18n as i } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
8
8
  import { useRecordProductVisit as a } from "@burdenoff/fe-libs/shared/hooks";
9
- import { Activity as o, BarChart2 as s, BookOpen as c, Bookmark as l, Bot as u, Box as d, Brain as f, CalendarClock as p, FileCode as m, GitBranch as h, Globe as g, LayoutDashboard as _, LayoutGrid as v, PlayCircle as y, Plug as b, Puzzle as x, Rocket as S, Server as C, Settings as w, Shield as T, Terminal as E, Zap as D } from "lucide-react";
10
- import { jsx as O, jsxs as k } from "react/jsx-runtime";
11
- import { Toaster as A } from "@burdenoff/fe-libs/ui";
12
- import { FeatureFlagProvider as j } from "@burdenoff/fe-libs/shared/feature-flags";
9
+ import { Activity as o, BarChart2 as s, BookOpen as c, Bookmark as l, Bot as u, Box as d, Brain as f, CalendarClock as p, FileCode as m, GitBranch as h, Globe as g, LayoutDashboard as _, LayoutGrid as v, Network as y, PlayCircle as b, Plug as x, Puzzle as S, Rocket as C, Server as w, Settings as T, Shield as E, Terminal as D, Webhook as O, Zap as k } from "lucide-react";
10
+ import { jsx as A, jsxs as j } from "react/jsx-runtime";
11
+ import { Toaster as M } from "@burdenoff/fe-libs/ui";
12
+ import { FeatureFlagProvider as N } from "@burdenoff/fe-libs/shared/feature-flags";
13
13
  //#region src/VibeControlsRoot.tsx
14
- var M = (M) => {
15
- let { registerNavItems: N, registerFooterItems: P, basePath: F = "/", workspaceId: I } = M, { t: L, locale: R } = i(), z = typeof window < "u" && /^\/vibecontrols\/(share|deck)\//.test(window.location.pathname);
14
+ var P = (P) => {
15
+ let { registerNavItems: F, registerFooterItems: I, basePath: L = "/", workspaceId: R } = P, { t: z, locale: B } = i(), V = typeof window < "u" && /^\/vibecontrols\/(share|deck)\//.test(window.location.pathname);
16
16
  a({
17
17
  productSlug: "vibecontrols",
18
- enabled: !z
18
+ enabled: !V
19
19
  });
20
- let B = (e, t) => (e.endsWith("/") ? e.slice(0, -1) : e) + (t.startsWith("/") ? t : `/${t}`);
20
+ let H = (e, t) => (e.endsWith("/") ? e.slice(0, -1) : e) + (t.startsWith("/") ? t : `/${t}`);
21
21
  return r(() => {
22
- if (!(!N || z)) return N([
22
+ if (!(!F || V)) return F([
23
23
  {
24
24
  id: "vibecontrols-overview",
25
- label: L("nav.overview"),
26
- path: F === "/" ? "/" : F,
27
- icon: /* @__PURE__ */ O(_, { size: 20 }),
25
+ label: z("nav.overview"),
26
+ path: L === "/" ? "/" : L,
27
+ icon: /* @__PURE__ */ A(_, { size: 20 }),
28
28
  order: 10,
29
29
  group: "vibecontrols"
30
30
  },
31
31
  {
32
32
  id: "vibecontrols-targets",
33
- label: L("nav.targets"),
34
- path: B(F, "targets"),
35
- icon: /* @__PURE__ */ O(C, { size: 20 }),
33
+ label: z("nav.targets"),
34
+ path: H(L, "targets"),
35
+ icon: /* @__PURE__ */ A(w, { size: 20 }),
36
36
  order: 12,
37
37
  group: "vibecontrols"
38
38
  },
39
39
  {
40
40
  id: "vibecontrols-agents",
41
- label: L("nav.agents"),
42
- path: B(F, "agents"),
43
- icon: /* @__PURE__ */ O(u, { size: 20 }),
41
+ label: z("nav.agents"),
42
+ path: H(L, "agents"),
43
+ icon: /* @__PURE__ */ A(u, { size: 20 }),
44
44
  order: 14,
45
45
  group: "vibecontrols"
46
46
  },
47
47
  {
48
48
  id: "vibecontrols-agent-graph",
49
- label: L("nav.agentGraph"),
50
- path: B(F, "agent-graph"),
51
- icon: /* @__PURE__ */ O(h, { size: 20 }),
49
+ label: z("nav.agentGraph"),
50
+ path: H(L, "agent-graph"),
51
+ icon: /* @__PURE__ */ A(h, { size: 20 }),
52
52
  order: 16,
53
53
  group: "vibecontrols"
54
54
  },
55
55
  {
56
56
  id: "vibecontrols-vibes",
57
- label: L("nav.vibes"),
58
- path: B(F, "vibes"),
59
- icon: /* @__PURE__ */ O(D, { size: 20 }),
57
+ label: z("nav.vibes"),
58
+ path: H(L, "vibes"),
59
+ icon: /* @__PURE__ */ A(k, { size: 20 }),
60
60
  order: 20,
61
61
  group: "vibecontrols"
62
62
  },
63
63
  {
64
64
  id: "vibecontrols-catalogs",
65
- label: L("nav.catalogs") === "nav.catalogs" ? "Catalogs" : L("nav.catalogs"),
66
- path: B(F, "catalogs"),
67
- icon: /* @__PURE__ */ O(c, { size: 20 }),
65
+ label: z("nav.catalogs") === "nav.catalogs" ? "Catalogs" : z("nav.catalogs"),
66
+ path: H(L, "catalogs"),
67
+ icon: /* @__PURE__ */ A(c, { size: 20 }),
68
68
  order: 21,
69
69
  group: "vibecontrols"
70
70
  },
71
71
  {
72
72
  id: "vibecontrols-components",
73
- label: L("nav.components") === "nav.components" ? "Components" : L("nav.components"),
74
- path: B(F, "components"),
75
- icon: /* @__PURE__ */ O(d, { size: 20 }),
73
+ label: z("nav.components") === "nav.components" ? "Components" : z("nav.components"),
74
+ path: H(L, "components"),
75
+ icon: /* @__PURE__ */ A(d, { size: 20 }),
76
76
  order: 22,
77
77
  group: "vibecontrols"
78
78
  },
79
79
  {
80
80
  id: "vibecontrols-templates",
81
- label: L("nav.templates") === "nav.templates" ? "Templates" : L("nav.templates"),
82
- path: B(F, "templates"),
83
- icon: /* @__PURE__ */ O(m, { size: 20 }),
81
+ label: z("nav.templates") === "nav.templates" ? "Templates" : z("nav.templates"),
82
+ path: H(L, "templates"),
83
+ icon: /* @__PURE__ */ A(m, { size: 20 }),
84
84
  order: 23,
85
85
  group: "vibecontrols"
86
86
  },
87
+ {
88
+ id: "vibecontrols-environments",
89
+ label: z("nav.environments") === "nav.environments" ? "Environments" : z("nav.environments"),
90
+ path: H(L, "environments"),
91
+ icon: /* @__PURE__ */ A(y, { size: 20 }),
92
+ order: 23.5,
93
+ group: "vibecontrols"
94
+ },
87
95
  {
88
96
  id: "vibecontrols-plugins",
89
- label: L("nav.plugins") === "nav.plugins" ? "Plugins" : L("nav.plugins"),
90
- path: B(F, "plugins"),
91
- icon: /* @__PURE__ */ O(x, { size: 20 }),
97
+ label: z("nav.plugins") === "nav.plugins" ? "Plugins" : z("nav.plugins"),
98
+ path: H(L, "plugins"),
99
+ icon: /* @__PURE__ */ A(S, { size: 20 }),
92
100
  order: 24,
93
101
  group: "vibecontrols"
94
102
  },
95
103
  {
96
104
  id: "vibecontrols-vibedeck",
97
- label: L("nav.vibeDeck"),
98
- path: B(F, "vibedeck"),
99
- icon: /* @__PURE__ */ O(v, { size: 20 }),
105
+ label: z("nav.vibeDeck"),
106
+ path: H(L, "vibedeck"),
107
+ icon: /* @__PURE__ */ A(v, { size: 20 }),
100
108
  order: 25,
101
109
  group: "vibecontrols"
102
110
  },
103
111
  {
104
112
  id: "vibecontrols-sessions",
105
- label: L("nav.sessions"),
106
- path: B(F, "sessions"),
107
- icon: /* @__PURE__ */ O(E, { size: 20 }),
113
+ label: z("nav.sessions"),
114
+ path: H(L, "sessions"),
115
+ icon: /* @__PURE__ */ A(D, { size: 20 }),
108
116
  order: 30,
109
117
  group: "vibecontrols"
110
118
  },
111
119
  {
112
120
  id: "vibecontrols-vibecalendar",
113
- label: L("nav.vibeCalendar"),
114
- path: B(F, "calendar"),
115
- icon: /* @__PURE__ */ O(p, { size: 20 }),
121
+ label: z("nav.vibeCalendar"),
122
+ path: H(L, "calendar"),
123
+ icon: /* @__PURE__ */ A(p, { size: 20 }),
116
124
  order: 35,
117
125
  group: "vibecontrols"
118
126
  },
119
127
  {
120
128
  id: "vibecontrols-ai",
121
- label: L("nav.ai"),
122
- path: B(F, "ai"),
123
- icon: /* @__PURE__ */ O(f, { size: 20 }),
129
+ label: z("nav.ai"),
130
+ path: H(L, "ai"),
131
+ icon: /* @__PURE__ */ A(f, { size: 20 }),
124
132
  order: 38,
125
133
  group: "vibecontrols"
126
134
  },
127
135
  {
128
136
  id: "vibecontrols-ai-bookmarks",
129
- label: L("nav.aiBookmarks"),
130
- path: B(F, "ai/bookmarks"),
131
- icon: /* @__PURE__ */ O(l, { size: 20 }),
137
+ label: z("nav.aiBookmarks"),
138
+ path: H(L, "ai/bookmarks"),
139
+ icon: /* @__PURE__ */ A(l, { size: 20 }),
132
140
  order: 38.5,
133
141
  group: "vibecontrols"
134
142
  },
135
143
  {
136
144
  id: "vibecontrols-actions",
137
- label: L("nav.actions"),
138
- path: B(F, "actions"),
139
- icon: /* @__PURE__ */ O(y, { size: 20 }),
145
+ label: z("nav.actions"),
146
+ path: H(L, "actions"),
147
+ icon: /* @__PURE__ */ A(b, { size: 20 }),
140
148
  order: 40,
141
149
  group: "vibecontrols"
142
150
  },
151
+ {
152
+ id: "vibecontrols-webhooks",
153
+ label: z("nav.webhooks") === "nav.webhooks" ? "Webhooks" : z("nav.webhooks"),
154
+ path: H(L, "webhooks"),
155
+ icon: /* @__PURE__ */ A(O, { size: 20 }),
156
+ order: 41,
157
+ group: "vibecontrols"
158
+ },
143
159
  {
144
160
  id: "vibecontrols-getting-started",
145
- label: L("nav.gettingStarted"),
146
- path: B(F, "getting-started"),
147
- icon: /* @__PURE__ */ O(S, { size: 20 }),
161
+ label: z("nav.gettingStarted"),
162
+ path: H(L, "getting-started"),
163
+ icon: /* @__PURE__ */ A(C, { size: 20 }),
148
164
  order: 50,
149
165
  group: "vibecontrols"
150
166
  },
151
167
  {
152
168
  id: "vibecontrols-tunnels",
153
- label: L("nav.tunnels"),
154
- path: B(F, "tunnels"),
155
- icon: /* @__PURE__ */ O(g, { size: 20 }),
169
+ label: z("nav.tunnels"),
170
+ path: H(L, "tunnels"),
171
+ icon: /* @__PURE__ */ A(g, { size: 20 }),
156
172
  order: 47,
157
173
  group: "vibecontrols"
158
174
  },
159
175
  {
160
176
  id: "vibecontrols-analytics",
161
- label: L("nav.analytics"),
162
- path: B(F, "analytics"),
163
- icon: /* @__PURE__ */ O(s, { size: 20 }),
177
+ label: z("nav.analytics"),
178
+ path: H(L, "analytics"),
179
+ icon: /* @__PURE__ */ A(s, { size: 20 }),
164
180
  order: 55.5,
165
181
  group: "vibecontrols-system"
166
182
  },
167
183
  {
168
184
  id: "vibecontrols-audit",
169
- label: L("nav.vibeAudit"),
170
- path: B(F, "audit"),
171
- icon: /* @__PURE__ */ O(T, { size: 20 }),
185
+ label: z("nav.vibeAudit"),
186
+ path: H(L, "audit"),
187
+ icon: /* @__PURE__ */ A(E, { size: 20 }),
172
188
  order: 56,
173
189
  group: "vibecontrols-system"
174
190
  },
175
191
  {
176
192
  id: "vibecontrols-health",
177
- label: L("nav.health"),
178
- path: B(F, "health"),
179
- icon: /* @__PURE__ */ O(o, { size: 20 }),
193
+ label: z("nav.health"),
194
+ path: H(L, "health"),
195
+ icon: /* @__PURE__ */ A(o, { size: 20 }),
180
196
  order: 110,
181
197
  group: "vibecontrols-system"
182
198
  },
183
199
  {
184
200
  id: "vibecontrols-integrations",
185
- label: L("nav.integrations") === "nav.integrations" ? "Integrations" : L("nav.integrations"),
201
+ label: z("nav.integrations") === "nav.integrations" ? "Integrations" : z("nav.integrations"),
186
202
  path: "/integrations",
187
- icon: /* @__PURE__ */ O(b, { size: 20 }),
203
+ icon: /* @__PURE__ */ A(x, { size: 20 }),
188
204
  order: 115,
189
205
  group: "vibecontrols-system"
190
206
  },
191
207
  {
192
208
  id: "vibecontrols-settings",
193
- label: L("nav.settings"),
194
- path: B(F, "settings"),
195
- icon: /* @__PURE__ */ O(w, { size: 20 }),
209
+ label: z("nav.settings"),
210
+ path: H(L, "settings"),
211
+ icon: /* @__PURE__ */ A(T, { size: 20 }),
196
212
  order: 120,
197
213
  group: "vibecontrols-system"
198
214
  }
199
215
  ]);
200
216
  }, [
201
- N,
202
217
  F,
203
218
  L,
204
- R,
205
- z
219
+ z,
220
+ B,
221
+ V
206
222
  ]), r(() => {
207
- if (!(!P || z)) return P([{
223
+ if (!(!I || V)) return I([{
208
224
  id: "vibecontrols-status",
209
225
  label: "VibeControls Ready",
210
226
  type: "status",
211
227
  order: 10,
212
228
  section: "left"
213
229
  }]);
214
- }, [P, z]), /* @__PURE__ */ O(j, {
215
- workspaceId: I ?? null,
230
+ }, [I, V]), /* @__PURE__ */ A(N, {
231
+ workspaceId: R ?? null,
216
232
  gateway: "global",
217
233
  defaultEnabled: !0,
218
- children: /* @__PURE__ */ k(e, {
219
- ...M,
234
+ children: /* @__PURE__ */ j(e, {
235
+ ...P,
220
236
  children: [
221
- z ? null : /* @__PURE__ */ O(n, {}),
222
- /* @__PURE__ */ O(t, {}),
223
- /* @__PURE__ */ O(A, {
237
+ V ? null : /* @__PURE__ */ A(n, {}),
238
+ /* @__PURE__ */ A(t, {}),
239
+ /* @__PURE__ */ A(M, {
224
240
  position: "bottom-right",
225
241
  offset: {
226
242
  bottom: 96,
@@ -243,6 +259,6 @@ var M = (M) => {
243
259
  });
244
260
  };
245
261
  //#endregion
246
- export { M as VibeControlsRoot };
262
+ export { P as VibeControlsRoot };
247
263
 
248
264
  //# sourceMappingURL=VibeControlsRoot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"VibeControlsRoot.js","names":[],"sources":["../src/VibeControlsRoot.tsx"],"sourcesContent":["import type { CSSProperties, FC } from 'react';\nimport { useEffect, useMemo } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { useRecordProductVisit } from '@burdenoff/fe-libs/shared/hooks';\nimport {\n LayoutDashboard,\n Bot,\n Terminal,\n Zap,\n Globe,\n Settings,\n Activity,\n Rocket,\n LayoutGrid,\n CalendarClock,\n Shield,\n Server,\n GitBranch,\n Brain,\n Bookmark,\n PlayCircle,\n BarChart2,\n BookOpen,\n Box,\n FileCode,\n Plug,\n Puzzle,\n} from 'lucide-react';\nimport { VibeControlsProvider } from './providers/VibeControlsProvider';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { Toaster } from '@burdenoff/fe-libs/ui';\nimport type { NavItem, VibeControlsRootProps } from './types';\nimport { VibeControlsRoutes } from './VibeControlsRoutes';\nimport { AgentEventsConnector } from './components/shared/AgentEventsConnector';\nimport './styles/vibecontrols.css';\nimport './styles/print.css';\n\n/**\n * Root component for the VibeControls microfrontend.\n *\n * This is the main entry point that host applications import and render.\n * It sets up the necessary providers and renders the internal routing.\n * Automatically registers navigation items with the shell if registration functions are provided.\n *\n * @example\n * ```tsx\n * import { VibeControlsRoot, type VibeControlsRootProps } from '@burdenoff/microfe-vibecontrols';\n *\n * function App() {\n * const props: VibeControlsRootProps = {\n * basePath: '/vibecontrols',\n * navigate: (path) => router.push(path),\n * currentUser: { id: '1', email: 'user@example.com', firstName: 'John', lastName: 'Doe' },\n * workspaceId: 'ws-123',\n * tenantId: 'tenant-123',\n * apiGatewayUrl: 'https://api.example.com',\n * authToken: 'token',\n * defaultView: 'agents',\n * onAgentSelect: (agent) => console.log('Agent selected:', agent),\n * onSessionStart: (session) => console.log('Session started:', session),\n * onVibeActivate: (vibe) => console.log('Vibe activated:', vibe),\n * registerNavItems: (items) => { return () => {}; },\n * };\n *\n * return <VibeControlsRoot {...props} />;\n * }\n * ```\n */\nexport const VibeControlsRoot: FC<VibeControlsRootProps> = (props) => {\n const { registerNavItems, registerFooterItems, basePath = '/', workspaceId } = props;\n const { t, locale } = useI18n();\n\n const isPublicLinkRoute =\n typeof window !== 'undefined' &&\n /^\\/vibecontrols\\/(share|deck)\\//.test(window.location.pathname);\n\n useRecordProductVisit({ productSlug: 'vibecontrols', enabled: !isPublicLinkRoute });\n\n // Helper to join paths correctly, avoiding double slashes\n const joinPath = (base: string, path: string): string => {\n const cleanBase = base.endsWith('/') ? base.slice(0, -1) : base;\n const cleanPath = path.startsWith('/') ? path : `/${path}`;\n return cleanBase + cleanPath;\n };\n\n // Register navigation items with the shell\n useEffect(() => {\n if (!registerNavItems || isPublicLinkRoute) return;\n\n const navItems: NavItem[] = [\n // Main navigation\n {\n id: 'vibecontrols-overview',\n label: t('nav.overview'),\n path: basePath === '/' ? '/' : basePath,\n icon: <LayoutDashboard size={20} />,\n order: 10,\n group: 'vibecontrols',\n },\n\n // Targets first — the primary entity\n {\n id: 'vibecontrols-targets',\n label: t('nav.targets'),\n path: joinPath(basePath, 'targets'),\n icon: <Server size={20} />,\n order: 12,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-agents',\n label: t('nav.agents'),\n path: joinPath(basePath, 'agents'),\n icon: <Bot size={20} />,\n order: 14,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-agent-graph',\n label: t('nav.agentGraph'),\n path: joinPath(basePath, 'agent-graph'),\n icon: <GitBranch size={20} />,\n order: 16,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-vibes',\n label: t('nav.vibes'),\n path: joinPath(basePath, 'vibes'),\n icon: <Zap size={20} />,\n order: 20,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-catalogs',\n label: t('nav.catalogs') === 'nav.catalogs' ? 'Catalogs' : t('nav.catalogs'),\n path: joinPath(basePath, 'catalogs'),\n icon: <BookOpen size={20} />,\n order: 21,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-components',\n label: t('nav.components') === 'nav.components' ? 'Components' : t('nav.components'),\n path: joinPath(basePath, 'components'),\n icon: <Box size={20} />,\n order: 22,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-templates',\n label: t('nav.templates') === 'nav.templates' ? 'Templates' : t('nav.templates'),\n path: joinPath(basePath, 'templates'),\n icon: <FileCode size={20} />,\n order: 23,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-plugins',\n label: t('nav.plugins') === 'nav.plugins' ? 'Plugins' : t('nav.plugins'),\n path: joinPath(basePath, 'plugins'),\n icon: <Puzzle size={20} />,\n order: 24,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-vibedeck',\n label: t('nav.vibeDeck'),\n path: joinPath(basePath, 'vibedeck'),\n icon: <LayoutGrid size={20} />,\n order: 25,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-sessions',\n label: t('nav.sessions'),\n path: joinPath(basePath, 'sessions'),\n icon: <Terminal size={20} />,\n order: 30,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-vibecalendar',\n label: t('nav.vibeCalendar'),\n path: joinPath(basePath, 'calendar'),\n icon: <CalendarClock size={20} />,\n order: 35,\n group: 'vibecontrols',\n },\n // AI Vibecoding\n {\n id: 'vibecontrols-ai',\n label: t('nav.ai'),\n path: joinPath(basePath, 'ai'),\n icon: <Brain size={20} />,\n order: 38,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-ai-bookmarks',\n label: t('nav.aiBookmarks'),\n path: joinPath(basePath, 'ai/bookmarks'),\n icon: <Bookmark size={20} />,\n order: 38.5,\n group: 'vibecontrols',\n },\n\n // Actions\n {\n id: 'vibecontrols-actions',\n label: t('nav.actions'),\n path: joinPath(basePath, 'actions'),\n icon: <PlayCircle size={20} />,\n order: 40,\n group: 'vibecontrols',\n },\n\n {\n id: 'vibecontrols-getting-started',\n label: t('nav.gettingStarted'),\n path: joinPath(basePath, 'getting-started'),\n icon: <Rocket size={20} />,\n order: 50,\n group: 'vibecontrols',\n },\n\n // Connection management\n {\n id: 'vibecontrols-tunnels',\n label: t('nav.tunnels'),\n path: joinPath(basePath, 'tunnels'),\n icon: <Globe size={20} />,\n order: 47,\n group: 'vibecontrols',\n },\n\n {\n id: 'vibecontrols-analytics',\n label: t('nav.analytics'),\n path: joinPath(basePath, 'analytics'),\n icon: <BarChart2 size={20} />,\n order: 55.5,\n group: 'vibecontrols-system',\n },\n {\n id: 'vibecontrols-audit',\n label: t('nav.vibeAudit'),\n path: joinPath(basePath, 'audit'),\n icon: <Shield size={20} />,\n order: 56,\n group: 'vibecontrols-system',\n },\n\n // Settings & System\n {\n id: 'vibecontrols-health',\n label: t('nav.health'),\n path: joinPath(basePath, 'health'),\n icon: <Activity size={20} />,\n order: 110,\n group: 'vibecontrols-system',\n },\n {\n id: 'vibecontrols-integrations',\n label:\n t('nav.integrations') === 'nav.integrations' ? 'Integrations' : t('nav.integrations'),\n // Absolute path — links out to the host shell's /integrations route\n // (microfe-integrations, mounted by vibecontrols-app). Keeps the\n // VibeControls MFE compliant with the no-cross-MFE-import rule.\n path: '/integrations',\n icon: <Plug size={20} />,\n order: 115,\n group: 'vibecontrols-system',\n },\n {\n id: 'vibecontrols-settings',\n label: t('nav.settings'),\n path: joinPath(basePath, 'settings'),\n icon: <Settings size={20} />,\n order: 120,\n group: 'vibecontrols-system',\n },\n ];\n\n // Register and get cleanup function\n const cleanup = registerNavItems(navItems);\n\n // Return cleanup function to unregister on unmount\n return cleanup;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [registerNavItems, basePath, t, locale, isPublicLinkRoute]);\n\n // Register footer items (example: status indicator in left section)\n useEffect(() => {\n if (!registerFooterItems || isPublicLinkRoute) return;\n\n const footerItems = [\n {\n id: 'vibecontrols-status',\n label: 'VibeControls Ready',\n type: 'status' as const,\n order: 10,\n section: 'left' as const,\n },\n ];\n\n const cleanup = registerFooterItems(footerItems);\n return cleanup;\n }, [registerFooterItems, isPublicLinkRoute]);\n\n return (\n <FeatureFlagProvider workspaceId={workspaceId ?? null} gateway=\"global\" defaultEnabled={true}>\n <VibeControlsProvider {...props}>\n {!isPublicLinkRoute ? (\n /* Agent events connector - syncs active agent to WebSocket */\n <AgentEventsConnector />\n ) : null}\n <VibeControlsRoutes />\n {/* Single sonner toaster for the whole module (lib/toast.ts emits\n to it). Offset clears the shell's page-discussion FAB at\n bottom-6 right-6. The style block remaps sonner's theme vars to\n this app's semantic tokens (the fe-libs defaults reference\n shadcn vars that are not defined in this shell). */}\n <Toaster\n position=\"bottom-right\"\n offset={{ bottom: 96, right: 16 }}\n mobileOffset={{ bottom: 96, left: 16, right: 16 }}\n style={\n {\n '--normal-bg': 'var(--color-bg-elevated)',\n '--normal-text': 'var(--color-text-primary)',\n '--normal-border': 'var(--color-border-default)',\n '--border-radius': 'var(--radius-card)',\n } as CSSProperties\n }\n />\n </VibeControlsProvider>\n </FeatureFlagProvider>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"VibeControlsRoot.js","names":[],"sources":["../src/VibeControlsRoot.tsx"],"sourcesContent":["import type { CSSProperties, FC } from 'react';\nimport { useEffect, useMemo } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { useRecordProductVisit } from '@burdenoff/fe-libs/shared/hooks';\nimport {\n LayoutDashboard,\n Bot,\n Terminal,\n Zap,\n Globe,\n Settings,\n Activity,\n Rocket,\n LayoutGrid,\n CalendarClock,\n Shield,\n Server,\n GitBranch,\n Brain,\n Bookmark,\n PlayCircle,\n BarChart2,\n BookOpen,\n Box,\n FileCode,\n Plug,\n Puzzle,\n Network,\n Webhook,\n} from 'lucide-react';\nimport { VibeControlsProvider } from './providers/VibeControlsProvider';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { Toaster } from '@burdenoff/fe-libs/ui';\nimport type { NavItem, VibeControlsRootProps } from './types';\nimport { VibeControlsRoutes } from './VibeControlsRoutes';\nimport { AgentEventsConnector } from './components/shared/AgentEventsConnector';\nimport './styles/vibecontrols.css';\nimport './styles/print.css';\n\n/**\n * Root component for the VibeControls microfrontend.\n *\n * This is the main entry point that host applications import and render.\n * It sets up the necessary providers and renders the internal routing.\n * Automatically registers navigation items with the shell if registration functions are provided.\n *\n * @example\n * ```tsx\n * import { VibeControlsRoot, type VibeControlsRootProps } from '@burdenoff/microfe-vibecontrols';\n *\n * function App() {\n * const props: VibeControlsRootProps = {\n * basePath: '/vibecontrols',\n * navigate: (path) => router.push(path),\n * currentUser: { id: '1', email: 'user@example.com', firstName: 'John', lastName: 'Doe' },\n * workspaceId: 'ws-123',\n * tenantId: 'tenant-123',\n * apiGatewayUrl: 'https://api.example.com',\n * authToken: 'token',\n * defaultView: 'agents',\n * onAgentSelect: (agent) => console.log('Agent selected:', agent),\n * onSessionStart: (session) => console.log('Session started:', session),\n * onVibeActivate: (vibe) => console.log('Vibe activated:', vibe),\n * registerNavItems: (items) => { return () => {}; },\n * };\n *\n * return <VibeControlsRoot {...props} />;\n * }\n * ```\n */\nexport const VibeControlsRoot: FC<VibeControlsRootProps> = (props) => {\n const { registerNavItems, registerFooterItems, basePath = '/', workspaceId } = props;\n const { t, locale } = useI18n();\n\n const isPublicLinkRoute =\n typeof window !== 'undefined' &&\n /^\\/vibecontrols\\/(share|deck)\\//.test(window.location.pathname);\n\n useRecordProductVisit({ productSlug: 'vibecontrols', enabled: !isPublicLinkRoute });\n\n // Helper to join paths correctly, avoiding double slashes\n const joinPath = (base: string, path: string): string => {\n const cleanBase = base.endsWith('/') ? base.slice(0, -1) : base;\n const cleanPath = path.startsWith('/') ? path : `/${path}`;\n return cleanBase + cleanPath;\n };\n\n // Register navigation items with the shell\n useEffect(() => {\n if (!registerNavItems || isPublicLinkRoute) return;\n\n const navItems: NavItem[] = [\n // Main navigation\n {\n id: 'vibecontrols-overview',\n label: t('nav.overview'),\n path: basePath === '/' ? '/' : basePath,\n icon: <LayoutDashboard size={20} />,\n order: 10,\n group: 'vibecontrols',\n },\n\n // Targets first — the primary entity\n {\n id: 'vibecontrols-targets',\n label: t('nav.targets'),\n path: joinPath(basePath, 'targets'),\n icon: <Server size={20} />,\n order: 12,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-agents',\n label: t('nav.agents'),\n path: joinPath(basePath, 'agents'),\n icon: <Bot size={20} />,\n order: 14,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-agent-graph',\n label: t('nav.agentGraph'),\n path: joinPath(basePath, 'agent-graph'),\n icon: <GitBranch size={20} />,\n order: 16,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-vibes',\n label: t('nav.vibes'),\n path: joinPath(basePath, 'vibes'),\n icon: <Zap size={20} />,\n order: 20,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-catalogs',\n label: t('nav.catalogs') === 'nav.catalogs' ? 'Catalogs' : t('nav.catalogs'),\n path: joinPath(basePath, 'catalogs'),\n icon: <BookOpen size={20} />,\n order: 21,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-components',\n label: t('nav.components') === 'nav.components' ? 'Components' : t('nav.components'),\n path: joinPath(basePath, 'components'),\n icon: <Box size={20} />,\n order: 22,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-templates',\n label: t('nav.templates') === 'nav.templates' ? 'Templates' : t('nav.templates'),\n path: joinPath(basePath, 'templates'),\n icon: <FileCode size={20} />,\n order: 23,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-environments',\n label:\n t('nav.environments') === 'nav.environments' ? 'Environments' : t('nav.environments'),\n path: joinPath(basePath, 'environments'),\n icon: <Network size={20} />,\n order: 23.5,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-plugins',\n label: t('nav.plugins') === 'nav.plugins' ? 'Plugins' : t('nav.plugins'),\n path: joinPath(basePath, 'plugins'),\n icon: <Puzzle size={20} />,\n order: 24,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-vibedeck',\n label: t('nav.vibeDeck'),\n path: joinPath(basePath, 'vibedeck'),\n icon: <LayoutGrid size={20} />,\n order: 25,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-sessions',\n label: t('nav.sessions'),\n path: joinPath(basePath, 'sessions'),\n icon: <Terminal size={20} />,\n order: 30,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-vibecalendar',\n label: t('nav.vibeCalendar'),\n path: joinPath(basePath, 'calendar'),\n icon: <CalendarClock size={20} />,\n order: 35,\n group: 'vibecontrols',\n },\n // AI Vibecoding\n {\n id: 'vibecontrols-ai',\n label: t('nav.ai'),\n path: joinPath(basePath, 'ai'),\n icon: <Brain size={20} />,\n order: 38,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-ai-bookmarks',\n label: t('nav.aiBookmarks'),\n path: joinPath(basePath, 'ai/bookmarks'),\n icon: <Bookmark size={20} />,\n order: 38.5,\n group: 'vibecontrols',\n },\n\n // Actions\n {\n id: 'vibecontrols-actions',\n label: t('nav.actions'),\n path: joinPath(basePath, 'actions'),\n icon: <PlayCircle size={20} />,\n order: 40,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-webhooks',\n label: t('nav.webhooks') === 'nav.webhooks' ? 'Webhooks' : t('nav.webhooks'),\n path: joinPath(basePath, 'webhooks'),\n icon: <Webhook size={20} />,\n order: 41,\n group: 'vibecontrols',\n },\n\n {\n id: 'vibecontrols-getting-started',\n label: t('nav.gettingStarted'),\n path: joinPath(basePath, 'getting-started'),\n icon: <Rocket size={20} />,\n order: 50,\n group: 'vibecontrols',\n },\n\n // Connection management\n {\n id: 'vibecontrols-tunnels',\n label: t('nav.tunnels'),\n path: joinPath(basePath, 'tunnels'),\n icon: <Globe size={20} />,\n order: 47,\n group: 'vibecontrols',\n },\n\n {\n id: 'vibecontrols-analytics',\n label: t('nav.analytics'),\n path: joinPath(basePath, 'analytics'),\n icon: <BarChart2 size={20} />,\n order: 55.5,\n group: 'vibecontrols-system',\n },\n {\n id: 'vibecontrols-audit',\n label: t('nav.vibeAudit'),\n path: joinPath(basePath, 'audit'),\n icon: <Shield size={20} />,\n order: 56,\n group: 'vibecontrols-system',\n },\n\n // Settings & System\n {\n id: 'vibecontrols-health',\n label: t('nav.health'),\n path: joinPath(basePath, 'health'),\n icon: <Activity size={20} />,\n order: 110,\n group: 'vibecontrols-system',\n },\n {\n id: 'vibecontrols-integrations',\n label:\n t('nav.integrations') === 'nav.integrations' ? 'Integrations' : t('nav.integrations'),\n // Absolute path — links out to the host shell's /integrations route\n // (microfe-integrations, mounted by vibecontrols-app). Keeps the\n // VibeControls MFE compliant with the no-cross-MFE-import rule.\n path: '/integrations',\n icon: <Plug size={20} />,\n order: 115,\n group: 'vibecontrols-system',\n },\n {\n id: 'vibecontrols-settings',\n label: t('nav.settings'),\n path: joinPath(basePath, 'settings'),\n icon: <Settings size={20} />,\n order: 120,\n group: 'vibecontrols-system',\n },\n ];\n\n // Register and get cleanup function\n const cleanup = registerNavItems(navItems);\n\n // Return cleanup function to unregister on unmount\n return cleanup;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [registerNavItems, basePath, t, locale, isPublicLinkRoute]);\n\n // Register footer items (example: status indicator in left section)\n useEffect(() => {\n if (!registerFooterItems || isPublicLinkRoute) return;\n\n const footerItems = [\n {\n id: 'vibecontrols-status',\n label: 'VibeControls Ready',\n type: 'status' as const,\n order: 10,\n section: 'left' as const,\n },\n ];\n\n const cleanup = registerFooterItems(footerItems);\n return cleanup;\n }, [registerFooterItems, isPublicLinkRoute]);\n\n return (\n <FeatureFlagProvider workspaceId={workspaceId ?? null} gateway=\"global\" defaultEnabled={true}>\n <VibeControlsProvider {...props}>\n {!isPublicLinkRoute ? (\n /* Agent events connector - syncs active agent to WebSocket */\n <AgentEventsConnector />\n ) : null}\n <VibeControlsRoutes />\n {/* Single sonner toaster for the whole module (lib/toast.ts emits\n to it). Offset clears the shell's page-discussion FAB at\n bottom-6 right-6. The style block remaps sonner's theme vars to\n this app's semantic tokens (the fe-libs defaults reference\n shadcn vars that are not defined in this shell). */}\n <Toaster\n position=\"bottom-right\"\n offset={{ bottom: 96, right: 16 }}\n mobileOffset={{ bottom: 96, left: 16, right: 16 }}\n style={\n {\n '--normal-bg': 'var(--color-bg-elevated)',\n '--normal-text': 'var(--color-text-primary)',\n '--normal-border': 'var(--color-border-default)',\n '--border-radius': 'var(--radius-card)',\n } as CSSProperties\n }\n />\n </VibeControlsProvider>\n </FeatureFlagProvider>\n );\n};\n"],"mappings":"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"}
@@ -1,24 +1,24 @@
1
1
  import { useTr as e } from "./shared/hooks/useTr.js";
2
2
  import t, { Suspense as n, useEffect as r } from "react";
3
- import { Navigate as i, Route as a, Routes as ee, useLocation as o, useParams as s } from "react-router-dom";
3
+ import { Navigate as i, Route as a, Routes as o, useLocation as s, useParams as ee } from "react-router-dom";
4
4
  import { jsx as c, jsxs as l } from "react/jsx-runtime";
5
5
  import { FeatureGate as u } from "@burdenoff/fe-libs/shared/feature-flags";
6
6
  //#region src/VibeControlsRoutes.tsx
7
- var d = t.lazy(() => import("./pages/OverviewPage.js").then((e) => ({ default: e.OverviewPage }))), f = t.lazy(() => import("./pages/AgentsLandingPage.js").then((e) => ({ default: e.AgentsLandingPage }))), p = t.lazy(() => import("./pages/AgentDetailsPage.js").then((e) => ({ default: e.AgentDetailsPage }))), m = t.lazy(() => import("./pages/TargetDetailsPage.js").then((e) => ({ default: e.TargetDetailsPage }))), h = t.lazy(() => import("./pages/SessionsPage.js").then((e) => ({ default: e.SessionsPage }))), g = t.lazy(() => import("./pages/SessionDetailsPage.js").then((e) => ({ default: e.SessionDetailsPage }))), _ = t.lazy(() => import("./pages/VibesPage.js").then((e) => ({ default: e.VibesPage }))), v = t.lazy(() => import("./pages/VibeDetailsPage.js").then((e) => ({ default: e.VibeDetailsPage }))), y = t.lazy(() => import("./pages/NoteDetailsPage.js").then((e) => ({ default: e.NoteDetailsPage }))), b = t.lazy(() => import("./pages/TunnelsLandingPage.js").then((e) => ({ default: e.TunnelsLandingPage }))), x = t.lazy(() => import("./pages/tunnels/TunnelDetailsPage.js").then((e) => ({ default: e.TunnelDetailsPage }))), S = t.lazy(() => import("./components/tunnels/TunnelCreateWizard.js").then((e) => ({ default: e.TunnelCreateWizard }))), C = t.lazy(() => import("./pages/SettingsPage.js").then((e) => ({ default: e.SettingsPage }))), w = t.lazy(() => import("./pages/HealthPage.js").then((e) => ({ default: e.HealthPage }))), T = t.lazy(() => import("./pages/GettingStartedPage.js").then((e) => ({ default: e.GettingStartedPage }))), E = t.lazy(() => import("./pages/SharedSessionPage.js").then((e) => ({ default: e.SharedSessionPage }))), D = t.lazy(() => import("./pages/VibeDeckPage.js").then((e) => ({ default: e.VibeDeckPage }))), O = t.lazy(() => import("./pages/SharedVibeDeckPage.js").then((e) => ({ default: e.SharedVibeDeckPage }))), k = t.lazy(() => import("./pages/VibeCalendarPage.js").then((e) => ({ default: e.VibeCalendarPage }))), A = t.lazy(() => import("./pages/VibeTaskDetailPage.js").then((e) => ({ default: e.VibeTaskDetailPage }))), te = t.lazy(() => import("./pages/ScheduledJobDetailPage.js").then((e) => ({ default: e.ScheduledJobDetailPage }))), j = t.lazy(() => import("./pages/ActionsPage.js").then((e) => ({ default: e.ActionsPage }))), M = t.lazy(() => import("./pages/VibeAuditPage.js").then((e) => ({ default: e.VibeAuditPage }))), N = t.lazy(() => import("./pages/AnalyticsPage.js").then((e) => ({ default: e.AnalyticsPage }))), P = t.lazy(() => import("./pages/VibeDocsPage.js").then((e) => ({ default: e.VibeDocsPage }))), F = t.lazy(() => import("./pages/LogsPage.js").then((e) => ({ default: e.LogsPage }))), I = t.lazy(() => import("./pages/CatalogPage.js").then((e) => ({ default: e.CatalogPage }))), L = t.lazy(() => import("./pages/CatalogDetailPage.js").then((e) => ({ default: e.CatalogDetailPage }))), R = t.lazy(() => import("./pages/CatalogDocsPage.js").then((e) => ({ default: e.CatalogDocsPage }))), z = t.lazy(() => import("./pages/ComponentsPage.js").then((e) => ({ default: e.ComponentsPage }))), B = t.lazy(() => import("./pages/ComponentDetailPage.js").then((e) => ({ default: e.ComponentDetailPage }))), V = t.lazy(() => import("./pages/ComponentDocsPage.js").then((e) => ({ default: e.ComponentDocsPage }))), H = t.lazy(() => import("./pages/TemplatesPage.js").then((e) => ({ default: e.TemplatesPage }))), U = t.lazy(() => import("./pages/TemplateDetailPage.js").then((e) => ({ default: e.TemplateDetailPage }))), W = t.lazy(() => import("./pages/PluginsCatalogPage.js").then((e) => ({ default: e.PluginsCatalogPage }))), G = t.lazy(() => import("./pages/ai/AIPage.js").then((e) => ({ default: e.AIPage }))), K = t.lazy(() => import("./pages/ai/AISessionDetailPage.js").then((e) => ({ default: e.AISessionDetailPage }))), q = t.lazy(() => import("./pages/ai/AgentManagerPage.js").then((e) => ({ default: e.AgentManagerPage }))), J = t.lazy(() => import("./pages/ai/AIBookmarksPage.js").then((e) => ({ default: e.AIBookmarksPage })));
8
- function Y() {
7
+ var d = t.lazy(() => import("./pages/OverviewPage.js").then((e) => ({ default: e.OverviewPage }))), f = t.lazy(() => import("./pages/AgentsLandingPage.js").then((e) => ({ default: e.AgentsLandingPage }))), p = t.lazy(() => import("./pages/AgentDetailsPage.js").then((e) => ({ default: e.AgentDetailsPage }))), m = t.lazy(() => import("./pages/TargetDetailsPage.js").then((e) => ({ default: e.TargetDetailsPage }))), h = t.lazy(() => import("./pages/SessionsPage.js").then((e) => ({ default: e.SessionsPage }))), g = t.lazy(() => import("./pages/SessionDetailsPage.js").then((e) => ({ default: e.SessionDetailsPage }))), _ = t.lazy(() => import("./pages/VibesPage.js").then((e) => ({ default: e.VibesPage }))), v = t.lazy(() => import("./pages/VibeDetailsPage.js").then((e) => ({ default: e.VibeDetailsPage }))), y = t.lazy(() => import("./pages/NoteDetailsPage.js").then((e) => ({ default: e.NoteDetailsPage }))), b = t.lazy(() => import("./pages/TunnelsLandingPage.js").then((e) => ({ default: e.TunnelsLandingPage }))), x = t.lazy(() => import("./pages/tunnels/TunnelDetailsPage.js").then((e) => ({ default: e.TunnelDetailsPage }))), S = t.lazy(() => import("./components/tunnels/TunnelCreateWizard.js").then((e) => ({ default: e.TunnelCreateWizard }))), C = t.lazy(() => import("./pages/SettingsPage.js").then((e) => ({ default: e.SettingsPage }))), w = t.lazy(() => import("./pages/HealthPage.js").then((e) => ({ default: e.HealthPage }))), T = t.lazy(() => import("./pages/GettingStartedPage.js").then((e) => ({ default: e.GettingStartedPage }))), E = t.lazy(() => import("./pages/SharedSessionPage.js").then((e) => ({ default: e.SharedSessionPage }))), D = t.lazy(() => import("./pages/VibeDeckPage.js").then((e) => ({ default: e.VibeDeckPage }))), O = t.lazy(() => import("./pages/SharedVibeDeckPage.js").then((e) => ({ default: e.SharedVibeDeckPage }))), k = t.lazy(() => import("./pages/VibeCalendarPage.js").then((e) => ({ default: e.VibeCalendarPage }))), A = t.lazy(() => import("./pages/VibeTaskDetailPage.js").then((e) => ({ default: e.VibeTaskDetailPage }))), j = t.lazy(() => import("./pages/ScheduledJobDetailPage.js").then((e) => ({ default: e.ScheduledJobDetailPage }))), te = t.lazy(() => import("./pages/ActionsPage.js").then((e) => ({ default: e.ActionsPage }))), M = t.lazy(() => import("./pages/VibeAuditPage.js").then((e) => ({ default: e.VibeAuditPage }))), N = t.lazy(() => import("./pages/AnalyticsPage.js").then((e) => ({ default: e.AnalyticsPage }))), P = t.lazy(() => import("./pages/VibeDocsPage.js").then((e) => ({ default: e.VibeDocsPage }))), F = t.lazy(() => import("./pages/LogsPage.js").then((e) => ({ default: e.LogsPage }))), I = t.lazy(() => import("./pages/CatalogPage.js").then((e) => ({ default: e.CatalogPage }))), L = t.lazy(() => import("./pages/CatalogDetailPage.js").then((e) => ({ default: e.CatalogDetailPage }))), R = t.lazy(() => import("./pages/CatalogDocsPage.js").then((e) => ({ default: e.CatalogDocsPage }))), z = t.lazy(() => import("./pages/ComponentsPage.js").then((e) => ({ default: e.ComponentsPage }))), B = t.lazy(() => import("./pages/EnvTopologyPage.js").then((e) => ({ default: e.EnvTopologyPage }))), V = t.lazy(() => import("./pages/WebhooksPage.js").then((e) => ({ default: e.WebhooksPage }))), H = t.lazy(() => import("./pages/ComponentDetailPage.js").then((e) => ({ default: e.ComponentDetailPage }))), U = t.lazy(() => import("./pages/ComponentDocsPage.js").then((e) => ({ default: e.ComponentDocsPage }))), W = t.lazy(() => import("./pages/TemplatesPage.js").then((e) => ({ default: e.TemplatesPage }))), G = t.lazy(() => import("./pages/TemplateDetailPage.js").then((e) => ({ default: e.TemplateDetailPage }))), K = t.lazy(() => import("./pages/PluginsCatalogPage.js").then((e) => ({ default: e.PluginsCatalogPage }))), q = t.lazy(() => import("./pages/ai/AIPage.js").then((e) => ({ default: e.AIPage }))), J = t.lazy(() => import("./pages/ai/AISessionDetailPage.js").then((e) => ({ default: e.AISessionDetailPage }))), Y = t.lazy(() => import("./pages/ai/AgentManagerPage.js").then((e) => ({ default: e.AgentManagerPage }))), X = t.lazy(() => import("./pages/ai/AIBookmarksPage.js").then((e) => ({ default: e.AIBookmarksPage })));
8
+ function Z() {
9
9
  return /* @__PURE__ */ c("div", {
10
10
  className: "flex items-center justify-center h-full min-h-[200px]",
11
11
  children: /* @__PURE__ */ c("div", { className: "animate-pulse bg-muted rounded w-full h-full" })
12
12
  });
13
13
  }
14
- function X() {
15
- let { pathname: e } = o();
14
+ function Q() {
15
+ let { pathname: e } = s();
16
16
  return r(() => {
17
17
  let e = document.querySelector("main");
18
18
  e && (e.scrollTop = 0);
19
19
  }, [e]), null;
20
20
  }
21
- var Z = new Set([
21
+ var ne = new Set([
22
22
  "overview",
23
23
  "templates",
24
24
  "contexts",
@@ -29,12 +29,12 @@ var Z = new Set([
29
29
  "playground",
30
30
  "config"
31
31
  ]);
32
- function Q() {
33
- let { tab: e } = s();
32
+ function re() {
33
+ let { tab: e } = ee();
34
34
  return e === "plan" ? /* @__PURE__ */ c(i, {
35
35
  to: "/vibecontrols/ai-tools/plan",
36
36
  replace: !0
37
- }) : e && Z.has(e) ? /* @__PURE__ */ c(i, {
37
+ }) : e && ne.has(e) ? /* @__PURE__ */ c(i, {
38
38
  to: `/vibecontrols/ai-tools/ai/${e}`,
39
39
  replace: !0
40
40
  }) : /* @__PURE__ */ c(i, {
@@ -42,7 +42,7 @@ function Q() {
42
42
  replace: !0
43
43
  });
44
44
  }
45
- function ne() {
45
+ function ie() {
46
46
  return /* @__PURE__ */ c("div", {
47
47
  className: "flex items-center justify-center h-full min-h-[200px] text-text-secondary text-sm",
48
48
  children: e()("vibecontrols.pages.featureDisabled", "This feature is currently disabled. You can enable it from Feature Previews.")
@@ -52,21 +52,21 @@ function $(e, t, n = !0) {
52
52
  return /* @__PURE__ */ c(u, {
53
53
  flag: e,
54
54
  defaultValue: n,
55
- fallback: /* @__PURE__ */ c(ne, {}),
55
+ fallback: /* @__PURE__ */ c(ie, {}),
56
56
  children: t
57
57
  });
58
58
  }
59
- function re() {
59
+ function ae() {
60
60
  return /* @__PURE__ */ l(n, {
61
- fallback: /* @__PURE__ */ c(Y, {}),
62
- children: [/* @__PURE__ */ c(X, {}), /* @__PURE__ */ l(ee, { children: [
61
+ fallback: /* @__PURE__ */ c(Z, {}),
62
+ children: [/* @__PURE__ */ c(Q, {}), /* @__PURE__ */ l(o, { children: [
63
63
  /* @__PURE__ */ c(a, {
64
64
  index: !0,
65
65
  element: $("vibecontrols.overview", /* @__PURE__ */ c(d, {}))
66
66
  }),
67
67
  /* @__PURE__ */ c(a, {
68
68
  path: "plugins",
69
- element: $("vibecontrols.vibes", /* @__PURE__ */ c(W, {}))
69
+ element: $("vibecontrols.vibes", /* @__PURE__ */ c(K, {}))
70
70
  }),
71
71
  /* @__PURE__ */ c(a, {
72
72
  path: "agents",
@@ -116,19 +116,19 @@ function re() {
116
116
  }),
117
117
  /* @__PURE__ */ c(a, {
118
118
  path: "ai",
119
- element: $("vibecontrols.ai", /* @__PURE__ */ c(q, {}))
119
+ element: $("vibecontrols.ai", /* @__PURE__ */ c(Y, {}))
120
120
  }),
121
121
  /* @__PURE__ */ c(a, {
122
122
  path: "ai/bookmarks",
123
- element: $("vibecontrols.ai", /* @__PURE__ */ c(J, {}))
123
+ element: $("vibecontrols.ai", /* @__PURE__ */ c(X, {}))
124
124
  }),
125
125
  /* @__PURE__ */ c(a, {
126
126
  path: "ai/:tab",
127
- element: $("vibecontrols.ai", /* @__PURE__ */ c(q, {}))
127
+ element: $("vibecontrols.ai", /* @__PURE__ */ c(Y, {}))
128
128
  }),
129
129
  /* @__PURE__ */ c(a, {
130
130
  path: "ai/sessions/:sessionId",
131
- element: $("vibecontrols.ai", /* @__PURE__ */ c(q, {}))
131
+ element: $("vibecontrols.ai", /* @__PURE__ */ c(Y, {}))
132
132
  }),
133
133
  /* @__PURE__ */ c(a, {
134
134
  path: "ai-tools",
@@ -139,7 +139,7 @@ function re() {
139
139
  }),
140
140
  /* @__PURE__ */ c(a, {
141
141
  path: "ai-tools/plan",
142
- element: $("vibecontrols.ai", /* @__PURE__ */ c(G, {}))
142
+ element: $("vibecontrols.ai", /* @__PURE__ */ c(q, {}))
143
143
  }),
144
144
  /* @__PURE__ */ c(a, {
145
145
  path: "ai-tools/ai",
@@ -150,15 +150,15 @@ function re() {
150
150
  }),
151
151
  /* @__PURE__ */ c(a, {
152
152
  path: "ai-tools/ai/:tab",
153
- element: $("vibecontrols.ai", /* @__PURE__ */ c(G, {}))
153
+ element: $("vibecontrols.ai", /* @__PURE__ */ c(q, {}))
154
154
  }),
155
155
  /* @__PURE__ */ c(a, {
156
156
  path: "ai-tools/:tab",
157
- element: /* @__PURE__ */ c(Q, {})
157
+ element: /* @__PURE__ */ c(re, {})
158
158
  }),
159
159
  /* @__PURE__ */ c(a, {
160
160
  path: "ai-tools/sessions/:sessionId",
161
- element: $("vibecontrols.ai", /* @__PURE__ */ c(K, {}))
161
+ element: $("vibecontrols.ai", /* @__PURE__ */ c(J, {}))
162
162
  }),
163
163
  /* @__PURE__ */ c(a, {
164
164
  path: "targets",
@@ -195,24 +195,28 @@ function re() {
195
195
  element: $("vibecontrols.components", /* @__PURE__ */ c(z, {}))
196
196
  }),
197
197
  /* @__PURE__ */ c(a, {
198
- path: "components/:id",
198
+ path: "environments",
199
199
  element: $("vibecontrols.components", /* @__PURE__ */ c(B, {}))
200
200
  }),
201
+ /* @__PURE__ */ c(a, {
202
+ path: "components/:id",
203
+ element: $("vibecontrols.components", /* @__PURE__ */ c(H, {}))
204
+ }),
201
205
  /* @__PURE__ */ c(a, {
202
206
  path: "components/:id/docs/*",
203
- element: $("vibecontrols.components", /* @__PURE__ */ c(V, {}))
207
+ element: $("vibecontrols.components", /* @__PURE__ */ c(U, {}))
204
208
  }),
205
209
  /* @__PURE__ */ c(a, {
206
210
  path: "templates",
207
- element: $("vibecontrols.templates", /* @__PURE__ */ c(H, {}))
211
+ element: $("vibecontrols.templates", /* @__PURE__ */ c(W, {}))
208
212
  }),
209
213
  /* @__PURE__ */ c(a, {
210
214
  path: "templates/:id",
211
- element: $("vibecontrols.templates", /* @__PURE__ */ c(U, {}))
215
+ element: $("vibecontrols.templates", /* @__PURE__ */ c(G, {}))
212
216
  }),
213
217
  /* @__PURE__ */ c(a, {
214
218
  path: "actions",
215
- element: $("vibecontrols.actions", /* @__PURE__ */ c(j, {}))
219
+ element: $("vibecontrols.actions", /* @__PURE__ */ c(te, {}))
216
220
  }),
217
221
  /* @__PURE__ */ c(a, {
218
222
  path: "vibedeck",
@@ -232,28 +236,19 @@ function re() {
232
236
  }),
233
237
  /* @__PURE__ */ c(a, {
234
238
  path: "calendar/scheduled-job/:jobId",
235
- element: $("vibecontrols.calendar", /* @__PURE__ */ c(te, {}))
239
+ element: $("vibecontrols.calendar", /* @__PURE__ */ c(j, {}))
236
240
  }),
237
241
  /* @__PURE__ */ c(a, {
238
242
  path: "webhooks",
239
- element: /* @__PURE__ */ c(i, {
240
- to: "/devportal/webhooks",
241
- replace: !0
242
- })
243
+ element: $("vibecontrols.webhooks", /* @__PURE__ */ c(V, {}))
243
244
  }),
244
245
  /* @__PURE__ */ c(a, {
245
246
  path: "webhooks/new",
246
- element: /* @__PURE__ */ c(i, {
247
- to: "/devportal/webhooks/new",
248
- replace: !0
249
- })
247
+ element: $("vibecontrols.webhooks", /* @__PURE__ */ c(V, {}))
250
248
  }),
251
249
  /* @__PURE__ */ c(a, {
252
250
  path: "webhooks/:id",
253
- element: /* @__PURE__ */ c(i, {
254
- to: "/devportal/webhooks",
255
- replace: !0
256
- })
251
+ element: $("vibecontrols.webhooks", /* @__PURE__ */ c(V, {}))
257
252
  }),
258
253
  /* @__PURE__ */ c(a, {
259
254
  path: "gitops",
@@ -345,6 +340,6 @@ function re() {
345
340
  });
346
341
  }
347
342
  //#endregion
348
- export { re as VibeControlsRoutes };
343
+ export { ae as VibeControlsRoutes };
349
344
 
350
345
  //# sourceMappingURL=VibeControlsRoutes.js.map