{"version":3,"file":"column-patterns.cjs","sources":["../../src/lithology/column-patterns.ts"],"sourcesContent":["import {\n  useContext,\n  createContext,\n  useState,\n  useCallback,\n  useEffect,\n  useMemo,\n  PropsWithChildren,\n} from \"react\";\nimport h from \"@macrostrat/hyper\";\nimport { GeologicPattern, GeologicPatternContext } from \"./patterns\";\nimport { UUIDProvider, useUUID } from \"../frame\";\n\ninterface PatternDefsCtx {\n  trackPattern(id: string): void;\n}\n\nconst PatternDefsContext = createContext<PatternDefsCtx | null>(null);\n\ninterface GeologicPatternProps {\n  patternIDs: Set<string | -1>;\n  scalePattern?(_: string): number;\n  UUID?: string;\n}\n\nconst GeologicPatternDefs = function (props: GeologicPatternProps) {\n  let { patternIDs, scalePattern } = props;\n  const UUID = props.UUID ?? useUUID();\n\n  return h(\n    \"defs\",\n    Array.from(patternIDs).map(function (id, i) {\n      if (id === -1) {\n        return null;\n      }\n      let sz = 100;\n      if (scalePattern != null) {\n        sz *= scalePattern(id);\n      }\n      return h(GeologicPattern, {\n        key: i,\n        prefix: UUID,\n        id,\n        width: sz,\n        height: sz,\n      });\n    }),\n  );\n};\n\ntype LithologySymbolCtx = any;\n\ntype LithProviderProps = PropsWithChildren<LithologySymbolCtx>;\n\nfunction PatternDefsProvider(props: LithProviderProps) {\n  /** A next-generation provider for lithology patterns in the context of an SVG.\n   *  We should consider generalizing this further to work without needing the \"resolveID\" function.\n   */\n  const { scalePattern, children } = props;\n  const [patternIDs, setPatternIDs] = useState<Set<string>>(new Set());\n\n  const trackPattern = useCallback(\n    (p: string) => {\n      if (patternIDs.has(p)) return;\n      let newSet = new Set(patternIDs);\n      newSet.add(p);\n      setPatternIDs(newSet);\n    },\n    [patternIDs],\n  );\n\n  const value = useMemo(() => {\n    return { trackPattern };\n  }, [trackPattern]);\n\n  return h(\n    UUIDProvider,\n    h(\n      PatternDefsContext.Provider,\n      { value },\n      h(\"g.patterns\", [\n        h(GeologicPatternDefs, { scalePattern, patternIDs }),\n        children,\n      ]),\n    ),\n  );\n}\n\nfunction useGeologicPattern(patternID: string, fallback: string = \"#aaa\") {\n  const ctx1 = useContext(GeologicPatternContext);\n  const ctx = useContext(PatternDefsContext);\n  const UUID = useUUID();\n  useEffect(() => {\n    ctx?.trackPattern(patternID);\n  }, [patternID, ctx]);\n  let v = ctx1?.resolvePattern(patternID);\n  if (v == null) return fallback;\n\n  return `url(#${UUID}-${patternID})`;\n}\n\nexport { PatternDefsProvider, useGeologicPattern };\n"],"names":["createContext","useUUID","h","GeologicPattern","useState","useCallback","useMemo","UUIDProvider","useContext","GeologicPatternContext","useEffect"],"mappings":";;;;;;;;AAiBA,MAAM,qBAAqBA,MAAAA,cAAqC,IAAI;AAQpE,MAAM,sBAAsB,SAAU,OAA6B;AACjE,MAAI,EAAE,YAAY,aAAA,IAAiB;AACnC,QAAM,OAAO,MAAM,QAAQC,cAAA;AAE3B,SAAOC,WAAAA;AAAAA,IACL;AAAA,IACA,MAAM,KAAK,UAAU,EAAE,IAAI,SAAU,IAAI,GAAG;AAC1C,UAAI,OAAO,IAAI;AACb,eAAO;AAAA,MACT;AACA,UAAI,KAAK;AACT,UAAI,gBAAgB,MAAM;AACxB,cAAM,aAAa,EAAE;AAAA,MACvB;AACA,aAAOA,WAAAA,QAAEC,SAAAA,iBAAiB;AAAA,QACxB,KAAK;AAAA,QACL,QAAQ;AAAA,QACR;AAAA,QACA,OAAO;AAAA,QACP,QAAQ;AAAA,MAAA,CACT;AAAA,IACH,CAAC;AAAA,EAAA;AAEL;AAMA,SAAS,oBAAoB,OAA0B;AAIrD,QAAM,EAAE,cAAc,SAAA,IAAa;AACnC,QAAM,CAAC,YAAY,aAAa,IAAIC,MAAAA,SAAsB,oBAAI,KAAK;AAEnE,QAAM,eAAeC,MAAAA;AAAAA,IACnB,CAAC,MAAc;AACb,UAAI,WAAW,IAAI,CAAC,EAAG;AACvB,UAAI,SAAS,IAAI,IAAI,UAAU;AAC/B,aAAO,IAAI,CAAC;AACZ,oBAAc,MAAM;AAAA,IACtB;AAAA,IACA,CAAC,UAAU;AAAA,EAAA;AAGb,QAAM,QAAQC,MAAAA,QAAQ,MAAM;AAC1B,WAAO,EAAE,aAAA;AAAA,EACX,GAAG,CAAC,YAAY,CAAC;AAEjB,SAAOJ,WAAAA;AAAAA,IACLK,MAAAA;AAAAA,IACAL,WAAAA;AAAAA,MACE,mBAAmB;AAAA,MACnB,EAAE,MAAA;AAAA,MACFA,WAAAA,QAAE,cAAc;AAAA,QACdA,WAAAA,QAAE,qBAAqB,EAAE,cAAc,YAAY;AAAA,QACnD;AAAA,MAAA,CACD;AAAA,IAAA;AAAA,EACH;AAEJ;AAEA,SAAS,mBAAmB,WAAmB,WAAmB,QAAQ;AACxE,QAAM,OAAOM,MAAAA,WAAWC,+BAAsB;AAC9C,QAAM,MAAMD,MAAAA,WAAW,kBAAkB;AACzC,QAAM,OAAOP,MAAAA,QAAA;AACbS,QAAAA,UAAU,MAAM;AACd,SAAK,aAAa,SAAS;AAAA,EAC7B,GAAG,CAAC,WAAW,GAAG,CAAC;AACnB,MAAI,IAAI,MAAM,eAAe,SAAS;AACtC,MAAI,KAAK,KAAM,QAAO;AAEtB,SAAO,QAAQ,IAAI,IAAI,SAAS;AAClC;;;"}