@macrostrat/column-components
Version:
React rendering primitives for stratigraphic columns
94 lines (87 loc) • 3.91 kB
JavaScript
import {scaleLinear as $a7vjn$scaleLinear} from "d3-scale";
import $a7vjn$react, {createContext as $a7vjn$createContext, useMemo as $a7vjn$useMemo, useContext as $a7vjn$useContext} from "react";
import $a7vjn$macrostrathyper from "@macrostrat/hyper";
var $3d6090591c2b69a7$export$a23ea24c801a72ee = /*#__PURE__*/ function(ColumnAxisType) {
ColumnAxisType["AGE"] = "age";
ColumnAxisType["HEIGHT"] = "height";
ColumnAxisType["DEPTH"] = "depth";
ColumnAxisType["ORDINAL"] = "ordinal";
return ColumnAxisType;
}($3d6090591c2b69a7$export$a23ea24c801a72ee || {});
const $3d6090591c2b69a7$export$c862fd4ea8e0b386 = (0, $a7vjn$createContext)({
scale: (0, $a7vjn$scaleLinear)(),
divisions: [],
scaleClamped: (0, $a7vjn$scaleLinear)().clamp(true),
pixelsPerMeter: 1,
zoom: 1
});
function $3d6090591c2b69a7$export$2c4a9b04f799f2b9(props) {
/**
Lays out a column on its Y (height) axis.
This component would be swapped to provide eventual generalization to a Wheeler-diagram
(time-domain) framework.
*/ let { children: children, pixelsPerMeter: pixelsPerMeter = 20, zoom: zoom = 1, height: height, range: range, divisions: divisions = [], width: width = 150, axisType: axisType = "height", scale: _scale, ...rest } = props;
// Check if "rest" actually changed
// This is a hack to avoid re-rendering the column
// when the "rest" props change
const restStr = JSON.stringify(rest);
const restRef = (0, $a7vjn$react).useRef(null);
if (restStr !== restRef.current) {
restRef.current = restStr;
if (Object.keys(rest).length > 0) console.warn("Passing extra properties to ColumnProvider is deprecated:", rest);
}
//# Calculate correct range and height
// Range overrides height if set
const value = (0, $a7vjn$useMemo)(()=>{
if (range != null) height = Math.abs(range[1] - range[0]);
else range = [
0,
height
];
// same as the old `innerHeight`
let scale = _scale;
let pixelHeight;
if (scale == null) {
pixelHeight = height * pixelsPerMeter * zoom;
scale = (0, $a7vjn$scaleLinear)().domain(range).range([
pixelHeight,
0
]);
} else {
pixelHeight = Math.abs(scale.range()[1] - scale.range()[0]);
// Remove any offset that might exist from paddings, scale breaks, etc.
const r1 = scale.range().map((d)=>d - scale.range()[0]);
scale = _scale.copy().range(r1);
}
const scaleClamped = scale.copy().clamp(true);
return {
pixelsPerMeter: pixelsPerMeter,
pixelHeight: pixelHeight,
zoom: zoom,
range: range,
height: height,
scale: scale,
scaleClamped: scaleClamped,
divisions: divisions,
width: width,
axisType: axisType,
...rest
};
}, [
axisType,
height,
pixelsPerMeter,
range,
zoom,
divisions,
width,
restRef.current
]);
return (0, $a7vjn$macrostrathyper)($3d6090591c2b69a7$export$c862fd4ea8e0b386.Provider, {
value: value
}, children);
}
const $3d6090591c2b69a7$export$ba0a914f5e13434b = ()=>(0, $a7vjn$useContext)($3d6090591c2b69a7$export$c862fd4ea8e0b386);
const $3d6090591c2b69a7$export$2c18fb594663f471 = ()=>(0, $a7vjn$useContext)($3d6090591c2b69a7$export$c862fd4ea8e0b386).divisions;
export {$3d6090591c2b69a7$export$a23ea24c801a72ee as ColumnAxisType, $3d6090591c2b69a7$export$c862fd4ea8e0b386 as ColumnContext, $3d6090591c2b69a7$export$2c4a9b04f799f2b9 as ColumnProvider, $3d6090591c2b69a7$export$ba0a914f5e13434b as useColumn, $3d6090591c2b69a7$export$2c18fb594663f471 as useColumnDivisions};
//# sourceMappingURL=column-components.4d9efbc6.js.map