From cecaf1a635469987604bb4399734379e424c74c0 Mon Sep 17 00:00:00 2001 From: Abubakar Abid Date: Fri, 23 Sep 2022 06:14:56 -0500 Subject: [PATCH] Sketching + Inpainting Capabilities to Gradio (#2144) * templates * working on backend * formatting * Sketching fe (#2184) * fix scaling on sketch + bg img * tweaks * ketch updates * cursor style * sketchpad * fixes * ensure background is white for bw sketch * fix everything * re-enable demos * updated demo and changed from dict to str * beta release * fix bugs, tweak webcam source * re-anable demos * fix clear button and tab changing * maybe fix test * maybe fix test again maybe * various fixes * fix img uplaod + color sketch * remove lazy brush but keep smoothing * fix sketch bg Co-authored-by: pngwn --- demo/all_demos/tmp.zip | Bin 0 -> 183862 bytes demo/blocks_mask/run.py | 142 +++++++- demo/filter_records/run.py | 2 +- gradio/__init__.py | 3 + gradio/components.py | 46 +-- gradio/templates.py | 40 ++- gradio/version.txt | 2 +- ui/packages/app/test/blocks_xray.spec.ts | 4 +- ui/packages/icons/src/Brush.svelte | 9 + ui/packages/icons/src/Chart.svelte | 25 +- ui/packages/icons/src/Color.svelte | 16 + ui/packages/icons/src/index.ts | 30 +- ui/packages/image/package.json | 1 + ui/packages/image/src/Image.svelte | 163 +++++++-- ui/packages/image/src/Sketch.svelte | 355 +++++++++++--------- ui/packages/image/src/SketchSettings.svelte | 49 +++ ui/packages/tabs/src/TabItem.svelte | 19 +- ui/packages/utils/src/index.ts | 1 + ui/packages/utils/src/utils.ts | 9 + ui/pnpm-lock.yaml | 167 ++++----- 20 files changed, 727 insertions(+), 356 deletions(-) create mode 100644 demo/all_demos/tmp.zip create mode 100644 ui/packages/icons/src/Brush.svelte create mode 100644 ui/packages/icons/src/Color.svelte create mode 100644 ui/packages/image/src/SketchSettings.svelte create mode 100644 ui/packages/utils/src/utils.ts diff --git a/demo/all_demos/tmp.zip b/demo/all_demos/tmp.zip new file mode 100644 index 0000000000000000000000000000000000000000..2ffdc329770a6a5be16f1cfd4a8490494b7ac325 GIT binary patch literal 183862 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 np.array | PIL.Image | str | None: """Helper method to format an image based on self.type""" + fmt = im.format if im is None: return im if self.type == "pil": @@ -1314,17 +1319,15 @@ def generate_sample(self): def preprocess(self, x: str | Dict) -> np.array | PIL.Image | str | None: """ Parameters: - x: base64 url data, or (if tool == "sketch) a dict of image and mask base64 url data + x: base64 url data, or (if tool == "sketch") a dict of image and mask base64 url data Returns: - image in requested format + image in requested format, or (if tool == "sketch") a dict of image and mask in requested format """ if x is None: return x - if self.tool == "sketch": + if self.tool == "sketch" and self.source in ["upload", "webcam"]: x, mask = x["image"], x["mask"] - im = processing_utils.decode_base64_to_image(x) - fmt = im.format with warnings.catch_warnings(): warnings.simplefilter("ignore") im = im.convert(self.image_mode) @@ -1332,18 +1335,21 @@ def preprocess(self, x: str | Dict) -> np.array | PIL.Image | str | None: im = processing_utils.resize_and_crop(im, self.shape) if self.invert_colors: im = PIL.ImageOps.invert(im) - if self.source == "webcam" and self.mirror_webcam is True: + if ( + self.source == "webcam" + and self.mirror_webcam is True + and self.tool != "color-sketch" + ): im = PIL.ImageOps.mirror(im) - if not (self.tool == "sketch"): - return self._format_image(im, fmt) + if self.tool == "sketch" and self.source in ["upload", "webcam"]: + mask_im = processing_utils.decode_base64_to_image(mask) + return { + "image": self._format_image(im), + "mask": self._format_image(mask_im), + } - mask_im = processing_utils.decode_base64_to_image(mask) - mask_fmt = mask_im.format - return { - "image": self._format_image(im, fmt), - "mask": self._format_image(mask_im, mask_fmt), - } + return self._format_image(im) def postprocess(self, y: np.ndarray | PIL.Image | str | Path) -> str: """ diff --git a/gradio/templates.py b/gradio/templates.py index b7b34d391a0a5..7ea06660846f5 100644 --- a/gradio/templates.py +++ b/gradio/templates.py @@ -31,7 +31,7 @@ class Webcam(components.Image): is_template = True def __init__(self, **kwargs): - super().__init__(source="webcam", **kwargs) + super().__init__(source="webcam", interactive=True, **kwargs) class Sketchpad(components.Image): @@ -47,10 +47,48 @@ def __init__(self, **kwargs): source="canvas", shape=(28, 28), invert_colors=True, + interactive=True, **kwargs ) +class Paint(components.Image): + """ + Sets source="canvas", tool="color-sketch" + """ + + is_template = True + + def __init__(self, **kwargs): + super().__init__( + source="canvas", tool="color-sketch", interactive=True, **kwargs + ) + + +class ImageMask(components.Image): + """ + Sets source="canvas", tool="sketch" + """ + + is_template = True + + def __init__(self, **kwargs): + super().__init__(source="upload", tool="sketch", interactive=True, **kwargs) + + +class ImagePaint(components.Image): + """ + Sets source="upload", tool="color-sketch" + """ + + is_template = True + + def __init__(self, **kwargs): + super().__init__( + source="upload", tool="color-sketch", interactive=True, **kwargs + ) + + class Pil(components.Image): """ Sets: type="pil" diff --git a/gradio/version.txt b/gradio/version.txt index bea438e9ade77..aee81c4c4b81e 100644 --- a/gradio/version.txt +++ b/gradio/version.txt @@ -1 +1 @@ -3.3.1 +3.4b0 diff --git a/ui/packages/app/test/blocks_xray.spec.ts b/ui/packages/app/test/blocks_xray.spec.ts index b1d0651fb6563..de9c14dd0d804 100644 --- a/ui/packages/app/test/blocks_xray.spec.ts +++ b/ui/packages/app/test/blocks_xray.spec.ts @@ -61,13 +61,13 @@ test("can run an api request and display the data", async ({ page }) => { await page.check("label:has-text('Covid')"); await page.check("label:has-text('Lung Cancer')"); - const run_button = await page.locator("button", { hasText: /Run/ }); + const run_button = await page.locator("button", { hasText: /Run/ }).first(); await Promise.all([ run_button.click(), page.waitForResponse("**/api/predict/") ]); - const json = await page.locator("data-testid=json"); + const json = await page.locator("data-testid=json").first(); await expect(json).toContainText(`Covid: 0.75, Lung Cancer: 0.25`); }); diff --git a/ui/packages/icons/src/Brush.svelte b/ui/packages/icons/src/Brush.svelte new file mode 100644 index 0000000000000..d13bd421bb7d1 --- /dev/null +++ b/ui/packages/icons/src/Brush.svelte @@ -0,0 +1,9 @@ + diff --git a/ui/packages/icons/src/Chart.svelte b/ui/packages/icons/src/Chart.svelte index 0862f4b2d4747..1d47633a3b1a4 100644 --- a/ui/packages/icons/src/Chart.svelte +++ b/ui/packages/icons/src/Chart.svelte @@ -1,18 +1,9 @@ - diff --git a/ui/packages/icons/src/Color.svelte b/ui/packages/icons/src/Color.svelte new file mode 100644 index 0000000000000..182c671b3785a --- /dev/null +++ b/ui/packages/icons/src/Color.svelte @@ -0,0 +1,16 @@ + diff --git a/ui/packages/icons/src/index.ts b/ui/packages/icons/src/index.ts index d153445193ddf..cef4f56a22cbf 100644 --- a/ui/packages/icons/src/index.ts +++ b/ui/packages/icons/src/index.ts @@ -1,22 +1,24 @@ -export { default as Clear } from "./Clear.svelte"; +export { default as Brush } from "./Brush.svelte"; export { default as Camera } from "./Camera.svelte"; +export { default as Chart } from "./Chart.svelte"; +export { default as Chat } from "./Chat.svelte"; export { default as Circle } from "./Circle.svelte"; +export { default as Clear } from "./Clear.svelte"; +export { default as Color } from "./Color.svelte"; export { default as Edit } from "./Edit.svelte"; +export { default as File } from "./File.svelte"; +export { default as Image } from "./Image.svelte"; +export { default as JSON } from "./JSON.svelte"; +export { default as LineChart } from "./LineChart.svelte"; +export { default as Maximise } from "./Maximise.svelte"; +export { default as Music } from "./Music.svelte"; +export { default as Pause } from "./Pause.svelte"; +export { default as Play } from "./Play.svelte"; +export { default as Plot } from "./Plot.svelte"; export { default as Sketch } from "./Sketch.svelte"; export { default as Square } from "./Square.svelte"; export { default as Table } from "./Table.svelte"; -export { default as Undo } from "./Undo.svelte"; -export { default as Video } from "./Video.svelte"; -export { default as Image } from "./Image.svelte"; -export { default as Chart } from "./Chart.svelte"; -export { default as Music } from "./Music.svelte"; -export { default as File } from "./File.svelte"; -export { default as LineChart } from "./LineChart.svelte"; export { default as TextHighlight } from "./TextHighlight.svelte"; -export { default as JSON } from "./JSON.svelte"; export { default as Tree } from "./Tree.svelte"; -export { default as Chat } from "./Chat.svelte"; -export { default as Plot } from "./Plot.svelte"; -export { default as Play } from "./Play.svelte"; -export { default as Pause } from "./Pause.svelte"; -export { default as Maximise } from "./Maximise.svelte"; +export { default as Undo } from "./Undo.svelte"; +export { default as Video } from "./Video.svelte"; diff --git a/ui/packages/image/package.json b/ui/packages/image/package.json index 6cff875a8b807..54b6947a2110f 100644 --- a/ui/packages/image/package.json +++ b/ui/packages/image/package.json @@ -11,6 +11,7 @@ "@gradio/atoms": "workspace:^0.0.1", "@gradio/icons": "workspace:^0.0.1", "@gradio/upload": "workspace:^0.0.1", + "@gradio/utils": "workspace:^0.0.1", "cropperjs": "^1.5.12", "lazy-brush": "^1.0.1", "resize-observer-polyfill": "^1.5.1" diff --git a/ui/packages/image/src/Image.svelte b/ui/packages/image/src/Image.svelte index c396a79ac99c9..2cc80149beb13 100644 --- a/ui/packages/image/src/Image.svelte +++ b/ui/packages/image/src/Image.svelte @@ -8,6 +8,7 @@ import Sketch from "./Sketch.svelte"; import Webcam from "./Webcam.svelte"; import ModifySketch from "./ModifySketch.svelte"; + import SketchSettings from "./SketchSettings.svelte"; import { Upload, ModifyUpload } from "@gradio/upload"; @@ -39,22 +40,43 @@ } function handle_upload({ detail }: CustomEvent) { - value = - (source === "upload" || source === "webcam") && tool === "sketch" - ? { image: detail, mask: null } - : detail; + if (tool === "color-sketch") { + static_image = detail; + } else { + value = + (source === "upload" || source === "webcam") && tool === "sketch" + ? { image: detail, mask: null } + : detail; + } } function handle_clear({ detail }: CustomEvent) { value = null; + static_image = undefined; dispatch("clear"); } - async function handle_save({ detail }: { detail: string }) { - value = - (source === "upload" || source === "webcam") && tool === "sketch" - ? { image: detail, mask: null } - : detail; + async function handle_save({ detail }: { detail: string }, initial) { + if (mode === "mask") { + if (source === "webcam" && initial) { + value = { + image: detail, + mask: null + }; + } else { + value = { + image: typeof value === "string" ? value : value?.image || null, + mask: detail + }; + } + } else if ( + (source === "upload" || source === "webcam") && + tool === "sketch" + ) { + value = { image: detail, mask: null }; + } else { + value = detail; + } await tick(); @@ -79,23 +101,52 @@ const element = event.composedPath()[0] as HTMLImageElement; img_width = element.naturalWidth; img_height = element.naturalHeight; - } - - function handle_mask_save({ detail }: { detail: string }) { - value = { - image: typeof value === "string" ? value : value?.image || null, - mask: detail - }; + container_height = element.getBoundingClientRect().height; } async function handle_mask_clear() { sketch.clear(); await tick(); value = null; + static_image = undefined; } let img_height = 0; let img_width = 0; + let container_height = 0; + + let brush_radius = 20; + + let mode; + + $: { + if (source === "canvas" && tool === "sketch") { + mode = "bw-sketch"; + } else if (tool === "color-sketch") { + mode = "color-sketch"; + } else if ( + (source === "upload" || source === "webcam") && + tool === "sketch" + ) { + mode = "mask"; + } else { + mode = "editor"; + } + } + + $: brush_color = mode == "mask" ? "#000000" : "#000"; + + let value_img; + let max_height; + let max_width; + + let static_image = undefined; + + $: { + if (value === null || (value.image === null && value.mask === null)) { + static_image = undefined; + } + } {#if source === "canvas"} sketch.undo()} on:clear={() => sketch.clear()} /> - - {:else if value === null || streaming} + {#if tool === "color-sketch"} + + {/if} + + {:else if (value === null && !static_image) || streaming} {#if source === "upload"} - {:else if source === "webcam"} + {:else if source === "webcam" && !static_image} + tool === "color-sketch" ? handle_upload(e) : handle_save(e, true)} on:stream={handle_save} {streaming} {pending} @@ -154,34 +229,50 @@ alt="" class:scale-x-[-1]={source === "webcam" && mirror_webcam} /> - {:else if tool === "sketch" && value !== null} - + {:else if (tool === "sketch" || tool === "color-sketch") && (value !== null || static_image)} + {#key static_image} + + {/key} {#if img_width > 0} sketch.undo()} on:clear={handle_mask_clear} /> + {#if tool === "color-sketch" || tool === "sketch"} + + {/if} {/if} {:else} diff --git a/ui/packages/image/src/Sketch.svelte b/ui/packages/image/src/Sketch.svelte index c42e1f65869a9..f80bc016dc59a 100644 --- a/ui/packages/image/src/Sketch.svelte +++ b/ui/packages/image/src/Sketch.svelte @@ -1,7 +1,7 @@ @@ -474,11 +518,8 @@ {#each canvas_types as { name, zIndex }} + import { createEventDispatcher } from "svelte"; + import { IconButton } from "@gradio/atoms"; + import { Brush, Color } from "@gradio/icons"; + + const dispatch = createEventDispatcher(); + + let show_size = false; + let show_col = false; + + export let brush_radius = 20; + export let brush_color = "#000"; + export let container_height: number; + export let img_width: number; + export let img_height: number; + export let mode: "mask" | "other" = "other"; + + $: width = container_height * (img_width / img_height); + + +
+ + + + (show_size = !show_size)} /> + {#if show_size} + + {/if} + + + {#if mode !== "mask"} + + (show_col = !show_col)} /> + {#if show_col} + + {/if} + + {/if} +
diff --git a/ui/packages/tabs/src/TabItem.svelte b/ui/packages/tabs/src/TabItem.svelte index 89c5028e9c767..f52949fde64e1 100644 --- a/ui/packages/tabs/src/TabItem.svelte +++ b/ui/packages/tabs/src/TabItem.svelte @@ -20,13 +20,12 @@ $: $selected_tab === id && tick().then(() => dispatch("select")); -{#if $selected_tab === id} -
- - - -
-{/if} +
+ + + +
diff --git a/ui/packages/utils/src/index.ts b/ui/packages/utils/src/index.ts index b0acf0d129db3..10afd089358ec 100644 --- a/ui/packages/utils/src/index.ts +++ b/ui/packages/utils/src/index.ts @@ -1,2 +1,3 @@ export * from "./color"; export * from "./styles"; +export * from "./utils"; diff --git a/ui/packages/utils/src/utils.ts b/ui/packages/utils/src/utils.ts new file mode 100644 index 0000000000000..eb35c24729280 --- /dev/null +++ b/ui/packages/utils/src/utils.ts @@ -0,0 +1,9 @@ +export const debounce = (callback: Function, wait = 250) => { + let timeout: NodeJS.Timeout | null = null; + return (...args: Array) => { + const next = () => callback(...args); + if (timeout) clearTimeout(timeout); + + timeout = setTimeout(next, wait); + }; +}; diff --git a/ui/pnpm-lock.yaml b/ui/pnpm-lock.yaml index 62fcb487e62bd..35c2923da8094 100644 --- a/ui/pnpm-lock.yaml +++ b/ui/pnpm-lock.yaml @@ -232,6 +232,7 @@ importers: '@gradio/atoms': workspace:^0.0.1 '@gradio/icons': workspace:^0.0.1 '@gradio/upload': workspace:^0.0.1 + '@gradio/utils': workspace:^0.0.1 cropperjs: ^1.5.12 lazy-brush: ^1.0.1 resize-observer-polyfill: ^1.5.1 @@ -239,6 +240,7 @@ importers: '@gradio/atoms': link:../atoms '@gradio/icons': link:../icons '@gradio/upload': link:../upload + '@gradio/utils': link:../utils cropperjs: 1.5.12 lazy-brush: 1.0.1 resize-observer-polyfill: 1.5.1 @@ -387,7 +389,7 @@ importers: '@gradio/upload': link:../upload '@gradio/video': link:../video devDependencies: - '@sveltejs/adapter-auto': 1.0.0-next.70 + '@sveltejs/adapter-auto': 1.0.0-next.75 '@sveltejs/kit': 1.0.0-next.318_svelte@3.49.0 autoprefixer: 10.4.2_postcss@8.4.6 postcss: 8.4.6 @@ -437,8 +439,8 @@ packages: resolution: {integrity: sha512-B1/plF62pt+H2IJHvApK8fdOJAVsvojvacuac8x8s+JIyqbropMyqNqHTKLm3YD8ZFLGwYeFTudU+PQ7vGvBdA==} dev: true - /@esbuild/linux-loong64/0.14.53: - resolution: {integrity: sha512-W2dAL6Bnyn4xa/QRSU3ilIK4EzD5wgYXKXJiS1HDF5vU3675qc2bvFyLwbUcdmssDveyndy7FbitrCoiV/eMLg==} + /@esbuild/linux-loong64/0.15.7: + resolution: {integrity: sha512-IKznSJOsVUuyt7cDzzSZyqBEcZe+7WlBqTVXiF1OXP/4Nm387ToaXZ0fyLwI1iBlI/bzpxVq411QE2/Bt2XWWw==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -567,39 +569,38 @@ packages: estree-walker: 2.0.2 picomatch: 2.3.1 - /@sveltejs/adapter-auto/1.0.0-next.70: - resolution: {integrity: sha512-FJlDO6oUqbuFJjQoguGb4gdBj3iCSM3evFXkBpQ7hvwu3y2gKbcdzsxdn9tZ5LzkHh79CeJcwiszXFQ8usKk/A==} + /@sveltejs/adapter-auto/1.0.0-next.75: + resolution: {integrity: sha512-UEE6XkeXVrNhpEceqcCbtfV5EYzulIt1D/L+RsjIVsPVtUIZMMpPWzuHHzVvPemFRAuYho+4C1hJjIJ9iCgPeQ==} dependencies: - '@sveltejs/adapter-cloudflare': 1.0.0-next.32 - '@sveltejs/adapter-netlify': 1.0.0-next.75 - '@sveltejs/adapter-vercel': 1.0.0-next.72 + '@sveltejs/adapter-cloudflare': 1.0.0-next.34 + '@sveltejs/adapter-netlify': 1.0.0-next.78 + '@sveltejs/adapter-vercel': 1.0.0-next.76 transitivePeerDependencies: - encoding - supports-color dev: true - /@sveltejs/adapter-cloudflare/1.0.0-next.32: - resolution: {integrity: sha512-tzkUsdQlBk9xUjcGUOBYos4HKaeaXvz9v4TQ1QS2yIHEtL5xvMEDPZ94/DB2gPL4LZCnYbdY2lsy5HCsoN0hkQ==} + /@sveltejs/adapter-cloudflare/1.0.0-next.34: + resolution: {integrity: sha512-9/YJsx5O+iy2+XGuH0vVzZ9OSeHGjkInh8JG8CLmIc0cKkv2t7sEu7qQ/qXA5CcvmS1AqNSUgIMxGoeEDVlO3g==} dependencies: '@cloudflare/workers-types': 3.14.1 - esbuild: 0.14.53 + esbuild: 0.15.7 worktop: 0.8.0-next.14 dev: true - /@sveltejs/adapter-netlify/1.0.0-next.75: - resolution: {integrity: sha512-1zTR/U/ceEAyqIGJ74v54G+JbIR+fSmTN9qfqGOM0gBwVoBVRUujGm4tDFJQNYzvuGzVnC7br/rhYMLZd2JluQ==} + /@sveltejs/adapter-netlify/1.0.0-next.78: + resolution: {integrity: sha512-Yyn/j/0QcLK3Db442ducLUZmyvkO74j7Gdcwu9xN0fQN3kBlCJP9Itx5o4SySrPFGc4Q8cLJ5ELNg+mWduLBAA==} dependencies: '@iarna/toml': 2.2.5 - esbuild: 0.14.53 + esbuild: 0.15.7 set-cookie-parser: 2.4.8 - tiny-glob: 0.2.9 dev: true - /@sveltejs/adapter-vercel/1.0.0-next.72: - resolution: {integrity: sha512-oNs8FQaYC2NnwDcvX/jc9MDNqXc9HxwGPQNkd+1vBpFVWZl9mShQgCcOMzfTOIH0ka984jYNa0ZawYYHex79xg==} + /@sveltejs/adapter-vercel/1.0.0-next.76: + resolution: {integrity: sha512-Od9DBfeMwWC/sZNeCJw4TYVE3LMR8lGJivSdkXWgpvksgG+QizLyzTfvBacapId3wcu+7X4PPTLoH00o5iQGEQ==} dependencies: '@vercel/nft': 0.22.0 - esbuild: 0.14.53 + esbuild: 0.15.7 transitivePeerDependencies: - encoding - supports-color @@ -1531,8 +1532,8 @@ packages: requiresBuild: true optional: true - /esbuild-android-64/0.14.53: - resolution: {integrity: sha512-fIL93sOTnEU+NrTAVMIKiAw0YH22HWCAgg4N4Z6zov2t0kY9RAJ50zY9ZMCQ+RT6bnOfDt8gCTnt/RaSNA2yRA==} + /esbuild-android-64/0.15.7: + resolution: {integrity: sha512-p7rCvdsldhxQr3YHxptf1Jcd86dlhvc3EQmQJaZzzuAxefO9PvcI0GLOa5nCWem1AJ8iMRu9w0r5TG8pHmbi9w==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -1548,8 +1549,8 @@ packages: requiresBuild: true optional: true - /esbuild-android-arm64/0.14.53: - resolution: {integrity: sha512-PC7KaF1v0h/nWpvlU1UMN7dzB54cBH8qSsm7S9mkwFA1BXpaEOufCg8hdoEI1jep0KeO/rjZVWrsH8+q28T77A==} + /esbuild-android-arm64/0.15.7: + resolution: {integrity: sha512-L775l9ynJT7rVqRM5vo+9w5g2ysbOCfsdLV4CWanTZ1k/9Jb3IYlQ06VCI1edhcosTYJRECQFJa3eAvkx72eyQ==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -1565,8 +1566,8 @@ packages: requiresBuild: true optional: true - /esbuild-darwin-64/0.14.53: - resolution: {integrity: sha512-gE7P5wlnkX4d4PKvLBUgmhZXvL7lzGRLri17/+CmmCzfncIgq8lOBvxGMiQ4xazplhxq+72TEohyFMZLFxuWvg==} + /esbuild-darwin-64/0.15.7: + resolution: {integrity: sha512-KGPt3r1c9ww009t2xLB6Vk0YyNOXh7hbjZ3EecHoVDxgtbUlYstMPDaReimKe6eOEfyY4hBEEeTvKwPsiH5WZg==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -1582,8 +1583,8 @@ packages: requiresBuild: true optional: true - /esbuild-darwin-arm64/0.14.53: - resolution: {integrity: sha512-otJwDU3hnI15Q98PX4MJbknSZ/WSR1I45il7gcxcECXzfN4Mrpft5hBDHXNRnCh+5858uPXBXA1Vaz2jVWLaIA==} + /esbuild-darwin-arm64/0.15.7: + resolution: {integrity: sha512-kBIHvtVqbSGajN88lYMnR3aIleH3ABZLLFLxwL2stiuIGAjGlQW741NxVTpUHQXUmPzxi6POqc9npkXa8AcSZQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -1599,8 +1600,8 @@ packages: requiresBuild: true optional: true - /esbuild-freebsd-64/0.14.53: - resolution: {integrity: sha512-WkdJa8iyrGHyKiPF4lk0MiOF87Q2SkE+i+8D4Cazq3/iqmGPJ6u49je300MFi5I2eUsQCkaOWhpCVQMTKGww2w==} + /esbuild-freebsd-64/0.15.7: + resolution: {integrity: sha512-hESZB91qDLV5MEwNxzMxPfbjAhOmtfsr9Wnuci7pY6TtEh4UDuevmGmkUIjX/b+e/k4tcNBMf7SRQ2mdNuK/HQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -1616,8 +1617,8 @@ packages: requiresBuild: true optional: true - /esbuild-freebsd-arm64/0.14.53: - resolution: {integrity: sha512-9T7WwCuV30NAx0SyQpw8edbKvbKELnnm1FHg7gbSYaatH+c8WJW10g/OdM7JYnv7qkimw2ZTtSA+NokOLd2ydQ==} + /esbuild-freebsd-arm64/0.15.7: + resolution: {integrity: sha512-dLFR0ChH5t+b3J8w0fVKGvtwSLWCv7GYT2Y2jFGulF1L5HftQLzVGN+6pi1SivuiVSmTh28FwUhi9PwQicXI6Q==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -1633,8 +1634,8 @@ packages: requiresBuild: true optional: true - /esbuild-linux-32/0.14.53: - resolution: {integrity: sha512-VGanLBg5en2LfGDgLEUxQko2lqsOS7MTEWUi8x91YmsHNyzJVT/WApbFFx3MQGhkf+XdimVhpyo5/G0PBY91zg==} + /esbuild-linux-32/0.15.7: + resolution: {integrity: sha512-v3gT/LsONGUZcjbt2swrMjwxo32NJzk+7sAgtxhGx1+ZmOFaTRXBAi1PPfgpeo/J//Un2jIKm/I+qqeo4caJvg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -1650,8 +1651,8 @@ packages: requiresBuild: true optional: true - /esbuild-linux-64/0.14.53: - resolution: {integrity: sha512-pP/FA55j/fzAV7N9DF31meAyjOH6Bjuo3aSKPh26+RW85ZEtbJv9nhoxmGTd9FOqjx59Tc1ZbrJabuiXlMwuZQ==} + /esbuild-linux-64/0.15.7: + resolution: {integrity: sha512-LxXEfLAKwOVmm1yecpMmWERBshl+Kv5YJ/1KnyAr6HRHFW8cxOEsEfisD3sVl/RvHyW//lhYUVSuy9jGEfIRAQ==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -1667,8 +1668,8 @@ packages: requiresBuild: true optional: true - /esbuild-linux-arm/0.14.53: - resolution: {integrity: sha512-/u81NGAVZMopbmzd21Nu/wvnKQK3pT4CrvQ8BTje1STXcQAGnfyKgQlj3m0j2BzYbvQxSy+TMck4TNV2onvoPA==} + /esbuild-linux-arm/0.15.7: + resolution: {integrity: sha512-JKgAHtMR5f75wJTeuNQbyznZZa+pjiUHV7sRZp42UNdyXC6TiUYMW/8z8yIBAr2Fpad8hM1royZKQisqPABPvQ==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -1684,8 +1685,8 @@ packages: requiresBuild: true optional: true - /esbuild-linux-arm64/0.14.53: - resolution: {integrity: sha512-GDmWITT+PMsjCA6/lByYk7NyFssW4Q6in32iPkpjZ/ytSyH+xeEx8q7HG3AhWH6heemEYEWpTll/eui3jwlSnw==} + /esbuild-linux-arm64/0.15.7: + resolution: {integrity: sha512-P3cfhudpzWDkglutWgXcT2S7Ft7o2e3YDMrP1n0z2dlbUZghUkKCyaWw0zhp4KxEEzt/E7lmrtRu/pGWnwb9vw==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -1701,8 +1702,8 @@ packages: requiresBuild: true optional: true - /esbuild-linux-mips64le/0.14.53: - resolution: {integrity: sha512-d6/XHIQW714gSSp6tOOX2UscedVobELvQlPMkInhx1NPz4ThZI9uNLQ4qQJHGBGKGfu+rtJsxM4NVHLhnNRdWQ==} + /esbuild-linux-mips64le/0.15.7: + resolution: {integrity: sha512-T7XKuxl0VpeFLCJXub6U+iybiqh0kM/bWOTb4qcPyDDwNVhLUiPcGdG2/0S7F93czUZOKP57YiLV8YQewgLHKw==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -1718,8 +1719,8 @@ packages: requiresBuild: true optional: true - /esbuild-linux-ppc64le/0.14.53: - resolution: {integrity: sha512-ndnJmniKPCB52m+r6BtHHLAOXw+xBCWIxNnedbIpuREOcbSU/AlyM/2dA3BmUQhsHdb4w3amD5U2s91TJ3MzzA==} + /esbuild-linux-ppc64le/0.15.7: + resolution: {integrity: sha512-6mGuC19WpFN7NYbecMIJjeQgvDb5aMuvyk0PDYBJrqAEMkTwg3Z98kEKuCm6THHRnrgsdr7bp4SruSAxEM4eJw==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -1735,8 +1736,8 @@ packages: requiresBuild: true optional: true - /esbuild-linux-riscv64/0.14.53: - resolution: {integrity: sha512-yG2sVH+QSix6ct4lIzJj329iJF3MhloLE6/vKMQAAd26UVPVkhMFqFopY+9kCgYsdeWvXdPgmyOuKa48Y7+/EQ==} + /esbuild-linux-riscv64/0.15.7: + resolution: {integrity: sha512-uUJsezbswAYo/X7OU/P+PuL/EI9WzxsEQXDekfwpQ23uGiooxqoLFAPmXPcRAt941vjlY9jtITEEikWMBr+F/g==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -1752,8 +1753,8 @@ packages: requiresBuild: true optional: true - /esbuild-linux-s390x/0.14.53: - resolution: {integrity: sha512-OCJlgdkB+XPYndHmw6uZT7jcYgzmx9K+28PVdOa/eLjdoYkeAFvH5hTwX4AXGLZLH09tpl4bVsEtvuyUldaNCg==} + /esbuild-linux-s390x/0.15.7: + resolution: {integrity: sha512-+tO+xOyTNMc34rXlSxK7aCwJgvQyffqEM5MMdNDEeMU3ss0S6wKvbBOQfgd5jRPblfwJ6b+bKiz0g5nABpY0QQ==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -1769,8 +1770,8 @@ packages: requiresBuild: true optional: true - /esbuild-netbsd-64/0.14.53: - resolution: {integrity: sha512-gp2SB+Efc7MhMdWV2+pmIs/Ja/Mi5rjw+wlDmmbIn68VGXBleNgiEZG+eV2SRS0kJEUyHNedDtwRIMzaohWedQ==} + /esbuild-netbsd-64/0.15.7: + resolution: {integrity: sha512-yVc4Wz+Pu3cP5hzm5kIygNPrjar/v5WCSoRmIjCPWfBVJkZNb5brEGKUlf+0Y759D48BCWa0WHrWXaNy0DULTQ==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -1786,8 +1787,8 @@ packages: requiresBuild: true optional: true - /esbuild-openbsd-64/0.14.53: - resolution: {integrity: sha512-eKQ30ZWe+WTZmteDYg8S+YjHV5s4iTxeSGhJKJajFfQx9TLZJvsJX0/paqwP51GicOUruFpSUAs2NCc0a4ivQQ==} + /esbuild-openbsd-64/0.15.7: + resolution: {integrity: sha512-GsimbwC4FSR4lN3wf8XmTQ+r8/0YSQo21rWDL0XFFhLHKlzEA4SsT1Tl8bPYu00IU6UWSJ+b3fG/8SB69rcuEQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -1803,8 +1804,8 @@ packages: requiresBuild: true optional: true - /esbuild-sunos-64/0.14.53: - resolution: {integrity: sha512-OWLpS7a2FrIRukQqcgQqR1XKn0jSJoOdT+RlhAxUoEQM/IpytS3FXzCJM6xjUYtpO5GMY0EdZJp+ur2pYdm39g==} + /esbuild-sunos-64/0.15.7: + resolution: {integrity: sha512-8CDI1aL/ts0mDGbWzjEOGKXnU7p3rDzggHSBtVryQzkSOsjCHRVe0iFYUuhczlxU1R3LN/E7HgUO4NXzGGP/Ag==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -1820,8 +1821,8 @@ packages: requiresBuild: true optional: true - /esbuild-windows-32/0.14.53: - resolution: {integrity: sha512-m14XyWQP5rwGW0tbEfp95U6A0wY0DYPInWBB7D69FAXUpBpBObRoGTKRv36lf2RWOdE4YO3TNvj37zhXjVL5xg==} + /esbuild-windows-32/0.15.7: + resolution: {integrity: sha512-cOnKXUEPS8EGCzRSFa1x6NQjGhGsFlVgjhqGEbLTPsA7x4RRYiy2RKoArNUU4iR2vHmzqS5Gr84MEumO/wxYKA==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -1837,8 +1838,8 @@ packages: requiresBuild: true optional: true - /esbuild-windows-64/0.14.53: - resolution: {integrity: sha512-s9skQFF0I7zqnQ2K8S1xdLSfZFsPLuOGmSx57h2btSEswv0N0YodYvqLcJMrNMXh6EynOmWD7rz+0rWWbFpIHQ==} + /esbuild-windows-64/0.15.7: + resolution: {integrity: sha512-7MI08Ec2sTIDv+zH6StNBKO+2hGUYIT42GmFyW6MBBWWtJhTcQLinKS6ldIN1d52MXIbiJ6nXyCJ+LpL4jBm3Q==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -1854,8 +1855,8 @@ packages: requiresBuild: true optional: true - /esbuild-windows-arm64/0.14.53: - resolution: {integrity: sha512-E+5Gvb+ZWts+00T9II6wp2L3KG2r3iGxByqd/a1RmLmYWVsSVUjkvIxZuJ3hYTIbhLkH5PRwpldGTKYqVz0nzQ==} + /esbuild-windows-arm64/0.15.7: + resolution: {integrity: sha512-R06nmqBlWjKHddhRJYlqDd3Fabx9LFdKcjoOy08YLimwmsswlFBJV4rXzZCxz/b7ZJXvrZgj8DDv1ewE9+StMw==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -1890,33 +1891,33 @@ packages: esbuild-windows-64: 0.14.31 esbuild-windows-arm64: 0.14.31 - /esbuild/0.14.53: - resolution: {integrity: sha512-ohO33pUBQ64q6mmheX1mZ8mIXj8ivQY/L4oVuAshr+aJI+zLl+amrp3EodrUNDNYVrKJXGPfIHFGhO8slGRjuw==} + /esbuild/0.15.7: + resolution: {integrity: sha512-7V8tzllIbAQV1M4QoE52ImKu8hT/NLGlGXkiDsbEU5PS6K8Mn09ZnYoS+dcmHxOS9CRsV4IRAMdT3I67IyUNXw==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/linux-loong64': 0.14.53 - esbuild-android-64: 0.14.53 - esbuild-android-arm64: 0.14.53 - esbuild-darwin-64: 0.14.53 - esbuild-darwin-arm64: 0.14.53 - esbuild-freebsd-64: 0.14.53 - esbuild-freebsd-arm64: 0.14.53 - esbuild-linux-32: 0.14.53 - esbuild-linux-64: 0.14.53 - esbuild-linux-arm: 0.14.53 - esbuild-linux-arm64: 0.14.53 - esbuild-linux-mips64le: 0.14.53 - esbuild-linux-ppc64le: 0.14.53 - esbuild-linux-riscv64: 0.14.53 - esbuild-linux-s390x: 0.14.53 - esbuild-netbsd-64: 0.14.53 - esbuild-openbsd-64: 0.14.53 - esbuild-sunos-64: 0.14.53 - esbuild-windows-32: 0.14.53 - esbuild-windows-64: 0.14.53 - esbuild-windows-arm64: 0.14.53 + '@esbuild/linux-loong64': 0.15.7 + esbuild-android-64: 0.15.7 + esbuild-android-arm64: 0.15.7 + esbuild-darwin-64: 0.15.7 + esbuild-darwin-arm64: 0.15.7 + esbuild-freebsd-64: 0.15.7 + esbuild-freebsd-arm64: 0.15.7 + esbuild-linux-32: 0.15.7 + esbuild-linux-64: 0.15.7 + esbuild-linux-arm: 0.15.7 + esbuild-linux-arm64: 0.15.7 + esbuild-linux-mips64le: 0.15.7 + esbuild-linux-ppc64le: 0.15.7 + esbuild-linux-riscv64: 0.15.7 + esbuild-linux-s390x: 0.15.7 + esbuild-netbsd-64: 0.15.7 + esbuild-openbsd-64: 0.15.7 + esbuild-sunos-64: 0.15.7 + esbuild-windows-32: 0.15.7 + esbuild-windows-64: 0.15.7 + esbuild-windows-arm64: 0.15.7 dev: true /escalade/3.1.1: @@ -2060,9 +2061,11 @@ packages: /globalyzer/0.1.0: resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} + dev: false /globrex/0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + dev: false /graceful-fs/4.2.9: resolution: {integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==} @@ -3481,6 +3484,7 @@ packages: /svelte/3.49.0: resolution: {integrity: sha512-+lmjic1pApJWDfPCpUUTc1m8azDqYCG1JN9YEngrx/hUyIcFJo6VZhj0A1Ai0wqoHcEIuQy+e9tk+4uDgdtsFA==} engines: {node: '>= 8'} + dev: false /sync-request/6.1.0: resolution: {integrity: sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==} @@ -3595,6 +3599,7 @@ packages: dependencies: globalyzer: 0.1.0 globrex: 0.1.2 + dev: false /tinydate/1.3.0: resolution: {integrity: sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==}