UNPKG

@macrostrat/column-components

Version:

React rendering primitives for stratigraphic columns

3 lines (2 loc) 4.13 kB
import{createContext as e}from"react";import{StatefulComponent as t}from"@macrostrat/ui-components";import i from"@macrostrat/hyper";var n=globalThis,r={},o={},s=n.parcelRequire94c2;null==s&&((s=function(e){if(e in r)return r[e].exports;if(e in o){var t=o[e];delete o[e];var i={id:e,exports:{}};return r[e]=i,t.call(i.exports,i,i.exports),i.exports}var n=Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n}).register=function(e,t){o[e]=t},n.parcelRequire94c2=s),s.register;var h={};h=s("daZiC").getBundleURL("jFTsb")+"utils.5eb13014.js";var a={};a=s("daZiC").getBundleURL("jFTsb")+"label-primitives.abcfa596.js";var d=s("aVUB5");let l=e(null),p=function(){let e=[];return function(t){let i=0,n=e.length+1;for(let r=0,o=0<=n;o?r<=n:r>=n;o?r++:r--)if(null==e[r]&&(e[r]=t.height),e[r]<t.height){let n=t.top_height||t.height;e[r]=n,i=r;break}return i}},u=e=>function(t){let[i,n]=e.domain(),r=t.top_height||t.height;return i<n?r>=i&&t.height<=n:r<=i&&t.height>=n};class c extends t{static #e=this.contextType=d.ColumnContext;static #t=this.defaultProps={paddingLeft:60,estimatedTextHeight:(e,t)=>(e.note,12)};constructor(e){super(e),this.computeContextValue=this.computeContextValue.bind(this),this.savedRendererForWidth=this.savedRendererForWidth.bind(this),this.generatePath=this.generatePath.bind(this),this.createNodeForNote=this.createNodeForNote.bind(this),this.computeForceLayout=this.computeForceLayout.bind(this),this.registerHeight=this.registerHeight.bind(this),this.updateNotes=this.updateNotes.bind(this),this.componentDidMount=this.componentDidMount.bind(this),this.componentDidUpdate=this.componentDidUpdate.bind(this);let{noteComponent:t}=this.props;this.state={notes:[],elementHeights:{},columnIndex:{},nodes:{},generatePath:this.generatePath,createNodeForNote:this.createNodeForNote,noteComponent:t}}render(){let{children:e,width:t}=this.props;return i(l.Provider,{value:this.state},i(d.ColumnLayoutProvider,{width:t},e))}computeContextValue(){let{width:e,paddingLeft:t}=this.props,{scaleClamped:i}=this.context,n={paddingLeft:t,scale:i,width:e,registerHeight:this.registerHeight,generatePath:this.generatePath},r=new a.Renderer({direction:"right",layerGap:t,nodeHeight:5});return this.setState({renderer:r,...n})}savedRendererForWidth(e){return null==this._rendererIndex&&(this._rendererIndex={}),null==this._rendererIndex[e]&&(this._rendererIndex[e]=new a.Renderer({direction:"right",layerGap:e,nodeHeight:5})),this._rendererIndex[e]}generatePath(e,t){let{paddingLeft:i}=this.props,n=this.savedRendererForWidth(i-t);try{return n.generatePath(e)}catch(e){return null}}createNodeForNote(e){let{notes:t,elementHeights:i}=this.state,{scaleClamped:n}=this.context,{id:r}=e,o=i[r]||10,s=n(e.height);if((0,h.hasSpan)(e)){let t=[s-5,n(e.top_height)+5];if(t[0]-t[1]>0)return new a.FlexibleNode(t,o)}return new a.Node(s,o)}computeForceLayout(e,t){let{notes:i,nodes:n,elementHeights:r}=this.state,{pixelHeight:o}=this.context,{width:s,paddingLeft:h,forceOptions:d}=this.props;if(0===i.length)return;let l=Object.keys(n).length===i.length;null==t&&(t={});let p=r===t.elementHeights||[];if(l&&p)return;let u=new a.Force({minPos:0,maxPos:o,nodeSpacing:0,...d}),c=i.map(this.createNodeForNote);u.nodes(c).compute();let g=u.nodes()??[],m={};for(let e=0;e<g.length;e++){let t=g[e];m[i[e].id]=t}return this.updateState({nodes:{$set:m}})}registerHeight(e,t){if(null==t)return;let{elementHeights:i}=this.state;return i[e]=t,this.updateState({elementHeights:{$set:i}})}updateNotes(){let{scaleClamped:e}=this.context,t=this.props.notes.filter(u(e)).sort((e,t)=>e.height-t.height),i=t.map(p());return this.setState({notes:t,columnIndex:i})}componentDidMount(){return this._previousContext=null,this.updateNotes(),this.computeContextValue()}componentDidUpdate(e,t){this.props.notes!==e.notes&&this.updateNotes();let{noteComponent:i}=this.props;if(i!==e.noteComponent&&this.setState({noteComponent:i}),this.computeForceLayout.call(e,t),this.props.notes!==e.notes&&this.context!==this._previousContext)return this.computeContextValue(),this._previousContext=this.context}} //# sourceMappingURL=layout.a0997bea.js.map