full-layout with mobile bottom bar

pull/19/head
Niko PLP 1 year ago
parent a2f1cf8316
commit 58e7bb85a0
  1. 7
      ng-app/src-tauri/gen/android/app/build.gradle.kts
  2. 190
      ng-app/src/lib/FullLayout.svelte
  3. 161
      ng-app/src/lib/Home.svelte
  4. 12
      ng-app/src/lib/Login.svelte
  5. 23
      ng-app/src/lib/MobileBottomBar.svelte
  6. 32
      ng-app/src/lib/MobileBottomBarItem.svelte
  7. 4
      ng-app/src/lib/NoWallet.svelte
  8. 24
      ng-app/src/routes/WalletCreate.svelte
  9. 9
      ng-app/src/routes/WalletLogin.svelte
  10. 4
      ng-app/src/styles.css
  11. 9
      ng-app/tailwind.config.cjs
  12. 8
      ngaccount/web/src/App.svelte
  13. 2
      ngaccount/web/src/routes/Create.svelte
  14. 8
      ngone/web/src/App.svelte

@ -36,7 +36,8 @@ android {
isDebuggable = true isDebuggable = true
isJniDebuggable = true isJniDebuggable = true
isMinifyEnabled = false isMinifyEnabled = false
packaging { jniLibs.keepDebugSymbols.add("*/arm64-v8a/*.so") packaging {
jniLibs.keepDebugSymbols.add("*/arm64-v8a/*.so")
jniLibs.keepDebugSymbols.add("*/armeabi-v7a/*.so") jniLibs.keepDebugSymbols.add("*/armeabi-v7a/*.so")
jniLibs.keepDebugSymbols.add("*/x86/*.so") jniLibs.keepDebugSymbols.add("*/x86/*.so")
jniLibs.keepDebugSymbols.add("*/x86_64/*.so") jniLibs.keepDebugSymbols.add("*/x86_64/*.so")
@ -45,6 +46,10 @@ android {
getByName("release") { getByName("release") {
isMinifyEnabled = true isMinifyEnabled = true
signingConfig = signingConfigs.getByName("release") signingConfig = signingConfigs.getByName("release")
packaging {
jniLibs.excludes.add("*/x86/*.so")
jniLibs.excludes.add("*/x86_64/*.so")
}
proguardFiles( proguardFiles(
*fileTree(".") { include("**/*.pro") } *fileTree(".") { include("**/*.pro") }
.plus(getDefaultProguardFile("proguard-android-optimize.txt")) .plus(getDefaultProguardFile("proguard-android-optimize.txt"))

@ -0,0 +1,190 @@
<!--
// Copyright (c) 2022-2023 Niko Bonnieure, Par le Peuple, NextGraph.org developers
// All rights reserved.
// Licensed under the Apache License, Version 2.0
// <LICENSE-APACHE2 or http://www.apache.org/licenses/LICENSE-2.0>
// or the MIT license <LICENSE-MIT or http://opensource.org/licenses/MIT>,
// at your option. All files in the project carrying such
// notice may not be copied, modified, or distributed except
// according to those terms.
-->
<script lang="ts">
import {
Sidebar,
SidebarGroup,
SidebarItem,
SidebarWrapper,
} from "flowbite-svelte";
import { link, location } from "svelte-spa-router";
import MobileBottomBarItem from "./MobileBottomBarItem.svelte";
import MobileBottomBar from "./MobileBottomBar.svelte";
// @ts-ignore
import Logo from "../assets/nextgraph.svg?component";
// @ts-ignore
import LogoGray from "../assets/nextgraph-gray.svg?component";
import { online } from "../store";
import { onMount, tick } from "svelte";
import {
Home,
Bolt,
MagnifyingGlass,
PlusCircle,
PaperAirplane,
Bell,
User,
} from "svelte-heros-v2";
let width: number;
let breakPoint: number = 662;
let mobile = false;
$: if (width >= breakPoint) {
mobile = false;
} else {
mobile = true;
}
async function scrollToTop() {
await tick();
console.log("scrollToTop");
top.scrollIntoView();
}
onMount(async () => await scrollToTop());
$: activeUrl = "#" + $location;
let top;
let asideClass = "w-48";
let spanClass = "flex-1 ml-3 whitespace-nowrap";
let nonActiveClass =
"flex items-center p-2 text-base font-normal text-gray-900 rounded-lg dark:text-white hover:bg-gray-200 dark:hover:bg-gray-700";
</script>
{#if mobile}
<div class="full-layout">
<main class="pb-14" bind:this={top}>
<slot />
</main>
<MobileBottomBar {activeUrl}>
<MobileBottomBarItem href="#/" icon={Home} on:click={scrollToTop} />
<MobileBottomBarItem href="#/stream" icon={Bolt} on:click={scrollToTop} />
<MobileBottomBarItem
href="#/search"
icon={MagnifyingGlass}
on:click={scrollToTop}
/>
<MobileBottomBarItem href="#/create" icon={PlusCircle} />
<MobileBottomBarItem href="#/site" icon={User} on:click={scrollToTop} />
</MobileBottomBar>
</div>
{:else}
<div class="full-layout">
<Sidebar {activeUrl} {asideClass} {nonActiveClass} class="fixed">
<SidebarWrapper
divClass="bg-gray-60 overflow-y-auto tall:py-4 px-3 rounded dark:bg-gray-800"
>
<SidebarGroup ulClass="space-y-1 tall:space-y-2">
<SidebarItem label="NextGraph" href="#/user" class="mt-1">
<svelte:fragment slot="icon">
{#if $online}
<Logo class="w-7 h-7 tall:w-10 tall:h-10" />
{:else}
<LogoGray class="w-7 h-7 tall:w-10 tall:h-10" />
{/if}
</svelte:fragment>
</SidebarItem>
<SidebarItem
label="Home"
href="#/"
on:click={scrollToTop}
class="py-1 tall:p-2"
>
<svelte:fragment slot="icon">
<Home
tabindex="-1"
class="w-7 h-7 text-black transition duration-75 dark:text-white group-hover:text-gray-900 dark:group-hover:text-white"
/>
</svelte:fragment>
</SidebarItem>
<SidebarItem label="Stream" href="#/stream" class="py-1 tall:p-2">
<svelte:fragment slot="icon">
<Bolt
tabindex="-1"
class="w-7 h-7 text-black transition duration-75 dark:text-white group-hover:text-gray-900 dark:group-hover:text-white"
/>
</svelte:fragment>
</SidebarItem>
<SidebarItem label="Search" href="#/search" class="py-1 tall:p-2">
<svelte:fragment slot="icon">
<MagnifyingGlass
tabindex="-1"
class="w-7 h-7 text-black transition duration-75 dark:text-white group-hover:text-gray-900 dark:group-hover:text-white"
/>
</svelte:fragment>
</SidebarItem>
<SidebarItem label="Create" href="#/create" class="py-1 tall:p-2">
<svelte:fragment slot="icon">
<PlusCircle
tabindex="-1"
class="w-7 h-7 text-black transition duration-75 dark:text-white group-hover:text-gray-900 dark:group-hover:text-white"
/>
</svelte:fragment>
</SidebarItem>
<SidebarItem label="Site" href="#/site" class="py-1 tall:p-2">
<svelte:fragment slot="icon">
<User
tabindex="-1"
class="w-7 h-7 text-black transition duration-75 dark:text-white group-hover:text-gray-900 dark:group-hover:text-white"
/>
</svelte:fragment>
</SidebarItem>
<SidebarItem label="Messages" href="#/messages" class="py-1 tall:p-2">
<svelte:fragment slot="icon">
<PaperAirplane
tabindex="-1"
class="-rotate-45 w-7 h-7 text-black transition duration-75 dark:text-white group-hover:text-gray-900 dark:group-hover:text-white"
/>
<span
class="inline-flex justify-center items-center p-3 mt-1 -ml-3 w-3 h-3 text-sm font-medium text-primary-600 bg-primary-200 rounded-full dark:bg-primary-900 dark:text-primary-200"
>
3
</span>
</svelte:fragment>
</SidebarItem>
<SidebarItem
label="Notifications"
href="#/notifications"
class="mt-1 py-1 tall:p-2"
>
<svelte:fragment slot="icon">
<Bell
tabindex="-1"
class="w-7 h-7 text-black transition duration-75 dark:text-white group-hover:text-gray-900 dark:group-hover:text-white"
/>
<span
class="inline-flex justify-center items-center p-3 mt-1 -ml-3 w-3 h-3 text-sm font-medium text-primary-600 bg-primary-200 rounded-full dark:bg-primary-900 dark:text-primary-200"
>
10
</span>
</svelte:fragment>
</SidebarItem>
</SidebarGroup>
</SidebarWrapper>
</Sidebar>
<main class="ml-48" bind:this={top}>
<slot />
</main>
</div>
{/if}
<svelte:window bind:innerWidth={width} />
<style>
.full-layout {
height: 100vh;
}
</style>

@ -10,140 +10,31 @@
--> -->
<script lang="ts"> <script lang="ts">
import {
Sidebar,
SidebarGroup,
SidebarItem,
SidebarWrapper,
} from "flowbite-svelte";
import { link, location } from "svelte-spa-router";
// @ts-ignore
import Logo from "../assets/nextgraph.svg?component";
// @ts-ignore
import LogoGray from "../assets/nextgraph-gray.svg?component";
import { close_active_wallet, online } from "../store"; import { close_active_wallet, online } from "../store";
import { ArrowRightOnRectangle } from "svelte-heros-v2";
import { onMount } from "svelte"; import FullLayout from "./FullLayout.svelte";
import {
Home,
Bolt,
MagnifyingGlass,
PlusCircle,
PaperAirplane,
Bell,
User,
ArrowRightOnRectangle,
} from "svelte-heros-v2";
let width: number;
let breakPoint: number = 660;
let mobile = false;
$: if (width >= breakPoint) {
mobile = false;
} else {
mobile = true;
}
$: activeUrl = "#" + $location;
function logout() { function logout() {
close_active_wallet(); close_active_wallet();
} }
let asideClass = "w-48";
let spanClass = "flex-1 ml-3 whitespace-nowrap";
let nonActiveClass =
"flex items-center p-2 text-base font-normal text-gray-900 rounded-lg dark:text-white hover:bg-gray-200 dark:hover:bg-gray-700";
</script> </script>
<div class="full-layout"> <FullLayout>
<Sidebar {activeUrl} {asideClass} {nonActiveClass} class="fixed"> <h1>Welcome</h1>
<SidebarWrapper class="bg-gray-60"> <h1>Welcome</h1>
<SidebarGroup> <h1>Welcome</h1>
<SidebarItem label="NextGraph" href="#/user"> <h1>Welcome</h1>
<svelte:fragment slot="icon"> <h1>Welcome</h1>
{#if $online} <h1>Welcome</h1>
<Logo class="w-10 h-10" /> <h1>Welcome</h1>
{:else} <h1>Welcome</h1>
<LogoGray class="w-10 h-10" /> <h1>Welcome</h1>
{/if} <h1>Welcome</h1>
</svelte:fragment> <h1>Welcome</h1>
</SidebarItem> <h1>Welcome</h1>
<SidebarItem label="Home" href="#/"> <h1>Welcome</h1>
<svelte:fragment slot="icon">
<Home <h1>Welcome</h1>
tabindex="-1"
class="w-7 h-7 text-black transition duration-75 dark:text-white group-hover:text-gray-900 dark:group-hover:text-white"
/>
</svelte:fragment>
</SidebarItem>
<SidebarItem label="Stream" href="#/stream">
<svelte:fragment slot="icon">
<Bolt
tabindex="-1"
class="w-7 h-7 text-black transition duration-75 dark:text-white group-hover:text-gray-900 dark:group-hover:text-white"
/>
</svelte:fragment>
</SidebarItem>
<SidebarItem label="Search" href="#/search">
<svelte:fragment slot="icon">
<MagnifyingGlass
tabindex="-1"
class="w-7 h-7 text-black transition duration-75 dark:text-white group-hover:text-gray-900 dark:group-hover:text-white"
/>
</svelte:fragment>
</SidebarItem>
<SidebarItem label="Create" href="#/create">
<svelte:fragment slot="icon">
<PlusCircle
tabindex="-1"
class="w-7 h-7 text-black transition duration-75 dark:text-white group-hover:text-gray-900 dark:group-hover:text-white"
/>
</svelte:fragment>
</SidebarItem>
<SidebarItem label="Site" href="#/site">
<svelte:fragment slot="icon">
<User
tabindex="-1"
class="w-7 h-7 text-black transition duration-75 dark:text-white group-hover:text-gray-900 dark:group-hover:text-white"
/>
</svelte:fragment>
</SidebarItem>
<SidebarItem label="Messages" href="#/messages">
<svelte:fragment slot="icon">
<PaperAirplane
tabindex="-1"
class="-rotate-45 w-7 h-7 text-black transition duration-75 dark:text-white group-hover:text-gray-900 dark:group-hover:text-white"
/>
<span
class="inline-flex justify-center items-center p-3 mt-1 -ml-3 w-3 h-3 text-sm font-medium text-primary-600 bg-primary-200 rounded-full dark:bg-primary-900 dark:text-primary-200"
>
3
</span>
</svelte:fragment>
</SidebarItem>
<SidebarItem label="Notifications" href="#/notifications">
<svelte:fragment slot="icon">
<Bell
tabindex="-1"
class="w-7 h-7 text-black transition duration-75 dark:text-white group-hover:text-gray-900 dark:group-hover:text-white"
/>
<span
class="inline-flex justify-center items-center p-3 mt-1 -ml-3 w-3 h-3 text-sm font-medium text-primary-600 bg-primary-200 rounded-full dark:bg-primary-900 dark:text-primary-200"
>
10
</span>
</svelte:fragment>
</SidebarItem>
</SidebarGroup>
</SidebarWrapper>
</Sidebar>
<main class="ml-48">
<h1>Welcoe {mobile}</h1>
<div class="row mt-10"> <div class="row mt-10">
<button <button
on:click={logout} on:click={logout}
@ -154,12 +45,10 @@
Logout Logout
</button> </button>
</div> </div>
</main> <h1>Welcome</h1>
</div> <h1>Welcome</h1>
<svelte:window bind:innerWidth={width} /> <h1>Welcome</h1>
<h1>Welcome</h1>
<style> <h1>Welcome</h1>
.full-layout { <h1>End</h1>
height: 100vh; </FullLayout>
}
</style>

@ -233,7 +233,7 @@
{:else if step == "pazzle"} {:else if step == "pazzle"}
<div <div
class="h-screen aspect-[3/5] pazzleline" class="h-screen aspect-[3/5] pazzleline"
class:min-w-[350px]={mobile} class:min-w-[310px]={mobile}
class:min-w-[500px]={!mobile} class:min-w-[500px]={!mobile}
class:max-w-[360px]={mobile} class:max-w-[360px]={mobile}
class:max-w-[600px]={!mobile} class:max-w-[600px]={!mobile}
@ -258,7 +258,7 @@
<!-- console.log(cat_idx, emoji_cat[cat_idx], idx, cat[idx].code); --> <!-- console.log(cat_idx, emoji_cat[cat_idx], idx, cat[idx].code); -->
<div <div
class="h-screen aspect-[3/3] pazzleline" class="h-screen aspect-[3/3] pazzleline"
class:min-w-[350px]={mobile} class:min-w-[320px]={mobile}
class:min-w-[500px]={!mobile} class:min-w-[500px]={!mobile}
class:max-w-[360px]={mobile} class:max-w-[360px]={mobile}
class:max-w-[600px]={!mobile} class:max-w-[600px]={!mobile}
@ -293,17 +293,17 @@
{/each} {/each}
</div> </div>
{:else if step == "pin"} {:else if step == "pin"}
<div class=" max-w-6xl lg:px-8 mx-auto px-4"> <div class=" max-w-6xl lg:px-8 mx-auto px-3">
<p class="max-w-xl md:mx-auto lg:max-w-2xl"> <p class="max-w-xl md:mx-auto lg:max-w-2xl">
<span class="text-xl">Enter your PIN code</span> <span class="text-xl">Enter your PIN code</span>
</p> </p>
<div class="w-[325px] mx-auto"> <div class="w-[295px] mx-auto">
{#each [0, 1, 2] as row} {#each [0, 1, 2] as row}
<div class=""> <div class="">
{#each shuffle_pin.slice(0 + row * 3, 3 + row * 3) as num} {#each shuffle_pin.slice(0 + row * 3, 3 + row * 3) as num}
<button <button
tabindex="0" tabindex="0"
class="m-1 select-none align-bottom text-7xl w-[100px] h-[100px] p-0" class="m-1 select-none align-bottom text-7xl w-[90px] h-[90px] p-0"
on:click={async () => await pin(num)} on:click={async () => await pin(num)}
> >
<span>{num}</span> <span>{num}</span>
@ -313,7 +313,7 @@
{/each} {/each}
<button <button
tabindex="0" tabindex="0"
class="m-1 select-none mx-auto align-bottom text-7xl w-[100px] h-[100px] p-0" class="m-1 select-none mx-auto align-bottom text-7xl w-[90px] h-[90px] p-0"
on:click={async () => await pin(shuffle_pin[9])} on:click={async () => await pin(shuffle_pin[9])}
> >
<span>{shuffle_pin[9]}</span> <span>{shuffle_pin[9]}</span>

@ -0,0 +1,23 @@
<script lang="ts">
import { setContext } from "svelte";
import { writable } from "svelte/store";
export let activeUrl: string = "";
const activeUrlStore = writable("");
$: {
activeUrlStore.set(activeUrl);
}
setContext("activeUrl", activeUrlStore);
</script>
<nav
class="border-t border-solid border-gray-200 bg-white dark:bg-gray-900 text-gray-700 dark:text-gray-200 dark:border-gray-700 divide-gray-100 dark:divide-gray-700 px-2 sm:px-4 py-2.5 w-full fixed bottom-0 left-0 z-20"
>
<div
class="mx-auto flex flex-wrap justify-between items-center w-full px-2 xxs:px-8 xs:px-10"
>
<slot />
</div>
</nav>

@ -0,0 +1,32 @@
<script lang="ts">
import { getContext } from "svelte";
import type { ComponentType } from "svelte";
import { Icon } from "svelte-heros-v2";
export let href: string = "";
export let icon: ComponentType;
const activeUrlStore = getContext("activeUrl") as {
subscribe: (callback: (value: string) => void) => void;
};
let sidebarUrl = "";
activeUrlStore.subscribe((value) => {
// console.log('value: ', value)
sidebarUrl = value;
});
// console.log('sidbarUrl: ', sidebarUrl)
// console.log('href: ', href)
$: active = sidebarUrl ? href === sidebarUrl : false;
// console.log('active: ', active)
</script>
<a {href} class="flex items-center" on:click>
<Icon
tabindex="-1"
color="black"
variation={active ? "solid" : "outline"}
class="w-7 h-7 text-black transition duration-75 dark:text-white group-hover:text-gray-900 dark:group-hover:text-white focus:outline-none"
{icon}
/>
</a>

@ -27,7 +27,7 @@
We could not find a wallet saved on this device.<br /> If you already have We could not find a wallet saved on this device.<br /> If you already have
a wallet, select "Log in", otherwise, select "Create Wallet" here below a wallet, select "Log in", otherwise, select "Create Wallet" here below
</p> </p>
<div class="row mt-10"> <div class="row mt-5">
<a href="/wallet/create" use:link> <a href="/wallet/create" use:link>
<button <button
tabindex="-1" tabindex="-1"
@ -52,7 +52,7 @@
</button> </button>
</a> </a>
</div> </div>
<div class="row mt-10"> <div class="row mt-5">
<a href="/wallet/login" use:link> <a href="/wallet/login" use:link>
<button <button
tabindex="-1" tabindex="-1"

@ -245,7 +245,9 @@
cloud_link = "https://nextgraph.one/#/w/" + ready.wallet_name; cloud_link = "https://nextgraph.one/#/w/" + ready.wallet_name;
} }
if (ready.wallet_file.length) { if (ready.wallet_file.length) {
const blob = new Blob([ready.wallet_file]); const blob = new Blob([ready.wallet_file], {
type: "application/octet-stream",
});
download_link = URL.createObjectURL(blob); download_link = URL.createObjectURL(blob);
} }
} catch (e) { } catch (e) {
@ -1080,7 +1082,7 @@
</button> </button>
</div> </div>
{:else if pin.length < 4} {:else if pin.length < 4}
<div class=" max-w-6xl lg:px-8 mx-auto px-4"> <div class=" max-w-6xl lg:px-8 mx-auto px-3">
{#if registration_success} {#if registration_success}
<Alert color="green" class="mb-5"> <Alert color="green" class="mb-5">
<span class="font-bold text-xl" <span class="font-bold text-xl"
@ -1117,13 +1119,13 @@
>{digit}</span >{digit}</span
>{/each} >{/each}
</Alert> </Alert>
<div class="w-[325px] mx-auto mb-4"> <div class="w-[295px] mx-auto mb-4">
{#each [0, 1, 2] as row} {#each [0, 1, 2] as row}
<div class=""> <div class="">
{#each [1, 2, 3] as num} {#each [1, 2, 3] as num}
<button <button
tabindex="0" tabindex="0"
class="m-1 select-none align-bottom text-7xl w-[100px] h-[100px] p-0" class="m-1 select-none align-bottom text-7xl w-[90px] h-[90px] p-0"
on:click={async () => sel_pin(num + row * 3)} on:click={async () => sel_pin(num + row * 3)}
> >
<span>{num + row * 3}</span> <span>{num + row * 3}</span>
@ -1133,7 +1135,7 @@
{/each} {/each}
<button <button
tabindex="0" tabindex="0"
class="m-1 select-none mx-auto align-bottom text-7xl w-[100px] h-[100px] p-0" class="m-1 select-none mx-auto align-bottom text-7xl w-[90px] h-[90px] p-0"
on:click={async () => sel_pin(0)} on:click={async () => sel_pin(0)}
> >
<span>0</span> <span>0</span>
@ -1141,9 +1143,9 @@
</div> </div>
</div> </div>
{:else if pin_confirm.length < 4} {:else if pin_confirm.length < 4}
<div class=" max-w-6xl lg:px-8 mx-auto px-4"> <div class=" max-w-6xl lg:px-8 mx-auto px-3">
<p class="max-w-xl md:mx-auto lg:max-w-2xl"> <p class="max-w-xl md:mx-auto lg:max-w-2xl">
<span class="animate-bounce text-xl" <span class="text-red-800 text-xl"
>Please confirm your PIN code.</span >Please confirm your PIN code.</span
> >
Enter the same PIN again Enter the same PIN again
@ -1153,13 +1155,13 @@
class="font-bold text-xl">{digit}</span class="font-bold text-xl">{digit}</span
>{/each} >{/each}
</Alert> </Alert>
<div class="w-[325px] mx-auto"> <div class="w-[295px] mx-auto">
{#each [0, 1, 2] as row} {#each [0, 1, 2] as row}
<div class=""> <div class="">
{#each [1, 2, 3] as num} {#each [1, 2, 3] as num}
<button <button
tabindex="0" tabindex="0"
class="m-1 select-none align-bottom text-7xl w-[100px] h-[100px] p-0" class="m-1 select-none align-bottom text-7xl w-[90px] h-[90px] p-0"
on:click={async () => await confirm_pin(num + row * 3)} on:click={async () => await confirm_pin(num + row * 3)}
> >
<span>{num + row * 3}</span> <span>{num + row * 3}</span>
@ -1169,7 +1171,7 @@
{/each} {/each}
<button <button
tabindex="0" tabindex="0"
class="m-1 select-none mx-auto align-bottom text-7xl w-[100px] h-[100px] p-0" class="m-1 select-none mx-auto align-bottom text-7xl w-[90px] h-[90px] p-0"
on:click={async () => await confirm_pin(0)} on:click={async () => await confirm_pin(0)}
> >
<span>0</span> <span>0</span>
@ -1311,7 +1313,7 @@
</Dropzone> </Dropzone>
<img <img
bind:this={img_preview} bind:this={img_preview}
class="max-w-[300px] h-[300px] mx-auto mb-10" class="max-w-[250px] h-[250px] mx-auto mb-10"
src={image_url} src={image_url}
/> />
{:else} {:else}

@ -31,6 +31,7 @@
let step; let step;
let error; let error;
let importing = false; let importing = false;
let top;
let wallets_unsub; let wallets_unsub;
let opened_wallets_unsub; let opened_wallets_unsub;
@ -134,8 +135,13 @@
}; };
} }
} }
function scrollToTop() {
top.scrollIntoView();
}
onMount(() => scrollToTop());
</script> </script>
<div bind:this={top}>
<CenteredLayout> <CenteredLayout>
{#if error} {#if error}
<div class=" max-w-6xl lg:px-8 mx-auto px-4 text-red-800"> <div class=" max-w-6xl lg:px-8 mx-auto px-4 text-red-800">
@ -214,7 +220,7 @@
<Fileupload <Fileupload
style="display:none;" style="display:none;"
id="import_wallet_file" id="import_wallet_file"
accept=".ngw, .txt" accept="application/octet-stream, .ngw"
on:change={handleWalletUpload} on:change={handleWalletUpload}
/> />
<button <button
@ -318,6 +324,7 @@
{:else if step == "security"}{:else if step == "qrcode"}{:else if step == "cloud"}{:else if step == "loggedin"}you {:else if step == "security"}{:else if step == "qrcode"}{:else if step == "cloud"}{:else if step == "loggedin"}you
are logged in{/if} are logged in{/if}
</CenteredLayout> </CenteredLayout>
</div>
<style> <style>
.wallet-box { .wallet-box {

@ -30,7 +30,7 @@ div[role="alert"] div {
} }
.choice-button { .choice-button {
min-width: 340px; min-width: 320px;
} }
.row { .row {
@ -58,7 +58,7 @@ body {
margin: 0; margin: 0;
display: flex; display: flex;
place-items: center; place-items: center;
min-width: 320px; min-width: 305px;
min-height: 100vh; min-height: 100vh;
} }

@ -1,4 +1,5 @@
/** @type {import('tailwindcss').Config}*/ /** @type {import('tailwindcss').Config}*/
const defaultTheme = require('tailwindcss/defaultTheme')
const config = { const config = {
content: [ content: [
"./src/**/*.{html,js,svelte,ts}", "./src/**/*.{html,js,svelte,ts}",
@ -9,7 +10,13 @@ const config = {
extend: { extend: {
colors: { colors: {
primary: { "50": "#eff6ff", "100": "#dbeafe", "200": "#bfdbfe", "300": "#93c5fd", "400": "#60a5fa", "500": "#3b82f6", "600": "#1E88E5", "700": "#4972A5", "800": "#1e40af", "900": "#1e3a8a" } primary: { "50": "#eff6ff", "100": "#dbeafe", "200": "#bfdbfe", "300": "#93c5fd", "400": "#60a5fa", "500": "#3b82f6", "600": "#1E88E5", "700": "#4972A5", "800": "#1e40af", "900": "#1e3a8a" }
} },
},
screens: {
'xxs': '400px',
'xs': '500px',
...defaultTheme.screens,
'tall': { 'raw': '(min-height: 450px)' },
}, },
}, },

@ -28,3 +28,11 @@
<main class=""> <main class="">
<Router {routes} /> <Router {routes} />
</main> </main>
<style>
main {
margin: 0 auto;
padding: 0rem;
text-align: center;
}
</style>

@ -307,7 +307,7 @@
<span> <span>
You can delete your account with us at any time by going to the You can delete your account with us at any time by going to the
link <a target="_blank" href="https://account.{domain}/#/delete" link <a target="_blank" href="https://account.{domain}/#/delete"
>https://account.{domain}/#/delete</a >account.{domain}/#/delete</a
> or by entering in your NextGraph application and selecting the > or by entering in your NextGraph application and selecting the
menu, then Accounts, then under broker "delete registration"</span menu, then Accounts, then under broker "delete registration"</span
> >

@ -30,3 +30,11 @@
<main class=""> <main class="">
<Router {routes} /> <Router {routes} />
</main> </main>
<style>
main {
margin: 0 auto;
padding: 0rem;
text-align: center;
}
</style>

Loading…
Cancel
Save