@burdenoff/microfe-vibecontrols 2026.601.21 → 2026.601.23

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.
Files changed (44) hide show
  1. package/dist/components/actions/ActionCard.js +77 -66
  2. package/dist/components/actions/ActionCard.js.map +1 -1
  3. package/dist/components/ai/AIContextsTab.js +186 -173
  4. package/dist/components/ai/AIContextsTab.js.map +1 -1
  5. package/dist/components/ai/AITemplatesTab.js +135 -125
  6. package/dist/components/ai/AITemplatesTab.js.map +1 -1
  7. package/dist/components/ai/InstructionFilesManager.js +151 -137
  8. package/dist/components/ai/InstructionFilesManager.js.map +1 -1
  9. package/dist/components/docs/DocsEditPanel.js +17 -16
  10. package/dist/components/docs/DocsEditPanel.js.map +1 -1
  11. package/dist/components/docs/DocsPreviewPanel.js +25 -24
  12. package/dist/components/docs/DocsPreviewPanel.js.map +1 -1
  13. package/dist/components/docs/DocsTabPanel.js +110 -94
  14. package/dist/components/docs/DocsTabPanel.js.map +1 -1
  15. package/dist/components/notes/NotesTabPanel.js +8 -8
  16. package/dist/components/scorecard/ScorecardPanel.js +271 -257
  17. package/dist/components/scorecard/ScorecardPanel.js.map +1 -1
  18. package/dist/components/sharing/EntityShareButton.js +58 -0
  19. package/dist/components/sharing/EntityShareButton.js.map +1 -0
  20. package/dist/components/sharing/entityShareOps.js +603 -0
  21. package/dist/components/sharing/entityShareOps.js.map +1 -0
  22. package/dist/components/sharing/index.js +3 -0
  23. package/dist/components/sharing/shareRegistry.js +37 -12
  24. package/dist/components/sharing/shareRegistry.js.map +1 -1
  25. package/dist/components/sharing/useEntityShareController.js +88 -0
  26. package/dist/components/sharing/useEntityShareController.js.map +1 -0
  27. package/dist/constants/permissions.js +11 -0
  28. package/dist/constants/permissions.js.map +1 -1
  29. package/dist/pages/ActionsPage.js +162 -162
  30. package/dist/pages/ActionsPage.js.map +1 -1
  31. package/dist/pages/CatalogDetailPage.js +264 -250
  32. package/dist/pages/CatalogDetailPage.js.map +1 -1
  33. package/dist/pages/ComponentDetailPage.js +124 -113
  34. package/dist/pages/ComponentDetailPage.js.map +1 -1
  35. package/dist/pages/TargetDetailsPage.js +139 -126
  36. package/dist/pages/TargetDetailsPage.js.map +1 -1
  37. package/dist/pages/TemplateDetailPage.js +78 -67
  38. package/dist/pages/TemplateDetailPage.js.map +1 -1
  39. package/dist/pages/VibeDeckPage.js +1 -1
  40. package/dist/pages/VibeDetailsPage.js +484 -484
  41. package/dist/pages/VibeDetailsPage.js.map +1 -1
  42. package/dist/pages/tunnels/TunnelDetailsPage.js +91 -77
  43. package/dist/pages/tunnels/TunnelDetailsPage.js.map +1 -1
  44. package/package.json +1 -1
@@ -9,7 +9,9 @@ import { EmptyState as m } from "../components/shared/EmptyState.js";
9
9
  import { Card as h } from "../components/shared/Card.js";
10
10
  import { StatCard as g } from "../components/shared/StatCard.js";
11
11
  import "../components/shared/index.js";
12
- import { VIBE_PERMISSIONS as ee } from "../constants/permissions.js";
12
+ import { VIBE_PERMISSIONS as _ } from "../constants/permissions.js";
13
+ import { EntityShareButton as ee } from "../components/sharing/EntityShareButton.js";
14
+ import "../components/sharing/index.js";
13
15
  import { PageSkeleton as te } from "../components/shared/PageSkeleton.js";
14
16
  import { useQueryBackedTab as ne } from "../hooks/useQueryBackedTab.js";
15
17
  import { DocsTabPanel as re } from "../components/docs/DocsTabPanel.js";
@@ -18,15 +20,15 @@ import { ComponentCard as ie } from "../components/idp-components/ComponentCard.
18
20
  import "../components/idp-components/index.js";
19
21
  import { CatalogForm as ae } from "../components/catalog/CatalogForm.js";
20
22
  import "../components/catalog/index.js";
21
- import { useCallback as _, useEffect as v, useMemo as y, useState as b } from "react";
23
+ import { useCallback as v, useEffect as y, useMemo as b, useState as x } from "react";
22
24
  import { useI18n as oe } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
23
- import { ArrowLeft as x, ArrowRight as S, BookOpen as C, FileText as se, Layers as w, Network as T, Plus as E, RefreshCw as D, Settings as ce, Tag as le, Trash2 as ue, Zap as de } from "lucide-react";
25
+ import { ArrowLeft as S, ArrowRight as C, BookOpen as w, FileText as se, Layers as T, Network as E, Plus as D, RefreshCw as O, Settings as ce, Tag as le, Trash2 as ue, Zap as de } from "lucide-react";
24
26
  import { useParams as fe } from "react-router-dom";
25
27
  import { usePermissions as pe } from "@burdenoff/fe-libs/shared/providers/shell";
26
- import { AnimatePresence as me, motion as O } from "framer-motion";
27
- import { Fragment as k, jsx as A, jsxs as j } from "react/jsx-runtime";
28
- import { MotionItem as M, MotionList as N, MotionPage as P } from "@burdenoff/fe-libs/shared/motion";
29
- import { Background as F, BackgroundVariant as I, Controls as L, Handle as R, MarkerType as z, Position as B, ReactFlow as V, addEdge as H, useEdgesState as U, useNodesState as W } from "@xyflow/react";
28
+ import { AnimatePresence as me, motion as k } from "framer-motion";
29
+ import { Fragment as A, jsx as j, jsxs as M } from "react/jsx-runtime";
30
+ import { MotionItem as N, MotionList as P, MotionPage as F } from "@burdenoff/fe-libs/shared/motion";
31
+ import { Background as I, BackgroundVariant as L, Controls as R, Handle as z, MarkerType as B, Position as V, ReactFlow as H, addEdge as U, useEdgesState as W, useNodesState as G } from "@xyflow/react";
30
32
  import "@xyflow/react/dist/style.css";
31
33
  //#region src/pages/CatalogDetailPage.tsx
32
34
  var he = [
@@ -36,15 +38,15 @@ var he = [
36
38
  "docs",
37
39
  "settings"
38
40
  ];
39
- function G() {
40
- let { t: n } = oe(), { id: i } = fe(), s = l(), { hasPermission: d, isLoading: v } = pe(), S = _((e, t) => {
41
+ function K() {
42
+ let { t: n } = oe(), { id: i } = fe(), s = l(), { hasPermission: d, isLoading: y } = pe(), C = v((e, t) => {
41
43
  let r = n(e);
42
44
  return r === e ? t : r;
43
- }, [n]), [k, F] = ne(he, "overview"), [I, L] = b(!1), [R, z] = b(!1), [B, V] = b(!1), [H, U] = b(!1), [W, G] = b(null), { data: K, loading: q, error: J, refetch: Y } = r({
45
+ }, [n]), [A, I] = ne(he, "overview"), [L, R] = x(!1), [z, B] = x(!1), [V, H] = x(!1), [U, W] = x(!1), [G, K] = x(null), { data: q, loading: J, error: Y, refetch: X } = r({
44
46
  variables: { id: i || "" },
45
47
  skip: !i,
46
48
  fetchPolicy: "cache-and-network"
47
- }), [ve] = o({ refetchQueries: ["GetCatalog"] }), [ye] = t({ refetchQueries: ["ListCatalogs"] }), [X] = e({ refetchQueries: ["GetCatalog"] }), [be] = a({ refetchQueries: ["GetCatalog"] }), Z = K?.vibecontrolsCatalog ?? null, Q = y(() => (Z?.components ?? []).map((e) => {
49
+ }), [ve] = o({ refetchQueries: ["GetCatalog"] }), [ye] = t({ refetchQueries: ["ListCatalogs"] }), [be] = e({ refetchQueries: ["GetCatalog"] }), [xe] = a({ refetchQueries: ["GetCatalog"] }), Z = q?.vibecontrolsCatalog ?? null, Q = b(() => (Z?.components ?? []).map((e) => {
48
50
  let t = e.component || {};
49
51
  return {
50
52
  id: t.id,
@@ -60,21 +62,21 @@ function G() {
60
62
  updatedAt: t.updatedAt
61
63
  };
62
64
  }), [Z?.components]);
63
- if (v) return /* @__PURE__ */ A("div", {
65
+ if (y) return /* @__PURE__ */ j("div", {
64
66
  className: "flex items-center justify-center min-h-[400px]",
65
- children: /* @__PURE__ */ A("p", {
67
+ children: /* @__PURE__ */ j("p", {
66
68
  className: "text-text-secondary",
67
69
  children: "Loading permissions…"
68
70
  })
69
71
  });
70
- if (!d(ee.VIBE_READ)) return /* @__PURE__ */ A("div", {
72
+ if (!d(_.VIBE_READ)) return /* @__PURE__ */ j("div", {
71
73
  className: "flex items-center justify-center min-h-[400px]",
72
- children: /* @__PURE__ */ j("div", {
74
+ children: /* @__PURE__ */ M("div", {
73
75
  className: "text-center space-y-2",
74
- children: [/* @__PURE__ */ A("h2", {
76
+ children: [/* @__PURE__ */ j("h2", {
75
77
  className: "text-lg font-semibold text-foreground",
76
78
  children: "Access Denied"
77
- }), /* @__PURE__ */ A("p", {
79
+ }), /* @__PURE__ */ j("p", {
78
80
  className: "text-sm text-text-secondary",
79
81
  children: "You don't have permission to access this page."
80
82
  })]
@@ -82,9 +84,9 @@ function G() {
82
84
  });
83
85
  let $ = () => {
84
86
  s("/catalogs");
85
- }, xe = (e) => {
87
+ }, Se = (e) => {
86
88
  s(`/components/${e.id}`);
87
- }, Se = async (e) => {
89
+ }, Ce = async (e) => {
88
90
  i && (await ve({ variables: {
89
91
  id: i,
90
92
  input: {
@@ -94,146 +96,158 @@ function G() {
94
96
  ownerName: e.owner || void 0,
95
97
  tags: e.tags.length > 0 ? e.tags : void 0
96
98
  }
97
- } }), G(S("catalog.updatedSuccess", "Catalog updated successfully")), setTimeout(() => G(null), 3e3));
98
- }, Ce = async () => {
99
+ } }), K(C("catalog.updatedSuccess", "Catalog updated successfully")), setTimeout(() => K(null), 3e3));
100
+ }, we = async () => {
99
101
  if (i) {
100
- U(!0);
102
+ W(!0);
101
103
  try {
102
- await ye({ variables: { id: i } }), V(!1), s("/catalogs");
104
+ await ye({ variables: { id: i } }), H(!1), s("/catalogs");
103
105
  } finally {
104
- U(!1);
106
+ W(!1);
105
107
  }
106
108
  }
107
- }, we = [
109
+ }, Te = [
108
110
  {
109
111
  id: "overview",
110
- label: S("nav.overview", "Overview"),
111
- icon: C
112
+ label: C("nav.overview", "Overview"),
113
+ icon: w
112
114
  },
113
115
  {
114
116
  id: "components",
115
- label: S("catalog.components", "Components"),
116
- icon: w,
117
+ label: C("catalog.components", "Components"),
118
+ icon: T,
117
119
  badge: `${Z?.componentCount ?? 0}`
118
120
  },
119
121
  {
120
122
  id: "dependency-graph",
121
- label: S("catalog.dependencyGraph", "Dependency Graph"),
122
- icon: T
123
+ label: C("catalog.dependencyGraph", "Dependency Graph"),
124
+ icon: E
123
125
  },
124
126
  {
125
127
  id: "docs",
126
- label: S("catalog.docs", "Docs"),
128
+ label: C("catalog.docs", "Docs"),
127
129
  icon: se
128
130
  },
129
131
  {
130
132
  id: "settings",
131
- label: S("common.settings", "Settings"),
133
+ label: C("common.settings", "Settings"),
132
134
  icon: ce
133
135
  }
134
136
  ];
135
- return q && !Z ? /* @__PURE__ */ j(P, {
137
+ return J && !Z ? /* @__PURE__ */ M(F, {
136
138
  className: "space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen",
137
- children: [/* @__PURE__ */ j("button", {
139
+ children: [/* @__PURE__ */ M("button", {
138
140
  type: "button",
139
141
  onClick: $,
140
142
  className: "flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors",
141
- children: [/* @__PURE__ */ A(x, { className: "size-4" }), S("catalog.backToCatalogs", "Back to Catalogs")]
142
- }), /* @__PURE__ */ A(te, { variant: "detail" })]
143
- }) : J && !Z ? /* @__PURE__ */ j(P, {
143
+ children: [/* @__PURE__ */ j(S, { className: "size-4" }), C("catalog.backToCatalogs", "Back to Catalogs")]
144
+ }), /* @__PURE__ */ j(te, { variant: "detail" })]
145
+ }) : Y && !Z ? /* @__PURE__ */ M(F, {
144
146
  className: "space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen",
145
- children: [/* @__PURE__ */ j("button", {
147
+ children: [/* @__PURE__ */ M("button", {
146
148
  type: "button",
147
149
  onClick: $,
148
150
  className: "flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors",
149
- children: [/* @__PURE__ */ A(x, { className: "size-4" }), S("catalog.backToCatalogs", "Back to Catalogs")]
150
- }), /* @__PURE__ */ A(f, {
151
- title: S("catalog.failedLoad", "Failed to load catalog"),
152
- message: J.message,
153
- onRetry: () => Y()
151
+ children: [/* @__PURE__ */ j(S, { className: "size-4" }), C("catalog.backToCatalogs", "Back to Catalogs")]
152
+ }), /* @__PURE__ */ j(f, {
153
+ title: C("catalog.failedLoad", "Failed to load catalog"),
154
+ message: Y.message,
155
+ onRetry: () => X()
154
156
  })]
155
- }) : Z ? /* @__PURE__ */ j(P, {
157
+ }) : Z ? /* @__PURE__ */ M(F, {
156
158
  className: "space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen",
157
159
  children: [
158
- W && /* @__PURE__ */ A("div", {
160
+ G && /* @__PURE__ */ j("div", {
159
161
  className: "fixed top-4 left-4 right-4 sm:left-auto z-50 bg-status-success-bg text-status-success-text px-4 py-3 rounded-md shadow-lg",
160
- children: W
162
+ children: G
161
163
  }),
162
- /* @__PURE__ */ j("button", {
164
+ /* @__PURE__ */ M("button", {
163
165
  type: "button",
164
166
  onClick: $,
165
167
  className: "flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors",
166
- children: [/* @__PURE__ */ A(x, { className: "size-4" }), S("catalog.backToCatalogs", "Back to Catalogs")]
168
+ children: [/* @__PURE__ */ j(S, { className: "size-4" }), C("catalog.backToCatalogs", "Back to Catalogs")]
167
169
  }),
168
- /* @__PURE__ */ A(u, {
170
+ /* @__PURE__ */ j(u, {
169
171
  title: Z.name,
170
- description: Z.description || S("catalog.noDescription", "No description"),
171
- actions: /* @__PURE__ */ j("div", {
172
+ description: Z.description || C("catalog.noDescription", "No description"),
173
+ actions: /* @__PURE__ */ M("div", {
172
174
  className: "flex items-center gap-2 flex-wrap",
173
- children: [/* @__PURE__ */ A("button", {
174
- type: "button",
175
- onClick: () => Y(),
176
- disabled: q,
177
- className: "flex items-center justify-center p-2 bg-bg-sunken text-text-primary rounded-md hover:bg-bg-sunken/80 transition-colors disabled:opacity-50",
178
- title: S("common.refresh", "Refresh"),
179
- children: /* @__PURE__ */ A(D, { className: `size-4 ${q ? "animate-spin" : ""}` })
180
- }), /* @__PURE__ */ A("span", {
181
- className: `inline-flex items-center px-2.5 py-1 text-xs font-medium rounded ${Z.visibility === "PUBLIC" ? "bg-status-success-bg text-status-success-text" : Z.visibility === "INTERNAL" ? "bg-status-warning-bg text-status-warning-text" : "bg-bg-sunken text-text-secondary"}`,
182
- children: Z.visibility
183
- })]
175
+ children: [
176
+ /* @__PURE__ */ j(ee, {
177
+ entity: "catalog",
178
+ resource: {
179
+ id: Z.id,
180
+ name: Z.name
181
+ },
182
+ label: C("catalog.share", "Share"),
183
+ variant: "button"
184
+ }),
185
+ /* @__PURE__ */ j("button", {
186
+ type: "button",
187
+ onClick: () => X(),
188
+ disabled: J,
189
+ className: "flex items-center justify-center p-2 bg-bg-sunken text-text-primary rounded-md hover:bg-bg-sunken/80 transition-colors disabled:opacity-50",
190
+ title: C("common.refresh", "Refresh"),
191
+ children: /* @__PURE__ */ j(O, { className: `size-4 ${J ? "animate-spin" : ""}` })
192
+ }),
193
+ /* @__PURE__ */ j("span", {
194
+ className: `inline-flex items-center px-2.5 py-1 text-xs font-medium rounded ${Z.visibility === "PUBLIC" ? "bg-status-success-bg text-status-success-text" : Z.visibility === "INTERNAL" ? "bg-status-warning-bg text-status-warning-text" : "bg-bg-sunken text-text-secondary"}`,
195
+ children: Z.visibility
196
+ })
197
+ ]
184
198
  })
185
199
  }),
186
- /* @__PURE__ */ j(N, {
200
+ /* @__PURE__ */ M(P, {
187
201
  stagger: .04,
188
202
  className: "grid grid-cols-2 sm:grid-cols-3 gap-3 sm:gap-4",
189
203
  children: [
190
- /* @__PURE__ */ A(M, { children: /* @__PURE__ */ A(g, {
191
- title: S("catalog.components", "Components"),
204
+ /* @__PURE__ */ j(N, { children: /* @__PURE__ */ j(g, {
205
+ title: C("catalog.components", "Components"),
192
206
  value: Z.componentCount ?? 0,
193
- icon: /* @__PURE__ */ A(w, { className: "size-4" })
207
+ icon: /* @__PURE__ */ j(T, { className: "size-4" })
194
208
  }) }),
195
- /* @__PURE__ */ A(M, { children: /* @__PURE__ */ A(g, {
196
- title: S("catalog.vibes", "Vibes"),
209
+ /* @__PURE__ */ j(N, { children: /* @__PURE__ */ j(g, {
210
+ title: C("catalog.vibes", "Vibes"),
197
211
  value: Z.vibeCount ?? 0,
198
- icon: /* @__PURE__ */ A(de, { className: "size-4" })
212
+ icon: /* @__PURE__ */ j(de, { className: "size-4" })
199
213
  }) }),
200
- /* @__PURE__ */ A(M, { children: /* @__PURE__ */ A(g, {
201
- title: S("catalog.ownerName", "Owner"),
214
+ /* @__PURE__ */ j(N, { children: /* @__PURE__ */ j(g, {
215
+ title: C("catalog.ownerName", "Owner"),
202
216
  value: Z.ownerNameName || "Unassigned",
203
- icon: /* @__PURE__ */ A(C, { className: "size-4" })
217
+ icon: /* @__PURE__ */ j(w, { className: "size-4" })
204
218
  }) })
205
219
  ]
206
220
  }),
207
- /* @__PURE__ */ j(h, { children: [/* @__PURE__ */ j("div", {
221
+ /* @__PURE__ */ M(h, { children: [/* @__PURE__ */ M("div", {
208
222
  className: "p-4 border-b border-border-default flex items-center gap-2",
209
- children: [/* @__PURE__ */ A(le, { className: "size-5" }), /* @__PURE__ */ A("h3", {
223
+ children: [/* @__PURE__ */ j(le, { className: "size-5" }), /* @__PURE__ */ j("h3", {
210
224
  className: "font-semibold text-text-primary",
211
- children: S("catalog.tags", "Tags")
225
+ children: C("catalog.tags", "Tags")
212
226
  })]
213
- }), /* @__PURE__ */ A("div", {
227
+ }), /* @__PURE__ */ j("div", {
214
228
  className: "p-4",
215
- children: /* @__PURE__ */ A(p, {
229
+ children: /* @__PURE__ */ j(p, {
216
230
  entityType: "VIBECONTROLS_CATALOG",
217
231
  entityId: Z.id
218
232
  })
219
233
  })] }),
220
- /* @__PURE__ */ A("div", {
234
+ /* @__PURE__ */ j("div", {
221
235
  className: "border-b border-border-default",
222
- children: /* @__PURE__ */ A("nav", {
236
+ children: /* @__PURE__ */ j("nav", {
223
237
  className: "flex gap-1 -mb-px overflow-x-auto pb-1",
224
- "aria-label": S("catalog.tabsAriaLabel", "Catalog tabs"),
225
- children: we.map((e) => {
226
- let t = e.icon, n = k === e.id;
227
- return /* @__PURE__ */ j("button", {
238
+ "aria-label": C("catalog.tabsAriaLabel", "Catalog tabs"),
239
+ children: Te.map((e) => {
240
+ let t = e.icon, n = A === e.id;
241
+ return /* @__PURE__ */ M("button", {
228
242
  type: "button",
229
- onClick: () => F(e.id),
243
+ onClick: () => I(e.id),
230
244
  className: `flex shrink-0 items-center gap-1.5 px-3 py-2.5 text-xs sm:gap-2 sm:px-4 sm:text-sm font-medium border-b-2 transition-colors whitespace-nowrap ${n ? "border-action-primary-bg text-action-primary-text" : "border-transparent text-text-secondary hover:text-text-primary hover:border-border-default"}`,
231
245
  "aria-selected": n,
232
246
  role: "tab",
233
247
  children: [
234
- /* @__PURE__ */ A(t, { className: "size-4" }),
248
+ /* @__PURE__ */ j(t, { className: "size-4" }),
235
249
  e.label,
236
- e.badge && /* @__PURE__ */ A("span", {
250
+ e.badge && /* @__PURE__ */ j("span", {
237
251
  className: `hidden rounded-full px-1.5 py-0.5 text-[10px] sm:inline-flex sm:text-xs ${n ? "bg-action-primary-bg/10 text-action-primary-bg" : "bg-bg-sunken text-text-muted"}`,
238
252
  children: e.badge
239
253
  })
@@ -242,10 +256,10 @@ function G() {
242
256
  })
243
257
  })
244
258
  }),
245
- /* @__PURE__ */ j(me, {
259
+ /* @__PURE__ */ M(me, {
246
260
  mode: "wait",
247
261
  children: [
248
- k === "overview" && /* @__PURE__ */ j(O.div, {
262
+ A === "overview" && /* @__PURE__ */ M(k.div, {
249
263
  initial: {
250
264
  opacity: 0,
251
265
  y: 8
@@ -261,63 +275,63 @@ function G() {
261
275
  transition: { duration: .2 },
262
276
  className: "space-y-6",
263
277
  children: [
264
- Z.description && /* @__PURE__ */ A(h, { children: /* @__PURE__ */ A("div", {
278
+ Z.description && /* @__PURE__ */ j(h, { children: /* @__PURE__ */ j("div", {
265
279
  className: "p-4",
266
- children: /* @__PURE__ */ A("p", {
280
+ children: /* @__PURE__ */ j("p", {
267
281
  className: "text-text-primary",
268
282
  children: Z.description
269
283
  })
270
284
  }) }),
271
- /* @__PURE__ */ j(h, { children: [/* @__PURE__ */ A("div", {
285
+ /* @__PURE__ */ M(h, { children: [/* @__PURE__ */ j("div", {
272
286
  className: "p-4 border-b border-border-default",
273
- children: /* @__PURE__ */ A("h3", {
287
+ children: /* @__PURE__ */ j("h3", {
274
288
  className: "font-semibold text-text-primary",
275
- children: S("catalog.metadata", "Metadata")
289
+ children: C("catalog.metadata", "Metadata")
276
290
  })
277
- }), /* @__PURE__ */ A("div", {
291
+ }), /* @__PURE__ */ j("div", {
278
292
  className: "p-4",
279
- children: /* @__PURE__ */ j("div", {
293
+ children: /* @__PURE__ */ M("div", {
280
294
  className: "grid grid-cols-1 sm:grid-cols-2 gap-4 text-sm",
281
295
  children: [
282
- /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ A("p", {
296
+ /* @__PURE__ */ M("div", { children: [/* @__PURE__ */ j("p", {
283
297
  className: "text-text-secondary",
284
- children: S("catalog.ownerNameLabel", "Owner")
285
- }), /* @__PURE__ */ A("p", {
298
+ children: C("catalog.ownerNameLabel", "Owner")
299
+ }), /* @__PURE__ */ j("p", {
286
300
  className: "font-medium text-text-primary",
287
- children: Z.ownerName || S("common.unset", "Unset")
301
+ children: Z.ownerName || C("common.unset", "Unset")
288
302
  })] }),
289
- /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ A("p", {
303
+ /* @__PURE__ */ M("div", { children: [/* @__PURE__ */ j("p", {
290
304
  className: "text-text-secondary",
291
- children: S("catalog.visibility", "Visibility")
292
- }), /* @__PURE__ */ A("p", {
305
+ children: C("catalog.visibility", "Visibility")
306
+ }), /* @__PURE__ */ j("p", {
293
307
  className: "font-medium text-text-primary",
294
308
  children: Z.visibility
295
309
  })] }),
296
- /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ A("p", {
310
+ /* @__PURE__ */ M("div", { children: [/* @__PURE__ */ j("p", {
297
311
  className: "text-text-secondary",
298
- children: S("common.created", "Created")
299
- }), /* @__PURE__ */ A("p", {
312
+ children: C("common.created", "Created")
313
+ }), /* @__PURE__ */ j("p", {
300
314
  className: "font-medium text-text-primary",
301
315
  children: new Date(Z.createdAt).toLocaleDateString()
302
316
  })] }),
303
- /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ A("p", {
317
+ /* @__PURE__ */ M("div", { children: [/* @__PURE__ */ j("p", {
304
318
  className: "text-text-secondary",
305
- children: S("common.updated", "Updated")
306
- }), /* @__PURE__ */ A("p", {
319
+ children: C("common.updated", "Updated")
320
+ }), /* @__PURE__ */ j("p", {
307
321
  className: "font-medium text-text-primary",
308
322
  children: new Date(Z.updatedAt).toLocaleDateString()
309
323
  })] })
310
324
  ]
311
325
  })
312
326
  })] }),
313
- Z.tags?.length > 0 && /* @__PURE__ */ A(h, { children: /* @__PURE__ */ j("div", {
327
+ Z.tags?.length > 0 && /* @__PURE__ */ j(h, { children: /* @__PURE__ */ M("div", {
314
328
  className: "p-4",
315
- children: [/* @__PURE__ */ A("h3", {
329
+ children: [/* @__PURE__ */ j("h3", {
316
330
  className: "font-semibold text-text-primary mb-3",
317
- children: S("catalog.tags", "Tags")
318
- }), /* @__PURE__ */ A("div", {
331
+ children: C("catalog.tags", "Tags")
332
+ }), /* @__PURE__ */ j("div", {
319
333
  className: "flex flex-wrap gap-2",
320
- children: Z.tags.map((e) => /* @__PURE__ */ A("span", {
334
+ children: Z.tags.map((e) => /* @__PURE__ */ j("span", {
321
335
  className: "px-2.5 py-1 text-sm bg-bg-sunken text-text-secondary rounded-md",
322
336
  children: e
323
337
  }, e))
@@ -325,7 +339,7 @@ function G() {
325
339
  }) })
326
340
  ]
327
341
  }, "overview"),
328
- k === "components" && /* @__PURE__ */ j(O.div, {
342
+ A === "components" && /* @__PURE__ */ M(k.div, {
329
343
  initial: {
330
344
  opacity: 0,
331
345
  y: 8
@@ -340,39 +354,39 @@ function G() {
340
354
  },
341
355
  transition: { duration: .2 },
342
356
  className: "space-y-4",
343
- children: [/* @__PURE__ */ j("div", {
357
+ children: [/* @__PURE__ */ M("div", {
344
358
  className: "flex items-center justify-between",
345
- children: [/* @__PURE__ */ j("p", {
359
+ children: [/* @__PURE__ */ M("p", {
346
360
  className: "text-sm text-text-secondary",
347
361
  children: [
348
362
  Q.length,
349
363
  " ",
350
- S("catalog.componentsInCatalog", "components in this catalog")
364
+ C("catalog.componentsInCatalog", "components in this catalog")
351
365
  ]
352
- }), /* @__PURE__ */ j("button", {
366
+ }), /* @__PURE__ */ M("button", {
353
367
  type: "button",
354
- onClick: () => z(!0),
368
+ onClick: () => B(!0),
355
369
  className: "flex items-center gap-2 px-3 py-2 text-sm bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors",
356
- children: [/* @__PURE__ */ A(E, { className: "size-4" }), S("catalog.addComponent", "Add Component")]
370
+ children: [/* @__PURE__ */ j(D, { className: "size-4" }), C("catalog.addComponent", "Add Component")]
357
371
  })]
358
- }), Q.length > 0 ? /* @__PURE__ */ A(N, {
372
+ }), Q.length > 0 ? /* @__PURE__ */ j(P, {
359
373
  stagger: .04,
360
374
  className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",
361
- children: Q.map((e) => /* @__PURE__ */ A(M, { children: /* @__PURE__ */ A(ie, {
375
+ children: Q.map((e) => /* @__PURE__ */ j(N, { children: /* @__PURE__ */ j(ie, {
362
376
  component: e,
363
- onOpen: xe
377
+ onOpen: Se
364
378
  }) }, e.id))
365
- }) : /* @__PURE__ */ A(m, {
366
- icon: /* @__PURE__ */ A(w, { className: "size-8 text-text-secondary" }),
367
- title: S("catalog.noComponents", "No components"),
368
- description: S("catalog.noComponentsDescription", "Add components to this catalog to track them")
379
+ }) : /* @__PURE__ */ j(m, {
380
+ icon: /* @__PURE__ */ j(T, { className: "size-8 text-text-secondary" }),
381
+ title: C("catalog.noComponents", "No components"),
382
+ description: C("catalog.noComponentsDescription", "Add components to this catalog to track them")
369
383
  })]
370
384
  }, "components"),
371
- k === "dependency-graph" && /* @__PURE__ */ A(ge, {
385
+ A === "dependency-graph" && /* @__PURE__ */ j(ge, {
372
386
  catalogId: i || "",
373
- tr: S
387
+ tr: C
374
388
  }),
375
- k === "docs" && /* @__PURE__ */ A(O.div, {
389
+ A === "docs" && /* @__PURE__ */ j(k.div, {
376
390
  initial: {
377
391
  opacity: 0,
378
392
  y: 8
@@ -387,12 +401,12 @@ function G() {
387
401
  },
388
402
  transition: { duration: .2 },
389
403
  className: "space-y-6",
390
- children: /* @__PURE__ */ A(re, {
404
+ children: /* @__PURE__ */ j(re, {
391
405
  ownerType: "CATALOG",
392
406
  ownerId: i || ""
393
407
  })
394
408
  }, "docs"),
395
- k === "settings" && /* @__PURE__ */ A(O.div, {
409
+ A === "settings" && /* @__PURE__ */ j(k.div, {
396
410
  initial: {
397
411
  opacity: 0,
398
412
  y: 8
@@ -406,39 +420,39 @@ function G() {
406
420
  y: -8
407
421
  },
408
422
  transition: { duration: .2 },
409
- children: /* @__PURE__ */ j("div", {
423
+ children: /* @__PURE__ */ M("div", {
410
424
  className: "space-y-4",
411
- children: [/* @__PURE__ */ j(h, {
425
+ children: [/* @__PURE__ */ M(h, {
412
426
  padding: "lg",
413
- children: [/* @__PURE__ */ A("h3", {
427
+ children: [/* @__PURE__ */ j("h3", {
414
428
  className: "font-semibold text-text-primary mb-4",
415
- children: S("catalog.editCatalog", "Edit Catalog")
416
- }), /* @__PURE__ */ A("button", {
429
+ children: C("catalog.editCatalog", "Edit Catalog")
430
+ }), /* @__PURE__ */ j("button", {
417
431
  type: "button",
418
- onClick: () => L(!0),
432
+ onClick: () => R(!0),
419
433
  className: "px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors",
420
- children: S("catalog.editDetails", "Edit Details")
434
+ children: C("catalog.editDetails", "Edit Details")
421
435
  })]
422
- }), /* @__PURE__ */ j(h, {
436
+ }), /* @__PURE__ */ M(h, {
423
437
  padding: "lg",
424
438
  children: [
425
- /* @__PURE__ */ A("h3", {
439
+ /* @__PURE__ */ j("h3", {
426
440
  className: "font-semibold text-status-error-text mb-2",
427
- children: S("catalog.dangerZone", "Danger Zone")
441
+ children: C("catalog.dangerZone", "Danger Zone")
428
442
  }),
429
- /* @__PURE__ */ A("p", {
443
+ /* @__PURE__ */ j("p", {
430
444
  className: "text-sm text-text-secondary mb-4",
431
- children: S("catalog.deleteWarning", "Deleting this catalog will detach all components and vibes. This cannot be undone.")
445
+ children: C("catalog.deleteWarning", "Deleting this catalog will detach all components and vibes. This cannot be undone.")
432
446
  }),
433
- /* @__PURE__ */ j("button", {
447
+ /* @__PURE__ */ M("button", {
434
448
  type: "button",
435
449
  "data-testid": "catalog-delete-button",
436
- onClick: () => V(!0),
450
+ onClick: () => H(!0),
437
451
  className: "inline-flex items-center gap-2 px-4 py-2 bg-status-error-bg text-status-error-text rounded-md hover:opacity-90 transition-opacity",
438
- children: [/* @__PURE__ */ A(ue, {
452
+ children: [/* @__PURE__ */ j(ue, {
439
453
  className: "size-4",
440
454
  "aria-hidden": "true"
441
- }), S("catalog.deleteCatalog", "Delete Catalog")]
455
+ }), C("catalog.deleteCatalog", "Delete Catalog")]
442
456
  })
443
457
  ]
444
458
  })]
@@ -446,10 +460,10 @@ function G() {
446
460
  }, "settings")
447
461
  ]
448
462
  }),
449
- /* @__PURE__ */ A(ae, {
450
- isOpen: I,
451
- onClose: () => L(!1),
452
- onSubmit: Se,
463
+ /* @__PURE__ */ j(ae, {
464
+ isOpen: L,
465
+ onClose: () => R(!1),
466
+ onSubmit: Ce,
453
467
  initialData: {
454
468
  name: Z.name,
455
469
  description: Z.description || "",
@@ -457,66 +471,66 @@ function G() {
457
471
  owner: Z.ownerName || "",
458
472
  tags: Z.tags || []
459
473
  },
460
- title: S("catalog.editCatalog", "Edit Catalog")
474
+ title: C("catalog.editCatalog", "Edit Catalog")
461
475
  }),
462
- R && /* @__PURE__ */ A(_e, {
476
+ z && /* @__PURE__ */ j(_e, {
463
477
  catalogId: i || "",
464
478
  existingComponentIds: Q.map((e) => e.id),
465
479
  onAdd: async (e) => {
466
- await X({ variables: {
480
+ await be({ variables: {
467
481
  catalogId: i,
468
482
  componentId: e
469
- } }), G(S("catalog.componentAdded", "Component added to catalog")), setTimeout(() => G(null), 3e3), z(!1);
483
+ } }), K(C("catalog.componentAdded", "Component added to catalog")), setTimeout(() => K(null), 3e3), B(!1);
470
484
  },
471
- onClose: () => z(!1),
472
- tr: S
485
+ onClose: () => B(!1),
486
+ tr: C
473
487
  }),
474
- /* @__PURE__ */ A(c, {
475
- isOpen: B,
476
- onClose: () => V(!1),
477
- onConfirm: Ce,
478
- title: S("catalog.deleteCatalog", "Delete Catalog"),
479
- message: S("catalog.deleteConfirmMessage", `Are you sure you want to delete "${Z.name}"? This action cannot be undone.`),
480
- confirmLabel: S("common.delete", "Delete"),
488
+ /* @__PURE__ */ j(c, {
489
+ isOpen: V,
490
+ onClose: () => H(!1),
491
+ onConfirm: we,
492
+ title: C("catalog.deleteCatalog", "Delete Catalog"),
493
+ message: C("catalog.deleteConfirmMessage", `Are you sure you want to delete "${Z.name}"? This action cannot be undone.`),
494
+ confirmLabel: C("common.delete", "Delete"),
481
495
  variant: "danger",
482
- isLoading: H
496
+ isLoading: U
483
497
  })
484
498
  ]
485
- }) : /* @__PURE__ */ j(P, {
499
+ }) : /* @__PURE__ */ M(F, {
486
500
  className: "space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen",
487
- children: [/* @__PURE__ */ j("button", {
501
+ children: [/* @__PURE__ */ M("button", {
488
502
  type: "button",
489
503
  onClick: $,
490
504
  className: "flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors",
491
- children: [/* @__PURE__ */ A(x, { className: "size-4" }), S("catalog.backToCatalogs", "Back to Catalogs")]
492
- }), /* @__PURE__ */ A(m, {
493
- icon: /* @__PURE__ */ A(C, { className: "size-8 text-text-secondary" }),
494
- title: S("catalog.notFound", "Catalog not found"),
505
+ children: [/* @__PURE__ */ j(S, { className: "size-4" }), C("catalog.backToCatalogs", "Back to Catalogs")]
506
+ }), /* @__PURE__ */ j(m, {
507
+ icon: /* @__PURE__ */ j(w, { className: "size-8 text-text-secondary" }),
508
+ title: C("catalog.notFound", "Catalog not found"),
495
509
  description: `No catalog with ID "${i}" exists`,
496
- action: /* @__PURE__ */ A("button", {
510
+ action: /* @__PURE__ */ j("button", {
497
511
  type: "button",
498
512
  onClick: $,
499
513
  className: "px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors",
500
- children: S("catalog.backToCatalogs", "Back to Catalogs")
514
+ children: C("catalog.backToCatalogs", "Back to Catalogs")
501
515
  })
502
516
  })]
503
517
  });
504
518
  }
505
- function K({ data: e }) {
506
- return /* @__PURE__ */ j(k, { children: [
507
- /* @__PURE__ */ A(R, {
519
+ function q({ data: e }) {
520
+ return /* @__PURE__ */ M(A, { children: [
521
+ /* @__PURE__ */ j(z, {
508
522
  type: "target",
509
- position: B.Left,
523
+ position: V.Left,
510
524
  style: {
511
525
  width: 8,
512
526
  height: 8,
513
527
  background: "var(--color-border-strong)"
514
528
  }
515
529
  }),
516
- /* @__PURE__ */ A("div", { children: e.label }),
517
- /* @__PURE__ */ A(R, {
530
+ /* @__PURE__ */ j("div", { children: e.label }),
531
+ /* @__PURE__ */ j(z, {
518
532
  type: "source",
519
- position: B.Right,
533
+ position: V.Right,
520
534
  style: {
521
535
  width: 8,
522
536
  height: 8,
@@ -525,8 +539,8 @@ function K({ data: e }) {
525
539
  })
526
540
  ] });
527
541
  }
528
- var q = { catalog: K };
529
- function J(e, t) {
542
+ var J = { catalog: q };
543
+ function Y(e, t) {
530
544
  let n = Math.max(1, Math.ceil(Math.sqrt(e.length))), r = new Map(e.map((e) => [e.name, e.id])), i = t.filter((e) => r.has(e.target));
531
545
  return {
532
546
  nodes: e.map((e, t) => {
@@ -538,13 +552,13 @@ function J(e, t) {
538
552
  x: r * 220 + 40,
539
553
  y: a * 120 + 40
540
554
  },
541
- data: { label: /* @__PURE__ */ j("div", {
555
+ data: { label: /* @__PURE__ */ M("div", {
542
556
  style: {
543
557
  lineHeight: 1.4,
544
558
  textAlign: "center"
545
559
  },
546
560
  children: [
547
- /* @__PURE__ */ A("div", {
561
+ /* @__PURE__ */ j("div", {
548
562
  style: {
549
563
  fontWeight: 700,
550
564
  fontSize: 12,
@@ -555,7 +569,7 @@ function J(e, t) {
555
569
  },
556
570
  children: e.name
557
571
  }),
558
- /* @__PURE__ */ j("div", {
572
+ /* @__PURE__ */ M("div", {
559
573
  style: {
560
574
  fontSize: 10,
561
575
  color: o > 0 ? "rgba(255,255,255,0.75)" : "var(--color-text-muted)",
@@ -563,7 +577,7 @@ function J(e, t) {
563
577
  },
564
578
  children: [e.type, e.version ? ` v${e.version}` : ""]
565
579
  }),
566
- o > 0 && /* @__PURE__ */ j("div", {
580
+ o > 0 && /* @__PURE__ */ M("div", {
567
581
  style: {
568
582
  fontSize: 10,
569
583
  marginTop: 3,
@@ -597,7 +611,7 @@ function J(e, t) {
597
611
  target: r.get(e.target),
598
612
  label: e.version || void 0,
599
613
  animated: e.dependencyType !== "dev",
600
- markerEnd: { type: z.ArrowClosed },
614
+ markerEnd: { type: B.ArrowClosed },
601
615
  style: {
602
616
  stroke: "var(--color-border-strong)",
603
617
  strokeWidth: 1.5,
@@ -614,10 +628,10 @@ function J(e, t) {
614
628
  }))
615
629
  };
616
630
  }
617
- function Y({ graphNodes: e, graphEdges: t, onComponentClick: n, onConnect: r }) {
618
- let { nodes: i, edges: a } = y(() => J(e, t), [e, t]), [o, s, c] = W(i), [l, u, d] = U(a);
619
- v(() => {
620
- let { nodes: n, edges: r } = J(e, t);
631
+ function X({ graphNodes: e, graphEdges: t, onComponentClick: n, onConnect: r }) {
632
+ let { nodes: i, edges: a } = b(() => Y(e, t), [e, t]), [o, s, c] = G(i), [l, u, d] = W(a);
633
+ y(() => {
634
+ let { nodes: n, edges: r } = Y(e, t);
621
635
  s(n), u(r);
622
636
  }, [
623
637
  e,
@@ -625,33 +639,33 @@ function Y({ graphNodes: e, graphEdges: t, onComponentClick: n, onConnect: r })
625
639
  s,
626
640
  u
627
641
  ]);
628
- let f = Math.ceil(e.length / Math.max(1, Math.ceil(Math.sqrt(e.length)))), p = Math.max(380, Math.min(f * 140 + 120, 600)), m = _((e, t) => {
642
+ let f = Math.ceil(e.length / Math.max(1, Math.ceil(Math.sqrt(e.length)))), p = Math.max(380, Math.min(f * 140 + 120, 600)), m = v((e, t) => {
629
643
  n?.(t.id);
630
- }, [n]), h = _((e) => {
631
- !e.source || !e.target || (u((t) => H({
644
+ }, [n]), h = v((e) => {
645
+ !e.source || !e.target || (u((t) => U({
632
646
  ...e,
633
647
  animated: !0,
634
- markerEnd: { type: z.ArrowClosed },
648
+ markerEnd: { type: B.ArrowClosed },
635
649
  style: {
636
650
  stroke: "var(--color-border-strong)",
637
651
  strokeWidth: 1.5
638
652
  }
639
653
  }, t)), r?.(e.source, e.target));
640
654
  }, [r, u]);
641
- return /* @__PURE__ */ A("div", {
655
+ return /* @__PURE__ */ j("div", {
642
656
  className: "w-full rounded-lg border border-border-default overflow-hidden",
643
657
  style: {
644
658
  height: p,
645
659
  background: "var(--color-bg-secondary)"
646
660
  },
647
- children: /* @__PURE__ */ j(V, {
661
+ children: /* @__PURE__ */ M(H, {
648
662
  nodes: o,
649
663
  edges: l,
650
664
  onNodesChange: c,
651
665
  onEdgesChange: d,
652
666
  onNodeClick: m,
653
667
  onConnect: h,
654
- nodeTypes: q,
668
+ nodeTypes: J,
655
669
  fitView: !0,
656
670
  fitViewOptions: { padding: .25 },
657
671
  minZoom: .15,
@@ -660,12 +674,12 @@ function Y({ graphNodes: e, graphEdges: t, onComponentClick: n, onConnect: r })
660
674
  panOnScroll: !1,
661
675
  zoomOnScroll: !0,
662
676
  proOptions: { hideAttribution: !0 },
663
- children: [/* @__PURE__ */ A(F, {
664
- variant: I.Dots,
677
+ children: [/* @__PURE__ */ j(I, {
678
+ variant: L.Dots,
665
679
  gap: 20,
666
680
  size: 1,
667
681
  className: "!fill-text-tertiary/10"
668
- }), /* @__PURE__ */ A(L, {
682
+ }), /* @__PURE__ */ j(R, {
669
683
  showInteractive: !1,
670
684
  style: {
671
685
  background: "var(--color-bg-primary)",
@@ -682,7 +696,7 @@ function ge({ catalogId: e, tr: t }) {
682
696
  variables: { catalogId: e },
683
697
  skip: !e,
684
698
  fetchPolicy: "cache-and-network"
685
- }), [u] = s(), p = i?.vibecontrolsCatalogDependencyGraph, g = _(async (e, t) => {
699
+ }), [u] = s(), p = i?.vibecontrolsCatalogDependencyGraph, g = v(async (e, t) => {
686
700
  if (!p) return;
687
701
  let n = p.nodes.find((e) => e.id === t);
688
702
  if (!n) return;
@@ -710,7 +724,7 @@ function ge({ catalogId: e, tr: t }) {
710
724
  u,
711
725
  c
712
726
  ]);
713
- return /* @__PURE__ */ j(O.div, {
727
+ return /* @__PURE__ */ M(k.div, {
714
728
  initial: {
715
729
  opacity: 0,
716
730
  y: 8
@@ -726,89 +740,89 @@ function ge({ catalogId: e, tr: t }) {
726
740
  transition: { duration: .2 },
727
741
  className: "space-y-4",
728
742
  children: [
729
- /* @__PURE__ */ j("div", {
743
+ /* @__PURE__ */ M("div", {
730
744
  className: "flex items-center justify-between",
731
- children: [/* @__PURE__ */ j("h3", {
745
+ children: [/* @__PURE__ */ M("h3", {
732
746
  className: "font-semibold text-text-primary flex items-center gap-2",
733
- children: [/* @__PURE__ */ A(T, { className: "size-5" }), t("catalog.dependencyGraph", "Dependency Graph")]
734
- }), /* @__PURE__ */ A("button", {
747
+ children: [/* @__PURE__ */ j(E, { className: "size-5" }), t("catalog.dependencyGraph", "Dependency Graph")]
748
+ }), /* @__PURE__ */ j("button", {
735
749
  type: "button",
736
750
  onClick: () => c(),
737
751
  disabled: a,
738
752
  className: "p-2 text-text-secondary hover:bg-bg-sunken rounded-md transition-colors disabled:opacity-50",
739
753
  title: t("common.refresh", "Refresh"),
740
- children: /* @__PURE__ */ A(D, { className: `size-4 ${a ? "animate-spin" : ""}` })
754
+ children: /* @__PURE__ */ j(O, { className: `size-4 ${a ? "animate-spin" : ""}` })
741
755
  })]
742
756
  }),
743
- a && !p && /* @__PURE__ */ A(d, { message: t("catalog.loadingGraph", "Loading dependency graph...") }),
744
- o && !p && /* @__PURE__ */ A(f, {
757
+ a && !p && /* @__PURE__ */ j(d, { message: t("catalog.loadingGraph", "Loading dependency graph...") }),
758
+ o && !p && /* @__PURE__ */ j(f, {
745
759
  title: t("catalog.graphError", "Failed to load graph"),
746
760
  message: o.message,
747
761
  onRetry: () => c()
748
762
  }),
749
- p && p.nodes.length === 0 && /* @__PURE__ */ A(m, {
750
- icon: /* @__PURE__ */ A(T, { className: "size-8 text-text-secondary" }),
763
+ p && p.nodes.length === 0 && /* @__PURE__ */ j(m, {
764
+ icon: /* @__PURE__ */ j(E, { className: "size-8 text-text-secondary" }),
751
765
  title: t("catalog.noGraphNodes", "No components in catalog"),
752
766
  description: t("catalog.noGraphNodesDesc", "Add components to this catalog to visualize the dependency graph")
753
767
  }),
754
- p && p.nodes.length > 0 && /* @__PURE__ */ j(k, { children: [
755
- /* @__PURE__ */ j("div", {
768
+ p && p.nodes.length > 0 && /* @__PURE__ */ M(A, { children: [
769
+ /* @__PURE__ */ M("div", {
756
770
  className: "grid grid-cols-2 gap-4",
757
- children: [/* @__PURE__ */ j(h, {
771
+ children: [/* @__PURE__ */ M(h, {
758
772
  padding: "md",
759
- children: [/* @__PURE__ */ A("p", {
773
+ children: [/* @__PURE__ */ j("p", {
760
774
  className: "text-sm text-text-secondary",
761
775
  children: t("catalog.graphNodes", "Components")
762
- }), /* @__PURE__ */ A("p", {
776
+ }), /* @__PURE__ */ j("p", {
763
777
  className: "text-2xl font-bold text-text-primary",
764
778
  children: p.nodes.length
765
779
  })]
766
- }), /* @__PURE__ */ j(h, {
780
+ }), /* @__PURE__ */ M(h, {
767
781
  padding: "md",
768
- children: [/* @__PURE__ */ A("p", {
782
+ children: [/* @__PURE__ */ j("p", {
769
783
  className: "text-sm text-text-secondary",
770
784
  children: t("catalog.graphEdges", "Dependencies")
771
- }), /* @__PURE__ */ A("p", {
785
+ }), /* @__PURE__ */ j("p", {
772
786
  className: "text-2xl font-bold text-text-primary",
773
787
  children: p.edges.length
774
788
  })]
775
789
  })]
776
790
  }),
777
- /* @__PURE__ */ A(Y, {
791
+ /* @__PURE__ */ j(X, {
778
792
  graphNodes: p.nodes,
779
793
  graphEdges: p.edges,
780
794
  onComponentClick: (e) => r(`/components/${e}`),
781
795
  onConnect: g
782
796
  }),
783
- p.edges.length === 0 && /* @__PURE__ */ A("p", {
797
+ p.edges.length === 0 && /* @__PURE__ */ j("p", {
784
798
  className: "text-xs text-text-muted text-center",
785
799
  children: "No inter-component dependencies yet. Drag from a node's right handle to another node to create a dependency."
786
800
  }),
787
- p.edges.length > 0 && /* @__PURE__ */ j(h, { children: [/* @__PURE__ */ A("div", {
801
+ p.edges.length > 0 && /* @__PURE__ */ M(h, { children: [/* @__PURE__ */ j("div", {
788
802
  className: "p-4 border-b border-border-default",
789
- children: /* @__PURE__ */ A("h4", {
803
+ children: /* @__PURE__ */ j("h4", {
790
804
  className: "font-medium text-text-primary",
791
805
  children: t("catalog.graphEdgesList", "Dependency Edges")
792
806
  })
793
- }), /* @__PURE__ */ A("div", {
807
+ }), /* @__PURE__ */ j("div", {
794
808
  className: "divide-y divide-border-default",
795
- children: p.edges.map((e, t) => /* @__PURE__ */ j("div", {
809
+ children: p.edges.map((e, t) => /* @__PURE__ */ M("div", {
796
810
  className: "p-3 flex items-center gap-3 text-sm",
797
811
  children: [
798
- /* @__PURE__ */ A("span", {
812
+ /* @__PURE__ */ j("span", {
799
813
  className: "font-medium text-text-primary truncate max-w-[120px]",
800
814
  children: p.nodes.find((t) => t.id === e.source)?.name || e.source
801
815
  }),
802
- /* @__PURE__ */ A(S, { className: "size-4 text-text-muted flex-shrink-0" }),
803
- /* @__PURE__ */ A("span", {
816
+ /* @__PURE__ */ j(C, { className: "size-4 text-text-muted flex-shrink-0" }),
817
+ /* @__PURE__ */ j("span", {
804
818
  className: "text-text-primary truncate max-w-[120px]",
805
819
  children: p.nodes.find((t) => t.id === e.target)?.name || e.target
806
820
  }),
807
- e.version && /* @__PURE__ */ A("span", {
821
+ e.version && /* @__PURE__ */ j("span", {
808
822
  className: "text-xs text-text-muted ml-auto",
809
823
  children: e.version
810
824
  }),
811
- e.dependencyType && /* @__PURE__ */ A("span", {
825
+ e.dependencyType && /* @__PURE__ */ j("span", {
812
826
  className: "text-xs bg-bg-sunken text-text-secondary px-1.5 py-0.5 rounded",
813
827
  children: e.dependencyType
814
828
  })
@@ -820,7 +834,7 @@ function ge({ catalogId: e, tr: t }) {
820
834
  }, "dependency-graph");
821
835
  }
822
836
  function _e({ catalogId: e, existingComponentIds: t, onAdd: n, onClose: r, tr: a }) {
823
- let [o, s] = b(!1), [c, l] = b(""), { data: u, loading: f } = i({ fetchPolicy: "cache-and-network" }), p = y(() => {
837
+ let [o, s] = x(!1), [c, l] = x(""), { data: u, loading: f } = i({ fetchPolicy: "cache-and-network" }), p = b(() => {
824
838
  let e = (u?.vibecontrolsComponents?.items ?? []).filter((e) => !t.includes(e.id));
825
839
  if (!c) return e;
826
840
  let n = c.toLowerCase();
@@ -837,9 +851,9 @@ function _e({ catalogId: e, existingComponentIds: t, onAdd: n, onClose: r, tr: a
837
851
  s(!1);
838
852
  }
839
853
  };
840
- return /* @__PURE__ */ A("div", {
854
+ return /* @__PURE__ */ j("div", {
841
855
  className: "fixed inset-0 bg-bg-overlay flex items-center justify-center z-50 p-4",
842
- children: /* @__PURE__ */ j(O.div, {
856
+ children: /* @__PURE__ */ M(k.div, {
843
857
  initial: {
844
858
  opacity: 0,
845
859
  scale: .95
@@ -850,14 +864,14 @@ function _e({ catalogId: e, existingComponentIds: t, onAdd: n, onClose: r, tr: a
850
864
  },
851
865
  className: "bg-bg-surface rounded-lg w-full max-w-md max-h-[70vh] flex flex-col",
852
866
  children: [
853
- /* @__PURE__ */ j("div", {
867
+ /* @__PURE__ */ M("div", {
854
868
  className: "p-4 border-b border-border-default",
855
- children: [/* @__PURE__ */ A("h2", {
869
+ children: [/* @__PURE__ */ j("h2", {
856
870
  className: "text-lg font-semibold text-text-primary",
857
871
  children: a("catalog.addComponentTitle", "Add Component to Catalog")
858
- }), /* @__PURE__ */ A("div", {
872
+ }), /* @__PURE__ */ j("div", {
859
873
  className: "mt-3",
860
- children: /* @__PURE__ */ A("input", {
874
+ children: /* @__PURE__ */ j("input", {
861
875
  "aria-label": "control",
862
876
  type: "text",
863
877
  value: c,
@@ -867,36 +881,36 @@ function _e({ catalogId: e, existingComponentIds: t, onAdd: n, onClose: r, tr: a
867
881
  })
868
882
  })]
869
883
  }),
870
- /* @__PURE__ */ j("div", {
884
+ /* @__PURE__ */ M("div", {
871
885
  className: "flex-1 overflow-y-auto p-2",
872
886
  children: [
873
- f && /* @__PURE__ */ A(d, { message: a("common.loading", "Loading...") }),
874
- !f && p.length === 0 && /* @__PURE__ */ A("div", {
887
+ f && /* @__PURE__ */ j(d, { message: a("common.loading", "Loading...") }),
888
+ !f && p.length === 0 && /* @__PURE__ */ j("div", {
875
889
  className: "p-4 text-center text-text-secondary text-sm",
876
890
  children: a("catalog.noAvailableComponents", "No available components to add")
877
891
  }),
878
- p.map((e) => /* @__PURE__ */ j("button", {
892
+ p.map((e) => /* @__PURE__ */ M("button", {
879
893
  type: "button",
880
894
  onClick: () => m(e.id),
881
895
  disabled: o,
882
896
  className: "w-full flex items-center justify-between p-3 rounded-md hover:bg-bg-sunken transition-colors disabled:opacity-50 text-left",
883
- children: [/* @__PURE__ */ j("div", { children: [/* @__PURE__ */ A("p", {
897
+ children: [/* @__PURE__ */ M("div", { children: [/* @__PURE__ */ j("p", {
884
898
  className: "font-medium text-text-primary text-sm",
885
899
  children: e.name
886
- }), /* @__PURE__ */ j("p", {
900
+ }), /* @__PURE__ */ M("p", {
887
901
  className: "text-xs text-text-secondary",
888
902
  children: [
889
903
  e.type,
890
904
  " · ",
891
905
  e.lifecycle
892
906
  ]
893
- })] }), /* @__PURE__ */ A(E, { className: "size-4 text-text-secondary" })]
907
+ })] }), /* @__PURE__ */ j(D, { className: "size-4 text-text-secondary" })]
894
908
  }, e.id))
895
909
  ]
896
910
  }),
897
- /* @__PURE__ */ A("div", {
911
+ /* @__PURE__ */ j("div", {
898
912
  className: "p-4 border-t border-border-default",
899
- children: /* @__PURE__ */ A("button", {
913
+ children: /* @__PURE__ */ j("button", {
900
914
  type: "button",
901
915
  onClick: r,
902
916
  className: "w-full px-4 py-2 text-text-primary hover:bg-bg-sunken rounded-md transition-colors",
@@ -908,6 +922,6 @@ function _e({ catalogId: e, existingComponentIds: t, onAdd: n, onClose: r, tr: a
908
922
  });
909
923
  }
910
924
  //#endregion
911
- export { G as CatalogDetailPage };
925
+ export { K as CatalogDetailPage };
912
926
 
913
927
  //# sourceMappingURL=CatalogDetailPage.js.map