From fa835d001033cd300e5b191d841d6aa970fa0373 Mon Sep 17 00:00:00 2001 From: wukko <me@wukko.me> Date: Tue, 16 Jul 2024 14:00:56 +0600 Subject: [PATCH] web/dialog: css for small dialog - moved backdrop to each dialog - dialog is now closable by clicking the backdrop - added meowbalt to dialogs - added more meowbalt assets & components - added "main" boolean to indicate the main action button in a list of buttons --- web/src/components/dialog/DialogHolder.svelte | 26 +- web/src/components/dialog/SmallDialog.svelte | 232 ++++++++++++++++-- .../components/meowbalt/MeowbaltError.svelte | 19 ++ .../components/meowbalt/MeowbaltLoaf.svelte | 1 - .../save/buttons/DownloadButton.svelte | 2 + web/src/lib/types/dialog.ts | 4 +- web/src/routes/+layout.svelte | 19 +- web/static/meowbalt/checking.png | Bin 0 -> 15440 bytes web/static/meowbalt/error.png | Bin 0 -> 7767 bytes web/static/meowbalt/think.png | Bin 0 -> 4496 bytes 10 files changed, 264 insertions(+), 39 deletions(-) create mode 100644 web/src/components/meowbalt/MeowbaltError.svelte create mode 100644 web/static/meowbalt/checking.png create mode 100644 web/static/meowbalt/error.png create mode 100644 web/static/meowbalt/think.png diff --git a/web/src/components/dialog/DialogHolder.svelte b/web/src/components/dialog/DialogHolder.svelte index b5496d65..7d6ef1dd 100644 --- a/web/src/components/dialog/DialogHolder.svelte +++ b/web/src/components/dialog/DialogHolder.svelte @@ -1,14 +1,17 @@ <script lang="ts"> import SmallDialog from "./SmallDialog.svelte"; import dialogs from "$lib/dialogs"; + + $: dialogVisible = $dialogs.length > 0; </script> -<div id="dialog-holder" aria-hidden="true"> +<div id="dialog-holder" class:visible={dialogVisible}> {#each $dialogs as dialog} {#if dialog.type === "small"} <SmallDialog id={dialog.id} title={dialog.title} + meowbalt={dialog.meowbalt} bodyText={dialog.bodyText} bodySubText={dialog.bodySubText} buttons={dialog.buttons} @@ -21,8 +24,25 @@ #dialog-holder { position: absolute; padding-top: env(safe-area-inset-bottom); - height: calc(100%); + height: 100%; width: 100%; - pointer-events: none; + + display: flex; + justify-content: center; + align-items: center; + z-index: 99; + + visibility: hidden; + backdrop-filter: blur(7px); + -webkit-backdrop-filter: blur(7px); + } + + #dialog-holder.visible { + visibility: visible; + } + + :global([data-reduce-transparency="true"]) #dialog-holder { + backdrop-filter: none !important; + -webkit-backdrop-filter: none !important; } </style> diff --git a/web/src/components/dialog/SmallDialog.svelte b/web/src/components/dialog/SmallDialog.svelte index 8ee30862..3ca087a1 100644 --- a/web/src/components/dialog/SmallDialog.svelte +++ b/web/src/components/dialog/SmallDialog.svelte @@ -2,7 +2,10 @@ import { killDialog } from "$lib/dialogs"; import type { DialogButton } from "$lib/types/dialog"; + import MeowbaltError from "$components/meowbalt/MeowbaltError.svelte"; + export let id: string; + export let meowbalt: string = ""; export let title: string = ""; export let bodyText: string = ""; export let bodySubText: string = ""; @@ -10,46 +13,227 @@ let dialogParent: HTMLDialogElement; + let closing = false; + const close = () => { if (dialogParent) { - dialogParent.close(); - killDialog(); + closing = true; + setTimeout(() => { + dialogParent.close(); + killDialog(); + }, 150) } - } + }; $: if (dialogParent) { dialogParent.showModal(); } </script> -<dialog id="dialog-{id}" bind:this={dialogParent} class="small-dialog"> - <div class="popup-header"> - <h2>{title}</h2> - </div> - <div class="popup-body"> - {bodyText} - {#if bodySubText} - <div class="subtext">{bodySubText}</div> +<dialog id="dialog-{id}" bind:this={dialogParent} class:closing> + <div class="dialog-body small-dialog" class:meowbalt-visible={meowbalt}> + {#if meowbalt === "error"} + <div class="meowbalt-container"> + <MeowbaltError /> + </div> {/if} - </div> - <div class="popup-buttons"> - {#each buttons as button} - <button - on:click={ - (async() => { + <div class="popup-header"> + {#if title} + <h2>{title}</h2> + {/if} + </div> + <div class="popup-body"> + {#if bodyText} + <div class="body-text" tabindex="-1">{bodyText}</div> + {/if} + {#if bodySubText} + <div class="subtext">{bodySubText}</div> + {/if} + </div> + <div class="popup-buttons"> + {#each buttons as button} + <button + class="button popup-button" + class:active={button.main} + on:click={async () => { await button.action(); close(); - }) - } - > - {button.text} - </button> - {/each} + }} + > + {button.text} + </button> + {/each} + </div> </div> + + <div + id="dialog-backdrop" + aria-hidden="true" + on:click={() => close()} + ></div> </dialog> <style> + dialog { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + background: none; + + max-height: 100%; + max-width: 100%; + height: 100%; + width: 100%; + margin: 0; + padding: 0; + border: none; + pointer-events: all; + + inset-inline-start: unset; + inset-inline-end: unset; + + overflow: hidden; + } + + dialog:modal { + inset-block-start: 0; + inset-block-end: 0; + } + + dialog:modal::backdrop { + display: none; + } + .small-dialog { - max-width: 375px; + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + gap: var(--padding); + max-width: 340px; + width: 340px; + background: var(--popup-bg); + box-shadow: 0 0 0 2px var(--popup-stroke) inset, + 0 0 60px 10px var(--popup-bg); + padding: 18px; + margin: var(--padding); + border-radius: 29px; + animation: modal-in 0.3s; + position: relative; + will-change: transform; + } + + .small-dialog.meowbalt-visible { + padding-top: 45px; + } + + .meowbalt-container { + position: absolute; + top: -110px; + } + + .closing .small-dialog { + animation: modal-out 0.15s; + opacity: 0; + } + + .body-text { + font-size: 14.5px; + font-weight: 500; + line-height: 1.7; + color: var(--gray); + } + + .body-text:focus-visible { + box-shadow: none !important; + } + + .popup-buttons { + display: flex; + flex-direction: row; + width: 100%; + gap: calc(var(--padding) / 2) + } + + .popup-button { + width: 100%; + height: 40px; + } + + #dialog-backdrop { + --backdrop-opacity: 0.4; + background-color: var(--popup-backdrop); + position: absolute; + height: 100%; + width: 100%; + z-index: -1; + opacity: var(--backdrop-opacity); + animation: backdrop-in 0.15s; + backdrop-filter: blur(7px); + } + + :global([data-reduce-transparency="true"]) #dialog-backdrop { + --backdrop-opacity: 0.5; + } + + .closing #dialog-backdrop { + opacity: 0; + animation: backdrop-out 0.15s; + } + + @keyframes modal-in { + from { + transform: scale(0.8); + opacity: 0; + } + 50% { + transform: scale(1.005); + opacity: 1; + } + 100% { + transform: scale(1); + opacity: 1; + } + } + + @keyframes modal-out { + from { + opacity: 1; + } + to { + opacity: 0; + transform: scale(0.9); + visibility: hidden; + } + } + + @keyframes backdrop-in { + from { + opacity: 0; + } + to { + opacity: var(--backdrop-opacity); + } + } + + @keyframes backdrop-out { + from { + opacity: var(--backdrop-opacity); + } + to { + opacity: 0; + } + } + + @media screen and (max-width: 535px) { + dialog { + align-items: end; + } + + .small-dialog { + margin-bottom: calc(var(--padding) + env(safe-area-inset-bottom)); + box-shadow: 0 0 0 2px var(--popup-stroke) inset; + } } </style> diff --git a/web/src/components/meowbalt/MeowbaltError.svelte b/web/src/components/meowbalt/MeowbaltError.svelte new file mode 100644 index 00000000..34ec570e --- /dev/null +++ b/web/src/components/meowbalt/MeowbaltError.svelte @@ -0,0 +1,19 @@ +<script lang="ts"> + import { t } from "$lib/i18n/translations"; +</script> + +<img + id="meowbalt-error" + src="/meowbalt/error.png" + height="160" + alt={$t("a11y.meowbalt.error")} +/> + +<style> + #meowbalt-error { + display: block; + margin: 0; + object-fit: cover; + margin-left: 25px; + } +</style> diff --git a/web/src/components/meowbalt/MeowbaltLoaf.svelte b/web/src/components/meowbalt/MeowbaltLoaf.svelte index 908b1ec8..3e8533e3 100644 --- a/web/src/components/meowbalt/MeowbaltLoaf.svelte +++ b/web/src/components/meowbalt/MeowbaltLoaf.svelte @@ -6,7 +6,6 @@ id="meowbalt-loaf" src="/meowbalt/smile.png" height="152" - width="141" alt={$t("a11y.meowbalt.smile")} /> diff --git a/web/src/components/save/buttons/DownloadButton.svelte b/web/src/components/save/buttons/DownloadButton.svelte index 718a9041..5201b3bc 100644 --- a/web/src/components/save/buttons/DownloadButton.svelte +++ b/web/src/components/save/buttons/DownloadButton.svelte @@ -18,11 +18,13 @@ let defaultErrorPopup = { id: "save-error", type: "small", + meowbalt: "error", title: "", bodySubText: "", buttons: [{ text: $t("general.gotit"), color: "gray", + main: true, action: () => {}, }] } diff --git a/web/src/lib/types/dialog.ts b/web/src/lib/types/dialog.ts index b473acd1..20bea678 100644 --- a/web/src/lib/types/dialog.ts +++ b/web/src/lib/types/dialog.ts @@ -1,14 +1,16 @@ export type DialogButton = { text: string, color: string, + main: boolean, action: () => unknown | Promise<unknown> } export type DialogInfo = { id: string, type: "small", + meowbalt: "error", title: string, bodyText: string, bodySubText: string, - buttons: DialogButton[] + buttons: DialogButton[], } diff --git a/web/src/routes/+layout.svelte b/web/src/routes/+layout.svelte index 01f025fe..4af2d963 100644 --- a/web/src/routes/+layout.svelte +++ b/web/src/routes/+layout.svelte @@ -66,10 +66,14 @@ --button: #f4f4f4; --button-hover: #e8e8e8; --button-hover-transparent: rgba(0, 0, 0, 0.06); - --button-stroke: rgba(0, 0, 0, 0.05); + --button-stroke: rgba(0, 0, 0, 0.06); --button-text: #282828; --button-box-shadow: 0 0 0 1.5px var(--button-stroke) inset; + --popup-bg: #f1f1f1; + --popup-backdrop: var(--primary); + --popup-stroke: rgba(0, 0, 0, 0.08); + --sidebar-bg: #000000; --sidebar-highlight: #ffffff; --sidebar-hover: rgba(255, 255, 255, 0.1); @@ -120,6 +124,10 @@ --button-text: #e1e1e1; --button-box-shadow: 0 0 0 1.5px var(--button-stroke) inset; + --popup-bg: #191919; + --popup-backdrop: var(--primary); + --popup-stroke: rgba(255, 255, 255, 0.08); + --sidebar-bg: #101010; --sidebar-highlight: #f2f2f2; @@ -319,15 +327,6 @@ font-size: 11px; } - :global(dialog) { - max-height: 100%; - max-width: 100%; - padding: var(--padding); - border-radius: var(--border-radius); - border: none; - pointer-events: all; - } - :global(.subtext) { font-size: 12.5px; font-weight: 500; diff --git a/web/static/meowbalt/checking.png b/web/static/meowbalt/checking.png new file mode 100644 index 0000000000000000000000000000000000000000..0d6a51c2bb32c9a246b79ebc13bb2753129af4dd GIT binary patch literal 15440 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 Cu#xWo literal 0 HcmV?d00001 diff --git a/web/static/meowbalt/error.png b/web/static/meowbalt/error.png new file mode 100644 index 0000000000000000000000000000000000000000..f20c1d63534fc416123bdd217659be78b46d5275 GIT binary patch literal 7767 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 literal 0 HcmV?d00001 diff --git a/web/static/meowbalt/think.png b/web/static/meowbalt/think.png new file mode 100644 index 0000000000000000000000000000000000000000..2b06f0cc77162d69d85cd208ce4afd49fed3bc21 GIT binary patch literal 4496 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 literal 0 HcmV?d00001