@macrostrat/column-views 3.2.0 → 3.2.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.
- package/CHANGELOG.md +9 -0
- package/dist/age-axis.cjs +2 -2
- package/dist/age-axis.cjs.map +1 -1
- package/dist/age-axis.js +1 -1
- package/dist/column-views.css +130 -125
- package/dist/index.cjs +15 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/section.cjs +2 -2
- package/dist/section.cjs.map +1 -1
- package/dist/section.js +1 -1
- package/dist/unit-details/age-range.cjs +153 -0
- package/dist/unit-details/age-range.cjs.map +1 -0
- package/dist/unit-details/age-range.d.ts +43 -0
- package/dist/unit-details/age-range.js +153 -0
- package/dist/unit-details/age-range.js.map +1 -0
- package/dist/unit-details/age-range.module.sass.cjs +16 -0
- package/dist/unit-details/age-range.module.sass.cjs.map +1 -0
- package/dist/unit-details/age-range.module.sass.js +14 -0
- package/dist/unit-details/age-range.module.sass.js.map +1 -0
- package/dist/unit-details/index.d.ts +1 -0
- package/dist/unit-details/panel.cjs +17 -173
- package/dist/unit-details/panel.cjs.map +1 -1
- package/dist/unit-details/panel.js +12 -168
- package/dist/unit-details/panel.js.map +1 -1
- package/dist/unit-details/panel.module.sass.cjs +20 -22
- package/dist/unit-details/panel.module.sass.cjs.map +1 -1
- package/dist/unit-details/panel.module.sass.js +20 -22
- package/dist/unit-details/panel.module.sass.js.map +1 -1
- package/dist/unit-details/utils.cjs +31 -0
- package/dist/unit-details/utils.cjs.map +1 -0
- package/dist/unit-details/utils.d.ts +3 -0
- package/dist/unit-details/utils.js +31 -0
- package/dist/unit-details/utils.js.map +1 -0
- package/package.json +5 -5
- package/src/unit-details/age-range.module.sass +15 -0
- package/src/unit-details/age-range.ts +191 -0
- package/src/unit-details/index.ts +1 -0
- package/src/unit-details/panel.module.sass +0 -9
- package/src/unit-details/panel.ts +13 -227
- package/src/unit-details/utils.ts +33 -0
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const dataComponents = require("@macrostrat/data-components");
|
|
4
|
+
const dataProvider = require("@macrostrat/data-provider");
|
|
5
|
+
const ageRange_module = require("./age-range.module.sass.cjs");
|
|
6
|
+
const utils = require("./utils.cjs");
|
|
7
|
+
function AgeField({ unit, children }) {
|
|
8
|
+
const [b_age, t_age, _unit] = getAgeRange(unit);
|
|
9
|
+
return ageRange_module.default(
|
|
10
|
+
dataComponents.DataField,
|
|
11
|
+
{
|
|
12
|
+
label: "Age",
|
|
13
|
+
value: utils.formatRange(b_age, t_age),
|
|
14
|
+
unit: _unit
|
|
15
|
+
},
|
|
16
|
+
children
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
function AgeLabel({
|
|
20
|
+
age,
|
|
21
|
+
maximumFractionDigits = 2,
|
|
22
|
+
minimumFractionDigits = 0,
|
|
23
|
+
className
|
|
24
|
+
}) {
|
|
25
|
+
const [value, unit] = getAge(age);
|
|
26
|
+
const _value = value.toLocaleString("en-US", {
|
|
27
|
+
maximumFractionDigits,
|
|
28
|
+
minimumFractionDigits
|
|
29
|
+
});
|
|
30
|
+
return ageRange_module.default(dataComponents.Value, { value: _value, unit, className });
|
|
31
|
+
}
|
|
32
|
+
function Duration({
|
|
33
|
+
value,
|
|
34
|
+
maximumFractionDigits = 2,
|
|
35
|
+
minimumFractionDigits = 0
|
|
36
|
+
}) {
|
|
37
|
+
let unit = "Myr";
|
|
38
|
+
if (value < 0.8) {
|
|
39
|
+
unit = "kyr";
|
|
40
|
+
value *= 1e3;
|
|
41
|
+
if (value < 5) {
|
|
42
|
+
unit = "yr";
|
|
43
|
+
value *= 1e3;
|
|
44
|
+
}
|
|
45
|
+
} else if (value > 1e3) {
|
|
46
|
+
unit = "Gyr";
|
|
47
|
+
value /= 1e3;
|
|
48
|
+
}
|
|
49
|
+
let _value = value.toLocaleString("en-US", {
|
|
50
|
+
maximumFractionDigits,
|
|
51
|
+
minimumFractionDigits
|
|
52
|
+
});
|
|
53
|
+
return ageRange_module.default(dataComponents.Value, { value: _value, unit });
|
|
54
|
+
}
|
|
55
|
+
function IntervalProportions({ unit, onClickItem }) {
|
|
56
|
+
if (unit.b_int_id == null && unit.t_int_id == null && unit.b_prop == null && unit.t_prop == null)
|
|
57
|
+
return null;
|
|
58
|
+
const i0 = unit.b_int_id;
|
|
59
|
+
const i1 = unit.t_int_id;
|
|
60
|
+
let b_prop = unit.b_prop ?? 0;
|
|
61
|
+
let t_prop = unit.t_prop ?? 1;
|
|
62
|
+
const intervalMap = dataProvider.useMacrostratDefs("intervals");
|
|
63
|
+
const int0 = intervalMap?.get(i0) ?? {};
|
|
64
|
+
const interval0 = {
|
|
65
|
+
...int0,
|
|
66
|
+
id: i0,
|
|
67
|
+
name: unit.b_int_name
|
|
68
|
+
};
|
|
69
|
+
let p0 = null;
|
|
70
|
+
const int1 = intervalMap?.get(i1) ?? {};
|
|
71
|
+
const p1 = ageRange_module.default(Proportion, { value: t_prop });
|
|
72
|
+
if (i0 !== i1 || b_prop !== 0 || t_prop !== 1) {
|
|
73
|
+
p0 = ageRange_module.default(Proportion, { value: b_prop });
|
|
74
|
+
}
|
|
75
|
+
if (i0 === i1 && (b_prop !== 0 || t_prop !== 1)) {
|
|
76
|
+
p0 = ageRange_module.default("span.joint-proportion", [p0, " ", ageRange_module.default("span.sep", "to"), " ", p1]);
|
|
77
|
+
}
|
|
78
|
+
const clickable = onClickItem != null;
|
|
79
|
+
const handleClick = (event) => {
|
|
80
|
+
if (onClickItem) {
|
|
81
|
+
onClickItem(event, interval0);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
return ageRange_module.default(dataComponents.ItemList, { className: "interval-proportions" }, [
|
|
85
|
+
ageRange_module.default(dataComponents.IntervalTag, {
|
|
86
|
+
className: clickable ? "clickable" : "",
|
|
87
|
+
onClick: clickable ? handleClick : void 0,
|
|
88
|
+
interval: interval0,
|
|
89
|
+
prefix: p0
|
|
90
|
+
}),
|
|
91
|
+
ageRange_module.default.if(i0 != i1)("span.discourage-break", [
|
|
92
|
+
ageRange_module.default("span.sep", " to "),
|
|
93
|
+
ageRange_module.default(dataComponents.IntervalTag, {
|
|
94
|
+
className: clickable ? "clickable" : "",
|
|
95
|
+
onClick: clickable ? handleClick : void 0,
|
|
96
|
+
interval: {
|
|
97
|
+
...int1,
|
|
98
|
+
id: i1,
|
|
99
|
+
name: unit.t_int_name
|
|
100
|
+
},
|
|
101
|
+
prefix: p1
|
|
102
|
+
})
|
|
103
|
+
])
|
|
104
|
+
]);
|
|
105
|
+
}
|
|
106
|
+
function Proportion({ value }) {
|
|
107
|
+
let content = null;
|
|
108
|
+
if (value == 0) {
|
|
109
|
+
content = "base";
|
|
110
|
+
} else if (value == 1) {
|
|
111
|
+
content = "top";
|
|
112
|
+
} else {
|
|
113
|
+
content = utils.formatProportion(value * 100) + "%";
|
|
114
|
+
}
|
|
115
|
+
return ageRange_module.default("span.proportion", content);
|
|
116
|
+
}
|
|
117
|
+
function getAgeRange(_unit) {
|
|
118
|
+
let b_age = _unit.b_age;
|
|
119
|
+
let t_age = _unit.t_age;
|
|
120
|
+
let unit = "Ma";
|
|
121
|
+
if (b_age < 0.8 && t_age < 1.2) {
|
|
122
|
+
b_age *= 1e3;
|
|
123
|
+
t_age *= 1e3;
|
|
124
|
+
unit = "ka";
|
|
125
|
+
} else if (b_age > 800 && t_age > 1200) {
|
|
126
|
+
b_age /= 1e3;
|
|
127
|
+
t_age /= 1e3;
|
|
128
|
+
unit = "Ga";
|
|
129
|
+
}
|
|
130
|
+
return [b_age, t_age, unit];
|
|
131
|
+
}
|
|
132
|
+
function getAge(value) {
|
|
133
|
+
let unit = "Ma";
|
|
134
|
+
if (value < 0.8) {
|
|
135
|
+
unit = "ka";
|
|
136
|
+
value *= 1e3;
|
|
137
|
+
if (value < 5) {
|
|
138
|
+
unit = "yr";
|
|
139
|
+
value *= 1e3;
|
|
140
|
+
}
|
|
141
|
+
} else if (value > 1e3) {
|
|
142
|
+
unit = "Ga";
|
|
143
|
+
value /= 1e3;
|
|
144
|
+
}
|
|
145
|
+
return [value, unit];
|
|
146
|
+
}
|
|
147
|
+
exports.AgeField = AgeField;
|
|
148
|
+
exports.AgeLabel = AgeLabel;
|
|
149
|
+
exports.Duration = Duration;
|
|
150
|
+
exports.IntervalProportions = IntervalProportions;
|
|
151
|
+
exports.getAge = getAge;
|
|
152
|
+
exports.getAgeRange = getAgeRange;
|
|
153
|
+
//# sourceMappingURL=age-range.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"age-range.cjs","sources":["../../src/unit-details/age-range.ts"],"sourcesContent":["import {\n DataField,\n IntervalShort,\n IntervalTag,\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\";\n\nexport function 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\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\nexport function IntervalProportions({ unit, onClickItem }) {\n /** Display the proportions of the unit that belong to the base and top intervals, if they are different */\n if (\n unit.b_int_id == null &&\n unit.t_int_id == null &&\n unit.b_prop == null &&\n unit.t_prop == null\n )\n return null;\n\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: any = null;\n const int1 = intervalMap?.get(i1) ?? {};\n const p1: any = 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(ItemList, { className: \"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\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","ItemList","IntervalTag","formatProportion"],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export declare function AgeField({ unit, children }: {
|
|
2
|
+
unit: any;
|
|
3
|
+
children: any;
|
|
4
|
+
}): import('react').FunctionComponentElement<{
|
|
5
|
+
label?: string;
|
|
6
|
+
value?: any;
|
|
7
|
+
inline?: boolean;
|
|
8
|
+
showIfEmpty?: boolean;
|
|
9
|
+
className?: string;
|
|
10
|
+
children?: any;
|
|
11
|
+
unit?: string;
|
|
12
|
+
row?: boolean;
|
|
13
|
+
}>;
|
|
14
|
+
export declare function AgeLabel({ age, maximumFractionDigits, minimumFractionDigits, className, }: {
|
|
15
|
+
age: number;
|
|
16
|
+
className?: string;
|
|
17
|
+
maximumFractionDigits?: number;
|
|
18
|
+
minimumFractionDigits?: number;
|
|
19
|
+
}): import('react').FunctionComponentElement<{
|
|
20
|
+
value?: any;
|
|
21
|
+
unit?: string;
|
|
22
|
+
children?: any;
|
|
23
|
+
className?: string;
|
|
24
|
+
}>;
|
|
25
|
+
export declare function Duration({ value, maximumFractionDigits, minimumFractionDigits, }: {
|
|
26
|
+
value: any;
|
|
27
|
+
maximumFractionDigits?: number;
|
|
28
|
+
minimumFractionDigits?: number;
|
|
29
|
+
}): import('react').FunctionComponentElement<{
|
|
30
|
+
value?: any;
|
|
31
|
+
unit?: string;
|
|
32
|
+
children?: any;
|
|
33
|
+
className?: string;
|
|
34
|
+
}>;
|
|
35
|
+
export declare function IntervalProportions({ unit, onClickItem }: {
|
|
36
|
+
unit: any;
|
|
37
|
+
onClickItem: any;
|
|
38
|
+
}): import('react').FunctionComponentElement<{
|
|
39
|
+
children?: import('react').ReactNode;
|
|
40
|
+
className: string;
|
|
41
|
+
}>;
|
|
42
|
+
export declare function getAgeRange(_unit: any): any[];
|
|
43
|
+
export declare function getAge(value: any): any[];
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { DataField, Value, ItemList, IntervalTag } from "@macrostrat/data-components";
|
|
2
|
+
import { useMacrostratDefs } from "@macrostrat/data-provider";
|
|
3
|
+
import h from "./age-range.module.sass.js";
|
|
4
|
+
import { formatRange, formatProportion } from "./utils.js";
|
|
5
|
+
function AgeField({ unit, children }) {
|
|
6
|
+
const [b_age, t_age, _unit] = getAgeRange(unit);
|
|
7
|
+
return h(
|
|
8
|
+
DataField,
|
|
9
|
+
{
|
|
10
|
+
label: "Age",
|
|
11
|
+
value: formatRange(b_age, t_age),
|
|
12
|
+
unit: _unit
|
|
13
|
+
},
|
|
14
|
+
children
|
|
15
|
+
);
|
|
16
|
+
}
|
|
17
|
+
function AgeLabel({
|
|
18
|
+
age,
|
|
19
|
+
maximumFractionDigits = 2,
|
|
20
|
+
minimumFractionDigits = 0,
|
|
21
|
+
className
|
|
22
|
+
}) {
|
|
23
|
+
const [value, unit] = getAge(age);
|
|
24
|
+
const _value = value.toLocaleString("en-US", {
|
|
25
|
+
maximumFractionDigits,
|
|
26
|
+
minimumFractionDigits
|
|
27
|
+
});
|
|
28
|
+
return h(Value, { value: _value, unit, className });
|
|
29
|
+
}
|
|
30
|
+
function Duration({
|
|
31
|
+
value,
|
|
32
|
+
maximumFractionDigits = 2,
|
|
33
|
+
minimumFractionDigits = 0
|
|
34
|
+
}) {
|
|
35
|
+
let unit = "Myr";
|
|
36
|
+
if (value < 0.8) {
|
|
37
|
+
unit = "kyr";
|
|
38
|
+
value *= 1e3;
|
|
39
|
+
if (value < 5) {
|
|
40
|
+
unit = "yr";
|
|
41
|
+
value *= 1e3;
|
|
42
|
+
}
|
|
43
|
+
} else if (value > 1e3) {
|
|
44
|
+
unit = "Gyr";
|
|
45
|
+
value /= 1e3;
|
|
46
|
+
}
|
|
47
|
+
let _value = value.toLocaleString("en-US", {
|
|
48
|
+
maximumFractionDigits,
|
|
49
|
+
minimumFractionDigits
|
|
50
|
+
});
|
|
51
|
+
return h(Value, { value: _value, unit });
|
|
52
|
+
}
|
|
53
|
+
function IntervalProportions({ unit, onClickItem }) {
|
|
54
|
+
if (unit.b_int_id == null && unit.t_int_id == null && unit.b_prop == null && unit.t_prop == null)
|
|
55
|
+
return null;
|
|
56
|
+
const i0 = unit.b_int_id;
|
|
57
|
+
const i1 = unit.t_int_id;
|
|
58
|
+
let b_prop = unit.b_prop ?? 0;
|
|
59
|
+
let t_prop = unit.t_prop ?? 1;
|
|
60
|
+
const intervalMap = useMacrostratDefs("intervals");
|
|
61
|
+
const int0 = intervalMap?.get(i0) ?? {};
|
|
62
|
+
const interval0 = {
|
|
63
|
+
...int0,
|
|
64
|
+
id: i0,
|
|
65
|
+
name: unit.b_int_name
|
|
66
|
+
};
|
|
67
|
+
let p0 = null;
|
|
68
|
+
const int1 = intervalMap?.get(i1) ?? {};
|
|
69
|
+
const p1 = h(Proportion, { value: t_prop });
|
|
70
|
+
if (i0 !== i1 || b_prop !== 0 || t_prop !== 1) {
|
|
71
|
+
p0 = h(Proportion, { value: b_prop });
|
|
72
|
+
}
|
|
73
|
+
if (i0 === i1 && (b_prop !== 0 || t_prop !== 1)) {
|
|
74
|
+
p0 = h("span.joint-proportion", [p0, " ", h("span.sep", "to"), " ", p1]);
|
|
75
|
+
}
|
|
76
|
+
const clickable = onClickItem != null;
|
|
77
|
+
const handleClick = (event) => {
|
|
78
|
+
if (onClickItem) {
|
|
79
|
+
onClickItem(event, interval0);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
return h(ItemList, { className: "interval-proportions" }, [
|
|
83
|
+
h(IntervalTag, {
|
|
84
|
+
className: clickable ? "clickable" : "",
|
|
85
|
+
onClick: clickable ? handleClick : void 0,
|
|
86
|
+
interval: interval0,
|
|
87
|
+
prefix: p0
|
|
88
|
+
}),
|
|
89
|
+
h.if(i0 != i1)("span.discourage-break", [
|
|
90
|
+
h("span.sep", " to "),
|
|
91
|
+
h(IntervalTag, {
|
|
92
|
+
className: clickable ? "clickable" : "",
|
|
93
|
+
onClick: clickable ? handleClick : void 0,
|
|
94
|
+
interval: {
|
|
95
|
+
...int1,
|
|
96
|
+
id: i1,
|
|
97
|
+
name: unit.t_int_name
|
|
98
|
+
},
|
|
99
|
+
prefix: p1
|
|
100
|
+
})
|
|
101
|
+
])
|
|
102
|
+
]);
|
|
103
|
+
}
|
|
104
|
+
function Proportion({ value }) {
|
|
105
|
+
let content = null;
|
|
106
|
+
if (value == 0) {
|
|
107
|
+
content = "base";
|
|
108
|
+
} else if (value == 1) {
|
|
109
|
+
content = "top";
|
|
110
|
+
} else {
|
|
111
|
+
content = formatProportion(value * 100) + "%";
|
|
112
|
+
}
|
|
113
|
+
return h("span.proportion", content);
|
|
114
|
+
}
|
|
115
|
+
function getAgeRange(_unit) {
|
|
116
|
+
let b_age = _unit.b_age;
|
|
117
|
+
let t_age = _unit.t_age;
|
|
118
|
+
let unit = "Ma";
|
|
119
|
+
if (b_age < 0.8 && t_age < 1.2) {
|
|
120
|
+
b_age *= 1e3;
|
|
121
|
+
t_age *= 1e3;
|
|
122
|
+
unit = "ka";
|
|
123
|
+
} else if (b_age > 800 && t_age > 1200) {
|
|
124
|
+
b_age /= 1e3;
|
|
125
|
+
t_age /= 1e3;
|
|
126
|
+
unit = "Ga";
|
|
127
|
+
}
|
|
128
|
+
return [b_age, t_age, unit];
|
|
129
|
+
}
|
|
130
|
+
function getAge(value) {
|
|
131
|
+
let unit = "Ma";
|
|
132
|
+
if (value < 0.8) {
|
|
133
|
+
unit = "ka";
|
|
134
|
+
value *= 1e3;
|
|
135
|
+
if (value < 5) {
|
|
136
|
+
unit = "yr";
|
|
137
|
+
value *= 1e3;
|
|
138
|
+
}
|
|
139
|
+
} else if (value > 1e3) {
|
|
140
|
+
unit = "Ga";
|
|
141
|
+
value /= 1e3;
|
|
142
|
+
}
|
|
143
|
+
return [value, unit];
|
|
144
|
+
}
|
|
145
|
+
export {
|
|
146
|
+
AgeField,
|
|
147
|
+
AgeLabel,
|
|
148
|
+
Duration,
|
|
149
|
+
IntervalProportions,
|
|
150
|
+
getAge,
|
|
151
|
+
getAgeRange
|
|
152
|
+
};
|
|
153
|
+
//# sourceMappingURL=age-range.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"age-range.js","sources":["../../src/unit-details/age-range.ts"],"sourcesContent":["import {\n DataField,\n IntervalShort,\n IntervalTag,\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\";\n\nexport function 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\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\nexport function IntervalProportions({ unit, onClickItem }) {\n /** Display the proportions of the unit that belong to the base and top intervals, if they are different */\n if (\n unit.b_int_id == null &&\n unit.t_int_id == null &&\n unit.b_prop == null &&\n unit.t_prop == null\n )\n return null;\n\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: any = null;\n const int1 = intervalMap?.get(i1) ?? {};\n const p1: any = 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(ItemList, { className: \"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\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":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const h$1 = require("@macrostrat/hyper");
|
|
4
|
+
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
5
|
+
const h__default = /* @__PURE__ */ _interopDefault(h$1);
|
|
6
|
+
const sep = "_sep_1ibvp_16";
|
|
7
|
+
const styles = {
|
|
8
|
+
"interval-proportions": "_interval-proportions_1ibvp_1",
|
|
9
|
+
"discourage-break": "_discourage-break_1ibvp_9",
|
|
10
|
+
sep
|
|
11
|
+
};
|
|
12
|
+
let h = h__default.default.styled(styles);
|
|
13
|
+
Object.assign(h, styles);
|
|
14
|
+
exports.default = h;
|
|
15
|
+
exports.sep = sep;
|
|
16
|
+
//# sourceMappingURL=age-range.module.sass.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"age-range.module.sass.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import h$1 from "@macrostrat/hyper";
|
|
2
|
+
const sep = "_sep_1ibvp_16";
|
|
3
|
+
const styles = {
|
|
4
|
+
"interval-proportions": "_interval-proportions_1ibvp_1",
|
|
5
|
+
"discourage-break": "_discourage-break_1ibvp_9",
|
|
6
|
+
sep
|
|
7
|
+
};
|
|
8
|
+
let h = h$1.styled(styles);
|
|
9
|
+
Object.assign(h, styles);
|
|
10
|
+
export {
|
|
11
|
+
h as default,
|
|
12
|
+
sep
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=age-range.module.sass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"age-range.module.sass.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
|
|
@@ -9,6 +9,8 @@ const dataComponents = require("@macrostrat/data-components");
|
|
|
9
9
|
const dataProvider = require("@macrostrat/data-provider");
|
|
10
10
|
const names = require("../units/names.cjs");
|
|
11
11
|
const classNames = require("classnames");
|
|
12
|
+
const ageRange = require("./age-range.cjs");
|
|
13
|
+
const utils = require("./utils.cjs");
|
|
12
14
|
const store = require("../data-provider/store.cjs");
|
|
13
15
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
14
16
|
const h__default = /* @__PURE__ */ _interopDefault(h$1);
|
|
@@ -178,7 +180,7 @@ function UnitDetailsContent({
|
|
|
178
180
|
thicknessOrHeightRange = h(dataComponents.DataField, {
|
|
179
181
|
unit: u1,
|
|
180
182
|
label,
|
|
181
|
-
value: formatRange(unit.b_pos, unit.t_pos),
|
|
183
|
+
value: utils.formatRange(unit.b_pos, unit.t_pos),
|
|
182
184
|
children: h(
|
|
183
185
|
dataComponents.Parenthetical,
|
|
184
186
|
h(dataComponents.Value, { value: thickness, unit: thicknessUnit })
|
|
@@ -213,9 +215,9 @@ function UnitDetailsContent({
|
|
|
213
215
|
lithologies,
|
|
214
216
|
features: lithologyFeatures
|
|
215
217
|
}),
|
|
216
|
-
h(AgeField, { unit }, [
|
|
217
|
-
h(dataComponents.Parenthetical, h(Duration, { value: unit.b_age - unit.t_age })),
|
|
218
|
-
h(IntervalProportions, {
|
|
218
|
+
h(ageRange.AgeField, { unit }, [
|
|
219
|
+
h(dataComponents.Parenthetical, h(ageRange.Duration, { value: unit.b_age - unit.t_age })),
|
|
220
|
+
h(ageRange.IntervalProportions, {
|
|
219
221
|
unit,
|
|
220
222
|
onClickItem
|
|
221
223
|
})
|
|
@@ -337,9 +339,17 @@ function getThickness(unit) {
|
|
|
337
339
|
_unit = "km";
|
|
338
340
|
}
|
|
339
341
|
if (minThickness == maxThickness) {
|
|
340
|
-
return [formatSignificance(minThickness), _unit];
|
|
342
|
+
return [utils.formatSignificance(minThickness), _unit];
|
|
341
343
|
}
|
|
342
|
-
return [formatRange(minThickness, maxThickness), _unit];
|
|
344
|
+
return [utils.formatRange(minThickness, maxThickness), _unit];
|
|
345
|
+
}
|
|
346
|
+
function ThicknessField({ unit, label = "Thickness" }) {
|
|
347
|
+
const [value, thicknessUnit] = getThickness(unit);
|
|
348
|
+
return h(dataComponents.DataField, {
|
|
349
|
+
label,
|
|
350
|
+
value,
|
|
351
|
+
unit: thicknessUnit
|
|
352
|
+
});
|
|
343
353
|
}
|
|
344
354
|
function BibInfo({ refs }) {
|
|
345
355
|
const refData = dataProvider.useMacrostratData("refs", refs);
|
|
@@ -369,84 +379,6 @@ function Citation({ data, tag = "p" }) {
|
|
|
369
379
|
h("span.title", data.ref)
|
|
370
380
|
]);
|
|
371
381
|
}
|
|
372
|
-
function AgeField({ unit, children }) {
|
|
373
|
-
const [b_age, t_age, _unit] = getAgeRange(unit);
|
|
374
|
-
return h(
|
|
375
|
-
dataComponents.DataField,
|
|
376
|
-
{
|
|
377
|
-
label: "Age",
|
|
378
|
-
value: formatRange(b_age, t_age),
|
|
379
|
-
unit: _unit
|
|
380
|
-
},
|
|
381
|
-
children
|
|
382
|
-
);
|
|
383
|
-
}
|
|
384
|
-
function getAgeRange(_unit) {
|
|
385
|
-
let b_age = _unit.b_age;
|
|
386
|
-
let t_age = _unit.t_age;
|
|
387
|
-
let unit = "Ma";
|
|
388
|
-
if (b_age < 0.8 && t_age < 1.2) {
|
|
389
|
-
b_age *= 1e3;
|
|
390
|
-
t_age *= 1e3;
|
|
391
|
-
unit = "ka";
|
|
392
|
-
} else if (b_age > 800 && t_age > 1200) {
|
|
393
|
-
b_age /= 1e3;
|
|
394
|
-
t_age /= 1e3;
|
|
395
|
-
unit = "Ga";
|
|
396
|
-
}
|
|
397
|
-
return [b_age, t_age, unit];
|
|
398
|
-
}
|
|
399
|
-
function getAge(value) {
|
|
400
|
-
let unit = "Ma";
|
|
401
|
-
if (value < 0.8) {
|
|
402
|
-
unit = "ka";
|
|
403
|
-
value *= 1e3;
|
|
404
|
-
if (value < 5) {
|
|
405
|
-
unit = "yr";
|
|
406
|
-
value *= 1e3;
|
|
407
|
-
}
|
|
408
|
-
} else if (value > 1e3) {
|
|
409
|
-
unit = "Ga";
|
|
410
|
-
value /= 1e3;
|
|
411
|
-
}
|
|
412
|
-
return [value, unit];
|
|
413
|
-
}
|
|
414
|
-
function AgeLabel({
|
|
415
|
-
age,
|
|
416
|
-
maximumFractionDigits = 2,
|
|
417
|
-
minimumFractionDigits = 0,
|
|
418
|
-
className
|
|
419
|
-
}) {
|
|
420
|
-
const [value, unit] = getAge(age);
|
|
421
|
-
const _value = value.toLocaleString("en-US", {
|
|
422
|
-
maximumFractionDigits,
|
|
423
|
-
minimumFractionDigits
|
|
424
|
-
});
|
|
425
|
-
return h(dataComponents.Value, { value: _value, unit, className });
|
|
426
|
-
}
|
|
427
|
-
function Duration({
|
|
428
|
-
value,
|
|
429
|
-
maximumFractionDigits = 2,
|
|
430
|
-
minimumFractionDigits = 0
|
|
431
|
-
}) {
|
|
432
|
-
let unit = "Myr";
|
|
433
|
-
if (value < 0.8) {
|
|
434
|
-
unit = "kyr";
|
|
435
|
-
value *= 1e3;
|
|
436
|
-
if (value < 5) {
|
|
437
|
-
unit = "yr";
|
|
438
|
-
value *= 1e3;
|
|
439
|
-
}
|
|
440
|
-
} else if (value > 1e3) {
|
|
441
|
-
unit = "Gyr";
|
|
442
|
-
value /= 1e3;
|
|
443
|
-
}
|
|
444
|
-
let _value = value.toLocaleString("en-US", {
|
|
445
|
-
maximumFractionDigits,
|
|
446
|
-
minimumFractionDigits
|
|
447
|
-
});
|
|
448
|
-
return h(dataComponents.Value, { value: _value, unit });
|
|
449
|
-
}
|
|
450
382
|
function enhanceEnvironments(environments, envMap) {
|
|
451
383
|
return environments?.map((env) => {
|
|
452
384
|
return {
|
|
@@ -551,99 +483,11 @@ function UnitIdentifier({
|
|
|
551
483
|
...interactionProps
|
|
552
484
|
});
|
|
553
485
|
}
|
|
554
|
-
function IntervalProportions({ unit, onClickItem }) {
|
|
555
|
-
if (unit.b_int_id == null && unit.t_int_id == null && unit.b_prop == null && unit.t_prop == null)
|
|
556
|
-
return null;
|
|
557
|
-
const i0 = unit.b_int_id;
|
|
558
|
-
const i1 = unit.t_int_id;
|
|
559
|
-
let b_prop = unit.b_prop ?? 0;
|
|
560
|
-
let t_prop = unit.t_prop ?? 1;
|
|
561
|
-
const intervalMap = dataProvider.useMacrostratDefs("intervals");
|
|
562
|
-
const int0 = intervalMap?.get(i0) ?? {};
|
|
563
|
-
const interval0 = {
|
|
564
|
-
...int0,
|
|
565
|
-
id: i0,
|
|
566
|
-
name: unit.b_int_name
|
|
567
|
-
};
|
|
568
|
-
let p0 = null;
|
|
569
|
-
const int1 = intervalMap?.get(i1) ?? {};
|
|
570
|
-
const p1 = h(Proportion, { value: t_prop });
|
|
571
|
-
if (i0 !== i1 || b_prop !== 0 || t_prop !== 1) {
|
|
572
|
-
p0 = h(Proportion, { value: b_prop });
|
|
573
|
-
}
|
|
574
|
-
if (i0 === i1 && (b_prop !== 0 || t_prop !== 1)) {
|
|
575
|
-
p0 = h("span.joint-proportion", [p0, h("span.sep", "to"), p1]);
|
|
576
|
-
}
|
|
577
|
-
const clickable = onClickItem != null;
|
|
578
|
-
const handleClick = (event) => {
|
|
579
|
-
if (onClickItem) {
|
|
580
|
-
onClickItem(event, interval0);
|
|
581
|
-
}
|
|
582
|
-
};
|
|
583
|
-
return h("div.interval-proportions", [
|
|
584
|
-
h(dataComponents.IntervalTag, {
|
|
585
|
-
className: clickable ? "clickable" : "",
|
|
586
|
-
onClick: clickable ? handleClick : void 0,
|
|
587
|
-
interval: interval0,
|
|
588
|
-
prefix: p0
|
|
589
|
-
}),
|
|
590
|
-
h.if(i0 != i1)("span.discourage-break", [
|
|
591
|
-
h("span.sep", "to"),
|
|
592
|
-
h(dataComponents.IntervalTag, {
|
|
593
|
-
className: clickable ? "clickable" : "",
|
|
594
|
-
onClick: clickable ? handleClick : void 0,
|
|
595
|
-
interval: {
|
|
596
|
-
...int1,
|
|
597
|
-
id: i1,
|
|
598
|
-
name: unit.t_int_name
|
|
599
|
-
},
|
|
600
|
-
prefix: p1
|
|
601
|
-
})
|
|
602
|
-
])
|
|
603
|
-
]);
|
|
604
|
-
}
|
|
605
|
-
const formatProportion = (d) => {
|
|
606
|
-
if (d == null) return null;
|
|
607
|
-
return d.toFixed(1);
|
|
608
|
-
};
|
|
609
|
-
function Proportion({ value }) {
|
|
610
|
-
let content = null;
|
|
611
|
-
if (value == 0) {
|
|
612
|
-
content = "base";
|
|
613
|
-
} else if (value == 1) {
|
|
614
|
-
content = "top";
|
|
615
|
-
} else {
|
|
616
|
-
content = formatProportion(value * 100) + "%";
|
|
617
|
-
}
|
|
618
|
-
return h("span.proportion", content);
|
|
619
|
-
}
|
|
620
|
-
function formatRange(min, max, precision = null) {
|
|
621
|
-
if (min == null || max == null) return null;
|
|
622
|
-
if (min === max) {
|
|
623
|
-
return min.toFixed(precision);
|
|
624
|
-
}
|
|
625
|
-
return `${formatSignificance(min, precision)}–${formatSignificance(
|
|
626
|
-
max,
|
|
627
|
-
precision
|
|
628
|
-
)}`;
|
|
629
|
-
}
|
|
630
|
-
function formatSignificance(value, precision = null) {
|
|
631
|
-
if (precision == null) {
|
|
632
|
-
return value.toLocaleString();
|
|
633
|
-
}
|
|
634
|
-
if (precision >= 0) {
|
|
635
|
-
return value.toFixed(precision);
|
|
636
|
-
}
|
|
637
|
-
if (precision < 0) {
|
|
638
|
-
return (value / Math.pow(10, -precision)).toFixed(0) + "0".repeat(-precision);
|
|
639
|
-
}
|
|
640
|
-
}
|
|
641
|
-
exports.AgeLabel = AgeLabel;
|
|
642
486
|
exports.ClickableText = ClickableText;
|
|
643
|
-
exports.Duration = Duration;
|
|
644
487
|
exports.Identifier = Identifier;
|
|
645
488
|
exports.LegendPanelHeader = LegendPanelHeader;
|
|
646
489
|
exports.ReferencesField = ReferencesField;
|
|
490
|
+
exports.ThicknessField = ThicknessField;
|
|
647
491
|
exports.UnitDetailsFeature = UnitDetailsFeature;
|
|
648
492
|
exports.UnitDetailsPanel = UnitDetailsPanel;
|
|
649
493
|
//# sourceMappingURL=panel.cjs.map
|