remove shoelace, switch from bootstrap icons to boxicons

feat/vaults
Tomáš Mládek 2021-12-30 19:28:43 +01:00
parent c16f0347b9
commit af2913f17e
No known key found for this signature in database
GPG Key ID: ED21612889E75EC5
20 changed files with 523 additions and 220 deletions

View File

@ -35,7 +35,7 @@
"typescript": "^4.0.0"
},
"dependencies": {
"@shoelace-style/shoelace": "^2.0.0-beta.58",
"boxicons": "^2.1.1",
"date-fns": "^2.25.0",
"filesize": "^8.0.6",
"history": "^5.1.0",

View File

@ -63,11 +63,20 @@ export default {
{
src: path.join(
path.dirname(
require.resolve("@shoelace-style/shoelace/package.json")
require.resolve("boxicons/package.json")
),
"dist/assets"
"fonts"
),
dest: path.resolve(__dirname, "public/vendor/shoelace"),
dest: path.resolve(__dirname, "public/vendor/boxicons"),
},
{
src: path.join(
path.dirname(
require.resolve("boxicons/package.json")
),
"css"
),
dest: path.resolve(__dirname, "public/vendor/boxicons"),
},
],
}),

View File

@ -3,24 +3,10 @@
import createHashSource from "./util/history";
import Header from "./components/layout/Header.svelte";
import Footer from "./components/layout/Footer.svelte";
import { setBasePath } from "@shoelace-style/shoelace/dist/utilities/base-path.js";
import "@shoelace-style/shoelace/dist/components/input/input.js";
import "@shoelace-style/shoelace/dist/components/icon-button/icon-button.js";
import "@shoelace-style/shoelace/dist/components/spinner/spinner.js";
import "@shoelace-style/shoelace/dist/components/card/card.js";
import "@shoelace-style/shoelace/dist/components/progress-bar/progress-bar";
import Home from "./views/Home.svelte";
import Browse from "./views/Browse.svelte";
import Search from "./views/Search.svelte";
setBasePath("/vendor/shoelace");
$: document.body.classList.toggle(
"sl-theme-dark",
window.matchMedia &&
window.matchMedia("(prefers-color-scheme: dark)").matches
);
const history = createHistory(createHashSource());
let footerHeight = "0";
@ -29,8 +15,7 @@
}
</script>
<Router {history} primary={false} --footer-height={footerHeight} >
<Router {history} primary={false} --footer-height={footerHeight}>
<Header />
<Route path="/">
@ -52,12 +37,11 @@
@use "sass:color";
@use "normalize.css/normalize.css";
@use "@shoelace-style/shoelace/dist/themes/light.css";
@use "@shoelace-style/shoelace/dist/themes/dark.css";
@import url("/assets/fonts/inter.css");
$primary: #2c3e50;
$primary-lighter: #394f66;
$primary-lighter: #3f5770;
$primary-lightest: #3a92f0;
$background: white;
html {
@ -67,6 +51,7 @@
--foreground-lighter: #{$primary-lighter};
--background: #{$background};
--background-emph: #{color.scale($background, $lightness: -3%)};
--primary-lightest: #{$primary-lightest};
--error: darkred;
--warning: orange;
font-size: 15px;
@ -89,6 +74,7 @@
--foreground-lighter: #{color.scale($background, $lightness: -50%)};
--background: #{$primary};
--background-emph: #{$primary-lighter};
--primary-lightest: #{$primary-lightest};
--error: red;
}
}
@ -136,9 +122,8 @@
color: var(--foreground);
}
sl-spinner {
.spinner {
font-size: 2em;
--track-width: 6px;
position: relative;
left: 50%;

View File

@ -6,6 +6,8 @@
import TableComponent from "./widgets/Table.svelte"; // silence false svelte(reactive-component) warnings
import type { AttributeChange } from "../types/base";
import type { UpEntry } from "upend";
import Icon from "./utils/Icon.svelte";
import IconButton from "./utils/IconButton.svelte";
const dispatch = createEventDispatcher();
export let address: string;
@ -78,7 +80,7 @@
<UpLink to={{ entity: type.address }}>
{#if type.icon}
<div class="icon">
<sl-icon name={type.icon} />
<Icon name={type.icon} />
</div>
{/if}
{type.name || "???"}
@ -91,9 +93,10 @@
{#if currentWidget && (availableWidgets.length > 1 || editable)}
<div class="views">
{#each availableWidgets as widget (widget.name)}
<sl-icon-button
<IconButton
name={widget.icon || "question-diamond"}
class:active={widget.name === currentWidget}
active={widget.name === currentWidget}
--active-color="var(--foreground)"
on:click={() => (currentWidget = widget.name)}
/>
{/each}
@ -147,8 +150,9 @@
margin-top: -0.3em;
}
sl-icon {
margin-bottom: -2px;
.icon {
position: relative;
bottom: -2px;
}
}
@ -160,18 +164,6 @@
right: 1ex;
font-size: 18px;
sl-icon-button {
&::part(base) {
padding: 0 calc(0.75ex / 2);
}
&.active {
&::part(base) {
color: var(--foreground);
}
}
}
}
}
}

View File

@ -7,6 +7,7 @@
import { setContext } from "svelte";
import { writable } from "svelte/store";
import type { UpEntry } from "upend";
import Spinner from "./utils/Spinner.svelte";
export let address: string;
export let index: number | undefined;
@ -84,7 +85,7 @@
{#if $entity}
<UpObject banner {address} />
{:else}
<sl-spinner />
<Spinner />
{/if}
</h2>
<BlobPreview {address} />
@ -122,7 +123,7 @@
{/if}
</div>
{:else}
<sl-spinner />
<Spinner />
{/if}
{:else}
<div class="error">

View File

@ -7,6 +7,7 @@
import { useEntity } from "../../lib/entity";
import { readable } from "svelte/store";
import { notify, UpNotification } from "../../notifications";
import IconButton from "../utils/IconButton.svelte";
const dispatch = createEventDispatcher();
export let address: string;
@ -87,7 +88,7 @@
{/if}
</div>
{#if banner && isFile}
<sl-icon-button
<IconButton
name="arrow-up-right-circle"
on:click={nativeOpen}
title="Open in default application..."
@ -133,10 +134,4 @@
.resolving {
opacity: 0.7;
}
sl-icon-button {
&::part(base) {
padding: 0 0.25em;
}
}
</style>

View File

@ -27,6 +27,7 @@
display: flex;
flex-direction: column;
background: var(--background);
border-top: 1px solid var(--foreground);
}
:global(#footer > *) {

View File

@ -1,6 +1,8 @@
<script lang="ts">
import { Link, useLocation, useNavigate, useParams } from "svelte-navigator";
import { useMatch } from "svelte-navigator";
import Icon from "../utils/Icon.svelte";
import Input from "../utils/Input.svelte";
const navigate = useNavigate();
const location = useLocation();
@ -8,8 +10,8 @@
let searchQuery = $searchMatch?.params.query || "";
$: if (!$location.pathname.includes("search")) searchQuery = "";
function onInput(ev: InputEvent) {
searchQuery = ev.target.value;
function onInput(event: InputEvent & { target: HTMLInputElement }) {
searchQuery = event.target.value;
if (searchQuery.length > 0) {
navigate(`/search/${searchQuery}`);
@ -26,9 +28,11 @@
UpEnd
</Link>
</h1>
<sl-input placeholder="Search" value={searchQuery} on:sl-input={onInput}>
<sl-icon name="search" slot="prefix" />
</sl-input>
<div class="input">
<Input placeholder="Search" value={searchQuery} on:input={onInput}>
<Icon name="search" slot="prefix" />
</Input>
</div>
</div>
<style lang="scss">
@ -65,7 +69,7 @@
height: 1.5em;
}
sl-input {
.input {
margin-left: 1em;
flex-grow: 1;
}

View File

@ -1,6 +1,7 @@
<script lang="ts">
import type { IJob } from "upend/types";
import { fade } from "svelte/transition";
import ProgessBar from "../utils/ProgessBar.svelte";
interface JobWithId extends IJob {
id: string;
@ -30,9 +31,9 @@
{#each activeJobs as job (job.id)}
<div class="job" transition:fade>
<div class="job-label">{job.title}</div>
<sl-progress-bar value={job.progress}>
<ProgessBar value={job.progress}>
{Math.round(job.progress)}%
</sl-progress-bar>
</ProgessBar>
</div>
{/each}
@ -44,9 +45,5 @@
white-space: nowrap;
margin-right: 2em;
}
sl-progress-bar {
width: 100%;
}
}
</style>

View File

@ -2,6 +2,7 @@
import { notify } from "../../notifications";
import { fade } from "svelte/transition";
import type { UpNotification } from "../../notifications";
import Icon from "../utils/Icon.svelte";
let notifications: UpNotification[] = [];
@ -29,7 +30,7 @@
class="notification notification-{notification.level || 'info'}"
transition:fade
>
<sl-icon name={icons[notification.level] || "bell"} />
<Icon name={icons[notification.level] || "bell"} />
{notification.content}
</div>
{/each}

View File

@ -0,0 +1,19 @@
<script lang="ts" context="module">
import { onMount } from "svelte";
let loaded = false;
</script>
<script lang="ts">
export let name: string;
if (!loaded) {
document.head.innerHTML += `<link
rel="stylesheet"
href="/vendor/boxicons/css/boxicons.min.css"
/>`;
loaded = true;
}
</script>
<i class="bx bx-{name}" />

View File

@ -0,0 +1,30 @@
<script lang="ts">
import Icon from "./Icon.svelte";
export let name: string;
export let active = false;
export let disabled = false;
export let title: string | undefined = undefined;
</script>
<button on:click class:active {disabled} {title}>
<Icon {name} />
</button>
<style lang="scss">
button {
border: 0;
background: transparent;
cursor: pointer;
color: inherit;
opacity: 0.66;
transition: opacity 0.2s, color 0.2s;
}
.active,
button:hover {
opacity: 1;
color: var(--active-color, var(--primary-lightest));
}
</style>

View File

@ -0,0 +1,49 @@
<script lang="ts">
export let placeholder = "";
export let type = "text";
export let value = "";
let focused = false;
</script>
<div class="input" class:focused>
<slot name="prefix" />
<input
{type}
{placeholder}
{value}
on:input
on:focus={() => (focused = true)}
on:blur={() => (focused = false)}
/>
</div>
<style lang="scss">
.input {
display: flex;
align-items: center;
gap: 0.25em;
padding: 0.25em;
border: 1px solid var(--foreground-lighter);
border-radius: 4px;
background: var(--background-emph);
transition: box-shadow .25s;
&.focused {
box-shadow: 0 0 2px 3px var(--primary-lightest);
}
}
input {
flex-grow: 1;
color: var(--foreground);
background: transparent;
border: none;
&:focus {
outline: none;
}
}
</style>

View File

@ -0,0 +1,46 @@
<script lang="ts">
export let value: number;
</script>
<div class="progress-bar" style="--value: {value}%">
<div class="value" />
<div class="label">
<slot>
{value}%
</slot>
</div>
</div>
<style lang="scss">
.progress-bar {
width: 100%;
height: 1em;
background: white;
position: relative;
}
.value {
background: var(--primary-lightest);
height: 100%;
width: var(--value);
transition: width 0.2s ease;
}
.progress-bar,
.value {
border-radius: 2px;
}
.label {
font-size: 0.8em;
color: white;
z-index: 9;
position: absolute;
left: 50%;
top: 0;
transform: translateX(-50%);
text-align: center;
font-weight: bold;
mix-blend-mode: difference;
}
</style>

View File

@ -0,0 +1,39 @@
<div class="spinner lds-ripple">
<div />
<div />
</div>
<style>
.lds-ripple {
display: inline-block;
position: relative;
width: 1em;
height: 1em;
}
.lds-ripple div {
position: absolute;
border: 0.07em solid var(--foreground);
opacity: 1;
border-radius: 50%;
animation: lds-ripple 1.5s cubic-bezier(0, 0.2, 0.8, 1) infinite;
}
.lds-ripple div:nth-child(2) {
animation-delay: -0.5s;
}
@keyframes lds-ripple {
0% {
top: .5em;
left: .5em;
width: 0;
height: 0;
opacity: 1;
}
100% {
top: 0px;
left: 0px;
width: 1em;
height: 1em;
opacity: 0;
}
}
</style>

View File

@ -8,6 +8,8 @@
import { useParams } from "svelte-navigator";
import type { Writable } from "svelte/store";
import type { UpEntry } from "upend";
import IconButton from "../utils/IconButton.svelte";
import Input from "../utils/Input.svelte";
const dispatch = createEventDispatcher();
const params = useParams();
@ -229,9 +231,9 @@
>
{#if editable}
<td class="attr-action">
<sl-icon-button
<IconButton
name="x-circle"
on:click={removeEntry(entry.address)}
on:click={() => removeEntry(entry.address)}
/>
</td>
{/if}
@ -297,21 +299,19 @@
{#if editable}
<tr>
<td class="attr-action">
<sl-icon-button name="plus-circle" on:click={addEntry} />
<IconButton name="plus-circle" on:click={addEntry} />
</td>
{#if showAttribute}
<td>
<sl-input
on:sl-input={(ev) => (newEntryAttribute = ev.target.value)}
size="small"
<Input
on:input={(ev) => (newEntryAttribute = ev.target.value)}
/>
</td>
{/if}
{#if showValue}
<td>
<sl-input
on:sl-input={(ev) => (newEntryValue = ev.target.value)}
size="small"
<Input
on:input={(ev) => (newEntryValue = ev.target.value)}
/>
</td>
{/if}
@ -377,11 +377,5 @@
.attr-col {
width: 33%;
}
sl-icon-button {
&::part(base) {
padding: 2px;
}
}
}
</style>

View File

@ -32,7 +32,7 @@ export interface Widget {
}
const TYPE_ICONS: { [key: string]: string } = {
BLOB: "box",
BLOB: "package",
HIER: "folder",
};

View File

@ -1,6 +1,7 @@
<script lang="ts">
import { useNavigate, useParams } from "svelte-navigator";
import Inspect from "../components/Inspect.svelte";
import IconButton from "../components/utils/IconButton.svelte";
import { normUrl as normURL } from "../util/history";
const navigate = useNavigate();
const params = useParams();
@ -33,19 +34,16 @@
{#each addresses as address, index}
<div class="view" data-address={address}>
<header>
<sl-icon-button
class="edit-button"
<IconButton
name="pencil"
on:click={() => (editable[index] = !editable[index])}
/>
<sl-icon-button
class="this-button"
<IconButton
name="bookmark"
on:click={() => visit(index)}
disabled={addresses.length === 1}
/>
<sl-icon-button
class="close-button"
<IconButton
name="x-circle"
on:click={() => close(index)}
disabled={addresses.length === 1}
@ -80,22 +78,15 @@
border-right: 1px solid var(--foreground);
header {
font-size: 22px;
position: relative;
margin: 0 1rem;
min-height: 1em;
display: flex;
justify-content: space-between;
flex: none;
.this-button {
position: absolute;
left: 50%;
translate: transformX(-50%);
}
.close-button {
position: absolute;
right: 0;
}
}
}
</style>

View File

@ -5,6 +5,7 @@
import { UpListing } from "upend";
import type { IFile, ListingResult, VaultInfo } from "upend/types";
import UpObjectCard from "../components/display/UpObjectCard.svelte";
import Spinner from "../components/utils/Spinner.svelte";
let infoData: VaultInfo | undefined;
@ -40,7 +41,7 @@ import UpObjectCard from "../components/display/UpObjectCard.svelte";
<section class="roots">
<h2>Roots</h2>
{#await roots}
<sl-spinner />
<Spinner />
{:then data}
<ul>
{#each data as root}
@ -57,7 +58,7 @@ import UpObjectCard from "../components/display/UpObjectCard.svelte";
<section class="latest">
<h2>Most recently added files</h2>
{#await latestFiles}
<sl-spinner />
<Spinner />
{:then data}
<table>
{#each data as file}

View File

@ -32,6 +32,15 @@ __metadata:
languageName: node
linkType: hard
"@babel/runtime@npm:^7.1.2":
version: 7.16.5
resolution: "@babel/runtime@npm:7.16.5"
dependencies:
regenerator-runtime: ^0.13.4
checksum: b96e67280efe581c6147b4fe984dfe08a8fbea048934a092f3cbf4dcf61725f6b221cb0c879b6e6e98671f83a104c9e8cfbd24c683e5ebcc886a731aa8984ad0
languageName: node
linkType: hard
"@babel/runtime@npm:^7.7.6":
version: 7.16.0
resolution: "@babel/runtime@npm:7.16.0"
@ -73,13 +82,6 @@ __metadata:
languageName: node
linkType: hard
"@lit/reactive-element@npm:^1.0.0":
version: 1.0.1
resolution: "@lit/reactive-element@npm:1.0.1"
checksum: 82f8eb195acb766413fa37dafab8dc853547e5fbb901318d9911b3f9410a15ceea37c9a4b0954ab37710e91140af243148af9f72ec3bd14fe71e1d03faaaad7a
languageName: node
linkType: hard
"@nodelib/fs.scandir@npm:2.1.5":
version: 2.1.5
resolution: "@nodelib/fs.scandir@npm:2.1.5"
@ -134,13 +136,6 @@ __metadata:
languageName: node
linkType: hard
"@popperjs/core@npm:^2.7.0":
version: 2.10.2
resolution: "@popperjs/core@npm:2.10.2"
checksum: 43c189e3eb6d032433512d94761b54fc7cae15957ca5528008813f887a67b5760b949f30a5141b476be2ba5a6c677c91def150f603d2d3e30b5e97a5ae51474e
languageName: node
linkType: hard
"@rollup/plugin-commonjs@npm:^17.0.0":
version: 17.1.0
resolution: "@rollup/plugin-commonjs@npm:17.1.0"
@ -223,26 +218,6 @@ __metadata:
languageName: node
linkType: hard
"@shoelace-style/animations@npm:^1.1.0":
version: 1.1.0
resolution: "@shoelace-style/animations@npm:1.1.0"
checksum: 65a9782d27c4e295501298a033d6e102c7dcec7d71a906eeec7bfee7421156a7d7b5bde1f09d586d6efe55212233a6c134f38e70bb3a9b2de247a5e11ddb221e
languageName: node
linkType: hard
"@shoelace-style/shoelace@npm:^2.0.0-beta.58":
version: 2.0.0-beta.58
resolution: "@shoelace-style/shoelace@npm:2.0.0-beta.58"
dependencies:
"@popperjs/core": ^2.7.0
"@shoelace-style/animations": ^1.1.0
color: ^3.1.3
lit: ^2.0.0
qr-creator: ^1.0.0
checksum: 1eb46f3453dd832fe1a4d18d5f1f57d2c9e58d8e02e5e3e4eccec2402da28775d9145faa54765d73a6429a80d2d5795d892f373cad97fde036035f21404dfa85
languageName: node
linkType: hard
"@sideway/address@npm:^4.1.0":
version: 4.1.2
resolution: "@sideway/address@npm:4.1.2"
@ -380,13 +355,6 @@ __metadata:
languageName: node
linkType: hard
"@types/trusted-types@npm:^2.0.2":
version: 2.0.2
resolution: "@types/trusted-types@npm:2.0.2"
checksum: 3371eef5f1c50e1c3c07a127c1207b262ba65b83dd167a1c460fc1b135a3fb0c97b9f508efebd383f239cc5dd5b7169093686a692a501fde9c3f7208657d9b0d
languageName: node
linkType: hard
"@ungap/event-target@npm:^0.2.2":
version: 0.2.3
resolution: "@ungap/event-target@npm:0.2.3"
@ -394,6 +362,13 @@ __metadata:
languageName: node
linkType: hard
"@webcomponents/webcomponentsjs@npm:^2.0.2":
version: 2.6.0
resolution: "@webcomponents/webcomponentsjs@npm:2.6.0"
checksum: b1325d7ce201644890e666b723c33cd759c3286fe222962073a4652fa671ad07a8a6797303411440b7ad21a65399373dd9a4a920f6cefe758fa98cbc71e704b5
languageName: node
linkType: hard
"@yarnpkg/fslib@npm:^2.6.0":
version: 2.6.0
resolution: "@yarnpkg/fslib@npm:2.6.0"
@ -588,6 +563,20 @@ __metadata:
languageName: node
linkType: hard
"boxicons@npm:^2.1.1":
version: 2.1.1
resolution: "boxicons@npm:2.1.1"
dependencies:
"@webcomponents/webcomponentsjs": ^2.0.2
prop-types: ^15.6.0
react: ^16.0.0
react-dom: ^16.0.0
react-interactive: ^0.8.1
react-router-dom: ^4.2.2
checksum: c192c79693da679c534abf748d025c4775808a8d817b5f9443d4310194cdcf4d37207fef0760915b37323cdb42266f907b18c3b69a6a6ae6b5cab0fa0ec09da9
languageName: node
linkType: hard
"brace-expansion@npm:^1.1.7":
version: 1.1.11
resolution: "brace-expansion@npm:1.1.11"
@ -722,7 +711,7 @@ __metadata:
languageName: node
linkType: hard
"color-convert@npm:^1.9.0, color-convert@npm:^1.9.3":
"color-convert@npm:^1.9.0":
version: 1.9.3
resolution: "color-convert@npm:1.9.3"
dependencies:
@ -747,33 +736,13 @@ __metadata:
languageName: node
linkType: hard
"color-name@npm:^1.0.0, color-name@npm:~1.1.4":
"color-name@npm:~1.1.4":
version: 1.1.4
resolution: "color-name@npm:1.1.4"
checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610
languageName: node
linkType: hard
"color-string@npm:^1.6.0":
version: 1.6.0
resolution: "color-string@npm:1.6.0"
dependencies:
color-name: ^1.0.0
simple-swizzle: ^0.2.2
checksum: 33466a65277dd3d4ce24ef1991b47069292f75d1a43b0d2e7ea43076ba793728e965d50deed2b523f35519f4995a908253fcbcc774baceae8e439bc78c02e850
languageName: node
linkType: hard
"color@npm:^3.1.3":
version: 3.2.1
resolution: "color@npm:3.2.1"
dependencies:
color-convert: ^1.9.3
color-string: ^1.6.0
checksum: f81220e8b774d35865c2561be921f5652117638dcda7ca4029262046e37fc2444ac7bbfdd110cf1fd9c074a4ee5eda8f85944ffbdda26186b602dd9bb05f6400
languageName: node
linkType: hard
"colorette@npm:^1.1.0":
version: 1.4.0
resolution: "colorette@npm:1.4.0"
@ -911,6 +880,13 @@ __metadata:
languageName: node
linkType: hard
"detect-hover@npm:^1.0.3":
version: 1.0.3
resolution: "detect-hover@npm:1.0.3"
checksum: 162f0eec032b22d5e2e264a70eb03cf21c1be41755243a25f29b2e536a98bcd679d4a0f0bc8078fe52c10d0c323ae8206b665d34166bb1007fd1e1044af93e8a
languageName: node
linkType: hard
"detect-indent@npm:^6.0.0":
version: 6.1.0
resolution: "detect-indent@npm:6.1.0"
@ -918,6 +894,39 @@ __metadata:
languageName: node
linkType: hard
"detect-it@npm:^3.0.3":
version: 3.0.7
resolution: "detect-it@npm:3.0.7"
dependencies:
detect-hover: ^1.0.3
detect-passive-events: ^1.0.5
detect-pointer: ^1.0.3
detect-touch-events: ^2.0.2
checksum: 4ddd4be039dfeffee3c5c3d36db0e85f531d9a226a64e246c70cee16c2c88a4bc3b69afc46b565fc9694a635cd5b95d2fc2130fc6d6e94d1d50c1e9e6ba5058d
languageName: node
linkType: hard
"detect-passive-events@npm:^1.0.5":
version: 1.0.5
resolution: "detect-passive-events@npm:1.0.5"
checksum: 0de350485b3dffbea0b5aefbe6eb889017f76c32b39bbade65095cce16929fa08fa8489f213a03fe46e118b11579b2d2f002512096d1e7c80a4532be7c8f9bb3
languageName: node
linkType: hard
"detect-pointer@npm:^1.0.3":
version: 1.0.3
resolution: "detect-pointer@npm:1.0.3"
checksum: 9bce37d317c25e95acbcc16a66a263cf726d7ab2bf97d0a27740c9e5aed5d11863b2df88651bf560b3e068480a99b6d1f706a13f20ccc2e7d5d269ac87529153
languageName: node
linkType: hard
"detect-touch-events@npm:^2.0.2":
version: 2.0.2
resolution: "detect-touch-events@npm:2.0.2"
checksum: e8c92d773adb8ea24584a3fc3fd80478e0f965ca9ec7a74c36be97345326d6ce9b9c3422aea4a035edd339536c0b6214ef6f3c3f0b0affac66d82ff89a2fb326
languageName: node
linkType: hard
"dir-glob@npm:^3.0.1":
version: 3.0.1
resolution: "dir-glob@npm:3.0.1"
@ -1413,6 +1422,20 @@ __metadata:
languageName: node
linkType: hard
"history@npm:^4.7.2":
version: 4.10.1
resolution: "history@npm:4.10.1"
dependencies:
"@babel/runtime": ^7.1.2
loose-envify: ^1.2.0
resolve-pathname: ^3.0.0
tiny-invariant: ^1.0.2
tiny-warning: ^1.0.0
value-equal: ^1.0.1
checksum: addd84bc4683929bae4400419b5af132ff4e4e9b311a0d4e224579ea8e184a6b80d7f72c55927e4fa117f69076a9e47ce082d8d0b422f1a9ddac7991490ca1d0
languageName: node
linkType: hard
"history@npm:^5.1.0":
version: 5.1.0
resolution: "history@npm:5.1.0"
@ -1422,6 +1445,13 @@ __metadata:
languageName: node
linkType: hard
"hoist-non-react-statics@npm:^2.5.0":
version: 2.5.5
resolution: "hoist-non-react-statics@npm:2.5.5"
checksum: ee2d05e5c7e1398ad84a15b0327f66bd78f38a8e0015e852f954b36434e32eb7e942d5357505020a3a1147f247b165bf1e69d72393e3accab67cafdafeb86230
languageName: node
linkType: hard
"http-cache-semantics@npm:^4.1.0":
version: 4.1.0
resolution: "http-cache-semantics@npm:4.1.0"
@ -1549,6 +1579,15 @@ __metadata:
languageName: node
linkType: hard
"invariant@npm:^2.2.4":
version: 2.2.4
resolution: "invariant@npm:2.2.4"
dependencies:
loose-envify: ^1.0.0
checksum: cc3182d793aad82a8d1f0af697b462939cb46066ec48bbf1707c150ad5fad6406137e91a262022c269702e01621f35ef60269f6c0d7fd178487959809acdfb14
languageName: node
linkType: hard
"ip@npm:^1.1.5":
version: 1.1.5
resolution: "ip@npm:1.1.5"
@ -1563,13 +1602,6 @@ __metadata:
languageName: node
linkType: hard
"is-arrayish@npm:^0.3.1":
version: 0.3.2
resolution: "is-arrayish@npm:0.3.2"
checksum: 977e64f54d91c8f169b59afcd80ff19227e9f5c791fa28fa2e5bce355cbaf6c2c356711b734656e80c9dd4a854dd7efcf7894402f1031dfc5de5d620775b4d5f
languageName: node
linkType: hard
"is-binary-path@npm:~2.1.0":
version: 2.1.0
resolution: "is-binary-path@npm:2.1.0"
@ -1657,6 +1689,13 @@ __metadata:
languageName: node
linkType: hard
"isarray@npm:0.0.1":
version: 0.0.1
resolution: "isarray@npm:0.0.1"
checksum: 49191f1425681df4a18c2f0f93db3adb85573bcdd6a4482539d98eac9e705d8961317b01175627e860516a2fc45f8f9302db26e5a380a97a520e272e2a40a8d4
languageName: node
linkType: hard
"isarray@npm:~1.0.0":
version: 1.0.0
resolution: "isarray@npm:1.0.0"
@ -1695,7 +1734,7 @@ __metadata:
languageName: node
linkType: hard
"js-tokens@npm:^4.0.0":
"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0":
version: 4.0.0
resolution: "js-tokens@npm:4.0.0"
checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78
@ -1747,36 +1786,6 @@ __metadata:
languageName: node
linkType: hard
"lit-element@npm:^3.0.0":
version: 3.0.1
resolution: "lit-element@npm:3.0.1"
dependencies:
"@lit/reactive-element": ^1.0.0
lit-html: ^2.0.0
checksum: 3735cd1b96efb44f1ecdcb07406604d7c6feeab07f81cfc904a0f9ab806fab1211e8bf68827513b12e12e61448e3cd6508664d433abd3f0c5c4408b0a6b2d7a6
languageName: node
linkType: hard
"lit-html@npm:^2.0.0":
version: 2.0.1
resolution: "lit-html@npm:2.0.1"
dependencies:
"@types/trusted-types": ^2.0.2
checksum: 7ee9e909ec59009539d5b2d7bd07ceb6e182ed5c6535f36da5265dd2f5dc39f9e5f445e8272953a26948ff5724cf110836c792c439883527a2a3b46ecdbbb395
languageName: node
linkType: hard
"lit@npm:^2.0.0":
version: 2.0.2
resolution: "lit@npm:2.0.2"
dependencies:
"@lit/reactive-element": ^1.0.0
lit-element: ^3.0.0
lit-html: ^2.0.0
checksum: 52a04b25164da1683c7295b305087794f175165cd1561e03f0c50ae998823f0e26101c82add05dea773e35472fbe3ed84486a4685294897f588d126fe8419e05
languageName: node
linkType: hard
"livereload-js@npm:^3.3.1":
version: 3.3.2
resolution: "livereload-js@npm:3.3.2"
@ -1812,6 +1821,17 @@ __metadata:
languageName: node
linkType: hard
"loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0, loose-envify@npm:^1.2.0, loose-envify@npm:^1.3.1, loose-envify@npm:^1.4.0":
version: 1.4.0
resolution: "loose-envify@npm:1.4.0"
dependencies:
js-tokens: ^3.0.0 || ^4.0.0
bin:
loose-envify: cli.js
checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4
languageName: node
linkType: hard
"lower-case@npm:^2.0.2":
version: 2.0.2
resolution: "lower-case@npm:2.0.2"
@ -2150,7 +2170,7 @@ __metadata:
languageName: node
linkType: hard
"object-assign@npm:^4.1.0":
"object-assign@npm:^4.1.0, object-assign@npm:^4.1.1":
version: 4.1.1
resolution: "object-assign@npm:4.1.1"
checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f
@ -2233,6 +2253,15 @@ __metadata:
languageName: node
linkType: hard
"path-to-regexp@npm:^1.7.0":
version: 1.8.0
resolution: "path-to-regexp@npm:1.8.0"
dependencies:
isarray: 0.0.1
checksum: 709f6f083c0552514ef4780cb2e7e4cf49b0cc89a97439f2b7cc69a608982b7690fb5d1720a7473a59806508fc2dae0be751ba49f495ecf89fd8fbc62abccbcd
languageName: node
linkType: hard
"path-type@npm:^4.0.0":
version: 4.0.0
resolution: "path-type@npm:4.0.0"
@ -2313,6 +2342,17 @@ __metadata:
languageName: node
linkType: hard
"prop-types@npm:^15.6.0, prop-types@npm:^15.6.1, prop-types@npm:^15.6.2":
version: 15.8.0
resolution: "prop-types@npm:15.8.0"
dependencies:
loose-envify: ^1.4.0
object-assign: ^4.1.1
react-is: ^16.13.1
checksum: d8d51cf55d70cab207dd1e80df2dc093b8288a4519598a28d25d32d6e02319b2fd66712caa979040451656185f7393341185b0b081158520557aa4cbdcaa4b3a
languageName: node
linkType: hard
"proxy-addr@npm:^2.0.7":
version: 2.0.7
resolution: "proxy-addr@npm:2.0.7"
@ -2340,13 +2380,6 @@ __metadata:
languageName: node
linkType: hard
"qr-creator@npm:^1.0.0":
version: 1.0.0
resolution: "qr-creator@npm:1.0.0"
checksum: 64d2c67493eef1d5a165ba0017e10bc2d36f4964676e886a6bcc0b2cee686ce92727d2964f81744511af44052e34c93c184b18eefe0adefa933957ad2dcb14a1
languageName: node
linkType: hard
"queue-microtask@npm:^1.1.2, queue-microtask@npm:^1.2.2":
version: 1.2.3
resolution: "queue-microtask@npm:1.2.3"
@ -2377,6 +2410,84 @@ __metadata:
languageName: node
linkType: hard
"react-dom@npm:^16.0.0":
version: 16.14.0
resolution: "react-dom@npm:16.14.0"
dependencies:
loose-envify: ^1.1.0
object-assign: ^4.1.1
prop-types: ^15.6.2
scheduler: ^0.19.1
peerDependencies:
react: ^16.14.0
checksum: 5a5c49da0f106b2655a69f96c622c347febcd10532db391c262b26aec225b235357d9da1834103457683482ab1b229af7a50f6927a6b70e53150275e31785544
languageName: node
linkType: hard
"react-interactive@npm:^0.8.1":
version: 0.8.3
resolution: "react-interactive@npm:0.8.3"
dependencies:
detect-it: ^3.0.3
object-assign: ^4.1.1
prop-types: ^15.6.0
peerDependencies:
react: ">=15"
checksum: 0827fb28ce5f48b01f0b1c0ecb034a89e3cb2f70efc713e4104c5f8878740627a17d7934a57f3cf9d0bcfacc5214139c546905a46423708f42e4cc62d689d8de
languageName: node
linkType: hard
"react-is@npm:^16.13.1":
version: 16.13.1
resolution: "react-is@npm:16.13.1"
checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f
languageName: node
linkType: hard
"react-router-dom@npm:^4.2.2":
version: 4.3.1
resolution: "react-router-dom@npm:4.3.1"
dependencies:
history: ^4.7.2
invariant: ^2.2.4
loose-envify: ^1.3.1
prop-types: ^15.6.1
react-router: ^4.3.1
warning: ^4.0.1
peerDependencies:
react: ">=15"
checksum: e73b12fc97d1019a63c6ab5862a491634b8d9e5a44f954b0831913f5853faccab364eac3c1eb3563c74998efeb8675f857a4fa9aa1f6d3b46368557f5a6f935b
languageName: node
linkType: hard
"react-router@npm:^4.3.1":
version: 4.3.1
resolution: "react-router@npm:4.3.1"
dependencies:
history: ^4.7.2
hoist-non-react-statics: ^2.5.0
invariant: ^2.2.4
loose-envify: ^1.3.1
path-to-regexp: ^1.7.0
prop-types: ^15.6.1
warning: ^4.0.1
peerDependencies:
react: ">=15"
checksum: 144f2167e4589ec1eea3d9d178cf18571ee20bbd4abe8a46518dda91cd28db9da78c11b52cfd92d1bdb1e3d38b9751fa173ed85ced4e43a76f89cacd3502cf88
languageName: node
linkType: hard
"react@npm:^16.0.0":
version: 16.14.0
resolution: "react@npm:16.14.0"
dependencies:
loose-envify: ^1.1.0
object-assign: ^4.1.1
prop-types: ^15.6.2
checksum: 8484f3ecb13414526f2a7412190575fc134da785c02695eb92bb6028c930bfe1c238d7be2a125088fec663cc7cda0a3623373c46807cf2c281f49c34b79881ac
languageName: node
linkType: hard
"readable-stream@npm:^2.0.6":
version: 2.3.7
resolution: "readable-stream@npm:2.3.7"
@ -2440,6 +2551,13 @@ __metadata:
languageName: node
linkType: hard
"resolve-pathname@npm:^3.0.0":
version: 3.0.0
resolution: "resolve-pathname@npm:3.0.0"
checksum: 6147241ba42c423dbe83cb067a2b4af4f60908c3af57e1ea567729cc71416c089737fe2a73e9e79e7a60f00f66c91e4b45ad0d37cd4be2d43fec44963ef14368
languageName: node
linkType: hard
"resolve@npm:^1.17.0, resolve@npm:^1.19.0":
version: 1.20.0
resolution: "resolve@npm:1.20.0"
@ -2682,6 +2800,16 @@ __metadata:
languageName: node
linkType: hard
"scheduler@npm:^0.19.1":
version: 0.19.1
resolution: "scheduler@npm:0.19.1"
dependencies:
loose-envify: ^1.1.0
object-assign: ^4.1.1
checksum: 73e185a59e2ff5aa3609f5b9cb97ddd376f89e1610579d29939d952411ca6eb7a24907a4ea4556569dacb931467a1a4a56d94fe809ef713aa76748642cd96a6c
languageName: node
linkType: hard
"secure-json-parse@npm:^2.0.0":
version: 2.4.0
resolution: "secure-json-parse@npm:2.4.0"
@ -2779,15 +2907,6 @@ __metadata:
languageName: node
linkType: hard
"simple-swizzle@npm:^0.2.2":
version: 0.2.2
resolution: "simple-swizzle@npm:0.2.2"
dependencies:
is-arrayish: ^0.3.1
checksum: a7f3f2ab5c76c4472d5c578df892e857323e452d9f392e1b5cf74b74db66e6294a1e1b8b390b519fa1b96b5b613f2a37db6cffef52c3f1f8f3c5ea64eb2d54c0
languageName: node
linkType: hard
"sirv-cli@npm:^1.0.0":
version: 1.0.14
resolution: "sirv-cli@npm:1.0.14"
@ -3041,13 +3160,13 @@ __metadata:
"@rollup/plugin-node-resolve": ^11.0.0
"@rollup/plugin-replace": ^3.0.0
"@rollup/plugin-typescript": ^8.3.0
"@shoelace-style/shoelace": ^2.0.0-beta.58
"@tsconfig/svelte": ^2.0.0
"@types/history": ^4.7.9
"@types/lodash": ^4.14.178
"@types/lru-cache": ^5.1.1
"@yarnpkg/fslib": ^2.6.0
"@yarnpkg/libzip": ^2.2.2
boxicons: ^2.1.1
date-fns: ^2.25.0
filesize: ^8.0.6
history: ^5.1.0
@ -3220,6 +3339,13 @@ __metadata:
languageName: node
linkType: hard
"tiny-invariant@npm:^1.0.2":
version: 1.2.0
resolution: "tiny-invariant@npm:1.2.0"
checksum: e09a718a7c4a499ba592cdac61f015d87427a0867ca07f50c11fd9b623f90cdba18937b515d4a5e4f43dac92370498d7bdaee0d0e7a377a61095e02c4a92eade
languageName: node
linkType: hard
"tiny-lru@npm:^7.0.0, tiny-lru@npm:^7.0.6":
version: 7.0.6
resolution: "tiny-lru@npm:7.0.6"
@ -3227,6 +3353,13 @@ __metadata:
languageName: node
linkType: hard
"tiny-warning@npm:^1.0.0":
version: 1.0.3
resolution: "tiny-warning@npm:1.0.3"
checksum: da62c4acac565902f0624b123eed6dd3509bc9a8d30c06e017104bedcf5d35810da8ff72864400ad19c5c7806fc0a8323c68baf3e326af7cb7d969f846100d71
languageName: node
linkType: hard
"tinydate@npm:^1.0.0":
version: 1.3.0
resolution: "tinydate@npm:1.3.0"
@ -3325,8 +3458,8 @@ __metadata:
"upend@file:../tools/upend_js::locator=svelte-app%40workspace%3A.":
version: 0.0.1
resolution: "upend@file:../tools/upend_js#../tools/upend_js::hash=498415&locator=svelte-app%40workspace%3A."
checksum: a6887e9c3db8a4a44c075f8a36ccbbaae3e847f41798c059b4c623731adeefd03089c69c31056a8d3a184aefcb38dc022c832cdb16b922f19b33d6d0ac92ed96
resolution: "upend@file:../tools/upend_js#../tools/upend_js::hash=53bc72&locator=svelte-app%40workspace%3A."
checksum: 1f9fed7b3499fd485712648a711b2cfc2ad1a435d69dbc96ddd57ba866e2cac19524e0300a412d8356a51de5f0a9f69fed929c6c702fce0cb9708d4ad2a9623e
languageName: node
linkType: hard
@ -3346,6 +3479,22 @@ __metadata:
languageName: node
linkType: hard
"value-equal@npm:^1.0.1":
version: 1.0.1
resolution: "value-equal@npm:1.0.1"
checksum: bb7ae1facc76b5cf8071aeb6c13d284d023fdb370478d10a5d64508e0e6e53bb459c4bbe34258df29d82e6f561f874f0105eba38de0e61fe9edd0bdce07a77a2
languageName: node
linkType: hard
"warning@npm:^4.0.1":
version: 4.0.3
resolution: "warning@npm:4.0.3"
dependencies:
loose-envify: ^1.0.0
checksum: 4f2cb6a9575e4faf71ddad9ad1ae7a00d0a75d24521c193fa464f30e6b04027bd97aa5d9546b0e13d3a150ab402eda216d59c1d0f2d6ca60124d96cd40dfa35c
languageName: node
linkType: hard
"which@npm:^2.0.2":
version: 2.0.2
resolution: "which@npm:2.0.2"