({
node,
role,
}: {
node: ToolNode
role?: "source" | "destination"
})
| 107 | } |
| 108 | |
| 109 | function ToolNodeIcon({ |
| 110 | node, |
| 111 | role, |
| 112 | }: { |
| 113 | node: ToolNode |
| 114 | role?: "source" | "destination" |
| 115 | }) { |
| 116 | const Icon = node.icon |
| 117 | |
| 118 | return ( |
| 119 | <div |
| 120 | className="login-tool-node-wrap" |
| 121 | style={{ left: `${node.x}%`, top: `${node.y}%` }} |
| 122 | > |
| 123 | <div |
| 124 | className={cn( |
| 125 | "login-tool-node", |
| 126 | role === "source" && "login-tool-node-source", |
| 127 | role === "destination" && "login-tool-node-destination", |
| 128 | )} |
| 129 | title={node.name} |
| 130 | > |
| 131 | {Icon ? ( |
| 132 | <Icon className="login-tool-node-icon shrink-0" /> |
| 133 | ) : node.iconSrc ? ( |
| 134 | <Image |
| 135 | src={node.iconSrc} |
| 136 | alt="" |
| 137 | width={22} |
| 138 | height={22} |
| 139 | className="login-tool-node-icon shrink-0" |
| 140 | /> |
| 141 | ) : null} |
| 142 | </div> |
| 143 | <span |
| 144 | className={cn( |
| 145 | "login-tool-node-label", |
| 146 | dmSansClassName(), |
| 147 | role && "login-tool-node-label-visible", |
| 148 | )} |
| 149 | aria-hidden={!role} |
| 150 | > |
| 151 | {node.name} |
| 152 | </span> |
| 153 | </div> |
| 154 | ) |
| 155 | } |
| 156 | |
| 157 | function MemoryChip() { |
| 158 | return ( |
nothing calls this directly
no test coverage detected
searching dependent graphs…