archaeopteryx 3.15.0 → 3.17.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 +178 -24
- package/archaeopteryx.d.ts +2 -0
- package/archaeopteryx.js +1661 -285
- package/forester.js +191 -29
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -256,11 +256,38 @@ the mouse wheel zooms too, and never rotates), **X− / X+ become rotate** (a
|
|
|
256
256
|
32nd of a turn per press), and the fit-width slot becomes the **node label
|
|
257
257
|
direction** flip — labels riding their spokes or standing upright — while
|
|
258
258
|
vertical expansion greys out. **Fit** centres and scales the fan; **Esc**
|
|
259
|
-
also resets rotation and label direction.
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
259
|
+
also resets rotation and label direction. **Each radial layout greys out the
|
|
260
|
+
display type it cannot show.** Circular always aligns — its external labels are
|
|
261
|
+
pulled out to a shared ring, with dashed connectors to match, whichever type is
|
|
262
|
+
chosen — so the circular phylogram is the aligned one, and the greyed button
|
|
263
|
+
there is the *unaligned* phylogram. Unrooted is the other way round: it has no
|
|
264
|
+
common edge to align to, so the aligned type is the one greyed. The button shown
|
|
265
|
+
as chosen describes the picture, and choosing the phylogram in circular leaves
|
|
266
|
+
your aligned-or-not preference for the other layouts untouched. Auto-hide Labels
|
|
267
|
+
stays live in every layout.
|
|
268
|
+
|
|
269
|
+
### The control-panel cheat sheet
|
|
270
|
+
|
|
271
|
+
The card button in the panel header opens **Control panel**: one row for every
|
|
272
|
+
control the panel is currently showing, in the order it shows them, each with
|
|
273
|
+
the control's own glyph or name and the sentence that explains it — the layout
|
|
274
|
+
and display-type buttons included, drawn with the very glyph they carry in the
|
|
275
|
+
panel. The About box has a row for it too.
|
|
276
|
+
|
|
277
|
+
The display types say what they do and when they are greyed, whether or not
|
|
278
|
+
they are greyed in the view you are looking at: *"phylogram: branch lengths
|
|
279
|
+
drawn to scale, so the tips end ragged. Greyed in the circular layout, which
|
|
280
|
+
always carries its labels to the outer ring, so there the aligned phylogram is
|
|
281
|
+
the one drawn."*
|
|
282
|
+
|
|
283
|
+
It is **modeless** and sits beside the panel, so a row can be read while the
|
|
284
|
+
control it names is used. It describes what is on the screen: fold a section
|
|
285
|
+
and its controls leave the sheet, open a tree that offers no alignment and the
|
|
286
|
+
alignment controls are not listed. Nothing on it is written twice — a row's
|
|
287
|
+
words are the tooltip the control already carries, so a control added later
|
|
288
|
+
needs no edit here, only a tooltip. And no row shows a live value, so a sheet
|
|
289
|
+
that is saved or printed does not go wrong for every reader but the one who
|
|
290
|
+
made it.
|
|
264
291
|
|
|
265
292
|
## Rooting
|
|
266
293
|
|
|
@@ -538,9 +565,13 @@ phyloXML's domain `id` is optional, and a file with names alone (our own
|
|
|
538
565
|
accessions and not Pfam identifiers. Only the domain boxes take the mouse, so
|
|
539
566
|
the tree behind the track stays clickable.
|
|
540
567
|
|
|
541
|
-
In the circular and unrooted layouts the tracks ride each tip's spoke
|
|
542
|
-
outward and carry no names (the legend still works); they need
|
|
543
|
-
labels, which switching layouts turns on.
|
|
568
|
+
In the circular and unrooted layouts the tracks ride each named tip's spoke
|
|
569
|
+
outward and carry no names of their own (the legend still works); they need
|
|
570
|
+
radial labels, which switching layouts turns on. An architecture goes with
|
|
571
|
+
its name: where the crowding rule has taken a tip's name away, its track is
|
|
572
|
+
left out too, since a track with no name beside it can only be identified by
|
|
573
|
+
which spoke it sits on. Switching the name fields off is not the same thing —
|
|
574
|
+
nothing is hidden by the rule then, and every track is still drawn. A malformed domain — a missing or
|
|
544
575
|
impossible position or E-value — is skipped and counted in a console
|
|
545
576
|
warning, never fatal. The tracks ride into the SVG, PDF and PNG exports.
|
|
546
577
|
This is the desktop's domain display, drawn to the same numbers
|
|
@@ -599,7 +630,8 @@ missing symbol `?` arrives as `X` or `N`. A phyloXML `<mol_seq>` is kept
|
|
|
599
630
|
exactly as written, by both programs. Sequences
|
|
600
631
|
of *unequal* length are not an alignment and cannot form a character matrix,
|
|
601
632
|
so they are not written at all — the file says so in a bracketed comment
|
|
602
|
-
rather than padding them into an alignment that does not exist
|
|
633
|
+
rather than padding them into an alignment that does not exist, and the
|
|
634
|
+
Nexus entry of the Download menu says so before you choose it.
|
|
603
635
|
|
|
604
636
|
## Heat maps
|
|
605
637
|
|
|
@@ -973,12 +1005,62 @@ a popup any more, and nothing fails silently.
|
|
|
973
1005
|
| **MrBayes** annotations | in (embedded in Newick/Nexus) | `prob=`/`prob.stddev=` blobs: posterior-probability clade support. | [8] |
|
|
974
1006
|
| **Metadata table** (`.tsv`, `.csv`) | in (beside a tree) | A header row and one row per tip, the first column naming the tip: every other column is joined onto the tips as a property, so it is offered for Color-by and Shape, searched, shown in the node data and written into phyloXML exports. See [Metadata tables](#metadata-tables). | — |
|
|
975
1007
|
| **FASTA** | out | The molecular sequence(s) of the selected tip(s), or every sequence the tree carries. Offered in the Download menu only when the tree actually carries molecular sequences (aligned or not). | [9] |
|
|
976
|
-
| SVG · PNG · vector PDF | out |
|
|
1008
|
+
| SVG · PNG · vector PDF | out | The drawn tree for publication or further editing — vector (SVG, PDF) or raster (PNG), either as shown on screen or the whole tree at full size (see [Downloads](#downloads)). General-purpose graphics formats, not phylogenetic data, so no literature reference applies. | — |
|
|
977
1009
|
|
|
978
1010
|
The parser for a given input is auto-detected (see **The entry points**
|
|
979
1011
|
above); the Download menu offers whichever output formats the current tree
|
|
980
1012
|
can carry.
|
|
981
1013
|
|
|
1014
|
+
### Downloads
|
|
1015
|
+
|
|
1016
|
+
The panel's **Download** section (folded until you open it) holds the choices
|
|
1017
|
+
every download shares, and its **Download…** button opens the format menu,
|
|
1018
|
+
grouped as Graphics, Tree and Tip data. Each entry says what that format keeps — phyloXML everything the
|
|
1019
|
+
tree carries, Newick only names, branch lengths and support — and the Nexus
|
|
1020
|
+
entry says, before you pick it, whether the file will carry the alignment or,
|
|
1021
|
+
when the sequences are of unequal length, why it cannot.
|
|
1022
|
+
|
|
1023
|
+
* **Name** — the file name; each format adds its own extension (a typed
|
|
1024
|
+
`.svg` or `.tre` is not doubled). It starts as the tree's name.
|
|
1025
|
+
* **Graphics: As shown / Full size** — what SVG, PDF and PNG draw. *As shown*
|
|
1026
|
+
is the window: the part of the tree in view, at the current zoom. *Full
|
|
1027
|
+
size* (the default) is the whole tree, re-laid-out large enough that no tip
|
|
1028
|
+
name has to be hidden — in rows in the rectangular layout, around the ring in
|
|
1029
|
+
the circular one — and cropped to the drawing, with the legends (colour,
|
|
1030
|
+
shape, domains, the heat-map ring's scale) stacked beside the tree rather
|
|
1031
|
+
than over it. The window itself is left exactly as it was. An unrooted fan
|
|
1032
|
+
is enlarged only while that still frees names: tips on very short branches
|
|
1033
|
+
can collide at any size. An alignment track is drawn as its window, the
|
|
1034
|
+
columns in view, in a full-size figure too: a genome-length alignment drawn
|
|
1035
|
+
whole would be hundreds of thousands of cells.
|
|
1036
|
+
* **PNG: 2× / 4× / 8×** — the image's resolution relative to the screen
|
|
1037
|
+
(`pngExportScale` sets the starting choice, snapped to one of the three). A browser caps how large a
|
|
1038
|
+
canvas it will paint; past that the PNG comes out at the largest scale it can
|
|
1039
|
+
paint, with a console warning, rather than blank.
|
|
1040
|
+
* **Copy Newick** puts the tree on the clipboard, exactly as the Newick
|
|
1041
|
+
download writes it.
|
|
1042
|
+
* **Copy PNG** puts the picture on the clipboard, drawn as the Graphics and PNG
|
|
1043
|
+
choices say — ready to paste into a Word document or a slide. It needs a
|
|
1044
|
+
secure page (https, or localhost) and canvg, and is offered only where both
|
|
1045
|
+
are there.
|
|
1046
|
+
|
|
1047
|
+
**In a subtree, and with clades collapsed.** Every download follows the tree
|
|
1048
|
+
you are looking at. In a **subtree** the files hold the subtree only — the
|
|
1049
|
+
menu's Tree and Tip data groups say so ("subtree, 19 of 50 tips"), and
|
|
1050
|
+
phyloXML and Nexus name it after the tree, marked "(subtree)"; the subtree is
|
|
1051
|
+
written as a rooted tree of its own, its root keeping the branch that leads
|
|
1052
|
+
into it. A **collapsed** clade is how the tree is drawn, not what it holds:
|
|
1053
|
+
the graphics draw it collapsed, as on screen, and every file writes it in
|
|
1054
|
+
full.
|
|
1055
|
+
|
|
1056
|
+
**TSV** (under Tip data) writes every tip's data as a table, one row per tip in
|
|
1057
|
+
the order drawn: the node menu's **Download Ext. Node Data** for the whole
|
|
1058
|
+
tree, with the same columns, and a table that joins back onto the tree as
|
|
1059
|
+
[metadata](#metadata-tables).
|
|
1060
|
+
|
|
1061
|
+
A full-size PDF taller or wider than 200 inches (14,400 pt, the PDF page
|
|
1062
|
+
limit) is scaled onto the largest page; it is vector, so nothing is lost.
|
|
1063
|
+
|
|
982
1064
|
Newick and Nexus files usually carry branch support as a bare internal label
|
|
983
1065
|
(`)100:0.05`). Archaeopteryx.js recognises those automatically and treats them
|
|
984
1066
|
as confidence values, so support-based features work without any setup. If your
|
|
@@ -1110,7 +1192,56 @@ branch-length values and support symbols are drawn only where they fit: each
|
|
|
1110
1192
|
mark claims the box it is about to occupy, and one that would overlap a box
|
|
1111
1193
|
already claimed in that pass is left out. The claim order is the tree's own,
|
|
1112
1194
|
root first, so the mark nearer the root keeps its place and the same tree at
|
|
1113
|
-
the same size always drops the same marks — on screen and in
|
|
1195
|
+
the same size always drops the same marks — on screen and in an *As shown*
|
|
1196
|
+
export. A *Full size* figure is drawn larger, so it has room to keep more.
|
|
1197
|
+
|
|
1198
|
+
**The Auto-hide Labels toggle lights up while it is taking something away**,
|
|
1199
|
+
and its tooltip says what. The switch governs three rules and the light asks
|
|
1200
|
+
all three: *1 in k labels shown* in the rectangular layout, which thins by
|
|
1201
|
+
index; *n names that would overprint* in the two radial layouts, which thin by
|
|
1202
|
+
overlap; and *n branch values that would overlap*, in any layout. It stays dark
|
|
1203
|
+
on a tree with room for everything.
|
|
1204
|
+
|
|
1205
|
+
**In the circular and unrooted layouts, crowded tip labels are hidden by
|
|
1206
|
+
whether they actually overprint.** A name is drawn only where its own outline
|
|
1207
|
+
overlaps no name already drawn; the order is the tree's own, root first, so
|
|
1208
|
+
the same tree at the same size always keeps the same names. **A name found by
|
|
1209
|
+
a search is the exception**: it is drawn without being asked, so what you
|
|
1210
|
+
searched for is always on the screen — and since the names it would have
|
|
1211
|
+
yielded to are already down, a hit can be drawn across one. That is the rule
|
|
1212
|
+
both programs agreed on, the hit being the thing you are looking for, and it
|
|
1213
|
+
is the one case where the sentence above does not hold. The outlines are compared as they are drawn, turned, not as the
|
|
1214
|
+
upright boxes that enclose them — the bounds of a turned name are several
|
|
1215
|
+
times its own area, and comparing those would drop names that are plainly
|
|
1216
|
+
clear of each other.
|
|
1217
|
+
|
|
1218
|
+
The rectangular layout keeps the every-k-th thinning, where it belongs: its
|
|
1219
|
+
rows really are evenly spaced, and `k` is read from the font size against the
|
|
1220
|
+
row pitch. A fan has no rows, and until 2026-09-27 the circular layout
|
|
1221
|
+
borrowed that rule anyway — thinning a ring by the display's *height* over the
|
|
1222
|
+
node count, a quantity with nothing to do with a ring's circumference. It was
|
|
1223
|
+
wrong in both directions. Measured at 1100×850: on `Caliciviridae_100.xml` it
|
|
1224
|
+
kept 48 of 97 names where all 97 fit the ring with **not one** overlapping
|
|
1225
|
+
pair; on `flu_h5.xml` it kept 59 of 354 where 118 are readable. Both now draw
|
|
1226
|
+
what fits.
|
|
1227
|
+
|
|
1228
|
+
Both fans lose names where a fan is crowded — circular takes 236 of 354 on
|
|
1229
|
+
`flu_h5.xml`, and unrooted is the harsher of the two: on `Caliciviridae_100.xml`
|
|
1230
|
+
its 97 names had 172 overlapping pairs, the deepest printing 9.5 px through
|
|
1231
|
+
its neighbour, and 34 remain with none overlapping by more than the width of
|
|
1232
|
+
the measurement itself. Where there is room, nothing is dropped:
|
|
1233
|
+
`woese-tree-of-life.xml` keeps all 23 in every layout.
|
|
1234
|
+
|
|
1235
|
+
**Names go down first, and numbers yield to them.** Every node label that will
|
|
1236
|
+
be drawn — a tip name or a clade name — reserves its space before any mark is
|
|
1237
|
+
placed, and it is never asked: a label is drawn whatever else is there, so a
|
|
1238
|
+
number that would print through a name is the one left out. A value that has
|
|
1239
|
+
landed across a name is worse than a value not drawn at all, and it is the
|
|
1240
|
+
name that says what the tree is about. Measured at 1100×850 with both numbers
|
|
1241
|
+
on, before this: 44 of 93 numbers printed through a name in the rectangular
|
|
1242
|
+
view of `flu_h5.xml`, 30 of 55 on `confidences.xml`, 10 of 15 in the unrooted
|
|
1243
|
+
view. Now none, in any of the three layouts, and no number is refused unless
|
|
1244
|
+
something drawn is in its way.
|
|
1114
1245
|
Numbers and symbols are kept in separate maps, since the symbol sits on the
|
|
1115
1246
|
branch and the numbers just above and below it. Symbols are never shrunk to
|
|
1116
1247
|
fit: where a symbol's size means something, a smaller one would report
|
|
@@ -1195,7 +1326,7 @@ copy-pastable JSON.
|
|
|
1195
1326
|
| `visualizationsLegendXpos` | `254` | Legend position, x. |
|
|
1196
1327
|
| `visualizationsLegendYpos` | `30` | Legend position, y. |
|
|
1197
1328
|
| `enableDownloads` | `true` | Offer the download buttons. |
|
|
1198
|
-
| `pngExportScale` | `4` | PNG
|
|
1329
|
+
| `pngExportScale` | `4` | The PNG resolution the Download section starts on: 2, 4 or 8 (any other value is snapped to the nearest, with a console warning). |
|
|
1199
1330
|
| `nhExportWriteConfidences` | `true` | Write confidences into exported Newick. |
|
|
1200
1331
|
| `internalNumericLabels` | `'auto'` | Newick / Nexus parsing: how a bare numeric internal label (`)100:0.05`) is read. `'auto'` reads them as confidence values only when *every* internal label looks like support; `'confidence'` reads every numeric label as one, whatever its value; `'label'` keeps them as names. Replaces `nhConfidenceValuesAsInternalNames` (still accepted, with a warning; its `true` maps to `'confidence'`). |
|
|
1201
1332
|
| `nodeLabels` | `null` | Custom label-field checkboxes: `{key: {label, description, propertyRef, showButton, selected}}` — each adds a panel checkbox labelling nodes with the named property's value. (Was `launch()`'s sixth positional argument.) |
|
|
@@ -1306,11 +1437,11 @@ All 118 of them, alphabetically:
|
|
|
1306
1437
|
| `labelColorDefault` | The default label colour is fixed. |
|
|
1307
1438
|
| `minBranchLengthValueToShow` | No longer configurable. |
|
|
1308
1439
|
| `minConfidenceValueToShow` | No longer configurable. |
|
|
1309
|
-
| `nameForFastaDownload` | Download names follow `treeName
|
|
1310
|
-
| `nameForNhDownload` | Download names follow `treeName
|
|
1311
|
-
| `nameForPhyloXmlDownload` | Download names follow `treeName
|
|
1312
|
-
| `nameForPngDownload` | Download names follow `treeName
|
|
1313
|
-
| `nameForSvgDownload` | Download names follow `treeName
|
|
1440
|
+
| `nameForFastaDownload` | Download names follow `treeName`, or the Download section's Name field. |
|
|
1441
|
+
| `nameForNhDownload` | Download names follow `treeName`, or the Download section's Name field. |
|
|
1442
|
+
| `nameForPhyloXmlDownload` | Download names follow `treeName`, or the Download section's Name field. |
|
|
1443
|
+
| `nameForPngDownload` | Download names follow `treeName`, or the Download section's Name field. |
|
|
1444
|
+
| `nameForSvgDownload` | Download names follow `treeName`, or the Download section's Name field. |
|
|
1314
1445
|
| `nhExportReplaceIllegalChars` | Always on; Newick cannot carry those characters. |
|
|
1315
1446
|
| `nodeLabelGap` | The label gap is fixed. |
|
|
1316
1447
|
| `nodeSizeDefault` | Node size is fixed; the Node size slider changes it. |
|
|
@@ -1334,7 +1465,7 @@ All 118 of them, alphabetically:
|
|
|
1334
1465
|
| `showBranchVisualizations` | Node and branch visualizations are one switch now; use the Visualizations checkbox. |
|
|
1335
1466
|
| `showConfidenceValues` | Shown when the tree has confidences. |
|
|
1336
1467
|
| `showDistributions` | Off by default. |
|
|
1337
|
-
| `showDynahideButton` |
|
|
1468
|
+
| `showDynahideButton` | The Auto-hide Labels checkbox is always shown. |
|
|
1338
1469
|
| `showExternalLabels` | On by default; use the Ext. Labels checkbox. |
|
|
1339
1470
|
| `showExternalLabelsButton` | Always shown. |
|
|
1340
1471
|
| `showExternalNodes` | Node shapes now appear wherever a node visualization applies. |
|
|
@@ -1354,7 +1485,7 @@ All 118 of them, alphabetically:
|
|
|
1354
1485
|
| `showSequenceGeneSymbol` | Sequence labelling follows what the tree contains. |
|
|
1355
1486
|
| `showSequenceName` | Sequence labelling follows what the tree contains. |
|
|
1356
1487
|
| `showSequenceSymbol` | Sequence labelling follows what the tree contains. |
|
|
1357
|
-
| `showShortenNodeNamesButton` |
|
|
1488
|
+
| `showShortenNodeNamesButton` | The Short Names checkbox is always shown; it starts on when the tree has long node names. |
|
|
1358
1489
|
| `showTaxonomy` | Shown when the tree has taxonomies. |
|
|
1359
1490
|
| `showTaxonomyButton` | Shown automatically when the tree has taxonomies. |
|
|
1360
1491
|
| `showTaxonomyCode` | Taxonomy labelling follows what the tree contains. |
|
|
@@ -1732,6 +1863,22 @@ The 2026 additions beyond the visualization system, specified tightly enough
|
|
|
1732
1863
|
to rebuild. All pure logic lives in forester.js under `npm test`; the viewer
|
|
1733
1864
|
draws.
|
|
1734
1865
|
|
|
1866
|
+
The counts quoted above are measurements on one machine, and how many names
|
|
1867
|
+
fit a ring depends on how wide the system draws them: the same tree keeps 34
|
|
1868
|
+
in the unrooted view here and 33 on a Linux CI runner, with the crowding
|
|
1869
|
+
identical on both (97 names, 172 overlapping pairs with the rule off). The
|
|
1870
|
+
rule is the same; the font is not.
|
|
1871
|
+
|
|
1872
|
+
What the viewer draws is checked separately, by driving it in headless Chrome:
|
|
1873
|
+
`npm run test:browser` (or `test:browser:quick`, one case per harness, which is
|
|
1874
|
+
what CI runs). Those harnesses open a real tree, work the controls and measure
|
|
1875
|
+
the result — which marks are drawn, where they sit, whether a control lights.
|
|
1876
|
+
They exist because `npm test` cannot reach any of it: it covers the arithmetic,
|
|
1877
|
+
and the defects this code has actually had were wiring. A connector drawn out
|
|
1878
|
+
to the ring for a name that was hidden, an Auto-hide indicator dark over a tree
|
|
1879
|
+
it was thinning, a domain architecture left beside a tip whose name had gone —
|
|
1880
|
+
each of those passed every node test and every lint.
|
|
1881
|
+
|
|
1735
1882
|
### The unrooted layout
|
|
1736
1883
|
|
|
1737
1884
|
`forester.equalAngleLayout(root, startAngle, lengthOf)` — Meacham's
|
|
@@ -1754,8 +1901,12 @@ mathematics — `spokeAngle(d)` is `uangle` in unrooted and the cluster angle
|
|
|
1754
1901
|
minus π/2 in circular; `labelAngleDeg` rotates a label along its spoke and
|
|
1755
1902
|
`labelFlip` adds 180° on the left half (`spokeAngle mod 2π ∈ (π/2, 3π/2)`).
|
|
1756
1903
|
`layoutPointXY(d)` resolves a node's position in any layout for every
|
|
1757
|
-
consumer (overview dots, hit navigator, node transforms). Unrooted
|
|
1758
|
-
|
|
1904
|
+
consumer (overview dots, hit navigator, node transforms). Unrooted has no
|
|
1905
|
+
common edge to align labels to, so the aligned phylogram is the display type
|
|
1906
|
+
it greys out (circular greys the unaligned one instead, since it always
|
|
1907
|
+
aligns). Neither radial layout has even rows, so the every-k-th
|
|
1908
|
+
tip-label thinning runs in the rectangular layout alone — both fans hide their
|
|
1909
|
+
crowded names by overlap instead, as on the desktop.
|
|
1759
1910
|
|
|
1760
1911
|
### The domain tracks
|
|
1761
1912
|
|
|
@@ -1766,7 +1917,10 @@ drawable when `from` and `to` are integers with `to > from` and `confidence`
|
|
|
1766
1917
|
(its E-value) is a number; otherwise it is skipped and counted
|
|
1767
1918
|
(`forester.domainArchitectureDomains`). Gate: `showDomainArchitectures`
|
|
1768
1919
|
state (auto-on when `_basicTreeProperties.domainArchitectures`) AND external
|
|
1769
|
-
labels shown AND, in a radial layout, radial rather than upright labels
|
|
1920
|
+
labels shown AND, in a radial layout, radial rather than upright labels AND,
|
|
1921
|
+
per tip, a name the crowding rule has not taken (`_labelDropped`) — note
|
|
1922
|
+
"taken by the rule", not "absent": with the name fields switched off nothing
|
|
1923
|
+
is hidden by the rule and every track is still drawn.
|
|
1770
1924
|
|
|
1771
1925
|
Scale: one factor for the tree, `f = W_eff / Lmax × 0.9` px per residue.
|
|
1772
1926
|
`W` (the track width) starts at `0.25 × viewport width`; `d+` / `d−` scale it
|
|
@@ -1779,8 +1933,8 @@ threshold never rescales. The rectangular layout reserves `20 + W + 10` px
|
|
|
1779
1933
|
from `_w` past the label reservation (`_domainReserve`, counted wherever `_w`
|
|
1780
1934
|
is), so the tree compresses to make room; the radial fit adds
|
|
1781
1935
|
`4 + W_eff + 10` to the ring. Placement: rectangular `start = _w +
|
|
1782
|
-
nodeLabelGap + labelSpace + 20` for every tip
|
|
1783
|
-
height `clamp(round(tipPitch / 2), 6, 16)`; circular `r0 = maxRad +
|
|
1936
|
+
nodeLabelGap + labelSpace + 20` for every tip still showing its name (one
|
|
1937
|
+
aligned column) with box height `clamp(round(tipPitch / 2), 6, 16)`; circular `r0 = maxRad +
|
|
1784
1938
|
labelSpace + 4` under `rotate(spoke)`; unrooted `translate(tip)
|
|
1785
1939
|
rotate(spoke)` with `start = labelSpace + 4`. A domain `from..to` covers
|
|
1786
1940
|
`[start + (from − 1) f, start + to f]` — residue `r` is `[(r − 1) f, r f]`,
|
package/archaeopteryx.d.ts
CHANGED
|
@@ -79,6 +79,8 @@ export interface ArchaeopteryxConfig {
|
|
|
79
79
|
/** 'compact' tightens the control panel's spacing and narrows it (the
|
|
80
80
|
* tree's left margin follows). The same controls, nothing hidden. */
|
|
81
81
|
panelDensity?: 'comfortable' | 'compact';
|
|
82
|
+
/** The PNG resolution the Download section starts on, snapped to its
|
|
83
|
+
* 2x, 4x or 8x. */
|
|
82
84
|
pngExportScale?: number;
|
|
83
85
|
rootOffset?: number;
|
|
84
86
|
searchAinitialValue?: string | null;
|