UNPKG

@macrostrat/column-components

Version:

React rendering primitives for stratigraphic columns

722 lines (720 loc) 24.5 kB
import { ScaleContinuousNumeric, ScaleLinear, ScaleOrdinal } from "d3-scale"; import React, { Component, ReactNode, Context, ProviderProps, FunctionComponentElement, ReactSVGElement, JSXElementConstructor, ReactElement, JSX, ElementType, SVGAttributes, RefObject, RefAttributes, ForwardRefExoticComponent, ComponentElement, ComponentType, MutableRefObject, PropsWithChildren, DOMElement, DOMAttributes, MouseEvent, InputHTMLAttributes, DetailedReactHTMLElement } from "react"; import { Spec } from "immutability-helper"; import { BoxProps } from "ui-box"; import { EditableText, EditableTextProps, Slider, SliderProps, Popover, DefaultPopoverTargetHTMLProps, PopoverProps } from "@blueprintjs/core"; import { ColumnLayoutProviderProps as _ColumnLayoutProviderProps1 } from "column-components/src"; type HeightRange = [number, number]; type ColumnScale = ScaleContinuousNumeric<HeightRange, number> | any; type ColumnScaleClamped = ScaleLinear<number, number>; export interface ColumnDivision { section_id: string; id: number; surface: number; bottom: number; top: number; flooding_surface_order?: number; grainsize?: string; covered?: boolean; definite_boundary?: boolean; facies?: string; } export enum ColumnAxisType { AGE = "age", HEIGHT = "height", DEPTH = "depth", ORDINAL = "ordinal" } export interface ColumnCtx<T extends ColumnDivision> { divisions: T[]; scaleClamped: ColumnScaleClamped; pixelsPerMeter: number; scale: ColumnScale; axisType?: ColumnAxisType; pixelHeight?: number; zoom: number; } export const ColumnContext: React.Context<ColumnCtx<ColumnDivision>>; export interface ColumnProviderProps<T extends ColumnDivision> { pixelsPerMeter?: number; divisions: T[]; range?: HeightRange | any; height?: number; zoom?: number; width?: number; axisType?: ColumnAxisType; children?: any; } export function ColumnProvider<T extends ColumnDivision>(props: ColumnProviderProps<T>): React.FunctionComponentElement<React.ProviderProps<ColumnCtx<ColumnDivision>>>; export const useColumn: () => ColumnCtx<ColumnDivision>; export const useColumnDivisions: () => ColumnDivision[]; export interface ColumnLayoutCtx<T extends ColumnDivision> extends ColumnCtx<T> { width: number; grainSizes?: string[]; grainsizeScale?: (d: string) => number; xScale: any; widthForDivision: (d: ColumnDivision) => number; } export const ColumnLayoutContext: Context<ColumnLayoutCtx<ColumnDivision>>; export interface ColumnLayoutProviderProps<T extends ColumnDivision> extends Partial<ColumnCtx<T>> { grainSizes?: string[]; grainsizeScale?: (d: string) => number; width: number; xScale?: any; children?: ReactNode; } export function ColumnLayoutProvider<T extends ColumnDivision>({ children, width, grainSizes, grainsizeScale, xScale, }: ColumnLayoutProviderProps<T>): FunctionComponentElement<ProviderProps<ColumnLayoutCtx<ColumnDivision>>>; export interface CrossAxisLayoutProviderProps { width: number; domain: number[]; range?: number[]; children?: ReactNode; } export class CrossAxisLayoutProvider extends Component<CrossAxisLayoutProviderProps> { static contextType: Context<ColumnCtx<ColumnDivision>>; context: ColumnCtx<ColumnDivision>; render(): FunctionComponentElement<ColumnLayoutProviderProps<ColumnDivision>>; } export type GrainsizeLayoutProps = { grainSizes: string[]; children?: React.ReactNode; width?: number; grainsizeScaleStart?: number; grainsizeScaleRange?: [number, number]; tickPositions?: number[]; }; export function GrainsizeLayoutProvider({ width, grainSizes, grainsizeScaleStart, grainsizeScaleRange, tickPositions, children, }: GrainsizeLayoutProps): FunctionComponentElement<ColumnLayoutProviderProps<ColumnDivision>>; export function useColumnLayout(): ColumnLayoutCtx<ColumnDivision>; declare class StatefulComponent<Props, State> extends Component<Props, State> { constructor(props: Props); updateState(spec: Spec<State>): void; } interface StrictPadding { paddingLeft: number; paddingRight: number; paddingTop: number; paddingBottom: number; } interface Padding extends Partial<StrictPadding> { paddingV?: number; paddingH?: number; padding?: number; } interface StrictMargin { marginLeft: number; marginRight: number; marginTop: number; marginBottom: number; } interface Margin extends Partial<StrictMargin> { marginV?: number; marginH?: number; margin?: number; } declare namespace InfiniteScrollView { var defaultProps: { hasMore(res: any): boolean; getItems(d: any): any; getCount(d: any): any; getNextParams(response: any, params: any): any; placeholder: (p: APIPlaceholderProps) => React.FunctionComponentElement<$$parcel$import$208<HTMLElement>>; }; } type ErrorBoundaryProps = { description?: string; title?: string; fallback?: ReactNode; override?: boolean; onCatch?(error: Error, info: any): void; }; type ErrorBoundaryState = { error: Error | null; }; declare class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> { constructor(props: any); static getDerivedStateFromError(error: any): { error: any; }; componentDidCatch(error: any, info: any): void; render(): any; } declare namespace ThreeColumnLayout { var Panels: typeof SidePanel; } export const FaciesContext: Context<any>; export class FaciesProvider extends StatefulComponent<any, any> { constructor(props: any); getFaciesColor(id: any): any; setFaciesColor(id: any, color: any): void; render(): FunctionComponentElement<ProviderProps<any>>; } export const SettingsProvider: any, useSettings: any; export const updateSettings: (func: any) => () => any; export const LithologyContext: Context<{ lithologies: any[]; }>; export function LithologyProvider(props: any): FunctionComponentElement<ProviderProps<{ lithologies: any[]; }>>; export interface AssetPathCtx { resolveSymbol: (symbol: string) => string | null; } export const AssetPathContext: Context<AssetPathCtx>; interface AssetPathProviderProps extends AssetPathCtx { children: React.ReactNode; } export function AssetPathProvider(props: AssetPathProviderProps): FunctionComponentElement<ProviderProps<AssetPathCtx>>; export const ModelEditorContext: Context<any>; interface ModelEditorProviderProps { model: any; onConfirmChanges: (model: any) => void; onDelete: (model: any) => void; logUpdates?: boolean; alwaysConfirm?: boolean; children: ReactNode; } export function ModelEditorProvider(props: ModelEditorProviderProps): FunctionComponentElement<ProviderProps<any>>; export const useModelEditor: () => any; declare class UUIDComponent<T> extends Component<T> { UUID: string; constructor(props: T); } export const useUUID: () => string; interface FrameProps { id: string; className?: string; } export function SimpleFrame(props: FrameProps): ReactSVGElement; interface GrainsizeFrameProps { id: string; } export function GrainsizeFrame(props: GrainsizeFrameProps): ReactElement<{ id: string; key: string; d: any; }, string | JSXElementConstructor<any>>; interface ClipToFrameProps { left: number; shiftY: number; onClick?: () => void; frame?: any; width?: number; className?: string; children?: ReactNode; clip?: boolean; } export class LocalStorage { name: string; constructor(name: any); get(): object; set(obj: object): void; } export function ColumnBox(props: any): FunctionComponentElement<BoxProps<ElementType<any, keyof JSX.IntrinsicElements>>>; interface ColumnScrollerProps { scrollToHeight: number; alignment: "center" | "top" | "bottom"; animated: boolean; onScrolled: (height: number) => void; paddingTop: number; scrollContainer: () => HTMLElement; } interface ScrollToOpts { animated?: boolean; alignment?: "center" | "top" | "bottom"; } export class ColumnScroller extends Component<ColumnScrollerProps> { constructor(props: any); static contextType: Context<ColumnCtx<ColumnDivision>>; context: ColumnCtx<ColumnDivision>; render(): FunctionComponentElement<BoxProps<ElementType<any, keyof JSX.IntrinsicElements>>>; scrollTo(height: any, opts?: ScrollToOpts): any; componentDidMount(): void; componentDidUpdate(prevProps: any): void; } export const SVGNamespaces: { xmlns: string; xmlnsXlink: string; }; interface SVGProps extends SVGAttributes<any>, Padding, Margin { innerHeight?: number; innerWidth?: number; innerRef?: RefObject<SVGElement>; } interface SVGPropsWithNumericSize extends Omit<SVGProps, "width" | "height"> { width?: number; height?: number; } export const SVG: ForwardRefExoticComponent<SVGPropsWithNumericSize & RefAttributes<SVGElement>>; export const ForeignObject: (props: any) => ReactSVGElement; export const ColumnSVG: (props: SVGPropsWithNumericSize) => FunctionComponentElement<SVGPropsWithNumericSize & RefAttributes<SVGElement>>; interface ColumnImageProps { src: string; insets?: { top?: number; right?: number; bottom?: number; left?: number; }; clip?: boolean; } export function ColumnImage(props: ColumnImageProps): ReactElement<{ style: { overflow: string; }; }, string | JSXElementConstructor<any>>; declare const Renderer: any; interface NoteLayoutProviderProps { notes: any[]; width: number; paddingLeft: number; noteComponent: any; forceOptions: object; children?: ReactNode; } interface NoteLayoutState { notes?: any[]; elementHeights?: object; columnIndex?: object; nodes?: object; updateHeight?: Function; generatePath: Function; createNodeForNote?: Function; noteComponent?: any; renderer?: typeof Renderer; } declare class NoteLayoutProvider extends StatefulComponent<NoteLayoutProviderProps, NoteLayoutState> { static contextType: Context<ColumnCtx<ColumnDivision>>; static defaultProps: { paddingLeft: number; estimatedTextHeight(note: any, width: any): number; }; context: ColumnCtx<ColumnDivision>; _previousContext: ColumnCtx<ColumnDivision>; _rendererIndex: object; constructor(props: any); render(): FunctionComponentElement<ProviderProps<any>>; computeContextValue(): void; savedRendererForWidth(width: any): any; generatePath(node: any, pixelOffset: any): any; createNodeForNote(note: any): any; computeForceLayout(prevProps: any, prevState: any): void; updateHeight(id: any, height: any): void; updateNotes(): void; componentDidMount(): void; componentDidUpdate(prevProps: any, prevState: any): ColumnCtx<ColumnDivision>; } export interface NoteData { height: number; note: string; top_height?: number; symbol?: string; id?: string | number; } interface NodeConnectorOptions { deltaConnectorAttachment?: number; } export const NoteEditorContext: Context<{ inEditMode: boolean; }>; interface NoteEditorProps { note: NoteData; } export const NoteTextEditor: (props: NoteEditorProps) => ComponentElement<EditableTextProps, EditableText>; export const NoteEditor: (props: any) => ComponentElement<any, ErrorBoundary>; interface NoteComponentProps { visibility: string; note: NoteData; onClick: Function; } export function NoteComponent(props: NoteComponentProps): ReactElement<{ style: { visibility: string; }; onClick: Function; }, string | JSXElementConstructor<any>>; interface NotesColumnBaseProps extends NodeConnectorOptions { width?: number; paddingLeft?: number; transform?: string; notes?: NoteData[]; noteComponent?: ComponentType<any>; onClickNote?: (note: NoteData) => void; children?: ReactNode; } export function StaticNotesColumn(props: NotesColumnBaseProps): ComponentElement<any, NoteLayoutProvider>; export function NotesColumn(props: any): FunctionComponentElement<{}>; export interface NotesColumnProps { editable?: boolean; } export const PhotoLibraryContext: Context<PhotoLibraryProviderProps>; interface PhotoData { id: number; src: string; caption?: string; } interface PhotoLibraryProviderProps { photos: PhotoData[] | null; computePhotoPath: (src: string) => string; } export class PhotoLibraryProvider extends Component<PhotoLibraryProviderProps & { children: ReactNode; }> { static defaultProps: { computePhotoPath: (src: any) => any; }; render(): FunctionComponentElement<ProviderProps<PhotoLibraryProviderProps>>; } export function PhotoOverlay(props: any): FunctionComponentElement<any>; interface ColumnAxisProps { ticks?: number; tickArguments?: any; tickValues?: any; tickFormat?: any; tickSize?: any; tickSizeInner?: any; tickSizeOuter?: any; tickPadding?: any; tickSpacing?: number; showLabel?: (d: any) => boolean; showDomain?: boolean; className?: string; } interface AgeAxisProps extends ColumnAxisProps { scale?: ScaleLinear<number, number>; } export function ColumnAxis(props: ColumnAxisProps): FunctionComponentElement<AgeAxisProps>; export function AgeAxis(props: AgeAxisProps): ReactElement<{ className: string; ref: MutableRefObject<any>; }, string | JSXElementConstructor<any>>; interface IGeologicPatternBase { prefix: string; color?: string; id: string; width: number; height: number; backgroundColor?: string; name?: string; } interface IGeologicPatternProvider { resolvePattern(string: any): string; children?: ReactNode; } export const GeologicPatternContext: Context<any>; export const GeologicPatternProvider: (props: IGeologicPatternProvider) => FunctionComponentElement<ProviderProps<any>>; export enum PatternType { Vector = "vector", Raster = "raster" } interface IGeologicPattern extends IGeologicPatternBase { type?: PatternType; invert?: boolean; } export const GeologicPattern: (props: IGeologicPattern) => FunctionComponentElement<IGeologicPatternBase>; type LithologySymbolCtx = any; type LithProviderProps = PropsWithChildren<LithologySymbolCtx>; export function PatternDefsProvider(props: LithProviderProps): FunctionComponentElement<{ children: any; }>; export function useGeologicPattern(patternID: string, fallback?: string): string; export const symbolIndex: { "dolomite-limestone": number; lime_mudstone: number; sandstone: number; siltstone: number; "dolomitic siltstone": number; shale: number; limestone: number; dolomite: number; conglomerate: number; "dolomite-mudstone": number; mudstone: number; "sandy-dolomite": number; quartzite: number; }; export const defaultResolveID: (d: any) => string; interface ColumnRectProps { division: any; padWidth?: boolean; key?: string; width: number; className?: string; fill?: string; } export function ColumnRect(props: ColumnRectProps): React.ReactElement<{ className?: string; fill?: string; x: number; y: any; width: number; height: number; key: string; }, string | React.JSXElementConstructor<any>>; export const expandDivisionsByKey: (divisions: ColumnDivision[], key: any) => ColumnDivision[] | null; interface ParameterIntervalsProps { padWidth: boolean; parameter: string; fillForInterval(param: any, division: ColumnDivision): any; } export function ParameterIntervals(props: ParameterIntervalsProps): React.ReactSVGElement; export const FaciesIntervals: (props: any) => React.FunctionComponentElement<ParameterIntervalsProps>; export const FaciesColumnInner: (props: any) => React.FunctionComponentElement<ParameterIntervalsProps>; export class CoveredOverlay extends UUIDComponent<{}> { static contextType: React.Context<ColumnLayoutCtx<ColumnDivision>>; context: ColumnLayoutCtx<ColumnDivision>; render(): React.DOMElement<{}, Element>; } export const LithologySymbolDefs: (props: any) => React.DOMElement<any, Element>; export class LithologyBoxes extends UUIDComponent<any> { static contextType: React.Context<ColumnLayoutCtx<ColumnDivision>>; static defaultProps: { resolveID: (d: any) => string; minimumHeight: number; }; context: ColumnLayoutCtx<ColumnDivision>; constructor(props: any); constructLithologyDivisions(): any[]; renderEach(d: any): React.FunctionComponentElement<ColumnRectProps>; render(): React.DOMElement<React.DOMAttributes<Element>, Element>; } export const LithologyColumnInner: typeof LithologyBoxes; export interface LithologyColumnProps { width: number; left?: number; children?: React.ReactNode; clipToFrame?: boolean; shiftY?: number; } export function LithologyColumn(props: LithologyColumnProps): React.FunctionComponentElement<_ColumnLayoutProviderProps1<ColumnDivision>>; export const SimplifiedLithologyColumn: (props: any) => React.ComponentElement<any, LithologyBoxes>; export const GeneralizedSectionColumn: (props: any) => React.FunctionComponentElement<ClipToFrameProps>; export const CarbonateDivisions: (props: any) => React.ComponentElement<any, LithologyBoxes>; export function FloodingSurface(props: any): DOMElement<null, Element>; interface TriangleBarsProps { offsetLeft: number; lineWidth: number; order: number; orders: number[]; minOrder: number; maxOrder: number; } export class TriangleBars extends UUIDComponent<TriangleBarsProps> { constructor(props: TriangleBarsProps); static contextType: Context<ColumnCtx<ColumnDivision>>; static defaultProps: { offsetLeft: number; lineWidth: number; order: number; }; context: ColumnCtx<ColumnDivision>; render(): DOMElement<{}, Element>; renderSurfaces(order: any, index: any): ReactElement<{ clipPath: string; transform: string; key: string; }, string | JSXElementConstructor<any>>; } interface SymbolColumnProps { width: number; left: number; symbols: any[]; } export class SymbolColumn extends UUIDComponent<SymbolColumnProps> { constructor(props: any); static contextType: Context<ColumnCtx<ColumnDivision>>; context: ColumnCtx<ColumnDivision>; static defaultProps: { width: number; left: number; }; render(): ReactElement<{ transform: any; }, string | JSXElementConstructor<any>>; renderSymbol(d: any): ReactSVGElement; } export class SymbolLegend extends Component { static contextType: Context<AssetPathCtx>; context: AssetPathCtx; render(): DOMElement<DOMAttributes<Element>, Element>; } type color = string; interface OverlayBoxProps { division: ColumnDivision; background: color; className: string; children?: ReactNode; onClick?: (evt: MouseEvent) => void; } interface DivisionEditOverlayProps { left: number; top: number; showInfoBox: boolean; onClick(ctx: { event?: MouseEvent; height: number; division?: ColumnDivision; }): void; allowEditing: boolean; renderEditorPopup(d: ColumnDivision): ReactNode; scaleToGrainsize: boolean; editingInterval: ColumnDivision; color: color; width: number; popoverWidth: number; selectedHeight: number; } interface DivisionEditOverlayState { height: number | null; hoveredDivision: ColumnDivision | null; popoverIsOpen: boolean; } export class DivisionEditOverlay extends Component<DivisionEditOverlayProps, DivisionEditOverlayState> { static contextType: Context<ColumnLayoutCtx<ColumnDivision>>; static defaultProps: { onHoverInterval(): void; onClick(): void; left: number; top: number; showInfoBox: boolean; allowEditing: boolean; renderEditorPopup(): any; color: string; popoverWidth: number; }; timeout: any; context: ColumnLayoutCtx<ColumnDivision>; constructor(props: DivisionEditOverlayProps); onHoverInterval(event: any): any; removeHoverBox(): any; heightForEvent(event: any): any; onEditInterval(event: any): void; onClick(event: any): void; renderCursorLine(): ReactElement<{ style: { top: number; height: number; border: string; width: number; position: string; pointerEvents: string; }; }, string | JSXElementConstructor<any>>; renderHoveredBox(): FunctionComponentElement<OverlayBoxProps>; closePopover(): void; render(): FunctionComponentElement<BoxProps<ElementType<any, keyof JSX.IntrinsicElements>>>; } interface PickerControlProps { states: { label: string; value: string; }[]; activeState: string; vertical: boolean; isNullable: boolean; onUpdate: (value: string) => void; } export class PickerControl extends Component<PickerControlProps> { constructor(props: any); static defaultProps: { states: { label: string; value: string; }[]; vertical: boolean; isNullable: boolean; }; render(): DOMElement<DOMAttributes<Element>, Element>; onUpdate(value: any): () => void; } export function SurfaceOrderSlider(props: any): ComponentElement<SliderProps, Slider>; export function HorizontalPicker(props: any): ComponentElement<any, PickerControl>; interface BoundaryStyleProps { interval: ColumnDivision; onUpdate: (d: any) => void; } export class BoundaryStyleControl extends Component<BoundaryStyleProps> { render(): FunctionComponentElement<any>; } export const LabeledControl: (props: any) => DOMElement<DOMAttributes<Element>, Element>; export const RaisedSelect: (props: any) => DetailedReactHTMLElement<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>; interface IntervalEditorTitleProps { showID: boolean; title: string; interval: ColumnDivision; heightFormat: string; } export const IntervalEditorTitle: (props: IntervalEditorTitleProps) => DOMElement<DOMAttributes<Element>, Element>; export const BasicFaciesSwatch: ({ facies: d, ...rest }: { [x: string]: any; facies: any; }) => ReactElement<{ style: { backgroundColor: any; width: string; height: string; }; }, string | JSXElementConstructor<any>>; interface FaciesSwatchProps { isEditable: boolean; facies: { id: number; color: string; } | null; } export class FaciesSwatch extends Component<FaciesSwatchProps> { static defaultProps: { isEditable: boolean; facies: any; }; constructor(props: any); render(): ComponentElement<PopoverProps<DefaultPopoverTargetHTMLProps>, Popover<DefaultPopoverTargetHTMLProps>> | FunctionComponentElement<{ [x: string]: any; facies: any; }>; } interface FaciesPickerProps { interval: ColumnDivision; onChange: (f: number) => void; } export class FaciesPicker extends Component<FaciesPickerProps> { static contextType: Context<any>; context: any; render(): FunctionComponentElement<any>; } type FaciesData = any; export const FaciesCard: ({ facies }: { facies: any; }) => DOMElement<DOMAttributes<Element>, Element>; interface FaciesDescriptionSmallProps { selected: string; onClick: (d: any) => void; isEditable: boolean; } export class FaciesDescriptionSmall extends Component<FaciesDescriptionSmallProps> { constructor(props: FaciesDescriptionSmallProps); static contextType: Context<any>; static defaultProps: { selected: any; isEditable: boolean; }; context: any; renderEach(d: FaciesData): DOMElement<{ key: any; onClick: any; style: any; className: string; }, Element>; render(): DOMElement<DOMAttributes<Element>, Element>; } export const LithologyPicker: (props: any) => FunctionComponentElement<any>; export const LithologySymbolPicker: (props: any) => ReactElement<{ className: string; }, string | JSXElementConstructor<any>>; export const grainSizes: string[]; export const createGrainsizeScale: (range: any) => ScaleOrdinal<string, unknown, never>; export function GrainsizeAxis({ height }: { height?: number; }): ReactElement<{ className: string; }, string | JSXElementConstructor<any>>; //# sourceMappingURL=index.d.ts.map