@burdenoff/microfe-vibecontrols 2026.520.3 → 2026.521.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,200 +4,206 @@ import n from "./components/shared/AgentEventsConnector.js";
4
4
  /* empty css */
5
5
  import { useEffect as r } from "react";
6
6
  import { useI18n as i } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
7
- import { Activity as a, BarChart2 as o, BookOpen as s, Bot as c, Box as l, Brain as u, CalendarClock as d, FileCode as f, GitBranch as p, Globe as m, LayoutDashboard as h, LayoutGrid as g, PlayCircle as _, Plug as v, Rocket as y, Server as b, Settings as x, Shield as S, Terminal as C, Zap as w } from "lucide-react";
8
- import { jsx as T, jsxs as E } from "react/jsx-runtime";
9
- import { FeatureFlagProvider as D } from "@burdenoff/fe-libs/shared/feature-flags";
7
+ import { useRecordProductVisit as a } from "@burdenoff/fe-libs/shared/hooks";
8
+ import { Activity as o, BarChart2 as s, BookOpen as c, Bot as l, Box as u, Brain as d, CalendarClock as f, FileCode as p, GitBranch as m, Globe as h, LayoutDashboard as g, LayoutGrid as _, PlayCircle as v, Plug as y, Rocket as b, Server as x, Settings as S, Shield as C, Terminal as w, Zap as T } from "lucide-react";
9
+ import { jsx as E, jsxs as D } from "react/jsx-runtime";
10
+ import { FeatureFlagProvider as O } from "@burdenoff/fe-libs/shared/feature-flags";
10
11
  //#region src/VibeControlsRoot.tsx
11
- var O = (O) => {
12
- let { registerNavItems: k, registerFooterItems: A, basePath: j = "/", workspaceId: M } = O, { t: N, locale: P } = i(), F = typeof window < "u" && /^\/vibecontrols\/(share|deck)\//.test(window.location.pathname), I = (e, t) => (e.endsWith("/") ? e.slice(0, -1) : e) + (t.startsWith("/") ? t : `/${t}`);
12
+ var k = (k) => {
13
+ let { registerNavItems: A, registerFooterItems: j, basePath: M = "/", workspaceId: N } = k, { t: P, locale: F } = i(), I = typeof window < "u" && /^\/vibecontrols\/(share|deck)\//.test(window.location.pathname);
14
+ a({
15
+ productSlug: "vibecontrols",
16
+ enabled: !I
17
+ });
18
+ let L = (e, t) => (e.endsWith("/") ? e.slice(0, -1) : e) + (t.startsWith("/") ? t : `/${t}`);
13
19
  return r(() => {
14
- if (!(!k || F)) return k([
20
+ if (!(!A || I)) return A([
15
21
  {
16
22
  id: "vibecontrols-overview",
17
- label: N("nav.overview"),
18
- path: j === "/" ? "/" : j,
19
- icon: /* @__PURE__ */ T(h, { size: 20 }),
23
+ label: P("nav.overview"),
24
+ path: M === "/" ? "/" : M,
25
+ icon: /* @__PURE__ */ E(g, { size: 20 }),
20
26
  order: 10,
21
27
  group: "vibecontrols"
22
28
  },
23
29
  {
24
30
  id: "vibecontrols-targets",
25
- label: N("nav.targets"),
26
- path: I(j, "targets"),
27
- icon: /* @__PURE__ */ T(b, { size: 20 }),
31
+ label: P("nav.targets"),
32
+ path: L(M, "targets"),
33
+ icon: /* @__PURE__ */ E(x, { size: 20 }),
28
34
  order: 12,
29
35
  group: "vibecontrols"
30
36
  },
31
37
  {
32
38
  id: "vibecontrols-agents",
33
- label: N("nav.agents"),
34
- path: I(j, "agents"),
35
- icon: /* @__PURE__ */ T(c, { size: 20 }),
39
+ label: P("nav.agents"),
40
+ path: L(M, "agents"),
41
+ icon: /* @__PURE__ */ E(l, { size: 20 }),
36
42
  order: 14,
37
43
  group: "vibecontrols"
38
44
  },
39
45
  {
40
46
  id: "vibecontrols-agent-graph",
41
- label: N("nav.agentGraph"),
42
- path: I(j, "agent-graph"),
43
- icon: /* @__PURE__ */ T(p, { size: 20 }),
47
+ label: P("nav.agentGraph"),
48
+ path: L(M, "agent-graph"),
49
+ icon: /* @__PURE__ */ E(m, { size: 20 }),
44
50
  order: 16,
45
51
  group: "vibecontrols"
46
52
  },
47
53
  {
48
54
  id: "vibecontrols-vibes",
49
- label: N("nav.vibes"),
50
- path: I(j, "vibes"),
51
- icon: /* @__PURE__ */ T(w, { size: 20 }),
55
+ label: P("nav.vibes"),
56
+ path: L(M, "vibes"),
57
+ icon: /* @__PURE__ */ E(T, { size: 20 }),
52
58
  order: 20,
53
59
  group: "vibecontrols"
54
60
  },
55
61
  {
56
62
  id: "vibecontrols-catalogs",
57
- label: N("nav.catalogs") === "nav.catalogs" ? "Catalogs" : N("nav.catalogs"),
58
- path: I(j, "catalogs"),
59
- icon: /* @__PURE__ */ T(s, { size: 20 }),
63
+ label: P("nav.catalogs") === "nav.catalogs" ? "Catalogs" : P("nav.catalogs"),
64
+ path: L(M, "catalogs"),
65
+ icon: /* @__PURE__ */ E(c, { size: 20 }),
60
66
  order: 21,
61
67
  group: "vibecontrols"
62
68
  },
63
69
  {
64
70
  id: "vibecontrols-components",
65
- label: N("nav.components") === "nav.components" ? "Components" : N("nav.components"),
66
- path: I(j, "components"),
67
- icon: /* @__PURE__ */ T(l, { size: 20 }),
71
+ label: P("nav.components") === "nav.components" ? "Components" : P("nav.components"),
72
+ path: L(M, "components"),
73
+ icon: /* @__PURE__ */ E(u, { size: 20 }),
68
74
  order: 22,
69
75
  group: "vibecontrols"
70
76
  },
71
77
  {
72
78
  id: "vibecontrols-templates",
73
- label: N("nav.templates") === "nav.templates" ? "Templates" : N("nav.templates"),
74
- path: I(j, "templates"),
75
- icon: /* @__PURE__ */ T(f, { size: 20 }),
79
+ label: P("nav.templates") === "nav.templates" ? "Templates" : P("nav.templates"),
80
+ path: L(M, "templates"),
81
+ icon: /* @__PURE__ */ E(p, { size: 20 }),
76
82
  order: 23,
77
83
  group: "vibecontrols"
78
84
  },
79
85
  {
80
86
  id: "vibecontrols-vibedeck",
81
- label: N("nav.vibeDeck"),
82
- path: I(j, "vibedeck"),
83
- icon: /* @__PURE__ */ T(g, { size: 20 }),
87
+ label: P("nav.vibeDeck"),
88
+ path: L(M, "vibedeck"),
89
+ icon: /* @__PURE__ */ E(_, { size: 20 }),
84
90
  order: 25,
85
91
  group: "vibecontrols"
86
92
  },
87
93
  {
88
94
  id: "vibecontrols-sessions",
89
- label: N("nav.sessions"),
90
- path: I(j, "sessions"),
91
- icon: /* @__PURE__ */ T(C, { size: 20 }),
95
+ label: P("nav.sessions"),
96
+ path: L(M, "sessions"),
97
+ icon: /* @__PURE__ */ E(w, { size: 20 }),
92
98
  order: 30,
93
99
  group: "vibecontrols"
94
100
  },
95
101
  {
96
102
  id: "vibecontrols-vibecalendar",
97
- label: N("nav.vibeCalendar"),
98
- path: I(j, "calendar"),
99
- icon: /* @__PURE__ */ T(d, { size: 20 }),
103
+ label: P("nav.vibeCalendar"),
104
+ path: L(M, "calendar"),
105
+ icon: /* @__PURE__ */ E(f, { size: 20 }),
100
106
  order: 35,
101
107
  group: "vibecontrols"
102
108
  },
103
109
  {
104
110
  id: "vibecontrols-ai",
105
- label: N("nav.ai"),
106
- path: I(j, "ai"),
107
- icon: /* @__PURE__ */ T(u, { size: 20 }),
111
+ label: P("nav.ai"),
112
+ path: L(M, "ai"),
113
+ icon: /* @__PURE__ */ E(d, { size: 20 }),
108
114
  order: 38,
109
115
  group: "vibecontrols"
110
116
  },
111
117
  {
112
118
  id: "vibecontrols-actions",
113
- label: N("nav.actions"),
114
- path: I(j, "actions"),
115
- icon: /* @__PURE__ */ T(_, { size: 20 }),
119
+ label: P("nav.actions"),
120
+ path: L(M, "actions"),
121
+ icon: /* @__PURE__ */ E(v, { size: 20 }),
116
122
  order: 40,
117
123
  group: "vibecontrols"
118
124
  },
119
125
  {
120
126
  id: "vibecontrols-getting-started",
121
- label: N("nav.gettingStarted"),
122
- path: I(j, "getting-started"),
123
- icon: /* @__PURE__ */ T(y, { size: 20 }),
127
+ label: P("nav.gettingStarted"),
128
+ path: L(M, "getting-started"),
129
+ icon: /* @__PURE__ */ E(b, { size: 20 }),
124
130
  order: 50,
125
131
  group: "vibecontrols"
126
132
  },
127
133
  {
128
134
  id: "vibecontrols-tunnels",
129
- label: N("nav.tunnels"),
130
- path: I(j, "tunnels"),
131
- icon: /* @__PURE__ */ T(m, { size: 20 }),
135
+ label: P("nav.tunnels"),
136
+ path: L(M, "tunnels"),
137
+ icon: /* @__PURE__ */ E(h, { size: 20 }),
132
138
  order: 47,
133
139
  group: "vibecontrols"
134
140
  },
135
141
  {
136
142
  id: "vibecontrols-analytics",
137
- label: N("nav.analytics"),
138
- path: I(j, "analytics"),
139
- icon: /* @__PURE__ */ T(o, { size: 20 }),
143
+ label: P("nav.analytics"),
144
+ path: L(M, "analytics"),
145
+ icon: /* @__PURE__ */ E(s, { size: 20 }),
140
146
  order: 55.5,
141
147
  group: "vibecontrols-system"
142
148
  },
143
149
  {
144
150
  id: "vibecontrols-audit",
145
- label: N("nav.vibeAudit"),
146
- path: I(j, "audit"),
147
- icon: /* @__PURE__ */ T(S, { size: 20 }),
151
+ label: P("nav.vibeAudit"),
152
+ path: L(M, "audit"),
153
+ icon: /* @__PURE__ */ E(C, { size: 20 }),
148
154
  order: 56,
149
155
  group: "vibecontrols-system"
150
156
  },
151
157
  {
152
158
  id: "vibecontrols-health",
153
- label: N("nav.health"),
154
- path: I(j, "health"),
155
- icon: /* @__PURE__ */ T(a, { size: 20 }),
159
+ label: P("nav.health"),
160
+ path: L(M, "health"),
161
+ icon: /* @__PURE__ */ E(o, { size: 20 }),
156
162
  order: 110,
157
163
  group: "vibecontrols-system"
158
164
  },
159
165
  {
160
166
  id: "vibecontrols-integrations",
161
- label: N("nav.integrations") === "nav.integrations" ? "Integrations" : N("nav.integrations"),
167
+ label: P("nav.integrations") === "nav.integrations" ? "Integrations" : P("nav.integrations"),
162
168
  path: "/integrations",
163
- icon: /* @__PURE__ */ T(v, { size: 20 }),
169
+ icon: /* @__PURE__ */ E(y, { size: 20 }),
164
170
  order: 115,
165
171
  group: "vibecontrols-system"
166
172
  },
167
173
  {
168
174
  id: "vibecontrols-settings",
169
- label: N("nav.settings"),
170
- path: I(j, "settings"),
171
- icon: /* @__PURE__ */ T(x, { size: 20 }),
175
+ label: P("nav.settings"),
176
+ path: L(M, "settings"),
177
+ icon: /* @__PURE__ */ E(S, { size: 20 }),
172
178
  order: 120,
173
179
  group: "vibecontrols-system"
174
180
  }
175
181
  ]);
176
182
  }, [
177
- k,
178
- j,
179
- N,
183
+ A,
184
+ M,
180
185
  P,
181
- F
186
+ F,
187
+ I
182
188
  ]), r(() => {
183
- if (!(!A || F)) return A([{
189
+ if (!(!j || I)) return j([{
184
190
  id: "vibecontrols-status",
185
191
  label: "VibeControls Ready",
186
192
  type: "status",
187
193
  order: 10,
188
194
  section: "left"
189
195
  }]);
190
- }, [A, F]), /* @__PURE__ */ T(D, {
191
- workspaceId: M ?? null,
196
+ }, [j, I]), /* @__PURE__ */ E(O, {
197
+ workspaceId: N ?? null,
192
198
  gateway: "global",
193
199
  defaultEnabled: !0,
194
- children: /* @__PURE__ */ E(e, {
195
- ...O,
196
- children: [F ? null : /* @__PURE__ */ T(n, {}), /* @__PURE__ */ T(t, {})]
200
+ children: /* @__PURE__ */ D(e, {
201
+ ...k,
202
+ children: [I ? null : /* @__PURE__ */ E(n, {}), /* @__PURE__ */ E(t, {})]
197
203
  })
198
204
  });
199
205
  };
200
206
  //#endregion
201
- export { O as VibeControlsRoot };
207
+ export { k as VibeControlsRoot };
202
208
 
203
209
  //# sourceMappingURL=VibeControlsRoot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"VibeControlsRoot.js","names":[],"sources":["../src/VibeControlsRoot.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useEffect, useMemo } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\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 PlayCircle,\n BarChart2,\n BookOpen,\n Box,\n FileCode,\n Plug,\n} from 'lucide-react';\nimport { VibeControlsProvider } from './providers/VibeControlsProvider';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport type { NavItem, VibeControlsRootProps } from './types';\nimport { VibeControlsRoutes } from './VibeControlsRoutes';\nimport { AgentEventsConnector } from './components/shared/AgentEventsConnector';\nimport './styles/vibecontrols.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 const isPublicLinkRoute =\n typeof window !== 'undefined' &&\n /^\\/vibecontrols\\/(share|deck)\\//.test(window.location.pathname);\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-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 // 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 </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 { 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 PlayCircle,\n BarChart2,\n BookOpen,\n Box,\n FileCode,\n Plug,\n} from 'lucide-react';\nimport { VibeControlsProvider } from './providers/VibeControlsProvider';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport type { NavItem, VibeControlsRootProps } from './types';\nimport { VibeControlsRoutes } from './VibeControlsRoutes';\nimport { AgentEventsConnector } from './components/shared/AgentEventsConnector';\nimport './styles/vibecontrols.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-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 // 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 </VibeControlsProvider>\n </FeatureFlagProvider>\n );\n};\n"],"mappings":"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"}
@@ -4,97 +4,101 @@ import { Navigate as i, Route as a, Routes as o, useLocation as s } from "react-
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 }))), 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/CatalogPage.js").then((e) => ({ default: e.CatalogPage }))), I = t.lazy(() => import("./pages/CatalogDetailPage.js").then((e) => ({ default: e.CatalogDetailPage }))), L = t.lazy(() => import("./pages/CatalogDocsPage.js").then((e) => ({ default: e.CatalogDocsPage }))), R = t.lazy(() => import("./pages/ComponentsPage.js").then((e) => ({ default: e.ComponentsPage }))), z = t.lazy(() => import("./pages/ComponentDetailPage.js").then((e) => ({ default: e.ComponentDetailPage }))), B = t.lazy(() => import("./pages/ComponentDocsPage.js").then((e) => ({ default: e.ComponentDocsPage }))), V = t.lazy(() => import("./pages/TemplatesPage.js").then((e) => ({ default: e.TemplatesPage }))), H = t.lazy(() => import("./pages/TemplateDetailPage.js").then((e) => ({ default: e.TemplateDetailPage }))), U = t.lazy(() => import("./pages/ai/AIPage.js").then((e) => ({ default: e.AIPage }))), W = t.lazy(() => import("./pages/ai/AISessionDetailPage.js").then((e) => ({ default: e.AISessionDetailPage }))), G = t.lazy(() => import("./pages/ai/AgentManagerPage.js").then((e) => ({ default: e.AgentManagerPage })));
8
- function K() {
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/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/CatalogPage.js").then((e) => ({ default: e.CatalogPage }))), I = t.lazy(() => import("./pages/CatalogDetailPage.js").then((e) => ({ default: e.CatalogDetailPage }))), L = t.lazy(() => import("./pages/CatalogDocsPage.js").then((e) => ({ default: e.CatalogDocsPage }))), R = t.lazy(() => import("./pages/ComponentsPage.js").then((e) => ({ default: e.ComponentsPage }))), z = t.lazy(() => import("./pages/ComponentDetailPage.js").then((e) => ({ default: e.ComponentDetailPage }))), B = t.lazy(() => import("./pages/ComponentDocsPage.js").then((e) => ({ default: e.ComponentDocsPage }))), V = t.lazy(() => import("./pages/TemplatesPage.js").then((e) => ({ default: e.TemplatesPage }))), H = t.lazy(() => import("./pages/TemplateDetailPage.js").then((e) => ({ default: e.TemplateDetailPage }))), U = t.lazy(() => import("./pages/PluginStandalonePage.js").then((e) => ({ default: e.PluginStandalonePage }))), W = t.lazy(() => import("./pages/ai/AIPage.js").then((e) => ({ default: e.AIPage }))), G = t.lazy(() => import("./pages/ai/AISessionDetailPage.js").then((e) => ({ default: e.AISessionDetailPage }))), K = t.lazy(() => import("./pages/ai/AgentManagerPage.js").then((e) => ({ default: e.AgentManagerPage })));
8
+ function q() {
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 q() {
14
+ function J() {
15
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
- function J() {
21
+ function Y() {
22
22
  return /* @__PURE__ */ c("div", {
23
23
  className: "flex items-center justify-center h-full min-h-[200px] text-text-secondary text-sm",
24
24
  children: e()("vibecontrols.pages.featureDisabled", "This feature is currently disabled. You can enable it from Feature Previews.")
25
25
  });
26
26
  }
27
- function Y(e, t, n = !0) {
27
+ function X(e, t, n = !0) {
28
28
  return /* @__PURE__ */ c(u, {
29
29
  flag: e,
30
30
  defaultValue: n,
31
- fallback: /* @__PURE__ */ c(J, {}),
31
+ fallback: /* @__PURE__ */ c(Y, {}),
32
32
  children: t
33
33
  });
34
34
  }
35
- function X() {
35
+ function Z() {
36
36
  return /* @__PURE__ */ l(n, {
37
- fallback: /* @__PURE__ */ c(K, {}),
38
- children: [/* @__PURE__ */ c(q, {}), /* @__PURE__ */ l(o, { children: [
37
+ fallback: /* @__PURE__ */ c(q, {}),
38
+ children: [/* @__PURE__ */ c(J, {}), /* @__PURE__ */ l(o, { children: [
39
39
  /* @__PURE__ */ c(a, {
40
40
  index: !0,
41
- element: Y("vibecontrols.overview", /* @__PURE__ */ c(d, {}))
41
+ element: X("vibecontrols.overview", /* @__PURE__ */ c(d, {}))
42
+ }),
43
+ /* @__PURE__ */ c(a, {
44
+ path: "plugin/:pluginKey",
45
+ element: X("vibecontrols.vibes", /* @__PURE__ */ c(U, {}))
42
46
  }),
43
47
  /* @__PURE__ */ c(a, {
44
48
  path: "agents",
45
- element: Y("vibecontrols.agents", /* @__PURE__ */ c(f, {}))
49
+ element: X("vibecontrols.agents", /* @__PURE__ */ c(f, {}))
46
50
  }),
47
51
  /* @__PURE__ */ c(a, {
48
52
  path: "agents/:id",
49
- element: Y("vibecontrols.agents", /* @__PURE__ */ c(p, {}))
53
+ element: X("vibecontrols.agents", /* @__PURE__ */ c(p, {}))
50
54
  }),
51
55
  /* @__PURE__ */ c(a, {
52
56
  path: "sessions",
53
- element: Y("vibecontrols.sessions", /* @__PURE__ */ c(h, {}))
57
+ element: X("vibecontrols.sessions", /* @__PURE__ */ c(h, {}))
54
58
  }),
55
59
  /* @__PURE__ */ c(a, {
56
60
  path: "vibes",
57
- element: Y("vibecontrols.vibes", /* @__PURE__ */ c(_, {}))
61
+ element: X("vibecontrols.vibes", /* @__PURE__ */ c(_, {}))
58
62
  }),
59
63
  /* @__PURE__ */ c(a, {
60
64
  path: "vibes/:id",
61
- element: Y("vibecontrols.vibes", /* @__PURE__ */ c(v, {}))
65
+ element: X("vibecontrols.vibes", /* @__PURE__ */ c(v, {}))
62
66
  }),
63
67
  /* @__PURE__ */ c(a, {
64
68
  path: "vibes/:id/docs/*",
65
- element: Y("vibecontrols.vibes", /* @__PURE__ */ c(P, {}))
69
+ element: X("vibecontrols.vibes", /* @__PURE__ */ c(P, {}))
66
70
  }),
67
71
  /* @__PURE__ */ c(a, {
68
72
  path: "notes/:id",
69
- element: Y("vibecontrols.vibes", /* @__PURE__ */ c(y, {}))
73
+ element: X("vibecontrols.vibes", /* @__PURE__ */ c(y, {}))
70
74
  }),
71
75
  /* @__PURE__ */ c(a, {
72
76
  path: "sessions/:id",
73
- element: Y("vibecontrols.sessions", /* @__PURE__ */ c(g, {}))
77
+ element: X("vibecontrols.sessions", /* @__PURE__ */ c(g, {}))
74
78
  }),
75
79
  /* @__PURE__ */ c(a, {
76
80
  path: "ai",
77
- element: Y("vibecontrols.ai", /* @__PURE__ */ c(G, {}))
81
+ element: X("vibecontrols.ai", /* @__PURE__ */ c(K, {}))
78
82
  }),
79
83
  /* @__PURE__ */ c(a, {
80
84
  path: "ai/:tab",
81
- element: Y("vibecontrols.ai", /* @__PURE__ */ c(G, {}))
85
+ element: X("vibecontrols.ai", /* @__PURE__ */ c(K, {}))
82
86
  }),
83
87
  /* @__PURE__ */ c(a, {
84
88
  path: "ai/sessions/:sessionId",
85
- element: Y("vibecontrols.ai", /* @__PURE__ */ c(G, {}))
89
+ element: X("vibecontrols.ai", /* @__PURE__ */ c(K, {}))
86
90
  }),
87
91
  /* @__PURE__ */ c(a, {
88
92
  path: "ai-tools",
89
- element: Y("vibecontrols.ai", /* @__PURE__ */ c(U, {}))
93
+ element: X("vibecontrols.ai", /* @__PURE__ */ c(W, {}))
90
94
  }),
91
95
  /* @__PURE__ */ c(a, {
92
96
  path: "ai-tools/:tab",
93
- element: Y("vibecontrols.ai", /* @__PURE__ */ c(U, {}))
97
+ element: X("vibecontrols.ai", /* @__PURE__ */ c(W, {}))
94
98
  }),
95
99
  /* @__PURE__ */ c(a, {
96
100
  path: "ai-tools/sessions/:sessionId",
97
- element: Y("vibecontrols.ai", /* @__PURE__ */ c(W, {}))
101
+ element: X("vibecontrols.ai", /* @__PURE__ */ c(G, {}))
98
102
  }),
99
103
  /* @__PURE__ */ c(a, {
100
104
  path: "targets",
@@ -105,7 +109,7 @@ function X() {
105
109
  }),
106
110
  /* @__PURE__ */ c(a, {
107
111
  path: "targets/:id",
108
- element: Y("vibecontrols.agents", /* @__PURE__ */ c(m, {}))
112
+ element: X("vibecontrols.agents", /* @__PURE__ */ c(m, {}))
109
113
  }),
110
114
  /* @__PURE__ */ c(a, {
111
115
  path: "agent-graph",
@@ -116,55 +120,55 @@ function X() {
116
120
  }),
117
121
  /* @__PURE__ */ c(a, {
118
122
  path: "catalogs",
119
- element: Y("vibecontrols.catalogs", /* @__PURE__ */ c(F, {}))
123
+ element: X("vibecontrols.catalogs", /* @__PURE__ */ c(F, {}))
120
124
  }),
121
125
  /* @__PURE__ */ c(a, {
122
126
  path: "catalogs/:id",
123
- element: Y("vibecontrols.catalogs", /* @__PURE__ */ c(I, {}))
127
+ element: X("vibecontrols.catalogs", /* @__PURE__ */ c(I, {}))
124
128
  }),
125
129
  /* @__PURE__ */ c(a, {
126
130
  path: "catalogs/:id/docs/*",
127
- element: Y("vibecontrols.catalogs", /* @__PURE__ */ c(L, {}))
131
+ element: X("vibecontrols.catalogs", /* @__PURE__ */ c(L, {}))
128
132
  }),
129
133
  /* @__PURE__ */ c(a, {
130
134
  path: "components",
131
- element: Y("vibecontrols.components", /* @__PURE__ */ c(R, {}))
135
+ element: X("vibecontrols.components", /* @__PURE__ */ c(R, {}))
132
136
  }),
133
137
  /* @__PURE__ */ c(a, {
134
138
  path: "components/:id",
135
- element: Y("vibecontrols.components", /* @__PURE__ */ c(z, {}))
139
+ element: X("vibecontrols.components", /* @__PURE__ */ c(z, {}))
136
140
  }),
137
141
  /* @__PURE__ */ c(a, {
138
142
  path: "components/:id/docs/*",
139
- element: Y("vibecontrols.components", /* @__PURE__ */ c(B, {}))
143
+ element: X("vibecontrols.components", /* @__PURE__ */ c(B, {}))
140
144
  }),
141
145
  /* @__PURE__ */ c(a, {
142
146
  path: "templates",
143
- element: Y("vibecontrols.templates", /* @__PURE__ */ c(V, {}))
147
+ element: X("vibecontrols.templates", /* @__PURE__ */ c(V, {}))
144
148
  }),
145
149
  /* @__PURE__ */ c(a, {
146
150
  path: "templates/:id",
147
- element: Y("vibecontrols.templates", /* @__PURE__ */ c(H, {}))
151
+ element: X("vibecontrols.templates", /* @__PURE__ */ c(H, {}))
148
152
  }),
149
153
  /* @__PURE__ */ c(a, {
150
154
  path: "actions",
151
- element: Y("vibecontrols.actions", /* @__PURE__ */ c(j, {}))
155
+ element: X("vibecontrols.actions", /* @__PURE__ */ c(j, {}))
152
156
  }),
153
157
  /* @__PURE__ */ c(a, {
154
158
  path: "vibedeck",
155
- element: Y("vibecontrols.vibedeck", /* @__PURE__ */ c(D, {}))
159
+ element: X("vibecontrols.vibedeck", /* @__PURE__ */ c(D, {}))
156
160
  }),
157
161
  /* @__PURE__ */ c(a, {
158
162
  path: "calendar",
159
- element: Y("vibecontrols.calendar", /* @__PURE__ */ c(k, {}))
163
+ element: X("vibecontrols.calendar", /* @__PURE__ */ c(k, {}))
160
164
  }),
161
165
  /* @__PURE__ */ c(a, {
162
166
  path: "calendar/:viewType",
163
- element: Y("vibecontrols.calendar", /* @__PURE__ */ c(k, {}))
167
+ element: X("vibecontrols.calendar", /* @__PURE__ */ c(k, {}))
164
168
  }),
165
169
  /* @__PURE__ */ c(a, {
166
170
  path: "calendar/task/:taskId",
167
- element: Y("vibecontrols.calendar", /* @__PURE__ */ c(A, {}))
171
+ element: X("vibecontrols.calendar", /* @__PURE__ */ c(A, {}))
168
172
  }),
169
173
  /* @__PURE__ */ c(a, {
170
174
  path: "webhooks",
@@ -203,27 +207,27 @@ function X() {
203
207
  }),
204
208
  /* @__PURE__ */ c(a, {
205
209
  path: "tunnels",
206
- element: Y("vibecontrols.tunnels", /* @__PURE__ */ c(b, {}))
210
+ element: X("vibecontrols.tunnels", /* @__PURE__ */ c(b, {}))
207
211
  }),
208
212
  /* @__PURE__ */ c(a, {
209
213
  path: "tunnels/new",
210
- element: Y("vibecontrols.tunnels", /* @__PURE__ */ c(S, {}))
214
+ element: X("vibecontrols.tunnels", /* @__PURE__ */ c(S, {}))
211
215
  }),
212
216
  /* @__PURE__ */ c(a, {
213
217
  path: "tunnels/:tunnelId",
214
- element: Y("vibecontrols.tunnels", /* @__PURE__ */ c(x, {}))
218
+ element: X("vibecontrols.tunnels", /* @__PURE__ */ c(x, {}))
215
219
  }),
216
220
  /* @__PURE__ */ c(a, {
217
221
  path: "health",
218
- element: Y("vibecontrols.health", /* @__PURE__ */ c(w, {}))
222
+ element: X("vibecontrols.health", /* @__PURE__ */ c(w, {}))
219
223
  }),
220
224
  /* @__PURE__ */ c(a, {
221
225
  path: "analytics",
222
- element: Y("vibecontrols.analytics", /* @__PURE__ */ c(N, {}))
226
+ element: X("vibecontrols.analytics", /* @__PURE__ */ c(N, {}))
223
227
  }),
224
228
  /* @__PURE__ */ c(a, {
225
229
  path: "audit",
226
- element: Y("vibecontrols.audit-log", /* @__PURE__ */ c(M, {}), !1)
230
+ element: X("vibecontrols.audit-log", /* @__PURE__ */ c(M, {}), !1)
227
231
  }),
228
232
  /* @__PURE__ */ c(a, {
229
233
  path: "logs",
@@ -234,7 +238,7 @@ function X() {
234
238
  }),
235
239
  /* @__PURE__ */ c(a, {
236
240
  path: "settings",
237
- element: Y("vibecontrols.settings", /* @__PURE__ */ c(C, {}))
241
+ element: X("vibecontrols.settings", /* @__PURE__ */ c(C, {}))
238
242
  }),
239
243
  /* @__PURE__ */ c(a, {
240
244
  path: "getting-started",
@@ -280,6 +284,6 @@ function X() {
280
284
  });
281
285
  }
282
286
  //#endregion
283
- export { X as VibeControlsRoutes };
287
+ export { Z as VibeControlsRoutes };
284
288
 
285
289
  //# sourceMappingURL=VibeControlsRoutes.js.map