UNPKG

@macrostrat/column-components

Version:

React rendering primitives for stratigraphic columns

74 lines (73 loc) 2.27 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const React = require("react"); const h = require("@macrostrat/hyper"); const patterns = require("./patterns.cjs"); const frame = require("../frame.cjs"); const _interopDefault = (e) => e && e.__esModule ? e : { default: e }; const h__default = /* @__PURE__ */ _interopDefault(h); const PatternDefsContext = React.createContext(null); const GeologicPatternDefs = function(props) { let { patternIDs, scalePattern } = props; const UUID = props.UUID ?? frame.useUUID(); return h__default.default( "defs", Array.from(patternIDs).map(function(id, i) { if (id === -1) { return null; } let sz = 100; if (scalePattern != null) { sz *= scalePattern(id); } return h__default.default(patterns.GeologicPattern, { key: i, prefix: UUID, id, width: sz, height: sz }); }) ); }; function PatternDefsProvider(props) { const { scalePattern, children } = props; const [patternIDs, setPatternIDs] = React.useState(/* @__PURE__ */ new Set()); const trackPattern = React.useCallback( (p) => { if (patternIDs.has(p)) return; let newSet = new Set(patternIDs); newSet.add(p); setPatternIDs(newSet); }, [patternIDs] ); const value = React.useMemo(() => { return { trackPattern }; }, [trackPattern]); return h__default.default( frame.UUIDProvider, h__default.default( PatternDefsContext.Provider, { value }, h__default.default("g.patterns", [ h__default.default(GeologicPatternDefs, { scalePattern, patternIDs }), children ]) ) ); } function useGeologicPattern(patternID, fallback = "#aaa") { const ctx1 = React.useContext(patterns.GeologicPatternContext); const ctx = React.useContext(PatternDefsContext); const UUID = frame.useUUID(); React.useEffect(() => { ctx?.trackPattern(patternID); }, [patternID, ctx]); let v = ctx1?.resolvePattern(patternID); if (v == null) return fallback; return `url(#${UUID}-${patternID})`; } exports.PatternDefsProvider = PatternDefsProvider; exports.useGeologicPattern = useGeologicPattern; //# sourceMappingURL=column-patterns.cjs.map