{"version":3,"file":"index.cjs","sources":["../../src/lithology/index.ts"],"sourcesContent":["import React, { useContext } from \"react\";\nimport h from \"@macrostrat/hyper\";\nimport classNames from \"classnames\";\nimport {\n  SimpleFrame,\n  GrainsizeFrame,\n  ClippingFrame,\n  UUIDComponent,\n  useUUID,\n} from \"../frame\";\nimport {\n  FaciesContext,\n  ColumnContext,\n  ColumnLayoutContext,\n  ColumnLayoutProvider,\n  ColumnDivision,\n  ColumnLayoutCtx,\n  useColumn,\n  useColumnLayout,\n} from \"../context\";\nimport { GeologicPattern, PatternType } from \"./patterns\";\nimport tex from \"react-svg-textures\";\n\nconst Lines = tex.Lines;\n\nconst symbolIndex = {\n  \"dolomite-limestone\": 641,\n  lime_mudstone: 627,\n  sandstone: 607,\n  siltstone: 616,\n  \"dolomitic siltstone\": 616,\n  shale: 620,\n  limestone: 627,\n  dolomite: 642,\n  conglomerate: 602,\n  \"dolomite-mudstone\": 642,\n  mudstone: 620,\n  \"sandy-dolomite\": 645,\n  quartzite: 702,\n};\n\nconst isCarbonateSymbol = function (d) {\n  /*\n  Does this FGDC pattern correspond to a carbonate rock?\n  */\n  if (d < 627) {\n    return false;\n  }\n  if (d > 648) {\n    return false;\n  }\n  return true;\n};\n\nconst defaultResolveID = function (d) {\n  // Changed pattern to lithology\n  if (d == null) return null;\n  const pat = d.fgdc_pattern ?? symbolIndex[d.pattern] ?? d.pattern;\n  if (pat == null) return null;\n  return `${pat}`;\n};\n\nconst carbonateResolveID = function (d) {\n  // Just whether a carbonate or not\n  const v = defaultResolveID(d);\n  if (v == null) {\n    return v;\n  }\n  if (isCarbonateSymbol(v)) {\n    return 627;\n  } else {\n    return -1;\n  }\n};\n\nconst __divisionSize = function (d) {\n  let { bottom, top } = d;\n  if (top < bottom) {\n    [top, bottom] = [bottom, top];\n  }\n  return [bottom, top];\n};\n\ninterface ColumnRectProps {\n  division: any;\n  padWidth?: boolean;\n  key?: string;\n  width: number;\n  className?: string;\n  fill?: string;\n}\n\nfunction ColumnRect(props: ColumnRectProps) {\n  let { division: d, padWidth = false, key, width, ...rest } = props;\n  const scale = useContext(ColumnContext).scale;\n  const [bottom, top] = __divisionSize(d);\n  const y = scale(top);\n  let x = 0;\n  if (padWidth) {\n    x -= 5;\n    width += 10;\n  }\n\n  const height = scale(bottom) - y;\n  if (key == null) {\n    key = d.id;\n  }\n  return h(\"rect\", { x, y, width, height, key, ...rest });\n}\n\nconst expandDivisionsByKey = function (\n  divisions: ColumnDivision[],\n  key: any,\n): ColumnDivision[] | null {\n  const __ = [{ ...divisions[0] }];\n  for (let d of Array.from(divisions)) {\n    const ix = __.length - 1;\n    const shouldSkip = d[key] == null || d[key] === __[ix][key];\n    if (shouldSkip) {\n      __[ix].top = d.top;\n    } else {\n      __.push({ ...d });\n    }\n  }\n  return __;\n  if (__.length === 1) {\n    return null;\n  }\n};\n\ninterface ParameterIntervalsProps {\n  padWidth: boolean;\n  parameter: string;\n  fillForInterval(param: any, division: ColumnDivision): any;\n}\n\nfunction ParameterIntervals(props: ParameterIntervalsProps) {\n  const { divisions, width } = useContext(ColumnLayoutContext);\n  const { padWidth, parameter: key, fillForInterval } = props;\n\n  const newDivisions = expandDivisionsByKey(divisions, key);\n  if (newDivisions.length === 1) {\n    return null;\n  }\n  return h(\n    \"g\",\n    { className: key },\n    newDivisions.map((div) =>\n      h(ColumnRect, {\n        className: classNames(key, div.id),\n        division: div,\n        padWidth,\n        fill: fillForInterval(div[key], div),\n        width,\n      }),\n    ),\n  );\n}\n\nconst FaciesIntervals = function (props) {\n  const { getFaciesColor } = useContext(FaciesContext) as any;\n  return h(ParameterIntervals, {\n    parameter: \"facies\",\n    fillForInterval(param, division) {\n      const { facies, facies_color } = division;\n      return getFaciesColor(facies) || facies_color;\n    },\n    ...props,\n  });\n};\n\nconst FaciesColumnInner = FaciesIntervals;\n\nfunction CoveredOverlay({\n  color = \"rgba(0,0,0,0.5)\",\n  patternSize = 9,\n  strokeWidth = 3,\n}) {\n  const UUID = useUUID();\n  const { divisions, width } = useColumnLayout();\n  const fill = `url(#${UUID}-covered)`;\n  const coveredDivs = divisions.filter((d) => d.covered);\n\n  return h(\"g.covered-overlay\", {}, [\n    h(\"defs\", [\n      h(Lines, {\n        id: `${UUID}-covered`,\n        size: patternSize,\n        strokeWidth,\n        stroke: color,\n      }),\n    ]),\n    h(\n      \"g.main\",\n      coveredDivs.map((d) => {\n        return h(ColumnRect, { division: d, width, fill });\n      }),\n    ),\n  ]);\n}\n\nconst LithologySymbolDefs = function (props) {\n  let { resolveID, divisions, UUID, scalePattern } = props;\n  if (scalePattern == null) {\n    scalePattern = () => 1;\n  }\n  if (divisions == null) {\n    ({ divisions } = useContext(ColumnContext));\n  }\n\n  const __ = divisions\n    .map((d) => resolveID(d))\n    .filter((x, i, arr) => arr.indexOf(x) === i);\n\n  return h(\n    \"defs\",\n    __.map(function (id, i) {\n      if (id === -1) {\n        return null;\n      }\n      let sz = 100;\n      if (scalePattern != null) {\n        const scalar = scalePattern(id);\n        sz *= scalar;\n      }\n      return h(GeologicPattern, {\n        key: i,\n        prefix: UUID,\n        id,\n        width: sz,\n        height: sz,\n      });\n    }),\n  );\n};\n\nclass LithologyBoxes extends UUIDComponent<any> {\n  static contextType = ColumnLayoutContext;\n  static defaultProps = {\n    resolveID: defaultResolveID,\n    minimumHeight: 0,\n  };\n  declare context: ColumnLayoutCtx<ColumnDivision>;\n  constructor(props) {\n    super(props);\n    this.constructLithologyDivisions =\n      this.constructLithologyDivisions.bind(this);\n    this.renderEach = this.renderEach.bind(this);\n  }\n\n  constructLithologyDivisions() {\n    let d, patternID;\n    const { divisions } = this.context;\n    const { resolveID, minimumHeight } = this.props;\n    const __ = [];\n    for (d of Array.from(divisions)) {\n      const ix = __.length - 1;\n      patternID = resolveID(d);\n      if (ix === -1) {\n        __.push({ ...d, patternID });\n        continue;\n      }\n      const sameAsLast = patternID === resolveID(__[ix]);\n      const shouldSkip = patternID == null || sameAsLast;\n      if (shouldSkip) {\n        // Set the top of this division\n        __[ix].top = Math.max(__[ix].top, d.top);\n      } else {\n        __.push({ ...d, patternID });\n      }\n    }\n\n    // Allow removing of items by minimum height\n    if (minimumHeight > 0) {\n      const nextVals = [];\n      for (let i = 0; i < __.length; i++) {\n        d = __[i];\n        const heightTooSmall = d.top - d.bottom < minimumHeight;\n        if (heightTooSmall && __[i + 1] != null) {\n          var name;\n          __[i + 1].bottom = d.bottom;\n          if (__[(name = i + 1)].patternID == null) {\n            __[name].patternID = resolveID(d);\n          }\n        } else {\n          nextVals.push(d);\n        }\n      }\n      return nextVals;\n    }\n    return __;\n  }\n\n  renderEach(d) {\n    const { width } = this.context;\n    const className = classNames(\n      {\n        definite: d.definite_boundary,\n        covered: d.covered,\n      },\n      \"lithology\",\n    );\n    let fill = `url(#${this.UUID}-${d.patternID})`;\n    if (d.patternID === -1) {\n      fill = \"transparent\";\n    }\n    return h(ColumnRect, { width, division: d, className, fill });\n  }\n\n  render() {\n    const divisions = this.constructLithologyDivisions();\n    const { resolveID } = this.props;\n    return h(\"g.lithology\", [\n      h(LithologySymbolDefs, {\n        divisions,\n        resolveID,\n        UUID: this.UUID,\n      }),\n      h(\"g\", divisions.map(this.renderEach)),\n    ]);\n  }\n}\n\nconst LithologyColumnInner = LithologyBoxes;\n\nexport interface LithologyColumnProps {\n  width: number;\n  left?: number;\n  children?: React.ReactNode;\n  clipToFrame?: boolean;\n  shiftY?: number;\n}\n\nexport function LithologyColumn(props: LithologyColumnProps) {\n  const { left = 0, shiftY = 0, width, children, clipToFrame = true } = props;\n\n  return h(\n    ColumnLayoutProvider,\n    { width },\n    h(\n      ClippingFrame,\n      {\n        className: \"lithology-column\",\n        left,\n        shiftY,\n        frame: SimpleFrame,\n        clip: clipToFrame,\n      },\n      children,\n    ),\n  );\n}\n\nconst simplifiedResolveID = function (d) {\n  const p = symbolIndex[d.fill_pattern];\n  if (p != null) {\n    return p;\n  }\n  const fp = d.fill_pattern;\n  // Special case for shales since we probably want to emphasize lithology\n  if (parseInt(fp) === 624) {\n    return defaultResolveID(d);\n  } else {\n    return fp;\n  }\n};\n\nconst SimplifiedLithologyColumn = (props) =>\n  h(LithologyColumnInner, {\n    resolveID: simplifiedResolveID,\n    ...props,\n  });\n\nconst GeneralizedSectionColumn = function (props) {\n  let { children, frame, ...rest } = props;\n  if (frame == null) {\n    frame = GrainsizeFrame;\n  }\n  return h(\n    ClippingFrame,\n    {\n      className: \"lithology-column\",\n      frame,\n      ...rest,\n    },\n    children,\n  );\n};\n\nconst CarbonateDivisions = (props) =>\n  h(LithologyColumnInner, {\n    resolveID: carbonateResolveID,\n    ...props,\n  });\n\nexport * from \"./patterns\";\nexport * from \"./column-patterns\";\nexport {\n  ParameterIntervals,\n  LithologyBoxes,\n  GeneralizedSectionColumn,\n  defaultResolveID,\n  FaciesColumnInner,\n  LithologySymbolDefs,\n  LithologyColumnInner,\n  CarbonateDivisions,\n  SimplifiedLithologyColumn,\n  CoveredOverlay,\n  SimpleFrame,\n  GrainsizeFrame,\n  ColumnRect,\n  expandDivisionsByKey,\n  symbolIndex,\n  FaciesIntervals,\n};\n"],"names":["tex","useContext","ColumnContext","h","ColumnLayoutContext","classNames","FaciesContext","facies","useUUID","useColumnLayout","GeologicPattern","UUIDComponent","ColumnLayoutProvider","ClippingFrame","SimpleFrame","frame","GrainsizeFrame"],"mappings":"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"}