@macrostrat/column-components
Version:
React rendering primitives for stratigraphic columns
85 lines (78 loc) • 3.51 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", ...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`
const pixelHeight = height * pixelsPerMeter * zoom;
const scale = (0, $a7vjn$scaleLinear)().domain(range).range([
pixelHeight,
0
]);
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.645ec888.js.map