ensure dataframe updates as expected (#981)

* ensure input  updates as expected

* ci debug

* ci debug

* ci debug

* fix broken path

* cleanup

* cleanup

* cleanup

* remove pkg-up

* fix dataframe

* ensure headers can be edited

* allow the table to render empty content without exploding

* fixed components and test components

* fixed test inputs and test outputs

* formatting

* Update test_components.py

Co-authored-by: Abubakar Abid <abubakar@huggingface.co>
This commit is contained in:
pngwn 2022-04-13 21:53:35 +01:00 committed by GitHub
parent 6e1ccec1d0
commit 9cb40dc99a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 195 additions and 380 deletions

View File

@ -2044,23 +2044,21 @@ class Dataframe(Component):
self.col_width = col_width
self.type = type
self.output_type = "auto"
self.default_value = (
default_value
if default_value is not None
else [[None for _ in range(self.col_count)] for _ in range(self.row_count)]
)
sample_values = {
"str": "abc",
"number": 786,
"bool": True,
"date": "02/08/1993",
default_values = {
"str": "",
"number": 0,
"bool": False,
"date": "01/01/1970",
}
column_dtypes = (
[datatype] * self.col_count if isinstance(datatype, str) else datatype
)
self.test_input = [
[sample_values[c] for c in column_dtypes] for _ in range(row_count)
[default_values[c] for c in column_dtypes] for _ in range(row_count)
]
self.default_value = (
default_value if default_value is not None else self.test_input
)
self.max_rows = max_rows
self.max_cols = max_cols
self.overflow_row_behaviour = overflow_row_behaviour

View File

@ -45,7 +45,7 @@
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/iframe-resizer/4.3.1/iframeResizer.contentWindow.min.js"></script>
<title>Gradio</title>
<script type="module" crossorigin src="./assets/index.8c3dba6a.js"></script>
<script type="module" crossorigin src="./assets/index.693bb58e.js"></script>
<link rel="stylesheet" href="./assets/index.38c11487.css">
</head>

View File

@ -832,9 +832,9 @@ class TestDataframe(unittest.TestCase):
"col_count": 3,
"col_width": None,
"default_value": [
[None, None, None],
[None, None, None],
[None, None, None],
["", "", ""],
["", "", ""],
["", "", ""],
],
"name": "dataframe",
"label": "Dataframe Input",
@ -882,9 +882,9 @@ class TestDataframe(unittest.TestCase):
"col_count": 3,
"col_width": None,
"default_value": [
[None, None, None],
[None, None, None],
[None, None, None],
["", "", ""],
["", "", ""],
["", "", ""],
],
},
)

View File

@ -594,9 +594,9 @@ class TestDataframe(unittest.TestCase):
"col_count": 3,
"col_width": None,
"default_value": [
[None, None, None],
[None, None, None],
[None, None, None],
["", "", ""],
["", "", ""],
["", "", ""],
],
"name": "dataframe",
"label": "Dataframe Input",

View File

@ -369,9 +369,9 @@ class TestDataframe(unittest.TestCase):
"col_count": 3,
"col_width": None,
"default_value": [
[None, None, None],
[None, None, None],
[None, None, None],
["", "", ""],
["", "", ""],
["", "", ""],
],
"name": "dataframe",
},

View File

@ -1,13 +1,44 @@
<script lang="ts">
import { Table } from "@gradio/table";
export let headers: Array<string> = [];
export let value: Array<Array<string | number>> = [["", "", ""]];
import { createEventDispatcher, tick } from "svelte";
type Headers = Array<string>;
type Data = Array<Array<string | number>>;
export let headers: Headers = [];
export let value: Data | { data: Data; headers: Headers } = [["", "", ""]];
export let default_value: Array<Array<string | number>> = [["", "", ""]];
export let style: string = "";
export let is_static: boolean;
if (default_value) value = default_value;
$: {
if (!Array.isArray(value)) {
if (Array.isArray(value.headers)) headers = value.headers;
value =
value.data.length === 0 ? [Array(headers.length).fill("")] : value.data;
} else {
value = value;
}
}
const dispatch = createEventDispatcher();
async function handle_change({ detail }) {
value = detail;
await tick();
dispatch("change", detail);
}
</script>
<Table bind:values={value} {headers} {style} on:change editable={!is_static} />
<Table
values={value}
{headers}
{style}
on:change={handle_change}
editable={!is_static}
/>

View File

@ -58,9 +58,6 @@ test("can run an api request and display the data", async ({ page }) => {
await page.goto("http://localhost:3000");
// await page.locator('button:has-text("Covid")').click();
// await page.locator('button:has-text("Lung Cancer")').click();
await page.check("label:has-text('Covid')");
await page.check("label:has-text('Lung Cancer')");

View File

@ -2,61 +2,104 @@
import { createEventDispatcher, tick } from "svelte";
export let headers: Array<string> = [];
export let values: Array<Array<string | number>> = [["", "", ""]];
// export let default_data: Array<Array<string | number>> = [];
export let style: string = "";
export let values: Array<Array<string | number>> = [[]];
if ($$props.default) values = $$props.default;
export let style: string = "";
export let editable = true;
const dispatch = createEventDispatcher<{ change: typeof values }>();
let id = 0;
let editing: boolean | number = false;
let selected: boolean | number = false;
let editing: boolean | string = false;
let selected: boolean | string = false;
let els: Record<
string,
{ cell: null | HTMLTableCellElement; input: null | HTMLInputElement }
> = {};
type Headers = Array<{ value: string; id: number }>;
type Headers = Array<{ value: string; id: string }>;
function make_headers(_h: Array<string>): Headers {
if (!_h || _h.length === 0) {
return values[0].map((_, i) => {
const _id = ++id;
const _id = `h-${i}`;
els[_id] = { cell: null, input: null };
return { id: _id, value: JSON.stringify(i + 1) };
});
} else {
return _h.map((h) => {
const _id = ++id;
return _h.map((h, i) => {
const _id = `h-${i}`;
els[_id] = { cell: null, input: null };
return { id: _id, value: h };
});
}
}
function process_data(_values: Array<Array<string | number>>) {
return (
_values.map((x, i) =>
x.map((n, j) => {
const id = `${i}-${j}`;
els[id] = { input: null, cell: null };
return { value: n, id };
})
) || [
Array(headers.length)
.fill(0)
.map((_, j) => {
const id = `0-${j}`;
els[id] = { input: null, cell: null };
return { value: "", id: `0-${j}` };
})
]
);
}
let _headers = make_headers(headers);
let old_headers: Array<string> | undefined;
$: {
if (!is_equal(headers, old_headers)) {
_headers = make_headers(headers);
old_headers = headers;
refresh_focus();
}
}
let data = values.map((x) =>
x.map((n) => {
const _id = ++id;
els[id] = { input: null, cell: null };
return { value: n, id: _id };
})
) || [
Array(headers.length)
.fill(0)
$: if (!is_equal(values, old_val)) {
data = process_data(values);
old_val = values;
.map((_) => {
const _id = ++id;
els[id] = { input: null, cell: null };
refresh_focus();
}
return { value: "", id: _id };
})
];
async function refresh_focus() {
if (typeof editing === "string") {
await tick();
els[editing as string]?.input?.focus();
} else if (typeof selected === "string") {
await tick();
els[selected as string]?.input?.focus();
}
}
let data: Array<Array<{ id: string; value: string | number }>> = [[]];
let old_val: undefined | Array<Array<string | number>> = undefined;
function is_equal(arr: Array<any>, arr2: Array<any> | undefined) {
if (!arr2) return false;
return arr.every((_arr, i) => {
if (Array.isArray(_arr)) {
return _arr.every((item, j) => {
return item === arr2?.[i]?.[j];
});
} else {
return _arr === arr2?.[i];
}
});
}
$: dispatch(
"change",
@ -75,7 +118,7 @@
}
}
async function start_edit(id: number) {
async function start_edit(id: string) {
if (!editable) return;
editing = id;
await tick();
@ -87,7 +130,7 @@
event: KeyboardEvent,
i: number,
j: number,
id: number
id: string
) {
let is_data;
switch (event.key) {
@ -148,12 +191,14 @@
}
}
async function handle_cell_click(id: number) {
async function handle_cell_click(id: string) {
if (editing === id) return;
if (selected === id) return;
editing = false;
selected = id;
}
async function set_focus(id: number | boolean, type: "edit" | "select") {
async function set_focus(id: string | boolean, type: "edit" | "select") {
if (type === "edit" && typeof id == "number") {
await tick();
els[id].input?.focus();
@ -207,9 +252,9 @@
sort(col, sort_direction);
}
let header_edit: number | boolean;
let header_edit: string | boolean;
async function edit_header(_id: number, select?: boolean) {
async function edit_header(_id: string, select?: boolean) {
if (!editable) return;
header_edit = _id;
await tick();
@ -234,8 +279,8 @@
function add_row() {
data.push(
headers.map(() => {
const _id = ++id;
headers.map((_, i) => {
const _id = `${data.length}-${i}`;
els[_id] = { cell: null, input: null };
return { id: _id, value: "" };
})
@ -245,12 +290,12 @@
async function add_col() {
for (let i = 0; i < data.length; i++) {
const _id = ++id;
const _id = `${i}-${data[i].length}`;
els[_id] = { cell: null, input: null };
data[i].push({ id: _id, value: "" });
}
const _id = ++id;
const _id = `h-${headers.length}`;
els[_id] = { cell: null, input: null };
_headers.push({ id: _id, value: `Header ${_headers.length + 1}` });
@ -319,13 +364,14 @@
on:blur={({ currentTarget }) =>
currentTarget.setAttribute("tabindex", "-1")}
/>
{:else}
<span
tabindex="-1"
role="button"
class="min-h-full"
class:opacity-0={header_edit === id}>{value}</span
>
{/if}
<span
tabindex="-1"
role="button"
class="min-h-full"
class:opacity-0={header_edit === id}>{value}</span
>
</th>
{/each}
</tr></thead
@ -361,15 +407,16 @@
on:blur={({ currentTarget }) =>
currentTarget.setAttribute("tabindex", "-1")}
/>
{:else}
<span
class=" cursor-default w-full"
class:opacity-0={editing === id}
tabindex="-1"
role="button"
>
{value}
</span>
{/if}
<span
class=" cursor-default w-full"
class:opacity-0={editing === id}
tabindex="-1"
role="button"
>
{value}
</span>
</div>
</td>
{/each}

View File

@ -1,5 +1,14 @@
<script lang="ts">
import { Table } from "@gradio/table";
const src = [
[1, "Two", "Three"],
[2, "Four", "Five"],
[3, "Six", "Seven"]
];
let values = [[1, "Two", "Three"]];
</script>
<Table />
<Table {values} headers={["Num", "Two", "Three"]} />
<button on:click={() => (values = src)}>Populate</button>

View File

@ -98,7 +98,10 @@ importers:
'@gradio/upload': link:../upload
'@gradio/video': link:../video
mime-types: 2.1.34
svelte-i18n: 3.3.13
svelte-i18n: 3.3.13_svelte@3.46.3
packages/atoms:
specifiers: {}
packages/audio:
specifiers:
@ -267,8 +270,8 @@ importers:
'@gradio/upload': link:../upload
'@gradio/video': link:../video
devDependencies:
'@sveltejs/adapter-auto': 1.0.0-next.33
'@sveltejs/kit': 1.0.0-next.303_svelte@3.46.3
'@sveltejs/adapter-auto': 1.0.0-next.34
'@sveltejs/kit': 1.0.0-next.311_svelte@3.46.3
autoprefixer: 10.4.2_postcss@8.4.6
postcss: 8.4.6
postcss-load-config: 3.1.1
@ -966,45 +969,46 @@ packages:
estree-walker: 2.0.2
picomatch: 2.3.1
/@sveltejs/adapter-auto/1.0.0-next.33:
resolution: {integrity: sha512-FVEBSw5XIYCrqMPY2VGmaGyT4ZvbahcdQJ613O4lgAoafRdUy7ZaE8GoeDmCJxtTUsqhAQUFu7jx9IIhz+QrsQ==}
/@sveltejs/adapter-auto/1.0.0-next.34:
resolution: {integrity: sha512-BzZVfy39idFojauroLrE/v9paJ1/HOlS2R857ooCwaLg+RrRy6zJHWwYxNSv5e8AaZiVg7ioZZpU/2g6ZgUpaQ==}
dependencies:
'@sveltejs/adapter-cloudflare': 1.0.0-next.16
'@sveltejs/adapter-cloudflare': 1.0.0-next.17
'@sveltejs/adapter-netlify': 1.0.0-next.51
'@sveltejs/adapter-vercel': 1.0.0-next.47
dev: true
/@sveltejs/adapter-cloudflare/1.0.0-next.16:
resolution: {integrity: sha512-ripTRtOasAtxDJEIF3kwwji/9WHfX069i5LuRwGUzOi4/cbcGfgV1RFBVfo/8G6hr3ehqLeKCdloet1yTsp34A==}
/@sveltejs/adapter-cloudflare/1.0.0-next.17:
resolution: {integrity: sha512-B2ze5L0LsHFsZctVNy4sw0XxgV2YiVEHyMrWRo3pmpTwpu6GT5V3U2fsEoCMg/RKMazlWkyKTCuUqmcpYjjf2g==}
dependencies:
esbuild: 0.14.23
esbuild: 0.14.31
worktop: 0.8.0-next.12
dev: true
/@sveltejs/adapter-netlify/1.0.0-next.51:
resolution: {integrity: sha512-P7/cW/0z8zd8J6DOI2yxKZG0+HRMMuzfOf0yzFXX0vRwBePhKlZ/H4qhTOo2NrCmj3Len545o+ugj5gyMXl1+g==}
dependencies:
'@iarna/toml': 2.2.5
esbuild: 0.14.23
esbuild: 0.14.31
tiny-glob: 0.2.9
dev: true
/@sveltejs/adapter-vercel/1.0.0-next.47:
resolution: {integrity: sha512-VV3vP8KqL9XOc7xfQLVhXTM5jrTme+r1qJy98u5/dhAhkdjqrGDwAKo/s7MoB3rTYxLb2b8I4QxAaoz2Y2aIBg==}
dependencies:
esbuild: 0.14.23
esbuild: 0.14.31
dev: true
/@sveltejs/kit/1.0.0-next.303_svelte@3.46.3:
resolution: {integrity: sha512-WdxDc8OiF1WEd/bEza7CBdzA+3qIcCi1GKBj/gieKX9I3N8iDJt/Cg2POrLo9wQoJ47nZcAd1eOhfr7XEX1aIQ==}
/@sveltejs/kit/1.0.0-next.311_svelte@3.46.3:
resolution: {integrity: sha512-OkRIi0XBXcs16J+H+6fgOeFYxKu05gamY08KHAQ5cohjymUODGWIwaIfwAuNkZAcEEr8Vh2ejp4UcaxNzD53lQ==}
engines: {node: '>=14.13'}
hasBin: true
peerDependencies:
svelte: ^3.44.0
dependencies:
'@sveltejs/vite-plugin-svelte': 1.0.0-next.36_svelte@3.46.3+vite@2.8.4
'@sveltejs/vite-plugin-svelte': 1.0.0-next.36_svelte@3.46.3+vite@2.9.1
sade: 1.8.1
svelte: 3.46.3
vite: 2.8.4
vite: 2.9.1
transitivePeerDependencies:
- diff-match-patch
- less
@ -1013,28 +1017,6 @@ packages:
- supports-color
dev: true
/@sveltejs/vite-plugin-svelte/1.0.0-next.36_svelte@3.46.3+vite@2.8.4:
resolution: {integrity: sha512-X7lTiioTGC3ri5M299fxc2dimuKU7f22zTXcmD+NrF+fO9/b7YNfLeQQwWV7Tvv9REysMlR4G2HQF6+lY62p/Q==}
engines: {node: ^14.13.1 || >= 16}
peerDependencies:
diff-match-patch: ^1.0.5
svelte: ^3.44.0
vite: ^2.7.0
peerDependenciesMeta:
diff-match-patch:
optional: true
dependencies:
'@rollup/pluginutils': 4.1.2
debug: 4.3.3
kleur: 4.1.4
magic-string: 0.25.7
svelte: 3.46.3
svelte-hmr: 0.14.9_svelte@3.46.3
vite: 2.8.4
transitivePeerDependencies:
- supports-color
dev: true
/@sveltejs/vite-plugin-svelte/1.0.0-next.36_svelte@3.46.3+vite@2.9.1:
resolution: {integrity: sha512-X7lTiioTGC3ri5M299fxc2dimuKU7f22zTXcmD+NrF+fO9/b7YNfLeQQwWV7Tvv9REysMlR4G2HQF6+lY62p/Q==}
engines: {node: ^14.13.1 || >= 16}
@ -1055,7 +1037,6 @@ packages:
vite: 2.9.1
transitivePeerDependencies:
- supports-color
dev: false
/@tailwindcss/forms/0.5.0_tailwindcss@3.0.23:
resolution: {integrity: sha512-KzWugryEBFkmoaYcBE18rs6gthWCFHHO7cAZm2/hv3hwD67AzwP7udSCa22E7R1+CEJL/FfhYsJWrc0b1aeSzw==}
@ -1994,16 +1975,6 @@ packages:
cpu: [x64]
os: [android]
requiresBuild: true
dev: false
optional: true
/esbuild-android-arm64/0.14.23:
resolution: {integrity: sha512-k9sXem++mINrZty1v4FVt6nC5BQCFG4K2geCIUUqHNlTdFnuvcqsY7prcKZLFhqVC1rbcJAr9VSUGFL/vD4vsw==}
engines: {node: '>=12'}
cpu: [arm64]
os: [android]
requiresBuild: true
dev: true
optional: true
/esbuild-android-arm64/0.14.31:
@ -2012,16 +1983,6 @@ packages:
cpu: [arm64]
os: [android]
requiresBuild: true
dev: false
optional: true
/esbuild-darwin-64/0.14.23:
resolution: {integrity: sha512-lB0XRbtOYYL1tLcYw8BoBaYsFYiR48RPrA0KfA/7RFTr4MV7Bwy/J4+7nLsVnv9FGuQummM3uJ93J3ptaTqFug==}
engines: {node: '>=12'}
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/esbuild-darwin-64/0.14.31:
@ -2030,16 +1991,6 @@ packages:
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: false
optional: true
/esbuild-darwin-arm64/0.14.23:
resolution: {integrity: sha512-yat73Z/uJ5tRcfRiI4CCTv0FSnwErm3BJQeZAh+1tIP0TUNh6o+mXg338Zl5EKChD+YGp6PN+Dbhs7qa34RxSw==}
engines: {node: '>=12'}
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/esbuild-darwin-arm64/0.14.31:
@ -2048,16 +1999,6 @@ packages:
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: false
optional: true
/esbuild-freebsd-64/0.14.23:
resolution: {integrity: sha512-/1xiTjoLuQ+LlbfjJdKkX45qK/M7ARrbLmyf7x3JhyQGMjcxRYVR6Dw81uH3qlMHwT4cfLW4aEVBhP1aNV7VsA==}
engines: {node: '>=12'}
cpu: [x64]
os: [freebsd]
requiresBuild: true
dev: true
optional: true
/esbuild-freebsd-64/0.14.31:
@ -2066,16 +2007,6 @@ packages:
cpu: [x64]
os: [freebsd]
requiresBuild: true
dev: false
optional: true
/esbuild-freebsd-arm64/0.14.23:
resolution: {integrity: sha512-uyPqBU/Zcp6yEAZS4LKj5jEE0q2s4HmlMBIPzbW6cTunZ8cyvjG6YWpIZXb1KK3KTJDe62ltCrk3VzmWHp+iLg==}
engines: {node: '>=12'}
cpu: [arm64]
os: [freebsd]
requiresBuild: true
dev: true
optional: true
/esbuild-freebsd-arm64/0.14.31:
@ -2084,16 +2015,6 @@ packages:
cpu: [arm64]
os: [freebsd]
requiresBuild: true
dev: false
optional: true
/esbuild-linux-32/0.14.23:
resolution: {integrity: sha512-37R/WMkQyUfNhbH7aJrr1uCjDVdnPeTHGeDhZPUNhfoHV0lQuZNCKuNnDvlH/u/nwIYZNdVvz1Igv5rY/zfrzQ==}
engines: {node: '>=12'}
cpu: [ia32]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-32/0.14.31:
@ -2102,16 +2023,6 @@ packages:
cpu: [ia32]
os: [linux]
requiresBuild: true
dev: false
optional: true
/esbuild-linux-64/0.14.23:
resolution: {integrity: sha512-H0gztDP60qqr8zoFhAO64waoN5yBXkmYCElFklpd6LPoobtNGNnDe99xOQm28+fuD75YJ7GKHzp/MLCLhw2+vQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-64/0.14.31:
@ -2120,16 +2031,6 @@ packages:
cpu: [x64]
os: [linux]
requiresBuild: true
dev: false
optional: true
/esbuild-linux-arm/0.14.23:
resolution: {integrity: sha512-x64CEUxi8+EzOAIpCUeuni0bZfzPw/65r8tC5cy5zOq9dY7ysOi5EVQHnzaxS+1NmV+/RVRpmrzGw1QgY2Xpmw==}
engines: {node: '>=12'}
cpu: [arm]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-arm/0.14.31:
@ -2138,16 +2039,6 @@ packages:
cpu: [arm]
os: [linux]
requiresBuild: true
dev: false
optional: true
/esbuild-linux-arm64/0.14.23:
resolution: {integrity: sha512-c4MLOIByNHR55n3KoYf9hYDfBRghMjOiHLaoYLhkQkIabb452RWi+HsNgB41sUpSlOAqfpqKPFNg7VrxL3UX9g==}
engines: {node: '>=12'}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-arm64/0.14.31:
@ -2156,16 +2047,6 @@ packages:
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: false
optional: true
/esbuild-linux-mips64le/0.14.23:
resolution: {integrity: sha512-kHKyKRIAedYhKug2EJpyJxOUj3VYuamOVA1pY7EimoFPzaF3NeY7e4cFBAISC/Av0/tiV0xlFCt9q0HJ68IBIw==}
engines: {node: '>=12'}
cpu: [mips64el]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-mips64le/0.14.31:
@ -2174,16 +2055,6 @@ packages:
cpu: [mips64el]
os: [linux]
requiresBuild: true
dev: false
optional: true
/esbuild-linux-ppc64le/0.14.23:
resolution: {integrity: sha512-7ilAiJEPuJJnJp/LiDO0oJm5ygbBPzhchJJh9HsHZzeqO+3PUzItXi+8PuicY08r0AaaOe25LA7sGJ0MzbfBag==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-ppc64le/0.14.31:
@ -2192,16 +2063,6 @@ packages:
cpu: [ppc64]
os: [linux]
requiresBuild: true
dev: false
optional: true
/esbuild-linux-riscv64/0.14.23:
resolution: {integrity: sha512-fbL3ggK2wY0D8I5raPIMPhpCvODFE+Bhb5QGtNP3r5aUsRR6TQV+ZBXIaw84iyvKC8vlXiA4fWLGhghAd/h/Zg==}
engines: {node: '>=12'}
cpu: [riscv64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-riscv64/0.14.31:
@ -2210,16 +2071,6 @@ packages:
cpu: [riscv64]
os: [linux]
requiresBuild: true
dev: false
optional: true
/esbuild-linux-s390x/0.14.23:
resolution: {integrity: sha512-GHMDCyfy7+FaNSO8RJ8KCFsnax8fLUsOrj9q5Gi2JmZMY0Zhp75keb5abTFCq2/Oy6KVcT0Dcbyo/bFb4rIFJA==}
engines: {node: '>=12'}
cpu: [s390x]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-s390x/0.14.31:
@ -2228,16 +2079,6 @@ packages:
cpu: [s390x]
os: [linux]
requiresBuild: true
dev: false
optional: true
/esbuild-netbsd-64/0.14.23:
resolution: {integrity: sha512-ovk2EX+3rrO1M2lowJfgMb/JPN1VwVYrx0QPUyudxkxLYrWeBxDKQvc6ffO+kB4QlDyTfdtAURrVzu3JeNdA2g==}
engines: {node: '>=12'}
cpu: [x64]
os: [netbsd]
requiresBuild: true
dev: true
optional: true
/esbuild-netbsd-64/0.14.31:
@ -2246,16 +2087,6 @@ packages:
cpu: [x64]
os: [netbsd]
requiresBuild: true
dev: false
optional: true
/esbuild-openbsd-64/0.14.23:
resolution: {integrity: sha512-uYYNqbVR+i7k8ojP/oIROAHO9lATLN7H2QeXKt2H310Fc8FJj4y3Wce6hx0VgnJ4k1JDrgbbiXM8rbEgQyg8KA==}
engines: {node: '>=12'}
cpu: [x64]
os: [openbsd]
requiresBuild: true
dev: true
optional: true
/esbuild-openbsd-64/0.14.31:
@ -2264,16 +2095,6 @@ packages:
cpu: [x64]
os: [openbsd]
requiresBuild: true
dev: false
optional: true
/esbuild-sunos-64/0.14.23:
resolution: {integrity: sha512-hAzeBeET0+SbScknPzS2LBY6FVDpgE+CsHSpe6CEoR51PApdn2IB0SyJX7vGelXzlyrnorM4CAsRyb9Qev4h9g==}
engines: {node: '>=12'}
cpu: [x64]
os: [sunos]
requiresBuild: true
dev: true
optional: true
/esbuild-sunos-64/0.14.31:
@ -2282,16 +2103,6 @@ packages:
cpu: [x64]
os: [sunos]
requiresBuild: true
dev: false
optional: true
/esbuild-windows-32/0.14.23:
resolution: {integrity: sha512-Kttmi3JnohdaREbk6o9e25kieJR379TsEWF0l39PQVHXq3FR6sFKtVPgY8wk055o6IB+rllrzLnbqOw/UV60EA==}
engines: {node: '>=12'}
cpu: [ia32]
os: [win32]
requiresBuild: true
dev: true
optional: true
/esbuild-windows-32/0.14.31:
@ -2300,16 +2111,6 @@ packages:
cpu: [ia32]
os: [win32]
requiresBuild: true
dev: false
optional: true
/esbuild-windows-64/0.14.23:
resolution: {integrity: sha512-JtIT0t8ymkpl6YlmOl6zoSWL5cnCgyLaBdf/SiU/Eg3C13r0NbHZWNT/RDEMKK91Y6t79kTs3vyRcNZbfu5a8g==}
engines: {node: '>=12'}
cpu: [x64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/esbuild-windows-64/0.14.31:
@ -2318,16 +2119,6 @@ packages:
cpu: [x64]
os: [win32]
requiresBuild: true
dev: false
optional: true
/esbuild-windows-arm64/0.14.23:
resolution: {integrity: sha512-cTFaQqT2+ik9e4hePvYtRZQ3pqOvKDVNarzql0VFIzhc0tru/ZgdLoXd6epLiKT+SzoSce6V9YJ+nn6RCn6SHw==}
engines: {node: '>=12'}
cpu: [arm64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/esbuild-windows-arm64/0.14.31:
@ -2336,36 +2127,8 @@ packages:
cpu: [arm64]
os: [win32]
requiresBuild: true
dev: false
optional: true
/esbuild/0.14.23:
resolution: {integrity: sha512-XjnIcZ9KB6lfonCa+jRguXyRYcldmkyZ99ieDksqW/C8bnyEX299yA4QH2XcgijCgaddEZePPTgvx/2imsq7Ig==}
engines: {node: '>=12'}
hasBin: true
requiresBuild: true
optionalDependencies:
esbuild-android-arm64: 0.14.23
esbuild-darwin-64: 0.14.23
esbuild-darwin-arm64: 0.14.23
esbuild-freebsd-64: 0.14.23
esbuild-freebsd-arm64: 0.14.23
esbuild-linux-32: 0.14.23
esbuild-linux-64: 0.14.23
esbuild-linux-arm: 0.14.23
esbuild-linux-arm64: 0.14.23
esbuild-linux-mips64le: 0.14.23
esbuild-linux-ppc64le: 0.14.23
esbuild-linux-riscv64: 0.14.23
esbuild-linux-s390x: 0.14.23
esbuild-netbsd-64: 0.14.23
esbuild-openbsd-64: 0.14.23
esbuild-sunos-64: 0.14.23
esbuild-windows-32: 0.14.23
esbuild-windows-64: 0.14.23
esbuild-windows-arm64: 0.14.23
dev: true
/esbuild/0.14.31:
resolution: {integrity: sha512-QA0fUM13+JZzcvg1bdrhi7wo8Lr5IRHA9ypNn2znqxGqb66dSK6pAh01TjyBOhzZGazPQJZ1K26VrCAQJ715qA==}
engines: {node: '>=12'}
@ -2392,7 +2155,6 @@ packages:
esbuild-windows-32: 0.14.31
esbuild-windows-64: 0.14.31
esbuild-windows-arm64: 0.14.31
dev: false
/escalade/3.1.1:
resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
@ -3316,7 +3078,6 @@ packages:
/mrmime/1.0.0:
resolution: {integrity: sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ==}
engines: {node: '>=10'}
dev: false
/ms/2.1.2:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
@ -3339,7 +3100,6 @@ packages:
resolution: {integrity: sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
dev: false
/nice-try/1.0.5:
resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==}
@ -3680,7 +3440,6 @@ packages:
nanoid: 3.3.2
picocolors: 1.0.0
source-map-js: 1.0.2
dev: false
/postcss/8.4.6:
resolution: {integrity: sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==}
@ -3838,6 +3597,11 @@ packages:
engines: {node: '>=6'}
dev: false
/regexparam/2.0.0:
resolution: {integrity: sha512-gJKwd2MVPWHAIFLsaYDZfyKzHNS4o7E/v8YmNf44vmeV2e4YfVoDToTOKTvE7ab68cRJ++kLuEXJBaEeJVt5ow==}
engines: {node: '>=8'}
dev: true
/request-promise-core/1.1.4_request@2.88.2:
resolution: {integrity: sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==}
engines: {node: '>=0.10.0'}
@ -4340,20 +4104,6 @@ packages:
dependencies:
svelte: 3.46.3
/svelte-i18n/3.3.13:
resolution: {integrity: sha512-RQM+ys4+Y9ztH//tX22H1UL2cniLNmIR+N4xmYygV6QpQ6EyQvloZiENRew8XrVzfvJ8HaE8NU6/yurLkl7z3g==}
engines: {node: '>= 11.15.0'}
hasBin: true
peerDependencies:
svelte: ^3.25.1
dependencies:
deepmerge: 4.2.2
estree-walker: 2.0.2
intl-messageformat: 9.11.4
sade: 1.8.1
tiny-glob: 0.2.9
dev: false
/svelte-i18n/3.3.13_svelte@3.46.3:
resolution: {integrity: sha512-RQM+ys4+Y9ztH//tX22H1UL2cniLNmIR+N4xmYygV6QpQ6EyQvloZiENRew8XrVzfvJ8HaE8NU6/yurLkl7z3g==}
engines: {node: '>= 11.15.0'}
@ -4824,30 +4574,6 @@ packages:
dev: false
optional: true
/vite/2.8.4:
resolution: {integrity: sha512-GwtOkkaT2LDI82uWZKcrpRQxP5tymLnC7hVHHqNkhFNknYr0hJUlDLfhVRgngJvAy3RwypkDCWtTKn1BjO96Dw==}
engines: {node: '>=12.2.0'}
hasBin: true
peerDependencies:
less: '*'
sass: '*'
stylus: '*'
peerDependenciesMeta:
less:
optional: true
sass:
optional: true
stylus:
optional: true
dependencies:
esbuild: 0.14.23
postcss: 8.4.6
resolve: 1.22.0
rollup: 2.66.1
optionalDependencies:
fsevents: 2.3.2
dev: true
/vite/2.9.1:
resolution: {integrity: sha512-vSlsSdOYGcYEJfkQ/NeLXgnRv5zZfpAsdztkIrs7AZHV8RCMZQkwjo4DS5BnrYTqoWqLoUe1Cah4aVO4oNNqCQ==}
engines: {node: '>=12.2.0'}
@ -4870,7 +4596,6 @@ packages:
rollup: 2.66.1
optionalDependencies:
fsevents: 2.3.2
dev: false
/vitest/0.7.4_happy-dom@2.49.0:
resolution: {integrity: sha512-6kyJ/YZJFVj/zEVVHFyvLvAZlbg05yAyJrk7oP+FOCFanGRYK7bBEz4qsIpNHxX+dlf5vRkbBDjpdXzGL7udeA==}
@ -4991,6 +4716,14 @@ packages:
dev: false
optional: true
/worktop/0.8.0-next.12:
resolution: {integrity: sha512-ZXdgI9XOf0uB4IegFoViLdQ0Bf7hish0XMHwuV3nopOXygfLJkwAC5+HyA+sihBMSM2sLLQ5uGnD5aknL8+NQg==}
engines: {node: '>=12'}
dependencies:
mrmime: 1.0.0
regexparam: 2.0.0
dev: true
/wrappy/1.0.2:
resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=}