@macrostrat/column-components
Version:
React rendering primitives for stratigraphic columns
127 lines (119 loc) • 5.11 kB
JavaScript
import {ColumnContext as $3d6090591c2b69a7$export$c862fd4ea8e0b386, useColumnDivisions as $3d6090591c2b69a7$export$2c18fb594663f471} from "./column-components.645ec888.js";
import {scaleLinear as $5I8OZ$scaleLinear, scaleOrdinal as $5I8OZ$scaleOrdinal} from "d3-scale";
import {createContext as $5I8OZ$createContext, useContext as $5I8OZ$useContext, Component as $5I8OZ$Component, useMemo as $5I8OZ$useMemo, useCallback as $5I8OZ$useCallback} from "react";
import $5I8OZ$macrostrathyper from "@macrostrat/hyper";
const $8b6957b3378402ff$export$8878fe30827b59a6 = (0, $5I8OZ$createContext)({
scale: (0, $5I8OZ$scaleLinear)(),
scaleClamped: (0, $5I8OZ$scaleLinear)().clamp(true),
width: 0,
divisions: [],
grainSizes: [],
grainsizeScale: (d)=>40,
xScale: null,
widthForDivision: (d)=>0,
pixelsPerMeter: 1,
zoom: 1
});
function $8b6957b3378402ff$export$15b77c63191ccb3f({ children: children, width: width, grainSizes: grainSizes = [], grainsizeScale: grainsizeScale = (d)=>40, xScale: xScale }) {
const ctx = (0, $5I8OZ$useContext)((0, $3d6090591c2b69a7$export$c862fd4ea8e0b386));
return (0, $5I8OZ$macrostrathyper)($8b6957b3378402ff$export$8878fe30827b59a6.Provider, {
value: {
...ctx,
width: width,
grainSizes: grainSizes,
grainsizeScale: grainsizeScale,
xScale: xScale,
widthForDivision: (d)=>width
}
}, children);
}
class $8b6957b3378402ff$export$e5a3fc518bbfccdb extends (0, $5I8OZ$Component) {
static{
this.contextType = (0, $3d6090591c2b69a7$export$c862fd4ea8e0b386);
}
render() {
let { domain: domain, range: range, width: width, children: children } = this.props;
if (range == null) range = [
0,
width
];
const xScale = (0, $5I8OZ$scaleLinear)().domain(domain).range(range);
return (0, $5I8OZ$macrostrathyper)($8b6957b3378402ff$export$15b77c63191ccb3f, {
...this.context,
xScale: xScale,
width: width,
children: children
});
}
}
function $8b6957b3378402ff$export$66a95965bfbc151f({ width: width, grainSizes: grainSizes = [
"ms",
"s",
"vf",
"f",
"m",
"c",
"vc",
"p"
], grainsizeScaleStart: grainsizeScaleStart = 50, grainsizeScaleRange: grainsizeScaleRange, tickPositions: tickPositions, children: children }) {
/**
Right now this provides a ColumnLayoutContext
but it could be reworked to provide a
separate "GrainsizeLayoutContext" if that seemed
appropriate.
*/ if (grainsizeScaleRange == null) console.warn("GrainsizeLayoutProvider: grainsizeScaleStart and width are deprecated in favor of grainsizeScaleRange");
grainsizeScaleRange ??= [
grainsizeScaleStart,
width
];
const divisions = (0, $3d6090591c2b69a7$export$2c18fb594663f471)();
const grainsizeScale = (0, $5I8OZ$useMemo)(()=>{
const scale = (0, $5I8OZ$scaleLinear)().domain([
0,
grainSizes.length - 1
]).range(grainsizeScaleRange);
tickPositions ??= grainSizes.map((d, i)=>scale(i));
return (0, $5I8OZ$scaleOrdinal)().domain(grainSizes).range(tickPositions);
}, [
grainSizes,
grainsizeScaleRange,
tickPositions
]);
// This function should probably be moved up a level
const grainsizeForDivision = (0, $5I8OZ$useCallback)((division)=>{
let ix = divisions.indexOf(division);
// Search backwards through divisions
while(ix > 0){
const { grainsize: grainsize } = divisions[ix];
if (grainsize != null) return grainsize;
ix -= 1;
}
}, [
divisions
]);
const widthForDivision = (0, $5I8OZ$useCallback)((division)=>{
if (division == null) return width;
return grainsizeScale(grainsizeForDivision(division));
}, [
grainsizeForDivision,
grainsizeScale,
width
]);
// This is slow to run each iteration
return (0, $5I8OZ$macrostrathyper)($8b6957b3378402ff$export$15b77c63191ccb3f, {
width: width,
grainSizes: grainSizes,
grainsizeScale: grainsizeScale,
grainsizeScaleStart: grainsizeScaleStart,
grainsizeScaleRange: grainsizeScaleRange,
grainsizeForDivision: grainsizeForDivision,
widthForDivision: widthForDivision
}, children);
}
function $8b6957b3378402ff$export$b95655e575bb494e() {
const ctx = (0, $5I8OZ$useContext)($8b6957b3378402ff$export$8878fe30827b59a6);
if (ctx == null) throw new Error("useColumnLayout must be used within a ColumnLayoutProvider");
return ctx;
}
export {$8b6957b3378402ff$export$8878fe30827b59a6 as ColumnLayoutContext, $8b6957b3378402ff$export$15b77c63191ccb3f as ColumnLayoutProvider, $8b6957b3378402ff$export$e5a3fc518bbfccdb as CrossAxisLayoutProvider, $8b6957b3378402ff$export$66a95965bfbc151f as GrainsizeLayoutProvider, $8b6957b3378402ff$export$b95655e575bb494e as useColumnLayout};
//# sourceMappingURL=column-components.6288ecc9.js.map