@eventcatalog/visualiser 3.17.1 → 3.18.1

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.mjs CHANGED
@@ -35,7 +35,7 @@ import { toPng } from "html-to-image";
35
35
 
36
36
  // src/nodes/service/ServiceNode.tsx
37
37
  import { memo as memo3, useMemo } from "react";
38
- import { ServerIcon } from "lucide-react";
38
+ import { ServerIcon, Globe } from "lucide-react";
39
39
 
40
40
  // src/nodes/OwnerIndicator.tsx
41
41
  import { memo } from "react";
@@ -1047,7 +1047,8 @@ var ServiceMessageFlow = memo3(function ServiceMessageFlow2({
1047
1047
  );
1048
1048
  });
1049
1049
  var GlowHandle = memo3(function GlowHandle2({
1050
- side
1050
+ side,
1051
+ external
1051
1052
  }) {
1052
1053
  return /* @__PURE__ */ jsx3(
1053
1054
  "div",
@@ -1060,10 +1061,10 @@ var GlowHandle = memo3(function GlowHandle2({
1060
1061
  width: 12,
1061
1062
  height: 12,
1062
1063
  borderRadius: "50%",
1063
- background: "linear-gradient(135deg, #ec4899, #be185d)",
1064
+ background: external ? "linear-gradient(135deg, #a855f7, #7e22ce)" : "linear-gradient(135deg, #ec4899, #be185d)",
1064
1065
  border: "2px solid rgb(var(--ec-page-bg))",
1065
1066
  zIndex: 20,
1066
- animation: "ec-service-handle-pulse 2s ease-in-out infinite",
1067
+ animation: external ? "ec-external-handle-pulse 2s ease-in-out infinite" : "ec-service-handle-pulse 2s ease-in-out infinite",
1067
1068
  pointerEvents: "none"
1068
1069
  }
1069
1070
  }
@@ -1072,16 +1073,86 @@ var GlowHandle = memo3(function GlowHandle2({
1072
1073
  function classNames(...classes) {
1073
1074
  return classes.filter(Boolean).join(" ");
1074
1075
  }
1076
+ var POST_IT_SERVICE = {
1077
+ Icon: ServerIcon,
1078
+ label: "Service",
1079
+ gradient: "linear-gradient(135deg, #fbcfe8 0%, #f9a8d4 40%, #ec4899 100%)",
1080
+ draftBorder: "rgba(236, 72, 153, 0.5)",
1081
+ corner: "#db2777",
1082
+ ring: "ring-2 ring-pink-400/60 ring-offset-1",
1083
+ iconClass: "w-3 h-3 text-pink-900/50",
1084
+ labelClass: "text-[8px] font-bold text-pink-900/50 uppercase tracking-widest",
1085
+ nameText: "text-pink-950",
1086
+ nameTextDeprecated: "text-pink-950/40 line-through",
1087
+ versionClass: "text-[9px] text-pink-900/40 font-semibold mt-0.5",
1088
+ summaryClass: "mt-2 pt-1.5 border-t border-pink-900/10 text-[9px] text-pink-950/60 leading-relaxed overflow-hidden"
1089
+ };
1090
+ var POST_IT_EXTERNAL = {
1091
+ Icon: Globe,
1092
+ label: "External System",
1093
+ gradient: "linear-gradient(135deg, #e9d5ff 0%, #c084fc 40%, #a855f7 100%)",
1094
+ draftBorder: "rgba(168, 85, 247, 0.5)",
1095
+ corner: "#7e22ce",
1096
+ ring: "ring-2 ring-purple-400/60 ring-offset-1",
1097
+ iconClass: "w-3 h-3 text-purple-900/50",
1098
+ labelClass: "text-[8px] font-bold text-purple-900/50 uppercase tracking-widest",
1099
+ nameText: "text-purple-950",
1100
+ nameTextDeprecated: "text-purple-950/40 line-through",
1101
+ versionClass: "text-[9px] text-purple-900/40 font-semibold mt-0.5",
1102
+ summaryClass: "mt-2 pt-1.5 border-t border-purple-900/10 text-[9px] text-purple-950/60 leading-relaxed overflow-hidden"
1103
+ };
1104
+ var DEFAULT_SERVICE = {
1105
+ Icon: ServerIcon,
1106
+ label: "Service",
1107
+ ring: "ring-2 ring-pink-400/60 ring-offset-2",
1108
+ borderSolid: "border-pink-500",
1109
+ borderDraftDark: "border-dashed border-pink-400",
1110
+ borderDraftLight: "border-dashed border-pink-400/60",
1111
+ draftStripeDark: "rgba(236,72,153,0.25)",
1112
+ draftStripeLight: "rgba(236,72,153,0.15)",
1113
+ nodeBgVar: "var(--ec-service-node-bg, rgb(var(--ec-card-bg)))",
1114
+ shadowColor: "rgba(236, 72, 153, 0.15)",
1115
+ badgeBg: "bg-pink-500",
1116
+ ownerAccent: "bg-pink-400",
1117
+ ownerBorder: "rgba(236,72,153,0.08)",
1118
+ ownerIcon: "text-pink-300"
1119
+ };
1120
+ var DEFAULT_EXTERNAL = {
1121
+ Icon: Globe,
1122
+ label: "External System",
1123
+ ring: "ring-2 ring-purple-400/60 ring-offset-2",
1124
+ borderSolid: "border-purple-500",
1125
+ borderDraftDark: "border-dashed border-purple-400",
1126
+ borderDraftLight: "border-dashed border-purple-400/60",
1127
+ draftStripeDark: "rgba(168,85,247,0.25)",
1128
+ draftStripeLight: "rgba(168,85,247,0.15)",
1129
+ nodeBgVar: "var(--ec-external-node-bg, rgb(var(--ec-card-bg)))",
1130
+ shadowColor: "rgba(168, 85, 247, 0.15)",
1131
+ badgeBg: "bg-purple-500",
1132
+ ownerAccent: "bg-purple-400",
1133
+ ownerBorder: "rgba(168,85,247,0.08)",
1134
+ ownerIcon: "text-purple-300"
1135
+ };
1075
1136
  function PostItService(props) {
1076
- const { version, name, summary, deprecated, draft, notes, specifications } = props.data.service;
1137
+ const {
1138
+ version,
1139
+ name,
1140
+ summary,
1141
+ deprecated,
1142
+ draft,
1143
+ notes,
1144
+ specifications,
1145
+ externalSystem
1146
+ } = props.data.service;
1077
1147
  const mode = props.data.mode || "simple";
1078
1148
  const isDark = useDarkMode();
1149
+ const p = externalSystem ? POST_IT_EXTERNAL : POST_IT_SERVICE;
1079
1150
  return /* @__PURE__ */ jsxs3(
1080
1151
  "div",
1081
1152
  {
1082
1153
  className: classNames(
1083
1154
  "relative min-w-44 max-w-56 min-h-[120px]",
1084
- props?.selected ? "ring-2 ring-pink-400/60 ring-offset-1" : ""
1155
+ props?.selected ? p.ring : ""
1085
1156
  ),
1086
1157
  children: [
1087
1158
  /* @__PURE__ */ jsx3(
@@ -1106,10 +1177,10 @@ function PostItService(props) {
1106
1177
  {
1107
1178
  className: "absolute inset-0",
1108
1179
  style: {
1109
- background: draft ? "repeating-linear-gradient(135deg, #fbcfe8 0%, #f9a8d4 40%, #ec4899 100%)" : "linear-gradient(135deg, #fbcfe8 0%, #f9a8d4 40%, #ec4899 100%)",
1180
+ background: p.gradient,
1110
1181
  boxShadow: "1px 1px 3px rgba(0,0,0,0.15), 3px 4px 8px rgba(0,0,0,0.08)",
1111
1182
  transform: "rotate(1deg)",
1112
- border: deprecated ? "2px dashed rgba(239, 68, 68, 0.5)" : draft ? "2px dashed rgba(236, 72, 153, 0.5)" : "none"
1183
+ border: deprecated ? "2px dashed rgba(239, 68, 68, 0.5)" : draft ? `2px dashed ${p.draftBorder}` : "none"
1113
1184
  },
1114
1185
  children: [
1115
1186
  /* @__PURE__ */ jsx3("div", { style: FOLDED_CORNER_SHADOW_STYLE }),
@@ -1124,7 +1195,7 @@ function PostItService(props) {
1124
1195
  height: 0,
1125
1196
  borderStyle: "solid",
1126
1197
  borderWidth: "18px 0 0 18px",
1127
- borderColor: "#db2777 transparent transparent transparent",
1198
+ borderColor: `${p.corner} transparent transparent transparent`,
1128
1199
  opacity: 0.3
1129
1200
  }
1130
1201
  }
@@ -1135,14 +1206,8 @@ function PostItService(props) {
1135
1206
  /* @__PURE__ */ jsxs3("div", { className: "relative px-3.5 py-3", children: [
1136
1207
  /* @__PURE__ */ jsxs3("div", { className: "flex items-center justify-between mb-2", children: [
1137
1208
  /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-1", children: [
1138
- /* @__PURE__ */ jsx3(
1139
- ServerIcon,
1140
- {
1141
- className: "w-3 h-3 text-pink-900/50",
1142
- strokeWidth: 2.5
1143
- }
1144
- ),
1145
- /* @__PURE__ */ jsx3("span", { className: "text-[8px] font-bold text-pink-900/50 uppercase tracking-widest", children: "Service" })
1209
+ /* @__PURE__ */ jsx3(p.Icon, { className: p.iconClass, strokeWidth: 2.5 }),
1210
+ /* @__PURE__ */ jsx3("span", { className: p.labelClass, children: p.label })
1146
1211
  ] }),
1147
1212
  draft && /* @__PURE__ */ jsx3("span", { className: "text-[8px] font-extrabold text-amber-900 bg-amber-100 border border-dashed border-amber-400 px-1.5 py-0.5 rounded uppercase", children: "Draft" }),
1148
1213
  deprecated && /* @__PURE__ */ jsx3("span", { className: "text-[7px] font-bold text-white bg-red-500 border border-red-600 px-1.5 py-0.5 rounded uppercase", children: "Deprecated" })
@@ -1152,19 +1217,19 @@ function PostItService(props) {
1152
1217
  {
1153
1218
  className: classNames(
1154
1219
  "text-[13px] font-bold leading-snug",
1155
- deprecated ? "text-pink-950/40 line-through" : "text-pink-950"
1220
+ deprecated ? p.nameTextDeprecated : p.nameText
1156
1221
  ),
1157
1222
  children: name
1158
1223
  }
1159
1224
  ),
1160
- version && /* @__PURE__ */ jsxs3("div", { className: "text-[9px] text-pink-900/40 font-semibold mt-0.5", children: [
1225
+ version && /* @__PURE__ */ jsxs3("div", { className: p.versionClass, children: [
1161
1226
  "v",
1162
1227
  version
1163
1228
  ] }),
1164
1229
  mode === "full" && summary && /* @__PURE__ */ jsx3(
1165
1230
  "div",
1166
1231
  {
1167
- className: "mt-2 pt-1.5 border-t border-pink-900/10 text-[9px] text-pink-950/60 leading-relaxed overflow-hidden",
1232
+ className: p.summaryClass,
1168
1233
  style: LINE_CLAMP_STYLE,
1169
1234
  title: summary,
1170
1235
  children: summary
@@ -1177,7 +1242,16 @@ function PostItService(props) {
1177
1242
  );
1178
1243
  }
1179
1244
  function DefaultService(props) {
1180
- const { version, name, summary, deprecated, draft, notes, specifications } = props.data.service;
1245
+ const {
1246
+ version,
1247
+ name,
1248
+ summary,
1249
+ deprecated,
1250
+ draft,
1251
+ notes,
1252
+ specifications,
1253
+ externalSystem
1254
+ } = props.data.service;
1181
1255
  const mode = props.data.mode || "simple";
1182
1256
  const owners = useMemo(
1183
1257
  () => normalizeOwners(props.data.service.owners),
@@ -1187,17 +1261,20 @@ function DefaultService(props) {
1187
1261
  const sourceConnections = useNodeConnections({ handleType: "source" });
1188
1262
  const isDark = useDarkMode();
1189
1263
  const deprecatedStripe = isDark ? "rgba(239,68,68,0.25)" : "rgba(239,68,68,0.1)";
1264
+ const p = externalSystem ? DEFAULT_EXTERNAL : DEFAULT_SERVICE;
1265
+ const draftStripe = isDark ? p.draftStripeDark : p.draftStripeLight;
1266
+ const borderDraft = isDark ? p.borderDraftDark : p.borderDraftLight;
1190
1267
  return /* @__PURE__ */ jsxs3(
1191
1268
  "div",
1192
1269
  {
1193
1270
  className: classNames(
1194
1271
  "relative min-w-48 max-w-60 rounded-xl border-2 overflow-visible",
1195
- props?.selected ? "ring-2 ring-pink-400/60 ring-offset-2" : "",
1196
- deprecated ? "border-dashed border-red-500" : draft ? `border-dashed ${isDark ? "border-pink-400" : "border-pink-400/60"}` : "border-pink-500"
1272
+ props?.selected ? p.ring : "",
1273
+ deprecated ? "border-dashed border-red-500" : draft ? borderDraft : p.borderSolid
1197
1274
  ),
1198
1275
  style: {
1199
- background: deprecated ? `repeating-linear-gradient(135deg, transparent, transparent 6px, ${deprecatedStripe} 6px, ${deprecatedStripe} 7px), var(--ec-service-node-bg, rgb(var(--ec-card-bg)))` : draft ? `repeating-linear-gradient(135deg, transparent, transparent 4px, ${isDark ? "rgba(236,72,153,0.25)" : "rgba(236,72,153,0.15)"} 4px, ${isDark ? "rgba(236,72,153,0.25)" : "rgba(236,72,153,0.15)"} 4.5px), repeating-linear-gradient(45deg, transparent, transparent 4px, ${isDark ? "rgba(236,72,153,0.25)" : "rgba(236,72,153,0.15)"} 4px, ${isDark ? "rgba(236,72,153,0.25)" : "rgba(236,72,153,0.15)"} 4.5px), var(--ec-service-node-bg, rgb(var(--ec-card-bg)))` : "var(--ec-service-node-bg, rgb(var(--ec-card-bg)))",
1200
- boxShadow: "0 2px 12px rgba(236, 72, 153, 0.15)"
1276
+ background: deprecated ? `repeating-linear-gradient(135deg, transparent, transparent 6px, ${deprecatedStripe} 6px, ${deprecatedStripe} 7px), ${p.nodeBgVar}` : draft ? `repeating-linear-gradient(135deg, transparent, transparent 4px, ${draftStripe} 4px, ${draftStripe} 4.5px), repeating-linear-gradient(45deg, transparent, transparent 4px, ${draftStripe} 4px, ${draftStripe} 4.5px), ${p.nodeBgVar}` : p.nodeBgVar,
1277
+ boxShadow: `0 2px 12px ${p.shadowColor}`
1201
1278
  },
1202
1279
  children: [
1203
1280
  /* @__PURE__ */ jsx3(
@@ -1217,18 +1294,18 @@ function DefaultService(props) {
1217
1294
  }
1218
1295
  ),
1219
1296
  notes && notes.length > 0 && /* @__PURE__ */ jsx3(NotesIndicator, { notes, resourceName: name }),
1220
- targetConnections.length > 0 && /* @__PURE__ */ jsx3(GlowHandle, { side: "left" }),
1221
- sourceConnections.length > 0 && /* @__PURE__ */ jsx3(GlowHandle, { side: "right" }),
1297
+ targetConnections.length > 0 && /* @__PURE__ */ jsx3(GlowHandle, { side: "left", external: externalSystem }),
1298
+ sourceConnections.length > 0 && /* @__PURE__ */ jsx3(GlowHandle, { side: "right", external: externalSystem }),
1222
1299
  /* @__PURE__ */ jsx3("div", { className: "absolute -top-2.5 left-2.5 flex items-center gap-1.5 z-10", children: /* @__PURE__ */ jsxs3(
1223
1300
  "span",
1224
1301
  {
1225
1302
  className: classNames(
1226
1303
  "inline-flex items-center gap-1 text-[7px] font-bold uppercase tracking-widest text-white px-1.5 py-0.5 rounded shadow-sm",
1227
- deprecated ? "bg-red-500" : "bg-pink-500"
1304
+ deprecated ? "bg-red-500" : p.badgeBg
1228
1305
  ),
1229
1306
  children: [
1230
- /* @__PURE__ */ jsx3(ServerIcon, { className: "w-2.5 h-2.5", strokeWidth: 2.5 }),
1231
- "Service",
1307
+ /* @__PURE__ */ jsx3(p.Icon, { className: "w-2.5 h-2.5", strokeWidth: 2.5 }),
1308
+ p.label,
1232
1309
  draft && " (Draft)",
1233
1310
  deprecated && " (Deprecated)"
1234
1311
  ]
@@ -1257,9 +1334,9 @@ function DefaultService(props) {
1257
1334
  OwnerIndicator,
1258
1335
  {
1259
1336
  owners,
1260
- accentColor: "bg-pink-400",
1261
- borderColor: "rgba(236,72,153,0.08)",
1262
- iconClass: "text-pink-300"
1337
+ accentColor: p.ownerAccent,
1338
+ borderColor: p.ownerBorder,
1339
+ iconClass: p.ownerIcon
1263
1340
  }
1264
1341
  ),
1265
1342
  !!specifications && /* @__PURE__ */ jsx3(SpecBadges, { specifications, isDark })
@@ -3231,7 +3308,7 @@ var config_default3 = {
3231
3308
 
3232
3309
  // src/nodes/external-system/ExternalSystem.tsx
3233
3310
  import { memo as memo12 } from "react";
3234
- import { Globe } from "lucide-react";
3311
+ import { Globe as Globe2 } from "lucide-react";
3235
3312
  import { Handle as Handle9, Position as Position9, useNodeConnections as useNodeConnections8 } from "@xyflow/react";
3236
3313
  import { jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
3237
3314
  function GlowHandle12({ side }) {
@@ -3320,7 +3397,7 @@ function PostItExternalSystem(props) {
3320
3397
  /* @__PURE__ */ jsxs11("div", { className: "relative px-3.5 py-3", children: [
3321
3398
  /* @__PURE__ */ jsxs11("div", { className: "flex items-center justify-between mb-2", children: [
3322
3399
  /* @__PURE__ */ jsxs11("div", { className: "flex items-center gap-1", children: [
3323
- /* @__PURE__ */ jsx12(Globe, { className: "w-3 h-3 text-purple-900/50", strokeWidth: 2.5 }),
3400
+ /* @__PURE__ */ jsx12(Globe2, { className: "w-3 h-3 text-purple-900/50", strokeWidth: 2.5 }),
3324
3401
  /* @__PURE__ */ jsx12("span", { className: "text-[8px] font-bold text-purple-900/50 uppercase tracking-widest", children: "External" })
3325
3402
  ] }),
3326
3403
  draft && /* @__PURE__ */ jsx12("span", { className: "text-[8px] font-extrabold text-amber-900 bg-amber-100 border border-dashed border-amber-400 px-1.5 py-0.5 rounded uppercase", children: "Draft" }),
@@ -3401,7 +3478,7 @@ function DefaultExternalSystem(props) {
3401
3478
  deprecated ? "bg-red-500" : "bg-purple-500"
3402
3479
  ),
3403
3480
  children: [
3404
- /* @__PURE__ */ jsx12(Globe, { className: "w-2.5 h-2.5", strokeWidth: 2.5 }),
3481
+ /* @__PURE__ */ jsx12(Globe2, { className: "w-2.5 h-2.5", strokeWidth: 2.5 }),
3405
3482
  "External System",
3406
3483
  draft && " (Draft)",
3407
3484
  deprecated && " (Deprecated)"
@@ -3441,10 +3518,10 @@ var ExternalSystem_default = memo12(function ExternalSystem(props) {
3441
3518
 
3442
3519
  // src/nodes/external-system/config.ts
3443
3520
  import { MarkerType as MarkerType4 } from "@xyflow/react";
3444
- import { Globe as Globe2 } from "lucide-react";
3521
+ import { Globe as Globe3 } from "lucide-react";
3445
3522
  var config_default4 = {
3446
3523
  type: "external-system",
3447
- icon: Globe2,
3524
+ icon: Globe3,
3448
3525
  color: "pink",
3449
3526
  targetCanConnectTo: [...SERVICE, ...CHANNEL, ...MESSAGE, ...ACTOR],
3450
3527
  sourceCanConnectTo: [...SERVICE, ...CHANNEL, ...MESSAGE, ...ACTOR],
@@ -3855,7 +3932,7 @@ function buildUrl(path) {
3855
3932
  import * as HeroIcons from "@heroicons/react/24/outline";
3856
3933
 
3857
3934
  // src/utils/protocols.tsx
3858
- import { Server, Radio, Wifi, Network, Globe as Globe3, Cloud } from "lucide-react";
3935
+ import { Server, Radio, Wifi, Network, Globe as Globe4, Cloud } from "lucide-react";
3859
3936
  import { jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
3860
3937
  function AwsEventBridge({ className }) {
3861
3938
  return /* @__PURE__ */ jsxs14("svg", { viewBox: "0 0 40 40", className, children: [
@@ -3915,8 +3992,8 @@ var protocolIconMap = {
3915
3992
  // Messaging protocols
3916
3993
  mqtt: { component: Wifi, type: "lucide" },
3917
3994
  amqp: { component: Network, type: "lucide" },
3918
- grpc: { component: Globe3, type: "lucide" },
3919
- graphql: { component: Globe3, type: "lucide" },
3995
+ grpc: { component: Globe4, type: "lucide" },
3996
+ graphql: { component: Globe4, type: "lucide" },
3920
3997
  // Message brokers
3921
3998
  kafka: { component: Network, type: "lucide" },
3922
3999
  rabbitmq: { component: Network, type: "lucide" },
@@ -5352,6 +5429,7 @@ var AnimatedMessageEdge = memo26(
5352
5429
  [lines]
5353
5430
  );
5354
5431
  const labelWidth = Math.max(longestLine.length * 6.5 + 16, 50);
5432
+ const firstLineDy = `${-((lines.length - 1) * 1.2) / 2}em`;
5355
5433
  return /* @__PURE__ */ jsxs26(Fragment3, { children: [
5356
5434
  /* @__PURE__ */ jsx27(
5357
5435
  BaseEdge,
@@ -5395,7 +5473,7 @@ var AnimatedMessageEdge = memo26(
5395
5473
  "tspan",
5396
5474
  {
5397
5475
  x: labelX,
5398
- dy: i === 0 ? 0 : "1.2em",
5476
+ dy: i === 0 ? firstLineDy : "1.2em",
5399
5477
  style: i === 0 ? TSPAN_NORMAL_STYLE : TSPAN_ITALIC_STYLE,
5400
5478
  children: line
5401
5479
  },
@@ -5440,6 +5518,16 @@ var MultilineEdgeLabel_default = memo27(function MultilineEdgeLabel(props) {
5440
5518
  targetPosition
5441
5519
  });
5442
5520
  const lines = useMemo13(() => String(label ?? "").split("\n"), [label]);
5521
+ const firstLineDy = useMemo13(
5522
+ () => `${-((lines.length - 1) * 1.2) / 2}em`,
5523
+ [lines.length]
5524
+ );
5525
+ const longestLine = useMemo13(
5526
+ () => lines.reduce((a, b) => a.length > b.length ? a : b, ""),
5527
+ [lines]
5528
+ );
5529
+ const labelWidth = Math.max(longestLine.length * 5.5 + 14, 44);
5530
+ const labelHeight = lines.length * 12 + 4;
5443
5531
  return /* @__PURE__ */ jsxs27(Fragment4, { children: [
5444
5532
  /* @__PURE__ */ jsx28(
5445
5533
  "path",
@@ -5452,6 +5540,22 @@ var MultilineEdgeLabel_default = memo27(function MultilineEdgeLabel(props) {
5452
5540
  style
5453
5541
  }
5454
5542
  ),
5543
+ label && /* @__PURE__ */ jsx28(
5544
+ "rect",
5545
+ {
5546
+ x: labelX - labelWidth / 2,
5547
+ y: labelY - labelHeight / 2,
5548
+ width: labelWidth,
5549
+ height: labelHeight,
5550
+ fill: "rgb(var(--ec-card-bg))",
5551
+ fillOpacity: 0.95,
5552
+ stroke: "rgb(var(--ec-page-border))",
5553
+ strokeWidth: 0.75,
5554
+ rx: 5,
5555
+ ry: 5,
5556
+ pointerEvents: "none"
5557
+ }
5558
+ ),
5455
5559
  /* @__PURE__ */ jsx28(
5456
5560
  "text",
5457
5561
  {
@@ -5466,7 +5570,7 @@ var MultilineEdgeLabel_default = memo27(function MultilineEdgeLabel(props) {
5466
5570
  "tspan",
5467
5571
  {
5468
5572
  x: labelX,
5469
- dy: i === 0 ? 0 : "1.2em",
5573
+ dy: i === 0 ? firstLineDy : "1.2em",
5470
5574
  style: i === 0 ? TSPAN_NORMAL_STYLE2 : TSPAN_ITALIC_STYLE2,
5471
5575
  children: line
5472
5576
  },
@@ -8538,7 +8642,7 @@ import {
8538
8642
  ArrowRightLeft as ArrowRightLeft3,
8539
8643
  Database as Database5,
8540
8644
  Package as Package2,
8541
- Globe as Globe4,
8645
+ Globe as Globe5,
8542
8646
  User as User3,
8543
8647
  MonitorIcon as MonitorIcon2,
8544
8648
  BoxesIcon as BoxesIcon2
@@ -8559,7 +8663,7 @@ var NODE_TYPE_META = {
8559
8663
  channels: { icon: ArrowRightLeft3, color: "#6b7280", label: "Channel" },
8560
8664
  data: { icon: Database5, color: "#3b82f6", label: "Data" },
8561
8665
  "data-products": { icon: Package2, color: "#6366f1", label: "Data Product" },
8562
- externalSystem: { icon: Globe4, color: "#ec4899", label: "External System" },
8666
+ externalSystem: { icon: Globe5, color: "#ec4899", label: "External System" },
8563
8667
  actor: { icon: User3, color: "#eab308", label: "Actor" },
8564
8668
  view: { icon: MonitorIcon2, color: "#8b5cf6", label: "View" },
8565
8669
  domain: { icon: BoxesIcon2, color: "#14b8a6", label: "Domain" },
@@ -10614,7 +10718,7 @@ var NodeGraphBuilder = ({
10614
10718
  {
10615
10719
  onClick: handleQuickSaveLayout,
10616
10720
  disabled: isSavingLayout,
10617
- className: "text-xs font-medium text-[rgb(var(--ec-accent-text))] bg-[rgb(var(--ec-accent-subtle))] hover:bg-[rgb(var(--ec-accent-subtle)/0.7)] px-2 py-1 rounded transition-colors disabled:opacity-50",
10721
+ className: "text-xs font-medium text-white bg-[rgb(var(--ec-accent))] hover:bg-[rgb(var(--ec-accent-hover))] px-2 py-1 rounded transition-colors disabled:opacity-50",
10618
10722
  children: isSavingLayout ? "Saving..." : "Save"
10619
10723
  }
10620
10724
  )