@eventcatalog/visualiser 3.20.0 → 3.20.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.
package/dist/index.d.mts CHANGED
@@ -164,7 +164,7 @@ interface BaseNodeData {
164
164
  /**
165
165
  * Node types supported by the visualizer
166
166
  */
167
- type NodeType = "service" | "services" | "event" | "events" | "command" | "commands" | "query" | "queries" | "domain" | "domains" | "flow" | "flows" | "channel" | "channels" | "entity" | "entities" | "step" | "user" | "custom" | "externalSystem" | "external-system" | "data" | "view" | "actor" | "data-product" | "data-products" | "note";
167
+ type NodeType = "service" | "services" | "event" | "events" | "command" | "commands" | "query" | "queries" | "domain" | "domains" | "flow" | "flows" | "channel" | "channels" | "entity" | "entities" | "step" | "user" | "custom" | "externalSystem" | "external-system" | "data" | "container" | "view" | "actor" | "data-product" | "data-products" | "note";
168
168
  /**
169
169
  * Edge types supported by the visualizer
170
170
  */
package/dist/index.d.ts CHANGED
@@ -164,7 +164,7 @@ interface BaseNodeData {
164
164
  /**
165
165
  * Node types supported by the visualizer
166
166
  */
167
- type NodeType = "service" | "services" | "event" | "events" | "command" | "commands" | "query" | "queries" | "domain" | "domains" | "flow" | "flows" | "channel" | "channels" | "entity" | "entities" | "step" | "user" | "custom" | "externalSystem" | "external-system" | "data" | "view" | "actor" | "data-product" | "data-products" | "note";
167
+ type NodeType = "service" | "services" | "event" | "events" | "command" | "commands" | "query" | "queries" | "domain" | "domains" | "flow" | "flows" | "channel" | "channels" | "entity" | "entities" | "step" | "user" | "custom" | "externalSystem" | "external-system" | "data" | "container" | "view" | "actor" | "data-product" | "data-products" | "note";
168
168
  /**
169
169
  * Edge types supported by the visualizer
170
170
  */
package/dist/index.js CHANGED
@@ -5088,138 +5088,291 @@ var GroupNode_default = (0, import_react45.memo)(function GroupNode({ data }) {
5088
5088
  });
5089
5089
 
5090
5090
  // src/nodes/Custom.tsx
5091
- var import_react46 = require("@xyflow/react");
5091
+ var import_react46 = require("react");
5092
+ var import_react47 = require("@xyflow/react");
5092
5093
  var Icons = __toESM(require("@heroicons/react/24/solid"));
5093
- var import_react47 = require("react");
5094
5094
  var ContextMenu4 = __toESM(require("@radix-ui/react-context-menu"));
5095
- var Tooltip = __toESM(require("@radix-ui/react-tooltip"));
5096
5095
  var import_jsx_runtime24 = require("react/jsx-runtime");
5096
+ var PALETTES = {
5097
+ blue: {
5098
+ border: "border-blue-500",
5099
+ badge: "bg-blue-500",
5100
+ ring: "ring-2 ring-blue-400/60 ring-offset-2",
5101
+ shadow: "rgba(59, 130, 246, 0.15)",
5102
+ glow: "linear-gradient(135deg, #3b82f6, #2563eb)",
5103
+ pillBorder: "#3b82f6"
5104
+ },
5105
+ teal: {
5106
+ border: "border-teal-500",
5107
+ badge: "bg-teal-500",
5108
+ ring: "ring-2 ring-teal-400/60 ring-offset-2",
5109
+ shadow: "rgba(20, 184, 166, 0.15)",
5110
+ glow: "linear-gradient(135deg, #14b8a6, #0f766e)",
5111
+ pillBorder: "#14b8a6"
5112
+ },
5113
+ red: {
5114
+ border: "border-red-500",
5115
+ badge: "bg-red-500",
5116
+ ring: "ring-2 ring-red-400/60 ring-offset-2",
5117
+ shadow: "rgba(239, 68, 68, 0.15)",
5118
+ glow: "linear-gradient(135deg, #ef4444, #b91c1c)",
5119
+ pillBorder: "#ef4444"
5120
+ },
5121
+ green: {
5122
+ border: "border-green-500",
5123
+ badge: "bg-green-500",
5124
+ ring: "ring-2 ring-green-400/60 ring-offset-2",
5125
+ shadow: "rgba(34, 197, 94, 0.15)",
5126
+ glow: "linear-gradient(135deg, #22c55e, #15803d)",
5127
+ pillBorder: "#22c55e"
5128
+ },
5129
+ purple: {
5130
+ border: "border-purple-500",
5131
+ badge: "bg-purple-500",
5132
+ ring: "ring-2 ring-purple-400/60 ring-offset-2",
5133
+ shadow: "rgba(168, 85, 247, 0.15)",
5134
+ glow: "linear-gradient(135deg, #a855f7, #7e22ce)",
5135
+ pillBorder: "#a855f7"
5136
+ },
5137
+ orange: {
5138
+ border: "border-orange-500",
5139
+ badge: "bg-orange-500",
5140
+ ring: "ring-2 ring-orange-400/60 ring-offset-2",
5141
+ shadow: "rgba(251, 146, 60, 0.15)",
5142
+ glow: "linear-gradient(135deg, #fb923c, #ea580c)",
5143
+ pillBorder: "#fb923c"
5144
+ },
5145
+ pink: {
5146
+ border: "border-pink-500",
5147
+ badge: "bg-pink-500",
5148
+ ring: "ring-2 ring-pink-400/60 ring-offset-2",
5149
+ shadow: "rgba(236, 72, 153, 0.15)",
5150
+ glow: "linear-gradient(135deg, #ec4899, #be185d)",
5151
+ pillBorder: "#ec4899"
5152
+ },
5153
+ yellow: {
5154
+ border: "border-yellow-500",
5155
+ badge: "bg-yellow-500",
5156
+ ring: "ring-2 ring-yellow-400/60 ring-offset-2",
5157
+ shadow: "rgba(234, 179, 8, 0.15)",
5158
+ glow: "linear-gradient(135deg, #eab308, #a16207)",
5159
+ pillBorder: "#eab308"
5160
+ },
5161
+ gray: {
5162
+ border: "border-gray-500",
5163
+ badge: "bg-gray-500",
5164
+ ring: "ring-2 ring-gray-400/60 ring-offset-2",
5165
+ shadow: "rgba(107, 114, 128, 0.15)",
5166
+ glow: "linear-gradient(135deg, #6b7280, #374151)",
5167
+ pillBorder: "#6b7280"
5168
+ },
5169
+ indigo: {
5170
+ border: "border-indigo-500",
5171
+ badge: "bg-indigo-500",
5172
+ ring: "ring-2 ring-indigo-400/60 ring-offset-2",
5173
+ shadow: "rgba(99, 102, 241, 0.15)",
5174
+ glow: "linear-gradient(135deg, #6366f1, #4338ca)",
5175
+ pillBorder: "#6366f1"
5176
+ },
5177
+ cyan: {
5178
+ border: "border-cyan-500",
5179
+ badge: "bg-cyan-500",
5180
+ ring: "ring-2 ring-cyan-400/60 ring-offset-2",
5181
+ shadow: "rgba(6, 182, 212, 0.15)",
5182
+ glow: "linear-gradient(135deg, #06b6d4, #0e7490)",
5183
+ pillBorder: "#06b6d4"
5184
+ },
5185
+ slate: {
5186
+ border: "border-slate-500",
5187
+ badge: "bg-slate-500",
5188
+ ring: "ring-2 ring-slate-400/60 ring-offset-2",
5189
+ shadow: "rgba(100, 116, 139, 0.15)",
5190
+ glow: "linear-gradient(135deg, #64748b, #334155)",
5191
+ pillBorder: "#64748b"
5192
+ },
5193
+ amber: {
5194
+ border: "border-amber-500",
5195
+ badge: "bg-amber-500",
5196
+ ring: "ring-2 ring-amber-400/60 ring-offset-2",
5197
+ shadow: "rgba(245, 158, 11, 0.15)",
5198
+ glow: "linear-gradient(135deg, #f59e0b, #b45309)",
5199
+ pillBorder: "#f59e0b"
5200
+ },
5201
+ emerald: {
5202
+ border: "border-emerald-500",
5203
+ badge: "bg-emerald-500",
5204
+ ring: "ring-2 ring-emerald-400/60 ring-offset-2",
5205
+ shadow: "rgba(16, 185, 129, 0.15)",
5206
+ glow: "linear-gradient(135deg, #10b981, #047857)",
5207
+ pillBorder: "#10b981"
5208
+ },
5209
+ violet: {
5210
+ border: "border-violet-500",
5211
+ badge: "bg-violet-500",
5212
+ ring: "ring-2 ring-violet-400/60 ring-offset-2",
5213
+ shadow: "rgba(139, 92, 246, 0.15)",
5214
+ glow: "linear-gradient(135deg, #8b5cf6, #6d28d9)",
5215
+ pillBorder: "#8b5cf6"
5216
+ },
5217
+ rose: {
5218
+ border: "border-rose-500",
5219
+ badge: "bg-rose-500",
5220
+ ring: "ring-2 ring-rose-400/60 ring-offset-2",
5221
+ shadow: "rgba(244, 63, 94, 0.15)",
5222
+ glow: "linear-gradient(135deg, #f43f5e, #be123c)",
5223
+ pillBorder: "#f43f5e"
5224
+ }
5225
+ };
5097
5226
  function classNames16(...classes) {
5098
5227
  return classes.filter(Boolean).join(" ");
5099
5228
  }
5100
- var Custom_default = (0, import_react47.memo)(function UserNode2({
5101
- data,
5102
- sourcePosition,
5103
- targetPosition
5229
+ function getPalette(color) {
5230
+ return PALETTES[color || "blue"] ?? PALETTES.blue;
5231
+ }
5232
+ function GlowHandle14({
5233
+ side,
5234
+ gradient
5104
5235
  }) {
5105
- const { mode, step, custom: customProps } = data;
5236
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
5237
+ "div",
5238
+ {
5239
+ style: {
5240
+ position: "absolute",
5241
+ top: "50%",
5242
+ [side]: -6,
5243
+ transform: "translateY(-50%)",
5244
+ width: 12,
5245
+ height: 12,
5246
+ borderRadius: "50%",
5247
+ background: gradient,
5248
+ border: "2px solid rgb(var(--ec-page-bg))",
5249
+ zIndex: 20,
5250
+ animation: "ec-handle-pulse 2s ease-in-out infinite",
5251
+ pointerEvents: "none"
5252
+ }
5253
+ }
5254
+ );
5255
+ }
5256
+ var Custom_default = (0, import_react46.memo)(function CustomNode({ data, selected }) {
5257
+ const { mode, custom: customProps, step } = data;
5106
5258
  const {
5107
5259
  color = "blue",
5108
- title = "Custom",
5109
- icon = "UserIcon",
5110
- type = "custom",
5111
- summary = "",
5112
- url: _url = "",
5260
+ title = step?.title || "Custom",
5261
+ icon = "CubeIcon",
5262
+ type = "Custom",
5263
+ summary = step?.summary || "",
5264
+ url,
5113
5265
  properties = EMPTY_OBJECT,
5114
5266
  menu = EMPTY_ARRAY,
5115
5267
  height = 5
5116
5268
  } = customProps;
5117
- const IconComponent = (0, import_react47.useMemo)(() => Icons[icon], [icon]);
5118
- const { actor: { name: _name } = {} } = step;
5119
- const isLongType = type && type.length > 10;
5120
- const displayType = isLongType ? `${type.substring(0, 10)}...` : type;
5269
+ const palette = getPalette(color);
5270
+ const IconComponent = (0, import_react46.useMemo)(() => Icons[icon] || Icons.CubeIcon, [icon]);
5121
5271
  const portalContainer = usePortalContainer();
5272
+ const targetConnections = (0, import_react47.useNodeConnections)({ handleType: "target" });
5273
+ const sourceConnections = (0, import_react47.useNodeConnections)({ handleType: "source" });
5274
+ const propertyEntries = Object.entries(properties);
5275
+ const contextMenuItems = url ? [{ label: `Open ${type.toLowerCase()}`, url }, ...menu] : menu;
5122
5276
  return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(ContextMenu4.Root, { children: [
5123
5277
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(ContextMenu4.Trigger, { children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
5124
5278
  "div",
5125
5279
  {
5126
5280
  className: classNames16(
5127
- `rounded-md border flex justify-start bg-[rgb(var(--ec-card-bg))] text-[rgb(var(--ec-page-text))] border-${color}-400`
5281
+ "relative min-w-48 max-w-60 rounded-xl border-2 overflow-visible",
5282
+ selected ? palette.ring : "",
5283
+ palette.border
5128
5284
  ),
5129
5285
  style: {
5130
- minHeight: mode === "full" ? `${height}em` : "2em",
5131
- ...NODE_WIDTH_STYLE
5286
+ background: "var(--ec-custom-node-bg, rgb(var(--ec-card-bg)))",
5287
+ boxShadow: `0 2px 12px ${palette.shadow}`,
5288
+ minHeight: mode === "full" ? `${height}em` : void 0
5132
5289
  },
5133
5290
  children: [
5134
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
5135
- "div",
5291
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
5292
+ import_react47.Handle,
5293
+ {
5294
+ type: "target",
5295
+ position: import_react47.Position.Left,
5296
+ style: HIDDEN_HANDLE_STYLE
5297
+ }
5298
+ ),
5299
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
5300
+ import_react47.Handle,
5301
+ {
5302
+ type: "source",
5303
+ position: import_react47.Position.Right,
5304
+ style: HIDDEN_HANDLE_STYLE
5305
+ }
5306
+ ),
5307
+ targetConnections.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(GlowHandle14, { side: "left", gradient: palette.glow }),
5308
+ sourceConnections.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(GlowHandle14, { side: "right", gradient: palette.glow }),
5309
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "absolute -top-3 left-2.5 z-10", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
5310
+ "span",
5136
5311
  {
5137
5312
  className: classNames16(
5138
- `bg-gradient-to-b from-${color}-400 to-${color}-600 relative flex flex-col items-center w-5 justify-between rounded-l-sm text-orange-100-500`,
5139
- `border-r-[1px] border-${color}`
5313
+ "inline-flex items-center gap-1 text-[7px] font-bold uppercase tracking-widest text-white px-1.5 py-0.5 rounded shadow-sm",
5314
+ palette.badge
5140
5315
  ),
5141
5316
  children: [
5142
- IconComponent && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(IconComponent, { className: "w-4 h-4 opacity-90 text-white mt-1" }),
5143
- mode === "full" && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Tooltip.Provider, { children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Tooltip.Root, { children: [
5144
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Tooltip.Trigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
5145
- "span",
5146
- {
5147
- className: "text-center text-[9px] text-white font-bold uppercase mb-4",
5148
- style: ROTATED_LABEL_STYLE,
5149
- children: displayType
5150
- }
5151
- ) }),
5152
- isLongType && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Tooltip.Portal, { container: portalContainer, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
5153
- Tooltip.Content,
5154
- {
5155
- className: "bg-slate-800 text-white rounded px-2 py-1 text-xs shadow-md z-50",
5156
- side: "right",
5157
- sideOffset: 5,
5158
- children: [
5159
- type,
5160
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Tooltip.Arrow, { className: "fill-slate-800" })
5161
- ]
5162
- }
5163
- ) })
5164
- ] }) })
5317
+ IconComponent && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(IconComponent, { className: "w-2.5 h-2.5", "aria-hidden": true }),
5318
+ type
5165
5319
  ]
5166
5320
  }
5167
- ),
5168
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "p-1 flex-1", children: [
5169
- targetPosition && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react46.Handle, { type: "target", position: targetPosition }),
5170
- sourcePosition && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react46.Handle, { type: "source", position: sourcePosition }),
5171
- (!summary || mode !== "full") && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "h-full ", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "text-sm font-bold block pb-0.5 w-full", children: title }) }),
5172
- summary && mode === "full" && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { children: [
5173
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
5321
+ ) }),
5322
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "px-3 pt-3.5 pb-2.5", children: [
5323
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "flex items-center gap-2", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "text-[13px] font-semibold leading-snug text-[rgb(var(--ec-page-text))] truncate", children: title }) }),
5324
+ mode === "full" && summary && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
5325
+ "div",
5326
+ {
5327
+ className: "mt-1.5 text-[9px] text-[rgb(var(--ec-page-text-muted))] leading-relaxed overflow-hidden",
5328
+ style: LINE_CLAMP_STYLE,
5329
+ title: summary,
5330
+ children: summary
5331
+ }
5332
+ ),
5333
+ mode === "full" && propertyEntries.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "mt-2 pt-1.5 border-t border-[rgb(var(--ec-page-border))] grid grid-cols-2 gap-x-2 gap-y-1", children: propertyEntries.map(([key, value]) => /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "min-w-0", children: [
5334
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "text-[7px] font-bold uppercase tracking-wide text-[rgb(var(--ec-page-text-muted))] truncate", children: key }),
5335
+ typeof value === "string" && value.startsWith("http") ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
5336
+ "a",
5337
+ {
5338
+ href: value,
5339
+ target: "_blank",
5340
+ rel: "noopener noreferrer",
5341
+ className: "block text-[8px] text-blue-500 underline truncate",
5342
+ title: value,
5343
+ children: value
5344
+ }
5345
+ ) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
5174
5346
  "div",
5175
5347
  {
5176
- className: classNames16(
5177
- mode === "full" ? `border-b border-[rgb(var(--ec-page-border))]` : ""
5178
- ),
5179
- children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "text-xs font-bold block pb-0.5", children: title })
5348
+ className: "text-[8px] text-[rgb(var(--ec-page-text))] truncate",
5349
+ title: String(value),
5350
+ children: value
5180
5351
  }
5181
- ),
5182
- mode === "full" && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "divide-y divide-[rgb(var(--ec-page-border))] ", children: [
5183
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "leading-3 py-1", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "text-[8px] font-light", children: summary }) }),
5184
- properties && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "grid grid-cols-2 gap-x-4 py-1", children: Object.entries(properties).map(([key, value]) => /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
5185
- "span",
5186
- {
5187
- className: "text-xs",
5188
- style: TINY_FONT_STYLE,
5189
- children: [
5190
- key,
5191
- ":",
5192
- " ",
5193
- typeof value === "string" && value.startsWith("http") ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
5194
- "a",
5195
- {
5196
- href: value,
5197
- target: "_blank",
5198
- rel: "noopener noreferrer",
5199
- className: "text-blue-500 underline",
5200
- children: value
5201
- }
5202
- ) : value
5203
- ]
5204
- },
5205
- key
5206
- )) })
5207
- ] })
5208
- ] })
5352
+ )
5353
+ ] }, key)) })
5209
5354
  ] })
5210
5355
  ]
5211
5356
  }
5212
5357
  ) }),
5213
- menu?.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(ContextMenu4.Portal, { container: portalContainer, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(ContextMenu4.Content, { className: "min-w-[220px] bg-[rgb(var(--ec-card-bg))] rounded-md p-1 shadow-md border border-[rgb(var(--ec-page-border))]", children: menu?.map((item) => {
5214
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
5215
- ContextMenu4.Item,
5216
- {
5217
- asChild: true,
5218
- className: "text-sm px-2 py-1.5 outline-none cursor-pointer hover:bg-orange-100 rounded-sm flex items-center",
5219
- children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("a", { href: item.url, children: item.label })
5220
- }
5221
- );
5222
- }) }) })
5358
+ contextMenuItems.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(ContextMenu4.Portal, { container: portalContainer, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(ContextMenu4.Content, { className: "min-w-[220px] bg-[rgb(var(--ec-card-bg))] rounded-md p-1 shadow-md border border-[rgb(var(--ec-page-border))]", children: contextMenuItems.map((item) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
5359
+ ContextMenu4.Item,
5360
+ {
5361
+ asChild: true,
5362
+ className: "text-sm px-2 py-1.5 outline-none cursor-pointer hover:bg-orange-100 rounded-sm flex items-center",
5363
+ children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
5364
+ "a",
5365
+ {
5366
+ href: item.url,
5367
+ target: "_blank",
5368
+ rel: "noopener noreferrer",
5369
+ className: "text-[rgb(var(--ec-page-text))] no-underline",
5370
+ children: item.label
5371
+ }
5372
+ )
5373
+ },
5374
+ `${item.label}-${item.url || ""}`
5375
+ )) }) })
5223
5376
  ] });
5224
5377
  });
5225
5378
 
@@ -5256,7 +5409,7 @@ var import_react50 = require("react");
5256
5409
  var import_lucide_react22 = require("lucide-react");
5257
5410
  var import_react51 = require("@xyflow/react");
5258
5411
  var import_jsx_runtime26 = require("react/jsx-runtime");
5259
- function GlowHandle14({ side }) {
5412
+ function GlowHandle15({ side }) {
5260
5413
  return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
5261
5414
  "div",
5262
5415
  {
@@ -5425,8 +5578,8 @@ function DefaultDataProduct(props) {
5425
5578
  }
5426
5579
  ),
5427
5580
  notes && notes.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(NotesIndicator, { notes, resourceName: name }),
5428
- targetConnections.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(GlowHandle14, { side: "left" }),
5429
- sourceConnections.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(GlowHandle14, { side: "right" }),
5581
+ targetConnections.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(GlowHandle15, { side: "left" }),
5582
+ sourceConnections.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(GlowHandle15, { side: "right" }),
5430
5583
  /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "absolute -top-2.5 left-2.5 flex items-center gap-1.5 z-10", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
5431
5584
  "span",
5432
5585
  {