From e117fa549a950c5c1f12b037b612f01ef462e853 Mon Sep 17 00:00:00 2001 From: Florian Date: Sun, 3 May 2026 22:37:48 +0000 Subject: [PATCH] assets: replace meshviewer.woff2 icon font with SVG masks Drops the icomoon-managed icon font (.woff2/.woff/.ttf) in favour of individual SVG files extracted from the original TTF. New icons can now be added by dropping an .svg into assets/icons/svg/ and registering it in icon.scss, removing the round-trip through icomoon.io. Icons render via mask-image with background-color: currentColor, so existing font-size and color rules on .ion-* elements keep working unchanged. vertical-align matches the original font's value of 0 (baseline), so icon position relative to surrounding text is preserved. Three SCSS modules (_sidebar, _leaflet, _table) used raw font codepoints inline; those are converted to a new icon.icon-mask($name) mixin. Also drops three unused icon definitions (chevron-right, person, arrow-left-c) and the now-redundant \$font-family-icons variable. DEVELOPMENT.md is updated to describe the new SVG workflow. Co-Authored-By: Claude Opus 4.7 (1M context) --- DEVELOPMENT.md | 8 +-- assets/fonts/meshviewer.ttf | Bin 4796 -> 0 bytes assets/fonts/meshviewer.woff | Bin 5012 -> 0 bytes assets/fonts/meshviewer.woff2 | Bin 3152 -> 0 bytes assets/icons/_icon-mixin.scss | 21 +++++-- assets/icons/icon.scss | 82 +++++++++------------------ assets/icons/svg/arrow-resize.svg | 1 + assets/icons/svg/arrow-right-c.svg | 1 + assets/icons/svg/chevron-left.svg | 1 + assets/icons/svg/clipboard.svg | 1 + assets/icons/svg/close.svg | 1 + assets/icons/svg/connection-bars.svg | 1 + assets/icons/svg/down-b.svg | 1 + assets/icons/svg/eye.svg | 1 + assets/icons/svg/filter.svg | 1 + assets/icons/svg/full-enter.svg | 1 + assets/icons/svg/full-exit.svg | 1 + assets/icons/svg/layer.svg | 1 + assets/icons/svg/locate.svg | 1 + assets/icons/svg/location.svg | 1 + assets/icons/svg/people.svg | 1 + assets/icons/svg/pin.svg | 1 + assets/icons/svg/ruler.svg | 1 + assets/icons/svg/share-alt.svg | 1 + assets/icons/svg/time.svg | 1 + assets/icons/svg/up-b.svg | 1 + assets/icons/svg/wifi.svg | 1 + scss/custom/_custom.scss | 11 ++++ scss/modules/_button.scss | 1 - scss/modules/_leaflet.scss | 6 +- scss/modules/_sidebar.scss | 3 +- scss/modules/_table.scss | 6 +- scss/modules/_variables.scss | 1 - vite.config.js | 1 + 34 files changed, 88 insertions(+), 73 deletions(-) delete mode 100644 assets/fonts/meshviewer.ttf delete mode 100644 assets/fonts/meshviewer.woff delete mode 100644 assets/fonts/meshviewer.woff2 create mode 100644 assets/icons/svg/arrow-resize.svg create mode 100644 assets/icons/svg/arrow-right-c.svg create mode 100644 assets/icons/svg/chevron-left.svg create mode 100644 assets/icons/svg/clipboard.svg create mode 100644 assets/icons/svg/close.svg create mode 100644 assets/icons/svg/connection-bars.svg create mode 100644 assets/icons/svg/down-b.svg create mode 100644 assets/icons/svg/eye.svg create mode 100644 assets/icons/svg/filter.svg create mode 100644 assets/icons/svg/full-enter.svg create mode 100644 assets/icons/svg/full-exit.svg create mode 100644 assets/icons/svg/layer.svg create mode 100644 assets/icons/svg/locate.svg create mode 100644 assets/icons/svg/location.svg create mode 100644 assets/icons/svg/people.svg create mode 100644 assets/icons/svg/pin.svg create mode 100644 assets/icons/svg/ruler.svg create mode 100644 assets/icons/svg/share-alt.svg create mode 100644 assets/icons/svg/time.svg create mode 100644 assets/icons/svg/up-b.svg create mode 100644 assets/icons/svg/wifi.svg diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index e24244a1..077ec043 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -81,8 +81,8 @@ but also names based on elements like `p`, `a`, `div`.. ## Addition of new icons -To add new icons to the `meshviewer.woff2` icon-set, one must edit the icon-set manually. +Icons are SVG files in `assets/icons/svg/`. The CSS class `ion-` is generated by `assets/icons/icon.scss` and renders the SVG via `mask-image` with `currentColor`, so icons inherit text color and scale with `font-size`. -- This can be done by uploading the existing `meshviewer.tff` to https://icomoon.io/new-app -- Then, one can add a new icon by searching in the UI or uploading an SVG. -- Finally, export the iconset and replace the existing one +- Add the SVG to `assets/icons/svg/.svg`. Use a square `viewBox` and a single-colour shape (mask uses the alpha channel). +- Register it in `assets/icons/icon.scss` with `@include icon.icon("");`. +- Use it in markup as `class="ion-"`. diff --git a/assets/fonts/meshviewer.ttf b/assets/fonts/meshviewer.ttf deleted file mode 100644 index 7b6ad06f78b4bed43237ed6715bf7f241c3850f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4796 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 diff --git a/assets/fonts/meshviewer.woff b/assets/fonts/meshviewer.woff deleted file mode 100644 index 0ffed290a73edef9d283feb184147b03a193c49f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5012 zcmbU_3vd%>dh5qZYp~%Cyh+nZd$i@sq@|x!DnRMYS3-=gG{W^cjVG; z3Glaoo)YLU-%H<+gA(#R3i4Kg#BbJpC0A+;5c?C5pA(2|6G0OO$XBxmWKoqK-h&Nv zE2W@Y2I>&#p_7fXLxXA!)chUr*;1uCcnbXk+O_es&0QOx`3<(d9uye%pZn&D_ukv@ z{8!zFb@Lz-SgoK1fS9`Tcg{mT4BL+VMcs$hOjXm`1II8Z>0yxS>b|H6VIbEYt$i0{ zX7ye3IrcTbby!V(18AC|U#omAwgGEd>}-DI`{7eb^v2fNjBki2VS2Tq#w{b$wF3RD~(Q zuEyk;4m_loUhv*4m1z~-Dr_$ZGE9ppux?EC%^}~`y5(-}|D#zb?!FdbRD@L`(8Dk$ zt8eIKRj$Xb!23yvsfQk8SQED8vzqJm*NN-vuQy%){`DtrJaVJshUA9k#=qY9?B)|U zbvMz?@tYGjvp45%p19S1=MKcIMq&4&wtkDKnmfO_bM?XcjkO!@Y`DE)Wy7Z%e%bUN zO^Z#lO{u0IH9gXJrE$E`*Jxx!>a<^!6K|7MApbf4mNB(BDDm z?z>Su+qm`Qch|ydYHI4y$xR?VTnk0q#a-A4cD3eE&DGk!t1Z<%STDlg6I~Qt6>k>* z4e?UL-#7er-5;&5Td!^GY|i~?i$wgc+f9Q1PViX-d!_N~r%Aqn+s(Id4ctG9`G(t_B)^+q$DQTQ@(rTf zT^vP%rG?wgHSlLeT*Jy7`14@p*73VVTzlmK((mzm0v>{)xg7s4&QKvb>;d#fPy~eo z;b1rzVi=a-a@@NNg9n0vpdSzk81;myu#0sDM-Z{{zGwtFJrw0~d0fbWAgkX)lz&uV zNfWYAHXFfr@Vz)i(JqhEo0tvCvPh7hfx^@-N)4NMFzkNYD%qV~EqNI|Q8$y8KS$L@qDop=gSB zy9pk~pQdoH*XQ+l1VkR>2s$Ap74eKhQSXaJQ6v~6ixTzU~Aps~9V={wuuly^4%HnCyrgKs`u8_1XYUGA-bc?66EBl}RLXeRKV@iaEvcp`xa! zE*VZ(mxh;JucOz|naHWssnpU$DObuJKQ>dCnVvqDd+o^dz_emUG1GUfH`kl%$s9}) zHhzVa%MKb3paZBoEuWVaji(^~_4KLYe6e^ceHNWXCyn#+qAYz7y@Fmb9+b-o9^EHx&1;rZa*C$degW%Hk43~ zDaQsAM*uBhPk;*2eqq%@4D`}Q863pG@LC1;_0SXY{!R}AOmMA-4D^sC5Pv`@Sm@@r zDcGvA{ayvfp?1hJ9#r2?bm37EHmE(884L_{J&Ofk#&huB@vpk&>{4IfM=& z2`zC+T)lSLaIZyf?AP_{6qg%A{8^zWEbi}QnLcU zECseJDTR%$STLVPr_n-k1|Ycr>}m6YVus+ZK2N?Na-X)H)GrzqRYhe%S&-)>1y^)EV#2fP1bF0u@CSBrz=6mfge) zA72(PhnC`tx}qOk5W6SNLI4W|261;5SVg=^c|L6_Z2xp}cm+ zGH;%DE}|v06j>OXPnITU^8hmw^B^onK#dlhCG)&xRtN4w6Nkrold^~u()2hb7MWS5 zQw#wd*2>I8;v z>bN>QJGFqOG{l*Xm)mf&2@NGpDRUmBlEj5K-`oBF)m`EKoJ3V1cvt}VD*ug|XFtMU zzW5m0yLYwdy?fDP7hfjI#g!tSA1av_&>|`&^ZC`H^Z8^66bt6kP@aIuwagX1@-}Ho z=_6`H@Xv`{$A+ggX-#@4szge3#Gx^2j24Y+P_U_y-f04G>XDkbO^A^?qEDGpri?QS zr|qvqS(J&S03sQbB`RRgIy0sevGP!yj6_G7IEtfDI^u{p7zeT=8$IH5I2|Lj4cX8L zFk=h{9ObGOPG^0&>~zit-Y z*6@EyZYzIqOVgHnm2jwhaQ? zA0NnS2>zF-8gv{ykNvM8H3apeJ~VJ&P)~ORnE`}c&$bM!ppcalE0pX}{`KC-s^QdLi z64D^0aBN1a!6O;nm~KoJS4Ndl1=}Aa%8ljIWU2QThV$q=S{`30l}h8k0QS6Lxp$$r z^y+v!YDb-h-d?HH&a__3$7% zOl+@2KNq9f;bVi@!E9gVQ1Vc+JKhx`DqUqn4v(A0^rJom==TEp{BZt;++lZ^hKnyD z4e!m}HeiUXv4G;*!B`o8KQ;dso1njWfekQUbr`JWhXpar) z;d<)|xfwT0hw0TwzYi9vkM)FT#uJ2N8@Y%Pv5dFlUZ=<92Bh3B+P4P6!E6{YTPy~P z-lc_^F$e4+ih;Xe3=!N@qAY(4Pl~eKEgXb6TnrhOVFNLgL|ND5aE7S-nwuq6Sz)2T zzV{5fEtJ)1A0ha+x##ifl>)96Xbs`IQAL8gz&(e@M-t94YRr}Nq)-tR5;=fG0obCg zpvtLoii8}=kL#$yC`k$)cd39E;O3kMAu`{DyRSn1QYb}eV=BZrc)`ENF>Tm&3^4ZdmDNQ?TNKb?wi_Q=v$l4_6wSG+BcNTl10g4XJOwI(SN(0>@jsYI#37d ziuR;>(z2{@k5tW@mW)e|WpoCeiJnd`rIvE@!bvlqT}m&dPe(zGPCLNGSW*k8QC0?_ zJ<%>m)8Xhe_LzFqGU3GPRreSPzLvX4a;l&5VKJxS|8VvkUcO%WH93%g9ReF$K@C`8 z08KibR%<$91A$V2`lWbl?#0}T`Mrhxg?;&hxqhPbO6hexHB(>Thy8_a-8@I?zi_=+Tu@VN-yO6(wZ9-9C>FZ>S-UvWl&1kH!=-j3Pfxf8S3Yyqyl OM)-dj+~E7b#{UKkSDg0% diff --git a/assets/fonts/meshviewer.woff2 b/assets/fonts/meshviewer.woff2 deleted file mode 100644 index 75d9dd9f8452af57590e8b90d3ab761aea283d4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3152 zcmV-W46pNdPew9NR8&s@01Qw73IG5A0253A01N^E0RR9100000000000000000000 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 diff --git a/assets/icons/svg/arrow-right-c.svg b/assets/icons/svg/arrow-right-c.svg new file mode 100644 index 00000000..ea853b08 --- /dev/null +++ b/assets/icons/svg/arrow-right-c.svg @@ -0,0 +1 @@ + diff --git a/assets/icons/svg/chevron-left.svg b/assets/icons/svg/chevron-left.svg new file mode 100644 index 00000000..2cbcca02 --- /dev/null +++ b/assets/icons/svg/chevron-left.svg @@ -0,0 +1 @@ + diff --git a/assets/icons/svg/clipboard.svg b/assets/icons/svg/clipboard.svg new file mode 100644 index 00000000..dfdc15cb --- /dev/null +++ b/assets/icons/svg/clipboard.svg @@ -0,0 +1 @@ + diff --git a/assets/icons/svg/close.svg b/assets/icons/svg/close.svg new file mode 100644 index 00000000..2557e4fb --- /dev/null +++ b/assets/icons/svg/close.svg @@ -0,0 +1 @@ + diff --git a/assets/icons/svg/connection-bars.svg b/assets/icons/svg/connection-bars.svg new file mode 100644 index 00000000..cff96ff6 --- /dev/null +++ b/assets/icons/svg/connection-bars.svg @@ -0,0 +1 @@ + diff --git a/assets/icons/svg/down-b.svg b/assets/icons/svg/down-b.svg new file mode 100644 index 00000000..ced59a62 --- /dev/null +++ b/assets/icons/svg/down-b.svg @@ -0,0 +1 @@ + diff --git a/assets/icons/svg/eye.svg b/assets/icons/svg/eye.svg new file mode 100644 index 00000000..2c0c041d --- /dev/null +++ b/assets/icons/svg/eye.svg @@ -0,0 +1 @@ + diff --git a/assets/icons/svg/filter.svg b/assets/icons/svg/filter.svg new file mode 100644 index 00000000..4b4f8e39 --- /dev/null +++ b/assets/icons/svg/filter.svg @@ -0,0 +1 @@ + diff --git a/assets/icons/svg/full-enter.svg b/assets/icons/svg/full-enter.svg new file mode 100644 index 00000000..f5aae69f --- /dev/null +++ b/assets/icons/svg/full-enter.svg @@ -0,0 +1 @@ + diff --git a/assets/icons/svg/full-exit.svg b/assets/icons/svg/full-exit.svg new file mode 100644 index 00000000..1d70edcb --- /dev/null +++ b/assets/icons/svg/full-exit.svg @@ -0,0 +1 @@ + diff --git a/assets/icons/svg/layer.svg b/assets/icons/svg/layer.svg new file mode 100644 index 00000000..cd60756a --- /dev/null +++ b/assets/icons/svg/layer.svg @@ -0,0 +1 @@ + diff --git a/assets/icons/svg/locate.svg b/assets/icons/svg/locate.svg new file mode 100644 index 00000000..b4b9c34c --- /dev/null +++ b/assets/icons/svg/locate.svg @@ -0,0 +1 @@ + diff --git a/assets/icons/svg/location.svg b/assets/icons/svg/location.svg new file mode 100644 index 00000000..b3b94587 --- /dev/null +++ b/assets/icons/svg/location.svg @@ -0,0 +1 @@ + diff --git a/assets/icons/svg/people.svg b/assets/icons/svg/people.svg new file mode 100644 index 00000000..ba0a7c87 --- /dev/null +++ b/assets/icons/svg/people.svg @@ -0,0 +1 @@ + diff --git a/assets/icons/svg/pin.svg b/assets/icons/svg/pin.svg new file mode 100644 index 00000000..84b0a1a6 --- /dev/null +++ b/assets/icons/svg/pin.svg @@ -0,0 +1 @@ + diff --git a/assets/icons/svg/ruler.svg b/assets/icons/svg/ruler.svg new file mode 100644 index 00000000..d5905024 --- /dev/null +++ b/assets/icons/svg/ruler.svg @@ -0,0 +1 @@ + diff --git a/assets/icons/svg/share-alt.svg b/assets/icons/svg/share-alt.svg new file mode 100644 index 00000000..e9b3250f --- /dev/null +++ b/assets/icons/svg/share-alt.svg @@ -0,0 +1 @@ + diff --git a/assets/icons/svg/time.svg b/assets/icons/svg/time.svg new file mode 100644 index 00000000..cc245ff6 --- /dev/null +++ b/assets/icons/svg/time.svg @@ -0,0 +1 @@ + diff --git a/assets/icons/svg/up-b.svg b/assets/icons/svg/up-b.svg new file mode 100644 index 00000000..6dee6a0a --- /dev/null +++ b/assets/icons/svg/up-b.svg @@ -0,0 +1 @@ + diff --git a/assets/icons/svg/wifi.svg b/assets/icons/svg/wifi.svg new file mode 100644 index 00000000..5b24c6a3 --- /dev/null +++ b/assets/icons/svg/wifi.svg @@ -0,0 +1 @@ + diff --git a/scss/custom/_custom.scss b/scss/custom/_custom.scss index 138593f9..67ab059b 100644 --- a/scss/custom/_custom.scss +++ b/scss/custom/_custom.scss @@ -8,3 +8,14 @@ // SCSS supports css with a lot of additional features like variables or mixins. // Autoprefixer runs in postcss, no need to add browser-prefixes like -webkit, -moz or -ms + +// Test vertical-align tuning for centered SVGs +// Adjust the variable below to test different pixel offsets +:root { + --icon-va: -2px; +} + +[class^="ion-"]::before, +[class*=" ion-"]::before { + vertical-align: var(--icon-va); +} diff --git a/scss/modules/_button.scss b/scss/modules/_button.scss index 7f7de877..9dffd7db 100644 --- a/scss/modules/_button.scss +++ b/scss/modules/_button.scss @@ -7,7 +7,6 @@ button { border-radius: 0.9em; color: variables.$color-black; cursor: pointer; - font-family: variables.$font-family-icons; font-size: variables.$button-font-size; height: 1.8em; line-height: 1.95; diff --git a/scss/modules/_leaflet.scss b/scss/modules/_leaflet.scss index 418ab08f..6eb6de25 100644 --- a/scss/modules/_leaflet.scss +++ b/scss/modules/_leaflet.scss @@ -1,6 +1,7 @@ @use "sass:color"; @use "sass:map"; @use "variables"; +@use "../mixins/icon"; .leaflet-pane, .leaflet-tile, @@ -89,10 +90,7 @@ } &::before { - content: "\f229"; - font-family: variables.$font-family-icons; - speak: none; - text-rendering: auto; + @include icon.icon-mask("layer"); } } diff --git a/scss/modules/_sidebar.scss b/scss/modules/_sidebar.scss index 98149fe8..839a981e 100644 --- a/scss/modules/_sidebar.scss +++ b/scss/modules/_sidebar.scss @@ -1,6 +1,7 @@ @use "sass:color"; @use "sass:map"; @use "variables"; +@use "../mixins/icon"; .sidebar { box-sizing: border-box; @@ -134,7 +135,7 @@ z-index: 1010; &::before { - content: "\f124"; + @include icon.icon-mask("chevron-left"); padding-right: 0.125em; } diff --git a/scss/modules/_table.scss b/scss/modules/_table.scss index be40639b..343579bb 100644 --- a/scss/modules/_table.scss +++ b/scss/modules/_table.scss @@ -1,4 +1,5 @@ @use "variables"; +@use "../mixins/icon"; table { border-collapse: separate; @@ -62,8 +63,7 @@ th { } &::after { - content: "\f10d"; - font-family: variables.$font-family-icons; + @include icon.icon-mask("up-b"); padding-left: 0.25em; visibility: hidden; } @@ -77,7 +77,7 @@ th { &.sort-up { &::after { - content: "\f104"; + mask-image: url("@icons/down-b.svg"); } } diff --git a/scss/modules/_variables.scss b/scss/modules/_variables.scss index 56b21b24..255d1597 100644 --- a/scss/modules/_variables.scss +++ b/scss/modules/_variables.scss @@ -22,7 +22,6 @@ $color-error: #c20000 !default; $color-map-background: #f8f4f0 !default; $font-family: "Assistant", sans-serif !default; -$font-family-icons: ionicons !default; $font-family-monospace: monospace !default; $font-size: 15px !default; $font-size-small: 11px !default; diff --git a/vite.config.js b/vite.config.js index 7ec943fe..bb5cd1c2 100644 --- a/vite.config.js +++ b/vite.config.js @@ -9,6 +9,7 @@ export default defineConfig({ resolve: { alias: { "@fonts": resolve(__dirname, "assets/fonts"), + "@icons": resolve(__dirname, "assets/icons/svg"), }, }, define: {