From 3380498441c970410a29613af18dea7f35132da6 Mon Sep 17 00:00:00 2001 From: liquidev Date: Tue, 27 Aug 2024 14:13:03 +0200 Subject: [PATCH] add a menu bar; and also a favicon because there's now a logo --- docs/system.dj | 4 +++ scripts/mkicon.fish | 7 +++++ static/base.css | 34 ++++++++++++++++++----- static/brush-editor.js | 1 + static/favicon/rkgk@16x.png | Bin 0 -> 3015 bytes static/favicon/rkgk@1x.png | Bin 0 -> 311 bytes static/favicon/rkgk@2x.png | Bin 0 -> 505 bytes static/favicon/rkgk@32x.png | Bin 0 -> 7238 bytes static/favicon/rkgk@4x.png | Bin 0 -> 820 bytes static/favicon/rkgk@8x.png | Bin 0 -> 1519 bytes static/icon/external-link.svg | 4 +++ static/icon/rkgk-grayscale.svg | 12 ++++++++ static/index.css | 49 +++++++++++++++++++++++++++++++++ static/index.html | 18 ++++++++++++ 14 files changed, 122 insertions(+), 7 deletions(-) create mode 100755 scripts/mkicon.fish create mode 100644 static/favicon/rkgk@16x.png create mode 100644 static/favicon/rkgk@1x.png create mode 100644 static/favicon/rkgk@2x.png create mode 100644 static/favicon/rkgk@32x.png create mode 100644 static/favicon/rkgk@4x.png create mode 100644 static/favicon/rkgk@8x.png create mode 100644 static/icon/external-link.svg create mode 100644 static/icon/rkgk-grayscale.svg diff --git a/docs/system.dj b/docs/system.dj index 1f603f2..6402cc1 100644 --- a/docs/system.dj +++ b/docs/system.dj @@ -44,7 +44,9 @@ With that said, there are several types of values in haku that can be passed int - `fn` - a function, as returned by `(fn (x) x)` literals. - `list` - a list of values, where each value can have a different type (even `list` itself.) - `shape` - a mathematical shape. + - `shape-like` - anything that can be turned into a `shape` using `to-shape`. + - `scribble` - something that can be drawn on the wall. Additionally, the syntax `(type-a type-b ...)` may be used to signify that one of the listed types is accepted or returned. @@ -122,8 +124,10 @@ Whether two values are considered equal depends on their type: - If the type of the two values differs, `false` is returned. - If the two values are `number`s: + - If any of the values are `NaN`, `false` is returned. - Otherwise `true` is returned if the two numbers have the exact same bit representation. + - If the two values are `vec`s, `true` is returned if each of their `number` components is equal to each other using the rules above. - Likewise with `rgba`s. - All other types of values use _reference_ equality - `true` is returned only if `a` and `b` are located in the same place in memory. diff --git a/scripts/mkicon.fish b/scripts/mkicon.fish new file mode 100755 index 0000000..5fbca61 --- /dev/null +++ b/scripts/mkicon.fish @@ -0,0 +1,7 @@ +#!/usr/bin/env fish + +set filename $argv[1] +set icon_name (basename $filename .svg) +set icon_base64 (svgcleaner --stdout $filename 2>/dev/null | base64 -w0) + +printf "--icon-%s: url('data:image/svg+xml;base64,%s');" "$icon_name" "$icon_base64" diff --git a/static/base.css b/static/base.css index 3e7b62d..9f7a4a6 100644 --- a/static/base.css +++ b/static/base.css @@ -10,9 +10,6 @@ --color-panel-background: #fff; --color-shaded-background: rgba(0, 0, 0, 5%); - --panel-border-radius: 16px; - --panel-box-shadow: 0 0 0 1px var(--color-panel-border); - --panel-padding: 12px; --dialog-backdrop: rgba(255, 255, 255, 0.5); } @@ -102,7 +99,7 @@ input { } *:focus { - outline: 1px solid #40b1f4; + outline: 1px solid var(--color-brand-blue); outline-offset: 4px; } @@ -164,12 +161,15 @@ rkgk-throbber { /* Panels */ .rkgk-panel { + --panel-border-radius: 8px; + display: block; background: var(--color-panel-background); - padding: var(--panel-border-radius); border: none; - border-radius: 16px; - box-shadow: var(--panel-box-shadow); + border-radius: var(--panel-border-radius); + box-shadow: + 0 0 0 1px var(--color-panel-border); + /* 4px 4px 0 0 var(--color-panel-border); */ box-sizing: border-box; } @@ -194,3 +194,23 @@ pre:has(code) { padding: 1em 1em; } +/* Icons */ + +:root { + --icon-rkgk-grayscale: url('data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjE2IiB2aWV3Qm94PSIwIDAgMTYgMTYiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBkPSJtMCAwaDE2djE2aC0xNnoiLz48L2NsaXBQYXRoPjxnIGNsaXAtcGF0aD0idXJsKCNhKSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjIiPjxwYXRoIGQ9Im0xMiAxNy00LjU1Mjc5LTkuMTA1NTdjLS42NjQ5LTEuMzI5ODEuMzAyMDktMi44OTQ0MyAxLjc4ODg2LTIuODk0NDNoOC43NjM5MyIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjxnIHN0cm9rZS1saW5lY2FwPSJyb3VuZCI+PHBhdGggZD0ibTUuNSAxMi0yLjUgNSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW9wYWNpdHk9Ii41Ii8+PHBhdGggZD0ibTMgNWgxIi8+PC9nPjwvZz48L3N2Zz4='); + --icon-external-link: url('data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjE2IiB2aWV3Qm94PSIwIDAgMTYgMTYiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiMwMDAiPjxwYXRoIGQ9Im0xMC41IDl2Mi41aC02di02aDIuNSIvPjxwYXRoIGQ9Im03IDkgNC41LTQuNW0wIDBoLTMuNW0zLjUgMHYzLjUiLz48L2c+PC9zdmc+'); +} + +.icon { + display: inline-block; + vertical-align: middle; + width: 16px; + height: 16px; + + background-repeat: no-repeat; + background-position: 50% 50%; + + &.icon-rkgk-grayscale { background-image: var(--icon-rkgk-grayscale); } + &.icon-external-link { background-image: var(--icon-external-link); } +} + diff --git a/static/brush-editor.js b/static/brush-editor.js index df8cffe..a36a174 100644 --- a/static/brush-editor.js +++ b/static/brush-editor.js @@ -31,6 +31,7 @@ export class BrushEditor extends HTMLElement { ); }); requestAnimationFrame(() => this.#resizeTextArea()); + document.fonts.addEventListener("loadingdone", () => this.#resizeTextArea()); this.errorHeader = this.appendChild(document.createElement("h1")); this.errorHeader.classList.add("error-header"); diff --git a/static/favicon/rkgk@16x.png b/static/favicon/rkgk@16x.png new file mode 100644 index 0000000000000000000000000000000000000000..9689c5fd57181935f756ec3ce5a66e05b12e0bb6 GIT binary patch literal 3015 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 E03G&t7ytkO literal 0 HcmV?d00001 diff --git a/static/favicon/rkgk@2x.png b/static/favicon/rkgk@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..64e3477e9893bde39db253c82949b275345c7c09 GIT binary patch literal 505 zcmVH1uMjw& z(w}Q59WaMIsK?*wd}RPSJ`*lR_S-Sx(9-%4{a7u06Hz8 zcY!VoXaHRn)&elP6q=)5XkP8G<1{)ftOOvf8qm`%APoYf9Ut4<{5KsIRst9nWrcY> z@iju#!cu^wd$TJ(o`Y}k(X47=DL}USX!Zy53;=^tuuuq4)O`Yxjf#arfOWg)a7YWe v0A;%8fJh6u0A;)9kO&JB0H%8mim>nxV@JhTU>%O=00000NkvXXu0mjfRaMXF literal 0 HcmV?d00001 diff --git a/static/favicon/rkgk@32x.png b/static/favicon/rkgk@32x.png new file mode 100644 index 0000000000000000000000000000000000000000..2512193ccc1a3068b25776d769c50194167e696f GIT binary patch literal 7238 zcmeHM`(KRPzhBQZU8(6JJH(W3?4n%0D%4D*gr;0}%58?E+L024GBb8`A!0|Nm|;`) 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 MhUNTV73Yut0wJphZU6uP literal 0 HcmV?d00001 diff --git a/static/favicon/rkgk@4x.png b/static/favicon/rkgk@4x.png new file mode 100644 index 0000000000000000000000000000000000000000..0ec9078706a9e87790cbc4fa0c4da5b9a35af063 GIT binary patch literal 820 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9EO-XP4l)OOlRpde#$ zkh>GZx^prwfgF}}M_)$E)e-c?47?@6ax;TbZFut8(n19(pN*lC+)Or`0|vw!)#sS%jM$7 zHve_DxNF_;a=m?kY1+25J(b*6<<}Hu)$-R(Pw`;*(Oi{3KPGBNY)XZ({)6|Mzvpli zuc(-tb|PBgrtCB^d;W6=n=CrF=RXhF+I_yB+cI$n-<=1#PD^(e%THSV{lN4IY(D+& z2Y6Gv@{cBaF#O;5pDnMzScmK0=Y696ii|yR^+}Np#UDHarlgb$*YMPGpD8Q7bGLg} zcdP$Cxv6%H8-D*-^1*OTF@u;{)mOnEyAS>>N#AWJy639j_ivx~hkl#8E0J-9^sB=5 z2LHGk0o@w8iHi%iY>cuxcQ-xeh$X{0MXv7xYq#V#Kd@L~wsiZmi4jK_Ua@lecSH#? zI^2Dn(J+nGh=Gsqq-B&?hvb9RtV#ZjA9tUBBE!plgyBb4;|t3J?%XbnKQbDBcwR8) zKEn7Tt?|_E27j>?3?EK1ZQbq|uM@!hpqsUq$>1-?G`X*dmCw1>*zD(ed3frd&5M2{ zI3_b}xNz?qgH^WSj4My(AAKGB!d6bi>BGUMV+>28PjCCM*|78E@vcR=j>-&+qzmu; zJoNFZ-@_T(SbG^f-sw&4Tg;kzamxZThE>03yg9z3B<6C{Eru2Ek~igl`Tu9D&I;Cs z%YRP>vQ3^Z8E|pa0x<@^@5kf)8l-u-#n>*Se1BWR3SyLee`|V3Oo!!w>-V>%U`FWo zw_BUULf9T``u(lSkz0$o;BM{iwh63L89YkvuTxHORAmUdyFHsT;sBe%&D!1b8d!4} pE&&Cswl%OiEdE^^C-WeorT literal 0 HcmV?d00001 diff --git a/static/favicon/rkgk@8x.png b/static/favicon/rkgk@8x.png new file mode 100644 index 0000000000000000000000000000000000000000..80e590de38dac962c14f1b00c55b9e7916c0098f GIT binary patch literal 1519 zcmcIk{Xf$Q9RGf2U&Hb+4^xUQ$JJcQgP$9YJeN{3`UVI5i5n#XOo{)l_MKJWME;q`uhKEHh~QxELZ)iKin06>@G z=M${XjIYqrRC9+%RG&I&C-{XY0zg>tSAb)uTu0PHFfn+a7r=YENuq9$v7P~*08o1k zy%q%l0F+Jf@uVe#^Ch)sjQ1ILO}(1u&3E5zFF@EuTNXKMd+ONTNyJq68&&ufS?WqC z-o^ImsbIk3=&T!n)uU=UgplaPxy=3?AuXa8>!Lk+) z+)hvW`AQ8bnDjSl^DwYh=B8S03O#W(#MXhTn!8v}|0LuXN@EF*4`}HxC|r+ueQ(^47u+e`XGqB1PkS@I`))bGg<0`Vmi!WQ0`HiRdSlT7ix2yWT&ks#s->yq7 zRh2{!;Yuv+mUauNhbm7>7Y!X4F<%0iHQicNTH#ZLJN_sMfp7?Nuo~{oI-)d=^JH`yN2imcexu9KONIHDm;I?UHkjg1y4 zQnJz1$*ODj-$xwxRlWMu@<=M0d0xj0(l4Nh`EaX#^Wngb=cKiZ#i_Z?+t?TknA}fS zyir*OhQWmfd%y5EW%(Am1p}4%wyFA= zX5lR&v$?;xl}Va#FE`kD797u9SlxO|$+TYmQa5W&>*Zirs^iHkyCjauO19gl5l*ybLp5A!?yS32$wYN_WV8|pDQKp>b2La5>3+b-bfSWZi zf6!~G-pSG)na`2lh}{_C8=#TxPi1`E!ofuLeU{~CEn*CC#z9*|@+=!;ooMtdM*QPa zn!CDaMoJsGqK><91lEV0)Mx^Z3!T?a*n4aT>K;VX7NJ76j>-yP@}$4Gaz=n0VbwEs zgAc(6(1-GKjv|=lVGr@KoNMEgL!VR1jlRHSBd ziFQ5KZIhPTt%sVX@f$?#BCSY5f)jNB3PaDK{DJrkg=o))7y{qaO)ZimmQS)8MDcj_ ziDccmk@isp(Mm;#YBSpPzDlQe%F&kC`1T*UfZH>WaN%}W{KUJg_>4hhD|YsS>#tT5 zK={p|Wanqgax^b6JCN4tbKeDa2uDa~Wp=tLXe%4?Pfs0tzDsY$+D*T{hM4OJ_bke>|%OY}{E zTBy)~Y^iu6o!*_3If~$-@x{s^#pb-S)p_)sCKrND@f9*+KFkUQgZB$H?m@5#zEeh| z!YmgsI6$aT0l`N2_cEdZ%rXIk1BDuF2*$9`lBBpZ8C}q<|BCr|1nVr=QbfNrjg6x* zcokFZX2{Hh^^00^Dx(WIdt${Lj$nNYwv^B>bz$Rt7`&<}b}eLvA$zOMFunzVhZhD% z5kt_RdPyZV*PhWRBRV&bX`plE6uSbtqs?+r=n)780YJZcXiy9MD`b!_Yv^+0K8&;=rkAv8jLK=o + + + diff --git a/static/icon/rkgk-grayscale.svg b/static/icon/rkgk-grayscale.svg new file mode 100644 index 0000000..02feb5c --- /dev/null +++ b/static/icon/rkgk-grayscale.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/static/index.css b/static/index.css index a20c2a4..27e1918 100644 --- a/static/index.css +++ b/static/index.css @@ -123,6 +123,8 @@ rkgk-reticle-cursor { /* Brush editor */ rkgk-brush-editor { + padding: 12px; + &>.text-area { display: block; width: 100%; @@ -187,3 +189,50 @@ rkgk-connection-status { } } } + +/* Menu bar */ + +.menu-bar { + --border-radius: 4px; + + display: flex; + box-sizing: border-box; + + width: fit-content; + height: 24px; + border-radius: var(--border-radius); + + &>a { + display: block; + + color: var(--color-text); + padding: 4px 8px; + text-decoration: none; + + &:hover { + background-color: var(--color-shaded-background); + } + + &.icon { + padding: 4px 4px; + } + + &:first-child { + border-top-left-radius: var(--border-radius); + border-bottom-left-radius: var(--border-radius); + } + + &:last-child { + border-top-right-radius: var(--border-radius); + border-bottom-right-radius: var(--border-radius); + } + } + + &>hr { + height: 100%; + margin: 0; + border: none; + border-right: 1px solid var(--color-panel-border); + } +} + diff --git a/static/index.html b/static/index.html index ad4fd92..c39a0ea 100644 --- a/static/index.html +++ b/static/index.html @@ -24,6 +24,19 @@ + + + + + + + + + + + + + @@ -31,6 +44,11 @@
+