UNPKG

@macrostrat/column-components

Version:

React rendering primitives for stratigraphic columns

94 lines (87 loc) 3.91 kB
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