Compare commits

..
Author SHA1 Message Date
archipelago 135fb5650b chore: release v1.8.3-alpha
Demo images / Build & push demo images (push) Successful in 3m43s
2026-08-14 06:34:47 -04:00
archipelagoandClaude Fable 5 1de4a0943e docs(changelog): curate v1.8.3-alpha notes + What's New block
Demo images / Build & push demo images (push) Successful in 3m42s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 05:13:43 -04:00
archipelagoandClaude Fable 5 b5e33784e6 fix(ui): kiosk map animates again + paints on resize; gloss scoped; icons get intrinsic size
Demo images / Build & push demo images (push) Successful in 3m42s
- NetworkMap3D: kiosks keep static PLACEMENT (the rAF-fragile intro was
  the blank-screen cause) but re-attach the half-rate ticker — the calm
  orbit is back; and measure() now renders explicitly when no ticker runs,
  so resizes repaint instead of leaving a stale/blank/mis-scaled
  projection (also fixes reduced-motion users on any screen).
- Gloss v3 scoped to .logo-gloss opt-in (screensaver, intro, login,
  splash tap-logo) — it had leaked onto every logo-gradient-border user,
  including the dashboard header, via AnimatedLogo's default border.
- normalize-app-icon.py output now carries intrinsic 512x512 dimensions:
  a viewBox-only SVG collapses to nothing in auto-sized tiles (the
  'transparent icon in My Apps' report); both app icons regenerated.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 05:11:54 -04:00
16 changed files with 82 additions and 55 deletions
+6
View File
@@ -1,5 +1,11 @@
# Changelog # 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) ## 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. - **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.
+1 -1
View File
@@ -104,7 +104,7 @@ dependencies = [
[[package]] [[package]]
name = "archipelago" name = "archipelago"
version = "1.8.2-alpha" version = "1.8.3-alpha"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"archipelago-container", "archipelago-container",
+1 -1
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "archipelago" name = "archipelago"
version = "1.8.2-alpha" version = "1.8.3-alpha"
edition = "2021" edition = "2021"
license.workspace = true license.workspace = true
description = "Archipelago Bitcoin Node OS - Native backend" description = "Archipelago Bitcoin Node OS - Native backend"
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "neode-ui", "name": "neode-ui",
"version": "1.8.2-alpha", "version": "1.8.3-alpha",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "neode-ui", "name": "neode-ui",
"version": "1.8.2-alpha", "version": "1.8.3-alpha",
"dependencies": { "dependencies": {
"@scure/bip39": "^2.2.0", "@scure/bip39": "^2.2.0",
"@types/dompurify": "^3.0.5", "@types/dompurify": "^3.0.5",
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "neode-ui", "name": "neode-ui",
"private": true, "private": true,
"version": "1.8.2-alpha", "version": "1.8.3-alpha",
"type": "module", "type": "module",
"scripts": { "scripts": {
"start": "./start-dev.sh", "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 --> <!-- 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 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"> <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 --> <!-- 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 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"> <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 -1
View File
@@ -1,5 +1,5 @@
<template> <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 --> <!-- Squares logo -->
<div class="screensaver-logo-squares absolute inset-[3px] flex items-center justify-center"> <div class="screensaver-logo-squares absolute inset-[3px] flex items-center justify-center">
<AnimatedLogo size="xl" no-border fit /> <AnimatedLogo size="xl" no-border fit />
@@ -878,7 +878,9 @@ function tick(_time: number, deltaMS: number) {
} }
function attachTicker() { 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) gsap.ticker.add(tick)
tickerAttached = true tickerAttached = true
} }
@@ -1179,17 +1181,19 @@ function measure() {
} }
// Resize: snap to the current mode's fit (no tween tracks the drag) // Resize: snap to the current mode's fit (no tween tracks the drag)
applyMode(viewMode.value, false) 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() { function initialBuild() {
// Kiosk TVs get the fully static map: no entrance animation, no ticker. // Kiosk TVs take the static PLACEMENT path (the GSAP entrance intro needs
// The GSAP intro needs healthy rAF delivery to ever reach opacity 1 on // healthy rAF delivery to reach opacity 1 on a paint-starved kiosk it
// a paint-starved kiosk it stalls and the screen reads as BLANK until a // stalls and the screen reads as BLANK until a lucky refresh,
// lucky refresh (framework-pt, 2026-08-14). Half-rate ticking (below) // framework-pt 2026-08-14) but keep the calm orbital motion: the ticker
// helped but any continuous SVG animation is still the single biggest // re-attaches below at half rate. Fully-static-everything was tried and
// load on the kiosk's compositor, and at TV distance the still map loses // rejected it also killed the animation on screens that could carry it.
// nothing. Everything lands in place immediately, graph updates apply
// instantly, and the 2D/3D toggle still works.
staticMode = prefersReducedMotion() || kioskLowPower staticMode = prefersReducedMotion() || kioskLowPower
built = true built = true
applyGraph() applyGraph()
@@ -1208,6 +1212,8 @@ function initialBuild() {
if (staticMode) { if (staticMode) {
introPlayed = true introPlayed = true
playIntro() // static branch: everything lands in place 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 return
} }
attachTicker() attachTicker()
+6 -3
View File
@@ -1135,13 +1135,15 @@ html.controller-nav [data-controller-container]:focus {
lower reflection arc, bottom depth vignette, paint-black base; inset lower reflection arc, bottom depth vignette, paint-black base; inset
rim lights; and a curved liquid "window streak" on ::before (under rim lights; and a curved liquid "window streak" on ::before (under
the badge's z-1 content, above the paint). Revert: delete this block. */ 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; background: none;
box-shadow: none; box-shadow: none;
padding: 0; padding: 0;
overflow: hidden; overflow: hidden;
} }
.logo-gradient-border::after { .logo-gradient-border.logo-gloss::after,
.tap-to-start-logo .logo-gradient-border::after {
inset: 0; inset: 0;
/* Dense intermediate stops + a fine turbulence grain (top layer, /* Dense intermediate stops + a fine turbulence grain (top layer,
overlay-blended) dither the near-black falloffs without them the 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), inset 0 0 0 1px rgba(255,242,212,0.08),
0 12px 34px rgba(0,0,0,0.65); 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: ''; content: '';
position: absolute; position: absolute;
left: 8%; left: 8%;
+1 -1
View File
@@ -8,7 +8,7 @@
> >
<!-- Logo - half in, half out of container --> <!-- Logo - half in, half out of container -->
<div class="absolute -top-10 left-1/2 -translate-x-1/2 z-10"> <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 /> <AnimatedLogo no-border fit />
</div> </div>
</div> </div>
+1 -1
View File
@@ -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"> <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 --> <!-- 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="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 /> <AnimatedLogo no-border fit />
</div> </div>
</div> </div>
@@ -362,6 +362,18 @@ init()
</button> </button>
</div> </div>
<div class="overflow-y-auto flex-1 min-h-0 space-y-6 pr-1"> <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 --> <!-- v1.8.2-alpha -->
<div> <div>
<div class="flex items-center gap-2 mb-3"> <div class="flex items-center gap-2 mb-3">
+16 -16
View File
@@ -1,29 +1,29 @@
{ {
"changelog": [ "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 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 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.)", "**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.",
"**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." "**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": [ "components": [
{ {
"current_version": "1.8.2-alpha", "current_version": "1.8.3-alpha",
"download_url": "https://source.archipelago-foundation.org/lfg2025/archy/releases/download/v1.8.2-alpha/archipelago", "download_url": "https://source.archipelago-foundation.org/lfg2025/archy/releases/download/v1.8.3-alpha/archipelago",
"name": "archipelago", "name": "archipelago",
"new_version": "1.8.2-alpha", "new_version": "1.8.3-alpha",
"sha256": "505a456d94a17ef336b8573e1423edc2295463e603b0af89131144297cffd5ca", "sha256": "23b608bfce575212edb873ded3e125505f42be0db6dc06ce5f9c1e51c232c22d",
"size_bytes": 59898960 "size_bytes": 59900696
}, },
{ {
"current_version": "1.8.2-alpha", "current_version": "1.8.3-alpha",
"download_url": "https://source.archipelago-foundation.org/lfg2025/archy/releases/download/v1.8.2-alpha/archipelago-frontend-1.8.2-alpha.tar.gz", "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.2-alpha.tar.gz", "name": "archipelago-frontend-1.8.3-alpha.tar.gz",
"new_version": "1.8.2-alpha", "new_version": "1.8.3-alpha",
"sha256": "531ea4c5fc6c1116a3c09e0fc81f16acb91a86a0ad25fb4883de499713c530da", "sha256": "13ca772e9a36c266b67e6eff2d51366616cdbedeab3a05ba5eba340332d3d6d4",
"size_bytes": 97617354 "size_bytes": 97615528
} }
], ],
"release_date": "2026-08-14", "release_date": "2026-08-14",
"signature": "e2b5c85707121444aff6ca2150fe04dd7d73ef4f9a183eb962986554f34a20128f087c138250a42043801380f50f2e0aebe48869d1577d0171dfe4cf0ff0ac08", "signature": "35d5f56ef77cda1866051a3ff06f6e09ff0a23ac7b000a1ac4cf24e04cecabff00be7f3e240fc82ec605bff80c5690c55c296a300018562940d71ffc5df26c00",
"signed_by": "did:key:z6Mkfu5LT8d4DjETtrkATvHh9Dvcbnr7zBCUwfau8Sw7DLWT", "signed_by": "did:key:z6Mkfu5LT8d4DjETtrkATvHh9Dvcbnr7zBCUwfau8Sw7DLWT",
"version": "1.8.2-alpha" "version": "1.8.3-alpha"
} }
+16 -16
View File
@@ -1,29 +1,29 @@
{ {
"changelog": [ "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 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 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.)", "**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.",
"**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." "**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": [ "components": [
{ {
"current_version": "1.8.2-alpha", "current_version": "1.8.3-alpha",
"download_url": "https://source.archipelago-foundation.org/lfg2025/archy/releases/download/v1.8.2-alpha/archipelago", "download_url": "https://source.archipelago-foundation.org/lfg2025/archy/releases/download/v1.8.3-alpha/archipelago",
"name": "archipelago", "name": "archipelago",
"new_version": "1.8.2-alpha", "new_version": "1.8.3-alpha",
"sha256": "505a456d94a17ef336b8573e1423edc2295463e603b0af89131144297cffd5ca", "sha256": "23b608bfce575212edb873ded3e125505f42be0db6dc06ce5f9c1e51c232c22d",
"size_bytes": 59898960 "size_bytes": 59900696
}, },
{ {
"current_version": "1.8.2-alpha", "current_version": "1.8.3-alpha",
"download_url": "https://source.archipelago-foundation.org/lfg2025/archy/releases/download/v1.8.2-alpha/archipelago-frontend-1.8.2-alpha.tar.gz", "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.2-alpha.tar.gz", "name": "archipelago-frontend-1.8.3-alpha.tar.gz",
"new_version": "1.8.2-alpha", "new_version": "1.8.3-alpha",
"sha256": "531ea4c5fc6c1116a3c09e0fc81f16acb91a86a0ad25fb4883de499713c530da", "sha256": "13ca772e9a36c266b67e6eff2d51366616cdbedeab3a05ba5eba340332d3d6d4",
"size_bytes": 97617354 "size_bytes": 97615528
} }
], ],
"release_date": "2026-08-14", "release_date": "2026-08-14",
"signature": "e2b5c85707121444aff6ca2150fe04dd7d73ef4f9a183eb962986554f34a20128f087c138250a42043801380f50f2e0aebe48869d1577d0171dfe4cf0ff0ac08", "signature": "35d5f56ef77cda1866051a3ff06f6e09ff0a23ac7b000a1ac4cf24e04cecabff00be7f3e240fc82ec605bff80c5690c55c296a300018562940d71ffc5df26c00",
"signed_by": "did:key:z6Mkfu5LT8d4DjETtrkATvHh9Dvcbnr7zBCUwfau8Sw7DLWT", "signed_by": "did:key:z6Mkfu5LT8d4DjETtrkATvHh9Dvcbnr7zBCUwfau8Sw7DLWT",
"version": "1.8.2-alpha" "version": "1.8.3-alpha"
} }
+1 -1
View File
@@ -67,7 +67,7 @@ def main() -> int:
inner = re.sub(r"^\s*<\?xml[^>]*\?>\s*", "", svg) inner = re.sub(r"^\s*<\?xml[^>]*\?>\s*", "", svg)
out = ( 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' <!-- 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' <svg x="{x:.3f}" y="{y:.3f}" width="{scale_w:.3f}" height="{scale_h:.3f}" '
f'viewBox="{inner_viewbox}" preserveAspectRatio="xMidYMid meet">\n' f'viewBox="{inner_viewbox}" preserveAspectRatio="xMidYMid meet">\n'