react-cheminfo 0.47.0 → 0.48.0
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/README.md +69 -0
- package/lib/core.d.ts +1 -0
- package/lib/core.d.ts.map +1 -1
- package/lib/core.js +1 -0
- package/lib/core.js.map +1 -1
- package/lib/download/core/cssPaint.d.ts +27 -0
- package/lib/download/core/cssPaint.d.ts.map +1 -0
- package/lib/download/core/cssPaint.js +63 -0
- package/lib/download/core/cssPaint.js.map +1 -0
- package/lib/download/core/drawingMarkup.d.ts +11 -0
- package/lib/download/core/drawingMarkup.d.ts.map +1 -0
- package/lib/download/core/drawingMarkup.js +32 -0
- package/lib/download/core/drawingMarkup.js.map +1 -0
- package/lib/download/core/figureHtml.d.ts +25 -0
- package/lib/download/core/figureHtml.d.ts.map +1 -0
- package/lib/download/core/figureHtml.js +174 -0
- package/lib/download/core/figureHtml.js.map +1 -0
- package/lib/download/core/figureHtmlMarkup.d.ts +107 -0
- package/lib/download/core/figureHtmlMarkup.d.ts.map +1 -0
- package/lib/download/core/figureHtmlMarkup.js +75 -0
- package/lib/download/core/figureHtmlMarkup.js.map +1 -0
- package/lib/download/core/figureSvg.d.ts.map +1 -1
- package/lib/download/core/figureSvg.js +16 -35
- package/lib/download/core/figureSvg.js.map +1 -1
- package/lib/download/core/figureSvgDocument.d.ts +3 -3
- package/lib/download/core/figureSvgDocument.d.ts.map +1 -1
- package/lib/download/core/figureTarget.d.ts +14 -3
- package/lib/download/core/figureTarget.d.ts.map +1 -1
- package/lib/download/core/figureTarget.js +42 -3
- package/lib/download/core/figureTarget.js.map +1 -1
- package/lib/download/core/index.d.ts +1 -1
- package/lib/download/core/index.d.ts.map +1 -1
- package/lib/download/core/index.js +1 -1
- package/lib/download/core/index.js.map +1 -1
- package/lib/download/core/textLines.d.ts +27 -0
- package/lib/download/core/textLines.d.ts.map +1 -0
- package/lib/download/core/textLines.js +51 -0
- package/lib/download/core/textLines.js.map +1 -0
- package/lib/ecosystem/core/lookup.d.ts +2 -1
- package/lib/ecosystem/core/lookup.d.ts.map +1 -1
- package/lib/ecosystem/core/lookup.js +10 -3
- package/lib/ecosystem/core/lookup.js.map +1 -1
- package/lib/ecosystem/core/types.d.ts +2 -2
- package/lib/ecosystem/core/types.d.ts.map +1 -1
- package/lib/ecosystem/core/unlistedSites.d.ts +9 -0
- package/lib/ecosystem/core/unlistedSites.d.ts.map +1 -0
- package/lib/ecosystem/core/unlistedSites.js +35 -0
- package/lib/ecosystem/core/unlistedSites.js.map +1 -0
- package/lib/ecosystem/ui/glyphs.d.ts.map +1 -1
- package/lib/ecosystem/ui/glyphs.js +7 -0
- package/lib/ecosystem/ui/glyphs.js.map +1 -1
- package/lib/i18n/core/chromeCatalog.d.ts +1 -1
- package/lib/i18n/core/chromeCatalog.d.ts.map +1 -1
- package/lib/locales/de.json +55 -1
- package/lib/locales/en.json +55 -1
- package/lib/locales/es.json +55 -1
- package/lib/locales/fr.json +55 -1
- package/lib/locales/it.json +55 -1
- package/lib/periodic/ui/PeriodicTable.d.ts +3 -107
- package/lib/periodic/ui/PeriodicTable.d.ts.map +1 -1
- package/lib/periodic/ui/PeriodicTable.js +5 -82
- package/lib/periodic/ui/PeriodicTable.js.map +1 -1
- package/lib/periodic/ui/PeriodicTableChrome.d.ts.map +1 -1
- package/lib/periodic/ui/PeriodicTableChrome.js +3 -25
- package/lib/periodic/ui/PeriodicTableChrome.js.map +1 -1
- package/lib/periodic/ui/SelectAllCorner.d.ts +23 -0
- package/lib/periodic/ui/SelectAllCorner.d.ts.map +1 -0
- package/lib/periodic/ui/SelectAllCorner.js +40 -0
- package/lib/periodic/ui/SelectAllCorner.js.map +1 -0
- package/lib/periodic/ui/headerStyles.d.ts +17 -0
- package/lib/periodic/ui/headerStyles.d.ts.map +1 -0
- package/lib/periodic/ui/headerStyles.js +19 -0
- package/lib/periodic/ui/headerStyles.js.map +1 -0
- package/lib/periodic/ui/periodicTableProps.d.ts +115 -0
- package/lib/periodic/ui/periodicTableProps.d.ts.map +1 -0
- package/lib/periodic/ui/periodicTableProps.js +8 -0
- package/lib/periodic/ui/periodicTableProps.js.map +1 -0
- package/lib/periodic/ui/tableLayout.d.ts +26 -0
- package/lib/periodic/ui/tableLayout.d.ts.map +1 -0
- package/lib/periodic/ui/tableLayout.js +86 -0
- package/lib/periodic/ui/tableLayout.js.map +1 -0
- package/lib/split/ui/SplitColumn.d.ts +0 -1
- package/lib/split/ui/SplitColumn.d.ts.map +1 -1
- package/lib/split/ui/SplitColumn.js +0 -1
- package/lib/split/ui/SplitColumn.js.map +1 -1
- package/lib/split/ui/SplitRow.d.ts +0 -1
- package/lib/split/ui/SplitRow.d.ts.map +1 -1
- package/lib/split/ui/SplitRow.js +0 -1
- package/lib/split/ui/SplitRow.js.map +1 -1
- package/lib/split/ui/splitPanes.d.ts +12 -1
- package/lib/split/ui/splitPanes.d.ts.map +1 -1
- package/lib/split/ui/splitPanes.js +1 -4
- package/lib/split/ui/splitPanes.js.map +1 -1
- package/lib/taxonomy/core/index.d.ts +8 -0
- package/lib/taxonomy/core/index.d.ts.map +1 -0
- package/lib/taxonomy/core/index.js +5 -0
- package/lib/taxonomy/core/index.js.map +1 -0
- package/lib/taxonomy/core/lineage.d.ts +83 -0
- package/lib/taxonomy/core/lineage.d.ts.map +1 -0
- package/lib/taxonomy/core/lineage.js +126 -0
- package/lib/taxonomy/core/lineage.js.map +1 -0
- package/lib/taxonomy/core/ncbi.d.ts +8 -0
- package/lib/taxonomy/core/ncbi.d.ts.map +1 -0
- package/lib/taxonomy/core/ncbi.js +10 -0
- package/lib/taxonomy/core/ncbi.js.map +1 -0
- package/lib/taxonomy/core/organismName.d.ts +28 -0
- package/lib/taxonomy/core/organismName.d.ts.map +1 -0
- package/lib/taxonomy/core/organismName.js +188 -0
- package/lib/taxonomy/core/organismName.js.map +1 -0
- package/lib/taxonomy/core/organismWords.d.ts +20 -0
- package/lib/taxonomy/core/organismWords.d.ts.map +1 -0
- package/lib/taxonomy/core/organismWords.js +86 -0
- package/lib/taxonomy/core/organismWords.js.map +1 -0
- package/lib/taxonomy/core/ranks.d.ts +51 -0
- package/lib/taxonomy/core/ranks.d.ts.map +1 -0
- package/lib/taxonomy/core/ranks.js +123 -0
- package/lib/taxonomy/core/ranks.js.map +1 -0
- package/lib/taxonomy/ui/OrganismName.d.ts +28 -0
- package/lib/taxonomy/ui/OrganismName.d.ts.map +1 -0
- package/lib/taxonomy/ui/OrganismName.js +28 -0
- package/lib/taxonomy/ui/OrganismName.js.map +1 -0
- package/lib/taxonomy/ui/TaxonLineage.d.ts +67 -0
- package/lib/taxonomy/ui/TaxonLineage.d.ts.map +1 -0
- package/lib/taxonomy/ui/TaxonLineage.js +45 -0
- package/lib/taxonomy/ui/TaxonLineage.js.map +1 -0
- package/lib/taxonomy/ui/index.d.ts +6 -0
- package/lib/taxonomy/ui/index.d.ts.map +1 -0
- package/lib/taxonomy/ui/index.js +4 -0
- package/lib/taxonomy/ui/index.js.map +1 -0
- package/lib/taxonomy/ui/rankLabel.d.ts +17 -0
- package/lib/taxonomy/ui/rankLabel.d.ts.map +1 -0
- package/lib/taxonomy/ui/rankLabel.js +77 -0
- package/lib/taxonomy/ui/rankLabel.js.map +1 -0
- package/lib/ui.d.ts +1 -0
- package/lib/ui.d.ts.map +1 -1
- package/lib/ui.js +1 -0
- package/lib/ui.js.map +1 -1
- package/package.json +1 -1
- package/src/core.ts +1 -0
- package/src/download/core/cssPaint.ts +71 -0
- package/src/download/core/drawingMarkup.ts +35 -0
- package/src/download/core/figureHtml.ts +214 -0
- package/src/download/core/figureHtmlMarkup.ts +187 -0
- package/src/download/core/figureSvg.ts +17 -38
- package/src/download/core/figureSvgDocument.ts +3 -3
- package/src/download/core/figureTarget.ts +41 -8
- package/src/download/core/index.ts +1 -0
- package/src/download/core/textLines.ts +67 -0
- package/src/ecosystem/core/lookup.ts +11 -3
- package/src/ecosystem/core/types.ts +4 -2
- package/src/ecosystem/core/unlistedSites.ts +37 -0
- package/src/ecosystem/ui/glyphs.tsx +44 -0
- package/src/locales/de.json +55 -1
- package/src/locales/en.json +55 -1
- package/src/locales/es.json +55 -1
- package/src/locales/fr.json +55 -1
- package/src/locales/it.json +55 -1
- package/src/periodic/ui/PeriodicTable.tsx +16 -204
- package/src/periodic/ui/PeriodicTableChrome.tsx +3 -24
- package/src/periodic/ui/SelectAllCorner.tsx +65 -0
- package/src/periodic/ui/headerStyles.ts +23 -0
- package/src/periodic/ui/periodicTableProps.ts +117 -0
- package/src/periodic/ui/tableLayout.ts +96 -0
- package/src/split/ui/SplitColumn.tsx +0 -1
- package/src/split/ui/SplitRow.tsx +0 -1
- package/src/split/ui/splitPanes.tsx +21 -5
- package/src/taxonomy/core/index.ts +20 -0
- package/src/taxonomy/core/lineage.ts +161 -0
- package/src/taxonomy/core/ncbi.ts +9 -0
- package/src/taxonomy/core/organismName.ts +217 -0
- package/src/taxonomy/core/organismWords.ts +86 -0
- package/src/taxonomy/core/ranks.ts +134 -0
- package/src/taxonomy/ui/OrganismName.tsx +59 -0
- package/src/taxonomy/ui/TaxonLineage.tsx +183 -0
- package/src/taxonomy/ui/index.ts +5 -0
- package/src/taxonomy/ui/rankLabel.ts +81 -0
- package/src/ui.ts +1 -0
- package/styles/chrome.css +135 -6
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which parts of an organism's name nomenclature sets in italics.
|
|
3
|
+
*
|
|
4
|
+
* The genus, the species epithet and an infraspecific epithet are italic; the
|
|
5
|
+
* authority, a strain, `sp.`, a cultivar and the words announcing a rank
|
|
6
|
+
* (`subsp.`, `var.`, `f.`) are upright. Names arrive the way their source wrote
|
|
7
|
+
* them — "Catharanthus roseus (L.) G. Don", "Streptomyces sp. CHQ-64",
|
|
8
|
+
* "Isodon Shikokiana Var. Occidentalis" — so this reads them by their shape,
|
|
9
|
+
* and a name it cannot place is left upright rather than guessed at.
|
|
10
|
+
*/
|
|
11
|
+
import { BEFORE_EPITHET, CANDIDATUS, HYBRID, NOT_EPITHET, NOT_GENUS, RANK_MARKERS, UNNAMED, } from "./organismWords.js";
|
|
12
|
+
const CONSORTIUM = /(?<plus>\s+\+\s+)/;
|
|
13
|
+
const VIRUS = /\b(?:virus|viruses|phage|bacteriophage|viroid|satellite)\b/i;
|
|
14
|
+
const SEPARATOR = /^[\s_]+$/;
|
|
15
|
+
const TRAILING_MARK = /^(?<word>.+?)(?<mark>[,;]+)$/;
|
|
16
|
+
const GENUS = /^[A-Z][a-z]+$/;
|
|
17
|
+
const ABBREVIATED_GENUS = /^[A-Z]\.$/;
|
|
18
|
+
// A family, a subfamily or a tribe written where a genus would stand:
|
|
19
|
+
// -aceae, -oideae and -eae in botany, -idae in zoology. No genus ends so.
|
|
20
|
+
const FAMILY = /(?:eae|idae)$/;
|
|
21
|
+
const BRACKETED_GENUS = /^\[(?<genus>[A-Z][a-z]+)\]$/;
|
|
22
|
+
const JOINED_MARKER = /^(?<marker>subsp\.|ssp\.|var\.|f\.|pv\.)(?<epithet>[a-z][a-z-]+)$/i;
|
|
23
|
+
const EPITHET = /^[a-zß-öø-ÿ][a-zß-öø-ÿ-]+$/;
|
|
24
|
+
const CAPITALISED_EPITHET = /^[A-Z][a-zß-öø-ÿ-]+$/;
|
|
25
|
+
const STARTS_WITH_LETTER = /^\p{L}/u;
|
|
26
|
+
const STARTS_UPPERCASE = /^\p{Lu}/u;
|
|
27
|
+
/**
|
|
28
|
+
* The runs of an organism's name, each set upright or in italics.
|
|
29
|
+
*
|
|
30
|
+
* Joined together, the runs give back the name exactly. A consortium written
|
|
31
|
+
* `A + B` is read as two names; a virus, and anything that does not open with
|
|
32
|
+
* a genus, is one upright run.
|
|
33
|
+
* @param name - The name, as its source writes it.
|
|
34
|
+
* @returns The runs, consecutive runs never set the same way.
|
|
35
|
+
*/
|
|
36
|
+
export function splitOrganismName(name) {
|
|
37
|
+
if (name === '')
|
|
38
|
+
return [];
|
|
39
|
+
if (VIRUS.test(name))
|
|
40
|
+
return [{ text: name, italic: false }];
|
|
41
|
+
const pieces = [];
|
|
42
|
+
for (const segment of name.split(CONSORTIUM)) {
|
|
43
|
+
if (CONSORTIUM.test(segment)) {
|
|
44
|
+
pieces.push({ text: segment, word: false, italic: false });
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
pieces.push(...styledPieces(segment));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return mergedRuns(pieces);
|
|
51
|
+
}
|
|
52
|
+
function styledPieces(text) {
|
|
53
|
+
const pieces = tokenize(text);
|
|
54
|
+
const words = pieces.filter((piece) => piece.word);
|
|
55
|
+
styleWords(words);
|
|
56
|
+
for (let index = 0; index < pieces.length; index++) {
|
|
57
|
+
const piece = pieces[index];
|
|
58
|
+
if (piece.word)
|
|
59
|
+
continue;
|
|
60
|
+
piece.italic =
|
|
61
|
+
pieces[index - 1]?.italic === true && pieces[index + 1]?.italic === true;
|
|
62
|
+
}
|
|
63
|
+
return pieces;
|
|
64
|
+
}
|
|
65
|
+
function tokenize(text) {
|
|
66
|
+
const pieces = [];
|
|
67
|
+
for (const chunk of text.split(/(?<gap>[\s_]+)/)) {
|
|
68
|
+
if (chunk === '')
|
|
69
|
+
continue;
|
|
70
|
+
if (SEPARATOR.test(chunk)) {
|
|
71
|
+
pieces.push({ text: chunk, word: false, italic: false });
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
// A comma or a semicolon closing a word is punctuation, not part of it.
|
|
75
|
+
const { word: bare = chunk, mark } = TRAILING_MARK.exec(chunk)?.groups ?? {};
|
|
76
|
+
const joined = JOINED_MARKER.exec(bare)?.groups;
|
|
77
|
+
const bracketed = BRACKETED_GENUS.exec(bare)?.groups;
|
|
78
|
+
const words = joined !== undefined
|
|
79
|
+
? [joined.marker, joined.epithet]
|
|
80
|
+
: bracketed !== undefined
|
|
81
|
+
? ['[', bracketed.genus, ']']
|
|
82
|
+
: [bare];
|
|
83
|
+
for (const word of words) {
|
|
84
|
+
pieces.push({ text: word ?? '', word: true, italic: false });
|
|
85
|
+
}
|
|
86
|
+
if (mark !== undefined) {
|
|
87
|
+
pieces.push({ text: mark, word: false, italic: false });
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return pieces;
|
|
91
|
+
}
|
|
92
|
+
function styleWords(words) {
|
|
93
|
+
let index = words[0]?.text === '×' ? 1 : 0;
|
|
94
|
+
const first = words[index];
|
|
95
|
+
if (first === undefined)
|
|
96
|
+
return;
|
|
97
|
+
if (CANDIDATUS.has(first.text)) {
|
|
98
|
+
first.italic = true;
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
let genus;
|
|
102
|
+
if (first.text === '[' && words[index + 2]?.text === ']') {
|
|
103
|
+
genus = words[index + 1];
|
|
104
|
+
index += 3;
|
|
105
|
+
}
|
|
106
|
+
else if (GENUS.test(first.text) || ABBREVIATED_GENUS.test(first.text)) {
|
|
107
|
+
genus = first;
|
|
108
|
+
index += 1;
|
|
109
|
+
}
|
|
110
|
+
if (genus === undefined ||
|
|
111
|
+
NOT_GENUS.has(genus.text.toLowerCase()) ||
|
|
112
|
+
FAMILY.test(genus.text)) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
genus.italic = true;
|
|
116
|
+
const titleCase = isTitleCase(words);
|
|
117
|
+
const next = words[index]?.text;
|
|
118
|
+
if (next === undefined || UNNAMED.has(next.toLowerCase()))
|
|
119
|
+
return;
|
|
120
|
+
let announced = false;
|
|
121
|
+
if (HYBRID.has(next) || BEFORE_EPITHET.has(next.toLowerCase())) {
|
|
122
|
+
index += 1;
|
|
123
|
+
announced = true;
|
|
124
|
+
}
|
|
125
|
+
if (isEpithet(words[index], titleCase || announced)) {
|
|
126
|
+
words[index].italic = true;
|
|
127
|
+
index += 1;
|
|
128
|
+
// A zoological trinomial names its subspecies with no word announcing it.
|
|
129
|
+
if (isEpithet(words[index], false)) {
|
|
130
|
+
words[index].italic = true;
|
|
131
|
+
index += 1;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
for (; index < words.length; index++) {
|
|
135
|
+
const word = words[index].text;
|
|
136
|
+
const marks = RANK_MARKERS.has(word.toLowerCase()) || HYBRID.has(word);
|
|
137
|
+
if (marks && isEpithet(words[index + 1], true)) {
|
|
138
|
+
words[index + 1].italic = true;
|
|
139
|
+
index += 1;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
function isEpithet(word, capitalised) {
|
|
144
|
+
if (word === undefined)
|
|
145
|
+
return false;
|
|
146
|
+
const lower = word.text.toLowerCase();
|
|
147
|
+
if (NOT_EPITHET.has(lower) ||
|
|
148
|
+
UNNAMED.has(lower) ||
|
|
149
|
+
RANK_MARKERS.has(lower) ||
|
|
150
|
+
HYBRID.has(word.text)) {
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
return (EPITHET.test(word.text) ||
|
|
154
|
+
(capitalised && CAPITALISED_EPITHET.test(word.text)));
|
|
155
|
+
}
|
|
156
|
+
// A source that capitalises every word ("Agave Americana") still means a
|
|
157
|
+
// binomial; the words announcing a rank are left out of the count.
|
|
158
|
+
function isTitleCase(words) {
|
|
159
|
+
let lettered = 0;
|
|
160
|
+
for (const { text } of words) {
|
|
161
|
+
const lower = text.toLowerCase();
|
|
162
|
+
if (RANK_MARKERS.has(lower) || UNNAMED.has(lower) || HYBRID.has(text)) {
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
if (!STARTS_WITH_LETTER.test(text))
|
|
166
|
+
continue;
|
|
167
|
+
if (!STARTS_UPPERCASE.test(text))
|
|
168
|
+
return false;
|
|
169
|
+
lettered += 1;
|
|
170
|
+
}
|
|
171
|
+
return lettered >= 2;
|
|
172
|
+
}
|
|
173
|
+
function mergedRuns(pieces) {
|
|
174
|
+
const runs = [];
|
|
175
|
+
for (const piece of pieces) {
|
|
176
|
+
if (piece.text === '')
|
|
177
|
+
continue;
|
|
178
|
+
const last = runs.at(-1);
|
|
179
|
+
if (last?.italic === piece.italic) {
|
|
180
|
+
last.text += piece.text;
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
runs.push({ text: piece.text, italic: piece.italic });
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return runs;
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=organismName.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organismName.js","sourceRoot":"","sources":["../../../src/taxonomy/core/organismName.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,cAAc,EACd,UAAU,EACV,MAAM,EACN,WAAW,EACX,SAAS,EACT,YAAY,EACZ,OAAO,GACR,MAAM,oBAAoB,CAAC;AAgB5B,MAAM,UAAU,GAAG,mBAAmB,CAAC;AACvC,MAAM,KAAK,GAAG,6DAA6D,CAAC;AAC5E,MAAM,SAAS,GAAG,UAAU,CAAC;AAC7B,MAAM,aAAa,GAAG,8BAA8B,CAAC;AACrD,MAAM,KAAK,GAAG,eAAe,CAAC;AAC9B,MAAM,iBAAiB,GAAG,WAAW,CAAC;AACtC,sEAAsE;AACtE,0EAA0E;AAC1E,MAAM,MAAM,GAAG,eAAe,CAAC;AAC/B,MAAM,eAAe,GAAG,6BAA6B,CAAC;AACtD,MAAM,aAAa,GACjB,oEAAoE,CAAC;AACvE,MAAM,OAAO,GAAG,4BAA4B,CAAC;AAC7C,MAAM,mBAAmB,GAAG,sBAAsB,CAAC;AACnD,MAAM,kBAAkB,GAAG,SAAS,CAAC;AACrC,MAAM,gBAAgB,GAAG,UAAU,CAAC;AAEpC;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IAC3B,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7C,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnD,UAAU,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAU,CAAC;QACrC,IAAI,KAAK,CAAC,IAAI;YAAE,SAAS;QACzB,KAAK,CAAC,MAAM;YACV,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7E,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACjD,IAAI,KAAK,KAAK,EAAE;YAAE,SAAS;QAC3B,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YACzD,SAAS;QACX,CAAC;QACD,wEAAwE;QACxE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,IAAI,EAAE,GAChC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAChD,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QACrD,MAAM,KAAK,GACT,MAAM,KAAK,SAAS;YAClB,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC;YACjC,CAAC,CAAC,SAAS,KAAK,SAAS;gBACvB,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC;gBAC7B,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO;IAChC,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;QACpB,OAAO;IACT,CAAC;IAED,IAAI,KAAwB,CAAC;IAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC;QACzD,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACzB,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACxE,KAAK,GAAG,KAAK,CAAC;QACd,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IACD,IACE,KAAK,KAAK,SAAS;QACnB,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EACvB,CAAC;QACD,OAAO;IACT,CAAC;IACD,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;IAEpB,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;IAChC,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAAE,OAAO;IAClE,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QAC/D,KAAK,IAAI,CAAC,CAAC;QACX,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;IACD,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,SAAS,IAAI,SAAS,CAAC,EAAE,CAAC;QACnD,KAAK,CAAC,KAAK,CAAW,CAAC,MAAM,GAAG,IAAI,CAAC;QACtC,KAAK,IAAI,CAAC,CAAC;QACX,0EAA0E;QAC1E,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;YAClC,KAAK,CAAC,KAAK,CAAW,CAAC,MAAM,GAAG,IAAI,CAAC;YACtC,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IAED,OAAO,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAI,KAAK,CAAC,KAAK,CAAW,CAAC,IAAI,CAAC;QAC1C,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvE,IAAI,KAAK,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;YAC9C,KAAK,CAAC,KAAK,GAAG,CAAC,CAAW,CAAC,MAAM,GAAG,IAAI,CAAC;YAC1C,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAuB,EAAE,WAAoB;IAC9D,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IACtC,IACE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QAClB,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EACrB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CACL,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QACvB,CAAC,WAAW,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CACrD,CAAC;AACJ,CAAC;AAED,yEAAyE;AACzE,mEAAmE;AACnE,SAAS,WAAW,CAAC,KAAuB;IAC1C,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACtE,SAAS;QACX,CAAC;QACD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAC7C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAC/C,QAAQ,IAAI,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,QAAQ,IAAI,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,UAAU,CAAC,MAAwB;IAC1C,MAAM,IAAI,GAAuB,EAAE,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,EAAE;YAAE,SAAS;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The words an organism's name is read by: the signs and abbreviations that
|
|
3
|
+
* announce a rank or qualify a name, and the ordinary words a source writes
|
|
4
|
+
* where a genus or an epithet would stand.
|
|
5
|
+
*/
|
|
6
|
+
/** The hybrid sign, and the letters written for it. */
|
|
7
|
+
export declare const HYBRID: Set<string>;
|
|
8
|
+
/** The word that opens a provisional bacterial name; it alone is italic. */
|
|
9
|
+
export declare const CANDIDATUS: Set<string>;
|
|
10
|
+
/** Qualifiers set before the epithet they qualify, in lower case. */
|
|
11
|
+
export declare const BEFORE_EPITHET: Set<string>;
|
|
12
|
+
/** An unnamed species of the genus, in lower case. */
|
|
13
|
+
export declare const UNNAMED: Set<string>;
|
|
14
|
+
/** The abbreviations announcing a lower-rank epithet, in lower case. */
|
|
15
|
+
export declare const RANK_MARKERS: Set<string>;
|
|
16
|
+
/** Words that open a description rather than a binomial, in lower case. */
|
|
17
|
+
export declare const NOT_GENUS: Set<string>;
|
|
18
|
+
/** Lower-case words that follow a binomial without being an epithet. */
|
|
19
|
+
export declare const NOT_EPITHET: Set<string>;
|
|
20
|
+
//# sourceMappingURL=organismWords.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organismWords.d.ts","sourceRoot":"","sources":["../../../src/taxonomy/core/organismWords.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,uDAAuD;AACvD,eAAO,MAAM,MAAM,aAA2B,CAAC;AAC/C,4EAA4E;AAC5E,eAAO,MAAM,UAAU,aAAiC,CAAC;AACzD,qEAAqE;AACrE,eAAO,MAAM,cAAc,aAA+C,CAAC;AAC3E,sDAAsD;AACtD,eAAO,MAAM,OAAO,aAAwC,CAAC;AAC7D,wEAAwE;AACxE,eAAO,MAAM,YAAY,aAiBvB,CAAC;AACH,2EAA2E;AAC3E,eAAO,MAAM,SAAS,aAmBpB,CAAC;AACH,wEAAwE;AACxE,eAAO,MAAM,WAAW,aA8BtB,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The words an organism's name is read by: the signs and abbreviations that
|
|
3
|
+
* announce a rank or qualify a name, and the ordinary words a source writes
|
|
4
|
+
* where a genus or an epithet would stand.
|
|
5
|
+
*/
|
|
6
|
+
/** The hybrid sign, and the letters written for it. */
|
|
7
|
+
export const HYBRID = new Set(['×', 'x', 'X']);
|
|
8
|
+
/** The word that opens a provisional bacterial name; it alone is italic. */
|
|
9
|
+
export const CANDIDATUS = new Set(['Candidatus', 'Ca.']);
|
|
10
|
+
/** Qualifiers set before the epithet they qualify, in lower case. */
|
|
11
|
+
export const BEFORE_EPITHET = new Set(['cf.', 'cf', 'aff.', 'aff', 'nr.']);
|
|
12
|
+
/** An unnamed species of the genus, in lower case. */
|
|
13
|
+
export const UNNAMED = new Set(['sp.', 'sp', 'spp.', 'spp']);
|
|
14
|
+
/** The abbreviations announcing a lower-rank epithet, in lower case. */
|
|
15
|
+
export const RANK_MARKERS = new Set([
|
|
16
|
+
'subsp.',
|
|
17
|
+
'ssp.',
|
|
18
|
+
'nothosubsp.',
|
|
19
|
+
'var.',
|
|
20
|
+
'nothovar.',
|
|
21
|
+
'subvar.',
|
|
22
|
+
'f.',
|
|
23
|
+
'fo.',
|
|
24
|
+
'forma',
|
|
25
|
+
'subf.',
|
|
26
|
+
'pv.',
|
|
27
|
+
'subgen.',
|
|
28
|
+
'sect.',
|
|
29
|
+
'subsect.',
|
|
30
|
+
'ser.',
|
|
31
|
+
'subser.',
|
|
32
|
+
]);
|
|
33
|
+
/** Words that open a description rather than a binomial, in lower case. */
|
|
34
|
+
export const NOT_GENUS = new Set([
|
|
35
|
+
'unknown',
|
|
36
|
+
'unidentified',
|
|
37
|
+
'uncultured',
|
|
38
|
+
'unclassified',
|
|
39
|
+
'environmental',
|
|
40
|
+
'fungal',
|
|
41
|
+
'bacterial',
|
|
42
|
+
'marine',
|
|
43
|
+
'endophytic',
|
|
44
|
+
'mixed',
|
|
45
|
+
'fungus',
|
|
46
|
+
'bacterium',
|
|
47
|
+
'endophyte',
|
|
48
|
+
'strain',
|
|
49
|
+
'isolate',
|
|
50
|
+
'plant',
|
|
51
|
+
'soil',
|
|
52
|
+
'sponge',
|
|
53
|
+
]);
|
|
54
|
+
/** Lower-case words that follow a binomial without being an epithet. */
|
|
55
|
+
export const NOT_EPITHET = new Set([
|
|
56
|
+
'strain',
|
|
57
|
+
'isolate',
|
|
58
|
+
'symbiont',
|
|
59
|
+
'endophyte',
|
|
60
|
+
'clone',
|
|
61
|
+
'group',
|
|
62
|
+
'complex',
|
|
63
|
+
'culture',
|
|
64
|
+
'cultivar',
|
|
65
|
+
'serovar',
|
|
66
|
+
'biovar',
|
|
67
|
+
'pathovar',
|
|
68
|
+
'species',
|
|
69
|
+
'incertae',
|
|
70
|
+
'sedis',
|
|
71
|
+
'and',
|
|
72
|
+
'et',
|
|
73
|
+
'ex',
|
|
74
|
+
'in',
|
|
75
|
+
'non',
|
|
76
|
+
'sensu',
|
|
77
|
+
'auct',
|
|
78
|
+
'de',
|
|
79
|
+
'du',
|
|
80
|
+
'la',
|
|
81
|
+
'le',
|
|
82
|
+
'van',
|
|
83
|
+
'von',
|
|
84
|
+
'der',
|
|
85
|
+
]);
|
|
86
|
+
//# sourceMappingURL=organismWords.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organismWords.js","sourceRoot":"","sources":["../../../src/taxonomy/core/organismWords.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,uDAAuD;AACvD,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAC/C,4EAA4E;AAC5E,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;AACzD,qEAAqE;AACrE,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAC3E,sDAAsD;AACtD,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAC7D,wEAAwE;AACxE,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;IAClC,QAAQ;IACR,MAAM;IACN,aAAa;IACb,MAAM;IACN,WAAW;IACX,SAAS;IACT,IAAI;IACJ,KAAK;IACL,OAAO;IACP,OAAO;IACP,KAAK;IACL,SAAS;IACT,OAAO;IACP,UAAU;IACV,MAAM;IACN,SAAS;CACV,CAAC,CAAC;AACH,2EAA2E;AAC3E,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;IAC/B,SAAS;IACT,cAAc;IACd,YAAY;IACZ,cAAc;IACd,eAAe;IACf,QAAQ;IACR,WAAW;IACX,QAAQ;IACR,YAAY;IACZ,OAAO;IACP,QAAQ;IACR,WAAW;IACX,WAAW;IACX,QAAQ;IACR,SAAS;IACT,OAAO;IACP,MAAM;IACN,QAAQ;CACT,CAAC,CAAC;AACH,wEAAwE;AACxE,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IACjC,QAAQ;IACR,SAAS;IACT,UAAU;IACV,WAAW;IACX,OAAO;IACP,OAAO;IACP,SAAS;IACT,SAAS;IACT,UAAU;IACV,SAAS;IACT,QAAQ;IACR,UAAU;IACV,SAAS;IACT,UAAU;IACV,OAAO;IACP,KAAK;IACL,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,KAAK;IACL,OAAO;IACP,MAAM;IACN,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,KAAK;IACL,KAAK;IACL,KAAK;CACN,CAAC,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The ranks of the NCBI Taxonomy, from the top of the tree down.
|
|
3
|
+
*
|
|
4
|
+
* NCBI also files taxa under ranks that are not steps of a hierarchy — `no
|
|
5
|
+
* rank`, `clade`, the two roots — and those are deliberately absent here: a
|
|
6
|
+
* clade can sit anywhere, so it has no place in an order.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Every rank NCBI places in its hierarchy, from the top down.
|
|
10
|
+
*
|
|
11
|
+
* `realm` heads the viruses and `domain` the cellular organisms, the name NCBI
|
|
12
|
+
* gave in 2025 to what it called `superkingdom` before; all three stand at the
|
|
13
|
+
* top, so a lineage read from an older dump sorts the same way.
|
|
14
|
+
*/
|
|
15
|
+
export declare const TAXON_RANKS: readonly ["realm", "domain", "superkingdom", "kingdom", "subkingdom", "superphylum", "phylum", "subphylum", "superclass", "class", "subclass", "infraclass", "cohort", "subcohort", "superorder", "order", "suborder", "infraorder", "parvorder", "superfamily", "family", "subfamily", "tribe", "subtribe", "genus", "subgenus", "section", "subsection", "series", "subseries", "species group", "species subgroup", "species", "forma specialis", "subspecies", "varietas", "subvariety", "forma", "pathogroup", "serogroup", "serotype", "biotype", "genotype", "morph", "strain", "isolate"];
|
|
16
|
+
/** A rank of the NCBI hierarchy. */
|
|
17
|
+
export type TaxonRank = (typeof TAXON_RANKS)[number];
|
|
18
|
+
/**
|
|
19
|
+
* The ranks a lineage is summarised by: the eight a textbook names, with the
|
|
20
|
+
* three names the top of the tree goes by.
|
|
21
|
+
*/
|
|
22
|
+
export declare const PRINCIPAL_RANKS: readonly ["realm", "domain", "superkingdom", "kingdom", "phylum", "class", "order", "family", "genus", "species"];
|
|
23
|
+
/**
|
|
24
|
+
* Where a rank stands in the hierarchy.
|
|
25
|
+
* @param rank - The rank, as NCBI writes it.
|
|
26
|
+
* @returns Its position from the top, 0 for `realm`, or `undefined` for a
|
|
27
|
+
* rank that is not a step of the hierarchy (`no rank`, `clade`).
|
|
28
|
+
*/
|
|
29
|
+
export declare function rankOrder(rank: string): number | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* Whether a rank is one a lineage is summarised by.
|
|
32
|
+
* @param rank - The rank, as NCBI writes it.
|
|
33
|
+
* @returns Whether it is one of {@link PRINCIPAL_RANKS}.
|
|
34
|
+
*/
|
|
35
|
+
export declare function isPrincipalRank(rank: string): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Whether a rank is the genus or one under it — the ranks whose names
|
|
38
|
+
* nomenclature sets in italics.
|
|
39
|
+
* @param rank - The rank, as NCBI writes it.
|
|
40
|
+
* @returns `false` for a rank above the genus and for one with no place in the
|
|
41
|
+
* hierarchy.
|
|
42
|
+
*/
|
|
43
|
+
export declare function isGenusOrBelow(rank: string): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Whether a rank stands above the genus, so its name is set upright.
|
|
46
|
+
* @param rank - The rank, as NCBI writes it.
|
|
47
|
+
* @returns `false` for the genus and below, and for a rank with no place in
|
|
48
|
+
* the hierarchy.
|
|
49
|
+
*/
|
|
50
|
+
export declare function isAboveGenus(rank: string): boolean;
|
|
51
|
+
//# sourceMappingURL=ranks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ranks.d.ts","sourceRoot":"","sources":["../../../src/taxonomy/core/ranks.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,mkBA+Cd,CAAC;AAEX,oCAAoC;AACpC,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD;;;GAGG;AACH,eAAO,MAAM,eAAe,mHAWa,CAAC;AAW1C;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE1D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGpD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGlD"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The ranks of the NCBI Taxonomy, from the top of the tree down.
|
|
3
|
+
*
|
|
4
|
+
* NCBI also files taxa under ranks that are not steps of a hierarchy — `no
|
|
5
|
+
* rank`, `clade`, the two roots — and those are deliberately absent here: a
|
|
6
|
+
* clade can sit anywhere, so it has no place in an order.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Every rank NCBI places in its hierarchy, from the top down.
|
|
10
|
+
*
|
|
11
|
+
* `realm` heads the viruses and `domain` the cellular organisms, the name NCBI
|
|
12
|
+
* gave in 2025 to what it called `superkingdom` before; all three stand at the
|
|
13
|
+
* top, so a lineage read from an older dump sorts the same way.
|
|
14
|
+
*/
|
|
15
|
+
export const TAXON_RANKS = [
|
|
16
|
+
'realm',
|
|
17
|
+
'domain',
|
|
18
|
+
'superkingdom',
|
|
19
|
+
'kingdom',
|
|
20
|
+
'subkingdom',
|
|
21
|
+
'superphylum',
|
|
22
|
+
'phylum',
|
|
23
|
+
'subphylum',
|
|
24
|
+
'superclass',
|
|
25
|
+
'class',
|
|
26
|
+
'subclass',
|
|
27
|
+
'infraclass',
|
|
28
|
+
'cohort',
|
|
29
|
+
'subcohort',
|
|
30
|
+
'superorder',
|
|
31
|
+
'order',
|
|
32
|
+
'suborder',
|
|
33
|
+
'infraorder',
|
|
34
|
+
'parvorder',
|
|
35
|
+
'superfamily',
|
|
36
|
+
'family',
|
|
37
|
+
'subfamily',
|
|
38
|
+
'tribe',
|
|
39
|
+
'subtribe',
|
|
40
|
+
'genus',
|
|
41
|
+
'subgenus',
|
|
42
|
+
'section',
|
|
43
|
+
'subsection',
|
|
44
|
+
'series',
|
|
45
|
+
'subseries',
|
|
46
|
+
'species group',
|
|
47
|
+
'species subgroup',
|
|
48
|
+
'species',
|
|
49
|
+
'forma specialis',
|
|
50
|
+
'subspecies',
|
|
51
|
+
'varietas',
|
|
52
|
+
'subvariety',
|
|
53
|
+
'forma',
|
|
54
|
+
'pathogroup',
|
|
55
|
+
'serogroup',
|
|
56
|
+
'serotype',
|
|
57
|
+
'biotype',
|
|
58
|
+
'genotype',
|
|
59
|
+
'morph',
|
|
60
|
+
'strain',
|
|
61
|
+
'isolate',
|
|
62
|
+
];
|
|
63
|
+
/**
|
|
64
|
+
* The ranks a lineage is summarised by: the eight a textbook names, with the
|
|
65
|
+
* three names the top of the tree goes by.
|
|
66
|
+
*/
|
|
67
|
+
export const PRINCIPAL_RANKS = [
|
|
68
|
+
'realm',
|
|
69
|
+
'domain',
|
|
70
|
+
'superkingdom',
|
|
71
|
+
'kingdom',
|
|
72
|
+
'phylum',
|
|
73
|
+
'class',
|
|
74
|
+
'order',
|
|
75
|
+
'family',
|
|
76
|
+
'genus',
|
|
77
|
+
'species',
|
|
78
|
+
];
|
|
79
|
+
const ORDER = new Map();
|
|
80
|
+
for (let index = 0; index < TAXON_RANKS.length; index++) {
|
|
81
|
+
ORDER.set(TAXON_RANKS[index], index);
|
|
82
|
+
}
|
|
83
|
+
const PRINCIPAL = new Set(PRINCIPAL_RANKS);
|
|
84
|
+
const GENUS = ORDER.get('genus') ?? 0;
|
|
85
|
+
/**
|
|
86
|
+
* Where a rank stands in the hierarchy.
|
|
87
|
+
* @param rank - The rank, as NCBI writes it.
|
|
88
|
+
* @returns Its position from the top, 0 for `realm`, or `undefined` for a
|
|
89
|
+
* rank that is not a step of the hierarchy (`no rank`, `clade`).
|
|
90
|
+
*/
|
|
91
|
+
export function rankOrder(rank) {
|
|
92
|
+
return ORDER.get(rank);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Whether a rank is one a lineage is summarised by.
|
|
96
|
+
* @param rank - The rank, as NCBI writes it.
|
|
97
|
+
* @returns Whether it is one of {@link PRINCIPAL_RANKS}.
|
|
98
|
+
*/
|
|
99
|
+
export function isPrincipalRank(rank) {
|
|
100
|
+
return PRINCIPAL.has(rank);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Whether a rank is the genus or one under it — the ranks whose names
|
|
104
|
+
* nomenclature sets in italics.
|
|
105
|
+
* @param rank - The rank, as NCBI writes it.
|
|
106
|
+
* @returns `false` for a rank above the genus and for one with no place in the
|
|
107
|
+
* hierarchy.
|
|
108
|
+
*/
|
|
109
|
+
export function isGenusOrBelow(rank) {
|
|
110
|
+
const order = ORDER.get(rank);
|
|
111
|
+
return order !== undefined && order >= GENUS;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Whether a rank stands above the genus, so its name is set upright.
|
|
115
|
+
* @param rank - The rank, as NCBI writes it.
|
|
116
|
+
* @returns `false` for the genus and below, and for a rank with no place in
|
|
117
|
+
* the hierarchy.
|
|
118
|
+
*/
|
|
119
|
+
export function isAboveGenus(rank) {
|
|
120
|
+
const order = ORDER.get(rank);
|
|
121
|
+
return order !== undefined && order < GENUS;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=ranks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ranks.js","sourceRoot":"","sources":["../../../src/taxonomy/core/ranks.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,OAAO;IACP,QAAQ;IACR,cAAc;IACd,SAAS;IACT,YAAY;IACZ,aAAa;IACb,QAAQ;IACR,WAAW;IACX,YAAY;IACZ,OAAO;IACP,UAAU;IACV,YAAY;IACZ,QAAQ;IACR,WAAW;IACX,YAAY;IACZ,OAAO;IACP,UAAU;IACV,YAAY;IACZ,WAAW;IACX,aAAa;IACb,QAAQ;IACR,WAAW;IACX,OAAO;IACP,UAAU;IACV,OAAO;IACP,UAAU;IACV,SAAS;IACT,YAAY;IACZ,QAAQ;IACR,WAAW;IACX,eAAe;IACf,kBAAkB;IAClB,SAAS;IACT,iBAAiB;IACjB,YAAY;IACZ,UAAU;IACV,YAAY;IACZ,OAAO;IACP,YAAY;IACZ,WAAW;IACX,UAAU;IACV,SAAS;IACT,UAAU;IACV,OAAO;IACP,QAAQ;IACR,SAAS;CACD,CAAC;AAKX;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,OAAO;IACP,QAAQ;IACR,cAAc;IACd,SAAS;IACT,QAAQ;IACR,OAAO;IACP,OAAO;IACP,QAAQ;IACR,OAAO;IACP,SAAS;CAC8B,CAAC;AAE1C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;AACxC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;IACxD,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAW,EAAE,KAAK,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,SAAS,GAAG,IAAI,GAAG,CAAS,eAAe,CAAC,CAAC;AAEnD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,IAAI,KAAK,CAAC;AAC/C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,GAAG,KAAK,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ReactElement } from 'react';
|
|
2
|
+
/** What an {@link OrganismName} needs. */
|
|
3
|
+
export interface OrganismNameProps {
|
|
4
|
+
/** The name, as its source writes it. */
|
|
5
|
+
name: string;
|
|
6
|
+
/**
|
|
7
|
+
* The rank of the taxon the name belongs to. A name ranked above the genus
|
|
8
|
+
* (a family, an order) is set upright whatever its shape.
|
|
9
|
+
* @default undefined — the name is read by its shape alone
|
|
10
|
+
*/
|
|
11
|
+
rank?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Class names added to the root element.
|
|
14
|
+
* @default undefined
|
|
15
|
+
*/
|
|
16
|
+
className?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* An organism's name, with the genus and the epithets in italics and the
|
|
20
|
+
* authority, the strain and `sp.` upright, as nomenclature sets them.
|
|
21
|
+
*
|
|
22
|
+
* The italics are `<i>`, the element HTML names for a taxonomic designation,
|
|
23
|
+
* and the name keeps every character its source gave it.
|
|
24
|
+
* @param props - See {@link OrganismNameProps}.
|
|
25
|
+
* @returns The name.
|
|
26
|
+
*/
|
|
27
|
+
export declare function OrganismName(props: OrganismNameProps): ReactElement;
|
|
28
|
+
//# sourceMappingURL=OrganismName.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OrganismName.d.ts","sourceRoot":"","sources":["../../../src/taxonomy/ui/OrganismName.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAa,MAAM,OAAO,CAAC;AAOrD,0CAA0C;AAC1C,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,CAyBnE"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Fragment } from 'react';
|
|
3
|
+
import { joinClassNames } from "../../shared/ui/joinClassNames.js";
|
|
4
|
+
import { splitOrganismName } from "../core/organismName.js";
|
|
5
|
+
import { isAboveGenus } from "../core/ranks.js";
|
|
6
|
+
/**
|
|
7
|
+
* An organism's name, with the genus and the epithets in italics and the
|
|
8
|
+
* authority, the strain and `sp.` upright, as nomenclature sets them.
|
|
9
|
+
*
|
|
10
|
+
* The italics are `<i>`, the element HTML names for a taxonomic designation,
|
|
11
|
+
* and the name keeps every character its source gave it.
|
|
12
|
+
* @param props - See {@link OrganismNameProps}.
|
|
13
|
+
* @returns The name.
|
|
14
|
+
*/
|
|
15
|
+
export function OrganismName(props) {
|
|
16
|
+
const { name, rank, className } = props;
|
|
17
|
+
const parts = rank !== undefined && isAboveGenus(rank)
|
|
18
|
+
? [{ text: name, italic: false }]
|
|
19
|
+
: splitOrganismName(name);
|
|
20
|
+
const children = [];
|
|
21
|
+
let offset = 0;
|
|
22
|
+
for (const part of parts) {
|
|
23
|
+
children.push(part.italic ? (_jsx("i", { children: part.text }, offset)) : (_jsx(Fragment, { children: part.text }, offset)));
|
|
24
|
+
offset += part.text.length;
|
|
25
|
+
}
|
|
26
|
+
return (_jsx("span", { className: joinClassNames('organism-name', className), children: children }));
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=OrganismName.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OrganismName.js","sourceRoot":"","sources":["../../../src/taxonomy/ui/OrganismName.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAmBhD;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IACxC,MAAM,KAAK,GACT,IAAI,KAAK,SAAS,IAAI,YAAY,CAAC,IAAI,CAAC;QACtC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QACjC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAE9B,MAAM,QAAQ,GAAgB,EAAE,CAAC;IACjC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,QAAQ,CAAC,IAAI,CACX,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CACZ,sBAAiB,IAAI,CAAC,IAAI,IAAlB,MAAM,CAAiB,CAChC,CAAC,CAAC,CAAC,CACF,KAAC,QAAQ,cAAe,IAAI,CAAC,IAAI,IAAlB,MAAM,CAAwB,CAC9C,CACF,CAAC;QACF,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAC7B,CAAC;IAED,OAAO,CACL,eAAM,SAAS,EAAE,cAAc,CAAC,eAAe,EAAE,SAAS,CAAC,YACxD,QAAQ,GACJ,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { ReactElement } from 'react';
|
|
2
|
+
import type { Taxon, TaxonLineage as Lineage } from '../core/lineage.ts';
|
|
3
|
+
/** What a {@link TaxonLineage} needs. */
|
|
4
|
+
export interface TaxonLineageProps {
|
|
5
|
+
/** The lineage, from the top of the tree down to the taxon it leads to. */
|
|
6
|
+
lineage: Lineage;
|
|
7
|
+
/**
|
|
8
|
+
* Whether only the principal ranks are shown — domain, kingdom, phylum,
|
|
9
|
+
* class, order, family, genus, species — with the last taxon kept whatever
|
|
10
|
+
* its rank. Off, every taxon is shown, the clades included.
|
|
11
|
+
* @default true
|
|
12
|
+
*/
|
|
13
|
+
principal?: boolean;
|
|
14
|
+
/**
|
|
15
|
+
* The address of a taxon's page on the site. A taxon it answers `undefined`
|
|
16
|
+
* for is written as plain text, and so is every taxon without it.
|
|
17
|
+
* @default undefined
|
|
18
|
+
*/
|
|
19
|
+
taxonHref?: (taxon: Taxon) => string | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* What the site does when a taxon's link is followed with a plain click —
|
|
22
|
+
* move to its page without a reload. A modified click is left to the
|
|
23
|
+
* browser, so a taxon still opens in a tab of its own.
|
|
24
|
+
* @default undefined
|
|
25
|
+
*/
|
|
26
|
+
onTaxonSelect?: (taxon: Taxon) => void;
|
|
27
|
+
/**
|
|
28
|
+
* Whether each taxon carries its rank as a small label over its name.
|
|
29
|
+
* Without it the rank is the taxon's tooltip, and is read to a screen reader
|
|
30
|
+
* after the name.
|
|
31
|
+
* @default false
|
|
32
|
+
*/
|
|
33
|
+
showRanks?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Whether a link to the last taxon's page in the NCBI Taxonomy Browser
|
|
36
|
+
* follows the lineage, when that taxon has an id.
|
|
37
|
+
* @default false
|
|
38
|
+
*/
|
|
39
|
+
ncbiLink?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Whether the last taxon is the page being read: it is then marked as the
|
|
42
|
+
* current page and is never a link.
|
|
43
|
+
* @default false
|
|
44
|
+
*/
|
|
45
|
+
current?: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* What names the breadcrumb to a screen reader.
|
|
48
|
+
* @default the catalog's "Lineage"
|
|
49
|
+
*/
|
|
50
|
+
label?: string;
|
|
51
|
+
/**
|
|
52
|
+
* Class names added to the root element.
|
|
53
|
+
* @default undefined
|
|
54
|
+
*/
|
|
55
|
+
className?: string;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* A lineage as a breadcrumb: the taxa from the top of the tree down, each
|
|
59
|
+
* named with its rank, the last one emphasised.
|
|
60
|
+
*
|
|
61
|
+
* The names under a genus are set in italics as nomenclature sets them, by
|
|
62
|
+
* {@link OrganismName}; the ranks are the chrome's words, translated with it.
|
|
63
|
+
* @param props - See {@link TaxonLineageProps}.
|
|
64
|
+
* @returns The breadcrumb, or nothing for an empty lineage.
|
|
65
|
+
*/
|
|
66
|
+
export declare function TaxonLineage(props: TaxonLineageProps): ReactElement | null;
|
|
67
|
+
//# sourceMappingURL=TaxonLineage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaxonLineage.d.ts","sourceRoot":"","sources":["../../../src/taxonomy/ui/TaxonLineage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAa,MAAM,OAAO,CAAC;AAKrD,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,IAAI,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAOzE,yCAAyC;AACzC,MAAM,WAAW,iBAAiB;IAChC,2EAA2E;IAC3E,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,GAAG,SAAS,CAAC;IACjD;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACvC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,GAAG,IAAI,CA0G1E"}
|