@macrostrat/column-views 3.2.1 → 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.
Files changed (42) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/dist/age-axis.cjs +2 -2
  3. package/dist/age-axis.cjs.map +1 -1
  4. package/dist/age-axis.js +1 -1
  5. package/dist/column-views.css +130 -125
  6. package/dist/index.cjs +15 -10
  7. package/dist/index.cjs.map +1 -1
  8. package/dist/index.js +6 -1
  9. package/dist/index.js.map +1 -1
  10. package/dist/section.cjs +2 -2
  11. package/dist/section.cjs.map +1 -1
  12. package/dist/section.js +1 -1
  13. package/dist/unit-details/age-range.cjs +153 -0
  14. package/dist/unit-details/age-range.cjs.map +1 -0
  15. package/dist/unit-details/age-range.d.ts +43 -0
  16. package/dist/unit-details/age-range.js +153 -0
  17. package/dist/unit-details/age-range.js.map +1 -0
  18. package/dist/unit-details/age-range.module.sass.cjs +16 -0
  19. package/dist/unit-details/age-range.module.sass.cjs.map +1 -0
  20. package/dist/unit-details/age-range.module.sass.js +14 -0
  21. package/dist/unit-details/age-range.module.sass.js.map +1 -0
  22. package/dist/unit-details/index.d.ts +1 -0
  23. package/dist/unit-details/panel.cjs +8 -173
  24. package/dist/unit-details/panel.cjs.map +1 -1
  25. package/dist/unit-details/panel.js +3 -168
  26. package/dist/unit-details/panel.js.map +1 -1
  27. package/dist/unit-details/panel.module.sass.cjs +20 -22
  28. package/dist/unit-details/panel.module.sass.cjs.map +1 -1
  29. package/dist/unit-details/panel.module.sass.js +20 -22
  30. package/dist/unit-details/panel.module.sass.js.map +1 -1
  31. package/dist/unit-details/utils.cjs +31 -0
  32. package/dist/unit-details/utils.cjs.map +1 -0
  33. package/dist/unit-details/utils.d.ts +3 -0
  34. package/dist/unit-details/utils.js +31 -0
  35. package/dist/unit-details/utils.js.map +1 -0
  36. package/package.json +3 -3
  37. package/src/unit-details/age-range.module.sass +15 -0
  38. package/src/unit-details/age-range.ts +191 -0
  39. package/src/unit-details/index.ts +1 -0
  40. package/src/unit-details/panel.module.sass +0 -9
  41. package/src/unit-details/panel.ts +12 -226
  42. 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":";;;;;;AAWO,SAAS,SAAS,EAAE,MAAM,YAAY;AAC3C,QAAM,CAAC,OAAO,OAAO,KAAK,IAAI,YAAY,IAAI;AAE9C,SAAOA,gBAAAA;AAAAA,IACLC,eAAAA;AAAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAOC,MAAAA,YAAY,OAAO,KAAK;AAAA,MAC/B,MAAM;AAAA,IAAA;AAAA,IAER;AAAA,EAAA;AAEJ;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;AAEO,SAAS,oBAAoB,EAAE,MAAM,eAAe;AAEzD,MACE,KAAK,YAAY,QACjB,KAAK,YAAY,QACjB,KAAK,UAAU,QACf,KAAK,UAAU;AAEf,WAAO;AAET,QAAM,KAAK,KAAK;AAChB,QAAM,KAAK,KAAK;AAChB,MAAI,SAAS,KAAK,UAAU;AAC5B,MAAI,SAAS,KAAK,UAAU;AAE5B,QAAM,cAAcC,aAAAA,kBAAkB,WAAW;AACjD,QAAM,OAAO,aAAa,IAAI,EAAE,KAAK,CAAA;AAErC,QAAM,YAA2B;AAAA,IAC/B,GAAG;AAAA,IACH,IAAI;AAAA,IACJ,MAAM,KAAK;AAAA,EAAA;AAGb,MAAI,KAAU;AACd,QAAM,OAAO,aAAa,IAAI,EAAE,KAAK,CAAA;AACrC,QAAM,KAAUJ,gBAAAA,QAAE,YAAY,EAAE,OAAO,QAAQ;AAE/C,MAAI,OAAO,MAAM,WAAW,KAAK,WAAW,GAAG;AAE7C,SAAKA,gBAAAA,QAAE,YAAY,EAAE,OAAO,QAAQ;AAAA,EACtC;AAEA,MAAI,OAAO,OAAO,WAAW,KAAK,WAAW,IAAI;AAC/C,SAAKA,gBAAAA,QAAE,yBAAyB,CAAC,IAAI,KAAKA,wBAAE,YAAY,IAAI,GAAG,KAAK,EAAE,CAAC;AAAA,EACzE;AAEA,QAAM,YAAY,eAAe;AAEjC,QAAM,cAAc,CAAC,UAAsB;AACzC,QAAI,aAAa;AACf,kBAAY,OAAO,SAAS;AAAA,IAC9B;AAAA,EACF;AAEA,SAAOA,gBAAAA,QAAEK,eAAAA,UAAU,EAAE,WAAW,0BAA0B;AAAA,IACxDL,gBAAAA,QAAEM,eAAAA,aAAa;AAAA,MACb,WAAW,YAAY,cAAc;AAAA,MACrC,SAAS,YAAY,cAAc;AAAA,MACnC,UAAU;AAAA,MACV,QAAQ;AAAA,IAAA,CACT;AAAA,IACDN,gBAAAA,QAAE,GAAG,MAAM,EAAE,EAAE,yBAAyB;AAAA,MACtCA,gBAAAA,QAAE,YAAY,MAAM;AAAA,MACpBA,gBAAAA,QAAEM,eAAAA,aAAa;AAAA,QACb,WAAW,YAAY,cAAc;AAAA,QACrC,SAAS,YAAY,cAAc;AAAA,QACnC,UAAU;AAAA,UACR,GAAG;AAAA,UACH,IAAI;AAAA,UACJ,MAAM,KAAK;AAAA,QAAA;AAAA,QAEb,QAAQ;AAAA,MAAA,CACT;AAAA,IAAA,CACF;AAAA,EAAA,CACF;AACH;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,SAAOP,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;;;;;;;"}
@@ -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":";;;;;;;;;"}
@@ -1,3 +1,4 @@
1
1
  export * from './panel';
2
2
  export * from './popover';
3
3
  export * from './modal-panel';
4
+ export * from './age-range';
@@ -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,9 @@ 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];
343
345
  }
344
346
  function ThicknessField({ unit, label = "Thickness" }) {
345
347
  const [value, thicknessUnit] = getThickness(unit);
@@ -377,84 +379,6 @@ function Citation({ data, tag = "p" }) {
377
379
  h("span.title", data.ref)
378
380
  ]);
379
381
  }
380
- function AgeField({ unit, children }) {
381
- const [b_age, t_age, _unit] = getAgeRange(unit);
382
- return h(
383
- dataComponents.DataField,
384
- {
385
- label: "Age",
386
- value: formatRange(b_age, t_age),
387
- unit: _unit
388
- },
389
- children
390
- );
391
- }
392
- function getAgeRange(_unit) {
393
- let b_age = _unit.b_age;
394
- let t_age = _unit.t_age;
395
- let unit = "Ma";
396
- if (b_age < 0.8 && t_age < 1.2) {
397
- b_age *= 1e3;
398
- t_age *= 1e3;
399
- unit = "ka";
400
- } else if (b_age > 800 && t_age > 1200) {
401
- b_age /= 1e3;
402
- t_age /= 1e3;
403
- unit = "Ga";
404
- }
405
- return [b_age, t_age, unit];
406
- }
407
- function getAge(value) {
408
- let unit = "Ma";
409
- if (value < 0.8) {
410
- unit = "ka";
411
- value *= 1e3;
412
- if (value < 5) {
413
- unit = "yr";
414
- value *= 1e3;
415
- }
416
- } else if (value > 1e3) {
417
- unit = "Ga";
418
- value /= 1e3;
419
- }
420
- return [value, unit];
421
- }
422
- function AgeLabel({
423
- age,
424
- maximumFractionDigits = 2,
425
- minimumFractionDigits = 0,
426
- className
427
- }) {
428
- const [value, unit] = getAge(age);
429
- const _value = value.toLocaleString("en-US", {
430
- maximumFractionDigits,
431
- minimumFractionDigits
432
- });
433
- return h(dataComponents.Value, { value: _value, unit, className });
434
- }
435
- function Duration({
436
- value,
437
- maximumFractionDigits = 2,
438
- minimumFractionDigits = 0
439
- }) {
440
- let unit = "Myr";
441
- if (value < 0.8) {
442
- unit = "kyr";
443
- value *= 1e3;
444
- if (value < 5) {
445
- unit = "yr";
446
- value *= 1e3;
447
- }
448
- } else if (value > 1e3) {
449
- unit = "Gyr";
450
- value /= 1e3;
451
- }
452
- let _value = value.toLocaleString("en-US", {
453
- maximumFractionDigits,
454
- minimumFractionDigits
455
- });
456
- return h(dataComponents.Value, { value: _value, unit });
457
- }
458
382
  function enhanceEnvironments(environments, envMap) {
459
383
  return environments?.map((env) => {
460
384
  return {
@@ -559,96 +483,7 @@ function UnitIdentifier({
559
483
  ...interactionProps
560
484
  });
561
485
  }
562
- function IntervalProportions({ unit, onClickItem }) {
563
- if (unit.b_int_id == null && unit.t_int_id == null && unit.b_prop == null && unit.t_prop == null)
564
- return null;
565
- const i0 = unit.b_int_id;
566
- const i1 = unit.t_int_id;
567
- let b_prop = unit.b_prop ?? 0;
568
- let t_prop = unit.t_prop ?? 1;
569
- const intervalMap = dataProvider.useMacrostratDefs("intervals");
570
- const int0 = intervalMap?.get(i0) ?? {};
571
- const interval0 = {
572
- ...int0,
573
- id: i0,
574
- name: unit.b_int_name
575
- };
576
- let p0 = null;
577
- const int1 = intervalMap?.get(i1) ?? {};
578
- const p1 = h(Proportion, { value: t_prop });
579
- if (i0 !== i1 || b_prop !== 0 || t_prop !== 1) {
580
- p0 = h(Proportion, { value: b_prop });
581
- }
582
- if (i0 === i1 && (b_prop !== 0 || t_prop !== 1)) {
583
- p0 = h("span.joint-proportion", [p0, h("span.sep", "to"), p1]);
584
- }
585
- const clickable = onClickItem != null;
586
- const handleClick = (event) => {
587
- if (onClickItem) {
588
- onClickItem(event, interval0);
589
- }
590
- };
591
- return h("div.interval-proportions", [
592
- h(dataComponents.IntervalTag, {
593
- className: clickable ? "clickable" : "",
594
- onClick: clickable ? handleClick : void 0,
595
- interval: interval0,
596
- prefix: p0
597
- }),
598
- h.if(i0 != i1)("span.discourage-break", [
599
- h("span.sep", "to"),
600
- h(dataComponents.IntervalTag, {
601
- className: clickable ? "clickable" : "",
602
- onClick: clickable ? handleClick : void 0,
603
- interval: {
604
- ...int1,
605
- id: i1,
606
- name: unit.t_int_name
607
- },
608
- prefix: p1
609
- })
610
- ])
611
- ]);
612
- }
613
- const formatProportion = (d) => {
614
- if (d == null) return null;
615
- return d.toFixed(1);
616
- };
617
- function Proportion({ value }) {
618
- let content = null;
619
- if (value == 0) {
620
- content = "base";
621
- } else if (value == 1) {
622
- content = "top";
623
- } else {
624
- content = formatProportion(value * 100) + "%";
625
- }
626
- return h("span.proportion", content);
627
- }
628
- function formatRange(min, max, precision = null) {
629
- if (min == null || max == null) return null;
630
- if (min === max) {
631
- return min.toFixed(precision);
632
- }
633
- return `${formatSignificance(min, precision)}–${formatSignificance(
634
- max,
635
- precision
636
- )}`;
637
- }
638
- function formatSignificance(value, precision = null) {
639
- if (precision == null) {
640
- return value.toLocaleString();
641
- }
642
- if (precision >= 0) {
643
- return value.toFixed(precision);
644
- }
645
- if (precision < 0) {
646
- return (value / Math.pow(10, -precision)).toFixed(0) + "0".repeat(-precision);
647
- }
648
- }
649
- exports.AgeLabel = AgeLabel;
650
486
  exports.ClickableText = ClickableText;
651
- exports.Duration = Duration;
652
487
  exports.Identifier = Identifier;
653
488
  exports.LegendPanelHeader = LegendPanelHeader;
654
489
  exports.ReferencesField = ReferencesField;