@macrostrat/column-views 3.3.3 → 3.3.5
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.
- package/CHANGELOG.md +34 -0
- package/dist/age-axis.d.ts +2 -2
- package/dist/age-model-overlay.d.ts +1 -1
- package/dist/column.d.ts +5 -5
- package/dist/correlation-chart/main.cjs +2 -2
- package/dist/correlation-chart/main.cjs.map +1 -1
- package/dist/correlation-chart/main.d.ts +1 -1
- package/dist/correlation-chart/main.js +2 -2
- package/dist/correlation-chart/main.js.map +1 -1
- package/dist/correlation-chart/stories/utils.d.ts +1 -1
- package/dist/data-provider/column-nav.d.ts +1 -1
- package/dist/data-provider/unit-selection.cjs +1 -1
- package/dist/data-provider/unit-selection.cjs.map +1 -1
- package/dist/data-provider/unit-selection.d.ts +4 -4
- package/dist/data-provider/unit-selection.js +1 -1
- package/dist/data-provider/unit-selection.js.map +1 -1
- package/dist/facets/carbon-isotopes/data-area.d.ts +3 -3
- package/dist/facets/carbon-isotopes/data-provider.d.ts +3 -3
- package/dist/facets/detrital-zircon/index.d.ts +1 -1
- package/dist/facets/detrital-zircon/provider.d.ts +1 -1
- package/dist/facets/fossils/index.d.ts +1 -1
- package/dist/facets/fossils/taxon-ranges.d.ts +1 -1
- package/dist/facets/measurements/base.d.ts +3 -3
- package/dist/facets/measurements/sgp.d.ts +1 -1
- package/dist/maps/column-correlation/state.d.ts +1 -1
- package/dist/maps/column-navigation/mapbox/keyboard-navigation.d.ts +1 -1
- package/dist/maps/column-navigation/mapbox/state.d.ts +1 -1
- package/dist/maps/column-navigation/svg/data-fetcher.d.ts +1 -1
- package/dist/maps/column-navigation/svg/index.d.ts +1 -1
- package/dist/maps/column-navigation/svg/layers.d.ts +3 -3
- package/dist/maps/column-navigation/utils/keyboard-navigation.d.ts +1 -1
- package/dist/maps/inset-map/index.d.ts +2 -2
- package/dist/maps/layers/columns.d.ts +2 -2
- package/dist/section.d.ts +1 -1
- package/dist/unit-details/age-range.cjs.map +1 -1
- package/dist/unit-details/age-range.d.ts +4 -3
- package/dist/unit-details/age-range.js.map +1 -1
- package/dist/unit-details/modal-panel.d.ts +1 -1
- package/dist/unit-details/panel.cjs +75 -72
- package/dist/unit-details/panel.cjs.map +1 -1
- package/dist/unit-details/panel.d.ts +83 -0
- package/dist/unit-details/panel.js +11 -7
- package/dist/unit-details/panel.js.map +1 -1
- package/dist/unit-details/popover.d.ts +5 -1
- package/dist/unit-details/utils.d.ts +2 -2
- package/dist/units/boxes.d.ts +4 -4
- package/dist/units/composite.d.ts +3 -3
- package/dist/units/index.d.ts +6 -6
- package/dist/units/names.d.ts +3 -2
- package/dist/units/resolvers.d.ts +1 -1
- package/package.json +15 -15
- package/src/correlation-chart/main.ts +2 -2
- package/src/data-provider/unit-selection.ts +1 -1
- package/src/unit-details/age-range.ts +1 -0
- package/src/unit-details/panel.ts +24 -15
|
@@ -7,7 +7,7 @@ export declare function MeasurementsLayer(props: any): import('react').FunctionC
|
|
|
7
7
|
useCanvas?: boolean;
|
|
8
8
|
} & {
|
|
9
9
|
children?: import('react').ReactNode | undefined;
|
|
10
|
-
}
|
|
10
|
+
}> | null;
|
|
11
11
|
type ColumnProps = {
|
|
12
12
|
col_id: number;
|
|
13
13
|
};
|
|
@@ -33,7 +33,7 @@ interface KeyboardNavProps extends ColumnNavProps {
|
|
|
33
33
|
features: ColumnFeature[];
|
|
34
34
|
showLayers: boolean;
|
|
35
35
|
}
|
|
36
|
-
declare function ColumnKeyboardNavigation(props: KeyboardNavProps): import('react').ReactElement<unknown, string | import('react').JSXElementConstructor<any
|
|
36
|
+
declare function ColumnKeyboardNavigation(props: KeyboardNavProps): import('react').ReactElement<unknown, string | import('react').JSXElementConstructor<any>> | null;
|
|
37
37
|
interface ColumnExtraInfo {
|
|
38
38
|
apiRoute?: string;
|
|
39
39
|
color?: string;
|
|
@@ -41,7 +41,7 @@ interface ColumnExtraInfo {
|
|
|
41
41
|
showDebugLayers?: boolean;
|
|
42
42
|
format?: "topojson" | "geojson";
|
|
43
43
|
}
|
|
44
|
-
declare const Columns: (props: ColumnNavProps & ColumnExtraInfo) => import('react').ReactElement<unknown, string | import('react').JSXElementConstructor<any
|
|
44
|
+
declare const Columns: (props: ColumnNavProps & ColumnExtraInfo) => import('react').ReactElement<unknown, string | import('react').JSXElementConstructor<any>> | null;
|
|
45
45
|
declare const ColumnCenters: (props: ColumnNavProps) => import('react').FunctionComponentElement<ColumnNavProps & ColumnExtraInfo>;
|
|
46
46
|
declare const CurrentColumn: (props: any) => import('react').FunctionComponentElement<{
|
|
47
47
|
[k: string]: any;
|
|
@@ -11,6 +11,6 @@ export interface InsetMapProps extends Omit<MapViewProps, "style"> {
|
|
|
11
11
|
showRoads?: boolean;
|
|
12
12
|
}
|
|
13
13
|
export declare function InsetMap({ controls, className, children, style, mapStyle, accessToken, showLabels, showAdmin, showRoads, ...rest }: InsetMapProps): import('react').ReactElement<{
|
|
14
|
-
className: string;
|
|
15
|
-
style: CSSProperties;
|
|
14
|
+
className: string | undefined;
|
|
15
|
+
style: CSSProperties | undefined;
|
|
16
16
|
}, string | import('react').JSXElementConstructor<any>>;
|
|
@@ -14,14 +14,14 @@ interface ColumnLayerOptions extends ColumnsStyleOptions {
|
|
|
14
14
|
enabled: boolean;
|
|
15
15
|
columns: FeatureCollection | GeoJSONFeature[];
|
|
16
16
|
}
|
|
17
|
-
export declare function BaseColumnsLayer({ enabled, columns, ...rest }: ColumnLayerOptions):
|
|
17
|
+
export declare function BaseColumnsLayer({ enabled, columns, ...rest }: ColumnLayerOptions): null;
|
|
18
18
|
export declare function buildColumnsStyle(opts?: ColumnsStyleOptions): StyleFragment;
|
|
19
19
|
export type ColumnFeature = GeoJSON.Feature & {
|
|
20
20
|
id: number;
|
|
21
21
|
};
|
|
22
22
|
export declare function SelectedColumnOverlay({ selectedColumn, ...styleOpts }: {
|
|
23
23
|
selectedColumn: ColumnFeature | null;
|
|
24
|
-
} & SelectedColumnStyleOpts):
|
|
24
|
+
} & SelectedColumnStyleOpts): null;
|
|
25
25
|
interface SelectedColumnStyleOpts {
|
|
26
26
|
color?: string | any[];
|
|
27
27
|
}
|
package/dist/section.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"age-range.cjs","sources":["../../src/unit-details/age-range.ts"],"sourcesContent":["import {\n DataField,\n IntervalShort,\n IntervalTag,\n type IntervalTagProps,\n ItemList,\n Value,\n} from \"@macrostrat/data-components\";\nimport { useMacrostratDefs } from \"@macrostrat/data-provider\";\nimport h from \"./age-range.module.sass\";\nimport { formatProportion, formatRange } from \"./utils\";\nimport classNames from \"classnames\";\nimport { useMemo } from \"react\";\n\nexport function AgeField({ unit, children, ...rest }) {\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 ...rest,\n },\n children,\n );\n}\n\nexport function AgeRange({\n data,\n className,\n}: {\n data: {\n t_age: number;\n b_age: number;\n };\n className?: string;\n}) {\n const [_b_age, _t_age, _unit] = getAgeRange(data);\n\n return h(Value, {\n value: formatRange(_b_age, _t_age),\n unit: _unit,\n className,\n });\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\ninterface UnitIntervalConstraints {\n b_int_id?: number;\n t_int_id?: number;\n b_prop?: number;\n t_prop?: number;\n b_int_name?: string;\n t_int_name?: string;\n b_age?: number;\n t_age?: number;\n}\n\nexport interface IntervalProportionsProps extends Omit<\n IntervalTagProps,\n \"interval\"\n> {\n unit: UnitIntervalConstraints;\n showProportions?: boolean;\n calculateProportionsFromAges?: boolean;\n}\n\nexport function IntervalProportions({\n unit,\n className,\n showProportions,\n calculateProportionsFromAges = true,\n ...rest\n}: IntervalProportionsProps) {\n /** Display the proportions of the unit that belong to the base and top intervals, if they are different */\n if (unit.b_int_id == null && unit.t_int_id == null) return null;\n\n let _showProps = showProportions;\n\n const i0 = unit.b_int_id;\n const i1 = unit.t_int_id;\n\n /** Get interval information */\n const intervalMap = useMacrostratDefs(\"intervals\");\n const [int0, int1] = useMemo(() => {\n const int0 = intervalMap?.get(i0) ?? {};\n if (i0 === i1) {\n return [int0, int0];\n }\n const int1 = intervalMap?.get(i1) ?? {};\n return [int0, int1];\n }, [intervalMap, i0, i1]);\n\n const interval0: IntervalShort = {\n id: i0,\n name: unit.b_int_name,\n ...int0,\n };\n\n let b_prop = unit.b_prop;\n let t_prop = unit.t_prop;\n\n // If we have b_age and t_age, then we can calculate proportions if they are not given\n if (b_prop == null && unit.b_age != null && calculateProportionsFromAges) {\n b_prop = getProportion(unit.b_age, int0);\n }\n if (t_prop == null && unit.t_age != null && calculateProportionsFromAges) {\n t_prop = getProportion(unit.t_age, int1);\n }\n\n // If there are no proportions given and we are not explicitly directed to show them,\n // then we set them to hidden.\n if (b_prop == null && t_prop == null) {\n _showProps ??= false;\n }\n\n /*\n Set default proportions to 0 and 1 if they are not given,\n so that we can display \"base\" and \"top\" labels\n */\n b_prop ??= 0;\n t_prop ??= 1;\n\n let p0: any = null;\n let p1: any = null;\n\n if (_showProps !== false) {\n p1 = 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\n return h(\n ItemList,\n { className: classNames(\"interval-proportions\", className) },\n [\n h(IntervalTag, {\n interval: interval0,\n prefix: p0,\n ...rest,\n }),\n h.if(i0 != i1)(\"span.discourage-break\", [\n h(\"span.sep\", \" to \"),\n h(IntervalTag, {\n interval: {\n id: i1,\n name: unit.t_int_name,\n ...int1,\n },\n prefix: p1,\n ...rest,\n }),\n ]),\n ],\n );\n}\n\nfunction getProportion(age: number, interval: IntervalShort): number | null {\n /** Get proportion with the age */\n return (interval.b_age - age) / (interval.b_age - interval.t_age);\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\nexport function 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\nexport function 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"],"names":["h","DataField","formatRange","Value","useMacrostratDefs","useMemo","int0","int1","ItemList","classNames","IntervalTag","formatProportion"],"mappings":";;;;;;;;;;AAcO,SAAS,SAAS,EAAE,MAAM,UAAU,GAAG,QAAQ;AACpD,QAAM,CAAC,QAAQ,QAAQ,KAAK,IAAI,YAAY,IAAI;AAEhD,SAAOA,gBAAAA;AAAAA,IACLC,eAAAA;AAAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAOC,MAAAA,YAAY,QAAQ,MAAM;AAAA,MACjC,MAAM;AAAA,MACN,GAAG;AAAA,IAAA;AAAA,IAEL;AAAA,EAAA;AAEJ;AAEO,SAAS,SAAS;AAAA,EACvB;AAAA,EACA;AACF,GAMG;AACD,QAAM,CAAC,QAAQ,QAAQ,KAAK,IAAI,YAAY,IAAI;AAEhD,SAAOF,gBAAAA,QAAEG,eAAAA,OAAO;AAAA,IACd,OAAOD,MAAAA,YAAY,QAAQ,MAAM;AAAA,IACjC,MAAM;AAAA,IACN;AAAA,EAAA,CACD;AACH;AAEO,SAAS,SAAS;AAAA,EACvB;AAAA,EACA,wBAAwB;AAAA,EACxB,wBAAwB;AAAA,EACxB;AACF,GAKG;AAID,QAAM,CAAC,OAAO,IAAI,IAAI,OAAO,GAAG;AAEhC,QAAM,SAAS,MAAM,eAAe,SAAS;AAAA,IAC3C;AAAA,IACA;AAAA,EAAA,CACD;AAED,SAAOF,gBAAAA,QAAEG,eAAAA,OAAO,EAAE,OAAO,QAAQ,MAAM,WAAW;AACpD;AAEO,SAAS,SAAS;AAAA,EACvB;AAAA,EACA,wBAAwB;AAAA,EACxB,wBAAwB;AAC1B,GAAG;AACD,MAAI,OAAO;AACX,MAAI,QAAQ,KAAK;AACf,WAAO;AACP,aAAS;AACT,QAAI,QAAQ,GAAG;AACb,aAAO;AACP,eAAS;AAAA,IACX;AAAA,EACF,WAAW,QAAQ,KAAM;AACvB,WAAO;AACP,aAAS;AAAA,EACX;AAEA,MAAI,SAAS,MAAM,eAAe,SAAS;AAAA,IACzC;AAAA,IACA;AAAA,EAAA,CACD;AAED,SAAOH,gBAAAA,QAAEG,eAAAA,OAAO,EAAE,OAAO,QAAQ,MAAM;AACzC;AAsBO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA,+BAA+B;AAAA,EAC/B,GAAG;AACL,GAA6B;AAE3B,MAAI,KAAK,YAAY,QAAQ,KAAK,YAAY,KAAM,QAAO;AAE3D,MAAI,aAAa;AAEjB,QAAM,KAAK,KAAK;AAChB,QAAM,KAAK,KAAK;AAGhB,QAAM,cAAcC,aAAAA,kBAAkB,WAAW;AACjD,QAAM,CAAC,MAAM,IAAI,IAAIC,MAAAA,QAAQ,MAAM;AACjC,UAAMC,QAAO,aAAa,IAAI,EAAE,KAAK,CAAA;AACrC,QAAI,OAAO,IAAI;AACb,aAAO,CAACA,OAAMA,KAAI;AAAA,IACpB;AACA,UAAMC,QAAO,aAAa,IAAI,EAAE,KAAK,CAAA;AACrC,WAAO,CAACD,OAAMC,KAAI;AAAA,EACpB,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC;AAExB,QAAM,YAA2B;AAAA,IAC/B,IAAI;AAAA,IACJ,MAAM,KAAK;AAAA,IACX,GAAG;AAAA,EAAA;AAGL,MAAI,SAAS,KAAK;AAClB,MAAI,SAAS,KAAK;AAGlB,MAAI,UAAU,QAAQ,KAAK,SAAS,QAAQ,8BAA8B;AACxE,aAAS,cAAc,KAAK,OAAO,IAAI;AAAA,EACzC;AACA,MAAI,UAAU,QAAQ,KAAK,SAAS,QAAQ,8BAA8B;AACxE,aAAS,cAAc,KAAK,OAAO,IAAI;AAAA,EACzC;AAIA,MAAI,UAAU,QAAQ,UAAU,MAAM;AACpC,mBAAe;AAAA,EACjB;AAMA,aAAW;AACX,aAAW;AAEX,MAAI,KAAU;AACd,MAAI,KAAU;AAEd,MAAI,eAAe,OAAO;AACxB,SAAKP,gBAAAA,QAAE,YAAY,EAAE,OAAO,QAAQ;AAEpC,QAAI,OAAO,MAAM,WAAW,KAAK,WAAW,GAAG;AAE7C,WAAKA,gBAAAA,QAAE,YAAY,EAAE,OAAO,QAAQ;AAAA,IACtC;AAEA,QAAI,OAAO,OAAO,WAAW,KAAK,WAAW,IAAI;AAC/C,WAAKA,gBAAAA,QAAE,yBAAyB,CAAC,IAAI,KAAKA,wBAAE,YAAY,IAAI,GAAG,KAAK,EAAE,CAAC;AAAA,IACzE;AAAA,EACF;AAEA,SAAOA,gBAAAA;AAAAA,IACLQ,eAAAA;AAAAA,IACA,EAAE,WAAWC,oBAAAA,QAAW,wBAAwB,SAAS,EAAA;AAAA,IACzD;AAAA,MACET,gBAAAA,QAAEU,eAAAA,aAAa;AAAA,QACb,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,GAAG;AAAA,MAAA,CACJ;AAAA,MACDV,gBAAAA,QAAE,GAAG,MAAM,EAAE,EAAE,yBAAyB;AAAA,QACtCA,gBAAAA,QAAE,YAAY,MAAM;AAAA,QACpBA,gBAAAA,QAAEU,eAAAA,aAAa;AAAA,UACb,UAAU;AAAA,YACR,IAAI;AAAA,YACJ,MAAM,KAAK;AAAA,YACX,GAAG;AAAA,UAAA;AAAA,UAEL,QAAQ;AAAA,UACR,GAAG;AAAA,QAAA,CACJ;AAAA,MAAA,CACF;AAAA,IAAA;AAAA,EACH;AAEJ;AAEA,SAAS,cAAc,KAAa,UAAwC;AAE1E,UAAQ,SAAS,QAAQ,QAAQ,SAAS,QAAQ,SAAS;AAC7D;AAEA,SAAS,WAAW,EAAE,SAAS;AAC7B,MAAI,UAAU;AACd,MAAI,SAAS,GAAG;AACd,cAAU;AAAA,EACZ,WAAW,SAAS,GAAG;AACrB,cAAU;AAAA,EACZ,OAAO;AACL,cAAUC,MAAAA,iBAAiB,QAAQ,GAAG,IAAI;AAAA,EAC5C;AAEA,SAAOX,gBAAAA,QAAE,mBAAmB,OAAO;AACrC;AAEO,SAAS,YAAY,OAAO;AACjC,MAAI,QAAQ,MAAM;AAClB,MAAI,QAAQ,MAAM;AAClB,MAAI,OAAO;AAEX,MAAI,QAAQ,OAAO,QAAQ,KAAK;AAC9B,aAAS;AACT,aAAS;AACT,WAAO;AAAA,EACT,WAAW,QAAQ,OAAO,QAAQ,MAAM;AACtC,aAAS;AACT,aAAS;AACT,WAAO;AAAA,EACT;AAEA,SAAO,CAAC,OAAO,OAAO,IAAI;AAC5B;AAEO,SAAS,OAAO,OAAO;AAE5B,MAAI,OAAO;AACX,MAAI,QAAQ,KAAK;AACf,WAAO;AACP,aAAS;AACT,QAAI,QAAQ,GAAG;AACb,aAAO;AACP,eAAS;AAAA,IACX;AAAA,EACF,WAAW,QAAQ,KAAM;AACvB,WAAO;AACP,aAAS;AAAA,EACX;AAEA,SAAO,CAAC,OAAO,IAAI;AACrB;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"age-range.cjs","sources":["../../src/unit-details/age-range.ts"],"sourcesContent":["import {\n DataField,\n IntervalShort,\n IntervalTag,\n type IntervalTagProps,\n ItemList,\n Value,\n} from \"@macrostrat/data-components\";\nimport { useMacrostratDefs } from \"@macrostrat/data-provider\";\nimport h from \"./age-range.module.sass\";\nimport { formatProportion, formatRange } from \"./utils\";\nimport classNames from \"classnames\";\nimport { useMemo } from \"react\";\n\nexport function AgeField({ unit, children, ...rest }) {\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 ...rest,\n },\n children,\n );\n}\n\nexport function AgeRange({\n data,\n className,\n}: {\n data: {\n t_age: number;\n b_age: number;\n };\n className?: string;\n}) {\n const [_b_age, _t_age, _unit] = getAgeRange(data);\n\n return h(Value, {\n value: formatRange(_b_age, _t_age),\n unit: _unit,\n className,\n });\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\ninterface UnitIntervalConstraints {\n b_int_id?: number;\n t_int_id?: number;\n b_prop?: number;\n t_prop?: number;\n b_int_name?: string;\n t_int_name?: string;\n b_age?: number;\n t_age?: number;\n}\n\nexport interface IntervalProportionsProps extends Omit<\n IntervalTagProps,\n \"interval\"\n> {\n unit: UnitIntervalConstraints;\n showProportions?: boolean;\n calculateProportionsFromAges?: boolean;\n onClickItem?: any;\n}\n\nexport function IntervalProportions({\n unit,\n className,\n showProportions,\n calculateProportionsFromAges = true,\n ...rest\n}: IntervalProportionsProps) {\n /** Display the proportions of the unit that belong to the base and top intervals, if they are different */\n if (unit.b_int_id == null && unit.t_int_id == null) return null;\n\n let _showProps = showProportions;\n\n const i0 = unit.b_int_id;\n const i1 = unit.t_int_id;\n\n /** Get interval information */\n const intervalMap = useMacrostratDefs(\"intervals\");\n const [int0, int1] = useMemo(() => {\n const int0 = intervalMap?.get(i0) ?? {};\n if (i0 === i1) {\n return [int0, int0];\n }\n const int1 = intervalMap?.get(i1) ?? {};\n return [int0, int1];\n }, [intervalMap, i0, i1]);\n\n const interval0: IntervalShort = {\n id: i0,\n name: unit.b_int_name,\n ...int0,\n };\n\n let b_prop = unit.b_prop;\n let t_prop = unit.t_prop;\n\n // If we have b_age and t_age, then we can calculate proportions if they are not given\n if (b_prop == null && unit.b_age != null && calculateProportionsFromAges) {\n b_prop = getProportion(unit.b_age, int0);\n }\n if (t_prop == null && unit.t_age != null && calculateProportionsFromAges) {\n t_prop = getProportion(unit.t_age, int1);\n }\n\n // If there are no proportions given and we are not explicitly directed to show them,\n // then we set them to hidden.\n if (b_prop == null && t_prop == null) {\n _showProps ??= false;\n }\n\n /*\n Set default proportions to 0 and 1 if they are not given,\n so that we can display \"base\" and \"top\" labels\n */\n b_prop ??= 0;\n t_prop ??= 1;\n\n let p0: any = null;\n let p1: any = null;\n\n if (_showProps !== false) {\n p1 = 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\n return h(\n ItemList,\n { className: classNames(\"interval-proportions\", className) },\n [\n h(IntervalTag, {\n interval: interval0,\n prefix: p0,\n ...rest,\n }),\n h.if(i0 != i1)(\"span.discourage-break\", [\n h(\"span.sep\", \" to \"),\n h(IntervalTag, {\n interval: {\n id: i1,\n name: unit.t_int_name,\n ...int1,\n },\n prefix: p1,\n ...rest,\n }),\n ]),\n ],\n );\n}\n\nfunction getProportion(age: number, interval: IntervalShort): number | null {\n /** Get proportion with the age */\n return (interval.b_age - age) / (interval.b_age - interval.t_age);\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\nexport function 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\nexport function 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"],"names":["h","DataField","formatRange","Value","useMacrostratDefs","useMemo","int0","int1","ItemList","classNames","IntervalTag","formatProportion"],"mappings":"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"}
|
|
@@ -38,8 +38,8 @@ export declare function AgeLabel({ age, maximumFractionDigits, minimumFractionDi
|
|
|
38
38
|
}>;
|
|
39
39
|
export declare function Duration({ value, maximumFractionDigits, minimumFractionDigits, }: {
|
|
40
40
|
value: any;
|
|
41
|
-
maximumFractionDigits?: number;
|
|
42
|
-
minimumFractionDigits?: number;
|
|
41
|
+
maximumFractionDigits?: number | undefined;
|
|
42
|
+
minimumFractionDigits?: number | undefined;
|
|
43
43
|
}): import('react').FunctionComponentElement<{
|
|
44
44
|
value?: any;
|
|
45
45
|
unit?: string;
|
|
@@ -60,11 +60,12 @@ export interface IntervalProportionsProps extends Omit<IntervalTagProps, "interv
|
|
|
60
60
|
unit: UnitIntervalConstraints;
|
|
61
61
|
showProportions?: boolean;
|
|
62
62
|
calculateProportionsFromAges?: boolean;
|
|
63
|
+
onClickItem?: any;
|
|
63
64
|
}
|
|
64
65
|
export declare function IntervalProportions({ unit, className, showProportions, calculateProportionsFromAges, ...rest }: IntervalProportionsProps): import('react').FunctionComponentElement<{
|
|
65
66
|
children?: import('react').ReactNode;
|
|
66
67
|
className: string;
|
|
67
|
-
}
|
|
68
|
+
}> | null;
|
|
68
69
|
export declare function getAgeRange(_unit: any): any[];
|
|
69
70
|
export declare function getAge(value: any): any[];
|
|
70
71
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"age-range.js","sources":["../../src/unit-details/age-range.ts"],"sourcesContent":["import {\n DataField,\n IntervalShort,\n IntervalTag,\n type IntervalTagProps,\n ItemList,\n Value,\n} from \"@macrostrat/data-components\";\nimport { useMacrostratDefs } from \"@macrostrat/data-provider\";\nimport h from \"./age-range.module.sass\";\nimport { formatProportion, formatRange } from \"./utils\";\nimport classNames from \"classnames\";\nimport { useMemo } from \"react\";\n\nexport function AgeField({ unit, children, ...rest }) {\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 ...rest,\n },\n children,\n );\n}\n\nexport function AgeRange({\n data,\n className,\n}: {\n data: {\n t_age: number;\n b_age: number;\n };\n className?: string;\n}) {\n const [_b_age, _t_age, _unit] = getAgeRange(data);\n\n return h(Value, {\n value: formatRange(_b_age, _t_age),\n unit: _unit,\n className,\n });\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\ninterface UnitIntervalConstraints {\n b_int_id?: number;\n t_int_id?: number;\n b_prop?: number;\n t_prop?: number;\n b_int_name?: string;\n t_int_name?: string;\n b_age?: number;\n t_age?: number;\n}\n\nexport interface IntervalProportionsProps extends Omit<\n IntervalTagProps,\n \"interval\"\n> {\n unit: UnitIntervalConstraints;\n showProportions?: boolean;\n calculateProportionsFromAges?: boolean;\n}\n\nexport function IntervalProportions({\n unit,\n className,\n showProportions,\n calculateProportionsFromAges = true,\n ...rest\n}: IntervalProportionsProps) {\n /** Display the proportions of the unit that belong to the base and top intervals, if they are different */\n if (unit.b_int_id == null && unit.t_int_id == null) return null;\n\n let _showProps = showProportions;\n\n const i0 = unit.b_int_id;\n const i1 = unit.t_int_id;\n\n /** Get interval information */\n const intervalMap = useMacrostratDefs(\"intervals\");\n const [int0, int1] = useMemo(() => {\n const int0 = intervalMap?.get(i0) ?? {};\n if (i0 === i1) {\n return [int0, int0];\n }\n const int1 = intervalMap?.get(i1) ?? {};\n return [int0, int1];\n }, [intervalMap, i0, i1]);\n\n const interval0: IntervalShort = {\n id: i0,\n name: unit.b_int_name,\n ...int0,\n };\n\n let b_prop = unit.b_prop;\n let t_prop = unit.t_prop;\n\n // If we have b_age and t_age, then we can calculate proportions if they are not given\n if (b_prop == null && unit.b_age != null && calculateProportionsFromAges) {\n b_prop = getProportion(unit.b_age, int0);\n }\n if (t_prop == null && unit.t_age != null && calculateProportionsFromAges) {\n t_prop = getProportion(unit.t_age, int1);\n }\n\n // If there are no proportions given and we are not explicitly directed to show them,\n // then we set them to hidden.\n if (b_prop == null && t_prop == null) {\n _showProps ??= false;\n }\n\n /*\n Set default proportions to 0 and 1 if they are not given,\n so that we can display \"base\" and \"top\" labels\n */\n b_prop ??= 0;\n t_prop ??= 1;\n\n let p0: any = null;\n let p1: any = null;\n\n if (_showProps !== false) {\n p1 = 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\n return h(\n ItemList,\n { className: classNames(\"interval-proportions\", className) },\n [\n h(IntervalTag, {\n interval: interval0,\n prefix: p0,\n ...rest,\n }),\n h.if(i0 != i1)(\"span.discourage-break\", [\n h(\"span.sep\", \" to \"),\n h(IntervalTag, {\n interval: {\n id: i1,\n name: unit.t_int_name,\n ...int1,\n },\n prefix: p1,\n ...rest,\n }),\n ]),\n ],\n );\n}\n\nfunction getProportion(age: number, interval: IntervalShort): number | null {\n /** Get proportion with the age */\n return (interval.b_age - age) / (interval.b_age - interval.t_age);\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\nexport function 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\nexport function 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"],"names":["int0","int1"],"mappings":";;;;;;AAcO,SAAS,SAAS,EAAE,MAAM,UAAU,GAAG,QAAQ;AACpD,QAAM,CAAC,QAAQ,QAAQ,KAAK,IAAI,YAAY,IAAI;AAEhD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,YAAY,QAAQ,MAAM;AAAA,MACjC,MAAM;AAAA,MACN,GAAG;AAAA,IAAA;AAAA,IAEL;AAAA,EAAA;AAEJ;AAEO,SAAS,SAAS;AAAA,EACvB;AAAA,EACA;AACF,GAMG;AACD,QAAM,CAAC,QAAQ,QAAQ,KAAK,IAAI,YAAY,IAAI;AAEhD,SAAO,EAAE,OAAO;AAAA,IACd,OAAO,YAAY,QAAQ,MAAM;AAAA,IACjC,MAAM;AAAA,IACN;AAAA,EAAA,CACD;AACH;AAEO,SAAS,SAAS;AAAA,EACvB;AAAA,EACA,wBAAwB;AAAA,EACxB,wBAAwB;AAAA,EACxB;AACF,GAKG;AAID,QAAM,CAAC,OAAO,IAAI,IAAI,OAAO,GAAG;AAEhC,QAAM,SAAS,MAAM,eAAe,SAAS;AAAA,IAC3C;AAAA,IACA;AAAA,EAAA,CACD;AAED,SAAO,EAAE,OAAO,EAAE,OAAO,QAAQ,MAAM,WAAW;AACpD;AAEO,SAAS,SAAS;AAAA,EACvB;AAAA,EACA,wBAAwB;AAAA,EACxB,wBAAwB;AAC1B,GAAG;AACD,MAAI,OAAO;AACX,MAAI,QAAQ,KAAK;AACf,WAAO;AACP,aAAS;AACT,QAAI,QAAQ,GAAG;AACb,aAAO;AACP,eAAS;AAAA,IACX;AAAA,EACF,WAAW,QAAQ,KAAM;AACvB,WAAO;AACP,aAAS;AAAA,EACX;AAEA,MAAI,SAAS,MAAM,eAAe,SAAS;AAAA,IACzC;AAAA,IACA;AAAA,EAAA,CACD;AAED,SAAO,EAAE,OAAO,EAAE,OAAO,QAAQ,MAAM;AACzC;
|
|
1
|
+
{"version":3,"file":"age-range.js","sources":["../../src/unit-details/age-range.ts"],"sourcesContent":["import {\n DataField,\n IntervalShort,\n IntervalTag,\n type IntervalTagProps,\n ItemList,\n Value,\n} from \"@macrostrat/data-components\";\nimport { useMacrostratDefs } from \"@macrostrat/data-provider\";\nimport h from \"./age-range.module.sass\";\nimport { formatProportion, formatRange } from \"./utils\";\nimport classNames from \"classnames\";\nimport { useMemo } from \"react\";\n\nexport function AgeField({ unit, children, ...rest }) {\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 ...rest,\n },\n children,\n );\n}\n\nexport function AgeRange({\n data,\n className,\n}: {\n data: {\n t_age: number;\n b_age: number;\n };\n className?: string;\n}) {\n const [_b_age, _t_age, _unit] = getAgeRange(data);\n\n return h(Value, {\n value: formatRange(_b_age, _t_age),\n unit: _unit,\n className,\n });\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\ninterface UnitIntervalConstraints {\n b_int_id?: number;\n t_int_id?: number;\n b_prop?: number;\n t_prop?: number;\n b_int_name?: string;\n t_int_name?: string;\n b_age?: number;\n t_age?: number;\n}\n\nexport interface IntervalProportionsProps extends Omit<\n IntervalTagProps,\n \"interval\"\n> {\n unit: UnitIntervalConstraints;\n showProportions?: boolean;\n calculateProportionsFromAges?: boolean;\n onClickItem?: any;\n}\n\nexport function IntervalProportions({\n unit,\n className,\n showProportions,\n calculateProportionsFromAges = true,\n ...rest\n}: IntervalProportionsProps) {\n /** Display the proportions of the unit that belong to the base and top intervals, if they are different */\n if (unit.b_int_id == null && unit.t_int_id == null) return null;\n\n let _showProps = showProportions;\n\n const i0 = unit.b_int_id;\n const i1 = unit.t_int_id;\n\n /** Get interval information */\n const intervalMap = useMacrostratDefs(\"intervals\");\n const [int0, int1] = useMemo(() => {\n const int0 = intervalMap?.get(i0) ?? {};\n if (i0 === i1) {\n return [int0, int0];\n }\n const int1 = intervalMap?.get(i1) ?? {};\n return [int0, int1];\n }, [intervalMap, i0, i1]);\n\n const interval0: IntervalShort = {\n id: i0,\n name: unit.b_int_name,\n ...int0,\n };\n\n let b_prop = unit.b_prop;\n let t_prop = unit.t_prop;\n\n // If we have b_age and t_age, then we can calculate proportions if they are not given\n if (b_prop == null && unit.b_age != null && calculateProportionsFromAges) {\n b_prop = getProportion(unit.b_age, int0);\n }\n if (t_prop == null && unit.t_age != null && calculateProportionsFromAges) {\n t_prop = getProportion(unit.t_age, int1);\n }\n\n // If there are no proportions given and we are not explicitly directed to show them,\n // then we set them to hidden.\n if (b_prop == null && t_prop == null) {\n _showProps ??= false;\n }\n\n /*\n Set default proportions to 0 and 1 if they are not given,\n so that we can display \"base\" and \"top\" labels\n */\n b_prop ??= 0;\n t_prop ??= 1;\n\n let p0: any = null;\n let p1: any = null;\n\n if (_showProps !== false) {\n p1 = 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\n return h(\n ItemList,\n { className: classNames(\"interval-proportions\", className) },\n [\n h(IntervalTag, {\n interval: interval0,\n prefix: p0,\n ...rest,\n }),\n h.if(i0 != i1)(\"span.discourage-break\", [\n h(\"span.sep\", \" to \"),\n h(IntervalTag, {\n interval: {\n id: i1,\n name: unit.t_int_name,\n ...int1,\n },\n prefix: p1,\n ...rest,\n }),\n ]),\n ],\n );\n}\n\nfunction getProportion(age: number, interval: IntervalShort): number | null {\n /** Get proportion with the age */\n return (interval.b_age - age) / (interval.b_age - interval.t_age);\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\nexport function 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\nexport function 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"],"names":["int0","int1"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function UnitDetailsPanelWithNavigation(props: any): import('react').FunctionComponentElement<import('./panel').UnitDetailsPanelProps
|
|
1
|
+
export declare function UnitDetailsPanelWithNavigation(props: any): import('react').FunctionComponentElement<import('./panel').UnitDetailsPanelProps> | null;
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const h$1 = require("@macrostrat/hyper");
|
|
4
|
-
const panel_module = require("./panel.module.sass.cjs");
|
|
5
3
|
const uiComponents = require("@macrostrat/ui-components");
|
|
6
4
|
const core = require("@blueprintjs/core");
|
|
7
5
|
const React = require("react");
|
|
@@ -11,11 +9,10 @@ const names = require("../units/names.cjs");
|
|
|
11
9
|
const classNames = require("classnames");
|
|
12
10
|
const ageRange = require("./age-range.cjs");
|
|
13
11
|
const utils = require("./utils.cjs");
|
|
12
|
+
const panel_module = require("./panel.module.sass.cjs");
|
|
14
13
|
const store = require("../data-provider/store.cjs");
|
|
15
14
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
16
|
-
const h__default = /* @__PURE__ */ _interopDefault(h$1);
|
|
17
15
|
const classNames__default = /* @__PURE__ */ _interopDefault(classNames);
|
|
18
|
-
const h = h__default.default.styled(panel_module.default);
|
|
19
16
|
function UnitDetailsPanel({
|
|
20
17
|
unit,
|
|
21
18
|
onClose,
|
|
@@ -36,9 +33,9 @@ function UnitDetailsPanel({
|
|
|
36
33
|
const [showJSON, setShowJSON] = React.useState(false);
|
|
37
34
|
let content = null;
|
|
38
35
|
if (showJSON) {
|
|
39
|
-
content =
|
|
36
|
+
content = panel_module.default(uiComponents.JSONView, { data: unit, showRoot: false });
|
|
40
37
|
} else {
|
|
41
|
-
content =
|
|
38
|
+
content = panel_module.default(UnitDetailsContent, {
|
|
42
39
|
unit,
|
|
43
40
|
features,
|
|
44
41
|
lithologyFeatures,
|
|
@@ -50,8 +47,8 @@ function UnitDetailsPanel({
|
|
|
50
47
|
"json-toggle"
|
|
51
48
|
/* JSONToggle */
|
|
52
49
|
)) {
|
|
53
|
-
hiddenActions =
|
|
54
|
-
|
|
50
|
+
hiddenActions = panel_module.default([
|
|
51
|
+
panel_module.default(core.Button, {
|
|
55
52
|
icon: "code",
|
|
56
53
|
small: true,
|
|
57
54
|
minimal: true,
|
|
@@ -65,22 +62,28 @@ function UnitDetailsPanel({
|
|
|
65
62
|
hiddenActions
|
|
66
63
|
]);
|
|
67
64
|
}
|
|
68
|
-
const main =
|
|
69
|
-
|
|
65
|
+
const main = panel_module.default("div.unit-details-panel", { className }, [
|
|
66
|
+
panel_module.default(LegendPanelHeader, {
|
|
70
67
|
onClose,
|
|
71
68
|
title,
|
|
72
69
|
id: unit.unit_id,
|
|
73
70
|
actions,
|
|
74
71
|
hiddenActions
|
|
75
72
|
}),
|
|
76
|
-
|
|
73
|
+
panel_module.default("div.unit-details-content-holder", content)
|
|
77
74
|
]);
|
|
78
75
|
const clickHandlerForItem = React.useMemo(() => {
|
|
79
|
-
if (onSelectUnit == null
|
|
76
|
+
if (onSelectUnit == null || onClickItem == null) return null;
|
|
80
77
|
return (item) => {
|
|
81
78
|
if ("unit_id" in item && !("col_id" in item)) {
|
|
82
79
|
return (event) => {
|
|
83
|
-
onSelectUnit
|
|
80
|
+
if (onSelectUnit != null) {
|
|
81
|
+
onSelectUnit(item.unit_id);
|
|
82
|
+
} else if (onClickItem != null) {
|
|
83
|
+
console.warn(
|
|
84
|
+
"Unit selection: onClickItem is defined but onSelectUnit is not; ignoring click"
|
|
85
|
+
);
|
|
86
|
+
}
|
|
84
87
|
event.preventDefault();
|
|
85
88
|
};
|
|
86
89
|
}
|
|
@@ -88,7 +91,7 @@ function UnitDetailsPanel({
|
|
|
88
91
|
};
|
|
89
92
|
}, [onSelectUnit, onClickItem]);
|
|
90
93
|
if (clickHandlerForItem != null) {
|
|
91
|
-
return
|
|
94
|
+
return panel_module.default(
|
|
92
95
|
dataComponents.MacrostratInteractionProvider,
|
|
93
96
|
{
|
|
94
97
|
clickHandlerForItem,
|
|
@@ -106,23 +109,23 @@ function LegendPanelHeader({
|
|
|
106
109
|
actions = null,
|
|
107
110
|
hiddenActions
|
|
108
111
|
}) {
|
|
109
|
-
return
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
112
|
+
return panel_module.default("header.legend-panel-header", [
|
|
113
|
+
panel_module.default("div.title-container", [
|
|
114
|
+
panel_module.default.if(title != null)("h3", title),
|
|
115
|
+
panel_module.default.if(hiddenActions != null)(
|
|
113
116
|
"span.hidden-actions-container",
|
|
114
|
-
|
|
117
|
+
panel_module.default("div.hidden-actions", hiddenActions)
|
|
115
118
|
)
|
|
116
119
|
]),
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
120
|
+
panel_module.default("div.spacer"),
|
|
121
|
+
panel_module.default.if(id != null)("code.unit-id", id),
|
|
122
|
+
panel_module.default.if(actions != null)(core.ButtonGroup, { minimal: true }, actions),
|
|
123
|
+
panel_module.default.if(onClose != null)(core.Button, {
|
|
121
124
|
icon: "cross",
|
|
122
125
|
minimal: true,
|
|
123
126
|
small: true,
|
|
124
127
|
onClick() {
|
|
125
|
-
onClose();
|
|
128
|
+
onClose?.();
|
|
126
129
|
}
|
|
127
130
|
})
|
|
128
131
|
]);
|
|
@@ -163,7 +166,7 @@ function UnitDetailsContent({
|
|
|
163
166
|
if (outcrop == "both") {
|
|
164
167
|
outcrop = "surface and subsurface";
|
|
165
168
|
}
|
|
166
|
-
outcropField =
|
|
169
|
+
outcropField = panel_module.default(dataComponents.DataField, {
|
|
167
170
|
label: "Outcrop",
|
|
168
171
|
value: outcrop
|
|
169
172
|
});
|
|
@@ -177,17 +180,17 @@ function UnitDetailsContent({
|
|
|
177
180
|
unit.min_thick != 0) {
|
|
178
181
|
const label = unit.t_pos < unit.b_pos ? "Depth" : "Height";
|
|
179
182
|
const u1 = "m";
|
|
180
|
-
thicknessOrHeightRange =
|
|
183
|
+
thicknessOrHeightRange = panel_module.default(dataComponents.DataField, {
|
|
181
184
|
unit: u1,
|
|
182
185
|
label,
|
|
183
186
|
value: utils.formatRange(unit.b_pos, unit.t_pos),
|
|
184
|
-
children:
|
|
187
|
+
children: panel_module.default(
|
|
185
188
|
dataComponents.Parenthetical,
|
|
186
|
-
|
|
189
|
+
panel_module.default(dataComponents.Value, { value: thickness, unit: thicknessUnit })
|
|
187
190
|
)
|
|
188
191
|
});
|
|
189
192
|
}
|
|
190
|
-
thicknessOrHeightRange ??=
|
|
193
|
+
thicknessOrHeightRange ??= panel_module.default(dataComponents.DataField, {
|
|
191
194
|
label: "Thickness",
|
|
192
195
|
value: thickness,
|
|
193
196
|
unit: thicknessUnit
|
|
@@ -198,60 +201,60 @@ function UnitDetailsContent({
|
|
|
198
201
|
/* Color */
|
|
199
202
|
)) {
|
|
200
203
|
const unit1 = unit;
|
|
201
|
-
colorSwatch =
|
|
204
|
+
colorSwatch = panel_module.default("div.color-swatch", {
|
|
202
205
|
style: { backgroundColor: unit1.color }
|
|
203
206
|
});
|
|
204
207
|
}
|
|
205
|
-
return
|
|
206
|
-
|
|
208
|
+
return panel_module.default("div.unit-details-content", [
|
|
209
|
+
panel_module.default.if(features.has(
|
|
207
210
|
"column-name"
|
|
208
211
|
/* ColumnName */
|
|
209
212
|
))(ColumnNameField, {
|
|
210
213
|
col_id: unit.col_id
|
|
211
214
|
}),
|
|
212
215
|
thicknessOrHeightRange,
|
|
213
|
-
|
|
216
|
+
panel_module.default.if(lithologies != null)(dataComponents.LithologyList, {
|
|
214
217
|
label: "Lithology",
|
|
215
|
-
lithologies,
|
|
218
|
+
lithologies: lithologies ?? [],
|
|
216
219
|
features: lithologyFeatures
|
|
217
220
|
}),
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
+
panel_module.default(ageRange.AgeField, { unit }, [
|
|
222
|
+
panel_module.default(dataComponents.Parenthetical, panel_module.default(ageRange.Duration, { value: unit.b_age - unit.t_age })),
|
|
223
|
+
panel_module.default(ageRange.IntervalProportions, {
|
|
221
224
|
unit,
|
|
222
225
|
onClickItem
|
|
223
226
|
})
|
|
224
227
|
]),
|
|
225
|
-
|
|
228
|
+
panel_module.default.if(environments != null)(dataComponents.EnvironmentsList, {
|
|
226
229
|
environments
|
|
227
230
|
}),
|
|
228
|
-
|
|
231
|
+
panel_module.default.if(unit.strat_name_id != null)(StratNameField, {
|
|
229
232
|
strat_name_id: unit.strat_name_id
|
|
230
233
|
}),
|
|
231
234
|
outcropField,
|
|
232
|
-
|
|
235
|
+
panel_module.default.if(features.has(
|
|
233
236
|
"adjacent-units"
|
|
234
237
|
/* AdjacentUnits */
|
|
235
238
|
))([
|
|
236
|
-
|
|
239
|
+
panel_module.default.if(unit.units_above != null)(
|
|
237
240
|
dataComponents.DataField,
|
|
238
241
|
{ label: "Above" },
|
|
239
|
-
|
|
242
|
+
panel_module.default(UnitIDList, {
|
|
240
243
|
units: unit.units_above,
|
|
241
244
|
showNames: true
|
|
242
245
|
})
|
|
243
246
|
),
|
|
244
|
-
|
|
247
|
+
panel_module.default.if(unit.units_below != null)(
|
|
245
248
|
dataComponents.DataField,
|
|
246
249
|
{ label: "Below" },
|
|
247
|
-
|
|
250
|
+
panel_module.default(UnitIDList, {
|
|
248
251
|
units: unit.units_below,
|
|
249
252
|
showNames: true
|
|
250
253
|
})
|
|
251
254
|
)
|
|
252
255
|
]),
|
|
253
256
|
colorSwatch,
|
|
254
|
-
|
|
257
|
+
panel_module.default(ReferencesField, { refs: unit.refs, inline: true })
|
|
255
258
|
]);
|
|
256
259
|
}
|
|
257
260
|
function ColumnNameField({
|
|
@@ -259,15 +262,15 @@ function ColumnNameField({
|
|
|
259
262
|
showIdentifier = false
|
|
260
263
|
}) {
|
|
261
264
|
const colData = dataProvider.useMacrostratColumnInfo(col_id);
|
|
262
|
-
let inner =
|
|
265
|
+
let inner = panel_module.default(Identifier, { id: col_id });
|
|
263
266
|
const name = colData?.col_name;
|
|
264
267
|
if (name != null) {
|
|
265
|
-
inner =
|
|
266
|
-
|
|
267
|
-
|
|
268
|
+
inner = panel_module.default("span.value", [
|
|
269
|
+
panel_module.default("span.col-name", name),
|
|
270
|
+
panel_module.default.if(showIdentifier)([" ", panel_module.default(dataComponents.Parenthetical, inner)])
|
|
268
271
|
]);
|
|
269
272
|
}
|
|
270
|
-
return
|
|
273
|
+
return panel_module.default(
|
|
271
274
|
dataComponents.DataField,
|
|
272
275
|
{
|
|
273
276
|
label: "Column"
|
|
@@ -279,14 +282,14 @@ function ReferencesField({ refs, className = null, ...rest }) {
|
|
|
279
282
|
if (refs == null || refs.length === 0) {
|
|
280
283
|
return null;
|
|
281
284
|
}
|
|
282
|
-
return
|
|
285
|
+
return panel_module.default(
|
|
283
286
|
dataComponents.DataField,
|
|
284
287
|
{
|
|
285
288
|
label: "References",
|
|
286
289
|
className: classNames__default.default("refs-field", className),
|
|
287
290
|
...rest
|
|
288
291
|
},
|
|
289
|
-
|
|
292
|
+
panel_module.default(BibInfo, { refs })
|
|
290
293
|
);
|
|
291
294
|
}
|
|
292
295
|
function useStratNameData(strat_name_id) {
|
|
@@ -301,18 +304,18 @@ function StratNameField(props) {
|
|
|
301
304
|
...baseInteractionProps,
|
|
302
305
|
...rest
|
|
303
306
|
};
|
|
304
|
-
let inner =
|
|
307
|
+
let inner = panel_module.default(Identifier, { id: strat_name_id });
|
|
305
308
|
const name = data?.strat_name_long;
|
|
306
309
|
if (name != null) {
|
|
307
|
-
inner =
|
|
310
|
+
inner = panel_module.default("span.strat-name", name);
|
|
308
311
|
}
|
|
309
312
|
const clickable = dataComponents.isClickable(coreProps);
|
|
310
|
-
return
|
|
313
|
+
return panel_module.default(
|
|
311
314
|
dataComponents.DataField,
|
|
312
315
|
{
|
|
313
316
|
label: "Stratigraphic name"
|
|
314
317
|
},
|
|
315
|
-
|
|
318
|
+
panel_module.default(
|
|
316
319
|
clickable ? "a" : "span",
|
|
317
320
|
{
|
|
318
321
|
className: classNames__default.default({ clickable }, className),
|
|
@@ -345,7 +348,7 @@ function getThickness(unit) {
|
|
|
345
348
|
}
|
|
346
349
|
function ThicknessField({ unit, label = "Thickness" }) {
|
|
347
350
|
const [value, thicknessUnit] = getThickness(unit);
|
|
348
|
-
return
|
|
351
|
+
return panel_module.default(dataComponents.DataField, {
|
|
349
352
|
label,
|
|
350
353
|
value,
|
|
351
354
|
unit: thicknessUnit
|
|
@@ -357,26 +360,26 @@ function BibInfo({ refs }) {
|
|
|
357
360
|
return null;
|
|
358
361
|
}
|
|
359
362
|
if (refData.length == 1) {
|
|
360
|
-
return
|
|
363
|
+
return panel_module.default(Citation, {
|
|
361
364
|
data: refData[0],
|
|
362
365
|
tag: "span",
|
|
363
366
|
key: refData[0].ref_id
|
|
364
367
|
});
|
|
365
368
|
}
|
|
366
|
-
return
|
|
369
|
+
return panel_module.default(
|
|
367
370
|
"ul.refs",
|
|
368
371
|
refData.map(
|
|
369
|
-
(data, i) =>
|
|
372
|
+
(data, i) => panel_module.default(Citation, { data, tag: "li", key: data.ref_id })
|
|
370
373
|
)
|
|
371
374
|
);
|
|
372
375
|
}
|
|
373
376
|
function Citation({ data, tag = "p" }) {
|
|
374
|
-
return
|
|
375
|
-
|
|
377
|
+
return panel_module.default(tag, { className: "citation" }, [
|
|
378
|
+
panel_module.default("span.authors", data.author),
|
|
376
379
|
", ",
|
|
377
|
-
|
|
380
|
+
panel_module.default("span.year", data.pub_year),
|
|
378
381
|
", ",
|
|
379
|
-
|
|
382
|
+
panel_module.default("span.title", data.ref)
|
|
380
383
|
]);
|
|
381
384
|
}
|
|
382
385
|
function enhanceEnvironments(environments, envMap) {
|
|
@@ -403,14 +406,14 @@ function ClickableText({
|
|
|
403
406
|
}) {
|
|
404
407
|
const clickable = dataComponents.isClickable(rest);
|
|
405
408
|
const tag = clickable ? "a" : "span";
|
|
406
|
-
return
|
|
409
|
+
return panel_module.default(tag, { className: classNames__default.default(className, { clickable }), ...rest });
|
|
407
410
|
}
|
|
408
411
|
function Identifier({
|
|
409
412
|
id,
|
|
410
413
|
className,
|
|
411
414
|
...rest
|
|
412
415
|
}) {
|
|
413
|
-
return
|
|
416
|
+
return panel_module.default(
|
|
414
417
|
ClickableText,
|
|
415
418
|
{
|
|
416
419
|
className: classNames__default.default("identifier", className),
|
|
@@ -442,15 +445,15 @@ function UnitIDList({ units, showNames = false }) {
|
|
|
442
445
|
}
|
|
443
446
|
}, [units, unitsMap]);
|
|
444
447
|
if (extUnits.length === 0) {
|
|
445
|
-
return
|
|
448
|
+
return panel_module.default("span.no-units", "None");
|
|
446
449
|
}
|
|
447
|
-
return
|
|
450
|
+
return panel_module.default(
|
|
448
451
|
dataComponents.ItemList,
|
|
449
452
|
{ className: "units-list" },
|
|
450
453
|
extUnits.map((info) => {
|
|
451
|
-
return
|
|
454
|
+
return panel_module.default(
|
|
452
455
|
"span.item",
|
|
453
|
-
|
|
456
|
+
panel_module.default(UnitIdentifier, {
|
|
454
457
|
...info,
|
|
455
458
|
...interactionManager?.interactionPropsForItem({
|
|
456
459
|
unit_id: info.unitID
|
|
@@ -467,7 +470,7 @@ function UnitIdentifier({
|
|
|
467
470
|
...interactionProps
|
|
468
471
|
}) {
|
|
469
472
|
if (name != null) {
|
|
470
|
-
return
|
|
473
|
+
return panel_module.default(
|
|
471
474
|
ClickableText,
|
|
472
475
|
{
|
|
473
476
|
className: "unit-name",
|
|
@@ -476,7 +479,7 @@ function UnitIdentifier({
|
|
|
476
479
|
name
|
|
477
480
|
);
|
|
478
481
|
}
|
|
479
|
-
return
|
|
482
|
+
return panel_module.default(Identifier, {
|
|
480
483
|
className: "unit-id",
|
|
481
484
|
key: unitID,
|
|
482
485
|
id: unitID,
|