Add clade silhouettes, compact navigation tabs, and drop the hover underline
#3
by lvwerra HF Staff - opened
This view is limited to 50 files because it contains too many changes. See the raw diff here.
- FEATURE_BACKLOG.md +1 -1
- README.md +2 -0
- app.css +7 -7
- atlas.css +4 -1
- data/icons.json +0 -0
- data/icons/00508809-a509-4330-9e3d-9d3b54248667.svg +58 -0
- data/icons/0192754b-c8ab-43c0-a475-1a2ad0cfd202.svg +40 -0
- data/icons/01a21193-6599-463c-a5f0-75b6fe03189d.svg +104 -0
- data/icons/02974d7f-f93c-4c59-b847-3b080368c168.svg +33 -0
- data/icons/030163a0-eddc-4bf3-aac2-5e7594124820.svg +480 -0
- data/icons/03d2b502-f7d4-40a9-8be8-b31210286be8.svg +177 -0
- data/icons/0416cb50-2c82-42ac-bd17-ef1b6800ef65.svg +264 -0
- data/icons/04f4fb98-4dbc-424e-81ac-85226becd06b.svg +40 -0
- data/icons/065734f1-db68-4925-81fb-5d44c363b60d.svg +177 -0
- data/icons/07778806-5dcf-4524-9d93-8ead16a51bf9.svg +1098 -0
- data/icons/077c76df-f224-4eb1-9c92-6049fc8f8b3e.svg +294 -0
- data/icons/07a8ddc3-6440-4ca8-80e6-ccdaa988a968.svg +44 -0
- data/icons/0950aa57-4538-4fa1-b1f5-c4634f1c695c.svg +490 -0
- data/icons/0953dd54-b97b-4cfd-8944-bb3f45f93466.svg +25 -0
- data/icons/0a61962f-7d02-435c-aca0-d2fd0b757fc3.svg +48 -0
- data/icons/0be250dd-b56a-4ff5-97cc-ec6430e4ea5c.svg +232 -0
- data/icons/0be4e244-8322-444e-a75c-8503c16e10d7.svg +73 -0
- data/icons/0c391d43-30a5-4077-bdcb-fbb80f5d13e6.svg +36 -0
- data/icons/0cd6cc9f-683c-470e-a4a6-3b68beb826fa.svg +421 -0
- data/icons/0d386ce5-28e2-407c-b985-c1aac350bd1a.svg +86 -0
- data/icons/0ec7e6e6-e115-450a-b346-c40685ed3b1a.svg +82 -0
- data/icons/0fde2bb6-0472-4273-bf46-2d6073fa8fbc.svg +101 -0
- data/icons/12b88747-2892-454a-a882-c9c7e5f2c715.svg +274 -0
- data/icons/131051a0-9053-4295-a90a-380a00170784.svg +85 -0
- data/icons/13a4d650-bf9c-46ca-a4d1-b3ed8c8dab41.svg +26 -0
- data/icons/13c1c9de-bc85-47b8-9411-f9aaf35a908c.svg +106 -0
- data/icons/140c1df2-7f74-4f4d-8deb-9138aa956be5.svg +478 -0
- data/icons/14269801-89fe-405c-a425-2286c54ee60d.svg +69 -0
- data/icons/165900f9-969b-4ffa-b2cf-2a0a099b34a4.svg +117 -0
- data/icons/16735c42-c7d7-4394-a2c5-9493129cdf1c.svg +243 -0
- data/icons/1701c916-c68a-4807-8666-c4b8b4bc6656.svg +76 -0
- data/icons/17172a50-685f-4f39-a0d1-c0495e33a2d0.svg +135 -0
- data/icons/1776342b-d628-48f2-a292-3e8479ff95b4.svg +243 -0
- data/icons/179a2862-cb58-4a14-abc6-8fdf73c23364.svg +33 -0
- data/icons/17a3052d-8762-4aa4-9773-6718fec220ee.svg +0 -0
- data/icons/181e0252-d904-4e44-b53d-8b119a4c4e20.svg +205 -0
- data/icons/18af6753-2f5b-49d2-a28d-4cc1b7deaf6f.svg +84 -0
- data/icons/196f946f-f29f-4ca3-bdb2-5a8c5a036fd4.svg +103 -0
- data/icons/198fab1c-ac89-40c1-8243-8615c4133d80.svg +34 -0
- data/icons/199829d3-183a-4eb3-a35a-a8705d28cb56.svg +34 -0
- data/icons/19f1fc0c-aab8-4482-aad4-092987e59748.svg +84 -0
- data/icons/19ff2bcf-7b7a-4d38-b3af-118aa3b4ae48.svg +152 -0
- data/icons/1b0ba0bb-def6-4f6a-afc7-370208ddf4c9.svg +70 -0
- data/icons/1b5ad11e-b5a6-4efd-8a21-d035714d9239.svg +137 -0
- data/icons/1b5e8b88-ac62-4028-b52e-c6fe76312180.svg +77 -0
FEATURE_BACKLOG.md
CHANGED
|
@@ -56,7 +56,7 @@ Decisions and dependencies for implementation:
|
|
| 56 |
- Implemented: eukaryotic tree with bounded subtrees and exact, expandable “Other lineages” aggregates; NCBI taxonomy with source checksums and dates; merged IDs resolved. Unresolved taxonomy is excluded from the eukaryotic view.
|
| 57 |
- Implemented: English names beside every scientific name, from NCBI Taxonomy common names plus a curated gloss table (`refresh_common_names.py`).
|
| 58 |
- Remaining: connect the taxonomy inventory to accession-level annotation results and distinguish partial/complete base coverage.
|
| 59 |
-
-
|
| 60 |
|
| 61 |
## F003 — Comparison with RefSeq annotations
|
| 62 |
|
|
|
|
| 56 |
- Implemented: eukaryotic tree with bounded subtrees and exact, expandable “Other lineages” aggregates; NCBI taxonomy with source checksums and dates; merged IDs resolved. Unresolved taxonomy is excluded from the eukaryotic view.
|
| 57 |
- Implemented: English names beside every scientific name, from NCBI Taxonomy common names plus a curated gloss table (`refresh_common_names.py`).
|
| 58 |
- Remaining: connect the taxonomy inventory to accession-level annotation results and distinguish partial/complete base coverage.
|
| 59 |
+
- Implemented: clade silhouettes from PhyloPic, filtered to CC0/Public Domain Mark/CC BY at build time (`refresh_icons.py`), with every CC BY artist credited in the interface.
|
| 60 |
|
| 61 |
## F003 — Comparison with RefSeq annotations
|
| 62 |
|
README.md
CHANGED
|
@@ -27,6 +27,8 @@ Click a group to expand its direct lineages into a new column on the right; ever
|
|
| 27 |
|
| 28 |
English names come from `data/common_names.json`, built by `refresh_common_names.py` from NCBI Taxonomy's `genbank common name` and `common name` entries (about 9,200 taxa) plus a curated table of roughly 190 short glosses for the large unranked clades NCBI leaves unnamed. Glosses are plain-language summaries of the living members of a clade, not formal synonyms; the scientific name stays the primary label and a gloss that merely repeats it is dropped at build time. Rebuild it with `python refresh_common_names.py` once `.cache/coverage/taxdump.tar.gz` is present; the build fails if a curated taxid no longer matches its scientific name in the snapshot.
|
| 29 |
|
|
|
|
|
|
|
| 30 |
The graphic uses server-rendered SVG/HTML with scoped styles in `atlas.css` and delegated click/keyboard handlers in `atlas.js`; no external graphics library or image assets are required. Include these files when deploying.
|
| 31 |
|
| 32 |
The annotation workspace shares the atlas palette and typography through `style.py` and `app.css`: warm panels, serif section headings, green controls, and matching tables, downloads, and disclosures. CDS plots use a solid green positive strand and a dashed warm-brown negative strand; binary labels use green. The fixed light palette stays consistent with the landing graphic under either OS color preference. Include both style files when deploying; Gradio 6 receives the theme and stylesheet in `launch()`.
|
|
|
|
| 27 |
|
| 28 |
English names come from `data/common_names.json`, built by `refresh_common_names.py` from NCBI Taxonomy's `genbank common name` and `common name` entries (about 9,200 taxa) plus a curated table of roughly 190 short glosses for the large unranked clades NCBI leaves unnamed. Glosses are plain-language summaries of the living members of a clade, not formal synonyms; the scientific name stays the primary label and a gloss that merely repeats it is dropped at build time. Rebuild it with `python refresh_common_names.py` once `.cache/coverage/taxdump.tar.gz` is present; the build fails if a curated taxid no longer matches its scientific name in the snapshot.
|
| 29 |
|
| 30 |
+
Each group also carries a clade silhouette from [PhyloPic](https://www.phylopic.org), fetched by `refresh_icons.py` into `data/icons/` with the map and credits in `data/icons.json`. The fetcher resolves each taxon's NCBI ID to a PhyloPic node and prefers that node's representative image, falling back to a clade search only when the representative one is not free to use. Both searches exclude NonCommercial and ShareAlike images: NC is unsettled for a Space run by a company, and SA would reach into the repository as soon as an icon were adapted. What ships is CC0, Public Domain Mark and CC BY, stored byte-for-byte as PhyloPic serves it, with every CC BY artist credited in the "Silhouette credits" panel. Icons are fetched for groups with at least 100 assemblies; smaller groups borrow their nearest illustrated ancestor at render time. Gradio serves them as static files through `gr.set_static_paths`, so each is cached once by the browser instead of riding along in every re-render.
|
| 31 |
+
|
| 32 |
The graphic uses server-rendered SVG/HTML with scoped styles in `atlas.css` and delegated click/keyboard handlers in `atlas.js`; no external graphics library or image assets are required. Include these files when deploying.
|
| 33 |
|
| 34 |
The annotation workspace shares the atlas palette and typography through `style.py` and `app.css`: warm panels, serif section headings, green controls, and matching tables, downloads, and disclosures. CDS plots use a solid green positive strand and a dashed warm-brown negative strand; binary labels use green. The fixed light palette stays consistent with the landing graphic under either OS color preference. Include both style files when deploying; Gradio 6 receives the theme and stylesheet in `launch()`.
|
app.css
CHANGED
|
@@ -39,11 +39,11 @@
|
|
| 39 |
/* Full-width navigation: one equal segment for each view. */
|
| 40 |
.gradio-container { width:100%!important; min-width:0!important; box-sizing:border-box; }
|
| 41 |
#atlas-navigation { border:0; background:transparent; min-width:0; max-width:100%; }
|
| 42 |
-
#atlas-navigation > .tab-wrapper { width:100%; height:auto!important; min-height:
|
| 43 |
-
#atlas-navigation > .tab-wrapper > .tab-container { display:
|
| 44 |
-
#atlas-navigation > .tab-wrapper > .tab-container > button { display:flex!important; align-items:center; justify-content:
|
| 45 |
-
#atlas-navigation > .tab-wrapper > .tab-container > button:hover { background:
|
| 46 |
-
#atlas-navigation > .tab-wrapper > .tab-container > button[aria-selected="true"] { background:#
|
| 47 |
#atlas-navigation > .tab-wrapper::before, #atlas-navigation > .tab-wrapper::after,
|
| 48 |
#atlas-navigation > .tab-wrapper > .tab-container::before, #atlas-navigation > .tab-wrapper > .tab-container::after,
|
| 49 |
#atlas-navigation > .tab-wrapper > .tab-container > button::before, #atlas-navigation > .tab-wrapper > .tab-container > button::after { content:none!important; display:none!important; }
|
|
@@ -54,6 +54,6 @@
|
|
| 54 |
.database-heading h1 { color:#173c30; font:400 clamp(32px,5vw,48px)/1.1 Georgia,'Times New Roman',serif; letter-spacing:-1px; margin:0 0 12px; }
|
| 55 |
.database-heading p { color:#647467; font:14px/1.6 Arial,Helvetica,sans-serif; margin:0; }
|
| 56 |
@media(max-width:700px) {
|
| 57 |
-
#atlas-navigation > .tab-wrapper > .tab-container { gap:
|
| 58 |
-
#atlas-navigation > .tab-wrapper > .tab-container > button { font-size:
|
| 59 |
}
|
|
|
|
| 39 |
/* Full-width navigation: one equal segment for each view. */
|
| 40 |
.gradio-container { width:100%!important; min-width:0!important; box-sizing:border-box; }
|
| 41 |
#atlas-navigation { border:0; background:transparent; min-width:0; max-width:100%; }
|
| 42 |
+
#atlas-navigation > .tab-wrapper { width:100%; height:auto!important; min-height:0; border:0!important; box-shadow:none!important; margin:0 0 18px; padding:0; }
|
| 43 |
+
#atlas-navigation > .tab-wrapper > .tab-container { display:flex!important; justify-content:flex-start; gap:26px; width:100%!important; height:auto!important; box-sizing:border-box; border:0!important; border-bottom:1px solid #dbe3d3!important; border-radius:0; padding:0; margin:0; background:transparent; box-shadow:none!important; }
|
| 44 |
+
#atlas-navigation > .tab-wrapper > .tab-container > button { display:inline-flex!important; align-items:center; justify-content:flex-start; width:auto; min-width:0; min-height:0; height:auto!important; box-sizing:border-box; padding:0 2px 11px; margin:0!important; border:0!important; border-bottom:2px solid transparent!important; border-radius:0; box-shadow:none!important; background:transparent; color:#6c7d6a; font:600 14px/1.4 Arial,Helvetica,sans-serif; white-space:nowrap; text-align:left; text-decoration:none!important; transition:color .15s; }
|
| 45 |
+
#atlas-navigation > .tab-wrapper > .tab-container > button:hover { background:transparent; color:#173c30; }
|
| 46 |
+
#atlas-navigation > .tab-wrapper > .tab-container > button[aria-selected="true"] { background:transparent; color:#173c30; border-bottom-color:#245d45!important; }
|
| 47 |
#atlas-navigation > .tab-wrapper::before, #atlas-navigation > .tab-wrapper::after,
|
| 48 |
#atlas-navigation > .tab-wrapper > .tab-container::before, #atlas-navigation > .tab-wrapper > .tab-container::after,
|
| 49 |
#atlas-navigation > .tab-wrapper > .tab-container > button::before, #atlas-navigation > .tab-wrapper > .tab-container > button::after { content:none!important; display:none!important; }
|
|
|
|
| 54 |
.database-heading h1 { color:#173c30; font:400 clamp(32px,5vw,48px)/1.1 Georgia,'Times New Roman',serif; letter-spacing:-1px; margin:0 0 12px; }
|
| 55 |
.database-heading p { color:#647467; font:14px/1.6 Arial,Helvetica,sans-serif; margin:0; }
|
| 56 |
@media(max-width:700px) {
|
| 57 |
+
#atlas-navigation > .tab-wrapper > .tab-container { gap:18px; }
|
| 58 |
+
#atlas-navigation > .tab-wrapper > .tab-container > button { font-size:13px; padding:0 1px 9px; }
|
| 59 |
}
|
atlas.css
CHANGED
|
@@ -37,12 +37,15 @@
|
|
| 37 |
.tree-node.is-selected .bar-outline { stroke:#173c30; stroke-width:1.5; }
|
| 38 |
.tree-node.is-sibling { opacity:.62; transition:opacity .15s; }
|
| 39 |
.tree-node.is-sibling:hover,.tree-node.is-sibling:focus { opacity:1; }
|
|
|
|
|
|
|
|
|
|
| 40 |
.tree-label,.tree-english,.tree-count { paint-order:stroke; stroke:#f7f8f0; stroke-width:4px; stroke-linejoin:round; }
|
| 41 |
.tree-label { font:600 13px Arial,Helvetica,sans-serif; fill:#254735; transition:fill .15s; }
|
| 42 |
.tree-node.is-selected .tree-label { font-weight:700; fill:#173c30; }
|
| 43 |
.tree-english { font:italic 11.5px Georgia,'Times New Roman',serif; fill:#5d7a66; }
|
| 44 |
.tree-count { font:11px Arial,Helvetica,sans-serif; fill:#697966; }
|
| 45 |
-
.tree-node:not(.is-direct):hover .tree-label,.tree-node:focus .tree-label { fill:#0f2e22;
|
| 46 |
.tree-node:not(.is-direct):hover .bar-outline { stroke:#287557; stroke-width:2; }
|
| 47 |
.atlas-footer { display:flex; align-items:center; flex-wrap:wrap; gap:15px; justify-content:space-between; border-top:1px solid #dde4d5; padding-top:14px; color:#6c7a66; font-size:11px; line-height:1.6; }
|
| 48 |
.atlas-legend { display:flex; gap:7px; align-items:center; }
|
|
|
|
| 37 |
.tree-node.is-selected .bar-outline { stroke:#173c30; stroke-width:1.5; }
|
| 38 |
.tree-node.is-sibling { opacity:.62; transition:opacity .15s; }
|
| 39 |
.tree-node.is-sibling:hover,.tree-node.is-sibling:focus { opacity:1; }
|
| 40 |
+
.tree-icon { opacity:.62; transition:opacity .15s; }
|
| 41 |
+
.tree-node.is-selected .tree-icon { opacity:.85; }
|
| 42 |
+
.tree-node:not(.is-direct):hover .tree-icon { opacity:.9; }
|
| 43 |
.tree-label,.tree-english,.tree-count { paint-order:stroke; stroke:#f7f8f0; stroke-width:4px; stroke-linejoin:round; }
|
| 44 |
.tree-label { font:600 13px Arial,Helvetica,sans-serif; fill:#254735; transition:fill .15s; }
|
| 45 |
.tree-node.is-selected .tree-label { font-weight:700; fill:#173c30; }
|
| 46 |
.tree-english { font:italic 11.5px Georgia,'Times New Roman',serif; fill:#5d7a66; }
|
| 47 |
.tree-count { font:11px Arial,Helvetica,sans-serif; fill:#697966; }
|
| 48 |
+
.tree-node:not(.is-direct):hover .tree-label,.tree-node:focus .tree-label { fill:#0f2e22; }
|
| 49 |
.tree-node:not(.is-direct):hover .bar-outline { stroke:#287557; stroke-width:2; }
|
| 50 |
.atlas-footer { display:flex; align-items:center; flex-wrap:wrap; gap:15px; justify-content:space-between; border-top:1px solid #dde4d5; padding-top:14px; color:#6c7a66; font-size:11px; line-height:1.6; }
|
| 51 |
.atlas-legend { display:flex; gap:7px; align-items:center; }
|
data/icons.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
data/icons/00508809-a509-4330-9e3d-9d3b54248667.svg
ADDED
|
|
data/icons/0192754b-c8ab-43c0-a475-1a2ad0cfd202.svg
ADDED
|
|
data/icons/01a21193-6599-463c-a5f0-75b6fe03189d.svg
ADDED
|
|
data/icons/02974d7f-f93c-4c59-b847-3b080368c168.svg
ADDED
|
|
data/icons/030163a0-eddc-4bf3-aac2-5e7594124820.svg
ADDED
|
|
data/icons/03d2b502-f7d4-40a9-8be8-b31210286be8.svg
ADDED
|
|
data/icons/0416cb50-2c82-42ac-bd17-ef1b6800ef65.svg
ADDED
|
|
data/icons/04f4fb98-4dbc-424e-81ac-85226becd06b.svg
ADDED
|
|
data/icons/065734f1-db68-4925-81fb-5d44c363b60d.svg
ADDED
|
|
data/icons/07778806-5dcf-4524-9d93-8ead16a51bf9.svg
ADDED
|
|
data/icons/077c76df-f224-4eb1-9c92-6049fc8f8b3e.svg
ADDED
|
|
data/icons/07a8ddc3-6440-4ca8-80e6-ccdaa988a968.svg
ADDED
|
|
data/icons/0950aa57-4538-4fa1-b1f5-c4634f1c695c.svg
ADDED
|
|
data/icons/0953dd54-b97b-4cfd-8944-bb3f45f93466.svg
ADDED
|
|
data/icons/0a61962f-7d02-435c-aca0-d2fd0b757fc3.svg
ADDED
|
|
data/icons/0be250dd-b56a-4ff5-97cc-ec6430e4ea5c.svg
ADDED
|
|
data/icons/0be4e244-8322-444e-a75c-8503c16e10d7.svg
ADDED
|
|
data/icons/0c391d43-30a5-4077-bdcb-fbb80f5d13e6.svg
ADDED
|
|
data/icons/0cd6cc9f-683c-470e-a4a6-3b68beb826fa.svg
ADDED
|
|
data/icons/0d386ce5-28e2-407c-b985-c1aac350bd1a.svg
ADDED
|
|
data/icons/0ec7e6e6-e115-450a-b346-c40685ed3b1a.svg
ADDED
|
|
data/icons/0fde2bb6-0472-4273-bf46-2d6073fa8fbc.svg
ADDED
|
|
data/icons/12b88747-2892-454a-a882-c9c7e5f2c715.svg
ADDED
|
|
data/icons/131051a0-9053-4295-a90a-380a00170784.svg
ADDED
|
|
data/icons/13a4d650-bf9c-46ca-a4d1-b3ed8c8dab41.svg
ADDED
|
|
data/icons/13c1c9de-bc85-47b8-9411-f9aaf35a908c.svg
ADDED
|
|
data/icons/140c1df2-7f74-4f4d-8deb-9138aa956be5.svg
ADDED
|
|
data/icons/14269801-89fe-405c-a425-2286c54ee60d.svg
ADDED
|
|
data/icons/165900f9-969b-4ffa-b2cf-2a0a099b34a4.svg
ADDED
|
|
data/icons/16735c42-c7d7-4394-a2c5-9493129cdf1c.svg
ADDED
|
|
data/icons/1701c916-c68a-4807-8666-c4b8b4bc6656.svg
ADDED
|
|
data/icons/17172a50-685f-4f39-a0d1-c0495e33a2d0.svg
ADDED
|
|
data/icons/1776342b-d628-48f2-a292-3e8479ff95b4.svg
ADDED
|
|
data/icons/179a2862-cb58-4a14-abc6-8fdf73c23364.svg
ADDED
|
|
data/icons/17a3052d-8762-4aa4-9773-6718fec220ee.svg
ADDED
|
|
data/icons/181e0252-d904-4e44-b53d-8b119a4c4e20.svg
ADDED
|
|
data/icons/18af6753-2f5b-49d2-a28d-4cc1b7deaf6f.svg
ADDED
|
|
data/icons/196f946f-f29f-4ca3-bdb2-5a8c5a036fd4.svg
ADDED
|
|
data/icons/198fab1c-ac89-40c1-8243-8615c4133d80.svg
ADDED
|
|
data/icons/199829d3-183a-4eb3-a35a-a8705d28cb56.svg
ADDED
|
|
data/icons/19f1fc0c-aab8-4482-aad4-092987e59748.svg
ADDED
|
|
data/icons/19ff2bcf-7b7a-4d38-b3af-118aa3b4ae48.svg
ADDED
|
|
data/icons/1b0ba0bb-def6-4f6a-afc7-370208ddf4c9.svg
ADDED
|
|
data/icons/1b5ad11e-b5a6-4efd-8a21-d035714d9239.svg
ADDED
|
|
data/icons/1b5e8b88-ac62-4028-b52e-c6fe76312180.svg
ADDED
|
|