/*** Copyright (c) Meta Platforms, Inc. and affiliates.** This source code is licensed under the MIT license found in the* LICENSE file in the root directory of this source tree.** @flow*/import * as React from 'react';
import styles from './ChartNode.css';
type Props = {
color: string,
height: number,
isDimmed?: boolean,
label: string,
onClick: (event: SyntheticMouseEvent<any>) => mixed,
onDoubleClick?: (event: SyntheticMouseEvent<any>) => mixed,
onMouseEnter: (event: SyntheticMouseEvent<any>) => mixed,
onMouseLeave: (event: SyntheticMouseEvent<any>) => mixed,
placeLabelAboveNode?: boolean,
textStyle?: Object,
width: number,
x: number,
y: number,
};const minWidthToDisplay = 35;
export default function ChartNode({
color,height,isDimmed = false,
label,onClick,onMouseEnter,onMouseLeave,onDoubleClick,textStyle,width,x,y,}: Props): React.Node {
return (
<g className={styles.Group} transform={`translate(${x},${y})`}>
<rect
width={width}
height={height}
fill={color}
onClick={onClick}
onMouseEnter={onMouseEnter}
onMouseLeave={onMouseLeave}
onDoubleClick={onDoubleClick}
className={styles.Rect}
style={{
opacity: isDimmed ? 0.5 : 1,
}}/>{width >= minWidthToDisplay && (<foreignObject
width={width}
height={height}
className={styles.ForeignObject}
style={{
paddingLeft: x < 0 ? -x : 0,
opacity: isDimmed ? 0.75 : 1,
display: width < minWidthToDisplay ? 'none' : 'block',
}}y={0}>
<div className={styles.Div} style={textStyle}>
{label}
</div>
</foreignObject>
)}
</g>
);}