@dfnivo/sankey
Version:
<a href="https://nivo.rocks"><img alt="nivo" src="https://raw.githubusercontent.com/plouc/nivo/master/nivo.png" width="216" height="68"/></a>
143 lines (142 loc) • 6 kB
JavaScript
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function _objectSpread(target) {
for(var i = 1; i < arguments.length; i++){
var source = arguments[i] != null ? arguments[i] : {};
var ownKeys = Object.keys(source);
if (typeof Object.getOwnPropertySymbols === "function") {
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
}));
}
ownKeys.forEach(function(key) {
_defineProperty(target, key, source[key]);
});
}
return target;
}
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
if (enumerableOnly) {
symbols = symbols.filter(function(sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
});
}
keys.push.apply(keys, symbols);
}
return keys;
}
function _objectSpreadProps(target, source) {
source = source != null ? source : {};
if (Object.getOwnPropertyDescriptors) {
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
} else {
ownKeys(Object(source)).forEach(function(key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}
return target;
}
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
import { useSprings, animated } from "@react-spring/web";
import { useTheme, useMotionConfig } from "@dfnivo/core";
export var SankeyLabels = function(param) {
var nodes = param.nodes, layout = param.layout, width = param.width, height = param.height, labelPosition = param.labelPosition, labelPadding = param.labelPadding, labelOrientation = param.labelOrientation, getLabelTextColor = param.getLabelTextColor;
var theme = useTheme();
var labelRotation = labelOrientation === "vertical" ? -90 : 0;
var labels = nodes.map(function(node) {
var x;
var y;
var textAnchor;
if (layout === "horizontal") {
y = node.y + node.height / 2;
if (node.x < width / 2) {
if (labelPosition === "inside") {
var _node_x1;
x = ((_node_x1 = node.x1) !== null && _node_x1 !== void 0 ? _node_x1 : 0) + labelPadding;
textAnchor = labelOrientation === "vertical" ? "middle" : "start";
} else {
x = node.x - labelPadding;
textAnchor = labelOrientation === "vertical" ? "middle" : "end";
}
} else {
if (labelPosition === "inside") {
x = node.x - labelPadding;
textAnchor = labelOrientation === "vertical" ? "middle" : "end";
} else {
var _node_x11;
x = ((_node_x11 = node.x1) !== null && _node_x11 !== void 0 ? _node_x11 : 0) + labelPadding;
textAnchor = labelOrientation === "vertical" ? "middle" : "start";
}
}
} else if (layout === "vertical") {
x = node.x + node.width / 2;
if (node.y < height / 2) {
if (labelPosition === "inside") {
var _node_y1;
y = ((_node_y1 = node.y1) !== null && _node_y1 !== void 0 ? _node_y1 : 0) + labelPadding;
textAnchor = labelOrientation === "vertical" ? "end" : "middle";
} else {
y = node.y - labelPadding;
textAnchor = labelOrientation === "vertical" ? "start" : "middle";
}
} else {
if (labelPosition === "inside") {
y = node.y - labelPadding;
textAnchor = labelOrientation === "vertical" ? "start" : "middle";
} else {
var _node_y11;
y = ((_node_y11 = node.y1) !== null && _node_y11 !== void 0 ? _node_y11 : 0) + labelPadding;
textAnchor = labelOrientation === "vertical" ? "end" : "middle";
}
}
}
return {
id: node.id,
label: node.label,
x: x,
y: y,
textAnchor: textAnchor,
color: getLabelTextColor(node)
};
});
var _useMotionConfig = useMotionConfig(), animate = _useMotionConfig.animate, springConfig = _useMotionConfig.config;
var springs = useSprings(labels.length, labels.map(function(label) {
return {
transform: "translate(".concat(label.x, ", ").concat(label.y, ") rotate(").concat(labelRotation, ")"),
color: label.color,
config: springConfig,
immediate: !animate
};
}));
return /*#__PURE__*/ _jsx(_Fragment, {
children: springs.map(function(animatedProps, index) {
var _theme_labels;
var label = labels[index];
return /*#__PURE__*/ _jsx(animated.text, {
dominantBaseline: "central",
textAnchor: label.textAnchor,
transform: animatedProps.transform,
style: _objectSpreadProps(_objectSpread({}, (_theme_labels = theme.labels) === null || _theme_labels === void 0 ? void 0 : _theme_labels.text), {
fill: animatedProps.color,
pointerEvents: "none"
}),
children: label.label
}, label.id);
})
});
};
//# sourceMappingURL=SankeyLabels.js.map