@industry-theme/principal-view-panels 0.1.29 → 0.1.30

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.
@@ -3996,6 +3996,89 @@ function requireUmd() {
3996
3996
  })(umd$1, umd$1.exports);
3997
3997
  return umd$1.exports;
3998
3998
  }
3999
+ function isErrorSeverity(severity) {
4000
+ if (severity === void 0)
4001
+ return false;
4002
+ if (typeof severity === "string") {
4003
+ return severity === "ERROR" || severity === "FATAL";
4004
+ }
4005
+ return severity >= 17;
4006
+ }
4007
+ function isWarnSeverity(severity) {
4008
+ if (severity === void 0)
4009
+ return false;
4010
+ if (typeof severity === "string") {
4011
+ return severity === "WARN";
4012
+ }
4013
+ return severity >= 13 && severity <= 16;
4014
+ }
4015
+ function isExactMatch(op) {
4016
+ return typeof op === "object" && "exact" in op;
4017
+ }
4018
+ function isGlobMatch(op) {
4019
+ return typeof op === "object" && "glob" in op;
4020
+ }
4021
+ function isRegexMatch(op) {
4022
+ return typeof op === "object" && "regex" in op;
4023
+ }
4024
+ function isExistsMatch(op) {
4025
+ return typeof op === "object" && "exists" in op;
4026
+ }
4027
+ function isOneOfMatch(op) {
4028
+ return typeof op === "object" && "oneOf" in op;
4029
+ }
4030
+ function isStringShorthand(op) {
4031
+ return typeof op === "string";
4032
+ }
4033
+ function normalizeOperator(op) {
4034
+ if (typeof op === "string") {
4035
+ return { exact: op };
4036
+ }
4037
+ return op;
4038
+ }
4039
+ const DEFAULT_AUDIT_CONFIG = {
4040
+ maxOrphanSignatures: 1e3,
4041
+ maxSamplesPerOrphan: 5
4042
+ };
4043
+ function parseDuration(duration) {
4044
+ const match = duration.match(/^(\d+(?:\.\d+)?)(ms|s|m|h|d)$/);
4045
+ if (!match)
4046
+ return null;
4047
+ const value = parseFloat(match[1]);
4048
+ const unit = match[2];
4049
+ const multipliers = {
4050
+ ms: 1,
4051
+ s: 1e3,
4052
+ m: 60 * 1e3,
4053
+ h: 60 * 60 * 1e3,
4054
+ d: 24 * 60 * 60 * 1e3
4055
+ };
4056
+ return value * multipliers[unit];
4057
+ }
4058
+ function createResourceSignature(resource) {
4059
+ const signatureKeys = [
4060
+ "service.name",
4061
+ "service.namespace",
4062
+ "deployment.environment",
4063
+ "db.system",
4064
+ "db.name",
4065
+ "k8s.deployment.name",
4066
+ "k8s.namespace.name",
4067
+ "messaging.system",
4068
+ "messaging.destination.name"
4069
+ ];
4070
+ const signature = {};
4071
+ for (const key of signatureKeys) {
4072
+ if (resource[key] !== void 0) {
4073
+ signature[key] = resource[key];
4074
+ }
4075
+ }
4076
+ return signature;
4077
+ }
4078
+ function signatureToKey(resource) {
4079
+ const entries = Object.entries(resource).filter(([, v]) => v !== void 0).sort(([a2], [b]) => a2.localeCompare(b));
4080
+ return entries.map(([k, v]) => `${k}=${v}`).join("|");
4081
+ }
3999
4082
  class ValidationEngine {
4000
4083
  constructor(rules) {
4001
4084
  this.violationCount = 0;
@@ -5429,12 +5512,14 @@ class CanvasConverter {
5429
5512
  nodeName = (pv == null ? void 0 : pv.nodeType) || node.id;
5430
5513
  break;
5431
5514
  }
5515
+ const finalName = (pv == null ? void 0 : pv.name) || nodeName;
5516
+ const finalDescription = (pv == null ? void 0 : pv.description) || nodeDescription;
5432
5517
  nodes.push({
5433
5518
  id: node.id,
5434
5519
  type: (pv == null ? void 0 : pv.nodeType) || node.type,
5435
- name: nodeName,
5520
+ name: finalName,
5436
5521
  data: {
5437
- description: nodeDescription,
5522
+ description: finalDescription,
5438
5523
  shape: (pv == null ? void 0 : pv.shape) || "rectangle",
5439
5524
  icon: pv == null ? void 0 : pv.icon,
5440
5525
  // Color priority: pv.fill > node.color
@@ -5446,6 +5531,10 @@ class CanvasConverter {
5446
5531
  sources: (pv == null ? void 0 : pv.sources) || [],
5447
5532
  actions: (pv == null ? void 0 : pv.actions) || [],
5448
5533
  states: pv == null ? void 0 : pv.states,
5534
+ // OTEL metadata for visualization
5535
+ otel: pv == null ? void 0 : pv.otel,
5536
+ // Resource matching for log association
5537
+ resourceMatch: pv == null ? void 0 : pv.resourceMatch,
5449
5538
  canvasType: node.type,
5450
5539
  ...node.type === "text" ? { text: node.text } : {},
5451
5540
  ...node.type === "file" ? { file: node.file } : {},
@@ -5952,7 +6041,7 @@ class EventRecorderService {
5952
6041
  /**
5953
6042
  * Handle single log message
5954
6043
  */
5955
- handleLog(message, connectionId) {
6044
+ handleLog(message, _connectionId) {
5956
6045
  if (!this.isRecording) {
5957
6046
  return null;
5958
6047
  }
@@ -5978,7 +6067,7 @@ class EventRecorderService {
5978
6067
  /**
5979
6068
  * Handle batch log message
5980
6069
  */
5981
- handleLogBatch(message, connectionId) {
6070
+ handleLogBatch(message, _connectionId) {
5982
6071
  if (!this.isRecording) {
5983
6072
  return null;
5984
6073
  }
@@ -11371,6 +11460,7 @@ const dist = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty
11371
11460
  CanvasConverter,
11372
11461
  ConfigurationLoader,
11373
11462
  ConfigurationValidator,
11463
+ DEFAULT_AUDIT_CONFIG,
11374
11464
  DEFAULT_EXCLUDE_PATTERNS,
11375
11465
  DEFAULT_INCLUDE_PATTERNS,
11376
11466
  EventProcessor,
@@ -11390,28 +11480,40 @@ const dist = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty
11390
11480
  builtinRules,
11391
11481
  connectionTypeReferences,
11392
11482
  createDefaultRulesEngine,
11483
+ createResourceSignature,
11393
11484
  createRulesEngine,
11394
11485
  deadEndStates,
11395
11486
  formatConfigErrors,
11396
11487
  getConfigNameFromFilename: getConfigNameFromFilename$1,
11397
11488
  getDefaultConfig,
11398
11489
  hasPVExtension,
11490
+ isErrorSeverity,
11491
+ isExactMatch,
11492
+ isExistsMatch,
11399
11493
  isFileNode,
11494
+ isGlobMatch,
11400
11495
  isGroupNode,
11401
11496
  isLinkNode,
11497
+ isOneOfMatch,
11498
+ isRegexMatch,
11402
11499
  isRuleDisabled,
11500
+ isStringShorthand,
11403
11501
  isTextNode,
11502
+ isWarnSeverity,
11404
11503
  isYamlFile,
11405
11504
  libraryNodeTypeMatch,
11406
11505
  mergeConfigs,
11407
11506
  minimumNodeSources,
11408
11507
  noUnknownFields,
11508
+ normalizeOperator,
11409
11509
  normalizeSeverity,
11410
11510
  orphanedEdgeTypes,
11411
11511
  orphanedNodeTypes,
11512
+ parseDuration,
11412
11513
  parseYaml,
11413
11514
  requiredMetadata,
11414
11515
  resolveCanvasColor,
11516
+ signatureToKey,
11415
11517
  stateTransitionReferences,
11416
11518
  unreachableStates,
11417
11519
  validActionPatterns,
@@ -47083,6 +47185,119 @@ function requireIconResolver() {
47083
47185
  iconResolver.Icon = Icon2;
47084
47186
  return iconResolver;
47085
47187
  }
47188
+ var NodeTooltip = {};
47189
+ var hasRequiredNodeTooltip;
47190
+ function requireNodeTooltip() {
47191
+ if (hasRequiredNodeTooltip) return NodeTooltip;
47192
+ hasRequiredNodeTooltip = 1;
47193
+ Object.defineProperty(NodeTooltip, "__esModule", { value: true });
47194
+ NodeTooltip.NodeTooltip = void 0;
47195
+ const jsx_runtime_1 = require$$0;
47196
+ const react_1 = React2;
47197
+ const react_dom_1 = require$$2;
47198
+ const NodeTooltip$1 = ({ description, otel, visible, nodeRef }) => {
47199
+ const [position, setPosition] = (0, react_1.useState)(null);
47200
+ (0, react_1.useEffect)(() => {
47201
+ if (visible && (nodeRef == null ? void 0 : nodeRef.current)) {
47202
+ const rect = nodeRef.current.getBoundingClientRect();
47203
+ setPosition({
47204
+ top: rect.bottom + 8,
47205
+ // 8px below the node
47206
+ left: rect.left + rect.width / 2
47207
+ // centered horizontally
47208
+ });
47209
+ } else if (!nodeRef) {
47210
+ setPosition({ top: 0, left: 0 });
47211
+ }
47212
+ }, [visible, nodeRef]);
47213
+ if (!visible)
47214
+ return null;
47215
+ if (!description && !otel)
47216
+ return null;
47217
+ const usePortal = Boolean(nodeRef);
47218
+ const getKindLabel = (kind) => {
47219
+ switch (kind) {
47220
+ case "type":
47221
+ return "Type";
47222
+ case "service":
47223
+ return "Service";
47224
+ case "instance":
47225
+ return "Instance";
47226
+ default:
47227
+ return kind;
47228
+ }
47229
+ };
47230
+ const getKindColor = (kind) => {
47231
+ switch (kind) {
47232
+ case "type":
47233
+ return "#4A90E2";
47234
+ // Blue
47235
+ case "service":
47236
+ return "#7ED321";
47237
+ // Green
47238
+ case "instance":
47239
+ return "#9B59B6";
47240
+ // Purple
47241
+ default:
47242
+ return "#888";
47243
+ }
47244
+ };
47245
+ const tooltipContent = (0, jsx_runtime_1.jsxs)("div", { style: {
47246
+ position: usePortal ? "fixed" : "absolute",
47247
+ top: usePortal ? (position == null ? void 0 : position.top) ?? 0 : "100%",
47248
+ left: usePortal ? (position == null ? void 0 : position.left) ?? 0 : "50%",
47249
+ transform: "translateX(-50%)",
47250
+ marginTop: usePortal ? 0 : "8px",
47251
+ padding: "8px 12px",
47252
+ backgroundColor: "rgba(0, 0, 0, 0.9)",
47253
+ color: "white",
47254
+ borderRadius: "6px",
47255
+ fontSize: "11px",
47256
+ maxWidth: "250px",
47257
+ zIndex: 99999,
47258
+ pointerEvents: "none",
47259
+ boxShadow: "0 4px 12px rgba(0,0,0,0.4)",
47260
+ whiteSpace: "normal",
47261
+ opacity: usePortal ? position ? 1 : 0 : 1
47262
+ }, children: [(0, jsx_runtime_1.jsx)("div", { style: {
47263
+ position: "absolute",
47264
+ top: "-6px",
47265
+ left: "50%",
47266
+ transform: "translateX(-50%)",
47267
+ width: 0,
47268
+ height: 0,
47269
+ borderLeft: "6px solid transparent",
47270
+ borderRight: "6px solid transparent",
47271
+ borderBottom: "6px solid rgba(0, 0, 0, 0.9)"
47272
+ } }), otel && (0, jsx_runtime_1.jsxs)("div", { style: {
47273
+ display: "flex",
47274
+ alignItems: "center",
47275
+ gap: "6px",
47276
+ marginBottom: description ? "6px" : 0
47277
+ }, children: [(0, jsx_runtime_1.jsx)("span", { style: {
47278
+ backgroundColor: getKindColor(otel.kind),
47279
+ color: "white",
47280
+ padding: "2px 6px",
47281
+ borderRadius: "3px",
47282
+ fontSize: "9px",
47283
+ fontWeight: 600,
47284
+ textTransform: "uppercase"
47285
+ }, children: getKindLabel(otel.kind) }), otel.category && (0, jsx_runtime_1.jsx)("span", { style: { color: "rgba(255,255,255,0.7)", fontSize: "10px" }, children: otel.category }), otel.isNew && (0, jsx_runtime_1.jsx)("span", { style: {
47286
+ backgroundColor: "#F5A623",
47287
+ color: "white",
47288
+ padding: "1px 4px",
47289
+ borderRadius: "3px",
47290
+ fontSize: "8px",
47291
+ fontWeight: 600
47292
+ }, children: "NEW" })] }), description && (0, jsx_runtime_1.jsx)("div", { style: { lineHeight: "1.4", color: "rgba(255,255,255,0.9)" }, children: description })] });
47293
+ if (usePortal) {
47294
+ return (0, react_dom_1.createPortal)(tooltipContent, document.body);
47295
+ }
47296
+ return tooltipContent;
47297
+ };
47298
+ NodeTooltip.NodeTooltip = NodeTooltip$1;
47299
+ return NodeTooltip;
47300
+ }
47086
47301
  var hasRequiredCustomNode;
47087
47302
  function requireCustomNode() {
47088
47303
  if (hasRequiredCustomNode) return CustomNode;
@@ -47090,12 +47305,56 @@ function requireCustomNode() {
47090
47305
  Object.defineProperty(CustomNode, "__esModule", { value: true });
47091
47306
  CustomNode.CustomNode = void 0;
47092
47307
  const jsx_runtime_1 = require$$0;
47093
- const react_1 = /* @__PURE__ */ requireUmd();
47308
+ const react_1 = React2;
47309
+ const react_2 = /* @__PURE__ */ requireUmd();
47094
47310
  const iconResolver_1 = requireIconResolver();
47311
+ const NodeTooltip_1 = requireNodeTooltip();
47095
47312
  const CustomNode$1 = ({ data, selected }) => {
47096
47313
  var _a, _b, _c, _d, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n2, _o2;
47314
+ const [isHovered, setIsHovered] = (0, react_1.useState)(false);
47315
+ const nodeRef = (0, react_1.useRef)(null);
47097
47316
  const nodeProps = data;
47098
47317
  const { typeDefinition, state, hasViolations, data: nodeData, animationType, animationDuration = 1e3, editable = false } = nodeProps;
47318
+ const otelInfo = nodeData == null ? void 0 : nodeData.otel;
47319
+ const description = nodeData == null ? void 0 : nodeData.description;
47320
+ const getOtelBadgeColor = (kind) => {
47321
+ switch (kind) {
47322
+ case "type":
47323
+ return "#4A90E2";
47324
+ // Blue
47325
+ case "service":
47326
+ return "#7ED321";
47327
+ // Green
47328
+ case "instance":
47329
+ return "#9B59B6";
47330
+ // Purple
47331
+ default:
47332
+ return "#888";
47333
+ }
47334
+ };
47335
+ const renderOtelBadge = () => {
47336
+ if (!(otelInfo == null ? void 0 : otelInfo.kind))
47337
+ return null;
47338
+ const badgeColor = getOtelBadgeColor(otelInfo.kind);
47339
+ const label = otelInfo.kind.charAt(0).toUpperCase();
47340
+ return (0, jsx_runtime_1.jsx)("div", { style: {
47341
+ position: "absolute",
47342
+ top: -6,
47343
+ right: -6,
47344
+ width: 18,
47345
+ height: 18,
47346
+ borderRadius: "50%",
47347
+ backgroundColor: badgeColor,
47348
+ color: "white",
47349
+ fontSize: "10px",
47350
+ fontWeight: 700,
47351
+ display: "flex",
47352
+ alignItems: "center",
47353
+ justifyContent: "center",
47354
+ boxShadow: "0 1px 3px rgba(0,0,0,0.3)",
47355
+ zIndex: 10
47356
+ }, title: `${otelInfo.kind}${otelInfo.category ? ` (${otelInfo.category})` : ""}`, children: label });
47357
+ };
47099
47358
  if (!typeDefinition) {
47100
47359
  return (0, jsx_runtime_1.jsx)("div", { style: { padding: "10px", border: "2px solid red", borderRadius: "4px" }, children: (0, jsx_runtime_1.jsx)("div", { style: { fontSize: "12px", color: "red" }, children: "Error: Missing node type definition" }) });
47101
47360
  }
@@ -47283,7 +47542,7 @@ function requireCustomNode() {
47283
47542
  }
47284
47543
  return offsetStyle;
47285
47544
  };
47286
- return (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [editable && (0, jsx_runtime_1.jsx)(react_1.NodeResizer, { color: strokeColor, isVisible: selected, minWidth, minHeight, keepAspectRatio, handleStyle: {
47545
+ return (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [editable && (0, jsx_runtime_1.jsx)(react_2.NodeResizer, { color: strokeColor, isVisible: selected, minWidth, minHeight, keepAspectRatio, handleStyle: {
47287
47546
  width: 8,
47288
47547
  height: 8,
47289
47548
  borderRadius: 2,
@@ -47291,7 +47550,7 @@ function requireCustomNode() {
47291
47550
  }, lineStyle: {
47292
47551
  borderWidth: 1,
47293
47552
  zIndex: 20
47294
- } }), (0, jsx_runtime_1.jsx)(react_1.Handle, { type: "target", position: react_1.Position.Top, id: "top", style: getHandleStyle() }), (0, jsx_runtime_1.jsx)(react_1.Handle, { type: "target", position: react_1.Position.Bottom, id: "bottom", style: getHandleStyle() }), (0, jsx_runtime_1.jsx)(react_1.Handle, { type: "target", position: react_1.Position.Left, id: "left", style: getHandleStyle() }), (0, jsx_runtime_1.jsx)(react_1.Handle, { type: "target", position: react_1.Position.Right, id: "right", style: getHandleStyle() }), isHexagon ? (0, jsx_runtime_1.jsx)("div", { style: hexagonBorderStyle, className: animationClass, children: (0, jsx_runtime_1.jsxs)("div", { style: hexagonInnerStyle, children: [icon && (0, jsx_runtime_1.jsx)("div", { style: { display: "flex", justifyContent: "center", alignItems: "center" }, children: (0, iconResolver_1.resolveIcon)(icon, 20) }), (0, jsx_runtime_1.jsx)("div", { style: { textAlign: "center", wordBreak: "break-word" }, children: displayName }), state && (0, jsx_runtime_1.jsx)("div", { style: {
47553
+ } }), (0, jsx_runtime_1.jsx)(react_2.Handle, { type: "target", position: react_2.Position.Top, id: "top", style: getHandleStyle() }), (0, jsx_runtime_1.jsx)(react_2.Handle, { type: "target", position: react_2.Position.Bottom, id: "bottom", style: getHandleStyle() }), (0, jsx_runtime_1.jsx)(react_2.Handle, { type: "target", position: react_2.Position.Left, id: "left", style: getHandleStyle() }), (0, jsx_runtime_1.jsx)(react_2.Handle, { type: "target", position: react_2.Position.Right, id: "right", style: getHandleStyle() }), isHexagon ? (0, jsx_runtime_1.jsxs)("div", { ref: nodeRef, style: { position: "relative", width: "100%", height: "100%" }, onMouseEnter: () => setIsHovered(true), onMouseLeave: () => setIsHovered(false), children: [renderOtelBadge(), (0, jsx_runtime_1.jsx)("div", { style: hexagonBorderStyle, className: animationClass, children: (0, jsx_runtime_1.jsxs)("div", { style: hexagonInnerStyle, children: [icon && (0, jsx_runtime_1.jsx)("div", { style: { display: "flex", justifyContent: "center", alignItems: "center" }, children: (0, iconResolver_1.resolveIcon)(icon, 20) }), (0, jsx_runtime_1.jsx)("div", { style: { textAlign: "center", wordBreak: "break-word" }, children: displayName }), state && (0, jsx_runtime_1.jsx)("div", { style: {
47295
47554
  fontSize: "10px",
47296
47555
  backgroundColor: color,
47297
47556
  color: "white",
@@ -47302,7 +47561,7 @@ function requireCustomNode() {
47302
47561
  fontSize: "10px",
47303
47562
  color: "#D0021B",
47304
47563
  fontWeight: "bold"
47305
- }, children: "⚠️" })] }) }) : isDiamond ? (0, jsx_runtime_1.jsx)("div", { style: diamondBorderStyle, className: animationClass, children: (0, jsx_runtime_1.jsxs)("div", { style: diamondInnerStyle, children: [icon && (0, jsx_runtime_1.jsx)("div", { style: { display: "flex", justifyContent: "center", alignItems: "center" }, children: (0, iconResolver_1.resolveIcon)(icon, 20) }), (0, jsx_runtime_1.jsx)("div", { style: { textAlign: "center", wordBreak: "break-word" }, children: displayName }), state && (0, jsx_runtime_1.jsx)("div", { style: {
47564
+ }, children: "⚠️" })] }) }), (0, jsx_runtime_1.jsx)(NodeTooltip_1.NodeTooltip, { description, otel: otelInfo, visible: isHovered, nodeRef })] }) : isDiamond ? (0, jsx_runtime_1.jsxs)("div", { ref: nodeRef, style: { position: "relative", width: "100%", height: "100%" }, onMouseEnter: () => setIsHovered(true), onMouseLeave: () => setIsHovered(false), children: [renderOtelBadge(), (0, jsx_runtime_1.jsx)("div", { style: diamondBorderStyle, className: animationClass, children: (0, jsx_runtime_1.jsxs)("div", { style: diamondInnerStyle, children: [icon && (0, jsx_runtime_1.jsx)("div", { style: { display: "flex", justifyContent: "center", alignItems: "center" }, children: (0, iconResolver_1.resolveIcon)(icon, 20) }), (0, jsx_runtime_1.jsx)("div", { style: { textAlign: "center", wordBreak: "break-word" }, children: displayName }), state && (0, jsx_runtime_1.jsx)("div", { style: {
47306
47565
  fontSize: "10px",
47307
47566
  backgroundColor: color,
47308
47567
  color: "white",
@@ -47313,7 +47572,7 @@ function requireCustomNode() {
47313
47572
  fontSize: "10px",
47314
47573
  color: "#D0021B",
47315
47574
  fontWeight: "bold"
47316
- }, children: "⚠️" })] }) }) : (0, jsx_runtime_1.jsx)("div", { style: getShapeStyles(), className: animationClass, children: (0, jsx_runtime_1.jsxs)("div", { style: {
47575
+ }, children: "⚠️" })] }) }), (0, jsx_runtime_1.jsx)(NodeTooltip_1.NodeTooltip, { description, otel: otelInfo, visible: isHovered, nodeRef })] }) : (0, jsx_runtime_1.jsxs)("div", { ref: nodeRef, style: { position: "relative", width: "100%", height: "100%" }, onMouseEnter: () => setIsHovered(true), onMouseLeave: () => setIsHovered(false), children: [renderOtelBadge(), (0, jsx_runtime_1.jsx)("div", { style: getShapeStyles(), className: animationClass, children: (0, jsx_runtime_1.jsxs)("div", { style: {
47317
47576
  ...isGroup ? { width: "100%" } : {}
47318
47577
  }, children: [isGroup ? (0, jsx_runtime_1.jsxs)("div", { style: {
47319
47578
  display: "flex",
@@ -47332,7 +47591,7 @@ function requireCustomNode() {
47332
47591
  fontSize: "10px",
47333
47592
  color: "#D0021B",
47334
47593
  fontWeight: "bold"
47335
- }, children: "⚠️" })] }) }), (0, jsx_runtime_1.jsx)(react_1.Handle, { type: "source", position: react_1.Position.Top, id: "top-out", style: getHandleStyle() }), (0, jsx_runtime_1.jsx)(react_1.Handle, { type: "source", position: react_1.Position.Bottom, id: "bottom-out", style: getHandleStyle() }), (0, jsx_runtime_1.jsx)(react_1.Handle, { type: "source", position: react_1.Position.Left, id: "left-out", style: getHandleStyle() }), (0, jsx_runtime_1.jsx)(react_1.Handle, { type: "source", position: react_1.Position.Right, id: "right-out", style: getHandleStyle() }), (0, jsx_runtime_1.jsx)("style", { children: `
47594
+ }, children: "⚠️" })] }) }), (0, jsx_runtime_1.jsx)(NodeTooltip_1.NodeTooltip, { description, otel: otelInfo, visible: isHovered, nodeRef })] }), (0, jsx_runtime_1.jsx)(react_2.Handle, { type: "source", position: react_2.Position.Top, id: "top-out", style: getHandleStyle() }), (0, jsx_runtime_1.jsx)(react_2.Handle, { type: "source", position: react_2.Position.Bottom, id: "bottom-out", style: getHandleStyle() }), (0, jsx_runtime_1.jsx)(react_2.Handle, { type: "source", position: react_2.Position.Left, id: "left-out", style: getHandleStyle() }), (0, jsx_runtime_1.jsx)(react_2.Handle, { type: "source", position: react_2.Position.Right, id: "right-out", style: getHandleStyle() }), (0, jsx_runtime_1.jsx)("style", { children: `
47336
47595
  /* Processing pulse - continuous breathing effect */
47337
47596
  .node-pulse {
47338
47597
  animation: node-pulse ease-in-out infinite;
@@ -48013,7 +48272,7 @@ function requireNodeInfoPanel() {
48013
48272
  "GitPullRequest"
48014
48273
  ];
48015
48274
  const NodeInfoPanel$1 = ({ node, typeDefinition, availableNodeTypes, onClose, onDelete, onUpdate, onSourceClick }) => {
48016
- var _a, _b, _c, _d, _e2, _f, _g, _h, _i;
48275
+ var _a, _b, _c, _d, _e2, _f, _g, _h, _i, _j;
48017
48276
  const { theme } = (0, industry_theme_1.useTheme)();
48018
48277
  const nodeColor = ((_a = node.data) == null ? void 0 : _a.color) || (typeDefinition == null ? void 0 : typeDefinition.color) || theme.colors.primary;
48019
48278
  const canEdit = Boolean(onUpdate);
@@ -48046,10 +48305,13 @@ function requireNodeInfoPanel() {
48046
48305
  "shape",
48047
48306
  "states",
48048
48307
  "actions",
48049
- "nodeType"
48308
+ "nodeType",
48309
+ "otel",
48310
+ "resourceMatch"
48050
48311
  ];
48312
+ const otelInfo = (_d = node.data) == null ? void 0 : _d.otel;
48051
48313
  const nodeDataEntries = node.data ? Object.entries(node.data).filter(([key]) => !internalFields.includes(key)) : [];
48052
- const sources = ((_d = node.data) == null ? void 0 : _d.sources) || [];
48314
+ const sources = ((_e2 = node.data) == null ? void 0 : _e2.sources) || [];
48053
48315
  const handleTypeChange = (newType) => {
48054
48316
  if (onUpdate && newType !== node.type) {
48055
48317
  onUpdate(node.id, { type: newType });
@@ -48095,7 +48357,7 @@ function requireNodeInfoPanel() {
48095
48357
  display: "flex",
48096
48358
  alignItems: "center",
48097
48359
  justifyContent: "center"
48098
- }, children: "×" })] }), ((_e2 = node.data) == null ? void 0 : _e2.description) && (0, jsx_runtime_1.jsxs)("div", { style: { marginBottom: "12px" }, children: [(0, jsx_runtime_1.jsx)("div", { style: { fontSize: "10px", color: theme.colors.textSecondary, marginBottom: "4px" }, children: "Description" }), (0, jsx_runtime_1.jsx)("div", { style: { fontSize: "12px" }, children: String(node.data.description) })] }), sources.length > 0 && (0, jsx_runtime_1.jsxs)("div", { style: { marginBottom: "12px" }, children: [(0, jsx_runtime_1.jsx)("div", { style: { fontSize: "10px", color: theme.colors.textSecondary, marginBottom: "4px" }, children: "Sources" }), (0, jsx_runtime_1.jsx)("div", { style: { display: "flex", flexWrap: "wrap", gap: "4px" }, children: sources.map((source, index2) => onSourceClick ? (0, jsx_runtime_1.jsx)("button", { onClick: () => onSourceClick(node.id, source), style: {
48360
+ }, children: "×" })] }), ((_f = node.data) == null ? void 0 : _f.description) && (0, jsx_runtime_1.jsxs)("div", { style: { marginBottom: "12px" }, children: [(0, jsx_runtime_1.jsx)("div", { style: { fontSize: "10px", color: theme.colors.textSecondary, marginBottom: "4px" }, children: "Description" }), (0, jsx_runtime_1.jsx)("div", { style: { fontSize: "12px" }, children: String(node.data.description) })] }), sources.length > 0 && (0, jsx_runtime_1.jsxs)("div", { style: { marginBottom: "12px" }, children: [(0, jsx_runtime_1.jsx)("div", { style: { fontSize: "10px", color: theme.colors.textSecondary, marginBottom: "4px" }, children: "Sources" }), (0, jsx_runtime_1.jsx)("div", { style: { display: "flex", flexWrap: "wrap", gap: "4px" }, children: sources.map((source, index2) => onSourceClick ? (0, jsx_runtime_1.jsx)("button", { onClick: () => onSourceClick(node.id, source), style: {
48099
48361
  fontSize: "11px",
48100
48362
  padding: "2px 8px",
48101
48363
  backgroundColor: theme.colors.muted,
@@ -48116,7 +48378,25 @@ function requireNodeInfoPanel() {
48116
48378
  backgroundColor: theme.colors.muted,
48117
48379
  borderRadius: "4px",
48118
48380
  color: theme.colors.textSecondary
48119
- }, children: source }, index2)) })] }), (0, jsx_runtime_1.jsxs)("button", { onClick: () => setShowDetails(!showDetails), style: {
48381
+ }, children: source }, index2)) })] }), otelInfo && (0, jsx_runtime_1.jsxs)("div", { style: { marginBottom: "12px" }, children: [(0, jsx_runtime_1.jsx)("div", { style: { fontSize: "10px", color: theme.colors.textSecondary, marginBottom: "4px" }, children: "OpenTelemetry" }), (0, jsx_runtime_1.jsxs)("div", { style: { display: "flex", flexWrap: "wrap", gap: "6px", alignItems: "center" }, children: [otelInfo.kind && (0, jsx_runtime_1.jsx)("span", { style: {
48382
+ fontSize: "10px",
48383
+ fontWeight: 600,
48384
+ padding: "3px 8px",
48385
+ borderRadius: "4px",
48386
+ textTransform: "uppercase",
48387
+ color: "white",
48388
+ backgroundColor: otelInfo.kind === "type" ? "#4A90E2" : otelInfo.kind === "service" ? "#7ED321" : otelInfo.kind === "instance" ? "#9B59B6" : "#888"
48389
+ }, children: otelInfo.kind }), otelInfo.category && (0, jsx_runtime_1.jsx)("span", { style: {
48390
+ fontSize: "11px",
48391
+ color: theme.colors.textSecondary
48392
+ }, children: otelInfo.category }), otelInfo.isNew && (0, jsx_runtime_1.jsx)("span", { style: {
48393
+ fontSize: "9px",
48394
+ fontWeight: 600,
48395
+ padding: "2px 6px",
48396
+ borderRadius: "3px",
48397
+ backgroundColor: "#F5A623",
48398
+ color: "white"
48399
+ }, children: "NEW" })] })] }), (0, jsx_runtime_1.jsxs)("button", { onClick: () => setShowDetails(!showDetails), style: {
48120
48400
  width: "100%",
48121
48401
  padding: "8px",
48122
48402
  backgroundColor: theme.colors.surface,
@@ -48193,11 +48473,11 @@ function requireNodeInfoPanel() {
48193
48473
  }, children: node.type })] }), node.state && (0, jsx_runtime_1.jsxs)("div", { style: { marginBottom: "12px" }, children: [(0, jsx_runtime_1.jsx)("div", { style: { fontSize: "10px", color: theme.colors.textSecondary, marginBottom: "4px" }, children: "State" }), (0, jsx_runtime_1.jsx)("div", { style: {
48194
48474
  fontSize: "12px",
48195
48475
  padding: "4px 8px",
48196
- backgroundColor: ((_g = (_f = typeDefinition == null ? void 0 : typeDefinition.states) == null ? void 0 : _f[node.state]) == null ? void 0 : _g.color) || theme.colors.secondary,
48476
+ backgroundColor: ((_h = (_g = typeDefinition == null ? void 0 : typeDefinition.states) == null ? void 0 : _g[node.state]) == null ? void 0 : _h.color) || theme.colors.secondary,
48197
48477
  color: theme.colors.background,
48198
48478
  borderRadius: "4px",
48199
48479
  display: "inline-block"
48200
- }, children: ((_i = (_h = typeDefinition == null ? void 0 : typeDefinition.states) == null ? void 0 : _h[node.state]) == null ? void 0 : _i.label) || node.state })] }), hasSchemaFields && displayFields.filter((f) => f.field !== nameField).length > 0 && (0, jsx_runtime_1.jsxs)("div", { style: { marginBottom: "12px" }, children: [(0, jsx_runtime_1.jsx)("div", { style: {
48480
+ }, children: ((_j = (_i = typeDefinition == null ? void 0 : typeDefinition.states) == null ? void 0 : _i[node.state]) == null ? void 0 : _j.label) || node.state })] }), hasSchemaFields && displayFields.filter((f) => f.field !== nameField).length > 0 && (0, jsx_runtime_1.jsxs)("div", { style: { marginBottom: "12px" }, children: [(0, jsx_runtime_1.jsx)("div", { style: {
48201
48481
  fontSize: "10px",
48202
48482
  color: theme.colors.textSecondary,
48203
48483
  marginBottom: "8px",
@@ -49370,7 +49650,7 @@ function requireDist() {
49370
49650
  hasRequiredDist = 1;
49371
49651
  (function(exports$1) {
49372
49652
  Object.defineProperty(exports$1, "__esModule", { value: true });
49373
- exports$1.resolveIcon = exports$1.Icon = exports$1.computeOptimalEdgeSides = exports$1.hasCycleBetweenNodes = exports$1.autoLayoutNodes = exports$1.convertToXYFlowEdges = exports$1.convertToXYFlowNodes = exports$1.CustomEdge = exports$1.GenericEdge = exports$1.CustomNode = exports$1.GenericNode = exports$1.ConfigurationSelector = exports$1.NodeInfoPanel = exports$1.EdgeInfoPanel = exports$1.MetricsDashboard = exports$1.EventLog = exports$1.GraphRenderer = void 0;
49653
+ exports$1.resolveIcon = exports$1.Icon = exports$1.computeOptimalEdgeSides = exports$1.hasCycleBetweenNodes = exports$1.autoLayoutNodes = exports$1.convertToXYFlowEdges = exports$1.convertToXYFlowNodes = exports$1.NodeTooltip = exports$1.CustomEdge = exports$1.GenericEdge = exports$1.CustomNode = exports$1.GenericNode = exports$1.ConfigurationSelector = exports$1.NodeInfoPanel = exports$1.EdgeInfoPanel = exports$1.MetricsDashboard = exports$1.EventLog = exports$1.GraphRenderer = void 0;
49374
49654
  var GraphRenderer_1 = requireGraphRenderer();
49375
49655
  Object.defineProperty(exports$1, "GraphRenderer", { enumerable: true, get: function() {
49376
49656
  return GraphRenderer_1.GraphRenderer;
@@ -49411,6 +49691,10 @@ function requireDist() {
49411
49691
  Object.defineProperty(exports$1, "CustomEdge", { enumerable: true, get: function() {
49412
49692
  return CustomEdge_1.CustomEdge;
49413
49693
  } });
49694
+ var NodeTooltip_1 = requireNodeTooltip();
49695
+ Object.defineProperty(exports$1, "NodeTooltip", { enumerable: true, get: function() {
49696
+ return NodeTooltip_1.NodeTooltip;
49697
+ } });
49414
49698
  var graphConverter_1 = requireGraphConverter();
49415
49699
  Object.defineProperty(exports$1, "convertToXYFlowNodes", { enumerable: true, get: function() {
49416
49700
  return graphConverter_1.convertToXYFlowNodes;