UNPKG

@macrostrat/column-components

Version:

React rendering primitives for stratigraphic columns

127 lines (119 loc) 5.11 kB
import {ColumnContext as $3d6090591c2b69a7$export$c862fd4ea8e0b386, useColumnDivisions as $3d6090591c2b69a7$export$2c18fb594663f471} from "./column-components.4d9efbc6.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.eee57923.js.map