Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
135fb5650b | ||
|
|
1de4a0943e | ||
|
|
b5e33784e6 |
@@ -1,5 +1,11 @@
|
||||
# Changelog
|
||||
|
||||
## v1.8.3-alpha (2026-08-14)
|
||||
|
||||
- **The network map on TVs: no more blank page, no more frozen page — and it moves again.** The map's entrance animation needed a smoothness that TV kiosk hardware can't always deliver, so the page could sit blank until a refresh; the previous fix cured the freeze by stopping the animation entirely, which went too far. Now the map appears instantly with everything already in place, then resumes its calm orbital motion at a gentler pace suited to TVs. Resizing or rotating any screen also redraws the map properly instead of leaving it tiny, stretched, or empty.
|
||||
- **The dashboard's corner logo is back to normal.** The new glossy paint finish was meant for the big emblem on the screensaver, intro, and login screens — it had quietly spread to the small logo in the dashboard header, where it looked wrong. Each screen now gets exactly the treatment intended for it.
|
||||
- **App icons no longer vanish in My Apps.** The freshly restyled Alby Hub and phoenixd icons could render as blank squares in some views — a subtlety in how the icon files declared their size. Fixed at the source, and the icon tool app developers use now produces immune files.
|
||||
|
||||
## v1.8.2-alpha (2026-08-13)
|
||||
|
||||
- **An app that can't be shown inside the dashboard now becomes a tab app by itself.** A few apps refuse to render inside another page no matter what — they break out with their own code or insist on owning the whole browser window. Opening one used to mean staring at a grey pane. Now the dashboard notices, offers the app in its own tab, and remembers: from then on that app's button opens a tab directly (with the little launch icon that tab apps carry), first click, every time. If a later update makes the app embeddable after all, the dashboard notices that too and goes back to embedding it.
|
||||
|
||||
Generated
+1
-1
@@ -104,7 +104,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "archipelago"
|
||||
version = "1.8.2-alpha"
|
||||
version = "1.8.3-alpha"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"archipelago-container",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "archipelago"
|
||||
version = "1.8.2-alpha"
|
||||
version = "1.8.3-alpha"
|
||||
edition = "2021"
|
||||
license.workspace = true
|
||||
description = "Archipelago Bitcoin Node OS - Native backend"
|
||||
|
||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "neode-ui",
|
||||
"version": "1.8.2-alpha",
|
||||
"version": "1.8.3-alpha",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "neode-ui",
|
||||
"version": "1.8.2-alpha",
|
||||
"version": "1.8.3-alpha",
|
||||
"dependencies": {
|
||||
"@scure/bip39": "^2.2.0",
|
||||
"@types/dompurify": "^3.0.5",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "neode-ui",
|
||||
"private": true,
|
||||
"version": "1.8.2-alpha",
|
||||
"version": "1.8.3-alpha",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"start": "./start-dev.sh",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 100 100">
|
||||
<!-- normalized by scripts/normalize-app-icon.py: margin=0.12 per side -->
|
||||
<svg x="12.000" y="12.000" width="76.000" height="76.000" viewBox="0 0 8000 8000" preserveAspectRatio="xMidYMid meet">
|
||||
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 8000 8000">
|
||||
|
||||
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.7 KiB |
@@ -1,4 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 100 100">
|
||||
<!-- normalized by scripts/normalize-app-icon.py: margin=0.12 per side -->
|
||||
<svg x="12.000" y="12.000" width="76.000" height="76.000" viewBox="0 0 94 94" preserveAspectRatio="xMidYMid meet">
|
||||
<svg viewBox="0 0 94 94" id="vector" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div class="logo-gradient-border screensaver-logo-cycle relative w-48 h-48 sm:w-64 sm:h-64 md:w-80 md:h-80 flex items-center justify-center overflow-hidden">
|
||||
<div class="logo-gradient-border logo-gloss screensaver-logo-cycle relative w-48 h-48 sm:w-64 sm:h-64 md:w-80 md:h-80 flex items-center justify-center overflow-hidden">
|
||||
<!-- Squares logo -->
|
||||
<div class="screensaver-logo-squares absolute inset-[3px] flex items-center justify-center">
|
||||
<AnimatedLogo size="xl" no-border fit />
|
||||
|
||||
@@ -878,7 +878,9 @@ function tick(_time: number, deltaMS: number) {
|
||||
}
|
||||
|
||||
function attachTicker() {
|
||||
if (tickerAttached || staticMode) return
|
||||
// Kiosks run staticMode for PLACEMENT (instant, intro-free) but still get
|
||||
// the calm orbit — half-rate via the kioskLowPower frame-skip in tick().
|
||||
if (tickerAttached || (staticMode && !kioskLowPower)) return
|
||||
gsap.ticker.add(tick)
|
||||
tickerAttached = true
|
||||
}
|
||||
@@ -1179,17 +1181,19 @@ function measure() {
|
||||
}
|
||||
// Resize: snap to the current mode's fit (no tween — tracks the drag)
|
||||
applyMode(viewMode.value, false)
|
||||
// No ticker (reduced-motion) means nobody repaints after this resize —
|
||||
// without an explicit render the map keeps its stale (possibly zero-size)
|
||||
// projection: the "loads blank / wrong scale until refresh" bug.
|
||||
if (built && !tickerAttached) render()
|
||||
}
|
||||
|
||||
function initialBuild() {
|
||||
// Kiosk TVs get the fully static map: no entrance animation, no ticker.
|
||||
// The GSAP intro needs healthy rAF delivery to ever reach opacity 1 — on
|
||||
// a paint-starved kiosk it stalls and the screen reads as BLANK until a
|
||||
// lucky refresh (framework-pt, 2026-08-14). Half-rate ticking (below)
|
||||
// helped but any continuous SVG animation is still the single biggest
|
||||
// load on the kiosk's compositor, and at TV distance the still map loses
|
||||
// nothing. Everything lands in place immediately, graph updates apply
|
||||
// instantly, and the 2D/3D toggle still works.
|
||||
// Kiosk TVs take the static PLACEMENT path (the GSAP entrance intro needs
|
||||
// healthy rAF delivery to reach opacity 1 — on a paint-starved kiosk it
|
||||
// stalls and the screen reads as BLANK until a lucky refresh,
|
||||
// framework-pt 2026-08-14) but keep the calm orbital motion: the ticker
|
||||
// re-attaches below at half rate. Fully-static-everything was tried and
|
||||
// rejected — it also killed the animation on screens that could carry it.
|
||||
staticMode = prefersReducedMotion() || kioskLowPower
|
||||
built = true
|
||||
applyGraph()
|
||||
@@ -1208,6 +1212,8 @@ function initialBuild() {
|
||||
if (staticMode) {
|
||||
introPlayed = true
|
||||
playIntro() // static branch: everything lands in place
|
||||
attachTicker() // no-op for reduced-motion; kiosks resume the calm orbit
|
||||
render() // paint the landed state now — nothing else repaints until a tick
|
||||
return
|
||||
}
|
||||
attachTicker()
|
||||
|
||||
@@ -1135,13 +1135,15 @@ html.controller-nav [data-controller-container]:focus {
|
||||
lower reflection arc, bottom depth vignette, paint-black base; inset
|
||||
rim lights; and a curved liquid "window streak" on ::before (under
|
||||
the badge's z-1 content, above the paint). Revert: delete this block. */
|
||||
.logo-gradient-border {
|
||||
.logo-gradient-border.logo-gloss,
|
||||
.tap-to-start-logo .logo-gradient-border {
|
||||
background: none;
|
||||
box-shadow: none;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
.logo-gradient-border::after {
|
||||
.logo-gradient-border.logo-gloss::after,
|
||||
.tap-to-start-logo .logo-gradient-border::after {
|
||||
inset: 0;
|
||||
/* Dense intermediate stops + a fine turbulence grain (top layer,
|
||||
overlay-blended) dither the near-black falloffs — without them the
|
||||
@@ -1160,7 +1162,8 @@ html.controller-nav [data-controller-container]:focus {
|
||||
inset 0 0 0 1px rgba(255,242,212,0.08),
|
||||
0 12px 34px rgba(0,0,0,0.65);
|
||||
}
|
||||
.logo-gradient-border::before {
|
||||
.logo-gradient-border.logo-gloss::before,
|
||||
.tap-to-start-logo .logo-gradient-border::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
left: 8%;
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
>
|
||||
<!-- Logo - half in, half out of container -->
|
||||
<div class="absolute -top-10 left-1/2 -translate-x-1/2 z-10">
|
||||
<div class="logo-gradient-border w-20 h-20">
|
||||
<div class="logo-gradient-border logo-gloss w-20 h-20">
|
||||
<AnimatedLogo no-border fit />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<div class="glass-card p-8 pt-16 sm:p-12 sm:pt-20 text-center relative overflow-visible onb-card">
|
||||
<!-- Logo - half in, half out of container -->
|
||||
<div class="absolute -top-8 sm:-top-10 left-0 right-0 flex justify-center z-10 onb-logo">
|
||||
<div class="logo-gradient-border w-16 h-16 sm:w-20 sm:h-20">
|
||||
<div class="logo-gradient-border logo-gloss w-16 h-16 sm:w-20 sm:h-20">
|
||||
<AnimatedLogo no-border fit />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -362,6 +362,18 @@ init()
|
||||
</button>
|
||||
</div>
|
||||
<div class="overflow-y-auto flex-1 min-h-0 space-y-6 pr-1">
|
||||
<!-- v1.8.3-alpha -->
|
||||
<div>
|
||||
<div class="flex items-center gap-2 mb-3">
|
||||
<span class="text-xs font-mono px-2 py-0.5 rounded bg-orange-500/20 text-orange-300">v1.8.3-alpha</span>
|
||||
<span class="text-xs text-white/40">August 14, 2026</span>
|
||||
</div>
|
||||
<div class="space-y-3 text-sm text-white/80 pl-3 border-l border-white/10">
|
||||
<p>**The network map on TVs: no more blank page, no more frozen page — and it moves again.** The map's entrance animation needed a smoothness that TV kiosk hardware can't always deliver, so the page could sit blank until a refresh; the previous fix cured the freeze by stopping the animation entirely, which went too far. Now the map appears instantly with everything already in place, then resumes its calm orbital motion at a gentler pace suited to TVs. Resizing or rotating any screen also redraws the map properly instead of leaving it tiny, stretched, or empty.</p>
|
||||
<p>**The dashboard's corner logo is back to normal.** The new glossy paint finish was meant for the big emblem on the screensaver, intro, and login screens — it had quietly spread to the small logo in the dashboard header, where it looked wrong. Each screen now gets exactly the treatment intended for it.</p>
|
||||
<p>**App icons no longer vanish in My Apps.** The freshly restyled Alby Hub and phoenixd icons could render as blank squares in some views — a subtlety in how the icon files declared their size. Fixed at the source, and the icon tool app developers use now produces immune files.</p>
|
||||
</div>
|
||||
</div>
|
||||
<!-- v1.8.2-alpha -->
|
||||
<div>
|
||||
<div class="flex items-center gap-2 mb-3">
|
||||
|
||||
+16
-16
@@ -1,29 +1,29 @@
|
||||
{
|
||||
"changelog": [
|
||||
"**An app that can't be shown inside the dashboard now becomes a tab app by itself.** A few apps refuse to render inside another page no matter what — they break out with their own code or insist on owning the whole browser window. Opening one used to mean staring at a grey pane. Now the dashboard notices, offers the app in its own tab, and remembers: from then on that app's button opens a tab directly (with the little launch icon that tab apps carry), first click, every time. If a later update makes the app embeddable after all, the dashboard notices that too and goes back to embedding it.",
|
||||
"**The logo emblem got its glossy black paint finish — properly this time.** The circle behind the A on the screensaver, intro, and login now wears a deep wet-paint look: warm light blooming from the top edge, fine grain so the dark tones stay smooth instead of banding, and no more ring border. (An earlier rougher version of this experiment briefly shipped by accident and then vanished depending on which screen you were on — this is the finished, deliberate one, everywhere.)",
|
||||
"**New app icons now match the store's look, on every screen.** Alby Hub and phoenixd arrived with edge-to-edge logos that ignored the breathing room every other app icon has, and the app detail page skipped the icon backdrop entirely. Both icons are re-set on the standard canvas, the detail page now applies the same icon treatment as the store tiles, and app developers get a one-command tool that puts any logo onto the house canvas automatically."
|
||||
"**The network map on TVs: no more blank page, no more frozen page — and it moves again.** The map's entrance animation needed a smoothness that TV kiosk hardware can't always deliver, so the page could sit blank until a refresh; the previous fix cured the freeze by stopping the animation entirely, which went too far. Now the map appears instantly with everything already in place, then resumes its calm orbital motion at a gentler pace suited to TVs. Resizing or rotating any screen also redraws the map properly instead of leaving it tiny, stretched, or empty.",
|
||||
"**The dashboard's corner logo is back to normal.** The new glossy paint finish was meant for the big emblem on the screensaver, intro, and login screens — it had quietly spread to the small logo in the dashboard header, where it looked wrong. Each screen now gets exactly the treatment intended for it.",
|
||||
"**App icons no longer vanish in My Apps.** The freshly restyled Alby Hub and phoenixd icons could render as blank squares in some views — a subtlety in how the icon files declared their size. Fixed at the source, and the icon tool app developers use now produces immune files."
|
||||
],
|
||||
"components": [
|
||||
{
|
||||
"current_version": "1.8.2-alpha",
|
||||
"download_url": "https://source.archipelago-foundation.org/lfg2025/archy/releases/download/v1.8.2-alpha/archipelago",
|
||||
"current_version": "1.8.3-alpha",
|
||||
"download_url": "https://source.archipelago-foundation.org/lfg2025/archy/releases/download/v1.8.3-alpha/archipelago",
|
||||
"name": "archipelago",
|
||||
"new_version": "1.8.2-alpha",
|
||||
"sha256": "505a456d94a17ef336b8573e1423edc2295463e603b0af89131144297cffd5ca",
|
||||
"size_bytes": 59898960
|
||||
"new_version": "1.8.3-alpha",
|
||||
"sha256": "23b608bfce575212edb873ded3e125505f42be0db6dc06ce5f9c1e51c232c22d",
|
||||
"size_bytes": 59900696
|
||||
},
|
||||
{
|
||||
"current_version": "1.8.2-alpha",
|
||||
"download_url": "https://source.archipelago-foundation.org/lfg2025/archy/releases/download/v1.8.2-alpha/archipelago-frontend-1.8.2-alpha.tar.gz",
|
||||
"name": "archipelago-frontend-1.8.2-alpha.tar.gz",
|
||||
"new_version": "1.8.2-alpha",
|
||||
"sha256": "531ea4c5fc6c1116a3c09e0fc81f16acb91a86a0ad25fb4883de499713c530da",
|
||||
"size_bytes": 97617354
|
||||
"current_version": "1.8.3-alpha",
|
||||
"download_url": "https://source.archipelago-foundation.org/lfg2025/archy/releases/download/v1.8.3-alpha/archipelago-frontend-1.8.3-alpha.tar.gz",
|
||||
"name": "archipelago-frontend-1.8.3-alpha.tar.gz",
|
||||
"new_version": "1.8.3-alpha",
|
||||
"sha256": "13ca772e9a36c266b67e6eff2d51366616cdbedeab3a05ba5eba340332d3d6d4",
|
||||
"size_bytes": 97615528
|
||||
}
|
||||
],
|
||||
"release_date": "2026-08-14",
|
||||
"signature": "e2b5c85707121444aff6ca2150fe04dd7d73ef4f9a183eb962986554f34a20128f087c138250a42043801380f50f2e0aebe48869d1577d0171dfe4cf0ff0ac08",
|
||||
"signature": "35d5f56ef77cda1866051a3ff06f6e09ff0a23ac7b000a1ac4cf24e04cecabff00be7f3e240fc82ec605bff80c5690c55c296a300018562940d71ffc5df26c00",
|
||||
"signed_by": "did:key:z6Mkfu5LT8d4DjETtrkATvHh9Dvcbnr7zBCUwfau8Sw7DLWT",
|
||||
"version": "1.8.2-alpha"
|
||||
"version": "1.8.3-alpha"
|
||||
}
|
||||
|
||||
+16
-16
@@ -1,29 +1,29 @@
|
||||
{
|
||||
"changelog": [
|
||||
"**An app that can't be shown inside the dashboard now becomes a tab app by itself.** A few apps refuse to render inside another page no matter what — they break out with their own code or insist on owning the whole browser window. Opening one used to mean staring at a grey pane. Now the dashboard notices, offers the app in its own tab, and remembers: from then on that app's button opens a tab directly (with the little launch icon that tab apps carry), first click, every time. If a later update makes the app embeddable after all, the dashboard notices that too and goes back to embedding it.",
|
||||
"**The logo emblem got its glossy black paint finish — properly this time.** The circle behind the A on the screensaver, intro, and login now wears a deep wet-paint look: warm light blooming from the top edge, fine grain so the dark tones stay smooth instead of banding, and no more ring border. (An earlier rougher version of this experiment briefly shipped by accident and then vanished depending on which screen you were on — this is the finished, deliberate one, everywhere.)",
|
||||
"**New app icons now match the store's look, on every screen.** Alby Hub and phoenixd arrived with edge-to-edge logos that ignored the breathing room every other app icon has, and the app detail page skipped the icon backdrop entirely. Both icons are re-set on the standard canvas, the detail page now applies the same icon treatment as the store tiles, and app developers get a one-command tool that puts any logo onto the house canvas automatically."
|
||||
"**The network map on TVs: no more blank page, no more frozen page — and it moves again.** The map's entrance animation needed a smoothness that TV kiosk hardware can't always deliver, so the page could sit blank until a refresh; the previous fix cured the freeze by stopping the animation entirely, which went too far. Now the map appears instantly with everything already in place, then resumes its calm orbital motion at a gentler pace suited to TVs. Resizing or rotating any screen also redraws the map properly instead of leaving it tiny, stretched, or empty.",
|
||||
"**The dashboard's corner logo is back to normal.** The new glossy paint finish was meant for the big emblem on the screensaver, intro, and login screens — it had quietly spread to the small logo in the dashboard header, where it looked wrong. Each screen now gets exactly the treatment intended for it.",
|
||||
"**App icons no longer vanish in My Apps.** The freshly restyled Alby Hub and phoenixd icons could render as blank squares in some views — a subtlety in how the icon files declared their size. Fixed at the source, and the icon tool app developers use now produces immune files."
|
||||
],
|
||||
"components": [
|
||||
{
|
||||
"current_version": "1.8.2-alpha",
|
||||
"download_url": "https://source.archipelago-foundation.org/lfg2025/archy/releases/download/v1.8.2-alpha/archipelago",
|
||||
"current_version": "1.8.3-alpha",
|
||||
"download_url": "https://source.archipelago-foundation.org/lfg2025/archy/releases/download/v1.8.3-alpha/archipelago",
|
||||
"name": "archipelago",
|
||||
"new_version": "1.8.2-alpha",
|
||||
"sha256": "505a456d94a17ef336b8573e1423edc2295463e603b0af89131144297cffd5ca",
|
||||
"size_bytes": 59898960
|
||||
"new_version": "1.8.3-alpha",
|
||||
"sha256": "23b608bfce575212edb873ded3e125505f42be0db6dc06ce5f9c1e51c232c22d",
|
||||
"size_bytes": 59900696
|
||||
},
|
||||
{
|
||||
"current_version": "1.8.2-alpha",
|
||||
"download_url": "https://source.archipelago-foundation.org/lfg2025/archy/releases/download/v1.8.2-alpha/archipelago-frontend-1.8.2-alpha.tar.gz",
|
||||
"name": "archipelago-frontend-1.8.2-alpha.tar.gz",
|
||||
"new_version": "1.8.2-alpha",
|
||||
"sha256": "531ea4c5fc6c1116a3c09e0fc81f16acb91a86a0ad25fb4883de499713c530da",
|
||||
"size_bytes": 97617354
|
||||
"current_version": "1.8.3-alpha",
|
||||
"download_url": "https://source.archipelago-foundation.org/lfg2025/archy/releases/download/v1.8.3-alpha/archipelago-frontend-1.8.3-alpha.tar.gz",
|
||||
"name": "archipelago-frontend-1.8.3-alpha.tar.gz",
|
||||
"new_version": "1.8.3-alpha",
|
||||
"sha256": "13ca772e9a36c266b67e6eff2d51366616cdbedeab3a05ba5eba340332d3d6d4",
|
||||
"size_bytes": 97615528
|
||||
}
|
||||
],
|
||||
"release_date": "2026-08-14",
|
||||
"signature": "e2b5c85707121444aff6ca2150fe04dd7d73ef4f9a183eb962986554f34a20128f087c138250a42043801380f50f2e0aebe48869d1577d0171dfe4cf0ff0ac08",
|
||||
"signature": "35d5f56ef77cda1866051a3ff06f6e09ff0a23ac7b000a1ac4cf24e04cecabff00be7f3e240fc82ec605bff80c5690c55c296a300018562940d71ffc5df26c00",
|
||||
"signed_by": "did:key:z6Mkfu5LT8d4DjETtrkATvHh9Dvcbnr7zBCUwfau8Sw7DLWT",
|
||||
"version": "1.8.2-alpha"
|
||||
"version": "1.8.3-alpha"
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ def main() -> int:
|
||||
inner = re.sub(r"^\s*<\?xml[^>]*\?>\s*", "", svg)
|
||||
|
||||
out = (
|
||||
f'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 {canvas:g} {canvas:g}">\n'
|
||||
f'<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 {canvas:g} {canvas:g}">\n'
|
||||
f' <!-- normalized by scripts/normalize-app-icon.py: margin={args.margin:g} per side -->\n'
|
||||
f' <svg x="{x:.3f}" y="{y:.3f}" width="{scale_w:.3f}" height="{scale_h:.3f}" '
|
||||
f'viewBox="{inner_viewbox}" preserveAspectRatio="xMidYMid meet">\n'
|
||||
|
||||
Reference in New Issue
Block a user