@macrostrat/column-views 2.3.0 → 2.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/CHANGELOG.md +9 -2
  2. package/dist/esm/{column-views.c3c7901a.js → column-views.029ea8f1.js} +6 -3
  3. package/dist/esm/column-views.029ea8f1.js.map +1 -0
  4. package/dist/esm/{column-views.5eb4e6ff.js → column-views.0a010643.js} +2 -2
  5. package/dist/esm/column-views.0a010643.js.map +1 -0
  6. package/dist/esm/{column-views.44373a90.js → column-views.18aac6a5.js} +2 -2
  7. package/dist/esm/{column-views.44373a90.js.map → column-views.18aac6a5.js.map} +1 -1
  8. package/dist/esm/{column-views.322790f3.js → column-views.24060b85.js} +5 -9
  9. package/dist/esm/column-views.24060b85.js.map +1 -0
  10. package/dist/esm/{column-views.de433f18.js → column-views.26e0e0b6.js} +3 -3
  11. package/dist/esm/column-views.26e0e0b6.js.map +1 -0
  12. package/dist/esm/column-views.2c45a7b5.js.map +1 -1
  13. package/dist/esm/{column-views.92575b87.js → column-views.2f979aee.js} +2 -2
  14. package/dist/esm/{column-views.92575b87.js.map → column-views.2f979aee.js.map} +1 -1
  15. package/dist/esm/{column-views.2bac03a2.js → column-views.3f1cdc18.js} +2 -2
  16. package/dist/esm/{column-views.2bac03a2.js.map → column-views.3f1cdc18.js.map} +1 -1
  17. package/dist/esm/{column-views.40094dd9.js → column-views.4685ea28.js} +15 -14
  18. package/dist/esm/column-views.4685ea28.js.map +1 -0
  19. package/dist/esm/column-views.4b259f9e.js.map +1 -1
  20. package/dist/esm/{column-views.dc195174.js → column-views.4e6eead3.js} +2 -2
  21. package/dist/esm/{column-views.dc195174.js.map → column-views.4e6eead3.js.map} +1 -1
  22. package/dist/esm/{column-views.403a7b48.css → column-views.6f9511d1.css} +2 -1
  23. package/dist/esm/column-views.6f9511d1.css.map +1 -0
  24. package/dist/esm/{column-views.107b47b4.js → column-views.6f96d1c3.js} +6 -6
  25. package/dist/esm/{column-views.107b47b4.js.map → column-views.6f96d1c3.js.map} +1 -1
  26. package/dist/esm/{column-views.343fc926.js → column-views.6fff7602.js} +5 -10
  27. package/dist/esm/column-views.6fff7602.js.map +1 -0
  28. package/dist/esm/{column-views.5ca2b219.js → column-views.73fc96cb.js} +3 -3
  29. package/dist/esm/{column-views.5ca2b219.js.map → column-views.73fc96cb.js.map} +1 -1
  30. package/dist/esm/column-views.75b83110.js +13 -0
  31. package/dist/esm/{column-views.3c9cba65.js.map → column-views.75b83110.js.map} +1 -1
  32. package/dist/esm/{column-views.d524075b.js → column-views.82a5112b.js} +4 -4
  33. package/dist/esm/{column-views.d524075b.js.map → column-views.82a5112b.js.map} +1 -1
  34. package/dist/esm/column-views.82eb5026.js.map +1 -1
  35. package/dist/esm/{column-views.6df65dab.js → column-views.8d972657.js} +3 -3
  36. package/dist/esm/{column-views.6df65dab.js.map → column-views.8d972657.js.map} +1 -1
  37. package/dist/esm/column-views.9ffc089b.js.map +1 -1
  38. package/dist/esm/{column-views.63d40878.js → column-views.a665cbb2.js} +2 -2
  39. package/dist/esm/{column-views.63d40878.js.map → column-views.a665cbb2.js.map} +1 -1
  40. package/dist/esm/{column-views.565b193a.js → column-views.b9265595.js} +2 -2
  41. package/dist/esm/{column-views.565b193a.js.map → column-views.b9265595.js.map} +1 -1
  42. package/dist/esm/{column-views.afe0bb48.js → column-views.b977da35.js} +3 -3
  43. package/dist/esm/{column-views.afe0bb48.js.map → column-views.b977da35.js.map} +1 -1
  44. package/dist/esm/{column-views.7fa0d026.js → column-views.d5fff9b8.js} +4 -5
  45. package/dist/esm/column-views.d5fff9b8.js.map +1 -0
  46. package/dist/esm/column-views.e075af15.js.map +1 -1
  47. package/dist/esm/{column-views.2708e176.js → column-views.e3f0cd7b.js} +6 -6
  48. package/dist/esm/{column-views.2708e176.js.map → column-views.e3f0cd7b.js.map} +1 -1
  49. package/dist/esm/{column-views.6c9e5069.js → column-views.ee9d71ba.js} +4 -5
  50. package/dist/esm/column-views.ee9d71ba.js.map +1 -0
  51. package/dist/esm/index.d.ts +70 -49
  52. package/dist/esm/index.d.ts.map +1 -1
  53. package/dist/esm/index.js +8 -8
  54. package/dist/node/{column-views.b40c1b9c.js → column-views.00ad98fa.js} +2 -2
  55. package/dist/node/{column-views.b40c1b9c.js.map → column-views.00ad98fa.js.map} +1 -1
  56. package/dist/node/{column-views.7cc1a14f.js → column-views.02869dc5.js} +2 -2
  57. package/dist/node/{column-views.7cc1a14f.js.map → column-views.02869dc5.js.map} +1 -1
  58. package/dist/node/{column-views.c9880a4d.js → column-views.0a2596c2.js} +2 -2
  59. package/dist/node/{column-views.c9880a4d.js.map → column-views.0a2596c2.js.map} +1 -1
  60. package/dist/node/column-views.3a079e34.css +2 -0
  61. package/dist/node/column-views.3a079e34.css.map +1 -0
  62. package/dist/node/{column-views.1d064426.js → column-views.3a947d58.js} +2 -2
  63. package/dist/node/{column-views.1d064426.js.map → column-views.3a947d58.js.map} +1 -1
  64. package/dist/node/{column-views.8ee8469d.js → column-views.3d0c2bea.js} +2 -2
  65. package/dist/node/{column-views.8ee8469d.js.map → column-views.3d0c2bea.js.map} +1 -1
  66. package/dist/node/column-views.46efb749.js.map +1 -1
  67. package/dist/node/column-views.4ec769a6.js +2 -0
  68. package/dist/node/column-views.4ec769a6.js.map +1 -0
  69. package/dist/node/{column-views.b103acbc.js → column-views.59ce629d.js} +2 -2
  70. package/dist/node/{column-views.b103acbc.js.map → column-views.59ce629d.js.map} +1 -1
  71. package/dist/node/column-views.5fd6e11a.js.map +1 -1
  72. package/dist/node/column-views.6556e004.js +2 -0
  73. package/dist/node/column-views.6556e004.js.map +1 -0
  74. package/dist/node/column-views.67e7a200.js +2 -0
  75. package/dist/node/column-views.67e7a200.js.map +1 -0
  76. package/dist/node/{column-views.d8821a96.js → column-views.6b391d60.js} +2 -2
  77. package/dist/node/{column-views.d8821a96.js.map → column-views.6b391d60.js.map} +1 -1
  78. package/dist/node/column-views.75456275.js.map +1 -1
  79. package/dist/node/{column-views.d77d260b.js → column-views.825d2719.js} +2 -2
  80. package/dist/node/{column-views.d77d260b.js.map → column-views.825d2719.js.map} +1 -1
  81. package/dist/node/{column-views.f577d065.js → column-views.868c04dc.js} +2 -2
  82. package/dist/node/{column-views.f577d065.js.map → column-views.868c04dc.js.map} +1 -1
  83. package/dist/node/column-views.8eae7028.js +2 -0
  84. package/dist/node/column-views.8eae7028.js.map +1 -0
  85. package/dist/node/column-views.8f540f78.js +2 -0
  86. package/dist/node/column-views.8f540f78.js.map +1 -0
  87. package/dist/node/column-views.9efa91f1.js +2 -0
  88. package/dist/node/column-views.9efa91f1.js.map +1 -0
  89. package/dist/node/column-views.c007152b.js.map +1 -1
  90. package/dist/node/{column-views.ec691859.js → column-views.c4188442.js} +2 -2
  91. package/dist/node/{column-views.ec691859.js.map → column-views.c4188442.js.map} +1 -1
  92. package/dist/node/{column-views.56f88b8c.js → column-views.dfe9a971.js} +2 -2
  93. package/dist/node/{column-views.56f88b8c.js.map → column-views.dfe9a971.js.map} +1 -1
  94. package/dist/node/column-views.e153680b.js +2 -0
  95. package/dist/node/column-views.e153680b.js.map +1 -0
  96. package/dist/node/{column-views.42bc66a8.js → column-views.ed2fd268.js} +2 -2
  97. package/dist/node/{column-views.42bc66a8.js.map → column-views.ed2fd268.js.map} +1 -1
  98. package/dist/node/{column-views.5559de6a.js → column-views.fafbc028.js} +2 -2
  99. package/dist/node/{column-views.5559de6a.js.map → column-views.fafbc028.js.map} +1 -1
  100. package/dist/node/{column-views.6c7f9245.js → column-views.fee4e65d.js} +2 -2
  101. package/dist/node/{column-views.6c7f9245.js.map → column-views.fee4e65d.js.map} +1 -1
  102. package/dist/node/index.js +1 -1
  103. package/dist/node/index.js.map +1 -1
  104. package/package.json +4 -4
  105. package/src/data-provider/base.ts +1 -0
  106. package/src/data-provider/store.ts +1 -1
  107. package/src/facets/carbon-isotopes/isotopes-column.ts +2 -2
  108. package/src/facets/detrital-zircon/index.module.sass +2 -3
  109. package/src/facets/detrital-zircon/index.ts +3 -0
  110. package/src/facets/fossils/index.ts +19 -12
  111. package/src/facets/fossils/provider.ts +30 -17
  112. package/src/facets/fossils/taxon-ranges.ts +14 -7
  113. package/src/facets/measurements/base.ts +7 -3
  114. package/src/facets/measurements/sgp.ts +4 -5
  115. package/src/prepare-units/index.ts +2 -0
  116. package/src/unit-details/panel.ts +12 -10
  117. package/src/units/composite.ts +4 -10
  118. package/src/units/names.ts +26 -28
  119. package/dist/esm/column-views.322790f3.js.map +0 -1
  120. package/dist/esm/column-views.343fc926.js.map +0 -1
  121. package/dist/esm/column-views.3c9cba65.js +0 -13
  122. package/dist/esm/column-views.40094dd9.js.map +0 -1
  123. package/dist/esm/column-views.403a7b48.css.map +0 -1
  124. package/dist/esm/column-views.5eb4e6ff.js.map +0 -1
  125. package/dist/esm/column-views.6c9e5069.js.map +0 -1
  126. package/dist/esm/column-views.7fa0d026.js.map +0 -1
  127. package/dist/esm/column-views.c3c7901a.js.map +0 -1
  128. package/dist/esm/column-views.de433f18.js.map +0 -1
  129. package/dist/node/column-views.28609db2.css +0 -2
  130. package/dist/node/column-views.28609db2.css.map +0 -1
  131. package/dist/node/column-views.5361f0e2.js +0 -2
  132. package/dist/node/column-views.5361f0e2.js.map +0 -1
  133. package/dist/node/column-views.777b9bb6.js +0 -2
  134. package/dist/node/column-views.777b9bb6.js.map +0 -1
  135. package/dist/node/column-views.93bde6c1.js +0 -2
  136. package/dist/node/column-views.93bde6c1.js.map +0 -1
  137. package/dist/node/column-views.af480651.js +0 -2
  138. package/dist/node/column-views.af480651.js.map +0 -1
  139. package/dist/node/column-views.b6e86cf0.js +0 -2
  140. package/dist/node/column-views.b6e86cf0.js.map +0 -1
  141. package/dist/node/column-views.ec7cc7cc.js +0 -2
  142. package/dist/node/column-views.ec7cc7cc.js.map +0 -1
  143. package/dist/node/column-views.fac4baff.js +0 -2
  144. package/dist/node/column-views.fac4baff.js.map +0 -1
@@ -1,20 +1,24 @@
1
1
  import h from "@macrostrat/hyper";
2
- import { useCallback, useMemo } from "react";
2
+ import { useCallback } from "react";
3
3
  import {
4
4
  ColumnAxisType,
5
5
  NotesColumn,
6
- NotesColumnProps,
6
+ type ColumnDivision,
7
+ type NoteData,
8
+ type NotesColumnProps,
7
9
  } from "@macrostrat/column-components";
8
- import type { ColumnDivision } from "@macrostrat/column-components";
9
- import { IUnit } from "./types";
10
+ import type { IUnit } from "./types";
10
11
  import React from "react";
11
- import { getUnitHeightRange } from "../prepare-units/utils";
12
- import { CompositeColumnScale } from "./composite";
13
12
  import { useCompositeScale, useMacrostratColumnData } from "../data-provider";
13
+ import {
14
+ type CompositeColumnScale,
15
+ getUnitHeightRange,
16
+ } from "../prepare-units";
14
17
 
15
18
  interface UnitDataProps extends NotesColumnProps {
16
19
  left?: number;
17
20
  transform?: string;
21
+ nameForDivision?(obj: IUnit): string;
18
22
  noteComponent?: React.ComponentType<any>;
19
23
  shouldRenderNote?(div: ColumnDivision | IUnit, index: number): boolean;
20
24
  divisions?: IUnit[];
@@ -22,26 +26,29 @@ interface UnitDataProps extends NotesColumnProps {
22
26
  scale?: CompositeColumnScale;
23
27
  }
24
28
 
25
- type UnitNote = {
29
+ interface UnitNote extends NoteData {
26
30
  height: number;
27
31
  top_height: number;
28
32
  data: IUnit;
29
33
  id: number;
30
- };
34
+ }
31
35
 
32
36
  function noteForDivision(
33
37
  div: IUnit,
34
- opts: { axisType: ColumnAxisType },
38
+ opts: { axisType: ColumnAxisType; nameForDivision?: (obj: IUnit) => string },
35
39
  ): UnitNote {
36
40
  const { axisType } = opts;
37
41
 
38
42
  const [height, top_height] = getUnitHeightRange(div, axisType);
39
43
 
44
+ const nameForDivision = opts.nameForDivision ?? defaultNameFunction;
45
+
40
46
  return {
41
47
  height,
42
48
  top_height,
43
49
  data: div,
44
50
  id: div.unit_id,
51
+ note: nameForDivision(div),
45
52
  };
46
53
  }
47
54
 
@@ -59,6 +66,7 @@ function UnitDataColumn_(props: UnitDataProps) {
59
66
  left = 0,
60
67
  noteComponent,
61
68
  shouldRenderNote = (note: ColumnDivision | IUnit, i: number) => true,
69
+ nameForDivision,
62
70
  minimumHeight = 0,
63
71
  divisions = units,
64
72
  ...rest
@@ -76,7 +84,7 @@ function UnitDataColumn_(props: UnitDataProps) {
76
84
  if (divisions == null) return null;
77
85
  const notes: UnitNote[] = divisions
78
86
  .filter(shouldRenderNote)
79
- .map((d: IUnit) => noteForDivision(d, { axisType }))
87
+ .map((d: IUnit) => noteForDivision(d, { axisType, nameForDivision }))
80
88
  .filter(minimumHeightFilter);
81
89
 
82
90
  return h(NotesColumn, {
@@ -93,33 +101,23 @@ function UnitDataColumn_(props: UnitDataProps) {
93
101
 
94
102
  const UnitDataColumn = React.memo(UnitDataColumn_);
95
103
 
96
- interface UnitNamesProps extends UnitDataProps {
97
- nameForDivision?(obj: IUnit): string;
104
+ export interface UnitNamesProps extends UnitDataProps {
98
105
  paddingLeft?: number;
99
106
  width: number;
100
107
  onClickNote?: (note: any) => void;
101
108
  }
102
109
 
103
- export function UnitNamesColumn(props: UnitNamesProps) {
104
- const {
105
- nameForDivision = defaultNameFunction,
106
- noteComponent,
107
- ...rest
108
- } = props;
109
-
110
- const defaultNoteComponent = useMemo(
111
- () => (props) => {
112
- const { note } = props;
113
- return h("p.col-note-label", nameForDivision(note.data));
114
- },
115
- [nameForDivision],
116
- );
110
+ function UnitNameNote(props: { note: UnitNote }) {
111
+ const { note } = props;
112
+ return h("p.col-note-label", note.note);
113
+ }
117
114
 
115
+ export function UnitNamesColumn(props: UnitNamesProps) {
116
+ const { noteComponent = UnitNameNote, ...rest } = props;
118
117
  return h(UnitDataColumn, {
119
- noteComponent: noteComponent ?? defaultNoteComponent,
118
+ noteComponent,
120
119
  ...rest,
121
120
  });
122
121
  }
123
122
 
124
- export type { UnitNamesProps };
125
123
  export { defaultNameFunction, noteForDivision, UnitDataColumn };
@@ -1 +0,0 @@
1
- {"mappings":"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","sources":["packages/column-views/src/facets/fossils/index.ts"],"sourcesContent":["import hyper from \"@macrostrat/hyper\";\nimport {\n FossilDataType,\n PBDBCollection,\n PBDBEntity,\n PBDBOccurrence,\n useFossilData,\n} from \"./provider\";\nimport type { CompositeColumnScale, IUnit } from \"../../units\";\nimport {\n BaseMeasurementsColumn,\n ColumnMeasurementData,\n MeasurementHeightData,\n standardizeMeasurementHeight,\n groupNotesByPixelDistance,\n TruncatedList,\n} from \"../measurements\";\nimport { ColumnAxisType } from \"@macrostrat/column-components\";\nimport {\n useCompositeScale,\n useMacrostratColumnData,\n} from \"../../data-provider\";\nimport { UnitLong } from \"@macrostrat/api-types\";\nimport styles from \"./taxon-ranges.module.sass\";\nimport { getPositionWithinUnit, getUnitHeightRange } from \"../../prepare-units\";\nimport { scaleLinear } from \"d3-scale\";\n\nexport * from \"./taxon-ranges\";\n\nconst h = hyper.styled(styles);\n\nexport { FossilDataType };\n\nexport function PBDBFossilsColumn({\n columnID,\n type = FossilDataType.Collections,\n}: {\n columnID: number;\n type: FossilDataType;\n}) {\n const data = useFossilData(columnID, type);\n const { axisType, units } = useMacrostratColumnData();\n const scale = useCompositeScale();\n\n if (data == null || units == null || scale == null) return null;\n\n const data1 = preparePBDBData(data, units, scale, axisType);\n\n return h(BaseMeasurementsColumn, {\n data: data1,\n noteComponent: FossilInfo,\n focusedNoteComponent: FossilInfo,\n className: \"fossil-collections\",\n });\n}\n\ninterface FossilItemProps {\n note: {\n data: PBDBCollection[];\n unit?: IUnit;\n };\n spacing?: {\n below?: number;\n above?: number;\n };\n width?: number;\n height?: number;\n color?: string;\n focused?: boolean;\n}\n\nfunction FossilInfo(props: FossilItemProps) {\n const { note, maxItems, focused = false } = props;\n const { data } = note;\n // Sort collections by name\n data.sort((a, b) => {\n const nameA = a.best_name ?? a.cltn_name ?? \"\";\n const nameB = b.best_name ?? b.cltn_name ?? \"\";\n return nameA.localeCompare(nameB);\n });\n\n return h(TruncatedList, {\n data,\n className: \"fossil-collections\",\n itemRenderer: PBDBCollectionLink,\n maxItems: focused ? Infinity : (maxItems ?? 5),\n });\n}\n\nconst FocusedFossilInfo = (props: FossilItemProps) =>\n h(FossilInfo, { ...props, maxItems: Infinity });\n\nfunction PBDBCollectionLink({\n data,\n}: {\n data: PBDBCollection | PBDBOccurrence;\n}) {\n /** A link to a PBDB collection that handles either an occurrence or collection object */\n return h(\n \"a.link-id\",\n {\n href: `https://paleobiodb.org/app/collections#display=col:${data.cltn_id}`,\n target: \"_blank\",\n onClick(e) {\n e.stopPropagation();\n },\n },\n data.best_name ?? data.cltn_name,\n );\n}\n\ninterface PreparePBDBDataOptions {\n /** If set, group close notes within this distance (in pixels in display space)\n * into a single note. If a number is provided, that number is used as the distance,\n * otherwise a default of 5 pixels is used.\n */\n groupCloseNotes?: boolean | number;\n}\n\nfunction preparePBDBData<T extends PBDBEntity>(\n data: T[],\n units: UnitLong[],\n scale: CompositeColumnScale,\n axisType: ColumnAxisType,\n options?: { groupCloseNotes?: boolean | number },\n) {\n /** Prepare PBDB fossil data for display in a measurements column */\n const { groupCloseNotes = true } = options ?? {};\n const groupDistance =\n typeof groupCloseNotes === \"number\" ? groupCloseNotes : 10;\n\n // Map of data to its defined height ranges\n const dataMap = new Map<string, ColumnMeasurementData<T[]>>();\n\n // Todo: if we wanted, we could add a step where we group notes that are too close together here...\n\n for (const d of data) {\n const range = getHeightRangeForPBDBEntity(d, units, axisType);\n\n if (range == null) continue;\n const { height, top_height } = range;\n // compose the key based on height info\n let key = `${height}`;\n if (top_height != null) {\n key += `-${top_height}`;\n }\n\n // Group by height key\n if (!dataMap.has(key)) {\n dataMap.set(key, {\n height,\n top_height: top_height ?? height,\n data: [],\n id: key,\n });\n }\n dataMap.get(key)!.data.push(d);\n }\n\n return groupNotesByPixelDistance(\n Array.from(dataMap.values()),\n scale,\n axisType,\n groupDistance,\n );\n}\n\nfunction getHeightRangeForPBDBEntity<T extends PBDBEntity>(\n d: T,\n units: UnitLong[],\n axisType: ColumnAxisType,\n): MeasurementHeightData | null {\n let height: number | null = null;\n if (d.slb != null && d.slu == \"mbsf\") {\n // Meters below sea floor - special case for eODP where we have\n // specific depth data referenced\n height = Number(d.slb);\n if (axisType === ColumnAxisType.DEPTH) {\n // Data is already in depth units\n return { height };\n }\n }\n if (d.unit_id == null) return null;\n if (height != null) {\n // If we have both height and unit info, we need to adjust the height\n // to fit whatever scale type we're using.\n // TODO: we could improve how this works by having concurrent age and\n // height scales, which would allow us to do this without having to\n // reference to a specific unit.\n const unit = units.find((u) => u.unit_id === d.unit_id);\n if (unit == null) return null;\n const relHeight = getRelativePositionInUnit(\n height,\n unit,\n ColumnAxisType.DEPTH,\n );\n if (relHeight == null) return null;\n height = getPositionWithinUnit(relHeight, unit, axisType);\n return { height };\n }\n // We can just get the height within the unit, clipped to the unit boundaries\n return standardizeMeasurementHeight({ unit_id: d.unit_id }, units, axisType);\n}\n\nfunction getRelativePositionInUnit<T extends PBDBEntity>(\n pos: number,\n unit: UnitLong,\n axisType: ColumnAxisType,\n): number | null {\n // This is the inverse of getPositionWithinUnit\n const heights = getUnitHeightRange(unit, axisType, false);\n const scale = scaleLinear(heights).domain([0, 1]);\n const relPos = scale.invert(pos);\n if (relPos < 0 || relPos > 1) return null;\n return relPos;\n}\n"],"names":[],"version":3,"file":"column-views.322790f3.js.map"}
@@ -1 +0,0 @@
1
- {"mappings":"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","sources":["packages/column-views/src/facets/fossils/provider.ts"],"sourcesContent":["import {\n createAPIContext,\n useAPIResult,\n useAsyncMemo,\n} from \"@macrostrat/ui-components\";\n\nconst responseUnwrapper = (d) => d.records;\n\nconst pbdbAPIBase = \"https://paleobiodb.org/data1.2\";\n\nconst pbdbAPIContext = createAPIContext({\n baseURL: pbdbAPIBase,\n unwrapResponse: responseUnwrapper,\n});\n\nexport enum FossilDataType {\n Occurrences = \"occs\",\n Collections = \"colls\",\n}\n\nexport interface PBDBEntity {\n unit_id: number;\n col_id: number;\n cltn_id: number;\n // For eODP, slb/slu are used to store the heights of fossil locations found in measured sections.\n // They may have a more general set of uses as well but these are not currently explored.\n slb?: string; // The local bed in which the fossil was found\n slu?: string; // The unit of measurement used to designate the local bed\n}\n\nexport interface PBDBCollection extends PBDBEntity {\n cltn_name: string;\n pbdb_occs: number;\n t_age: number;\n b_age: number;\n [key: string]: any; // Allow for additional properties\n}\n\nexport interface PBDBOccurrence extends PBDBEntity {\n occ_id: number;\n cltn_id: number;\n taxon_name: string;\n best_name: string;\n [key: string]: any; // Allow for additional properties\n}\n\nexport function useFossilData(\n col_id: number,\n type = FossilDataType.Collections,\n) {\n // Fossil links are stored in both Macrostrat and PBDB, depending on how the link was assembled. Here\n // we create a unified view of data over both sources.\n return useAsyncMemo(async () => {\n if (col_id == null) return null;\n return await fetchFossilData(col_id, type);\n }, [col_id, type]);\n}\n\nasync function fetchMacrostratFossilData(\n col_id: number,\n type: FossilDataType,\n): Promise<PBDBCollection[]> {\n if (type !== FossilDataType.Collections) {\n // Macrostrat API only supports collections\n return [];\n }\n\n // Fetch fossil collections linked to columns from the Macrostrat API\n const resp = await fetch(\n `https://macrostrat.org/api/fossils?col_id=${col_id}`,\n );\n const res = await resp.json();\n // Create collections from Macrostrat data\n return res.success.data;\n}\n\nasync function fetchPDBDFossilData(\n col_id: number,\n type: FossilDataType,\n): Promise<PBDBCollection[]> {\n // Note: show=rank does not work on training PBDB server\n const resp = await fetch(\n pbdbAPIBase + `/${type}/list.json?ms_column=${col_id}&show=mslink,stratext`,\n );\n const res = await resp.json();\n return res.records.map(\n type == FossilDataType.Collections\n ? createMacrostratCollection\n : preprocessOccurrence,\n );\n}\n\nasync function fetchFossilData<T extends PBDBEntity>(\n colID: number,\n type: FossilDataType,\n): Promise<T[]> {\n const [macrostratData, pbdbData] = await Promise.all([\n fetchMacrostratFossilData(colID, type),\n fetchPDBDFossilData(colID, type),\n ]);\n return [...macrostratData, ...pbdbData];\n}\n\nfunction preprocessOccurrence(d): PBDBOccurrence {\n if (d.msu == null || d.msc == null) {\n return d;\n }\n /* Preprocess data for an occurrence into a Macrostrat-like format */\n // Standardize names of Macrostrat units and columns\n const unit_id = parseInt(d.msu.replace(/^\\w+:/, \"\"));\n const col_id = parseInt(d.msc.replace(/^\\w+:/, \"\"));\n\n // taxon names may be stored in different fields\n const occ_id = parseInt(d.oid.replace(/^occ:/, \"\"));\n const cltn_id = parseInt(d.cid.replace(/^col:/, \"\"));\n\n return {\n ...d,\n unit_id,\n col_id,\n taxon_name: d.tna,\n best_name: d.idn ?? d.tna,\n occ_id,\n cltn_id,\n cltn_name: d.nam,\n };\n}\n\nfunction createMacrostratCollection(d): PBDBCollection {\n /* Preprocess data for a collection into a Macrostrat-like format */\n let unit_id = null;\n let col_id = null;\n // Standardize names of Macrostrat units and columns\n if (d.msu != null) {\n unit_id = parseInt(d.msu.replace(/^\\w+:/, \"\"));\n }\n if (d.msc != null) {\n col_id = parseInt(d.msc.replace(/^\\w+:/, \"\"));\n }\n\n // taxon names may be stored in different fields\n let taxon_name = d.tna;\n let occ_id = null;\n if (d.oid != null && d.oid.startsWith(\"occ:\")) {\n occ_id = parseInt(d.oid.replace(/^occ:/, \"\"));\n }\n if (d.idn != null) {\n taxon_name = d.idn;\n }\n\n let cltn_id = d.cltn_id;\n if (d.oid != null && d.oid.startsWith(\"col:\")) {\n cltn_id = parseInt(d.oid.replace(/^col:/, \"\"));\n } else if (d.cid != null && d.cid.startsWith(\"col:\")) {\n cltn_id = parseInt(d.cid.replace(/^col:/, \"\"));\n }\n\n return {\n ...d,\n unit_id,\n col_id,\n taxon_name,\n occ_id,\n cltn_id,\n cltn_name: d.nam,\n t_age: d.t_age,\n b_age: d.b_age,\n };\n}\n"],"names":[],"version":3,"file":"column-views.343fc926.js.map"}
@@ -1,13 +0,0 @@
1
- import {PBDBFossilsColumn as $b9286605a04210d4$export$554267114407ef68, FossilDataType as $a3ff7da576c02df0$export$a990c76b38782f57, PBDBOccurrencesMatrix as $d419340b86dbd2ea$export$652730986cccff7a} from "./column-views.322790f3.js";
2
- import {DetritalColumn as $715dd5fedd79146a$export$f176396e104db8d5, DetritalGroup as $715dd5fedd79146a$export$1b3047373cd1c8c7} from "./column-views.c3c7901a.js";
3
- import {IsotopesDataset as $d71d096cfe00860f$export$c69bd0285aa5d775, IsotopesColumn as $d71d096cfe00860f$export$5d8aa8022c284748, MeasurementDataContext as $5dbb619f2c7bef60$export$c644ef985ce7a4c4, MeasurementDataProvider as $5dbb619f2c7bef60$export$5f01d5b342a89841, useMeasurementData as $5dbb619f2c7bef60$export$8a0335fd9ff72150} from "./column-views.0da4503a.js";
4
- import {standardizeMeasurementHeight as $50d219504625a431$export$9d101e1fcb2166a6, mergeHeightRanges as $50d219504625a431$export$8f2afa8ddee7317e, BaseMeasurementsColumn as $50d219504625a431$export$ce5c4f2fdf4e644d, TruncatedList as $50d219504625a431$export$653e47a7a0da0f0d, groupNotesByPixelDistance as $50d219504625a431$export$4e649f790614b299, SGPMeasurementsColumn as $c8e156b0b9c785ec$export$c49cf57576706bab} from "./column-views.6df65dab.js";
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
- export {$b9286605a04210d4$export$554267114407ef68 as PBDBFossilsColumn, $a3ff7da576c02df0$export$a990c76b38782f57 as FossilDataType, $a3ff7da576c02df0$export$a990c76b38782f57 as FossilDataType, $d419340b86dbd2ea$export$652730986cccff7a as PBDBOccurrencesMatrix, $715dd5fedd79146a$export$f176396e104db8d5 as DetritalColumn, $715dd5fedd79146a$export$1b3047373cd1c8c7 as DetritalGroup, $d71d096cfe00860f$export$c69bd0285aa5d775 as IsotopesDataset, $d71d096cfe00860f$export$5d8aa8022c284748 as IsotopesColumn, $5dbb619f2c7bef60$export$c644ef985ce7a4c4 as MeasurementDataContext, $5dbb619f2c7bef60$export$5f01d5b342a89841 as MeasurementDataProvider, $5dbb619f2c7bef60$export$8a0335fd9ff72150 as useMeasurementData, $50d219504625a431$export$9d101e1fcb2166a6 as standardizeMeasurementHeight, $50d219504625a431$export$8f2afa8ddee7317e as mergeHeightRanges, $50d219504625a431$export$ce5c4f2fdf4e644d as BaseMeasurementsColumn, $50d219504625a431$export$653e47a7a0da0f0d as TruncatedList, $50d219504625a431$export$4e649f790614b299 as groupNotesByPixelDistance, $c8e156b0b9c785ec$export$c49cf57576706bab as SGPMeasurementsColumn};
13
- //# sourceMappingURL=column-views.3c9cba65.js.map
@@ -1 +0,0 @@
1
- {"mappings":";;;;;;;;;;;AA+BA,SAAS,0CACP,GAAU,EACV,IAAkC;IAElC,MAAM,YAAE,QAAQ,EAAE,GAAG;IAErB,MAAM,CAAC,QAAQ,WAAW,GAAG,CAAA,GAAA,wCAAiB,EAAE,KAAK;IAErD,OAAO;gBACL;oBACA;QACA,MAAM;QACN,IAAI,IAAI,OAAO;IACjB;AACF;AAEA,MAAM,4CAAsB,CAAC;IAC3B,OAAO,IAAI,SAAS,CACjB,OAAO,CAAC,OAAO,UACf,OAAO,CAAC,MAAM,aACd,OAAO,CAAC,MAAM;AACnB;AAEA,SAAS,sCAAgB,KAAoB;IAC3C,MAAM,YAAE,QAAQ,SAAE,KAAK,EAAE,GAAG,CAAA,GAAA,yCAAsB;IAClD,MAAM,QAAQ,CAAA,GAAA,wCAAgB;IAC9B,MAAM,QACJ,OAAO,kBACP,aAAa,oBACb,mBAAmB,CAAC,MAA8B,IAAc,qBAChE,gBAAgB,cAChB,YAAY,OACZ,GAAG,MACJ,GAAG;IAEJ,MAAM,sBAAsB,CAAA,GAAA,kBAAU,EACpC,CAAC;QACC,IAAI,iBAAiB,GAAG,OAAO;QAC/B,MAAM,KAAK,KAAK,GAAG,CAAC,MAAM,EAAE,UAAU,IAAI,MAAM,EAAE,MAAM;QACxD,OAAO,KAAK;IACd,GACA;QAAC;QAAO;KAAc;IAGxB,IAAI,aAAa,MAAM,OAAO;IAC9B,MAAM,QAAoB,UACvB,MAAM,CAAC,kBACP,GAAG,CAAC,CAAC,IAAa,0CAAgB,GAAG;sBAAE;QAAS,IAChD,MAAM,CAAC;IAEV,OAAO,CAAA,GAAA,sBAAA,EAAE,CAAA,GAAA,kBAAU,GAAG;QACpB,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC/B,UAAU;uBACV;eACA;QACA,cAAc;YACZ,aAAa;QACf;QACA,GAAG,IAAI;IACT;AACF;AAEA,MAAM,4CAAiB,CAAA,GAAA,YAAI,EAAE,IAAI,CAAC;AAS3B,SAAS,0CAAgB,KAAqB;IACnD,MAAM,mBACJ,kBAAkB,0DAClB,aAAa,EACb,GAAG,MACJ,GAAG;IAEJ,MAAM,uBAAuB,CAAA,GAAA,cAAM,EACjC,IAAM,CAAC;YACL,MAAM,QAAE,IAAI,EAAE,GAAG;YACjB,OAAO,CAAA,GAAA,sBAAA,EAAE,oBAAoB,gBAAgB,KAAK,IAAI;QACxD,GACA;QAAC;KAAgB;IAGnB,OAAO,CAAA,GAAA,sBAAA,EAAE,2CAAgB;QACvB,eAAe,iBAAiB;QAChC,GAAG,IAAI;IACT;AACF","sources":["packages/column-views/src/units/names.ts"],"sourcesContent":["import h from \"@macrostrat/hyper\";\nimport { useCallback, useMemo } from \"react\";\nimport {\n ColumnAxisType,\n NotesColumn,\n NotesColumnProps,\n} from \"@macrostrat/column-components\";\nimport type { ColumnDivision } from \"@macrostrat/column-components\";\nimport { IUnit } from \"./types\";\nimport React from \"react\";\nimport { getUnitHeightRange } from \"../prepare-units/utils\";\nimport { CompositeColumnScale } from \"./composite\";\nimport { useCompositeScale, useMacrostratColumnData } from \"../data-provider\";\n\ninterface UnitDataProps extends NotesColumnProps {\n left?: number;\n transform?: string;\n noteComponent?: React.ComponentType<any>;\n shouldRenderNote?(div: ColumnDivision | IUnit, index: number): boolean;\n divisions?: IUnit[];\n minimumHeight?: number;\n scale?: CompositeColumnScale;\n}\n\ntype UnitNote = {\n height: number;\n top_height: number;\n data: IUnit;\n id: number;\n};\n\nfunction noteForDivision(\n div: IUnit,\n opts: { axisType: ColumnAxisType },\n): UnitNote {\n const { axisType } = opts;\n\n const [height, top_height] = getUnitHeightRange(div, axisType);\n\n return {\n height,\n top_height,\n data: div,\n id: div.unit_id,\n };\n}\n\nconst defaultNameFunction = (div) => {\n return div.unit_name\n .replace(\"Mbr\", \"Member\")\n .replace(\"Fm\", \"Formation\")\n .replace(\"Gp\", \"Group\");\n};\n\nfunction UnitDataColumn_(props: UnitDataProps) {\n const { axisType, units } = useMacrostratColumnData();\n const scale = useCompositeScale();\n const {\n left = 0,\n noteComponent,\n shouldRenderNote = (note: ColumnDivision | IUnit, i: number) => true,\n minimumHeight = 0,\n divisions = units,\n ...rest\n } = props;\n\n const minimumHeightFilter = useCallback(\n (d) => {\n if (minimumHeight == 0) return true;\n const dy = Math.abs(scale(d.top_height) - scale(d.height));\n return dy > minimumHeight;\n },\n [scale, minimumHeight],\n );\n\n if (divisions == null) return null;\n const notes: UnitNote[] = divisions\n .filter(shouldRenderNote)\n .map((d: IUnit) => noteForDivision(d, { axisType }))\n .filter(minimumHeightFilter);\n\n return h(NotesColumn, {\n transform: `translate(${left})`,\n editable: false,\n noteComponent,\n notes,\n forceOptions: {\n nodeSpacing: 1,\n },\n ...rest,\n });\n}\n\nconst UnitDataColumn = React.memo(UnitDataColumn_);\n\ninterface UnitNamesProps extends UnitDataProps {\n nameForDivision?(obj: IUnit): string;\n paddingLeft?: number;\n width: number;\n onClickNote?: (note: any) => void;\n}\n\nexport function UnitNamesColumn(props: UnitNamesProps) {\n const {\n nameForDivision = defaultNameFunction,\n noteComponent,\n ...rest\n } = props;\n\n const defaultNoteComponent = useMemo(\n () => (props) => {\n const { note } = props;\n return h(\"p.col-note-label\", nameForDivision(note.data));\n },\n [nameForDivision],\n );\n\n return h(UnitDataColumn, {\n noteComponent: noteComponent ?? defaultNoteComponent,\n ...rest,\n });\n}\n\nexport type { UnitNamesProps };\nexport { defaultNameFunction, noteForDivision, UnitDataColumn };\n"],"names":[],"version":3,"file":"column-views.40094dd9.js.map"}
@@ -1 +0,0 @@
1
- {"mappings":"AACA;;;;;;;AAMA;;;;AAOM;;;;AAGJ;;;;AAGA","sources":["packages/column-views/src/facets/detrital-zircon/index.module.sass"],"sourcesContent":["\n.depositional-age\n fill: var(--column-stroke-color)\n fill-opacity: 0.25\n stroke-width: 1px\n stroke: var(--column-stroke-color)\n\n.detrital-group\n margin: -5px\n margin-left: -10px\n margin-bottom: -36px\n\n &.hide-axis :global .visx-axis\n tspan, text\n display: none\n\n.dz-spectra\n position: relative\n\n.floating-axis\n position: sticky\n bottom: 0\n"],"names":[],"version":3,"file":"column-views.403a7b48.css.map"}
@@ -1 +0,0 @@
1
- {"mappings":"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","sources":["packages/column-views/src/unit-details/panel.ts"],"sourcesContent":["import hyper from \"@macrostrat/hyper\";\nimport styles from \"./panel.module.sass\";\nimport { JSONView } from \"@macrostrat/ui-components\";\nimport { Button, ButtonGroup } from \"@blueprintjs/core\";\nimport { ReactNode, useMemo, useState } from \"react\";\nimport {\n DataField,\n EnvironmentsList,\n IntervalShort,\n IntervalTag,\n ItemList,\n LithologyList,\n LithologyTagFeature,\n Parenthetical,\n Value,\n} from \"@macrostrat/data-components\";\nimport {\n useColumnUnitsMap,\n useMacrostratData,\n useMacrostratDefs,\n} from \"../data-provider\";\nimport type {\n Environment,\n UnitLong,\n UnitLongFull,\n Lithology,\n Interval,\n StratUnit,\n} from \"@macrostrat/api-types\";\nimport { defaultNameFunction } from \"../units/names\";\nimport classNames from \"classnames\";\n\nconst h = hyper.styled(styles);\n\nexport function UnitDetailsPanel({\n unit,\n onClose,\n className,\n features = new Set<UnitDetailsFeature>([\n UnitDetailsFeature.AdjacentUnits,\n UnitDetailsFeature.OutcropType,\n UnitDetailsFeature.JSONToggle,\n UnitDetailsFeature.DepthRange,\n ]),\n lithologyFeatures,\n actions,\n hiddenActions = null,\n onSelectUnit,\n columnUnits,\n onClickItem,\n}: {\n unit: any;\n onClose?: any;\n showLithologyProportions?: boolean;\n className?: string;\n actions?: ReactNode;\n hiddenActions?: ReactNode;\n features?: Set<UnitDetailsFeature>;\n lithologyFeatures?: Set<LithologyTagFeature>;\n columnUnits?: UnitLong[];\n onSelectUnit?: (unitID: number) => void;\n onClickItem?: (item: any) => void;\n}) {\n const [showJSON, setShowJSON] = useState(false);\n\n let content = null;\n if (showJSON) {\n content = h(JSONView, { data: unit, showRoot: false });\n } else {\n content = h(UnitDetailsContent, {\n unit,\n features,\n lithologyFeatures,\n onClickItem,\n onSelectUnit,\n });\n }\n\n let title = defaultNameFunction(unit);\n\n if (features.has(UnitDetailsFeature.JSONToggle)) {\n hiddenActions = h([\n h(Button, {\n icon: \"code\",\n small: true,\n minimal: true,\n key: \"json-view-toggle\",\n className: classNames(\"json-view-toggle\", { enabled: setShowJSON }),\n onClick(evt) {\n setShowJSON(!showJSON);\n evt.stopPropagation();\n },\n }),\n hiddenActions,\n ]);\n }\n\n return h(\"div.unit-details-panel\", { className }, [\n h(LegendPanelHeader, {\n onClose,\n title,\n id: unit.unit_id,\n actions,\n hiddenActions,\n }),\n h(\"div.unit-details-content-holder\", content),\n ]);\n}\n\nexport function LegendPanelHeader({\n title,\n id,\n onClose,\n actions = null,\n hiddenActions,\n}: {\n title?: string | null;\n id?: number | null;\n onClose?: () => void;\n actions?: ReactNode | null;\n hiddenActions?: ReactNode | null;\n}) {\n return h(\"header.legend-panel-header\", [\n h(\"div.title-container\", [\n h.if(title != null)(\"h3\", title),\n h.if(hiddenActions != null)(\n \"span.hidden-actions-container\",\n h(\"div.hidden-actions\", hiddenActions),\n ),\n ]),\n h(\"div.spacer\"),\n h.if(id != null)(\"code.unit-id\", id),\n h.if(actions != null)(ButtonGroup, { minimal: true }, actions),\n h.if(onClose != null)(Button, {\n icon: \"cross\",\n minimal: true,\n small: true,\n onClick() {\n onClose();\n },\n }),\n ]);\n}\n\nexport enum UnitDetailsFeature {\n AdjacentUnits = \"adjacent-units\",\n Color = \"color\",\n OutcropType = \"outcrop-type\",\n JSONToggle = \"json-toggle\",\n DepthRange = \"depth-range\",\n}\n\nfunction UnitDetailsContent({\n unit,\n onSelectUnit,\n columnUnits,\n lithologyFeatures = new Set([\n LithologyTagFeature.Proportion,\n LithologyTagFeature.Attributes,\n ]),\n features = new Set<UnitDetailsFeature>([\n UnitDetailsFeature.AdjacentUnits,\n UnitDetailsFeature.OutcropType,\n ]),\n onClickItem,\n getItemHref,\n}: {\n unit: UnitLong;\n onSelectUnit?: (unitID: number) => void;\n columnUnits?: UnitLong[];\n lithologyFeatures?: Set<LithologyTagFeature>;\n features?: Set<UnitDetailsFeature>;\n onClickItem?: (\n event: MouseEvent,\n item:\n | Lithology\n | Environment\n | UnitLong\n | Interval\n | { strat_name_id: number },\n ) => void;\n getItemHref?: (item: Lithology | Environment | UnitLong) => string | null;\n}) {\n const lithMap = useMacrostratDefs(\"lithologies\");\n const envMap = useMacrostratDefs(\"environments\");\n\n const environments = enhanceEnvironments(unit.environ, envMap);\n const lithologies = enhanceLithologies(unit.lith ?? [], lithMap);\n\n // Create a lookup table of units if provided\n const columnUnitsMap = useMemo(() => {\n const map = new Map<number, UnitLong>();\n for (const colUnit of columnUnits ?? []) {\n map.set(colUnit.unit_id, colUnit);\n }\n return map;\n }, [columnUnits]);\n\n let outcropField = null;\n if (features.has(UnitDetailsFeature.OutcropType)) {\n // Determine outcrop type\n let outcrop = unit.outcrop;\n if (outcrop == \"both\") {\n outcrop = \"surface and subsurface\";\n }\n outcropField = h(DataField, {\n label: \"Outcrop\",\n value: outcrop,\n });\n }\n\n let thicknessOrHeightRange = null;\n const [thickness, thicknessUnit] = getThickness(unit);\n // Proxy for actual heights in t_pos and b_pos\n if (\n features.has(UnitDetailsFeature.DepthRange) &&\n unit.t_pos != null &&\n unit.b_pos != null &&\n unit.min_thick == unit.max_thick && // We have an actual fixed height\n unit.min_thick != 0 // Not a zero thickness\n ) {\n const label = unit.t_pos < unit.b_pos ? \"Depth\" : \"Height\";\n const u1 = \"m\";\n\n thicknessOrHeightRange = h(DataField, {\n unit: u1,\n label,\n value: formatRange(unit.b_pos, unit.t_pos),\n children: h(\n Parenthetical,\n h(Value, { value: thickness, unit: thicknessUnit }),\n ),\n });\n }\n thicknessOrHeightRange ??= h(DataField, {\n label: \"Thickness\",\n value: thickness,\n unit: thicknessUnit,\n });\n\n /** We are trying to move away from passing the \"color\" parameter in the API */\n let colorSwatch: ReactNode = null;\n if (\"color\" in unit && features.has(UnitDetailsFeature.Color)) {\n const unit1 = unit as UnitLongFull;\n colorSwatch = h(\"div.color-swatch\", {\n style: { backgroundColor: unit1.color },\n });\n }\n\n return h(\"div.unit-details-content\", [\n thicknessOrHeightRange,\n h(LithologyList, {\n label: \"Lithology\",\n lithologies,\n features: lithologyFeatures,\n getItemHref,\n onClickItem,\n }),\n h(AgeField, { unit }, [\n h(Parenthetical, h(Duration, { value: unit.b_age - unit.t_age })),\n h(IntervalProportions, {\n unit,\n onClickItem,\n }),\n ]),\n h(EnvironmentsList, {\n environments,\n onClickItem,\n getItemHref,\n }),\n h.if(unit.strat_name_id != null)(StratNameField, {\n strat_name_id: unit.strat_name_id,\n }),\n outcropField,\n h.if(features.has(UnitDetailsFeature.AdjacentUnits))([\n h(\n DataField,\n { label: \"Above\" },\n h(UnitIDList, {\n units: unit.units_above,\n onSelectUnit,\n showNames: true,\n }),\n ),\n h(\n DataField,\n { label: \"Below\" },\n h(UnitIDList, {\n units: unit.units_below,\n onSelectUnit,\n showNames: true,\n }),\n ),\n ]),\n colorSwatch,\n h(ReferencesField, { refs: unit.refs, inline: true }),\n ]);\n}\n\nexport function ReferencesField({ refs, className = null, ...rest }) {\n if (refs == null || refs.length === 0) {\n return null;\n }\n\n return h(\n DataField,\n {\n label: \"References\",\n className: classNames(\"refs-field\", className),\n ...rest,\n },\n h(BibInfo, { refs }),\n );\n}\n\nfunction StratNameField({\n strat_name_id,\n onClickItem,\n}: {\n strat_name_id: number;\n onClickItem?: (event: MouseEvent, item: { strat_name_id: number }) => void;\n}) {\n const stratNames = useMemo(() => [strat_name_id], [strat_name_id]);\n const data = useMacrostratData(\"strat_names\", stratNames);\n const stratNameData = data?.[0];\n let inner: any = h(Identifier, { id: strat_name_id });\n const name = stratNameData?.strat_name_long;\n if (name != null) {\n inner = h(\"span.strat-name\", name);\n }\n\n const clickable = onClickItem != null;\n\n const className = classNames({\n clickable,\n });\n\n return h(\n DataField,\n {\n label: \"Stratigraphic name\",\n },\n h(\n clickable ? \"a\" : \"span\",\n {\n className,\n onClick: (e) => onClickItem(e, { strat_name_id }),\n },\n inner,\n ),\n );\n}\n\nfunction getThickness(unit): [string, string] {\n let minThickness = unit.min_thick ?? 0;\n let maxThickness = unit.max_thick ?? unit.min_thick ?? 0;\n let _unit = \"m\";\n\n if (minThickness == 0 && maxThickness == 0) {\n return [\"Unknown\", null];\n }\n\n if (minThickness < 0.8 && maxThickness < 1.2) {\n // Convert to cm\n minThickness = minThickness * 100;\n maxThickness = maxThickness * 100;\n _unit = \"cm\";\n } else if (minThickness > 800 && maxThickness > 1200) {\n // Convert to km\n minThickness = minThickness / 1000;\n maxThickness = maxThickness / 1000;\n _unit = \"km\";\n }\n\n if (minThickness == maxThickness) {\n return [formatSignificance(minThickness), _unit];\n }\n\n return [formatRange(minThickness, maxThickness), _unit];\n}\n\nfunction ThicknessField({ unit, label = \"Thickness\" }) {\n const [value, thicknessUnit] = getThickness(unit);\n return h(DataField, {\n label,\n value,\n unit: thicknessUnit,\n });\n}\n\nfunction BibInfo({ refs }) {\n const refData = useMacrostratData(\"refs\", refs);\n\n if (refData == null || refData.length === 0) {\n return null;\n }\n\n if (refData.length == 1) {\n return h(Citation, {\n data: refData[0],\n tag: \"span\",\n key: refData[0].ref_id,\n });\n }\n\n return h(\n \"ul.refs\",\n refData.map((data, i) =>\n h(Citation, { data, tag: \"li\", key: data.ref_id }),\n ),\n );\n}\n\nfunction Citation({ data, tag = \"p\" }) {\n return h(tag, { className: \"citation\" }, [\n h(\"span.authors\", data.author),\n \", \",\n h(\"span.year\", data.pub_year),\n \", \",\n h(\"span.title\", data.ref),\n ]);\n}\n\nfunction AgeField({ unit, children }) {\n const [b_age, t_age, _unit] = getAgeRange(unit);\n\n return h(\n DataField,\n {\n label: \"Age\",\n value: formatRange(b_age, t_age),\n unit: _unit,\n },\n children,\n );\n}\n\nfunction getAgeRange(_unit) {\n let b_age = _unit.b_age;\n let t_age = _unit.t_age;\n let unit = \"Ma\";\n\n if (b_age < 0.8 && t_age < 1.2) {\n b_age *= 1000;\n t_age *= 1000;\n unit = \"ka\";\n } else if (b_age > 800 && t_age > 1200) {\n b_age /= 1000;\n t_age /= 1000;\n unit = \"Ga\";\n }\n\n return [b_age, t_age, unit];\n}\n\nfunction getAge(value) {\n /** Get the age value in Ma, ka, or Ga as appropriate */\n let unit = \"Ma\";\n if (value < 0.8) {\n unit = \"ka\";\n value *= 1000;\n if (value < 5) {\n unit = \"yr\";\n value *= 1000;\n }\n } else if (value > 1000) {\n unit = \"Ga\";\n value /= 1000;\n }\n\n return [value, unit];\n}\n\nexport function AgeLabel({\n age,\n maximumFractionDigits = 2,\n minimumFractionDigits = 0,\n className,\n}: {\n age: number;\n className?: string;\n maximumFractionDigits?: number;\n minimumFractionDigits?: number;\n}) {\n /** Component to display a single age value with unit conversion from\n * Ma to ka or Ga as appropriate.\n */\n const [value, unit] = getAge(age);\n\n const _value = value.toLocaleString(\"en-US\", {\n maximumFractionDigits,\n minimumFractionDigits,\n });\n\n return h(Value, { value: _value, unit, className });\n}\n\nexport function Duration({\n value,\n maximumFractionDigits = 2,\n minimumFractionDigits = 0,\n}) {\n let unit = \"Myr\";\n if (value < 0.8) {\n unit = \"kyr\";\n value *= 1000;\n if (value < 5) {\n unit = \"yr\";\n value *= 1000;\n }\n } else if (value > 1000) {\n unit = \"Gyr\";\n value /= 1000;\n }\n\n let _value = value.toLocaleString(\"en-US\", {\n maximumFractionDigits,\n minimumFractionDigits,\n });\n\n return h(Value, { value: _value, unit });\n}\n\nfunction enhanceEnvironments(\n environments: Partial<Environment>[],\n envMap: Map<number, Environment>,\n) {\n return environments.map((env) => {\n return {\n ...(envMap?.get(env.environ_id) ?? {}),\n ...env,\n };\n });\n}\n\nfunction enhanceLithologies(\n lithologies: Partial<UnitLong[\"lith\"]>,\n lithMap: Map<number, any>,\n) {\n return lithologies.map((lith) => {\n return {\n ...(lithMap?.get(lith.lith_id) ?? {}), // get lithology details\n ...lith, // override with the unit's specific lithology data\n };\n });\n}\n\nexport function ClickableText({\n onClick,\n className,\n children,\n}: {\n onClick: () => void;\n className?: string;\n children: ReactNode;\n}) {\n /** An optionally clickable text element */\n const tag = onClick != null ? \"a\" : \"span\";\n return h(tag, { onClick, className }, children);\n}\n\nexport function Identifier({\n id,\n onClick,\n className,\n}: {\n id: number | string;\n onClick?: (id: number | string) => void;\n className?: string;\n}) {\n /** An item that displays a numeric identifier, optionally clickable */\n const _onClick = onClick != null ? () => onClick(id) : null;\n\n return h(\n ClickableText,\n {\n onClick: _onClick,\n className: classNames(\"identifier\", className),\n },\n id,\n );\n}\n\ntype UnitInfo = {\n unitID: number;\n colID?: number;\n name?: string;\n};\n\nfunction UnitIDList({ units, onSelectUnit, showNames = false }) {\n const unitsMap = useColumnUnitsMap();\n\n const extUnits: UnitInfo[] = useMemo(() => {\n const u1 = units.filter((d) => d != 0);\n if (showNames) {\n return u1.map((unitID) => {\n const unitData = unitsMap?.get(unitID);\n let name: string = undefined;\n if (unitData != null) {\n name = defaultNameFunction(unitData);\n }\n return {\n unitID,\n colID: unitData?.col_id,\n name,\n };\n });\n } else {\n return u1.map((unitID) => ({ unitID }));\n }\n }, [units, unitsMap]);\n\n if (extUnits.length === 0) {\n return h(\"span.no-units\", \"None\");\n }\n\n return h(\n ItemList,\n { className: \"units-list\" },\n extUnits.map((info) =>\n h(\"span.item\", h(UnitIdentifier, { ...info, onSelectUnit })),\n ),\n );\n}\n\nfunction UnitIdentifier({\n unitID,\n colID,\n name,\n onSelectUnit,\n}: UnitInfo & { onSelectUnit?: (unitID: number) => void }) {\n const onClick = useMemo(() => {\n if (onSelectUnit == null) return null;\n return () => {\n onSelectUnit(unitID);\n };\n }, [onSelectUnit]);\n\n if (name != null) {\n return h(\n ClickableText,\n {\n className: \"unit-name\",\n onClick,\n },\n name,\n );\n }\n\n return h(Identifier, {\n className: \"unit-id\",\n onClick,\n key: unitID,\n id: unitID,\n });\n}\n\nfunction IntervalProportions({ unit, onClickItem }) {\n const i0 = unit.b_int_id;\n const i1 = unit.t_int_id;\n let b_prop = unit.b_prop ?? 0;\n let t_prop = unit.t_prop ?? 1;\n\n const intervalMap = useMacrostratDefs(\"intervals\");\n const int0 = intervalMap?.get(i0) ?? {};\n\n const interval0: IntervalShort = {\n ...int0,\n id: i0,\n name: unit.b_int_name,\n };\n\n let p0: ReactNode = null;\n const int1 = intervalMap?.get(i1) ?? {};\n const p1: ReactNode = h(Proportion, { value: t_prop });\n\n if (i0 !== i1 || b_prop !== 0 || t_prop !== 1) {\n // We have a single interval with undefined proportions\n p0 = h(Proportion, { value: b_prop });\n }\n\n if (i0 === i1 && (b_prop !== 0 || t_prop !== 1)) {\n p0 = h(\"span.joint-proportion\", [p0, h(\"span.sep\", \"to\"), p1]);\n }\n\n const clickable = onClickItem != null;\n\n const handleClick = (event: MouseEvent) => {\n if (onClickItem) {\n onClickItem(event, interval0);\n }\n };\n\n return h(\"div.interval-proportions\", [\n h(IntervalTag, {\n className: clickable ? \"clickable\" : \"\",\n onClick: clickable ? handleClick : undefined,\n interval: interval0,\n prefix: p0,\n }),\n h.if(i0 != i1)(\"span.discourage-break\", [\n h(\"span.sep\", \"to\"),\n h(IntervalTag, {\n className: clickable ? \"clickable\" : \"\",\n onClick: clickable ? handleClick : undefined,\n interval: {\n ...int1,\n id: i1,\n name: unit.t_int_name,\n },\n prefix: p1,\n }),\n ]),\n ]);\n}\n\nconst formatProportion = (d) => {\n if (d == null) return null;\n return d.toFixed(1);\n};\n\nfunction Proportion({ value }) {\n let content = null;\n if (value == 0) {\n content = \"base\";\n } else if (value == 1) {\n content = \"top\";\n } else {\n content = formatProportion(value * 100) + \"%\";\n }\n\n return h(\"span.proportion\", content);\n}\n\nfunction formatRange(min, max, precision = null) {\n if (min == null || max == null) return null;\n if (min === max) {\n return min.toFixed(precision);\n }\n\n return `${formatSignificance(min, precision)}–${formatSignificance(\n max,\n precision,\n )}`;\n}\n\nfunction formatSignificance(value, precision = null) {\n // Format to preserve a reasonable number of significant figures\n // this could be done with an easier algorithm, probably:\n\n if (precision == null) {\n return value.toLocaleString();\n }\n if (precision >= 0) {\n return value.toFixed(precision);\n }\n if (precision < 0) {\n return (\n (value / Math.pow(10, -precision)).toFixed(0) + \"0\".repeat(-precision)\n );\n }\n}\n"],"names":[],"version":3,"file":"column-views.5eb4e6ff.js.map"}
@@ -1 +0,0 @@
1
- {"mappings":"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","sources":["packages/column-views/src/facets/fossils/taxon-ranges.ts"],"sourcesContent":["import hyper from \"@macrostrat/hyper\";\nimport { FossilDataType, PBDBOccurrence, useFossilData } from \"./provider\";\nimport { Box, useElementSize } from \"@macrostrat/ui-components\";\nimport { group } from \"d3-array\";\nimport { ColumnAxisType, ColumnSVG } from \"@macrostrat/column-components\";\nimport {\n useMacrostratColumnData,\n useCompositeScale,\n} from \"../../data-provider\";\nimport { UnitLong } from \"@macrostrat/api-types\";\nimport styles from \"./taxon-ranges.module.sass\";\nimport { useRef } from \"react\";\n\nconst h = hyper.styled(styles);\n\nexport { FossilDataType };\n\nexport function PBDBOccurrencesMatrix({ columnID }) {\n /* A column for a matrix of taxon occurrences displayed as a table beside the main column. This will\n eventually be extended with first/last occurrence markers and range bars.\n */\n const data = useFossilData(columnID, FossilDataType.Occurrences);\n const col = useMacrostratColumnData();\n const scale = useCompositeScale();\n\n if (data == null) return null;\n\n const data1 = group(data, (d) => d.unit_id);\n\n // convert the data to a map\n const occurrenceMap = new Map(data1);\n\n const matrix = createOccurrenceMatrix(col.units, occurrenceMap, col.axisType);\n\n const { taxonRanges } = matrix;\n\n const padding = 16;\n const spacing = 16;\n\n const taxonEntries = Array.from(taxonRanges.entries());\n //const taxon = taxonEntries.slice(0, 50); // limit to top 50 taxa\n\n const width = padding * 2 + spacing * taxonEntries.length;\n\n return h(Box, { className: \"taxon-ranges\", width, height: col.totalHeight }, [\n h(TaxonOccurrenceLabels, {\n taxonEntries,\n padding,\n spacing,\n scale,\n }),\n h(\n ColumnSVG,\n {\n width: padding * 2 + spacing * taxonEntries.length,\n },\n h(\n \"g.taxa-occurrences-matrix\",\n taxonEntries.map(([taxonName, ranges], rowIndex) => {\n const xPosition = padding + rowIndex * spacing;\n return h(\"g\", { transform: `translate(${xPosition})` }, [\n ranges.map(([top, bottom]) => {\n return h(\"line\", {\n y1: scale(top),\n y2: scale(bottom),\n });\n }),\n ]);\n }),\n ),\n ),\n ]);\n}\n\nfunction TaxonOccurrenceLabels({ taxonEntries, padding, spacing, scale }) {\n return h(\"div.taxon-labels\", [\n taxonEntries.map(([taxonName, ranges], rowIndex) => {\n const top = ranges[0]?.[0] ?? 0;\n let topPx = scale(top) - 20;\n if (topPx < 200) topPx = 0;\n\n return h(TaxonLabel, {\n top: topPx,\n left: padding + rowIndex * spacing,\n taxonName,\n });\n }),\n ]);\n}\n\nfunction TaxonLabel({ top, left, taxonName }) {\n const ref = useRef();\n const textSize = useElementSize(ref);\n const labelWidth = textSize?.height ?? 200;\n return h(\n \"div.taxon-label\",\n {\n style: {\n top: `${top}px`,\n marginLeft: `${left}px`,\n \"--label-width\": `${labelWidth}px`,\n },\n },\n h(\"div.taxon-label-inner\", h(\"div.taxon-label-text\", { ref }, taxonName)),\n );\n}\n\ntype TaxonUnitMap = Map<string, Set<number>>;\n\ninterface OccurrenceMatrixData {\n occurrenceMap: Map<number, PBDBOccurrence[]>; // Map of unit IDs to occurrences (original data)\n taxonUnitMap: TaxonUnitMap; // Map of taxon names to sets of unit IDs\n taxonOccurrenceMap: Map<string, PBDBOccurrence[]>; // Map of taxon names to occurrences\n taxonRanges: Map<string, [number, number][]>; // Map of taxon names to [top, bottom] pixel ranges\n}\n\nfunction TaxonOccurrenceEntry({\n xPosition,\n ranges,\n scale,\n name,\n}: {\n xPosition: number;\n units: Set<number>;\n}) {\n return h(\"g\", { transform: `translate(${xPosition})` }, [\n ranges.map(([top, bottom]) => {\n return h(\"line\", {\n y1: scale(top),\n y2: scale(bottom),\n });\n }),\n ]);\n}\n\nfunction createOccurrenceMatrix(\n units: UnitLong[],\n data: Map<number, PBDBOccurrence[]>,\n axisType: ColumnAxisType = ColumnAxisType.AGE,\n): OccurrenceMatrixData {\n const taxonUnitMap = new Map<string, Set<number>>();\n const taxonOccurrenceMap = new Map<string, PBDBOccurrence[]>();\n\n for (const [unit_id, occurrences] of data.entries()) {\n for (const occ of occurrences) {\n const taxonName = occ.best_name ?? occ.taxon_name;\n if (!taxonUnitMap.has(taxonName)) {\n taxonUnitMap.set(taxonName, new Set());\n taxonOccurrenceMap.set(taxonName, []);\n }\n taxonUnitMap.get(taxonName).add(unit_id);\n taxonOccurrenceMap.get(taxonName).push(occ);\n }\n }\n\n // sort the taxon occurrence map by number of occurrences\n const sortedTaxa = Array.from(taxonUnitMap.entries()).sort((a, b) => {\n // Sort alphabetically by taxon name\n return b[0].localeCompare(a[0]);\n });\n\n const taxonRanges = new Map<string, [number, number][]>();\n for (const [taxonName, unitSet] of taxonUnitMap.entries()) {\n taxonRanges.set(\n taxonName,\n accumulatePresenceDomains(units, unitSet, axisType),\n );\n }\n\n return {\n occurrenceMap: data,\n taxonUnitMap: new Map(sortedTaxa),\n taxonOccurrenceMap: taxonOccurrenceMap,\n taxonRanges,\n };\n}\n\nfunction accumulatePresenceDomains(\n unit: UnitLong[],\n presenceUnits: Set<number>,\n axisType: ColumnAxisType,\n): Array<[number, number]> {\n const domains: Array<[number, number]> = [];\n let currentDomain: [number, number] | null = null;\n\n for (const u of unit) {\n if (presenceUnits.has(u.unit_id)) {\n if (currentDomain == null) {\n if (\n axisType == ColumnAxisType.DEPTH ||\n axisType == ColumnAxisType.HEIGHT\n ) {\n currentDomain = [u.t_pos, u.b_pos];\n } else {\n currentDomain = [u.t_age, u.b_age];\n }\n } else {\n if (\n axisType == ColumnAxisType.DEPTH ||\n axisType == ColumnAxisType.HEIGHT\n ) {\n currentDomain[1] = u.b_pos;\n } else {\n currentDomain[1] = u.b_age;\n }\n }\n } else {\n if (currentDomain != null) {\n domains.push(currentDomain);\n currentDomain = null;\n }\n }\n }\n\n if (currentDomain != null) {\n domains.push(currentDomain);\n }\n\n return domains;\n}\n"],"names":[],"version":3,"file":"column-views.6c9e5069.js.map"}
@@ -1 +0,0 @@
1
- {"mappings":";;;;;;;;;AAgBA,SAAS,iCAAW,UAAE,MAAM,EAAE;IAC5B,MAAM,MAAM,CAAA,GAAA,mBAAW,EACrB,sDACA;QACE,QAAQ,CAAC,GAAG,EAAE,QAAQ;IACxB,GACA,CAAC,IAAM;IAET,OAAO;AACT;AAQO,SAAS,0CAAsB,YAAE,QAAQ,SAAE,QAAQ,WAAW;IACnE,MAAM,OAA+B,iCAAW;QAAE,QAAQ;IAAS;IACnE,MAAM,YAAE,QAAQ,SAAE,KAAK,EAAE,GAAG,CAAA,GAAA,yCAAsB;IAClD,MAAM,QAAQ,CAAA,GAAA,wCAAgB;IAE9B,IAAI,QAAQ,QAAQ,SAAS,QAAQ,SAAS,MAAM,OAAO;IAE3D,MAAM,QAAQ,qCAAe,MAAM,OAAO,OAAO;IAEjD,OAAO,CAAA,GAAA,sBAAA,EAAE,CAAA,GAAA,yCAAqB,GAAG;QAC/B,MAAM;QACN,eAAe;QACf,sBAAsB;IACxB;AACF;AAEA,SAAS,qCAAe,KAAK;IAC3B,MAAM,QAAE,IAAI,WAAE,OAAO,EAAE,GAAG;IAC1B,MAAM,cAAc,MAAM;IAE1B,IAAI,eAAe,QAAQ,YAAY,MAAM,KAAK,GAAG,OAAO;IAE5D,OAAO,CAAA,GAAA,sBAAA,EAAE,CAAA,GAAA,yCAAY,GAAG;QACtB,WAAW;QACX,MAAM;QACN,cAAc,CAAC,IAAM,CAAA,GAAA,sBAAA,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI;QAC1C,UAAU,UAAU,WAAW;IACjC;AACF;AAEA,SAAS,qCACP,IAAqB,EACrB,KAA2B,EAC3B,KAAiB,EACjB,QAAwB;IAExB,kCAAkC;IAClC,MAAM,KAAK,KACR,GAAG,CAAC,CAAC;QACJ,MAAM,OAAO,OAAO,WAAW;QAC/B,IAAI,QAAQ,QAAQ,KAAK,MAAM,KAAK,GAAG,OAAO;QAC9C,MAAM,aAAa,CAAA,GAAA,yCAA2B,EAC5C;YAAE,SAAS,OAAO,OAAO;QAAC,GAC1B,OACA;QAEF,IAAI,cAAc,MAAM,OAAO;QAC/B,KAAK,IAAI,CAAC,CAAC,GAAG,IAAM,EAAE,EAAE,GAAG,EAAE,EAAE;QAC/B,OAAO;YACL,GAAG,UAAU;kBACb;YACA,IAAI,OAAO,OAAO;QACpB;IACF,GACC,MAAM,CAAC;IAEV,OAAO,CAAA,GAAA,yCAAwB,EAAE,IAAI,OAAO,UAAU;AACxD","sources":["packages/column-views/src/facets/measurements/sgp.ts"],"sourcesContent":["import h from \"@macrostrat/hyper\";\nimport { useAPIResult } from \"@macrostrat/ui-components\";\nimport {\n BaseMeasurementsColumn,\n groupNotesByPixelDistance,\n standardizeMeasurementHeight,\n TruncatedList,\n} from \"./base\";\nimport { UnitLong } from \"@macrostrat/api-types\";\nimport { ColumnAxisType } from \"@macrostrat/column-components\";\nimport {\n useCompositeScale,\n useMacrostratColumnData,\n} from \"../../data-provider\";\nimport { CompositeColumnScale } from \"../../prepare-units/composite-scale\";\n\nfunction useSGPData({ col_id }) {\n const res = useAPIResult(\n \"https://dev.macrostrat.org/api/pg/sgp_unit_matches\",\n {\n col_id: `eq.${col_id}`,\n },\n (d) => d,\n );\n return res;\n}\n\ninterface SGPSampleData {\n col_id: number;\n unit_id: number;\n sgp_samples: { name: string; id: number }[];\n}\n\nexport function SGPMeasurementsColumn({ columnID, color = \"magenta\" }) {\n const data: SGPSampleData[] | null = useSGPData({ col_id: columnID });\n const { axisType, units } = useMacrostratColumnData();\n const scale = useCompositeScale();\n\n if (data == null || units == null || scale == null) return null;\n\n const data1 = prepareSGPData(data, scale, units, axisType);\n\n return h(BaseMeasurementsColumn, {\n data: data1,\n noteComponent: SGPSamplesNote,\n focusedNoteComponent: SGPSamplesNote,\n });\n}\n\nfunction SGPSamplesNote(props) {\n const { note, focused } = props;\n const sgp_samples = note?.data;\n\n if (sgp_samples == null || sgp_samples.length === 0) return null;\n\n return h(TruncatedList, {\n className: \"sgp-samples\",\n data: sgp_samples,\n itemRenderer: (p) => h(\"span\", p.data.name),\n maxItems: focused ? Infinity : 5,\n });\n}\n\nfunction prepareSGPData(\n data: SGPSampleData[],\n scale: CompositeColumnScale,\n units: UnitLong[],\n axisType: ColumnAxisType,\n) {\n // Find matching units for samples\n const d1 = data\n .map((sample) => {\n const data = sample.sgp_samples;\n if (data == null || data.length === 0) return null;\n const heightData = standardizeMeasurementHeight(\n { unit_id: sample.unit_id },\n units,\n axisType,\n );\n if (heightData == null) return null;\n data.sort((a, b) => a.id - b.id);\n return {\n ...heightData,\n data,\n id: sample.unit_id,\n };\n })\n .filter(Boolean);\n\n return groupNotesByPixelDistance(d1, scale, axisType, 5);\n}\n"],"names":[],"version":3,"file":"column-views.7fa0d026.js.map"}
@@ -1 +0,0 @@
1
- {"mappings":"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","sources":["packages/column-views/src/facets/detrital-zircon/index.ts"],"sourcesContent":["import {\n DetritalSpectrumPlot,\n DetritalSeries,\n usePlotArea,\n} from \"@macrostrat/data-components\";\nimport type { IUnit } from \"../../units/types\";\nimport hyper from \"@macrostrat/hyper\";\nimport { useDetritalMeasurements, MeasurementInfo } from \"./provider\";\nimport { useMemo } from \"react\";\nimport styles from \"./index.module.sass\";\nimport classNames from \"classnames\";\nimport {\n BaseMeasurementsColumn,\n mergeHeightRanges,\n ColumnMeasurementData,\n} from \"../measurements\";\nimport { group } from \"d3-array\";\nimport { ColumnAxisType } from \"@macrostrat/column-components\";\nimport { useMacrostratColumnData } from \"../../data-provider\";\nimport { getUnitHeightRange } from \"../../prepare-units\";\n\nconst h = hyper.styled(styles);\n\ninterface DetritalItemProps {\n note: DZMeasurementInfo;\n spacing?: {\n below?: number;\n above?: number;\n };\n width?: number;\n height?: number;\n color?: string;\n}\n\ninterface DZMeasurementInfo extends ColumnMeasurementData<MeasurementInfo[]> {\n units: IUnit[];\n}\n\nfunction prepareDetritalData(\n data: MeasurementInfo[],\n units: IUnit[],\n axisType: ColumnAxisType,\n) {\n /** Right now measurement data could be duplicated if there are multiple units linked to the same\n * measuremeta_id. THis happens because matches to units might be at a lower rank (e.g, if the column\n * contains Formations but the measurements are linked to a Group). To handle this, we group by measuremeta_id\n * and then create unique keys based on the set of units linked to each measurement.\n */\n\n // Group data by measuremeta_id\n const measurementsGrouped = group(data, (d) => d.measuremeta_id);\n\n const resMap = new Map<string, DZMeasurementInfo>();\n\n for (const measurements of measurementsGrouped.values()) {\n // Get a list of unique unit_ids for this measurement\n const unitIDs = new Set(measurements.map((m) => m.unit_id));\n const ids = Array.from(unitIDs);\n ids.sort();\n // Key is unique to the set of units\n const key = ids.join(\"-\");\n\n if (!resMap.has(key)) {\n const unitData = ids\n .map((id) => {\n return units.find((u) => u.unit_id === id);\n })\n .filter(Boolean);\n\n const positions = unitData.map((unit) => {\n const [height, top_height] = getUnitHeightRange(unit, axisType);\n return { height, top_height };\n });\n\n // merge positions (note: we could also have multiple separate notes per measurement)\n const pos = mergeHeightRanges(positions, axisType);\n\n resMap.set(key, {\n id: key,\n data: [],\n units: unitData as IUnit[],\n ...pos,\n });\n }\n resMap.get(key)!.data.push(measurements[0]);\n }\n\n return Array.from(resMap.values());\n}\n\nfunction DetritalColumn({ columnID, color = \"magenta\" }) {\n const data = useDetritalMeasurements({ col_id: columnID });\n\n const width = 400;\n const paddingLeft = 40;\n\n const spectrumWidth = width - paddingLeft;\n\n const noteComponent = useMemo(() => {\n return (props) => {\n return h(DetritalGroup, {\n width: spectrumWidth,\n height: 40,\n color,\n ...props,\n });\n };\n }, [width, color]);\n\n const { axisType, units } = useMacrostratColumnData();\n\n const data1 = useMemo(() => {\n if (data == null || units == null) return null;\n return prepareDetritalData(data, units, axisType);\n }, [data, units, axisType]);\n\n return h(BaseMeasurementsColumn, {\n data: data1,\n noteComponent,\n deltaConnectorAttachment: 20,\n });\n}\n\nfunction DepositionalAge({ unit }) {\n const { xScale, height } = usePlotArea();\n\n const { t_age, b_age } = unit;\n const x = xScale(t_age);\n const x1 = xScale(b_age);\n\n return h(\"rect.depositional-age\", { x, width: x1 - x, y: 0, height });\n}\n\nfunction DetritalGroup(props: DetritalItemProps) {\n const { note, width, height, color, spacing } = props;\n const { data, units } = note;\n\n const _color = color;\n\n const spaceBelow = spacing?.below ?? 100;\n const hideAxisLabels = spaceBelow < 60;\n\n return h(\n \"div.detrital-group\",\n { className: classNames({ \"hide-axis\": hideAxisLabels }) },\n [\n h(\n DetritalSpectrumPlot,\n { width, innerHeight: height, showAxisLabels: true, paddingBottom: 40 },\n [\n units.map((unit) => {\n return h(DepositionalAge, { unit });\n }),\n data.map((d) => {\n return h(DetritalSeries, {\n bandwidth: 20,\n data: d.measure_value,\n color: _color,\n });\n }),\n ],\n ),\n ],\n );\n}\n\nexport { DetritalColumn, DetritalGroup };\n"],"names":[],"version":3,"file":"column-views.c3c7901a.js.map"}
@@ -1 +0,0 @@
1
- {"mappings":"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","sources":["packages/column-views/src/facets/measurements/base.ts"],"sourcesContent":["import hyper from \"@macrostrat/hyper\";\nimport styles from \"./base.module.sass\";\nimport { getPositionWithinUnit, getUnitHeightRange } from \"../../prepare-units\";\nimport { ColumnNotes } from \"../../notes\";\nimport { UnitLong } from \"@macrostrat/api-types\";\nimport { ColumnAxisType } from \"@macrostrat/column-components\";\nimport type { CompositeColumnScale } from \"../../units\";\nconst h = hyper.styled(styles);\n\ntype GetHeightRangeFn<T> = (\n data: T,\n unit: UnitLong | null,\n axisType: ColumnAxisType,\n) => MeasurementHeightData;\n\nexport interface BaseMeasurementsColumnProps<T> {\n data: T[];\n noteComponent?: any;\n width?: number;\n paddingLeft?: number;\n className?: string;\n // TODO: these props are confusing\n getUnitID?: (d: T) => number | string;\n isMatchingUnit?: (d: T, unit: UnitLong) => boolean;\n getHeightRange?: GetHeightRangeFn<T>;\n deltaConnectorAttachment?: number;\n}\n\nexport interface ColumnMeasurementData<T = any> extends MeasurementHeightData {\n data: T;\n id: string | number;\n}\n\ntype MeasurementPositionInformation =\n | MeasurementHeightData\n | {\n unit_id: number;\n unit_rel_pos?: number;\n };\n\nexport function standardizeMeasurementHeight(\n pos: MeasurementPositionInformation,\n units: UnitLong[],\n axisType: ColumnAxisType,\n): MeasurementHeightData | null {\n /** Get a standardized height representation from position information for\n * a measurement\n */\n if (\"height\" in pos) {\n return pos;\n }\n const unit = units.find((u) => u.unit_id === pos.unit_id);\n if (unit == null) {\n return null;\n }\n if (pos.unit_rel_pos != null) {\n const res = getPositionWithinUnit(pos.unit_rel_pos, unit, axisType);\n if (res == null) return null;\n return { height: res };\n } else {\n const [height, top_height] = getUnitHeightRange(unit, axisType);\n return { height, top_height };\n }\n}\n\nexport function mergeHeightRanges(\n data: MeasurementHeightData[],\n axisType: ColumnAxisType,\n): MeasurementHeightData {\n /** Merge multiple height ranges into a single range */\n const heights = [];\n\n for (const d of data) {\n heights.push(d.height);\n if (d.top_height != null) {\n heights.push(d.top_height);\n }\n }\n\n let height: number;\n let top_height: number;\n if (axisType === ColumnAxisType.AGE || axisType === ColumnAxisType.DEPTH) {\n height = Math.max(...heights);\n top_height = Math.min(...heights);\n } else {\n height = Math.min(...heights);\n top_height = Math.max(...heights);\n }\n\n if (top_height === height) {\n return { height };\n }\n return { height, top_height };\n}\n\nexport type MeasurementHeightData = {\n height: number;\n top_height?: number | null;\n};\n\nexport function BaseMeasurementsColumn({\n data,\n noteComponent,\n width = 500,\n paddingLeft = 40,\n className,\n deltaConnectorAttachment,\n focusedNoteComponent,\n}: BaseMeasurementsColumnProps<any>) {\n if (data == null) return null;\n\n return h(\n \"div.measurements-column\",\n { className },\n h(ColumnNotes, {\n width,\n paddingLeft,\n notes: data,\n noteComponent,\n deltaConnectorAttachment,\n focusedNoteComponent,\n }),\n );\n}\n\ninterface TruncatedListProps {\n data: any[];\n className?: string;\n maxItems?: number;\n itemRenderer?: (props: { data: any }) => any;\n}\n\nexport function TruncatedList({\n data,\n className,\n maxItems = 5,\n itemRenderer = (p) => h(\"span\", p.data),\n}: TruncatedListProps) {\n let tooMany = null;\n let d1 = data;\n if (data.length > maxItems) {\n const n = data.length - maxItems;\n d1 = data.slice(0, maxItems);\n tooMany = h(\"li.too-many\", `and ${n} more`);\n }\n\n return h(\"ul.truncated-list\", { className }, [\n d1.map((d, i) => {\n return h(\"li.element\", { key: i }, h(itemRenderer, { data: d }));\n }),\n tooMany,\n ]);\n}\n\nexport function groupNotesByPixelDistance<T = any>(\n data: ColumnMeasurementData<T[]>[],\n scale: CompositeColumnScale,\n axisType: ColumnAxisType,\n groupDistance: number,\n) {\n /** Group notes that are within a certain pixel distance of each other\n * in display space\n */\n if (data.length === 0 || groupDistance <= 0) return data;\n if (axisType === ColumnAxisType.AGE || axisType === ColumnAxisType.DEPTH) {\n data.sort((a, b) => b.height - a.height);\n } else {\n // Sort data by height (ascending up the column)\n data.sort((a, b) => a.height - b.height);\n }\n\n const groupedData: ColumnMeasurementData<T[]>[] = [];\n let currentGroup: ColumnMeasurementData<T[]> | null = null;\n let currentGroupPosition: number = Infinity;\n\n for (const d of data) {\n // Check distance from current max position\n // Pixels go up as we go down in the section\n\n // The _top_ of the next group must be within groupDistance of the\n // _bottom_ of the current group. This makes sure that we don't collapse\n // groups that are separated by a large distance\n const distance = currentGroupPosition - scale(d.top_height ?? d.height);\n\n if (distance <= groupDistance) {\n if (currentGroup == null) {\n throw new Error(\"Current group is null when it shouldn't be\");\n }\n // Merge into current group\n currentGroup.data.push(...d.data);\n // Update height range\n const top_height = d.top_height ?? d.height;\n if (\n axisType === ColumnAxisType.AGE ||\n axisType === ColumnAxisType.DEPTH\n ) {\n // Inverted axis\n currentGroup.top_height = Math.min(currentGroup.top_height, top_height);\n } else {\n currentGroup.top_height = Math.max(currentGroup.top_height, top_height);\n }\n currentGroup.key = `${currentGroup.height}-${currentGroup.top_height}`;\n } else {\n // Start a new group\n currentGroup = { ...d, data: [...d.data] };\n currentGroupPosition =\n scale(currentGroup.height) ??\n scale(currentGroup.top_height) ??\n Infinity;\n groupedData.push(currentGroup);\n }\n }\n\n return groupedData;\n}\n"],"names":[],"version":3,"file":"column-views.de433f18.js.map"}
@@ -1,2 +0,0 @@
1
- .depositional-age_977b40{fill:var(--column-stroke-color);fill-opacity:.25;stroke-width:1px;stroke:var(--column-stroke-color)}.detrital-group_977b40{margin:-5px -5px -36px -10px}.detrital-group_977b40.hide-axis_977b40 .visx-axis tspan,.detrital-group_977b40.hide-axis_977b40 .visx-axis text{display:none}.dz-spectra_977b40{position:relative}.floating-axis_977b40{position:sticky;bottom:0}
2
- /*# sourceMappingURL=column-views.28609db2.css.map */
@@ -1 +0,0 @@
1
- {"mappings":"ACCA,6HAMA,oDAOM,8HAGJ,qCAGA","sources":["column-views.28609db2.css","packages/column-views/src/facets/detrital-zircon/index.module.sass"],"sourcesContent":[".depositional-age_977b40 {\n fill: var(--column-stroke-color);\n fill-opacity: .25;\n stroke-width: 1px;\n stroke: var(--column-stroke-color);\n}\n\n.detrital-group_977b40 {\n margin: -5px -5px -36px -10px;\n}\n\n.detrital-group_977b40.hide-axis_977b40 .visx-axis tspan, .detrital-group_977b40.hide-axis_977b40 .visx-axis text {\n display: none;\n}\n\n.dz-spectra_977b40 {\n position: relative;\n}\n\n.floating-axis_977b40 {\n position: sticky;\n bottom: 0;\n}\n/*# sourceMappingURL=column-views.28609db2.css.map */\n","\n.depositional-age\n fill: var(--column-stroke-color)\n fill-opacity: 0.25\n stroke-width: 1px\n stroke: var(--column-stroke-color)\n\n.detrital-group\n margin: -5px\n margin-left: -10px\n margin-bottom: -36px\n\n &.hide-axis :global .visx-axis\n tspan, text\n display: none\n\n.dz-spectra\n position: relative\n\n.floating-axis\n position: sticky\n bottom: 0\n"],"names":[],"version":3,"file":"column-views.28609db2.css.map","sourceRoot":"../../../../"}
@@ -1,2 +0,0 @@
1
- import"./column-views.e93b3bdb.js";import"./column-views.869c7199.js";import"./column-views.1d064426.js";import"./column-views.46efb749.js";import"./column-views.dbb4a46b.js";import{usePlotArea as e,DetritalSpectrumPlot as t,DetritalSeries as r}from"@macrostrat/data-components";import a from"@macrostrat/hyper";import{useMemo as o}from"react";import i from"classnames";import{group as n}from"d3-array";function l(e,t,r,a){Object.defineProperty(e,t,{get:r,set:a,enumerable:!0,configurable:!0})}var s=globalThis,u={},m={},c=s.parcelRequirea149;null==c&&((c=function(e){if(e in u)return u[e].exports;if(e in m){var t=m[e];delete m[e];var r={id:e,exports:{}};return u[e]=r,t.call(r.exports,r,r.exports),r.exports}var a=Error("Cannot find module '"+e+"'");throw a.code="MODULE_NOT_FOUND",a}).register=function(e,t){m[e]=t},s.parcelRequirea149=c),c.register;var d={};l(d,"DetritalColumn",()=>w),l(d,"DetritalGroup",()=>b);var p=c("ehHhC"),f=c("jtfAP"),h=c("kIQUG"),g=c("wtIgl"),_=c("iWhRv");let v=a.styled(f&&f.__esModule?f.default:f);function w({columnID:e,color:t="magenta"}){let r=(0,p.useDetritalMeasurements)({col_id:e}),a=o(()=>e=>v(b,{width:360,height:40,color:t,...e}),[400,t]),{axisType:i,units:l}=(0,g.useMacrostratColumnData)(),s=o(()=>null==r||null==l?null:function(e,t,r){let a=n(e,e=>e.measuremeta_id),o=new Map;for(let e of a.values()){let a=Array.from(new Set(e.map(e=>e.unit_id)));a.sort();let i=a.join("-");if(!o.has(i)){let e=a.map(e=>t.find(t=>t.unit_id===e)).filter(Boolean),n=e.map(e=>{let[t,a]=(0,_.getUnitHeightRange)(e,r);return{height:t,top_height:a}}),l=(0,h.mergeHeightRanges)(n,r);o.set(i,{id:i,data:[],units:e,...l})}o.get(i).data.push(e[0])}return Array.from(o.values())}(r,l,i),[r,l,i]);return v(h.BaseMeasurementsColumn,{data:s,noteComponent:a,deltaConnectorAttachment:20})}function H({unit:t}){let{xScale:r,height:a}=e(),{t_age:o,b_age:i}=t,n=r(o);return v("rect.depositional-age",{x:n,width:r(i)-n,y:0,height:a})}function b(e){let{note:a,width:o,height:n,color:l,spacing:s}=e,{data:u,units:m}=a;return v("div.detrital-group",{className:i({"hide-axis":(s?.below??100)<60})},[v(t,{width:o,innerHeight:n,showAxisLabels:!0,paddingBottom:40},[m.map(e=>v(H,{unit:e})),u.map(e=>v(r,{bandwidth:20,data:e.measure_value,color:l}))])])}export{w as DetritalColumn,b as DetritalGroup};
2
- //# sourceMappingURL=column-views.5361f0e2.js.map
@@ -1 +0,0 @@
1
- {"mappings":"A,M,6C,A,O,6C,A,O,6C,A,O,6C,A,O,6C,A,Q,e,C,C,wB,C,C,kB,C,K,6B,A,Q,M,mB,A,Q,W,C,K,O,A,Q,M,Y,A,Q,S,C,K,U,C,S,E,C,C,C,C,C,C,C,E,O,c,C,E,E,C,I,E,I,E,W,C,E,a,C,C,E,C,I,E,W,E,C,E,E,C,E,E,E,iB,A,O,I,A,C,E,S,C,E,G,K,E,O,C,C,E,C,O,C,G,K,E,C,I,E,C,C,E,A,Q,C,C,E,C,I,E,C,G,E,Q,C,C,E,O,C,C,E,C,E,E,I,C,E,O,C,E,E,O,E,E,O,A,C,I,E,A,M,uB,E,I,O,E,I,C,mB,C,C,E,Q,C,S,C,C,C,E,C,C,E,C,C,E,E,iB,C,G,E,Q,C,I,E,C,E,E,E,iB,I,G,E,E,gB,I,G,I,E,E,S,E,E,S,E,E,S,E,E,S,E,E,SCqBA,IAAM,EAAI,AAAA,EAAM,MAAM,C,AAAC,G,AAAA,E,U,C,AAAA,E,O,CAAA,GAqEvB,SAAS,EAAe,CAAA,SAAE,CAAQ,CAAA,MAAE,EAAQ,SAAA,CAAW,EACrD,IAAM,EAAO,AAAA,CAAA,EAAA,EAAA,uBAAsB,AAAtB,EAAwB,CAAE,OAAQ,CAAS,GAOlD,EAAgB,AAAA,EAAQ,IACrB,AAAC,GACC,EAAE,EAAe,CACtB,MALgB,IAMhB,OAAQ,GACR,MAAA,EACA,GAAG,CAAK,AACV,GAED,CAdW,IAcH,EAAM,EAEX,CAAA,SAAE,CAAQ,CAAA,MAAE,CAAK,CAAE,CAAG,AAAA,CAAA,EAAA,EAAA,uBAAsB,AAAtB,IAEtB,EAAQ,AAAA,EAAQ,IACpB,AAAI,AAAQ,MAAR,GAAgB,AAAS,MAAT,EAAsB,KACnC,AA3EX,SACE,CAAuB,CACvB,CAAc,CACd,CAAwB,EASxB,IAAM,EAAsB,AAAA,EAAM,EAAM,AAAC,GAAM,EAAE,cAAc,EAEzD,EAAS,IAAI,IAEnB,IAAK,IAAM,KAAgB,EAAoB,MAAM,GAAI,CAGvD,IAAM,EAAM,MAAM,IAAI,CADN,IAAI,IAAI,EAAa,GAAG,CAAC,AAAC,GAAM,EAAE,OAAO,IAEzD,EAAI,IAAI,GAER,IAAM,EAAM,EAAI,IAAI,CAAC,KAErB,GAAI,CAAC,EAAO,GAAG,CAAC,GAAM,CACpB,IAAM,EAAW,EACd,GAAG,CAAC,AAAC,GACG,EAAM,IAAI,CAAC,AAAC,GAAM,EAAE,OAAO,GAAK,IAExC,MAAM,CAAC,SAEJ,EAAY,EAAS,GAAG,CAAC,AAAC,IAC9B,GAAM,CAAC,EAAQ,EAAW,CAAG,AAAA,CAAA,EAAA,EAAA,kBAAiB,AAAjB,EAAmB,EAAM,GACtD,MAAO,CAAE,OAAA,EAAQ,WAAA,CAAW,CAC9B,GAGM,EAAM,AAAA,CAAA,EAAA,EAAA,iBAAgB,AAAhB,EAAkB,EAAW,GAEzC,EAAO,GAAG,CAAC,EAAK,CACd,GAAI,EACJ,KAAM,EAAE,CACR,MAAO,EACP,GAAG,CAAG,AACR,EACF,CACA,EAAO,GAAG,CAAC,GAAM,IAAI,CAAC,IAAI,CAAC,CAAY,CAAC,EAAE,CAC5C,CAEA,OAAO,MAAM,IAAI,CAAC,EAAO,MAAM,GACjC,EAyB+B,EAAM,EAAO,GACvC,CAAC,EAAM,EAAO,EAAS,EAE1B,OAAO,EAAE,EAAA,sBAAqB,CAAG,CAC/B,KAAM,EACN,cAAA,EACA,yBAA0B,EAC5B,EACF,CAEA,SAAS,EAAgB,CAAA,KAAE,CAAI,CAAE,EAC/B,GAAM,CAAA,OAAE,CAAM,CAAA,OAAE,CAAM,CAAE,CAAG,AAAA,IAErB,CAAA,MAAE,CAAK,CAAA,MAAE,CAAK,CAAE,CAAG,EACnB,EAAI,EAAO,GAGjB,OAAO,EAAE,wBAAyB,CAAE,EAAA,EAAG,MAAO,AAFnC,EAAO,GAEiC,EAAG,EAAG,EAAG,OAAA,CAAO,EACrE,CAEA,SAAS,EAAc,CAAwB,EAC7C,GAAM,CAAA,KAAE,CAAI,CAAA,MAAE,CAAK,CAAA,OAAE,CAAM,CAAA,MAAE,CAAK,CAAA,QAAE,CAAO,CAAE,CAAG,EAC1C,CAAA,KAAE,CAAI,CAAA,MAAE,CAAK,CAAE,CAAG,EAOxB,OAAO,EACL,qBACA,CAAE,UAAW,AAAA,EAAW,CAAE,YAJL,AADJ,CAAA,GAAS,OAAS,GAArC,EACoC,EAIoB,EAAG,EACzD,CACE,EACE,EACA,CAAE,MAAA,EAAO,YAAa,EAAQ,eAAgB,CAAA,EAAM,cAAe,EAAG,EACtE,CACE,EAAM,GAAG,CAAC,AAAC,GACF,EAAE,EAAiB,CAAE,KAAA,CAAK,IAEnC,EAAK,GAAG,CAAC,AAAC,GACD,EAAE,EAAgB,CACvB,UAAW,GACX,KAAM,EAAE,aAAa,CACrB,MApBG,CAqBL,IAEH,EAEJ,CAEL,Q,K,c,C,K,a","sources":["<anon>","packages/column-views/src/facets/detrital-zircon/index.ts"],"sourcesContent":["import \"./column-views.e93b3bdb.js\";\nimport \"./column-views.869c7199.js\";\nimport \"./column-views.1d064426.js\";\nimport \"./column-views.46efb749.js\";\nimport \"./column-views.dbb4a46b.js\";\nimport {usePlotArea as $9VOFI$usePlotArea, DetritalSpectrumPlot as $9VOFI$DetritalSpectrumPlot, DetritalSeries as $9VOFI$DetritalSeries} from \"@macrostrat/data-components\";\nimport $9VOFI$macrostrathyper from \"@macrostrat/hyper\";\nimport {useMemo as $9VOFI$useMemo} from \"react\";\nimport $9VOFI$classnames from \"classnames\";\nimport {group as $9VOFI$group} from \"d3-array\";\n\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\n\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\n var $parcel$global = globalThis;\n \nvar $parcel$modules = {};\nvar $parcel$inits = {};\n\nvar parcelRequire = $parcel$global[\"parcelRequirea149\"];\n\nif (parcelRequire == null) {\n parcelRequire = function(id) {\n if (id in $parcel$modules) {\n return $parcel$modules[id].exports;\n }\n if (id in $parcel$inits) {\n var init = $parcel$inits[id];\n delete $parcel$inits[id];\n var module = {id: id, exports: {}};\n $parcel$modules[id] = module;\n init.call(module.exports, module, module.exports);\n return module.exports;\n }\n var err = new Error(\"Cannot find module '\" + id + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n };\n\n parcelRequire.register = function register(id, init) {\n $parcel$inits[id] = init;\n };\n\n $parcel$global[\"parcelRequirea149\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\nvar $68f55e74a5c97233$exports = {};\n\n$parcel$export($68f55e74a5c97233$exports, \"DetritalColumn\", () => $68f55e74a5c97233$export$f176396e104db8d5);\n$parcel$export($68f55e74a5c97233$exports, \"DetritalGroup\", () => $68f55e74a5c97233$export$1b3047373cd1c8c7);\n\n\n\nvar $ehHhC = parcelRequire(\"ehHhC\");\n\n\nvar $jtfAP = parcelRequire(\"jtfAP\");\n\n\nvar $kIQUG = parcelRequire(\"kIQUG\");\n\n\nvar $wtIgl = parcelRequire(\"wtIgl\");\n\nvar $iWhRv = parcelRequire(\"iWhRv\");\nconst $68f55e74a5c97233$var$h = (0, $9VOFI$macrostrathyper).styled((0, (/*@__PURE__*/$parcel$interopDefault($jtfAP))));\nfunction $68f55e74a5c97233$var$prepareDetritalData(data, units, axisType) {\n /** Right now measurement data could be duplicated if there are multiple units linked to the same\n * measuremeta_id. THis happens because matches to units might be at a lower rank (e.g, if the column\n * contains Formations but the measurements are linked to a Group). To handle this, we group by measuremeta_id\n * and then create unique keys based on the set of units linked to each measurement.\n */ // Group data by measuremeta_id\n const measurementsGrouped = (0, $9VOFI$group)(data, (d)=>d.measuremeta_id);\n const resMap = new Map();\n for (const measurements of measurementsGrouped.values()){\n // Get a list of unique unit_ids for this measurement\n const unitIDs = new Set(measurements.map((m)=>m.unit_id));\n const ids = Array.from(unitIDs);\n ids.sort();\n // Key is unique to the set of units\n const key = ids.join(\"-\");\n if (!resMap.has(key)) {\n const unitData = ids.map((id)=>{\n return units.find((u)=>u.unit_id === id);\n }).filter(Boolean);\n const positions = unitData.map((unit)=>{\n const [height, top_height] = (0, $iWhRv.getUnitHeightRange)(unit, axisType);\n return {\n height: height,\n top_height: top_height\n };\n });\n // merge positions (note: we could also have multiple separate notes per measurement)\n const pos = (0, $kIQUG.mergeHeightRanges)(positions, axisType);\n resMap.set(key, {\n id: key,\n data: [],\n units: unitData,\n ...pos\n });\n }\n resMap.get(key).data.push(measurements[0]);\n }\n return Array.from(resMap.values());\n}\nfunction $68f55e74a5c97233$export$f176396e104db8d5({ columnID: columnID, color: color = \"magenta\" }) {\n const data = (0, $ehHhC.useDetritalMeasurements)({\n col_id: columnID\n });\n const width = 400;\n const paddingLeft = 40;\n const spectrumWidth = width - paddingLeft;\n const noteComponent = (0, $9VOFI$useMemo)(()=>{\n return (props)=>{\n return $68f55e74a5c97233$var$h($68f55e74a5c97233$export$1b3047373cd1c8c7, {\n width: spectrumWidth,\n height: 40,\n color: color,\n ...props\n });\n };\n }, [\n width,\n color\n ]);\n const { axisType: axisType, units: units } = (0, $wtIgl.useMacrostratColumnData)();\n const data1 = (0, $9VOFI$useMemo)(()=>{\n if (data == null || units == null) return null;\n return $68f55e74a5c97233$var$prepareDetritalData(data, units, axisType);\n }, [\n data,\n units,\n axisType\n ]);\n return $68f55e74a5c97233$var$h((0, $kIQUG.BaseMeasurementsColumn), {\n data: data1,\n noteComponent: noteComponent,\n deltaConnectorAttachment: 20\n });\n}\nfunction $68f55e74a5c97233$var$DepositionalAge({ unit: unit }) {\n const { xScale: xScale, height: height } = (0, $9VOFI$usePlotArea)();\n const { t_age: t_age, b_age: b_age } = unit;\n const x = xScale(t_age);\n const x1 = xScale(b_age);\n return $68f55e74a5c97233$var$h(\"rect.depositional-age\", {\n x: x,\n width: x1 - x,\n y: 0,\n height: height\n });\n}\nfunction $68f55e74a5c97233$export$1b3047373cd1c8c7(props) {\n const { note: note, width: width, height: height, color: color, spacing: spacing } = props;\n const { data: data, units: units } = note;\n const _color = color;\n const spaceBelow = spacing?.below ?? 100;\n const hideAxisLabels = spaceBelow < 60;\n return $68f55e74a5c97233$var$h(\"div.detrital-group\", {\n className: (0, $9VOFI$classnames)({\n \"hide-axis\": hideAxisLabels\n })\n }, [\n $68f55e74a5c97233$var$h((0, $9VOFI$DetritalSpectrumPlot), {\n width: width,\n innerHeight: height,\n showAxisLabels: true,\n paddingBottom: 40\n }, [\n units.map((unit)=>{\n return $68f55e74a5c97233$var$h($68f55e74a5c97233$var$DepositionalAge, {\n unit: unit\n });\n }),\n data.map((d)=>{\n return $68f55e74a5c97233$var$h((0, $9VOFI$DetritalSeries), {\n bandwidth: 20,\n data: d.measure_value,\n color: _color\n });\n })\n ])\n ]);\n}\n\n\nexport {$68f55e74a5c97233$export$f176396e104db8d5 as DetritalColumn, $68f55e74a5c97233$export$1b3047373cd1c8c7 as DetritalGroup};\n//# sourceMappingURL=column-views.5361f0e2.js.map\n","import {\n DetritalSpectrumPlot,\n DetritalSeries,\n usePlotArea,\n} from \"@macrostrat/data-components\";\nimport type { IUnit } from \"../../units/types\";\nimport hyper from \"@macrostrat/hyper\";\nimport { useDetritalMeasurements, MeasurementInfo } from \"./provider\";\nimport { useMemo } from \"react\";\nimport styles from \"./index.module.sass\";\nimport classNames from \"classnames\";\nimport {\n BaseMeasurementsColumn,\n mergeHeightRanges,\n ColumnMeasurementData,\n} from \"../measurements\";\nimport { group } from \"d3-array\";\nimport { ColumnAxisType } from \"@macrostrat/column-components\";\nimport { useMacrostratColumnData } from \"../../data-provider\";\nimport { getUnitHeightRange } from \"../../prepare-units\";\n\nconst h = hyper.styled(styles);\n\ninterface DetritalItemProps {\n note: DZMeasurementInfo;\n spacing?: {\n below?: number;\n above?: number;\n };\n width?: number;\n height?: number;\n color?: string;\n}\n\ninterface DZMeasurementInfo extends ColumnMeasurementData<MeasurementInfo[]> {\n units: IUnit[];\n}\n\nfunction prepareDetritalData(\n data: MeasurementInfo[],\n units: IUnit[],\n axisType: ColumnAxisType,\n) {\n /** Right now measurement data could be duplicated if there are multiple units linked to the same\n * measuremeta_id. THis happens because matches to units might be at a lower rank (e.g, if the column\n * contains Formations but the measurements are linked to a Group). To handle this, we group by measuremeta_id\n * and then create unique keys based on the set of units linked to each measurement.\n */\n\n // Group data by measuremeta_id\n const measurementsGrouped = group(data, (d) => d.measuremeta_id);\n\n const resMap = new Map<string, DZMeasurementInfo>();\n\n for (const measurements of measurementsGrouped.values()) {\n // Get a list of unique unit_ids for this measurement\n const unitIDs = new Set(measurements.map((m) => m.unit_id));\n const ids = Array.from(unitIDs);\n ids.sort();\n // Key is unique to the set of units\n const key = ids.join(\"-\");\n\n if (!resMap.has(key)) {\n const unitData = ids\n .map((id) => {\n return units.find((u) => u.unit_id === id);\n })\n .filter(Boolean);\n\n const positions = unitData.map((unit) => {\n const [height, top_height] = getUnitHeightRange(unit, axisType);\n return { height, top_height };\n });\n\n // merge positions (note: we could also have multiple separate notes per measurement)\n const pos = mergeHeightRanges(positions, axisType);\n\n resMap.set(key, {\n id: key,\n data: [],\n units: unitData as IUnit[],\n ...pos,\n });\n }\n resMap.get(key)!.data.push(measurements[0]);\n }\n\n return Array.from(resMap.values());\n}\n\nfunction DetritalColumn({ columnID, color = \"magenta\" }) {\n const data = useDetritalMeasurements({ col_id: columnID });\n\n const width = 400;\n const paddingLeft = 40;\n\n const spectrumWidth = width - paddingLeft;\n\n const noteComponent = useMemo(() => {\n return (props) => {\n return h(DetritalGroup, {\n width: spectrumWidth,\n height: 40,\n color,\n ...props,\n });\n };\n }, [width, color]);\n\n const { axisType, units } = useMacrostratColumnData();\n\n const data1 = useMemo(() => {\n if (data == null || units == null) return null;\n return prepareDetritalData(data, units, axisType);\n }, [data, units, axisType]);\n\n return h(BaseMeasurementsColumn, {\n data: data1,\n noteComponent,\n deltaConnectorAttachment: 20,\n });\n}\n\nfunction DepositionalAge({ unit }) {\n const { xScale, height } = usePlotArea();\n\n const { t_age, b_age } = unit;\n const x = xScale(t_age);\n const x1 = xScale(b_age);\n\n return h(\"rect.depositional-age\", { x, width: x1 - x, y: 0, height });\n}\n\nfunction DetritalGroup(props: DetritalItemProps) {\n const { note, width, height, color, spacing } = props;\n const { data, units } = note;\n\n const _color = color;\n\n const spaceBelow = spacing?.below ?? 100;\n const hideAxisLabels = spaceBelow < 60;\n\n return h(\n \"div.detrital-group\",\n { className: classNames({ \"hide-axis\": hideAxisLabels }) },\n [\n h(\n DetritalSpectrumPlot,\n { width, innerHeight: height, showAxisLabels: true, paddingBottom: 40 },\n [\n units.map((unit) => {\n return h(DepositionalAge, { unit });\n }),\n data.map((d) => {\n return h(DetritalSeries, {\n bandwidth: 20,\n data: d.measure_value,\n color: _color,\n });\n }),\n ],\n ),\n ],\n );\n}\n\nexport { DetritalColumn, DetritalGroup };\n"],"names":["usePlotArea","$9VOFI$usePlotArea","DetritalSpectrumPlot","$9VOFI$DetritalSpectrumPlot","DetritalSeries","$9VOFI$DetritalSeries","$9VOFI$macrostrathyper","useMemo","$9VOFI$useMemo","$9VOFI$classnames","group","$9VOFI$group","$parcel$export","e","n","v","s","Object","defineProperty","get","set","enumerable","configurable","$parcel$global","globalThis","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","$68f55e74a5c97233$exports","$68f55e74a5c97233$export$f176396e104db8d5","$68f55e74a5c97233$export$1b3047373cd1c8c7","$ehHhC","$jtfAP","$kIQUG","$wtIgl","$iWhRv","$68f55e74a5c97233$var$h","styled","a","__esModule","default","columnID","color","data","useDetritalMeasurements","col_id","noteComponent","props","width","height","axisType","units","useMacrostratColumnData","data1","$68f55e74a5c97233$var$prepareDetritalData","measurementsGrouped","d","measuremeta_id","resMap","Map","measurements","values","ids","Array","from","Set","map","m","unit_id","sort","key","join","has","unitData","find","u","filter","Boolean","positions","unit","top_height","getUnitHeightRange","pos","mergeHeightRanges","push","BaseMeasurementsColumn","deltaConnectorAttachment","$68f55e74a5c97233$var$DepositionalAge","xScale","t_age","b_age","x","x1","y","note","spacing","className","spaceBelow","below","innerHeight","showAxisLabels","paddingBottom","bandwidth","measure_value","DetritalColumn","DetritalGroup"],"version":3,"file":"column-views.5361f0e2.js.map","sourceRoot":"../../../../"}
@@ -1,2 +0,0 @@
1
- import"./column-views.af480651.js";import"./column-views.5361f0e2.js";import"./column-views.7c322202.js";import"./column-views.b103acbc.js";function e(e,a){return Object.keys(a).forEach(function(t){"default"===t||"__esModule"===t||Object.prototype.hasOwnProperty.call(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:function(){return a[t]}})}),e}var a=globalThis,t={},r={},o=a.parcelRequirea149;null==o&&((o=function(e){if(e in t)return t[e].exports;if(e in r){var a=r[e];delete r[e];var o={id:e,exports:{}};return t[e]=o,a.call(o.exports,o,o.exports),o.exports}var c=Error("Cannot find module '"+e+"'");throw c.code="MODULE_NOT_FOUND",c}).register=function(e,a){r[e]=a},a.parcelRequirea149=o),o.register;var c={},s=o("3S9SB"),f=o("7kahb"),b=o("28PcI"),$=o("2koQo");e(c,s),e(c,f),e(c,b),e(c,$);export{$ea2f112131e22f14$export$554267114407ef68 as PBDBFossilsColumn,$8e174c7ae24a4598$export$a990c76b38782f57 as FossilDataType,$8e174c7ae24a4598$export$a990c76b38782f57 as FossilDataType,$9cea14fa75e12a56$export$652730986cccff7a as PBDBOccurrencesMatrix,$68f55e74a5c97233$export$f176396e104db8d5 as DetritalColumn,$68f55e74a5c97233$export$1b3047373cd1c8c7 as DetritalGroup,$5ccf8f2b270f7458$export$c69bd0285aa5d775 as IsotopesDataset,$5ccf8f2b270f7458$export$5d8aa8022c284748 as IsotopesColumn,$5cb80f5b33baeaea$export$c644ef985ce7a4c4 as MeasurementDataContext,$5cb80f5b33baeaea$export$5f01d5b342a89841 as MeasurementDataProvider,$5cb80f5b33baeaea$export$8a0335fd9ff72150 as useMeasurementData,$7e05644cbb5d2dbb$export$9d101e1fcb2166a6 as standardizeMeasurementHeight,$7e05644cbb5d2dbb$export$8f2afa8ddee7317e as mergeHeightRanges,$7e05644cbb5d2dbb$export$ce5c4f2fdf4e644d as BaseMeasurementsColumn,$7e05644cbb5d2dbb$export$653e47a7a0da0f0d as TruncatedList,$7e05644cbb5d2dbb$export$4e649f790614b299 as groupNotesByPixelDistance,$48680a4cd2abcbe4$export$c49cf57576706bab as SGPMeasurementsColumn};
2
- //# sourceMappingURL=column-views.777b9bb6.js.map
@@ -1 +0,0 @@
1
- {"mappings":"A,M,6C,A,O,6C,A,O,6C,A,O,6C,C,S,E,C,C,C,E,O,O,I,C,G,O,C,S,C,E,Y,G,A,e,G,O,S,C,c,C,I,C,E,I,O,c,C,E,E,C,W,C,E,I,W,O,C,C,E,A,C,E,G,C,C,I,E,W,E,C,E,E,C,E,E,E,iB,A,O,I,A,C,E,S,C,E,G,K,E,O,C,C,E,C,O,C,G,K,E,C,I,E,C,C,E,A,Q,C,C,E,C,I,E,C,G,E,Q,C,C,E,O,C,C,E,C,E,E,I,C,E,O,C,E,E,O,E,E,O,A,C,I,E,A,M,uB,E,I,O,E,I,C,mB,C,C,E,Q,C,S,C,C,C,E,C,C,E,C,C,E,E,iB,C,G,E,Q,C,I,E,C,E,E,E,S,E,E,S,E,E,S,E,E,S,E,E,G,E,E,G,E,E,G,E,E,U,6C,iB,C,6C,c,C,6C,c,C,6C,qB,C,6C,c,C,6C,a,C,6C,e,C,6C,c,C,6C,sB,C,6C,uB,C,6C,kB,C,6C,4B,C,6C,iB,C,6C,sB,C,6C,a,C,6C,yB,C,6C,qB","sources":["<anon>","packages/column-views/src/facets/index.ts"],"sourcesContent":["import \"./column-views.af480651.js\";\nimport \"./column-views.5361f0e2.js\";\nimport \"./column-views.7c322202.js\";\nimport \"./column-views.b103acbc.js\";\n\n\nfunction $parcel$exportWildcard(dest, source) {\n Object.keys(source).forEach(function(key) {\n if (key === 'default' || key === '__esModule' || Object.prototype.hasOwnProperty.call(dest, key)) {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function get() {\n return source[key];\n }\n });\n });\n\n return dest;\n}\n\n var $parcel$global = globalThis;\n \nvar $parcel$modules = {};\nvar $parcel$inits = {};\n\nvar parcelRequire = $parcel$global[\"parcelRequirea149\"];\n\nif (parcelRequire == null) {\n parcelRequire = function(id) {\n if (id in $parcel$modules) {\n return $parcel$modules[id].exports;\n }\n if (id in $parcel$inits) {\n var init = $parcel$inits[id];\n delete $parcel$inits[id];\n var module = {id: id, exports: {}};\n $parcel$modules[id] = module;\n init.call(module.exports, module, module.exports);\n return module.exports;\n }\n var err = new Error(\"Cannot find module '\" + id + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n };\n\n parcelRequire.register = function register(id, init) {\n $parcel$inits[id] = init;\n };\n\n $parcel$global[\"parcelRequirea149\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\nvar $a66a583913c03b09$exports = {};\n\nvar $3S9SB = parcelRequire(\"3S9SB\");\n\nvar $7kahb = parcelRequire(\"7kahb\");\n\nvar $28PcI = parcelRequire(\"28PcI\");\n\nvar $2koQo = parcelRequire(\"2koQo\");\n$parcel$exportWildcard($a66a583913c03b09$exports, $3S9SB);\n$parcel$exportWildcard($a66a583913c03b09$exports, $7kahb);\n$parcel$exportWildcard($a66a583913c03b09$exports, $28PcI);\n$parcel$exportWildcard($a66a583913c03b09$exports, $2koQo);\n\n\nexport {$ea2f112131e22f14$export$554267114407ef68 as PBDBFossilsColumn, $8e174c7ae24a4598$export$a990c76b38782f57 as FossilDataType, $8e174c7ae24a4598$export$a990c76b38782f57 as FossilDataType, $9cea14fa75e12a56$export$652730986cccff7a as PBDBOccurrencesMatrix, $68f55e74a5c97233$export$f176396e104db8d5 as DetritalColumn, $68f55e74a5c97233$export$1b3047373cd1c8c7 as DetritalGroup, $5ccf8f2b270f7458$export$c69bd0285aa5d775 as IsotopesDataset, $5ccf8f2b270f7458$export$5d8aa8022c284748 as IsotopesColumn, $5cb80f5b33baeaea$export$c644ef985ce7a4c4 as MeasurementDataContext, $5cb80f5b33baeaea$export$5f01d5b342a89841 as MeasurementDataProvider, $5cb80f5b33baeaea$export$8a0335fd9ff72150 as useMeasurementData, $7e05644cbb5d2dbb$export$9d101e1fcb2166a6 as standardizeMeasurementHeight, $7e05644cbb5d2dbb$export$8f2afa8ddee7317e as mergeHeightRanges, $7e05644cbb5d2dbb$export$ce5c4f2fdf4e644d as BaseMeasurementsColumn, $7e05644cbb5d2dbb$export$653e47a7a0da0f0d as TruncatedList, $7e05644cbb5d2dbb$export$4e649f790614b299 as groupNotesByPixelDistance, $48680a4cd2abcbe4$export$c49cf57576706bab as SGPMeasurementsColumn};\n//# sourceMappingURL=column-views.777b9bb6.js.map\n","export * from \"./fossils\";\nexport * from \"./detrital-zircon\";\nexport * from \"./carbon-isotopes\";\nexport * from \"./measurements\";\n"],"names":["$parcel$exportWildcard","dest","source","Object","keys","forEach","key","prototype","hasOwnProperty","call","defineProperty","enumerable","get","$parcel$global","globalThis","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","err","Error","code","register","$a66a583913c03b09$exports","$3S9SB","$7kahb","$28PcI","$2koQo","$ea2f112131e22f14$export$554267114407ef68","PBDBFossilsColumn","$8e174c7ae24a4598$export$a990c76b38782f57","FossilDataType","$9cea14fa75e12a56$export$652730986cccff7a","PBDBOccurrencesMatrix","$68f55e74a5c97233$export$f176396e104db8d5","DetritalColumn","$68f55e74a5c97233$export$1b3047373cd1c8c7","DetritalGroup","$5ccf8f2b270f7458$export$c69bd0285aa5d775","IsotopesDataset","$5ccf8f2b270f7458$export$5d8aa8022c284748","IsotopesColumn","$5cb80f5b33baeaea$export$c644ef985ce7a4c4","MeasurementDataContext","$5cb80f5b33baeaea$export$5f01d5b342a89841","MeasurementDataProvider","$5cb80f5b33baeaea$export$8a0335fd9ff72150","useMeasurementData","$7e05644cbb5d2dbb$export$9d101e1fcb2166a6","standardizeMeasurementHeight","$7e05644cbb5d2dbb$export$8f2afa8ddee7317e","mergeHeightRanges","$7e05644cbb5d2dbb$export$ce5c4f2fdf4e644d","BaseMeasurementsColumn","$7e05644cbb5d2dbb$export$653e47a7a0da0f0d","TruncatedList","$7e05644cbb5d2dbb$export$4e649f790614b299","groupNotesByPixelDistance","$48680a4cd2abcbe4$export$c49cf57576706bab","SGPMeasurementsColumn"],"version":3,"file":"column-views.777b9bb6.js.map","sourceRoot":"../../../../"}
@@ -1,2 +0,0 @@
1
- import"./column-views.dbb4a46b.js";import"./column-views.46efb749.js";import e from"@macrostrat/hyper";import t,{useCallback as o,useMemo as n}from"react";import{NotesColumn as r}from"@macrostrat/column-components";var a=globalThis,i={},s={},l=a.parcelRequirea149;null==l&&((l=function(e){if(e in i)return i[e].exports;if(e in s){var t=s[e];delete s[e];var o={id:e,exports:{}};return i[e]=o,t.call(o.exports,o,o.exports),o.exports}var n=Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n}).register=function(e,t){s[e]=t},a.parcelRequirea149=l),l.register;var c=l("iWhRv"),m=l("wtIgl");function p(e,t){let{axisType:o}=t,[n,r]=(0,c.getUnitHeightRange)(e,o);return{height:n,top_height:r,data:e,id:e.unit_id}}let u=e=>e.unit_name.replace("Mbr","Member").replace("Fm","Formation").replace("Gp","Group"),f=t.memo(function(t){let{axisType:n,units:a}=(0,m.useMacrostratColumnData)(),i=(0,m.useCompositeScale)(),{left:s=0,noteComponent:l,shouldRenderNote:c=(e,t)=>!0,minimumHeight:u=0,divisions:f=a,...d}=t,h=o(e=>0==u||Math.abs(i(e.top_height)-i(e.height))>u,[i,u]);return null==f?null:e(r,{transform:`translate(${s})`,editable:!1,noteComponent:l,notes:f.filter(c).map(e=>p(e,{axisType:n})).filter(h),forceOptions:{nodeSpacing:1},...d})});function d(t){let{nameForDivision:o=u,noteComponent:r,...a}=t,i=n(()=>t=>{let{note:n}=t;return e("p.col-note-label",o(n.data))},[o]);return e(f,{noteComponent:r??i,...a})}export{p as noteForDivision,u as defaultNameFunction,f as UnitDataColumn,d as UnitNamesColumn};
2
- //# sourceMappingURL=column-views.93bde6c1.js.map
@@ -1 +0,0 @@
1
- {"mappings":"A,M,6C,A,O,6C,A,Q,M,mB,A,Q,G,e,C,C,W,C,K,O,A,Q,e,C,K,+B,C,I,E,W,E,C,E,E,C,E,E,E,iB,A,O,I,A,C,E,S,C,E,G,K,E,O,C,C,E,C,O,C,G,K,E,C,I,E,C,C,E,A,Q,C,C,E,C,I,E,C,G,E,Q,C,C,E,O,C,C,E,C,E,E,I,C,E,O,C,E,E,O,E,E,O,A,C,I,E,A,M,uB,E,I,O,E,I,C,mB,C,C,E,Q,C,S,C,C,C,E,C,C,E,C,C,E,E,iB,C,G,E,Q,C,I,E,E,S,E,E,SC+BA,SAAS,EACP,CAAU,CACV,CAAkC,EAElC,GAAM,CAAA,SAAE,CAAQ,CAAE,CAAG,EAEf,CAAC,EAAQ,EAAW,CAAG,AAAA,CAAA,EAAA,EAAA,kBAAiB,AAAjB,EAAmB,EAAK,GAErD,MAAO,CACL,OAAA,EACA,WAAA,EACA,KAAM,EACN,GAAI,EAAI,OAAO,AACjB,CACF,CAEA,IAAM,EAAsB,AAAC,GACpB,EAAI,SAAS,CACjB,OAAO,CAAC,MAAO,UACf,OAAO,CAAC,KAAM,aACd,OAAO,CAAC,KAAM,SA0Cb,EAAiB,AAAA,EAAM,IAAI,CAvCjC,SAAyB,CAAoB,EAC3C,GAAM,CAAA,SAAE,CAAQ,CAAA,MAAE,CAAK,CAAE,CAAG,AAAA,CAAA,EAAA,EAAA,uBAAsB,AAAtB,IACtB,EAAQ,AAAA,CAAA,EAAA,EAAA,iBAAgB,AAAhB,IACR,CAAA,KACJ,EAAO,CAAA,CAAA,cACP,CAAa,CAAA,iBACb,EAAmB,CAAC,EAA8B,IAAc,CAAA,CAAA,CAAA,cAChE,EAAgB,CAAA,CAAA,UAChB,EAAY,CAAA,CACZ,GAAG,EACJ,CAAG,EAEE,EAAsB,AAAA,EAC1B,AAAC,GACC,AAAqB,GAAjB,GAEG,AADI,KAAK,GAAG,CAAC,EAAM,EAAE,UAAU,EAAI,EAAM,EAAE,MAAM,GAC5C,EAEd,CAAC,EAAO,EAAc,SAGxB,AAAI,AAAa,MAAb,EAA0B,KAMvB,AAAA,EAAE,EAAa,CACpB,UAAW,CAAC,UAAU,EAAE,EAAK,CAAC,CAAC,CAC/B,SAAU,CAAA,EACV,cAAA,EACA,MATwB,EACvB,MAAM,CAAC,GACP,GAAG,CAAC,AAAC,GAAa,EAAgB,EAAG,CAAE,SAAA,CAAS,IAChD,MAAM,CAAC,GAOR,aAAc,CACZ,YAAa,CACf,EACA,GAAG,CAAI,AACT,EACF,GAWO,SAAS,EAAgB,CAAqB,EACnD,GAAM,CAAA,gBACJ,EAAkB,CAAA,CAAA,cAClB,CAAa,CACb,GAAG,EACJ,CAAG,EAEE,EAAuB,AAAA,EAC3B,IAAM,AAAC,IACL,GAAM,CAAA,KAAE,CAAI,CAAE,CAAG,EACjB,OAAO,AAAA,EAAE,mBAAoB,EAAgB,EAAK,IAAI,EACxD,EACA,CAAC,EAAgB,EAGnB,OAAO,AAAA,EAAE,EAAgB,CACvB,cAAe,GAAiB,EAChC,GAAG,CAAI,AACT,EACF,Q,K,e,C,K,mB,C,K,c,C,K,e","sources":["<anon>","packages/column-views/src/units/names.ts"],"sourcesContent":["import \"./column-views.dbb4a46b.js\";\nimport \"./column-views.46efb749.js\";\nimport $eWQbS$macrostrathyper from \"@macrostrat/hyper\";\nimport $eWQbS$react, {useCallback as $eWQbS$useCallback, useMemo as $eWQbS$useMemo} from \"react\";\nimport {NotesColumn as $eWQbS$NotesColumn} from \"@macrostrat/column-components\";\n\n\n var $parcel$global = globalThis;\n \nvar $parcel$modules = {};\nvar $parcel$inits = {};\n\nvar parcelRequire = $parcel$global[\"parcelRequirea149\"];\n\nif (parcelRequire == null) {\n parcelRequire = function(id) {\n if (id in $parcel$modules) {\n return $parcel$modules[id].exports;\n }\n if (id in $parcel$inits) {\n var init = $parcel$inits[id];\n delete $parcel$inits[id];\n var module = {id: id, exports: {}};\n $parcel$modules[id] = module;\n init.call(module.exports, module, module.exports);\n return module.exports;\n }\n var err = new Error(\"Cannot find module '\" + id + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n };\n\n parcelRequire.register = function register(id, init) {\n $parcel$inits[id] = init;\n };\n\n $parcel$global[\"parcelRequirea149\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\n\n\n\n\nvar $iWhRv = parcelRequire(\"iWhRv\");\n\nvar $wtIgl = parcelRequire(\"wtIgl\");\nfunction $e80be54614c93c14$export$2f2e65a797f8fc1e(div, opts) {\n const { axisType: axisType } = opts;\n const [height, top_height] = (0, $iWhRv.getUnitHeightRange)(div, axisType);\n return {\n height: height,\n top_height: top_height,\n data: div,\n id: div.unit_id\n };\n}\nconst $e80be54614c93c14$export$c9757aeb43a67df0 = (div)=>{\n return div.unit_name.replace(\"Mbr\", \"Member\").replace(\"Fm\", \"Formation\").replace(\"Gp\", \"Group\");\n};\nfunction $e80be54614c93c14$var$UnitDataColumn_(props) {\n const { axisType: axisType, units: units } = (0, $wtIgl.useMacrostratColumnData)();\n const scale = (0, $wtIgl.useCompositeScale)();\n const { left: left = 0, noteComponent: noteComponent, shouldRenderNote: shouldRenderNote = (note, i)=>true, minimumHeight: minimumHeight = 0, divisions: divisions = units, ...rest } = props;\n const minimumHeightFilter = (0, $eWQbS$useCallback)((d)=>{\n if (minimumHeight == 0) return true;\n const dy = Math.abs(scale(d.top_height) - scale(d.height));\n return dy > minimumHeight;\n }, [\n scale,\n minimumHeight\n ]);\n if (divisions == null) return null;\n const notes = divisions.filter(shouldRenderNote).map((d)=>$e80be54614c93c14$export$2f2e65a797f8fc1e(d, {\n axisType: axisType\n })).filter(minimumHeightFilter);\n return (0, $eWQbS$macrostrathyper)((0, $eWQbS$NotesColumn), {\n transform: `translate(${left})`,\n editable: false,\n noteComponent: noteComponent,\n notes: notes,\n forceOptions: {\n nodeSpacing: 1\n },\n ...rest\n });\n}\nconst $e80be54614c93c14$export$6316e673796ccb55 = (0, $eWQbS$react).memo($e80be54614c93c14$var$UnitDataColumn_);\nfunction $e80be54614c93c14$export$594d19cdd88f8c16(props) {\n const { nameForDivision: nameForDivision = $e80be54614c93c14$export$c9757aeb43a67df0, noteComponent: noteComponent, ...rest } = props;\n const defaultNoteComponent = (0, $eWQbS$useMemo)(()=>(props)=>{\n const { note: note } = props;\n return (0, $eWQbS$macrostrathyper)(\"p.col-note-label\", nameForDivision(note.data));\n }, [\n nameForDivision\n ]);\n return (0, $eWQbS$macrostrathyper)($e80be54614c93c14$export$6316e673796ccb55, {\n noteComponent: noteComponent ?? defaultNoteComponent,\n ...rest\n });\n}\n\n\nexport {$e80be54614c93c14$export$2f2e65a797f8fc1e as noteForDivision, $e80be54614c93c14$export$c9757aeb43a67df0 as defaultNameFunction, $e80be54614c93c14$export$6316e673796ccb55 as UnitDataColumn, $e80be54614c93c14$export$594d19cdd88f8c16 as UnitNamesColumn};\n//# sourceMappingURL=column-views.93bde6c1.js.map\n","import h from \"@macrostrat/hyper\";\nimport { useCallback, useMemo } from \"react\";\nimport {\n ColumnAxisType,\n NotesColumn,\n NotesColumnProps,\n} from \"@macrostrat/column-components\";\nimport type { ColumnDivision } from \"@macrostrat/column-components\";\nimport { IUnit } from \"./types\";\nimport React from \"react\";\nimport { getUnitHeightRange } from \"../prepare-units/utils\";\nimport { CompositeColumnScale } from \"./composite\";\nimport { useCompositeScale, useMacrostratColumnData } from \"../data-provider\";\n\ninterface UnitDataProps extends NotesColumnProps {\n left?: number;\n transform?: string;\n noteComponent?: React.ComponentType<any>;\n shouldRenderNote?(div: ColumnDivision | IUnit, index: number): boolean;\n divisions?: IUnit[];\n minimumHeight?: number;\n scale?: CompositeColumnScale;\n}\n\ntype UnitNote = {\n height: number;\n top_height: number;\n data: IUnit;\n id: number;\n};\n\nfunction noteForDivision(\n div: IUnit,\n opts: { axisType: ColumnAxisType },\n): UnitNote {\n const { axisType } = opts;\n\n const [height, top_height] = getUnitHeightRange(div, axisType);\n\n return {\n height,\n top_height,\n data: div,\n id: div.unit_id,\n };\n}\n\nconst defaultNameFunction = (div) => {\n return div.unit_name\n .replace(\"Mbr\", \"Member\")\n .replace(\"Fm\", \"Formation\")\n .replace(\"Gp\", \"Group\");\n};\n\nfunction UnitDataColumn_(props: UnitDataProps) {\n const { axisType, units } = useMacrostratColumnData();\n const scale = useCompositeScale();\n const {\n left = 0,\n noteComponent,\n shouldRenderNote = (note: ColumnDivision | IUnit, i: number) => true,\n minimumHeight = 0,\n divisions = units,\n ...rest\n } = props;\n\n const minimumHeightFilter = useCallback(\n (d) => {\n if (minimumHeight == 0) return true;\n const dy = Math.abs(scale(d.top_height) - scale(d.height));\n return dy > minimumHeight;\n },\n [scale, minimumHeight],\n );\n\n if (divisions == null) return null;\n const notes: UnitNote[] = divisions\n .filter(shouldRenderNote)\n .map((d: IUnit) => noteForDivision(d, { axisType }))\n .filter(minimumHeightFilter);\n\n return h(NotesColumn, {\n transform: `translate(${left})`,\n editable: false,\n noteComponent,\n notes,\n forceOptions: {\n nodeSpacing: 1,\n },\n ...rest,\n });\n}\n\nconst UnitDataColumn = React.memo(UnitDataColumn_);\n\ninterface UnitNamesProps extends UnitDataProps {\n nameForDivision?(obj: IUnit): string;\n paddingLeft?: number;\n width: number;\n onClickNote?: (note: any) => void;\n}\n\nexport function UnitNamesColumn(props: UnitNamesProps) {\n const {\n nameForDivision = defaultNameFunction,\n noteComponent,\n ...rest\n } = props;\n\n const defaultNoteComponent = useMemo(\n () => (props) => {\n const { note } = props;\n return h(\"p.col-note-label\", nameForDivision(note.data));\n },\n [nameForDivision],\n );\n\n return h(UnitDataColumn, {\n noteComponent: noteComponent ?? defaultNoteComponent,\n ...rest,\n });\n}\n\nexport type { UnitNamesProps };\nexport { defaultNameFunction, noteForDivision, UnitDataColumn };\n"],"names":["$eWQbS$macrostrathyper","$eWQbS$react","useCallback","$eWQbS$useCallback","useMemo","$eWQbS$useMemo","NotesColumn","$eWQbS$NotesColumn","$parcel$global","globalThis","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","$iWhRv","$wtIgl","$e80be54614c93c14$export$2f2e65a797f8fc1e","div","opts","axisType","height","top_height","getUnitHeightRange","data","unit_id","$e80be54614c93c14$export$c9757aeb43a67df0","unit_name","replace","$e80be54614c93c14$export$6316e673796ccb55","memo","props","units","useMacrostratColumnData","scale","useCompositeScale","left","noteComponent","shouldRenderNote","note","i","minimumHeight","divisions","rest","minimumHeightFilter","d","dy","Math","abs","transform","editable","notes","filter","map","forceOptions","nodeSpacing","$e80be54614c93c14$export$594d19cdd88f8c16","nameForDivision","defaultNoteComponent","noteForDivision","defaultNameFunction","UnitDataColumn","UnitNamesColumn"],"version":3,"file":"column-views.93bde6c1.js.map","sourceRoot":"../../../../"}
@@ -1,2 +0,0 @@
1
- import"./column-views.fac4baff.js";import"./column-views.1d064426.js";import"./column-views.46efb749.js";import"./column-views.672b683c.js";import"./column-views.dbb4a46b.js";import"./column-views.b6e86cf0.js";import e from"@macrostrat/hyper";import{ColumnAxisType as t}from"@macrostrat/column-components";import{scaleLinear as n}from"d3-scale";function o(e,t,n,o){Object.defineProperty(e,t,{get:n,set:o,enumerable:!0,configurable:!0})}var l=globalThis,a={},r={},i=l.parcelRequirea149;null==i&&((i=function(e){if(e in a)return a[e].exports;if(e in r){var t=r[e];delete r[e];var n={id:e,exports:{}};return a[e]=n,t.call(n.exports,n,n.exports),n.exports}var o=Error("Cannot find module '"+e+"'");throw o.code="MODULE_NOT_FOUND",o}).register=function(e,t){r[e]=t},l.parcelRequirea149=i),i.register;var s={};o(s,"PBDBFossilsColumn",()=>b),o(s,"FossilDataType",()=>i("dx7no").FossilDataType);var u=i("dx7no"),c=i("kIQUG"),f=i("wtIgl"),m=i("f7qDU"),p=i("iWhRv"),d=i("6dOaS");let _=e.styled(m&&m.__esModule?m.default:m);function b({columnID:e,type:o=u.FossilDataType.Collections}){let l=(0,u.useFossilData)(e,o),{axisType:a,units:r}=(0,f.useMacrostratColumnData)(),i=(0,f.useCompositeScale)();if(null==l||null==r||null==i)return null;let s=function(e,o,l,a,r){let{groupCloseNotes:i=!0}=(void 0)??{},s=new Map;for(let l of e){let e=function(e,o,l){let a=null;if(null!=e.slb&&"mbsf"==e.slu&&(a=Number(e.slb),l===t.DEPTH))return{height:a};if(null==e.unit_id)return null;if(null!=a){let r=o.find(t=>t.unit_id===e.unit_id);if(null==r)return null;let i=function(e,t,o){let l=n((0,p.getUnitHeightRange)(t,o,!1)).domain([0,1]).invert(e);return l<0||l>1?null:l}(a,r,t.DEPTH);return null==i?null:{height:a=(0,p.getPositionWithinUnit)(i,r,l)}}return(0,c.standardizeMeasurementHeight)({unit_id:e.unit_id},o,l)}(l,o,a);if(null==e)continue;let{height:r,top_height:i}=e,u=`${r}`;null!=i&&(u+=`-${i}`),s.has(u)||s.set(u,{height:r,top_height:i??r,data:[],id:u}),s.get(u).data.push(l)}return(0,c.groupNotesByPixelDistance)(Array.from(s.values()),l,a,"number"==typeof i?i:10)}(l,r,i,a);return _(c.BaseMeasurementsColumn,{data:s,noteComponent:h,focusedNoteComponent:h,className:"fossil-collections"})}function h(e){let{note:t,maxItems:n,focused:o=!1}=e,{data:l}=t;return l.sort((e,t)=>{let n=e.best_name??e.cltn_name??"",o=t.best_name??t.cltn_name??"";return n.localeCompare(o)}),_(c.TruncatedList,{data:l,className:"fossil-collections",itemRenderer:g,maxItems:o?1/0:n??5})}function g({data:e}){return _("a.link-id",{href:`https://paleobiodb.org/app/collections#display=col:${e.cltn_id}`,target:"_blank",onClick(e){e.stopPropagation()}},e.best_name??e.cltn_name)}Object.keys(d).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(s,e)||Object.defineProperty(s,e,{enumerable:!0,get:function(){return d[e]}})});export{b as PBDBFossilsColumn,$8e174c7ae24a4598$export$a990c76b38782f57 as FossilDataType,$8e174c7ae24a4598$export$a990c76b38782f57 as FossilDataType,$9cea14fa75e12a56$export$652730986cccff7a as PBDBOccurrencesMatrix};
2
- //# sourceMappingURL=column-views.af480651.js.map
@@ -1 +0,0 @@
1
- {"mappings":"A,M,6C,A,O,6C,A,O,6C,A,O,6C,A,O,6C,A,O,6C,A,Q,M,mB,A,Q,kB,C,K,+B,A,Q,e,C,K,U,C,S,E,C,C,C,C,C,C,C,E,O,c,C,E,E,C,I,E,I,E,W,C,E,a,C,C,E,C,I,E,W,E,C,E,E,C,E,E,E,iB,A,O,I,A,C,E,S,C,E,G,K,E,O,C,C,E,C,O,C,G,K,E,C,I,E,C,C,E,A,Q,C,C,E,C,I,E,C,G,E,Q,C,C,E,O,C,C,E,C,E,E,I,C,E,O,C,E,E,O,E,E,O,A,C,I,E,A,M,uB,E,I,O,E,I,C,mB,C,C,E,Q,C,S,C,C,C,E,C,C,E,C,C,E,E,iB,C,G,E,Q,C,I,E,C,E,E,E,oB,I,G,E,E,iB,I,A,E,S,c,E,I,E,E,S,E,E,S,E,E,S,E,E,S,E,E,S,E,E,SC6BA,IAAM,EAAI,AAAA,EAAM,MAAM,C,AAAC,G,AAAA,E,U,C,AAAA,E,O,CAAA,GAIhB,SAAS,EAAkB,CAAA,SAChC,CAAQ,CAAA,KACR,EAAO,AAAA,EAAA,cAAa,CAAE,WAAW,CAIlC,EACC,IAAM,EAAO,AAAA,CAAA,EAAA,EAAA,aAAY,AAAZ,EAAc,EAAU,GAC/B,CAAA,SAAE,CAAQ,CAAA,MAAE,CAAK,CAAE,CAAG,AAAA,CAAA,EAAA,EAAA,uBAAsB,AAAtB,IACtB,EAAQ,AAAA,CAAA,EAAA,EAAA,iBAAgB,AAAhB,IAEd,GAAI,AAAQ,MAAR,GAAgB,AAAS,MAAT,GAAiB,AAAS,MAAT,EAAe,OAAO,KAE3D,IAAM,EAAQ,AAyEhB,SACE,CAAS,CACT,CAAiB,CACjB,CAA2B,CAC3B,CAAwB,CACxB,CAAgD,EAGhD,GAAM,CAAA,gBAAE,EAAkB,CAAA,CAAA,CAAM,CAAG,AAHnC,CAAA,KAAA,CAAA,GAG8C,CAAC,EAKzC,EAAU,IAAI,IAIpB,IAAK,IAAM,KAAK,EAAM,CACpB,IAAM,EAAQ,AA8BlB,SACE,CAAI,CACJ,CAAiB,CACjB,CAAwB,EAExB,IAAI,EAAwB,KAC5B,GAAI,AAAS,MAAT,EAAE,GAAG,EAAY,AAAS,QAAT,EAAE,GAAG,GAGxB,EAAS,OAAO,EAAE,GAAG,EACjB,IAAa,AAAA,EAAe,KAAK,EAEnC,MAAO,CAAE,OAAA,CAAO,EAGpB,GAAI,AAAa,MAAb,EAAE,OAAO,CAAU,OAAO,KAC9B,GAAI,AAAU,MAAV,EAAgB,CAMlB,IAAM,EAAO,EAAM,IAAI,CAAC,AAAC,GAAM,EAAE,OAAO,GAAK,EAAE,OAAO,EACtD,GAAI,AAAQ,MAAR,EAAc,OAAO,KACzB,IAAM,EAAY,AAatB,SACE,CAAW,CACX,CAAc,CACd,CAAwB,EAKxB,IAAM,EAAS,AADD,AAAA,EADE,AAAA,CAAA,EAAA,EAAA,kBAAiB,AAAjB,EAAmB,EAAM,EAAU,CAAA,IAChB,MAAM,CAAC,CAAC,EAAG,EAAE,EAC3B,MAAM,CAAC,UAC5B,AAAI,EAAS,GAAK,EAAS,EAAU,KAC9B,CACT,EAvBM,EACA,EACA,AAAA,EAAe,KAAK,SAEtB,AAAI,AAAa,MAAb,EAA0B,KAEvB,CAAE,OADT,EAAS,AAAA,CAAA,EAAA,EAAA,qBAAoB,AAApB,EAAsB,EAAW,EAAM,EAChC,CAClB,CAEA,MAAO,AAAA,CAAA,EAAA,EAAA,4BAA2B,AAA3B,EAA6B,CAAE,QAAS,EAAE,OAAO,AAAC,EAAG,EAAO,EACrE,EAjE8C,EAAG,EAAO,GAEpD,GAAI,AAAS,MAAT,EAAe,SACnB,GAAM,CAAA,OAAE,CAAM,CAAA,WAAE,CAAU,CAAE,CAAG,EAE3B,EAAM,CAAA,EAAG,EAAA,CAAQ,AACjB,AAAc,OAAd,GACF,CAAA,GAAO,CAAC,CAAC,EAAE,EAAA,CAAY,AAAZ,EAIT,AAAC,EAAQ,GAAG,CAAC,IACf,EAAQ,GAAG,CAAC,EAAK,CACf,OAAA,EACA,WAAY,GAAc,EAC1B,KAAM,EAAE,CACR,GAAI,CACN,GAEF,EAAQ,GAAG,CAAC,GAAM,IAAI,CAAC,IAAI,CAAC,EAC9B,CAEA,MAAO,AAAA,CAAA,EAAA,EAAA,yBAAwB,AAAxB,EACL,MAAM,IAAI,CAAC,EAAQ,MAAM,IACzB,EACA,EAjCA,AAA2B,UAA3B,OAAO,EAA+B,EAAkB,GAoC5D,EAvHgC,EAAM,EAAO,EAAO,GAElD,OAAO,EAAE,EAAA,sBAAqB,CAAG,CAC/B,KAAM,EACN,cAAe,EACf,qBAAsB,EACtB,UAAW,oBACb,EACF,CAiBA,SAAS,EAAW,CAAsB,EACxC,GAAM,CAAA,KAAE,CAAI,CAAA,SAAE,CAAQ,CAAA,QAAE,EAAU,CAAA,CAAA,CAAO,CAAG,EACtC,CAAA,KAAE,CAAI,CAAE,CAAG,EAQjB,OANA,EAAK,IAAI,CAAC,CAAC,EAAG,KACZ,IAAM,EAAQ,EAAE,SAAS,EAAI,EAAE,SAAS,EAAI,GACtC,EAAQ,EAAE,SAAS,EAAI,EAAE,SAAS,EAAI,GAC5C,OAAO,EAAM,aAAa,CAAC,EAC7B,GAEO,EAAE,EAAA,aAAY,CAAG,CACtB,KAAA,EACA,UAAW,qBACX,aAAc,EACd,SAAU,EAAU,IAAY,GAAY,CAC9C,EACF,CAKA,SAAS,EAAmB,CAAA,KAC1B,CAAI,CAGL,EAEC,OAAO,EACL,YACA,CACE,KAAM,CAAC,mDAAmD,EAAE,EAAK,OAAO,CAAA,CAAE,CAC1E,OAAQ,SACR,QAAQ,CAAC,EACP,EAAE,eAAe,EACnB,CACF,EACA,EAAK,SAAS,EAAI,EAAK,SAAS,CAEpC,C,O,I,C,G,O,C,S,C,E,Y,G,A,e,G,O,S,C,c,C,I,C,E,I,O,c,C,E,E,C,W,C,E,I,W,O,A,C,C,E,A,C,E,U,K,iB,C,6C,c,C,6C,c,C,6C,qB","sources":["<anon>","packages/column-views/src/facets/fossils/index.ts"],"sourcesContent":["import \"./column-views.fac4baff.js\";\nimport \"./column-views.1d064426.js\";\nimport \"./column-views.46efb749.js\";\nimport \"./column-views.672b683c.js\";\nimport \"./column-views.dbb4a46b.js\";\nimport \"./column-views.b6e86cf0.js\";\nimport $2jHE4$macrostrathyper from \"@macrostrat/hyper\";\nimport {ColumnAxisType as $2jHE4$ColumnAxisType} from \"@macrostrat/column-components\";\nimport {scaleLinear as $2jHE4$scaleLinear} from \"d3-scale\";\n\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\n\nfunction $parcel$exportWildcard(dest, source) {\n Object.keys(source).forEach(function(key) {\n if (key === 'default' || key === '__esModule' || Object.prototype.hasOwnProperty.call(dest, key)) {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function get() {\n return source[key];\n }\n });\n });\n\n return dest;\n}\n\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\n var $parcel$global = globalThis;\n \nvar $parcel$modules = {};\nvar $parcel$inits = {};\n\nvar parcelRequire = $parcel$global[\"parcelRequirea149\"];\n\nif (parcelRequire == null) {\n parcelRequire = function(id) {\n if (id in $parcel$modules) {\n return $parcel$modules[id].exports;\n }\n if (id in $parcel$inits) {\n var init = $parcel$inits[id];\n delete $parcel$inits[id];\n var module = {id: id, exports: {}};\n $parcel$modules[id] = module;\n init.call(module.exports, module, module.exports);\n return module.exports;\n }\n var err = new Error(\"Cannot find module '\" + id + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n };\n\n parcelRequire.register = function register(id, init) {\n $parcel$inits[id] = init;\n };\n\n $parcel$global[\"parcelRequirea149\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\nvar $ea2f112131e22f14$exports = {};\n\n$parcel$export($ea2f112131e22f14$exports, \"PBDBFossilsColumn\", () => $ea2f112131e22f14$export$554267114407ef68);\n$parcel$export($ea2f112131e22f14$exports, \"FossilDataType\", () => (parcelRequire(\"dx7no\")).FossilDataType);\n\n\nvar $dx7no = parcelRequire(\"dx7no\");\n\nvar $kIQUG = parcelRequire(\"kIQUG\");\n\n\nvar $wtIgl = parcelRequire(\"wtIgl\");\n\nvar $f7qDU = parcelRequire(\"f7qDU\");\n\nvar $iWhRv = parcelRequire(\"iWhRv\");\n\n\nvar $6dOaS = parcelRequire(\"6dOaS\");\nconst $ea2f112131e22f14$var$h = (0, $2jHE4$macrostrathyper).styled((0, (/*@__PURE__*/$parcel$interopDefault($f7qDU))));\nfunction $ea2f112131e22f14$export$554267114407ef68({ columnID: columnID, type: type = (0, $dx7no.FossilDataType).Collections }) {\n const data = (0, $dx7no.useFossilData)(columnID, type);\n const { axisType: axisType, units: units } = (0, $wtIgl.useMacrostratColumnData)();\n const scale = (0, $wtIgl.useCompositeScale)();\n if (data == null || units == null || scale == null) return null;\n const data1 = $ea2f112131e22f14$var$preparePBDBData(data, units, scale, axisType);\n return $ea2f112131e22f14$var$h((0, $kIQUG.BaseMeasurementsColumn), {\n data: data1,\n noteComponent: $ea2f112131e22f14$var$FossilInfo,\n focusedNoteComponent: $ea2f112131e22f14$var$FossilInfo,\n className: \"fossil-collections\"\n });\n}\nfunction $ea2f112131e22f14$var$FossilInfo(props) {\n const { note: note, maxItems: maxItems, focused: focused = false } = props;\n const { data: data } = note;\n // Sort collections by name\n data.sort((a, b)=>{\n const nameA = a.best_name ?? a.cltn_name ?? \"\";\n const nameB = b.best_name ?? b.cltn_name ?? \"\";\n return nameA.localeCompare(nameB);\n });\n return $ea2f112131e22f14$var$h((0, $kIQUG.TruncatedList), {\n data: data,\n className: \"fossil-collections\",\n itemRenderer: $ea2f112131e22f14$var$PBDBCollectionLink,\n maxItems: focused ? Infinity : maxItems ?? 5\n });\n}\nconst $ea2f112131e22f14$var$FocusedFossilInfo = (props)=>$ea2f112131e22f14$var$h($ea2f112131e22f14$var$FossilInfo, {\n ...props,\n maxItems: Infinity\n });\nfunction $ea2f112131e22f14$var$PBDBCollectionLink({ data: data }) {\n /** A link to a PBDB collection that handles either an occurrence or collection object */ return $ea2f112131e22f14$var$h(\"a.link-id\", {\n href: `https://paleobiodb.org/app/collections#display=col:${data.cltn_id}`,\n target: \"_blank\",\n onClick (e) {\n e.stopPropagation();\n }\n }, data.best_name ?? data.cltn_name);\n}\nfunction $ea2f112131e22f14$var$preparePBDBData(data, units, scale, axisType, options) {\n /** Prepare PBDB fossil data for display in a measurements column */ const { groupCloseNotes: groupCloseNotes = true } = options ?? {};\n const groupDistance = typeof groupCloseNotes === \"number\" ? groupCloseNotes : 10;\n // Map of data to its defined height ranges\n const dataMap = new Map();\n // Todo: if we wanted, we could add a step where we group notes that are too close together here...\n for (const d of data){\n const range = $ea2f112131e22f14$var$getHeightRangeForPBDBEntity(d, units, axisType);\n if (range == null) continue;\n const { height: height, top_height: top_height } = range;\n // compose the key based on height info\n let key = `${height}`;\n if (top_height != null) key += `-${top_height}`;\n // Group by height key\n if (!dataMap.has(key)) dataMap.set(key, {\n height: height,\n top_height: top_height ?? height,\n data: [],\n id: key\n });\n dataMap.get(key).data.push(d);\n }\n return (0, $kIQUG.groupNotesByPixelDistance)(Array.from(dataMap.values()), scale, axisType, groupDistance);\n}\nfunction $ea2f112131e22f14$var$getHeightRangeForPBDBEntity(d, units, axisType) {\n let height = null;\n if (d.slb != null && d.slu == \"mbsf\") {\n // Meters below sea floor - special case for eODP where we have\n // specific depth data referenced\n height = Number(d.slb);\n if (axisType === (0, $2jHE4$ColumnAxisType).DEPTH) // Data is already in depth units\n return {\n height: height\n };\n }\n if (d.unit_id == null) return null;\n if (height != null) {\n // If we have both height and unit info, we need to adjust the height\n // to fit whatever scale type we're using.\n // TODO: we could improve how this works by having concurrent age and\n // height scales, which would allow us to do this without having to\n // reference to a specific unit.\n const unit = units.find((u)=>u.unit_id === d.unit_id);\n if (unit == null) return null;\n const relHeight = $ea2f112131e22f14$var$getRelativePositionInUnit(height, unit, (0, $2jHE4$ColumnAxisType).DEPTH);\n if (relHeight == null) return null;\n height = (0, $iWhRv.getPositionWithinUnit)(relHeight, unit, axisType);\n return {\n height: height\n };\n }\n // We can just get the height within the unit, clipped to the unit boundaries\n return (0, $kIQUG.standardizeMeasurementHeight)({\n unit_id: d.unit_id\n }, units, axisType);\n}\nfunction $ea2f112131e22f14$var$getRelativePositionInUnit(pos, unit, axisType) {\n // This is the inverse of getPositionWithinUnit\n const heights = (0, $iWhRv.getUnitHeightRange)(unit, axisType, false);\n const scale = (0, $2jHE4$scaleLinear)(heights).domain([\n 0,\n 1\n ]);\n const relPos = scale.invert(pos);\n if (relPos < 0 || relPos > 1) return null;\n return relPos;\n}\n$parcel$exportWildcard($ea2f112131e22f14$exports, $6dOaS);\n\n\nexport {$ea2f112131e22f14$export$554267114407ef68 as PBDBFossilsColumn, $8e174c7ae24a4598$export$a990c76b38782f57 as FossilDataType, $8e174c7ae24a4598$export$a990c76b38782f57 as FossilDataType, $9cea14fa75e12a56$export$652730986cccff7a as PBDBOccurrencesMatrix};\n//# sourceMappingURL=column-views.af480651.js.map\n","import hyper from \"@macrostrat/hyper\";\nimport {\n FossilDataType,\n PBDBCollection,\n PBDBEntity,\n PBDBOccurrence,\n useFossilData,\n} from \"./provider\";\nimport type { CompositeColumnScale, IUnit } from \"../../units\";\nimport {\n BaseMeasurementsColumn,\n ColumnMeasurementData,\n MeasurementHeightData,\n standardizeMeasurementHeight,\n groupNotesByPixelDistance,\n TruncatedList,\n} from \"../measurements\";\nimport { ColumnAxisType } from \"@macrostrat/column-components\";\nimport {\n useCompositeScale,\n useMacrostratColumnData,\n} from \"../../data-provider\";\nimport { UnitLong } from \"@macrostrat/api-types\";\nimport styles from \"./taxon-ranges.module.sass\";\nimport { getPositionWithinUnit, getUnitHeightRange } from \"../../prepare-units\";\nimport { scaleLinear } from \"d3-scale\";\n\nexport * from \"./taxon-ranges\";\n\nconst h = hyper.styled(styles);\n\nexport { FossilDataType };\n\nexport function PBDBFossilsColumn({\n columnID,\n type = FossilDataType.Collections,\n}: {\n columnID: number;\n type: FossilDataType;\n}) {\n const data = useFossilData(columnID, type);\n const { axisType, units } = useMacrostratColumnData();\n const scale = useCompositeScale();\n\n if (data == null || units == null || scale == null) return null;\n\n const data1 = preparePBDBData(data, units, scale, axisType);\n\n return h(BaseMeasurementsColumn, {\n data: data1,\n noteComponent: FossilInfo,\n focusedNoteComponent: FossilInfo,\n className: \"fossil-collections\",\n });\n}\n\ninterface FossilItemProps {\n note: {\n data: PBDBCollection[];\n unit?: IUnit;\n };\n spacing?: {\n below?: number;\n above?: number;\n };\n width?: number;\n height?: number;\n color?: string;\n focused?: boolean;\n}\n\nfunction FossilInfo(props: FossilItemProps) {\n const { note, maxItems, focused = false } = props;\n const { data } = note;\n // Sort collections by name\n data.sort((a, b) => {\n const nameA = a.best_name ?? a.cltn_name ?? \"\";\n const nameB = b.best_name ?? b.cltn_name ?? \"\";\n return nameA.localeCompare(nameB);\n });\n\n return h(TruncatedList, {\n data,\n className: \"fossil-collections\",\n itemRenderer: PBDBCollectionLink,\n maxItems: focused ? Infinity : (maxItems ?? 5),\n });\n}\n\nconst FocusedFossilInfo = (props: FossilItemProps) =>\n h(FossilInfo, { ...props, maxItems: Infinity });\n\nfunction PBDBCollectionLink({\n data,\n}: {\n data: PBDBCollection | PBDBOccurrence;\n}) {\n /** A link to a PBDB collection that handles either an occurrence or collection object */\n return h(\n \"a.link-id\",\n {\n href: `https://paleobiodb.org/app/collections#display=col:${data.cltn_id}`,\n target: \"_blank\",\n onClick(e) {\n e.stopPropagation();\n },\n },\n data.best_name ?? data.cltn_name,\n );\n}\n\ninterface PreparePBDBDataOptions {\n /** If set, group close notes within this distance (in pixels in display space)\n * into a single note. If a number is provided, that number is used as the distance,\n * otherwise a default of 5 pixels is used.\n */\n groupCloseNotes?: boolean | number;\n}\n\nfunction preparePBDBData<T extends PBDBEntity>(\n data: T[],\n units: UnitLong[],\n scale: CompositeColumnScale,\n axisType: ColumnAxisType,\n options?: { groupCloseNotes?: boolean | number },\n) {\n /** Prepare PBDB fossil data for display in a measurements column */\n const { groupCloseNotes = true } = options ?? {};\n const groupDistance =\n typeof groupCloseNotes === \"number\" ? groupCloseNotes : 10;\n\n // Map of data to its defined height ranges\n const dataMap = new Map<string, ColumnMeasurementData<T[]>>();\n\n // Todo: if we wanted, we could add a step where we group notes that are too close together here...\n\n for (const d of data) {\n const range = getHeightRangeForPBDBEntity(d, units, axisType);\n\n if (range == null) continue;\n const { height, top_height } = range;\n // compose the key based on height info\n let key = `${height}`;\n if (top_height != null) {\n key += `-${top_height}`;\n }\n\n // Group by height key\n if (!dataMap.has(key)) {\n dataMap.set(key, {\n height,\n top_height: top_height ?? height,\n data: [],\n id: key,\n });\n }\n dataMap.get(key)!.data.push(d);\n }\n\n return groupNotesByPixelDistance(\n Array.from(dataMap.values()),\n scale,\n axisType,\n groupDistance,\n );\n}\n\nfunction getHeightRangeForPBDBEntity<T extends PBDBEntity>(\n d: T,\n units: UnitLong[],\n axisType: ColumnAxisType,\n): MeasurementHeightData | null {\n let height: number | null = null;\n if (d.slb != null && d.slu == \"mbsf\") {\n // Meters below sea floor - special case for eODP where we have\n // specific depth data referenced\n height = Number(d.slb);\n if (axisType === ColumnAxisType.DEPTH) {\n // Data is already in depth units\n return { height };\n }\n }\n if (d.unit_id == null) return null;\n if (height != null) {\n // If we have both height and unit info, we need to adjust the height\n // to fit whatever scale type we're using.\n // TODO: we could improve how this works by having concurrent age and\n // height scales, which would allow us to do this without having to\n // reference to a specific unit.\n const unit = units.find((u) => u.unit_id === d.unit_id);\n if (unit == null) return null;\n const relHeight = getRelativePositionInUnit(\n height,\n unit,\n ColumnAxisType.DEPTH,\n );\n if (relHeight == null) return null;\n height = getPositionWithinUnit(relHeight, unit, axisType);\n return { height };\n }\n // We can just get the height within the unit, clipped to the unit boundaries\n return standardizeMeasurementHeight({ unit_id: d.unit_id }, units, axisType);\n}\n\nfunction getRelativePositionInUnit<T extends PBDBEntity>(\n pos: number,\n unit: UnitLong,\n axisType: ColumnAxisType,\n): number | null {\n // This is the inverse of getPositionWithinUnit\n const heights = getUnitHeightRange(unit, axisType, false);\n const scale = scaleLinear(heights).domain([0, 1]);\n const relPos = scale.invert(pos);\n if (relPos < 0 || relPos > 1) return null;\n return relPos;\n}\n"],"names":["$2jHE4$macrostrathyper","ColumnAxisType","$2jHE4$ColumnAxisType","scaleLinear","$2jHE4$scaleLinear","$parcel$export","e","n","v","s","Object","defineProperty","get","set","enumerable","configurable","$parcel$global","globalThis","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","$ea2f112131e22f14$exports","$ea2f112131e22f14$export$554267114407ef68","FossilDataType","$dx7no","$kIQUG","$wtIgl","$f7qDU","$iWhRv","$6dOaS","$ea2f112131e22f14$var$h","styled","a","__esModule","default","columnID","type","Collections","data","useFossilData","axisType","units","useMacrostratColumnData","scale","useCompositeScale","data1","$ea2f112131e22f14$var$preparePBDBData","options","groupCloseNotes","dataMap","Map","d","range","$ea2f112131e22f14$var$getHeightRangeForPBDBEntity","height","slb","slu","Number","DEPTH","unit_id","unit","find","u","relHeight","$ea2f112131e22f14$var$getRelativePositionInUnit","pos","relPos","getUnitHeightRange","domain","invert","getPositionWithinUnit","standardizeMeasurementHeight","top_height","key","has","push","groupNotesByPixelDistance","Array","from","values","BaseMeasurementsColumn","noteComponent","$ea2f112131e22f14$var$FossilInfo","focusedNoteComponent","className","props","note","maxItems","focused","sort","b","nameA","best_name","cltn_name","nameB","localeCompare","TruncatedList","itemRenderer","$ea2f112131e22f14$var$PBDBCollectionLink","Infinity","href","cltn_id","target","onClick","stopPropagation","keys","forEach","prototype","hasOwnProperty","source","PBDBFossilsColumn","$8e174c7ae24a4598$export$a990c76b38782f57","$9cea14fa75e12a56$export$652730986cccff7a","PBDBOccurrencesMatrix"],"version":3,"file":"column-views.af480651.js.map","sourceRoot":"../../../../"}
@@ -1,2 +0,0 @@
1
- import"./column-views.fac4baff.js";import"./column-views.46efb749.js";import"./column-views.672b683c.js";import e from"@macrostrat/hyper";import{Box as t,useElementSize as a}from"@macrostrat/ui-components";import{group as r}from"d3-array";import{ColumnSVG as n,ColumnAxisType as o}from"@macrostrat/column-components";import{useRef as s}from"react";function l(e,t,a,r){Object.defineProperty(e,t,{get:a,set:r,enumerable:!0,configurable:!0})}var i=globalThis,c={},u={},p=i.parcelRequirea149;null==p&&((p=function(e){if(e in c)return c[e].exports;if(e in u){var t=u[e];delete u[e];var a={id:e,exports:{}};return c[e]=a,t.call(a.exports,a,a.exports),a.exports}var r=Error("Cannot find module '"+e+"'");throw r.code="MODULE_NOT_FOUND",r}).register=function(e,t){u[e]=t},i.parcelRequirea149=p),p.register;var f={};l(f,"PBDBOccurrencesMatrix",()=>_),l(f,"FossilDataType",()=>p("dx7no").FossilDataType);var m=p("dx7no"),x=p("wtIgl"),d=p("f7qDU");let g=e.styled(d&&d.__esModule?d.default:d);function _({columnID:e}){let a=(0,m.useFossilData)(e,m.FossilDataType.Occurrences),s=(0,x.useMacrostratColumnData)(),l=(0,x.useCompositeScale)();if(null==a)return null;let i=new Map(r(a,e=>e.unit_id)),{taxonRanges:c}=function(e,t,a=o.AGE){let r=new Map,n=new Map;for(let[e,a]of t.entries())for(let t of a){let a=t.best_name??t.taxon_name;r.has(a)||(r.set(a,new Set),n.set(a,[])),r.get(a).add(e),n.get(a).push(t)}let s=Array.from(r.entries()).sort((e,t)=>t[0].localeCompare(e[0])),l=new Map;for(let[t,n]of r.entries())l.set(t,function(e,t,a){let r=[],n=null;for(let s of e)t.has(s.unit_id)?null==n?n=a==o.DEPTH||a==o.HEIGHT?[s.t_pos,s.b_pos]:[s.t_age,s.b_age]:a==o.DEPTH||a==o.HEIGHT?n[1]=s.b_pos:n[1]=s.b_age:null!=n&&(r.push(n),n=null);return null!=n&&r.push(n),r}(e,n,a));return{occurrenceMap:t,taxonUnitMap:new Map(s),taxonOccurrenceMap:n,taxonRanges:l}}(s.units,i,s.axisType),u=Array.from(c.entries());return g(t,{className:"taxon-ranges",width:32+16*u.length,height:s.totalHeight},[g(b,{taxonEntries:u,padding:16,spacing:16,scale:l}),g(n,{width:32+16*u.length},g("g.taxa-occurrences-matrix",u.map(([e,t],a)=>g("g",{transform:`translate(${16+16*a})`},[t.map(([e,t])=>g("line",{y1:l(e),y2:l(t)}))]))))])}function b({taxonEntries:e,padding:t,spacing:a,scale:r}){return g("div.taxon-labels",[e.map(([e,n],o)=>{let s=r(n[0]?.[0]??0)-20;return s<200&&(s=0),g(h,{top:s,left:t+o*a,taxonName:e})})])}function h({top:e,left:t,taxonName:r}){let n=s(),o=a(n),l=o?.height??200;return g("div.taxon-label",{style:{top:`${e}px`,marginLeft:`${t}px`,"--label-width":`${l}px`}},g("div.taxon-label-inner",g("div.taxon-label-text",{ref:n},r)))}export{_ as PBDBOccurrencesMatrix,$8e174c7ae24a4598$export$a990c76b38782f57 as FossilDataType};
2
- //# sourceMappingURL=column-views.b6e86cf0.js.map