From ae9106030759a88d0259a12b27a7cd0f2a422062 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Wed, 6 Dec 2023 22:56:27 -0800 Subject: disable transitions on settings and payments --- src/lib/utils.js | 1 + src/routes/(app)/[username]/payments/[...page]/+page.svelte | 6 +++++- src/routes/(app)/[username]/settings/[...tab]/+page.svelte | 7 ++++--- 3 files changed, 10 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/lib/utils.js b/src/lib/utils.js index c0df81ae..adbe8356 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -186,6 +186,7 @@ export let f = (s, currency) => export let s = (s) => new Intl.NumberFormat("en-US", { maximumFractionDigits: 0 }).format(s); + export let sat = (s) => { s = Math.abs(s); let p = Math.floor(Math.log(s) / Math.LN10 + 0.000000001); diff --git a/src/routes/(app)/[username]/payments/[...page]/+page.svelte b/src/routes/(app)/[username]/payments/[...page]/+page.svelte index e80d7e80..317f776b 100644 --- a/src/routes/(app)/[username]/payments/[...page]/+page.svelte +++ b/src/routes/(app)/[username]/payments/[...page]/+page.svelte @@ -121,7 +121,7 @@ }; -
+

{$t("payments.header")}

@@ -279,4 +279,8 @@ .active * { @apply bg-black text-white border-black; } + + .payments { + view-transition-name: payments; + } diff --git a/src/routes/(app)/[username]/settings/[...tab]/+page.svelte b/src/routes/(app)/[username]/settings/[...tab]/+page.svelte index baef4d8e..e77213c2 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/+page.svelte +++ b/src/routes/(app)/[username]/settings/[...tab]/+page.svelte @@ -181,7 +181,7 @@
@@ -232,7 +232,8 @@
+ -- cgit v1.2.3 From 00e88944abb529d07e189f1181de8a4804f8ae9c Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Thu, 7 Dec 2023 15:10:24 -0800 Subject: forgot password --- src/components/Calendar.svelte | 3 +- src/components/Card.svelte | 3 +- src/components/Footer.svelte | 3 +- src/components/Heart.svelte | 3 +- src/components/Invoice.svelte | 3 +- src/components/LandingHeader.svelte | 22 ++- src/components/LandingHero.svelte | 3 +- src/components/Left.svelte | 3 +- src/components/Lnurlp.svelte | 3 +- src/components/Lnurlw.svelte | 3 +- src/components/LocationsMap.svelte | 6 +- src/components/Lock.svelte | 3 +- src/components/Numpad.svelte | 3 +- src/components/Password.svelte | 9 +- src/components/Pin.svelte | 3 +- src/components/Pinpad.svelte | 6 +- src/components/RegisterOrLogin.svelte | 193 --------------------- src/components/Request.svelte | 3 +- src/components/Spinner.svelte | 3 +- src/components/index.js | 0 src/locales/en.json | 3 + src/routes/(app)/+error.svelte | 3 +- .../(app)/[username]/(profile)/+layout.svelte | 15 +- .../[username]/(profile)/request/+page.svelte | 3 +- .../(app)/[username]/card/[serial]/+page.svelte | 6 +- src/routes/(app)/[username]/funds/+page.svelte | 3 +- .../(app)/[username]/invoice/[id]/+page.svelte | 24 ++- .../[username]/invoice/[id]/paid/+page.svelte | 12 +- .../[username]/receive/[...param]/+page.svelte | 3 +- .../[username]/settings/[...tab]/+page.svelte | 4 +- .../(app)/[username]/settings/[...tab]/_pos.svelte | 6 +- .../[username]/settings/[...tab]/_security.svelte | 6 +- .../[username]/settings/[...tab]/_shopify.svelte | 4 +- src/routes/(app)/buy/+page.svelte | 11 +- src/routes/(app)/forgot/+page.server.js | 16 ++ src/routes/(app)/forgot/+page.svelte | 58 +++++++ src/routes/(app)/fund/[id]/+page.svelte | 12 +- src/routes/(app)/fund/[id]/withdraw/+page.svelte | 3 +- src/routes/(app)/launch/+page.svelte | 7 +- src/routes/(app)/launch/purchase/+page.svelte | 17 +- src/routes/(app)/launch/purchase/card/+page.svelte | 8 +- .../(app)/launch/thanks/[asset]/+page.svelte | 7 +- src/routes/(app)/launch/ticket/+page.svelte | 7 +- src/routes/(app)/login/+page.svelte | 175 ++++++++++++++++++- src/routes/(app)/payment/[id]/+page.svelte | 8 +- src/routes/(app)/register/+page.server.js | 11 +- src/routes/(app)/register/+page.svelte | 24 +-- src/routes/(app)/scan/+page.svelte | 5 +- src/routes/(app)/send/[...text]/+page.svelte | 12 +- .../bitcoin/[address]/[...amount]/+page.server.js | 12 +- .../bitcoin/[address]/[...amount]/+page.svelte | 3 +- .../send/fund/[name]/[...amount]/+page.svelte | 3 +- src/routes/(app)/send/invoice/[id]/+page.svelte | 6 +- .../(app)/send/lightning/[payreq]/+page.svelte | 10 +- .../send/user/[username]/[...amount]/+page.svelte | 8 +- src/routes/(app)/support/+page.svelte | 9 +- src/routes/(static)/docs/+page.svelte | 3 +- static/lottie/success.json | 17 +- 58 files changed, 411 insertions(+), 411 deletions(-) delete mode 100644 src/components/RegisterOrLogin.svelte delete mode 100644 src/components/index.js create mode 100644 src/routes/(app)/forgot/+page.server.js create mode 100644 src/routes/(app)/forgot/+page.svelte (limited to 'src') diff --git a/src/components/Calendar.svelte b/src/components/Calendar.svelte index b07c136c..7d7fa570 100644 --- a/src/components/Calendar.svelte +++ b/src/components/Calendar.svelte @@ -3,8 +3,7 @@ class="absolute bottom-0 left-0 -mb-0.5 transform translate-x-1/2 -translate-y-1/2 text-black peer-placeholder-shown:text-gray-300 h-6 w-6" fill="none" viewBox="0 0 24 24" - stroke="currentColor" -> + stroke="currentColor"> + stroke="currentColor"> diff --git a/src/components/Heart.svelte b/src/components/Heart.svelte index 9bae6500..4304545f 100644 --- a/src/components/Heart.svelte +++ b/src/components/Heart.svelte @@ -4,8 +4,7 @@ class="mr-1" viewBox="0 0 24 24" fill="none" - xmlns="http://www.w3.org/2000/svg" -> + xmlns="http://www.w3.org/2000/svg"> diff --git a/src/components/LandingHeader.svelte b/src/components/LandingHeader.svelte index d1094a1d..72dd8c71 100644 --- a/src/components/LandingHeader.svelte +++ b/src/components/LandingHeader.svelte @@ -52,11 +52,12 @@ class="border rounded-full px-6 py-2 font-bold" on:click={() => goto(`/${user.username}`)} >Home + + {:else} @@ -64,11 +65,12 @@ class="border rounded-full px-6 py-2 font-bold hover:opacity-80" on:click={() => goto("/register")} >{$t("nav.startInSeconds")} + + {/if} @@ -79,6 +81,8 @@ class="block md:hidden absolute top-[34.5px] right-10 z" on:click={() => (showMobileMenu = !showMobileMenu)} > + +
goto("/register")} >{$t("nav.startInSeconds")} + + {:else} @@ -113,11 +118,12 @@ class="border rounded-full px-6 py-2 font-bold block" on:click={() => goto(`/${user.username}`)} >{$t("nav.account")} + + {/if} diff --git a/src/components/LandingHero.svelte b/src/components/LandingHero.svelte index 43223499..14488cdd 100644 --- a/src/components/LandingHero.svelte +++ b/src/components/LandingHero.svelte @@ -29,8 +29,7 @@
diff --git a/src/components/Left.svelte b/src/components/Left.svelte index 1e236969..dd27a698 100644 --- a/src/components/Left.svelte +++ b/src/components/Left.svelte @@ -4,8 +4,7 @@ height="24" viewBox="0 0 24 24" fill="none" - xmlns="http://www.w3.org/2000/svg" -> + xmlns="http://www.w3.org/2000/svg">
diff --git a/src/components/Lock.svelte b/src/components/Lock.svelte index fce994a2..23ab0699 100644 --- a/src/components/Lock.svelte +++ b/src/components/Lock.svelte @@ -3,8 +3,7 @@ class="absolute bottom-0 left-0 -mb-0.5 transform translate-x-1/2 -translate-y-1/2 text-black peer-placeholder-shown:text-gray-300 h-6 w-6" fill="none" viewBox="0 0 24 24" - stroke="currentColor" -> + stroke="currentColor"> handleInput(value)} - > + on:click={() => handleInput(value)}> {:else} diff --git a/src/components/Password.svelte b/src/components/Password.svelte index da65d718..ab8b9449 100644 --- a/src/components/Password.svelte +++ b/src/components/Password.svelte @@ -57,8 +57,7 @@
@@ -67,14 +66,12 @@ type="button" class="border-2 border-black rounded-xl font-semibold mx-auto py-3 w-40 hover:opacity-80 mx-auto" on:click={cancel} - on:keydown={cancel} - > + on:keydown={cancel}>
Cancel
diff --git a/src/components/Pin.svelte b/src/components/Pin.svelte index 9938f9a1..50b0e463 100644 --- a/src/components/Pin.svelte +++ b/src/components/Pin.svelte @@ -53,8 +53,7 @@
diff --git a/src/components/Pinpad.svelte b/src/components/Pinpad.svelte index 641ddb2b..1a549654 100644 --- a/src/components/Pinpad.svelte +++ b/src/components/Pinpad.svelte @@ -60,8 +60,7 @@
@@ -72,8 +71,7 @@ {:else} diff --git a/src/components/RegisterOrLogin.svelte b/src/components/RegisterOrLogin.svelte deleted file mode 100644 index be7d4142..00000000 --- a/src/components/RegisterOrLogin.svelte +++ /dev/null @@ -1,193 +0,0 @@ - - -{#if need2fa} - -{/if} - -
-
- - - -
- -
-
-

{$t("login." + pageID)}

- - {#if form?.error} -
- {form.error} -
- {/if} - -
- - - -
- - -
- -
- - {#if revealPassword} - - {:else} - - {/if} - -
- - {#if pageID === "register"} -

- {$t("login.passwordRecommendation")} -

- {:else} - - - - - - - {/if} - - -
- -

- {pageID === "register" - ? $t("login.haveAccount") - : $t("login.noAccount")} - - {pageID === "register" ? $t("login.signIn") : $t("login.register")} - -

-
-
-
diff --git a/src/components/Request.svelte b/src/components/Request.svelte index c085f9e2..03364052 100644 --- a/src/components/Request.svelte +++ b/src/components/Request.svelte @@ -28,8 +28,7 @@
diff --git a/src/components/Spinner.svelte b/src/components/Spinner.svelte index e9c3348f..2e9243b9 100644 --- a/src/components/Spinner.svelte +++ b/src/components/Spinner.svelte @@ -2,8 +2,7 @@ class="mx-auto h-6 w-6 animate-spin text-white" xmlns="http://www.w3.org/2000/svg" fill="none" - viewBox="0 0 24 24" -> + viewBox="0 0 24 24"> diff --git a/src/routes/(app)/[username]/(profile)/+layout.svelte b/src/routes/(app)/[username]/(profile)/+layout.svelte index 71c282c4..e33c4b23 100644 --- a/src/routes/(app)/[username]/(profile)/+layout.svelte +++ b/src/routes/(app)/[username]/(profile)/+layout.svelte @@ -157,8 +157,7 @@ diff --git a/src/routes/(app)/[username]/card/[serial]/+page.svelte b/src/routes/(app)/[username]/card/[serial]/+page.svelte index 1d11ebee..1792b443 100644 --- a/src/routes/(app)/[username]/card/[serial]/+page.svelte +++ b/src/routes/(app)/[username]/card/[serial]/+page.svelte @@ -13,15 +13,13 @@
diff --git a/src/routes/(app)/[username]/invoice/[id]/+page.svelte b/src/routes/(app)/[username]/invoice/[id]/+page.svelte index 0ff1c21c..13c75fca 100644 --- a/src/routes/(app)/[username]/invoice/[id]/+page.svelte +++ b/src/routes/(app)/[username]/invoice/[id]/+page.svelte @@ -130,17 +130,13 @@ class="rounded-full border py-2 px-4 font-bold hover:opacity-80 w-full" class:bg-black={type === types.lightning} class:text-white={type === types.lightning} - on:click={toggleType} - > - ⚡️ Lightning - + on:click={toggleType}> ⚡️ Lightning @@ -217,16 +211,18 @@
diff --git a/src/routes/(app)/[username]/settings/[...tab]/+page.svelte b/src/routes/(app)/[username]/settings/[...tab]/+page.svelte index e77213c2..b4283e72 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/+page.svelte +++ b/src/routes/(app)/[username]/settings/[...tab]/+page.svelte @@ -220,8 +220,7 @@ bind:this={submit} type="submit" class="border-2 border-black rounded-xl font-semibold mx-auto py-3 w-40 hover:opacity-80" - class:bg-black={loading} - > + class:bg-black={loading}> {#if loading} {:else} @@ -236,4 +235,3 @@ view-transition-name: settings; } - diff --git a/src/routes/(app)/[username]/settings/[...tab]/_pos.svelte b/src/routes/(app)/[username]/settings/[...tab]/_pos.svelte index 8193bc9c..e211b013 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/_pos.svelte +++ b/src/routes/(app)/[username]/settings/[...tab]/_pos.svelte @@ -25,8 +25,7 @@ + value={parseInt(user.locktime)}> diff --git a/src/routes/(app)/[username]/settings/[...tab]/_shopify.svelte b/src/routes/(app)/[username]/settings/[...tab]/_shopify.svelte index 0266fa9c..870803fb 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/_shopify.svelte +++ b/src/routes/(app)/[username]/settings/[...tab]/_shopify.svelte @@ -28,9 +28,7 @@
- admin.shopify.com/store/ -
+ >admin.shopify.com/store/
$$ @@ -93,8 +94,9 @@ CVC/CVV @@ -113,8 +115,7 @@
+ +
+ + diff --git a/src/routes/(app)/fund/[id]/+page.svelte b/src/routes/(app)/fund/[id]/+page.svelte index b81e2917..ebb1a517 100644 --- a/src/routes/(app)/fund/[id]/+page.svelte +++ b/src/routes/(app)/fund/[id]/+page.svelte @@ -62,8 +62,7 @@
@@ -72,8 +71,7 @@
@@ -83,15 +81,13 @@
diff --git a/src/routes/(app)/fund/[id]/withdraw/+page.svelte b/src/routes/(app)/fund/[id]/withdraw/+page.svelte index 7af07e38..e7c1d852 100644 --- a/src/routes/(app)/fund/[id]/withdraw/+page.svelte +++ b/src/routes/(app)/fund/[id]/withdraw/+page.svelte @@ -47,8 +47,7 @@
diff --git a/src/routes/(app)/launch/purchase/+page.svelte b/src/routes/(app)/launch/purchase/+page.svelte index 49a51973..3af3b186 100644 --- a/src/routes/(app)/launch/purchase/+page.svelte +++ b/src/routes/(app)/launch/purchase/+page.svelte @@ -21,9 +21,7 @@

- Purchase Ticket -

+ >Purchase Ticket
@@ -46,25 +43,21 @@ {:else}

- Payment Options -

+ >Payment Options
diff --git a/src/routes/(app)/launch/purchase/card/+page.svelte b/src/routes/(app)/launch/purchase/card/+page.svelte index 6d33c87f..d7ef830d 100644 --- a/src/routes/(app)/launch/purchase/card/+page.svelte +++ b/src/routes/(app)/launch/purchase/card/+page.svelte @@ -48,8 +48,9 @@ CVC/CVV @@ -67,8 +68,7 @@ diff --git a/src/routes/(app)/launch/ticket/+page.svelte b/src/routes/(app)/launch/ticket/+page.svelte index 6b16e804..a4888727 100644 --- a/src/routes/(app)/launch/ticket/+page.svelte +++ b/src/routes/(app)/launch/ticket/+page.svelte @@ -7,9 +7,7 @@

- Your Ticket -

+ >Your Ticket

We've minted your ticket as an diff --git a/src/routes/(app)/login/+page.svelte b/src/routes/(app)/login/+page.svelte index 647ef03c..61eea586 100644 --- a/src/routes/(app)/login/+page.svelte +++ b/src/routes/(app)/login/+page.svelte @@ -1,7 +1,18 @@ - +{#if need2fa} + +{/if} + +

+
+ + + +
+ +
+
+

{$t("login.signIn")}

+ + {#if form?.error} +
+ {form.error} +
+ {/if} + +
+ + + +
+ + +
+ +
+ + {#if revealPassword} + + {:else} + + {/if} + +
+ + + + +
+ +

+ {$t("login.haveAccount")} + + {$t("login.register")} + +

+
+
+
diff --git a/src/routes/(app)/payment/[id]/+page.svelte b/src/routes/(app)/payment/[id]/+page.svelte index fd5bbae0..a1c7bbed 100644 --- a/src/routes/(app)/payment/[id]/+page.svelte +++ b/src/routes/(app)/payment/[id]/+page.svelte @@ -140,6 +140,8 @@ class="flex font-bold hover:opacity-80 mb-auto my-auto" on:click={() => copy(id)} > + +
@@ -149,8 +151,7 @@
@@ -240,8 +236,7 @@ type="button" on:click={refresh} class="absolute right-0 top-4" - tabindex="5" - > + tabindex="5">
@@ -276,8 +271,7 @@ type="button" tabindex="4" on:click={() => (revealPassword = !revealPassword)} - class="absolute right-0 top-4" - > + class="absolute right-0 top-4">
@@ -291,8 +285,7 @@ type="submit" class="bg-black text-white w-full rounded-2xl p-4 font-semibold hover:opacity-80" disabled={loading} - bind:this={btn} - > + bind:this={btn}> {#if loading} {:else} @@ -305,8 +298,7 @@ {$t("login.haveAccount")} + class="block md:inline text-black underline underline-offset-4 hover:opacity-80"> {$t("login.signIn")}

diff --git a/src/routes/(app)/scan/+page.svelte b/src/routes/(app)/scan/+page.svelte index e23b9bb8..c02fc1c2 100644 --- a/src/routes/(app)/scan/+page.svelte +++ b/src/routes/(app)/scan/+page.svelte @@ -37,10 +37,7 @@
+ on:click={back}> Cancel
diff --git a/src/lib/utils.js b/src/lib/utils.js index adbe8356..f55b47b6 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -101,8 +101,8 @@ export function reverseFormat(val, locale) { export let protectedRoutes = [/customers/, /settings/, /payments/]; -export let success = (m) => { - toast.pop(); +export let success = (m, clear = true) => { + if (clear) toast.pop(); toast.push(m, { theme: { "--toastBarBackground": "#F5F7FA", @@ -110,16 +110,16 @@ export let success = (m) => { }); }; -export let warning = (m) => { - toast.pop(); +export let warning = (m, clear = true) => { + if (clear) toast.pop(); toast.push(m, { theme: { "--toastBarBackground": "#FFCE22", }, }); }; -export let fail = (m) => { - toast.pop(); +export let fail = (m, clear = true) => { + if (clear) toast.pop(); toast.push(m, { theme: { "--toastBarBackground": "#E93535", diff --git a/src/locales/en.json b/src/locales/en.json index cefabaa3..ac8b0075 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -207,8 +207,11 @@ "nostrKeys": "Nostr key", "nostrDescription": "Your nostr key is used to sign and decrypt messages, keep it safe or someone may be able to impersonate you.", "seedDescription": "This 12 word seed phrase is used to derive your nostr private key and your self-custodial wallet keys which determine your auto-withdrawal addresses. Back it up and don't let anyone see it.", - "emailDescription": "For password resets and notifications", + "emailDescription": "For password resets and payment notifications only", "hideNsec": "Hide nostr secret key", + "saved": "Settings saved!", + "verifying": "Verification email sent", + "verified": "Email verified!", "revealNsec": "Reveal nostr secret key", "hideSeed": "Hide seed phrase", "revealSeed": "Reveal seed phrase", diff --git a/src/routes/(app)/[username]/settings/[...tab]/+page.svelte b/src/routes/(app)/[username]/settings/[...tab]/+page.svelte index b300b75d..03b68973 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/+page.svelte +++ b/src/routes/(app)/[username]/settings/[...tab]/+page.svelte @@ -39,7 +39,7 @@ $: form?.user && ({ user } = form); - $: form?.success && success("Settings saved!"); + $: form?.success && success($t("user.settings.saved"), false); $: form?.message && fail(form.message); @@ -60,6 +60,11 @@ let { address, id, username } = user; let loading; + onMount(() => { + if ($page.url.searchParams.get("verified")) + success($t("user.settings.verified")); + }); + async function handleSubmit() { try { loading = true; @@ -146,8 +151,7 @@ auth(cookies) ); - warning("Verification email sent"); - await sleep(4000); + warning($t("user.settings.verifying"), false); } catch (e) { console.log(e); } diff --git a/src/routes/(app)/[username]/settings/[...tab]/_account.svelte b/src/routes/(app)/[username]/settings/[...tab]/_account.svelte index e96341b4..773485f0 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/_account.svelte +++ b/src/routes/(app)/[username]/settings/[...tab]/_account.svelte @@ -103,7 +103,7 @@ {#if user.verified} - {:else} + {:else if user.email} {/if}
diff --git a/src/routes/(app)/[username]/verify/[code]/+page.server.js b/src/routes/(app)/[username]/verify/[code]/+page.server.js index fda11c9e..3ddcd412 100644 --- a/src/routes/(app)/[username]/verify/[code]/+page.server.js +++ b/src/routes/(app)/[username]/verify/[code]/+page.server.js @@ -1,12 +1,14 @@ import { get } from "$lib/utils"; -import { error } from "@sveltejs/kit"; +import { error, redirect } from "@sveltejs/kit"; export let load = async ({ params: { code } }) => { + let user; try { - let user = await get(`/verify/${code}`); - return { user }; + user = await get(`/verify/${code}`); } catch (e) { console.log(e); return { error: "Verification failed" }; } + + throw redirect(307, `/${user.username}/settings/account?verified=true`); }; -- cgit v1.2.3 From 6326608b7e6692e2e47c790ec96126e3975d6a4f Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Thu, 7 Dec 2023 23:45:20 -0800 Subject: wait for loading --- .../[username]/settings/[...tab]/+page.svelte | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/routes/(app)/[username]/settings/[...tab]/+page.svelte b/src/routes/(app)/[username]/settings/[...tab]/+page.svelte index 03b68973..714ed8db 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/+page.svelte +++ b/src/routes/(app)/[username]/settings/[...tab]/+page.svelte @@ -7,7 +7,7 @@ import Icon from "$comp/Icon.svelte"; import Spinner from "$comp/Spinner.svelte"; import Pin from "$comp/Pin.svelte"; - import { t } from "$lib/translations"; + import { loading, t } from "$lib/translations"; import { fail, auth, post, sleep, warning, success } from "$lib/utils"; import { avatar, banner, password, pin } from "$lib/store"; import { upload } from "$lib/upload"; @@ -58,16 +58,14 @@ $: ({ comp } = tabs.find((t) => t.name === tab)); let { address, id, username } = user; - let loading; + let submitting; - onMount(() => { - if ($page.url.searchParams.get("verified")) - success($t("user.settings.verified")); - }); + $: if (!$loading && $page.url.searchParams.get("verified")) + success($t("user.settings.verified")); async function handleSubmit() { try { - loading = true; + submitting = true; let data = new FormData(formElement); if (data.get("password")) { @@ -95,7 +93,7 @@ mode: "no-cors", }); } catch (e) { - console.log("problem uploading avatar", e); + console.log("problem upsubmitting avatar", e); } } @@ -112,7 +110,7 @@ mode: "no-cors", }); } catch (e) { - console.log("problem uploading banner", e); + console.log("problem upsubmitting banner", e); } } @@ -175,7 +173,7 @@ fail("Something went wrong"); } - loading = false; + submitting = false; } @@ -225,8 +223,8 @@ bind:this={submit} type="submit" class="border-2 border-black rounded-xl font-semibold mx-auto py-3 w-40 hover:opacity-80" - class:bg-black={loading}> - {#if loading} + class:bg-black={submitting}> + {#if submitting} {:else}
{$t("user.settings.saveSettings")}
-- cgit v1.2.3 From 9f8b64802f1faa1b2eff6f368d669d497c432053 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Fri, 8 Dec 2023 11:03:36 -0800 Subject: rm debug --- src/routes/(app)/[username]/settings/[...tab]/_pos.svelte | 1 - src/routes/(app)/reset/[code]/+page.server.js | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) (limited to 'src') diff --git a/src/routes/(app)/[username]/settings/[...tab]/_pos.svelte b/src/routes/(app)/[username]/settings/[...tab]/_pos.svelte index 8892e7d1..0e4301c4 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/_pos.svelte +++ b/src/routes/(app)/[username]/settings/[...tab]/_pos.svelte @@ -42,7 +42,6 @@

-{user.prompt}
{$t("user.settings.tipPrompt")} diff --git a/src/routes/(app)/reset/[code]/+page.server.js b/src/routes/(app)/reset/[code]/+page.server.js index 92ad1d0f..5dbf72d4 100644 --- a/src/routes/(app)/reset/[code]/+page.server.js +++ b/src/routes/(app)/reset/[code]/+page.server.js @@ -21,7 +21,7 @@ export const actions = { } if (error) return fail(400, { error }); - throw redirect(307, `/${user.username}`); + throw redirect(307, `/${user.username}`); } catch (e) { console.log(e.message); return fail(400, { error: e.message }); -- cgit v1.2.3 From 0257b835ab053fab995e01646ade19fe11fe9044 Mon Sep 17 00:00:00 2001 From: Adrien Hopkins Date: Sat, 9 Dec 2023 07:33:13 -0500 Subject: Met en jour la traduction française MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/locales/fr.json | 639 +++++++++++++++++++++++++++------------------------- 1 file changed, 329 insertions(+), 310 deletions(-) (limited to 'src') diff --git a/src/locales/fr.json b/src/locales/fr.json index ad5478f6..ae2871f7 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -1,312 +1,331 @@ { - "404": { - "404": "404", - "pageNotFound": "Page non trouvée." - }, - "about": { - "header": "À Propos", - "locations": { - "header": "Établissements", - "description": "Il y a des entreprises qui acceptent bitcoin utilisant le point de vente coinos. Si vous utilisez notre appli, s'il vous plait fais-le-nous savoir!" - }, - "team": { - "header": "L'Équipe", - "adam": { - "name": "Adam Soltys", - "position": "Officier Technique Principal", - "bio": "Adam est développeur web et passionné de bitcoin. Il croit que l'argent sûr est la clé pour augmenter la prospérité planétaire. Il habite en Vancouver de Nord avec sa femme Chelsea et deux enfants." - }, - "cole": { - "name": "Cole Goodwin", - "position": "Professionel de Bitcoin", - "bio": "Cole est un professionel de bitcoin diplômé et un homme motivé avec passion pour la liberté. Il a découvert bitcoin en 2016 et l'a etudié en détail. Maintenant, il veux introduire le réseau Lightning à autant d'utilisateurs que possible." - } - } - }, - "error": { - "header": "Erreur", - "message": "S'il vous plait réessayez ou contactez l'assistance.", - "signIn": "Vous devez connecter pour continuer.", - "unrecognizedInput": "Donnée non reconnu" - }, - "faq": { - "header": "FAQ", - "cost": { - "question": "Combien cela coûte-t-il?", - "answer": "Recevoir des paiements sur votre compte est gratuit. Les retraits vers des portefeuilles externes entraînent des frais minimes qui varient en fonction des conditions du réseau. Nous facturons 0,1% pour convertir entre le Bitcoin lightning et le Bitcoin on-chain. Envoyer à d'autres comptes Coinos est gratuit." - }, - "compatibility": { - "question": "Ai-je besoin d'un dispositif ou d'un logiciel spécial?", - "answer": "Non, Coinos est une application web qui fonctionne partout où il y a Internet. Les commerçants pourraient l'utiliser sur une tablette ou afficher un code QR pour que les clients puissent le scanner avec leur téléphone." - }, - "safety": { - "question": "Quand mes fonds sont-ils réglés?", - "answer": "Les paiements lightning sont réglés instantanément. Vous pouvez retirer votre solde vers un autre portefeuille en quelques secondes. Les dépôts on-chain prennent en moyenne 5-10 minutes pour être confirmés." - }, - "pos": { - "question": "Coinos peut-il s'intégrer à mon PoS existant?", - "answer": "Nous recommandons d'entrer les ventes dans votre PoS existant comme des transactions en espèces." - }, - "bitcoin": { - "question": "Que puis-je faire avec le Bitcoin?", - "answer": "Dépensez-le chez d'autres commerçants ou payez vos dépenses avec en incitant votre personnel, vos fournisseurs et votre propriétaire à l'accepter." - } - }, - "footer": { - "followUs": "Suivez-Nous", - "twitter": "Twitter", - "github": "GitHub", - "company": "Entreprise", - "telegram": "Telegram", - "support": "Assistance", - "jobs": "Jobs", - "linktree": "Linktree", - "documentation": "Documentation" - }, - "howItWorks": { - "header": "Comment cela Fonctionne", - "step1": { - "header": "1. Créez votre compte", - "description": "Un nom d'utilateur et mot de passe est tout ce dont vous avez besoin pour commencer." - }, - "step2": { - "header": "2. Demande pour des paiements", - "description": "Comme vous faisiez normalement, mais avec bitcoin." - }, - "step3": { - "header": "3. C'est tout!", - "description": "Vous pouvez convertir en monnaie local n'importe quand." - } - }, - "landing": { - "header_before_icon": "Le", - "header_with_icon": "façon", - "header_after_icon": "le plus façile d'accepter bitcoin dans votre magasin.", - "subheader": "Agrandir votre clientèle et chiffre d'affaires en acceptant bitcoin avec un point de vente façile à utiliser et géré. Logiciel et matériel informatique non obligatoire.", - "info1": { - "title": "Paiements instantanés avec Lightning", - "description": "Le moment où votre client envoie un paiment, c'est là. Vous ne devez pas attendre les décisions des banques ou vous inquiéter pour des rejets de débit. Décisions instantanées, en secondes. Dites au revoir aux frais de transactions de 3% des cartes de crédit." - }, - "info2": { - "title": "Simple à utiliser, en garde par défaut", - "description1": "Juste entrer une quantité, partager le code QR et c'est tout!", - "description2": "Tes comptes sont en garde par défaut, qui élimine le nécessité de comprendre comment bitcoin/lightning fonctionnent. Nous réalisons le plus gros du travail pour que vous puissiez vous concentrer sur votre entreprise.", - "description3": "Vous avez toujours l'option de gérer vos clés." - }, - "info3": { - "title": "Personalisez-le comme vous voulez", - "description": "Personalisez votre point de vente, ou utilisez les réglages par défaut - c'est votre chois." - } - }, - "login": { - "username": "Nom d'utilisateur", - "password": "Mot de passe", - "email": "Courriel", - "passwordRecommendation": "Nous recommendons un mot de passe long et aléatoire, généré par un gestionnaire de mots de passe.", - "forgotUserOrPassword": "Oublié votre nom d'utilisateur ou mot de passe ?", - "haveAccount": "Avez-vous déjà un compte ?", - "noAccount": "Pas encore de compte ?", - "register": "Enregistrer", - "signIn": "Connexion", - "failed": "Echec de Connexion", - "optional": "Optionnel", - "token": "Jeton 2FA" - }, - "nav": { - "startInSeconds": "Commence en Secondes", - "account": "Compte", - "signIn": "Connexion", - "signOut": "Déconnexion", - "dashboard": "Tableau de bord", - "settings": "Préférences", - "support": "Assistance", - "profile": "Profil", - "map": "Carte", - "merch": "Marchandise", - "about": "À Propos", - "docs": "Documents", - "messages": "Messages", - "funds": "Fonds" - }, - "invoice": { - "addTip": "Ajoutez un pourboire", - "addTipq": "Ajouter un pourboire?", - "done": "Fini", - "paymentSuccessful": "Paiement réussi!", - "invoice": "Facture", - "total": "Total", - "tip": "Pourboire" - }, - "jobs": { - "header": "Emplois", - "subheader": "Postes disponibles actuels", - "pitch1": "coinos recherche pour des développeurs pour joindre notre équipe croissant (temps plein ou partiel, télétravail OK)", - "pitch2": "Avez-vous hâte de travailler sur bitcoin open source? Regardez sur nos dépôts sur", - "github": "GitHub", - "pitch3": "Si vous pensez que vous pouvez exercer une influence positive, nous voulons que vous contribuez. Envoyer votre CV à" - }, - "user": { - "follow": "Suivre", - "remove": "Enlève", - "scanToPayBTC": "Scanner pour payer avec bitcoin", - "dashboard": { - "dashboard": "Tableau de bord", - "accountBalance": "Solde", - "conversionFeeWarning": "Il y a des frais de 1% pour convertir entre bitcoin, Liquid et Lightning.", - "fetchingRate": "cherchant taut de change...", - "send": "Envoie", - "withdraw": "Retire", - "go": "Allez", - "receive": "Reçois un Paiement", - "deposit": "Déposer", - "voucher": "Bon" - }, - "receive": { - "lessThan1BTCWarning": "S'il vous plaît utilisez moins d'un bitcoin.", - "showQR": "Voire le QR code" - }, - "settings": { - "header": "Préférences", - "ACCOUNT": "COMPTE", - "POINT_OF_SALE": "POINT DE VENTE", - "SECURITY": "SÉCURITÉ", - "locale": "Langue", - "username": "Nom d'Utilisateur", - "email": "Courriel", - "newPassword": "Nouveau Mot de Passe", - "emailNotifications": "Notifications par Courriel", - "emailNotificationsDescription": "Nous pouvons vous notifier par courriel quand votre compte change ou quand vous recevez des paiements", - "smsNotifications": "Notifications par SMS", - "smsNotificationsDescription": "Nous vous envoyons des notifications par texte quand c'est activé", - "theme": "Thème", - "themeDescription": "Sélectionnez des thèmes dèfauts.", - "localCurrency": "Monnaie Local", - "btcUnit": "Voire bitcoin en:", - "bitcoin": "bitcoin", - "satoshis": "Satoshis", - "securityPIN": "NIP de Sécurité", - "securityPINDescription": "Choisir un NIP de sécurité qui sera necessaire pour ouvrir tes préférences et pour envoyer des paiements sortants.", - "setPIN": "Choisir Votre NIP", - "autoLock": "Auto-Verouillage", - "autoLockDescription": "Ta conte activera une mode sécuritaire après une durée spécifiée:", - "twofa": "Authentification à 2 Facteurs", - "twofaDescription": "Ajoutez un autre niveau de sécurité par activez l'authentication à deux facteurs.", - "twofaSetup": "Activer A2F", - "bannerImage": "Image de Bandeau", - "profileImage": "Image de Profil", - "oneTimeCode": "Entrez mot de passe à usage unique", - "accountId": "Secret de conte", - "twofaDisable": "Désactivez A2F", - "about": "À Propos", - "aboutPlaceholder": "Un description court de vous ou votre entreprise (adresse, bio, etc.)", - "select": "Choisir", - "verifyPIN": "Verifiez votre NIP", - "enablePIN": "Activer NIP", - "disablePIN": "Désactiver NIP", - "saveSettings": "Sauvegarder Paramètres", - "tipPrompt": "Demande pour Pourboires", - "tipPromptDescription": "Demander les gens s'ils voulent ajouter un pourboire avant payer leurs factures", - "displayName": "Nom d'Utilisateur", - "minutes": "minutes", - "hour": "heure", - "hours": "heures", - "hideSeed": "Cache phrase mnémotechnique", - "revealSeed": "Montre phrase mnémotechnique" - }, - "support": { - "header": "Assistance", - "email": "Courriel", - "accountName": "Nom d'utilisateur", - "message": "Message", - "send": "Envoie" - }, - "bitcoin": "Bitcoin", - "lightning": "Lightning", - "invoice": "Facture", - "unfollow": "Ne plus suivre", - "following": "Vous suivez", - "this": "Cette", - "lightningAddress": "Adresse de lightning", - "send": { - "contacts": "Contacts", - "scan": "Scannez", - "paste": "Collez", - "next": "Prochain", - "placeholder": "Collez une adresse de bitcoin, facture de lightning ou nom d'utilisateur coinos", - "makeQR": "QR" - }, - "requestPayment": "Demander un Paiement", - "welcome": "Bienvenue! Le solde de votre conte est vide. Vous pouvez commencer par déposer ou recevoir un paiement.", - "showBalance": "Montrer Solde", - "followers": "Abonnés", - "noNotes": "Pas de notes", - "message": "Envoyer", - "messages": "Messages", - "feed": "Flux", - "notes": "Notes", - "pay": "Payer", - "profilePage": "Page de profil", - "nostrPubkey": "Clé publique nostr" - }, - "news": { - "header": "Nouvelles", - "subheader": "Dernières Informations" - }, - "payments": { - "addFunds": "Ajouter d'argent", - "takeFunds": "Prendre d'argent", - "show": "Démontrer", - "hide": "Cacher", - "qr": "QR", - "copyLink": "Copier le Lien", - "copyText": "Copier le Texte", - "openLink": "Ouvrer le Portefeuille", - "moreOptions": "Plus d'options", - "total": "Total", - "gainLoss": "Hausse/Perte", - "presentValue": "Valuer au présent", - "amount": "Quantité", - "date": "Date", - "id": "ID de Transaction", - "details": "Détails de Transaction", - "header": "Paiements", - "preimage": "Preuve de paiement", - "type": "Type", - "time": "Heure", - "sent": "Envoyé", - "received": "Reçu", - "empty": "Vous n'avez pas de transactions.", - "send": "Envoyer", - "next": "Prochain", - "sendTo": "Envoyer à", - "to": "à", - "pay": "Payer", - "requesting": "demande", - "sentInvoiceTo": "Envoyé une facture à", - "sentRequestTo": "Demande envoyé!", - "pleasePay": "S'il vous plait payez", - "day": "Jour", - "week": "Semaine", - "month": "Mois", - "all": "Toutes", - "export": "Exporter", - "invoice": "Facture", - "readyToPay": "est prêt a payer", - "describeOrder": "Utiliser ce champ pour décrire votre commande", - "requestAnInvoice": "Demander une facture", - "submit": "Soumettre", - "isRequesting": "demande", - "invoiceFrom": "Facture de", - "awaiting": "Attendant", - "tapAnywhere": "Taper n'importe où pour continuer", - "from": "de", - "redeem": "Racheter", - "redeemed": "Racheté", - "redeemedBy": "Racheté par", - "sendMessage": "Écrire une message...", - "fundsClaimed": "Les fonds sont réclamés!", - "print": "Imprime", - "create": "Crée", - "fund": "Finance" - } + "404": { + "404": "404", + "pageNotFound": "Page non trouvée." + }, + "about": { + "header": "À Propos", + "locations": { + "header": "Établissements", + "description": "Il y a des entreprises qui acceptent bitcoin utilisant le point de vente coinos. Si vous utilisez notre appli, s'il vous plait fais-le-nous savoir!" + }, + "team": { + "header": "L'Équipe", + "adam": { + "name": "Adam Soltys", + "position": "Officier Technique Principal", + "bio": "Adam est développeur web et passionné de bitcoin. Il croit que l'argent sûr est la clé pour augmenter la prospérité planétaire. Il habite en Vancouver de Nord avec sa femme Chelsea et deux enfants." + }, + "cole": { + "name": "Cole Goodwin", + "position": "Professionel de Bitcoin", + "bio": "Cole est un professionel de bitcoin diplômé et un homme motivé avec passion pour la liberté. Il a découvert bitcoin en 2016 et l'a etudié en détail. Maintenant, il veux introduire le réseau Lightning à autant d'utilisateurs que possible." + } + } + }, + "error": { + "header": "Erreur", + "message": "S'il vous plait réessayez ou contactez l'assistance.", + "signIn": "Vous devez connecter pour continuer.", + "unrecognizedInput": "Donnée non reconnu" + }, + "faq": { + "header": "FAQ", + "cost": { + "question": "Combien cela coûte-t-il?", + "answer": "Recevoir des paiements sur votre compte est gratuit. Les retraits vers des portefeuilles externes entraînent des frais minimes qui varient en fonction des conditions du réseau. Nous facturons 0,1% pour convertir entre le Bitcoin lightning et le Bitcoin on-chain. Envoyer à d'autres comptes Coinos est gratuit." + }, + "compatibility": { + "question": "Ai-je besoin d'un dispositif ou d'un logiciel spécial?", + "answer": "Non, Coinos est une application web qui fonctionne partout où il y a Internet. Les commerçants pourraient l'utiliser sur une tablette ou afficher un code QR pour que les clients puissent le scanner avec leur téléphone." + }, + "safety": { + "question": "Quand mes fonds sont-ils réglés?", + "answer": "Les paiements lightning sont réglés instantanément. Vous pouvez retirer votre solde vers un autre portefeuille en quelques secondes. Les dépôts on-chain prennent en moyenne 5-10 minutes pour être confirmés." + }, + "pos": { + "question": "Coinos peut-il s'intégrer à mon PoS existant?", + "answer": "Nous recommandons d'entrer les ventes dans votre PoS existant comme des transactions en espèces." + }, + "bitcoin": { + "question": "Que puis-je faire avec le Bitcoin?", + "answer": "Dépensez-le chez d'autres commerçants ou payez vos dépenses avec en incitant votre personnel, vos fournisseurs et votre propriétaire à l'accepter." + } + }, + "footer": { + "followUs": "Suivez-Nous", + "twitter": "Twitter", + "github": "GitHub", + "company": "Entreprise", + "telegram": "Telegram", + "support": "Assistance", + "jobs": "Jobs", + "linktree": "Linktree", + "documentation": "Documentation" + }, + "howItWorks": { + "header": "Comment cela Fonctionne", + "step1": { + "header": "1. Créez votre compte", + "description": "Un nom d'utilateur et mot de passe est tout ce dont vous avez besoin pour commencer." + }, + "step2": { + "header": "2. Demande pour des paiements", + "description": "Comme vous faisiez normalement, mais avec bitcoin." + }, + "step3": { + "header": "3. C'est tout!", + "description": "Vous pouvez convertir en monnaie local n'importe quand." + } + }, + "landing": { + "header_before_icon": "Le", + "header_with_icon": "façon", + "header_after_icon": "le plus façile d'accepter bitcoin dans votre magasin.", + "subheader": "Agrandir votre clientèle et chiffre d'affaires en acceptant bitcoin avec un point de vente façile à utiliser et géré. Logiciel et matériel informatique non obligatoire.", + "info1": { + "title": "Paiements instantanés avec Lightning", + "description": "Le moment où votre client envoie un paiment, c'est là. Vous ne devez pas attendre les décisions des banques ou vous inquiéter pour des rejets de débit. Décisions instantanées, en secondes. Dites au revoir aux frais de transactions de 3% des cartes de crédit." + }, + "info2": { + "title": "Simple à utiliser, en garde par défaut", + "description1": "Juste entrer une quantité, partager le code QR et c'est tout!", + "description2": "Tes comptes sont en garde par défaut, qui élimine le nécessité de comprendre comment bitcoin/lightning fonctionnent. Nous réalisons le plus gros du travail pour que vous puissiez vous concentrer sur votre entreprise.", + "description3": "Vous avez toujours l'option de gérer vos clés." + }, + "info3": { + "title": "Personalisez-le comme vous voulez", + "description": "Personalisez votre point de vente, ou utilisez les réglages par défaut - c'est votre chois." + } + }, + "login": { + "username": "Nom d'utilisateur", + "password": "Mot de passe", + "email": "Courriel", + "passwordRecommendation": "Nous recommendons un mot de passe long et aléatoire, généré par un gestionnaire de mots de passe.", + "forgotUserOrPassword": "Oublié votre nom d'utilisateur ou mot de passe ?", + "haveAccount": "Avez-vous déjà un compte ?", + "noAccount": "Pas encore de compte ?", + "register": "Enregistrer", + "signIn": "Connexion", + "failed": "Echec de Connexion", + "optional": "Optionnel", + "token": "Jeton 2FA", + "forgot": "Mot de passe oublié?", + "reset": "Reinitialiser le mot de passe", + "submit": "Soumettre", + "newPassword": "Nouveau mot de passe" + }, + "nav": { + "startInSeconds": "Commence en Secondes", + "account": "Compte", + "signIn": "Connexion", + "signOut": "Déconnexion", + "dashboard": "Tableau de bord", + "settings": "Préférences", + "support": "Assistance", + "profile": "Profil", + "map": "Carte", + "merch": "Marchandise", + "about": "À Propos", + "docs": "Documents", + "messages": "Messages", + "funds": "Fonds" + }, + "invoice": { + "addTip": "Ajoutez un pourboire", + "addTipq": "Ajouter un pourboire?", + "done": "Fini", + "paymentSuccessful": "Paiement réussi!", + "invoice": "Facture", + "total": "Total", + "tip": "Pourboire" + }, + "jobs": { + "header": "Emplois", + "subheader": "Postes disponibles actuels", + "pitch1": "coinos recherche pour des développeurs pour joindre notre équipe croissant (temps plein ou partiel, télétravail OK)", + "pitch2": "Avez-vous hâte de travailler sur bitcoin open source? Regardez sur nos dépôts sur", + "github": "GitHub", + "pitch3": "Si vous pensez que vous pouvez exercer une influence positive, nous voulons que vous contribuez. Envoyer votre CV à" + }, + "user": { + "follow": "Suivre", + "remove": "Enlève", + "scanToPayBTC": "Scanner pour payer avec bitcoin", + "dashboard": { + "dashboard": "Tableau de bord", + "accountBalance": "Solde", + "conversionFeeWarning": "Il y a des frais de 1% pour convertir entre bitcoin, Liquid et Lightning.", + "fetchingRate": "cherchant taut de change...", + "send": "Envoie", + "withdraw": "Retire", + "go": "Allez", + "receive": "Reçois un Paiement", + "deposit": "Déposer", + "voucher": "Bon" + }, + "receive": { + "lessThan1BTCWarning": "S'il vous plaît utilisez moins d'un bitcoin.", + "showQR": "Voire le QR code" + }, + "settings": { + "header": "Préférences", + "ACCOUNT": "COMPTE", + "POINT_OF_SALE": "POINT DE VENTE", + "SECURITY": "SÉCURITÉ", + "locale": "Langue", + "username": "Nom d'Utilisateur", + "email": "Courriel", + "newPassword": "Nouveau Mot de Passe", + "emailNotifications": "Notifications par Courriel", + "emailNotificationsDescription": "Nous pouvons vous notifier par courriel quand votre compte change ou quand vous recevez des paiements", + "smsNotifications": "Notifications par SMS", + "smsNotificationsDescription": "Nous vous envoyons des notifications par texte quand c'est activé", + "theme": "Thème", + "themeDescription": "Sélectionnez des thèmes dèfauts.", + "localCurrency": "Monnaie Local", + "btcUnit": "Voire bitcoin en:", + "bitcoin": "bitcoin", + "satoshis": "Satoshis", + "securityPIN": "NIP de Sécurité", + "securityPINDescription": "Choisir un NIP de sécurité qui sera necessaire pour ouvrir tes préférences et pour envoyer des paiements sortants.", + "setPIN": "Choisir Votre NIP", + "autoLock": "Auto-Verouillage", + "autoLockDescription": "Ta conte activera une mode sécuritaire après une durée spécifiée:", + "twofa": "Authentification à 2 Facteurs", + "twofaDescription": "Ajoutez un autre niveau de sécurité par activez l'authentication à deux facteurs.", + "twofaSetup": "Activer A2F", + "bannerImage": "Image de Bandeau", + "profileImage": "Image de Profil", + "oneTimeCode": "Entrez mot de passe à usage unique", + "accountId": "Secret de conte", + "twofaDisable": "Désactivez A2F", + "about": "À Propos", + "aboutPlaceholder": "Un description court de vous ou votre entreprise (adresse, bio, etc.)", + "select": "Choisir", + "verifyPIN": "Verifiez votre NIP", + "enablePIN": "Activer NIP", + "disablePIN": "Désactiver NIP", + "saveSettings": "Sauvegarder Paramètres", + "tipPrompt": "Demande pour Pourboires", + "tipPromptDescription": "Demander les gens s'ils voulent ajouter un pourboire avant payer leurs factures", + "displayName": "Nom d'Utilisateur", + "minutes": "minutes", + "hour": "heure", + "hours": "heures", + "hideSeed": "Cache phrase mnémotechnique", + "revealSeed": "Montre phrase mnémotechnique", + "notifications": "Notifications de paiement", + "notificationsDesc": "Reçevez un courriel quand un paiement arrive à ta conte", + "seedPhrase": "Phrase mnémotechnique", + "nostrKeys": "Clé nostr", + "nostrDescription": "Votre clé nostr est utilisé pour signer et décrypter vos messages, gardez-le sauf ou quelqu'un peut se faire passer pour vous.", + "seedDescription": "Cette phrase mnémotechnique à 12 mots est utilisé pour générer votre clé privée et vos clés de portefeuille que vous controllez qui déterminez vos addresses de retrait automatique. Sauvegardez-le et jamais permettez à personne de le voir.", + "emailDescription": "Pour seulement reinitialisations de mot de passe et notifications de paiements seulement.", + "hideNsec": "Cache clé privée nostr", + "saved": "Paramètres sauvegardés!", + "verifying": "Courriel de verification envoyé.", + "verified": "Courriel verifié!", + "revealNsec": "Montre clé privée nostr", + "publishNip5": "Publie identité nostr", + "nip5a": "Utilise", + "nip5b": "comme votre addresse nostr verifié publiquement" + }, + "support": { + "header": "Assistance", + "email": "Courriel", + "accountName": "Nom d'utilisateur", + "message": "Message", + "send": "Envoie" + }, + "bitcoin": "Bitcoin", + "lightning": "Lightning", + "invoice": "Facture", + "unfollow": "Ne plus suivre", + "following": "Vous suivez", + "this": "Cette", + "lightningAddress": "Adresse de lightning", + "send": { + "contacts": "Contacts", + "scan": "Scannez", + "paste": "Collez", + "next": "Prochain", + "placeholder": "Collez une adresse de bitcoin, facture de lightning ou nom d'utilisateur coinos", + "makeQR": "QR" + }, + "requestPayment": "Demander un Paiement", + "welcome": "Bienvenue! Le solde de votre conte est vide. Vous pouvez commencer par déposer ou recevoir un paiement.", + "showBalance": "Montrer Solde", + "followers": "Abonnés", + "noNotes": "Pas de notes", + "message": "Envoyer", + "messages": "Messages", + "feed": "Flux", + "notes": "Notes", + "pay": "Payer", + "profilePage": "Page de profil", + "nostrPubkey": "Clé publique nostr" + }, + "news": { + "header": "Nouvelles", + "subheader": "Dernières Informations" + }, + "payments": { + "addFunds": "Ajouter d'argent", + "takeFunds": "Prendre d'argent", + "show": "Démontrer", + "hide": "Cacher", + "qr": "QR", + "copyLink": "Copier le Lien", + "copyText": "Copier le Texte", + "openLink": "Ouvrer le Portefeuille", + "moreOptions": "Plus d'options", + "total": "Total", + "gainLoss": "Hausse/Perte", + "presentValue": "Valuer au présent", + "amount": "Quantité", + "date": "Date", + "id": "ID de Transaction", + "details": "Détails de Transaction", + "header": "Paiements", + "preimage": "Preuve de paiement", + "type": "Type", + "time": "Heure", + "sent": "Envoyé", + "received": "Reçu", + "empty": "Vous n'avez pas de transactions.", + "send": "Envoyer", + "next": "Prochain", + "sendTo": "Envoyer à", + "to": "à", + "pay": "Payer", + "requesting": "demande", + "sentInvoiceTo": "Envoyé une facture à", + "sentRequestTo": "Demande envoyé!", + "pleasePay": "S'il vous plait payez", + "day": "Jour", + "week": "Semaine", + "month": "Mois", + "all": "Toutes", + "export": "Exporter", + "invoice": "Facture", + "readyToPay": "est prêt a payer", + "describeOrder": "Utiliser ce champ pour décrire votre commande", + "requestAnInvoice": "Demander une facture", + "submit": "Soumettre", + "isRequesting": "demande", + "invoiceFrom": "Facture de", + "awaiting": "Attendant", + "tapAnywhere": "Taper n'importe où pour continuer", + "from": "de", + "redeem": "Racheter", + "redeemed": "Racheté", + "redeemedBy": "Racheté par", + "sendMessage": "Écrire une message...", + "fundsClaimed": "Les fonds sont réclamés!", + "print": "Imprime", + "create": "Crée", + "fund": "Finance" + } } -- cgit v1.2.3 From 98125594c3735f8ab5b0195eff9ed6d31f52d29a Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Thu, 14 Dec 2023 14:27:48 -0800 Subject: webp logo --- src/routes/(app)/+layout.svelte | 2 +- src/routes/+layout.svelte | 4 ++-- static/images/logo.webp | Bin 0 -> 4240 bytes 3 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 static/images/logo.webp (limited to 'src') diff --git a/src/routes/(app)/+layout.svelte b/src/routes/(app)/+layout.svelte index 237e931c..3983fcbf 100644 --- a/src/routes/(app)/+layout.svelte +++ b/src/routes/(app)/+layout.svelte @@ -122,7 +122,7 @@ {#if subject?.profile} {:else} - + {/if} diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 182be1cc..545018ed 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -16,7 +16,7 @@ - + @@ -24,7 +24,7 @@ - + diff --git a/static/images/logo.webp b/static/images/logo.webp new file mode 100644 index 00000000..1c7ede7c Binary files /dev/null and b/static/images/logo.webp differ -- cgit v1.2.3 From d27a50209e63352e9f46ecfa0ac8510100361128 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Thu, 14 Dec 2023 14:27:52 -0800 Subject: increase max fee --- src/routes/(app)/send/lightning/[payreq]/+page.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/routes/(app)/send/lightning/[payreq]/+page.svelte b/src/routes/(app)/send/lightning/[payreq]/+page.svelte index 0b9b19d1..ff64df23 100644 --- a/src/routes/(app)/send/lightning/[payreq]/+page.svelte +++ b/src/routes/(app)/send/lightning/[payreq]/+page.svelte @@ -16,7 +16,7 @@ let { currency } = data.user; let a; - let maxfee = 500; + let maxfee = 10000; $: amount = form?.amount || data.amount; $: rate = rates[currency]; -- cgit v1.2.3 From 310687af30375e87679ea5a9ff3fef5a8f4f12fa Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Thu, 14 Dec 2023 14:48:26 -0800 Subject: webp image --- src/routes/(app)/+layout.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/routes/(app)/+layout.svelte b/src/routes/(app)/+layout.svelte index 3983fcbf..e439d43e 100644 --- a/src/routes/(app)/+layout.svelte +++ b/src/routes/(app)/+layout.svelte @@ -122,7 +122,7 @@ {#if subject?.profile} {:else} - + {/if} -- cgit v1.2.3 From 7d598265e60eecf06a27501a85e8db330aeed381 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Fri, 15 Dec 2023 15:24:43 -0800 Subject: sveltekit 2 --- package.json | 15 +- pnpm-lock.yaml | 2326 ++++++++++++++++++++ src/lib/invoice.js | 8 +- src/routes/(app)/+layout.server.js | 8 +- .../(profile)/event/[id]/+page.server.js | 4 +- .../[username]/(profile)/request/+page.server.js | 2 +- src/routes/(app)/[username]/+layout.server.js | 2 +- .../(app)/[username]/address/+page.server.js | 2 +- .../(app)/[username]/card/[serial]/+page.server.js | 2 +- src/routes/(app)/[username]/generate/+server.js | 2 +- .../[username]/invoice/[id]/+layout.server.js | 12 +- .../[username]/invoice/[id]/tip/+page.server.js | 2 +- .../(app)/[username]/request/[id]/+page.server.js | 6 +- .../[username]/settings/[...tab]/+page.server.js | 2 +- .../(app)/[username]/verify/[code]/+page.server.js | 2 +- src/routes/(app)/admin/+layout.server.js | 4 +- src/routes/(app)/admin/+page.server.js | 2 +- src/routes/(app)/buy/+page.server.js | 2 +- src/routes/(app)/disable2fa/+server.js | 2 +- src/routes/(app)/fund/[id]/+page.server.js | 4 +- src/routes/(app)/fund/[id]/sweep/+page.server.js | 4 +- .../(app)/fund/[id]/withdraw/+page.server.js | 4 +- src/routes/(app)/launch/purchase/+page.server.js | 6 +- .../(app)/launch/purchase/card/+page.server.js | 4 +- src/routes/(app)/ln/[lnurl]/+page.server.js | 10 +- src/routes/(app)/login/+page.server.js | 4 +- src/routes/(app)/logout/+page.server.js | 2 +- .../(app)/redeem/[redeemcode]/+page.server.js | 6 +- src/routes/(app)/register/+page.server.js | 5 +- src/routes/(app)/reset/[code]/+page.server.js | 2 +- src/routes/(app)/send/[...text]/+page.server.js | 24 +- .../bitcoin/[address]/[...amount]/+page.server.js | 2 +- .../send/fund/[name]/[...amount]/+page.server.js | 2 +- src/routes/(app)/send/invoice/[id]/+page.server.js | 6 +- .../(app)/send/lightning/[payreq]/+page.server.js | 2 +- .../user/[username]/[...amount]/+page.server.js | 8 +- src/routes/start/+server.js | 4 +- 37 files changed, 2415 insertions(+), 89 deletions(-) create mode 100644 pnpm-lock.yaml (limited to 'src') diff --git a/package.json b/package.json index 491cb75f..6103510e 100644 --- a/package.json +++ b/package.json @@ -11,8 +11,8 @@ }, "devDependencies": { "@scure/base": "^1.1.1", - "@sveltejs/adapter-node": "^1.1.4", - "@sveltejs/kit": "^1.27.6", + "@sveltejs/adapter-node": "^2.0.0", + "@sveltejs/kit": "^2.0.0", "@tailwindcss/line-clamp": "^0.4.2", "@zerodevx/svelte-toast": "^0.7.2", "autoprefixer": "^10.4.13", @@ -27,21 +27,22 @@ "nostr-tools": "^1.14.2", "postcss": "^8.4.20", "prettier": "2", - "prettier-plugin-svelte": "2", + "prettier-plugin-svelte": "^2.10.1", "qr-code-styling": "1.6.0-rc.1", "qr-scanner": "^1.4.2", "qrcode-base64": "^1.0.1", "rollup": "^2.79.1", "screenfull": "^6.0.2", - "svelte": "^3.55.0", + "svelte": "^4.0.0", "svelte-outclick": "^3.3.3", - "svelte-preprocess": "^4.10.7", + "svelte-preprocess": "^5.0.3", "svelte-virtual-scroll-list": "^1.1.0", "sveltekit-i18n": "^2.2.2", "tailwind-scrollbar": "^2.1.0", "tailwindcss": "^3.2.4", "uuid": "^9.0.0", - "vite": "^4.2.1" + "vite": "^5.0.0", + "@sveltejs/vite-plugin-svelte": "^3.0.0" }, "pnpm": { "peerDependencyRules": { @@ -60,4 +61,4 @@ "uint8array-extras": "^0.5.0", "unique-names-generator": "^4.7.1" } -} +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 00000000..4aa3a7a9 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,2326 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + '@faker-js/faker': + specifier: ^8.2.0 + version: 8.2.0 + '@scure/bip39': + specifier: ^1.2.1 + version: 1.2.1 + leaflet-tooltip-layout: + specifier: ^0.1.2 + version: 0.1.2(leaflet@1.9.3) + maplibre-gl: + specifier: ^3.3.1 + version: 3.3.1 + svelte-adapter-bun: + specifier: ^0.5.1 + version: 0.5.1 + uint8array-extras: + specifier: ^0.5.0 + version: 0.5.0 + unique-names-generator: + specifier: ^4.7.1 + version: 4.7.1 + +devDependencies: + '@scure/base': + specifier: ^1.1.1 + version: 1.1.1 + '@sveltejs/adapter-node': + specifier: ^2.0.0 + version: 2.0.0(@sveltejs/kit@2.0.0) + '@sveltejs/kit': + specifier: ^2.0.0 + version: 2.0.0(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.10) + '@sveltejs/vite-plugin-svelte': + specifier: ^3.0.0 + version: 3.0.1(svelte@4.2.8)(vite@5.0.10) + '@tailwindcss/line-clamp': + specifier: ^0.4.2 + version: 0.4.2(tailwindcss@3.2.4) + '@zerodevx/svelte-toast': + specifier: ^0.7.2 + version: 0.7.2 + autoprefixer: + specifier: ^10.4.13 + version: 10.4.13(postcss@8.4.20) + bech32: + specifier: ^2.0.0 + version: 2.0.0 + bip21: + specifier: ^2.0.3 + version: 2.0.3 + bitcoin-address-validation: + specifier: ^2.2.1 + version: 2.2.1 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + date-fns: + specifier: ^2.29.3 + version: 2.29.3 + html5-qrcode: + specifier: ^2.3.8 + version: 2.3.8 + leaflet: + specifier: ^1.9.3 + version: 1.9.3 + leaflet.markercluster: + specifier: ^1.5.3 + version: 1.5.3(leaflet@1.9.3) + nostr-tools: + specifier: ^1.14.2 + version: 1.14.2 + postcss: + specifier: ^8.4.20 + version: 8.4.20 + prettier: + specifier: '2' + version: 2.0.0 + prettier-plugin-svelte: + specifier: ^2.10.1 + version: 2.10.1(prettier@2.0.0)(svelte@4.2.8) + qr-code-styling: + specifier: 1.6.0-rc.1 + version: 1.6.0-rc.1 + qr-scanner: + specifier: ^1.4.2 + version: 1.4.2 + qrcode-base64: + specifier: ^1.0.1 + version: 1.0.1 + rollup: + specifier: ^2.79.1 + version: 2.79.1 + screenfull: + specifier: ^6.0.2 + version: 6.0.2 + svelte: + specifier: ^4.0.0 + version: 4.2.8 + svelte-outclick: + specifier: ^3.3.3 + version: 3.3.3(svelte@4.2.8) + svelte-preprocess: + specifier: ^5.0.3 + version: 5.1.2(postcss@8.4.20)(svelte@4.2.8) + svelte-virtual-scroll-list: + specifier: ^1.1.0 + version: 1.1.0(svelte@4.2.8) + sveltekit-i18n: + specifier: ^2.2.2 + version: 2.2.2(svelte@4.2.8) + tailwind-scrollbar: + specifier: ^2.1.0 + version: 2.1.0(tailwindcss@3.2.4) + tailwindcss: + specifier: ^3.2.4 + version: 3.2.4(postcss@8.4.20) + uuid: + specifier: ^9.0.0 + version: 9.0.0 + vite: + specifier: ^5.0.0 + version: 5.0.10 + +packages: + + /@ampproject/remapping@2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 + dev: true + + /@esbuild/android-arm64@0.19.9: + resolution: {integrity: sha512-q4cR+6ZD0938R19MyEW3jEsMzbb/1rulLXiNAJQADD/XYp7pT+rOS5JGxvpRW8dFDEfjW4wLgC/3FXIw4zYglQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.19.9: + resolution: {integrity: sha512-jkYjjq7SdsWuNI6b5quymW0oC83NN5FdRPuCbs9HZ02mfVdAP8B8eeqLSYU3gb6OJEaY5CQabtTFbqBf26H3GA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.19.9: + resolution: {integrity: sha512-KOqoPntWAH6ZxDwx1D6mRntIgZh9KodzgNOy5Ebt9ghzffOk9X2c1sPwtM9P+0eXbefnDhqYfkh5PLP5ULtWFA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.19.9: + resolution: {integrity: sha512-KBJ9S0AFyLVx2E5D8W0vExqRW01WqRtczUZ8NRu+Pi+87opZn5tL4Y0xT0mA4FtHctd0ZgwNoN639fUUGlNIWw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.19.9: + resolution: {integrity: sha512-vE0VotmNTQaTdX0Q9dOHmMTao6ObjyPm58CHZr1UK7qpNleQyxlFlNCaHsHx6Uqv86VgPmR4o2wdNq3dP1qyDQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.19.9: + resolution: {integrity: sha512-uFQyd/o1IjiEk3rUHSwUKkqZwqdvuD8GevWF065eqgYfexcVkxh+IJgwTaGZVu59XczZGcN/YMh9uF1fWD8j1g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.19.9: + resolution: {integrity: sha512-WMLgWAtkdTbTu1AWacY7uoj/YtHthgqrqhf1OaEWnZb7PQgpt8eaA/F3LkV0E6K/Lc0cUr/uaVP/49iE4M4asA==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.19.9: + resolution: {integrity: sha512-PiPblfe1BjK7WDAKR1Cr9O7VVPqVNpwFcPWgfn4xu0eMemzRp442hXyzF/fSwgrufI66FpHOEJk0yYdPInsmyQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.19.9: + resolution: {integrity: sha512-C/ChPohUYoyUaqn1h17m/6yt6OB14hbXvT8EgM1ZWaiiTYz7nWZR0SYmMnB5BzQA4GXl3BgBO1l8MYqL/He3qw==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.19.9: + resolution: {integrity: sha512-f37i/0zE0MjDxijkPSQw1CO/7C27Eojqb+r3BbHVxMLkj8GCa78TrBZzvPyA/FNLUMzP3eyHCVkAopkKVja+6Q==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.19.9: + resolution: {integrity: sha512-t6mN147pUIf3t6wUt3FeumoOTPfmv9Cc6DQlsVBpB7eCpLOqQDyWBP1ymXn1lDw4fNUSb/gBcKAmvTP49oIkaA==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.19.9: + resolution: {integrity: sha512-jg9fujJTNTQBuDXdmAg1eeJUL4Jds7BklOTkkH80ZgQIoCTdQrDaHYgbFZyeTq8zbY+axgptncko3v9p5hLZtw==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.19.9: + resolution: {integrity: sha512-tkV0xUX0pUUgY4ha7z5BbDS85uI7ABw3V1d0RNTii7E9lbmV8Z37Pup2tsLV46SQWzjOeyDi1Q7Wx2+QM8WaCQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.19.9: + resolution: {integrity: sha512-DfLp8dj91cufgPZDXr9p3FoR++m3ZJ6uIXsXrIvJdOjXVREtXuQCjfMfvmc3LScAVmLjcfloyVtpn43D56JFHg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.19.9: + resolution: {integrity: sha512-zHbglfEdC88KMgCWpOl/zc6dDYJvWGLiUtmPRsr1OgCViu3z5GncvNVdf+6/56O2Ca8jUU+t1BW261V6kp8qdw==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.19.9: + resolution: {integrity: sha512-JUjpystGFFmNrEHQnIVG8hKwvA2DN5o7RqiO1CVX8EN/F/gkCjkUMgVn6hzScpwnJtl2mPR6I9XV1oW8k9O+0A==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.19.9: + resolution: {integrity: sha512-GThgZPAwOBOsheA2RUlW5UeroRfESwMq/guy8uEe3wJlAOjpOXuSevLRd70NZ37ZrpO6RHGHgEHvPg1h3S1Jug==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.19.9: + resolution: {integrity: sha512-Ki6PlzppaFVbLnD8PtlVQfsYw4S9n3eQl87cqgeIw+O3sRr9IghpfSKY62mggdt1yCSZ8QWvTZ9jo9fjDSg9uw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.19.9: + resolution: {integrity: sha512-MLHj7k9hWh4y1ddkBpvRj2b9NCBhfgBt3VpWbHQnXRedVun/hC7sIyTGDGTfsGuXo4ebik2+3ShjcPbhtFwWDw==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.19.9: + resolution: {integrity: sha512-GQoa6OrQ8G08guMFgeXPH7yE/8Dt0IfOGWJSfSH4uafwdC7rWwrfE6P9N8AtPGIjUzdo2+7bN8Xo3qC578olhg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.19.9: + resolution: {integrity: sha512-UOozV7Ntykvr5tSOlGCrqU3NBr3d8JqPes0QWN2WOXfvkWVGRajC+Ym0/Wj88fUgecUCLDdJPDF0Nna2UK3Qtg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.19.9: + resolution: {integrity: sha512-oxoQgglOP7RH6iasDrhY+R/3cHrfwIDvRlT4CGChflq6twk8iENeVvMJjmvBb94Ik1Z+93iGO27err7w6l54GQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@faker-js/faker@8.2.0: + resolution: {integrity: sha512-VacmzZqVxdWdf9y64lDOMZNDMM/FQdtM9IsaOPKOm2suYwEatb8VkdHqOzXcDnZbk7YDE2BmsJmy/2Hmkn563g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: '>=6.14.13'} + dev: false + + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.20 + dev: true + + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true + + /@jridgewell/trace-mapping@0.3.20: + resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /@mapbox/geojson-rewind@0.5.2: + resolution: {integrity: sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==} + hasBin: true + dependencies: + get-stream: 6.0.1 + minimist: 1.2.8 + dev: false + + /@mapbox/jsonlint-lines-primitives@2.0.2: + resolution: {integrity: sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==} + engines: {node: '>= 0.6'} + dev: false + + /@mapbox/point-geometry@0.1.0: + resolution: {integrity: sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==} + dev: false + + /@mapbox/tiny-sdf@2.0.6: + resolution: {integrity: sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA==} + dev: false + + /@mapbox/unitbezier@0.0.1: + resolution: {integrity: sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==} + dev: false + + /@mapbox/vector-tile@1.3.1: + resolution: {integrity: sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==} + dependencies: + '@mapbox/point-geometry': 0.1.0 + dev: false + + /@mapbox/whoots-js@3.1.0: + resolution: {integrity: sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==} + engines: {node: '>=6.0.0'} + dev: false + + /@maplibre/maplibre-gl-style-spec@19.3.3: + resolution: {integrity: sha512-cOZZOVhDSulgK0meTsTkmNXb1ahVvmTmWmfx9gRBwc6hq98wS9JP35ESIoNq3xqEan+UN+gn8187Z6E4NKhLsw==} + hasBin: true + dependencies: + '@mapbox/jsonlint-lines-primitives': 2.0.2 + '@mapbox/unitbezier': 0.0.1 + json-stringify-pretty-compact: 3.0.0 + minimist: 1.2.8 + rw: 1.3.3 + sort-object: 3.0.3 + dev: false + + /@noble/ciphers@0.2.0: + resolution: {integrity: sha512-6YBxJDAapHSdd3bLDv6x2wRPwq4QFMUaB3HvljNBUTThDd12eSm7/3F+2lnfzx2jvM+S6Nsy0jEt9QbPqSwqRw==} + dev: true + + /@noble/curves@1.1.0: + resolution: {integrity: sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==} + dependencies: + '@noble/hashes': 1.3.1 + dev: true + + /@noble/hashes@1.3.1: + resolution: {integrity: sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==} + engines: {node: '>= 16'} + dev: true + + /@noble/hashes@1.3.2: + resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} + engines: {node: '>= 16'} + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 + dev: true + + /@polka/url@1.0.0-next.23: + resolution: {integrity: sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==} + dev: true + + /@rollup/plugin-commonjs@25.0.7(rollup@4.9.0): + resolution: {integrity: sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.68.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@4.9.0) + commondir: 1.0.1 + estree-walker: 2.0.2 + glob: 8.1.0 + is-reference: 1.2.1 + magic-string: 0.30.5 + rollup: 4.9.0 + dev: true + + /@rollup/plugin-json@6.1.0(rollup@4.9.0): + resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@4.9.0) + rollup: 4.9.0 + dev: true + + /@rollup/plugin-node-resolve@15.2.3(rollup@4.9.0): + resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.78.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@4.9.0) + '@types/resolve': 1.20.2 + deepmerge: 4.3.1 + is-builtin-module: 3.2.1 + is-module: 1.0.0 + resolve: 1.22.8 + rollup: 4.9.0 + dev: true + + /@rollup/pluginutils@5.1.0(rollup@4.9.0): + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 2.3.1 + rollup: 4.9.0 + dev: true + + /@rollup/rollup-android-arm-eabi@4.9.0: + resolution: {integrity: sha512-+1ge/xmaJpm1KVBuIH38Z94zj9fBD+hp+/5WLaHgyY8XLq1ibxk/zj6dTXaqM2cAbYKq8jYlhHd6k05If1W5xA==} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-android-arm64@4.9.0: + resolution: {integrity: sha512-im6hUEyQ7ZfoZdNvtwgEJvBWZYauC9KVKq1w58LG2Zfz6zMd8gRrbN+xCVoqA2hv/v6fm9lp5LFGJ3za8EQH3A==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-arm64@4.9.0: + resolution: {integrity: sha512-u7aTMskN6Dmg1lCT0QJ+tINRt+ntUrvVkhbPfFz4bCwRZvjItx2nJtwJnJRlKMMaQCHRjrNqHRDYvE4mBm3DlQ==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-x64@4.9.0: + resolution: {integrity: sha512-8FvEl3w2ExmpcOmX5RJD0yqXcVSOqAJJUJ29Lca29Ik+3zPS1yFimr2fr5JSZ4Z5gt8/d7WqycpgkX9nocijSw==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-gnueabihf@4.9.0: + resolution: {integrity: sha512-lHoKYaRwd4gge+IpqJHCY+8Vc3hhdJfU6ukFnnrJasEBUvVlydP8PuwndbWfGkdgSvZhHfSEw6urrlBj0TSSfg==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-gnu@4.9.0: + resolution: {integrity: sha512-JbEPfhndYeWHfOSeh4DOFvNXrj7ls9S/2omijVsao+LBPTPayT1uKcK3dHW3MwDJ7KO11t9m2cVTqXnTKpeaiw==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-musl@4.9.0: + resolution: {integrity: sha512-ahqcSXLlcV2XUBM3/f/C6cRoh7NxYA/W7Yzuv4bDU1YscTFw7ay4LmD7l6OS8EMhTNvcrWGkEettL1Bhjf+B+w==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-riscv64-gnu@4.9.0: + resolution: {integrity: sha512-uwvOYNtLw8gVtrExKhdFsYHA/kotURUmZYlinH2VcQxNCQJeJXnkmWgw2hI9Xgzhgu7J9QvWiq9TtTVwWMDa+w==} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-gnu@4.9.0: + resolution: {integrity: sha512-m6pkSwcZZD2LCFHZX/zW2aLIISyzWLU3hrLLzQKMI12+OLEzgruTovAxY5sCZJkipklaZqPy/2bEEBNjp+Y7xg==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-musl@4.9.0: + resolution: {integrity: sha512-VFAC1RDRSbU3iOF98X42KaVicAfKf0m0OvIu8dbnqhTe26Kh6Ym9JrDulz7Hbk7/9zGc41JkV02g+p3BivOdAg==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-arm64-msvc@4.9.0: + resolution: {integrity: sha512-9jPgMvTKXARz4inw6jezMLA2ihDBvgIU9Ml01hjdVpOcMKyxFBJrn83KVQINnbeqDv0+HdO1c09hgZ8N0s820Q==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-ia32-msvc@4.9.0: + resolution: {integrity: sha512-WE4pT2kTXQN2bAv40Uog0AsV7/s9nT9HBWXAou8+++MBCnY51QS02KYtm6dQxxosKi1VIz/wZIrTQO5UP2EW+Q==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-x64-msvc@4.9.0: + resolution: {integrity: sha512-aPP5Q5AqNGuT0tnuEkK/g4mnt3ZhheiXrDIiSVIHN9mcN21OyXDVbEMqmXPE7e2OplNLDkcvV+ZoGJa2ZImFgw==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@scure/base@1.1.1: + resolution: {integrity: sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==} + + /@scure/bip32@1.3.1: + resolution: {integrity: sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==} + dependencies: + '@noble/curves': 1.1.0 + '@noble/hashes': 1.3.1 + '@scure/base': 1.1.1 + dev: true + + /@scure/bip39@1.2.1: + resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==} + dependencies: + '@noble/hashes': 1.3.2 + '@scure/base': 1.1.1 + + /@sveltejs/adapter-node@2.0.0(@sveltejs/kit@2.0.0): + resolution: {integrity: sha512-js/FBTnwDhr111wCY7b+B30LD8uTUgegRVGG2q6xwzgU8qmj+8/V5E6f/kNmDbyBJH45V6tr8RTKsLvpNScK4g==} + peerDependencies: + '@sveltejs/kit': ^2.0.0 + dependencies: + '@rollup/plugin-commonjs': 25.0.7(rollup@4.9.0) + '@rollup/plugin-json': 6.1.0(rollup@4.9.0) + '@rollup/plugin-node-resolve': 15.2.3(rollup@4.9.0) + '@sveltejs/kit': 2.0.0(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.10) + rollup: 4.9.0 + dev: true + + /@sveltejs/kit@2.0.0(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.10): + resolution: {integrity: sha512-/GFxvit+q7PztRbgGTFXhVB6jvb0fZSeWuz5f4siQ2r/5BVhxYh7++Bw3/ZUjiOuyoZFiNBmOPcRNQbkzEce0g==} + engines: {node: '>=18.13'} + hasBin: true + requiresBuild: true + peerDependencies: + '@sveltejs/vite-plugin-svelte': ^3.0.0 + svelte: ^4.0.0 || ^5.0.0-next.0 + vite: ^5.0.3 || 4 + dependencies: + '@sveltejs/vite-plugin-svelte': 3.0.1(svelte@4.2.8)(vite@5.0.10) + '@types/cookie': 0.6.0 + cookie: 0.6.0 + devalue: 4.3.2 + esm-env: 1.0.0 + kleur: 4.1.5 + magic-string: 0.30.5 + mrmime: 1.0.1 + sade: 1.8.1 + set-cookie-parser: 2.6.0 + sirv: 2.0.3 + svelte: 4.2.8 + tiny-glob: 0.2.9 + vite: 5.0.10 + dev: true + + /@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.10): + resolution: {integrity: sha512-gjr9ZFg1BSlIpfZ4PRewigrvYmHWbDrq2uvvPB1AmTWKuM+dI1JXQSUu2pIrYLb/QncyiIGkFDFKTwJ0XqQZZg==} + engines: {node: ^18.0.0 || >=20} + peerDependencies: + '@sveltejs/vite-plugin-svelte': ^3.0.0 + svelte: ^4.0.0 || ^5.0.0-next.0 + vite: ^5.0.0 || 4 + dependencies: + '@sveltejs/vite-plugin-svelte': 3.0.1(svelte@4.2.8)(vite@5.0.10) + debug: 4.3.4 + svelte: 4.2.8 + vite: 5.0.10 + transitivePeerDependencies: + - supports-color + dev: true + + /@sveltejs/vite-plugin-svelte@3.0.1(svelte@4.2.8)(vite@5.0.10): + resolution: {integrity: sha512-CGURX6Ps+TkOovK6xV+Y2rn8JKa8ZPUHPZ/NKgCxAmgBrXReavzFl8aOSCj3kQ1xqT7yGJj53hjcV/gqwDAaWA==} + engines: {node: ^18.0.0 || >=20} + peerDependencies: + svelte: ^4.0.0 || ^5.0.0-next.0 + vite: ^5.0.0 || 4 + dependencies: + '@sveltejs/vite-plugin-svelte-inspector': 2.0.0(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.10) + debug: 4.3.4 + deepmerge: 4.3.1 + kleur: 4.1.5 + magic-string: 0.30.5 + svelte: 4.2.8 + svelte-hmr: 0.15.3(svelte@4.2.8) + vite: 5.0.10 + vitefu: 0.2.5(vite@5.0.10) + transitivePeerDependencies: + - supports-color + dev: true + + /@sveltekit-i18n/base@1.2.1(svelte@4.2.8): + resolution: {integrity: sha512-F8gqG2+KAOeT0o2wYlUrW3TRCX7zaD7rBy/1CEVNw0irfw9TgFf/ODmhubkHHT3+6Zk+SMz8RNgeuffBfAMbJw==} + peerDependencies: + svelte: ^3.x + dependencies: + svelte: 4.2.8 + optionalDependencies: + '@sveltekit-i18n/parser-default': 1.0.3 + dev: true + + /@sveltekit-i18n/parser-default@1.0.3: + resolution: {integrity: sha512-HheveklTjp3hxpYQhoHfyA6B4bQaUeSV5MQf2usIv/58UF2jY/YqhCAWj9bDBjufbuZc5pSz4BXvdX3WVT+viA==} + dev: true + + /@tailwindcss/line-clamp@0.4.2(tailwindcss@3.2.4): + resolution: {integrity: sha512-HFzAQuqYCjyy/SX9sLGB1lroPzmcnWv1FHkIpmypte10hptf4oPUfucryMKovZh2u0uiS9U5Ty3GghWfEJGwVw==} + peerDependencies: + tailwindcss: '>=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1' + dependencies: + tailwindcss: 3.2.4(postcss@8.4.20) + dev: true + + /@types/cookie@0.6.0: + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + dev: true + + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + dev: true + + /@types/geojson@7946.0.13: + resolution: {integrity: sha512-bmrNrgKMOhM3WsafmbGmC+6dsF2Z308vLFsQ3a/bT8X8Sv5clVYpPars/UPq+sAaJP+5OoLAYgwbkS5QEJdLUQ==} + dev: false + + /@types/mapbox__point-geometry@0.1.4: + resolution: {integrity: sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==} + dev: false + + /@types/mapbox__vector-tile@1.3.4: + resolution: {integrity: sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg==} + dependencies: + '@types/geojson': 7946.0.13 + '@types/mapbox__point-geometry': 0.1.4 + '@types/pbf': 3.0.5 + dev: false + + /@types/offscreencanvas@2019.7.3: + resolution: {integrity: sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==} + dev: true + + /@types/pbf@3.0.5: + resolution: {integrity: sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==} + dev: false + + /@types/pug@2.0.10: + resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==} + dev: true + + /@types/resolve@1.20.2: + resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + dev: true + + /@types/supercluster@7.1.3: + resolution: {integrity: sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==} + dependencies: + '@types/geojson': 7946.0.13 + dev: false + + /@zerodevx/svelte-toast@0.7.2: + resolution: {integrity: sha512-vWiY6IqsstcOoQ8PFBuFuxgPkj1JFAGhUF9gC7wLx7c5A9SSfdtxWs/39ekGSIeyJK0yqWhTcmzGrCEWSELzDw==} + dev: true + + /acorn-node@1.8.2: + resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} + dependencies: + acorn: 7.4.1 + acorn-walk: 7.2.0 + xtend: 4.0.2 + dev: true + + /acorn-walk@7.2.0: + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} + dev: true + + /acorn@7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /acorn@8.11.2: + resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: true + + /aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + dependencies: + dequal: 2.0.3 + dev: true + + /arr-union@3.1.0: + resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} + engines: {node: '>=0.10.0'} + dev: false + + /assign-symbols@1.0.0: + resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} + engines: {node: '>=0.10.0'} + dev: false + + /autoprefixer@10.4.13(postcss@8.4.20): + resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.22.2 + caniuse-lite: 1.0.30001565 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.20 + postcss-value-parser: 4.2.0 + dev: true + + /axobject-query@3.2.1: + resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} + dependencies: + dequal: 2.0.3 + dev: true + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /base58-js@1.0.5: + resolution: {integrity: sha512-LkkAPP8Zu+c0SVNRTRVDyMfKVORThX+rCViget00xdgLRrKkClCTz1T7cIrpr69ShwV5XJuuoZvMvJ43yURwkA==} + engines: {node: '>= 8'} + dev: true + + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true + + /bech32@2.0.0: + resolution: {integrity: sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==} + dev: true + + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /bip21@2.0.3: + resolution: {integrity: sha512-L4ODmASLjsHYAU+TG7xffkYNMvHzAe4mkVX7mcvOUyKAr/MDBPrsRgqUhE8EmKdeEKHk5SYpX1Aexzvm/6WdbQ==} + dependencies: + qs: 6.11.2 + dev: true + + /bitcoin-address-validation@2.2.1: + resolution: {integrity: sha512-f6LXNpvRKlTbHWb37N9tHoAbYGbshzM8FPWvCtloh++hxZ0/dmkokvKNVLz6HkG82zVwo8w6Sq4JmfO2timzyg==} + dependencies: + base58-js: 1.0.5 + bech32: 2.0.0 + sha256-uint8array: 0.10.7 + dev: true + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: true + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /browserslist@4.22.2: + resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001565 + electron-to-chromium: 1.4.601 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.22.2) + dev: true + + /buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + dev: true + + /buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + + /builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + dev: true + + /bytewise-core@1.2.3: + resolution: {integrity: sha512-nZD//kc78OOxeYtRlVk8/zXqTB4gf/nlguL1ggWA8FuchMyOxcyHR4QPQZMUmA7czC+YnaBrPUCubqAWe50DaA==} + dependencies: + typewise-core: 1.2.0 + dev: false + + /bytewise@1.1.0: + resolution: {integrity: sha512-rHuuseJ9iQ0na6UDhnrRVDh8YnWVlU6xM3VH6q/+yHDeUH2zIhUzP+2/h3LIrhLDBtTqzWpE3p3tP/boefskKQ==} + dependencies: + bytewise-core: 1.2.3 + typewise: 1.0.3 + dev: false + + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + dependencies: + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + set-function-length: 1.1.1 + dev: true + + /camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + dev: true + + /caniuse-lite@1.0.30001565: + resolution: {integrity: sha512-xrE//a3O7TP0vaJ8ikzkD2c2NgcVUvsEe2IvFTntV4Yd1Z9FVzh+gW+enX96L0psrbaFMcVcH2l90xNuGDWc8w==} + dev: true + + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /code-red@1.0.4: + resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + '@types/estree': 1.0.5 + acorn: 8.11.2 + estree-walker: 3.0.3 + periscopic: 3.1.0 + dev: true + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + dev: true + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + + /cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + engines: {node: '>= 0.6'} + dev: true + + /css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.0.2 + dev: true + + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /date-fns@2.29.3: + resolution: {integrity: sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==} + engines: {node: '>=0.11'} + dev: true + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: true + + /define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + dev: true + + /defined@1.0.1: + resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} + dev: true + + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + dev: true + + /detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + dev: true + + /detective@5.2.1: + resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} + engines: {node: '>=0.8.0'} + hasBin: true + dependencies: + acorn-node: 1.8.2 + defined: 1.0.1 + minimist: 1.2.8 + dev: true + + /devalue@4.3.2: + resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==} + dev: true + + /didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dev: true + + /dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dev: true + + /earcut@2.2.4: + resolution: {integrity: sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==} + dev: false + + /electron-to-chromium@1.4.601: + resolution: {integrity: sha512-SpwUMDWe9tQu8JX5QCO1+p/hChAi9AE9UpoC3rcHVc+gdCGlbT3SGb5I1klgb952HRIyvt9wZhSz9bNBYz9swA==} + dev: true + + /es6-promise@3.3.1: + resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} + dev: true + + /esbuild@0.19.9: + resolution: {integrity: sha512-U9CHtKSy+EpPsEBa+/A2gMs/h3ylBC0H0KSqIg7tpztHerLi6nrrcoUJAkNCEPumx8yJ+Byic4BVwHgRbN0TBg==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.19.9 + '@esbuild/android-arm64': 0.19.9 + '@esbuild/android-x64': 0.19.9 + '@esbuild/darwin-arm64': 0.19.9 + '@esbuild/darwin-x64': 0.19.9 + '@esbuild/freebsd-arm64': 0.19.9 + '@esbuild/freebsd-x64': 0.19.9 + '@esbuild/linux-arm': 0.19.9 + '@esbuild/linux-arm64': 0.19.9 + '@esbuild/linux-ia32': 0.19.9 + '@esbuild/linux-loong64': 0.19.9 + '@esbuild/linux-mips64el': 0.19.9 + '@esbuild/linux-ppc64': 0.19.9 + '@esbuild/linux-riscv64': 0.19.9 + '@esbuild/linux-s390x': 0.19.9 + '@esbuild/linux-x64': 0.19.9 + '@esbuild/netbsd-x64': 0.19.9 + '@esbuild/openbsd-x64': 0.19.9 + '@esbuild/sunos-x64': 0.19.9 + '@esbuild/win32-arm64': 0.19.9 + '@esbuild/win32-ia32': 0.19.9 + '@esbuild/win32-x64': 0.19.9 + dev: true + + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /esm-env@1.0.0: + resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} + dev: true + + /estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: true + + /estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + dependencies: + '@types/estree': 1.0.5 + dev: true + + /extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + dependencies: + is-extendable: 0.1.1 + dev: false + + /extend-shallow@3.0.2: + resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} + engines: {node: '>=0.10.0'} + dependencies: + assign-symbols: 1.0.0 + is-extendable: 1.0.1 + dev: false + + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + dependencies: + reusify: 1.0.4 + dev: true + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + dev: true + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true + + /geojson-vt@3.2.1: + resolution: {integrity: sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==} + dev: false + + /get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + dependencies: + function-bind: 1.1.2 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + dev: true + + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: false + + /get-value@2.0.6: + resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} + engines: {node: '>=0.10.0'} + dev: false + + /gl-matrix@3.4.3: + resolution: {integrity: sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==} + dev: false + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + dev: true + + /global-prefix@3.0.0: + resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} + engines: {node: '>=6'} + dependencies: + ini: 1.3.8 + kind-of: 6.0.3 + which: 1.3.1 + dev: false + + /globalyzer@0.1.0: + resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} + + /globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.2 + dev: true + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: true + + /has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + dependencies: + get-intrinsic: 1.2.2 + dev: true + + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + dev: true + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: true + + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + + /html5-qrcode@2.3.8: + resolution: {integrity: sha512-jsr4vafJhwoLVEDW3n1KvPnCCXWaQfRng0/EEYk1vNcQGcG/htAdhJX0be8YyqMoSz7+hZvOZSTAepsabiuhiQ==} + dev: true + + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + dev: false + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + dependencies: + builtin-modules: 3.3.0 + dev: true + + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.0 + dev: true + + /is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + dev: false + + /is-extendable@1.0.1: + resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} + engines: {node: '>=0.10.0'} + dependencies: + is-plain-object: 2.0.4 + dev: false + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: false + + /is-reference@1.2.1: + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + dependencies: + '@types/estree': 1.0.5 + dev: true + + /is-reference@3.0.2: + resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} + dependencies: + '@types/estree': 1.0.5 + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: false + + /isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + dev: false + + /json-stringify-pretty-compact@3.0.0: + resolution: {integrity: sha512-Rc2suX5meI0S3bfdZuA7JMFBGkJ875ApfVyq2WHELjBiiG22My/l7/8zPpH/CfFVQHuVLd8NLR0nv6vi0BYYKA==} + dev: false + + /kdbush@4.0.2: + resolution: {integrity: sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==} + dev: false + + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: false + + /kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + dev: true + + /leaflet-tooltip-layout@0.1.2(leaflet@1.9.3): + resolution: {integrity: sha512-bc3hhaJQ2vldHE5jg4lnq0D1C83XqDUA2eN/fKF5P9CzBjAn9JBnKjnKJsxWG0TScRt4L6KoRKlYlsKksuKrFA==} + peerDependencies: + leaflet: ^1.3.4 + dependencies: + leaflet: 1.9.3 + dev: false + + /leaflet.markercluster@1.5.3(leaflet@1.9.3): + resolution: {integrity: sha512-vPTw/Bndq7eQHjLBVlWpnGeLa3t+3zGiuM7fJwCkiMFq+nmRuG3RI3f7f4N4TDX7T4NpbAXpR2+NTRSEGfCSeA==} + peerDependencies: + leaflet: ^1.3.1 + dependencies: + leaflet: 1.9.3 + dev: true + + /leaflet@1.9.3: + resolution: {integrity: sha512-iB2cR9vAkDOu5l3HAay2obcUHZ7xwUBBjph8+PGtmW/2lYhbLizWtG7nTeYht36WfOslixQF9D/uSIzhZgGMfQ==} + + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + dev: true + + /locate-character@3.0.0: + resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} + dev: true + + /magic-string@0.27.0: + resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /magic-string@0.30.5: + resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /maplibre-gl@3.3.1: + resolution: {integrity: sha512-SfRq9bT68GytDzCOG0IoTGg2rASbgdYunW/6xhnp55QuLmwG1M/YOlXxqHaphwia7kZbMvBOocvY0fp5yfTjZA==} + engines: {node: '>=16.14.0', npm: '>=8.1.0'} + dependencies: + '@mapbox/geojson-rewind': 0.5.2 + '@mapbox/jsonlint-lines-primitives': 2.0.2 + '@mapbox/point-geometry': 0.1.0 + '@mapbox/tiny-sdf': 2.0.6 + '@mapbox/unitbezier': 0.0.1 + '@mapbox/vector-tile': 1.3.1 + '@mapbox/whoots-js': 3.1.0 + '@maplibre/maplibre-gl-style-spec': 19.3.3 + '@types/geojson': 7946.0.13 + '@types/mapbox__point-geometry': 0.1.4 + '@types/mapbox__vector-tile': 1.3.4 + '@types/pbf': 3.0.5 + '@types/supercluster': 7.1.3 + earcut: 2.2.4 + geojson-vt: 3.2.1 + gl-matrix: 3.4.3 + global-prefix: 3.0.0 + kdbush: 4.0.2 + murmurhash-js: 1.0.0 + pbf: 3.2.1 + potpack: 2.0.0 + quickselect: 2.0.0 + supercluster: 8.0.1 + tinyqueue: 2.0.3 + vt-pbf: 3.1.3 + dev: false + + /mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + dev: true + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + + /min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + dev: true + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + /mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + + /mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + dev: true + + /mrmime@1.0.1: + resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} + engines: {node: '>=10'} + dev: true + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /murmurhash-js@1.0.0: + resolution: {integrity: sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==} + dev: false + + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + dev: true + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: true + + /nostr-tools@1.14.2: + resolution: {integrity: sha512-QEe8+tMDW0632eNDcQ+EG1edmsCXLV4WPiWLDcdT3uoE+GM15pVcy18sKwbN7SmgO4GKFEqQ49k45eANC6++SQ==} + dependencies: + '@noble/ciphers': 0.2.0 + '@noble/curves': 1.1.0 + '@noble/hashes': 1.3.1 + '@scure/base': 1.1.1 + '@scure/bip32': 1.3.1 + '@scure/bip39': 1.2.1 + dev: true + + /object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + dev: true + + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + dev: true + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /pbf@3.2.1: + resolution: {integrity: sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==} + hasBin: true + dependencies: + ieee754: 1.2.1 + resolve-protobuf-schema: 2.1.0 + dev: false + + /periscopic@3.1.0: + resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} + dependencies: + '@types/estree': 1.0.5 + estree-walker: 3.0.3 + is-reference: 3.0.2 + dev: true + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: true + + /postcss-import@14.1.0(postcss@8.4.20): + resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} + engines: {node: '>=10.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.20 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + dev: true + + /postcss-js@4.0.1(postcss@8.4.20): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.20 + dev: true + + /postcss-load-config@3.1.4(postcss@8.4.20): + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.1.0 + postcss: 8.4.20 + yaml: 1.10.2 + dev: true + + /postcss-nested@6.0.0(postcss@8.4.20): + resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.20 + postcss-selector-parser: 6.0.13 + dev: true + + /postcss-selector-parser@6.0.13: + resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: true + + /postcss@8.4.20: + resolution: {integrity: sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + + /postcss@8.4.32: + resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + + /potpack@2.0.0: + resolution: {integrity: sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw==} + dev: false + + /prettier-plugin-svelte@2.10.1(prettier@2.0.0)(svelte@4.2.8): + resolution: {integrity: sha512-Wlq7Z5v2ueCubWo0TZzKc9XHcm7TDxqcuzRuGd0gcENfzfT4JZ9yDlCbEgxWgiPmLHkBjfOtpAWkcT28MCDpUQ==} + peerDependencies: + prettier: ^1.16.4 || ^2.0.0 + svelte: ^3.2.0 || ^4.0.0-next.0 + dependencies: + prettier: 2.0.0 + svelte: 4.2.8 + dev: true + + /prettier@2.0.0: + resolution: {integrity: sha512-vI55PC+GFLOVtpwr2di1mYhJF36v+kztJov8sx3AmqbfdA+2Dhozxb+3e1hTgoV9lyhnVJFF3Z8GCVeMBOS1bA==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + + /protocol-buffers-schema@3.6.0: + resolution: {integrity: sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==} + dev: false + + /qr-code-styling@1.6.0-rc.1: + resolution: {integrity: sha512-ModRIiW6oUnsP18QzrRYZSc/CFKFKIdj7pUs57AEVH20ajlglRpN3HukjHk0UbNMTlKGuaYl7Gt6/O5Gg2NU2Q==} + dependencies: + qrcode-generator: 1.4.4 + dev: true + + /qr-scanner@1.4.2: + resolution: {integrity: sha512-kV1yQUe2FENvn59tMZW6mOVfpq9mGxGf8l6+EGaXUOd4RBOLg7tRC83OrirM5AtDvZRpdjdlXURsHreAOSPOUw==} + dependencies: + '@types/offscreencanvas': 2019.7.3 + dev: true + + /qrcode-base64@1.0.1: + resolution: {integrity: sha512-B0BDmnRSvbj47Nq/+IeZjj22afNrf4rwIloNrSXN6OwnkoO+Q0hsUa53gCEfqNQjx+OcytF3azvQhi6wV2Tk6g==} + dev: true + + /qrcode-generator@1.4.4: + resolution: {integrity: sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==} + dev: true + + /qs@6.11.2: + resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + dev: true + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + dev: true + + /quickselect@2.0.0: + resolution: {integrity: sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==} + dev: false + + /read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + dependencies: + pify: 2.3.0 + dev: true + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /resolve-protobuf-schema@2.1.0: + resolution: {integrity: sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==} + dependencies: + protocol-buffers-schema: 3.6.0 + dev: false + + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rimraf@2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /rollup@2.79.1: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /rollup@4.9.0: + resolution: {integrity: sha512-bUHW/9N21z64gw8s6tP4c88P382Bq/L5uZDowHlHx6s/QWpjJXivIAbEw6LZthgSvlEizZBfLC4OAvWe7aoF7A==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.9.0 + '@rollup/rollup-android-arm64': 4.9.0 + '@rollup/rollup-darwin-arm64': 4.9.0 + '@rollup/rollup-darwin-x64': 4.9.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.9.0 + '@rollup/rollup-linux-arm64-gnu': 4.9.0 + '@rollup/rollup-linux-arm64-musl': 4.9.0 + '@rollup/rollup-linux-riscv64-gnu': 4.9.0 + '@rollup/rollup-linux-x64-gnu': 4.9.0 + '@rollup/rollup-linux-x64-musl': 4.9.0 + '@rollup/rollup-win32-arm64-msvc': 4.9.0 + '@rollup/rollup-win32-ia32-msvc': 4.9.0 + '@rollup/rollup-win32-x64-msvc': 4.9.0 + fsevents: 2.3.3 + dev: true + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /rw@1.3.3: + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} + dev: false + + /sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + dependencies: + mri: 1.2.0 + dev: true + + /sander@0.5.1: + resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==} + dependencies: + es6-promise: 3.3.1 + graceful-fs: 4.2.11 + mkdirp: 0.5.6 + rimraf: 2.7.1 + dev: true + + /screenfull@6.0.2: + resolution: {integrity: sha512-AQdy8s4WhNvUZ6P8F6PB21tSPIYKniic+Ogx0AacBMjKP1GUHN2E9URxQHtCusiwxudnCKkdy4GrHXPPJSkCCw==} + engines: {node: ^14.13.1 || >=16.0.0} + dev: true + + /set-cookie-parser@2.6.0: + resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} + dev: true + + /set-function-length@1.1.1: + resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + dev: true + + /set-value@2.0.1: + resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 2.0.1 + is-extendable: 0.1.1 + is-plain-object: 2.0.4 + split-string: 3.1.0 + dev: false + + /sha256-uint8array@0.10.7: + resolution: {integrity: sha512-1Q6JQU4tX9NqsDGodej6pkrUVQVNapLZnvkwIhddH/JqzBZF1fSaxSWNY6sziXBE8aEa2twtGkXUrwzGeZCMpQ==} + dev: true + + /side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + object-inspect: 1.13.1 + dev: true + + /sirv@2.0.3: + resolution: {integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==} + engines: {node: '>= 10'} + dependencies: + '@polka/url': 1.0.0-next.23 + mrmime: 1.0.1 + totalist: 3.0.1 + dev: true + + /sorcery@0.11.0: + resolution: {integrity: sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==} + hasBin: true + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + buffer-crc32: 0.2.13 + minimist: 1.2.8 + sander: 0.5.1 + dev: true + + /sort-asc@0.2.0: + resolution: {integrity: sha512-umMGhjPeHAI6YjABoSTrFp2zaBtXBej1a0yKkuMUyjjqu6FJsTF+JYwCswWDg+zJfk/5npWUUbd33HH/WLzpaA==} + engines: {node: '>=0.10.0'} + dev: false + + /sort-desc@0.2.0: + resolution: {integrity: sha512-NqZqyvL4VPW+RAxxXnB8gvE1kyikh8+pR+T+CXLksVRN9eiQqkQlPwqWYU0mF9Jm7UnctShlxLyAt1CaBOTL1w==} + engines: {node: '>=0.10.0'} + dev: false + + /sort-object@3.0.3: + resolution: {integrity: sha512-nK7WOY8jik6zaG9CRwZTaD5O7ETWDLZYMM12pqY8htll+7dYeqGfEUPcUBHOpSJg2vJOrvFIY2Dl5cX2ih1hAQ==} + engines: {node: '>=0.10.0'} + dependencies: + bytewise: 1.1.0 + get-value: 2.0.6 + is-extendable: 0.1.1 + sort-asc: 0.2.0 + sort-desc: 0.2.0 + union-value: 1.0.1 + dev: false + + /source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: true + + /split-string@3.1.0: + resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 3.0.2 + dev: false + + /strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + dependencies: + min-indent: 1.0.1 + dev: true + + /supercluster@8.0.1: + resolution: {integrity: sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==} + dependencies: + kdbush: 4.0.2 + dev: false + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /svelte-adapter-bun@0.5.1: + resolution: {integrity: sha512-eLbkKuoCaZPzVN20dg/oZOUybO16oEQCOQuzAI2jVLU90VbJ1P099bAlA+7H4KPGI2r2sdkfD1MppGAbk7PdMw==} + dependencies: + tiny-glob: 0.2.9 + dev: false + + /svelte-hmr@0.15.3(svelte@4.2.8): + resolution: {integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==} + engines: {node: ^12.20 || ^14.13.1 || >= 16} + peerDependencies: + svelte: ^3.19.0 || ^4.0.0 + dependencies: + svelte: 4.2.8 + dev: true + + /svelte-outclick@3.3.3(svelte@4.2.8): + resolution: {integrity: sha512-1XyaNhhDfH0C9GR4NreTc9OTgKcnQVoT7iVLvdbgZ/Dur/Bq94Pl5RBaJ/fu2qlEZk9ZIhODpuWiNNUjyhjVCg==} + peerDependencies: + svelte: 3.x + dependencies: + svelte: 4.2.8 + dev: true + + /svelte-preprocess@5.1.2(postcss@8.4.20)(svelte@4.2.8): + resolution: {integrity: sha512-XF0aliMAcYnP4hLETvB6HRAMnaL09ASYT1Z2I1Gwu0nz6xbdg/dSgAEthtFZJA4AKrNhFDFdmUDO+H9d/6xg5g==} + engines: {node: '>= 14.10.0'} + requiresBuild: true + peerDependencies: + '@babel/core': ^7.10.2 + coffeescript: ^2.5.1 + less: ^3.11.3 || ^4.0.0 + postcss: ^7 || ^8 + postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 + pug: ^3.0.0 + sass: ^1.26.8 + stylus: ^0.55.0 + sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0 + svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0 + typescript: '>=3.9.5 || ^4.0.0 || ^5.0.0' + peerDependenciesMeta: + '@babel/core': + optional: true + coffeescript: + optional: true + less: + optional: true + postcss: + optional: true + postcss-load-config: + optional: true + pug: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + typescript: + optional: true + dependencies: + '@types/pug': 2.0.10 + detect-indent: 6.1.0 + magic-string: 0.27.0 + postcss: 8.4.20 + sorcery: 0.11.0 + strip-indent: 3.0.0 + svelte: 4.2.8 + dev: true + + /svelte-virtual-scroll-list@1.1.0(svelte@4.2.8): + resolution: {integrity: sha512-GFaBhD9izv77xgJTyFMD1MP+ElGMUGMC9CDCM+uX9hkZIYipNS6u8oDMYDGwCXUw7QGEihU4yLmBvBSeBp78uw==} + peerDependencies: + svelte: ^3.0.0 + dependencies: + svelte: 4.2.8 + dev: true + + /svelte@4.2.8: + resolution: {integrity: sha512-hU6dh1MPl8gh6klQZwK/n73GiAHiR95IkFsesLPbMeEZi36ydaXL/ZAb4g9sayT0MXzpxyZjR28yderJHxcmYA==} + engines: {node: '>=16'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.20 + acorn: 8.11.2 + aria-query: 5.3.0 + axobject-query: 3.2.1 + code-red: 1.0.4 + css-tree: 2.3.1 + estree-walker: 3.0.3 + is-reference: 3.0.2 + locate-character: 3.0.0 + magic-string: 0.30.5 + periscopic: 3.1.0 + dev: true + + /sveltekit-i18n@2.2.2(svelte@4.2.8): + resolution: {integrity: sha512-6eygICleGCSL7elY7A3trF8XUhV+mlW56ZSoD0UUKXlw+Y6u0MTTHDq48u1LyY73SfnlbPHXgTarhTjZ0BvUKA==} + peerDependencies: + svelte: ^3.x + dependencies: + '@sveltekit-i18n/base': 1.2.1(svelte@4.2.8) + '@sveltekit-i18n/parser-default': 1.0.3 + svelte: 4.2.8 + dev: true + + /tailwind-scrollbar@2.1.0(tailwindcss@3.2.4): + resolution: {integrity: sha512-zpvY5mDs0130YzYjZKBiDaw32rygxk5RyJ4KmeHjGnwkvbjm/PszON1m4Bbt2DkMRIXlXsfNevykAESgURN4KA==} + engines: {node: '>=12.13.0'} + peerDependencies: + tailwindcss: 3.x + dependencies: + tailwindcss: 3.2.4(postcss@8.4.20) + dev: true + + /tailwindcss@3.2.4(postcss@8.4.20): + resolution: {integrity: sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==} + engines: {node: '>=12.13.0'} + hasBin: true + peerDependencies: + postcss: ^8.0.9 + dependencies: + arg: 5.0.2 + chokidar: 3.5.3 + color-name: 1.1.4 + detective: 5.2.1 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.2 + glob-parent: 6.0.2 + is-glob: 4.0.3 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.20 + postcss-import: 14.1.0(postcss@8.4.20) + postcss-js: 4.0.1(postcss@8.4.20) + postcss-load-config: 3.1.4(postcss@8.4.20) + postcss-nested: 6.0.0(postcss@8.4.20) + postcss-selector-parser: 6.0.13 + postcss-value-parser: 4.2.0 + quick-lru: 5.1.1 + resolve: 1.22.8 + transitivePeerDependencies: + - ts-node + dev: true + + /tiny-glob@0.2.9: + resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} + dependencies: + globalyzer: 0.1.0 + globrex: 0.1.2 + + /tinyqueue@2.0.3: + resolution: {integrity: sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==} + dev: false + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + dev: true + + /typewise-core@1.2.0: + resolution: {integrity: sha512-2SCC/WLzj2SbUwzFOzqMCkz5amXLlxtJqDKTICqg30x+2DZxcfZN2MvQZmGfXWKNWaKK9pBPsvkcwv8bF/gxKg==} + dev: false + + /typewise@1.0.3: + resolution: {integrity: sha512-aXofE06xGhaQSPzt8hlTY+/YWQhm9P0jYUp1f2XtmW/3Bk0qzXcyFWAtPoo2uTGQj1ZwbDuSyuxicq+aDo8lCQ==} + dependencies: + typewise-core: 1.2.0 + dev: false + + /uint8array-extras@0.5.0: + resolution: {integrity: sha512-CKAKa+/rjCblsuGrcmIJLluHcZMYKcMwgdhAZZEnSplFFGCuGKF6e2L+CeVXK0zX5rYyerrqG2dnHIANm3i9qA==} + engines: {node: '>=18'} + dev: false + + /union-value@1.0.1: + resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-union: 3.1.0 + get-value: 2.0.6 + is-extendable: 0.1.1 + set-value: 2.0.1 + dev: false + + /unique-names-generator@4.7.1: + resolution: {integrity: sha512-lMx9dX+KRmG8sq6gulYYpKWZc9RlGsgBR6aoO8Qsm3qvkSJ+3rAymr+TnV8EDMrIrwuFJ4kruzMWM/OpYzPoow==} + engines: {node: '>=8'} + dev: false + + /update-browserslist-db@1.0.13(browserslist@4.22.2): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.22.2 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true + + /uuid@9.0.0: + resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} + hasBin: true + dev: true + + /vite@5.0.10: + resolution: {integrity: sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.19.9 + postcss: 8.4.32 + rollup: 4.9.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /vitefu@0.2.5(vite@5.0.10): + resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || 4 + peerDependenciesMeta: + vite: + optional: true + dependencies: + vite: 5.0.10 + dev: true + + /vt-pbf@3.1.3: + resolution: {integrity: sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==} + dependencies: + '@mapbox/point-geometry': 0.1.0 + '@mapbox/vector-tile': 1.3.1 + pbf: 3.2.1 + dev: false + + /which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: false + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true + + /xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: true + + /yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + dev: true diff --git a/src/lib/invoice.js b/src/lib/invoice.js index 87707c89..e8164408 100644 --- a/src/lib/invoice.js +++ b/src/lib/invoice.js @@ -25,13 +25,13 @@ export default async ({ cookies, request, url }) => { if (request_id) { if (url.pathname.endsWith("tip")) { - throw redirect(307, `/send/invoice/${id}`); + redirect(307, `/send/invoice/${id}`); } - throw redirect(307, `/${user.username}/request/${request_id}`); + redirect(307, `/${user.username}/request/${request_id}`); } if (invoice.prompt) - throw redirect(307, `/${user.username}/invoice/${id}/tip`); - else throw redirect(307, `/${user.username}/invoice/${id}`); + redirect(307, `/${user.username}/invoice/${id}/tip`); + else redirect(307, `/${user.username}/invoice/${id}`); }; diff --git a/src/routes/(app)/+layout.server.js b/src/routes/(app)/+layout.server.js index 67250769..50d51584 100644 --- a/src/routes/(app)/+layout.server.js +++ b/src/routes/(app)/+layout.server.js @@ -16,7 +16,7 @@ export async function load({ cookies, request, url, params }) { } if (user?.needsMigration) { - throw redirect(307, `/migrate`); + redirect(307, `/migrate`); } if ( @@ -24,18 +24,18 @@ export async function load({ cookies, request, url, params }) { ["/login", "/register"].includes(pathname) && request.method === "GET" ) { - throw redirect(307, `/${user.username}`); + redirect(307, `/${user.username}`); } if ( protectedRoutes.find((p) => pathname.match(p)) && (!user || user.username !== params.username) ) { - throw redirect(307, "/login"); + redirect(307, "/login"); } if (user && !user.pubkey && !pathname.includes("generate")) { - throw redirect(303, `/${user.username}/generate`); + redirect(303, `/${user.username}/generate`); } try { diff --git a/src/routes/(app)/[username]/(profile)/event/[id]/+page.server.js b/src/routes/(app)/[username]/(profile)/event/[id]/+page.server.js index ec4da865..24f2b611 100644 --- a/src/routes/(app)/[username]/(profile)/event/[id]/+page.server.js +++ b/src/routes/(app)/[username]/(profile)/event/[id]/+page.server.js @@ -4,9 +4,9 @@ import { error } from "@sveltejs/kit"; export async function load({ params: { id } }) { try { let event = await get(`/event/${id}`); - if (!event) throw error(500, "Event not found"); + if (!event) error(500, "Event not found"); return { event }; } catch (e) { - throw error(500, e.message); + error(500, e.message); } } diff --git a/src/routes/(app)/[username]/(profile)/request/+page.server.js b/src/routes/(app)/[username]/(profile)/request/+page.server.js index 754c5805..f22dcbb7 100644 --- a/src/routes/(app)/[username]/(profile)/request/+page.server.js +++ b/src/routes/(app)/[username]/(profile)/request/+page.server.js @@ -5,7 +5,7 @@ export const actions = { create: async ({ cookies, params, request, url }) => { let form = await fd(request); let { id, requester } = await post("/requests", form, auth(cookies)); - throw redirect(307, `/${params.username}/request/${id}`); + redirect(307, `/${params.username}/request/${id}`); }, delete: async ({ cookies, request }) => { diff --git a/src/routes/(app)/[username]/+layout.server.js b/src/routes/(app)/[username]/+layout.server.js index 3b25b3b5..11e6d45c 100644 --- a/src/routes/(app)/[username]/+layout.server.js +++ b/src/routes/(app)/[username]/+layout.server.js @@ -13,6 +13,6 @@ export let load = async ({ cookies, depends, params: { username } }) => { return { subject }; } catch (e) { - throw error(500, "Unable to retrieve user account data"); + error(500, "Unable to retrieve user account data"); } }; diff --git a/src/routes/(app)/[username]/address/+page.server.js b/src/routes/(app)/[username]/address/+page.server.js index 1a782f9d..f8e271f9 100644 --- a/src/routes/(app)/[username]/address/+page.server.js +++ b/src/routes/(app)/[username]/address/+page.server.js @@ -6,5 +6,5 @@ export async function load({ cookies, params, parent }) { let rates = await get("/rates"); let invoice = { type: "bitcoin" }; let { hash } = await post(`/invoice`, { invoice, user }, auth(cookies)); - throw redirect(307, `/${user.username}/invoice/${hash}`); + redirect(307, `/${user.username}/invoice/${hash}`); } diff --git a/src/routes/(app)/[username]/card/[serial]/+page.server.js b/src/routes/(app)/[username]/card/[serial]/+page.server.js index 20b657a1..945eee30 100644 --- a/src/routes/(app)/[username]/card/[serial]/+page.server.js +++ b/src/routes/(app)/[username]/card/[serial]/+page.server.js @@ -10,7 +10,7 @@ export let load = async ({ cookies, params }) => { console.log(e); } - if (fund) throw redirect(307, `/fund/${serial}`); + if (fund) redirect(307, `/fund/${serial}`); return params; }; diff --git a/src/routes/(app)/[username]/generate/+server.js b/src/routes/(app)/[username]/generate/+server.js index 1dca1ece..3e3a9358 100644 --- a/src/routes/(app)/[username]/generate/+server.js +++ b/src/routes/(app)/[username]/generate/+server.js @@ -6,6 +6,6 @@ export async function POST({ cookies, request }) { let body = await request.json(); return json(await post(`/user`, body, auth(cookies))); } catch (e) { - throw error(500, e.message); + error(500, e.message); } } diff --git a/src/routes/(app)/[username]/invoice/[id]/+layout.server.js b/src/routes/(app)/[username]/invoice/[id]/+layout.server.js index b9d1c43d..b887d407 100644 --- a/src/routes/(app)/[username]/invoice/[id]/+layout.server.js +++ b/src/routes/(app)/[username]/invoice/[id]/+layout.server.js @@ -16,7 +16,7 @@ export async function load({ depends, params, url, parent }) { !url.pathname.includes("tip") && !options ) { - throw redirect(307, `/send/invoice/${id}`); + redirect(307, `/send/invoice/${id}`); } let { amount, pending, received } = invoice; @@ -26,11 +26,11 @@ export async function load({ depends, params, url, parent }) { (!amount && received) || (amount > 0 && (pending >= amount || received >= amount)); if (paid && !url.pathname.endsWith("paid")) { - throw redirect( - 307, - `/${params.username}/invoice/${id}/paid` + - (options ? "?options=true" : "") - ); + redirect( + 307, + `/${params.username}/invoice/${id}/paid` + + (options ? "?options=true" : "") + ); } let sm = Qr.drawImg(invoice.text || "", { size: 300 }); diff --git a/src/routes/(app)/[username]/invoice/[id]/tip/+page.server.js b/src/routes/(app)/[username]/invoice/[id]/tip/+page.server.js index c9377e36..b81e2364 100644 --- a/src/routes/(app)/[username]/invoice/[id]/tip/+page.server.js +++ b/src/routes/(app)/[username]/invoice/[id]/tip/+page.server.js @@ -4,7 +4,7 @@ import { redirect } from "@sveltejs/kit"; export async function load({ parent, params }) { let { invoice } = await parent(); if (!invoice.amount) - throw redirect(307, `/${params.username}/invoice/${invoice.id}`); + redirect(307, `/${params.username}/invoice/${invoice.id}`); } export const actions = { diff --git a/src/routes/(app)/[username]/request/[id]/+page.server.js b/src/routes/(app)/[username]/request/[id]/+page.server.js index 09cce465..2712c7ca 100644 --- a/src/routes/(app)/[username]/request/[id]/+page.server.js +++ b/src/routes/(app)/[username]/request/[id]/+page.server.js @@ -5,7 +5,7 @@ export let load = async ({ cookies, depends, params, parent }) => { depends("app:invoice"); let { user } = await parent(); - if (!user) throw redirect(307, "/login"); + if (!user) redirect(307, "/login"); let { request } = await get(`/request/${params.id}`, auth(cookies)); let { invoice } = request; @@ -16,10 +16,10 @@ export let load = async ({ cookies, depends, params, parent }) => { request.recipient.username === user.username && ((received && !amount) || received >= amount) ) - throw redirect(307, `/${user.username}/invoice/${id}/paid`); + redirect(307, `/${user.username}/invoice/${id}/paid`); if (request.requester.username === user.username) - throw redirect(307, `/send/${id}`); + redirect(307, `/send/${id}`); } return { request }; diff --git a/src/routes/(app)/[username]/settings/[...tab]/+page.server.js b/src/routes/(app)/[username]/settings/[...tab]/+page.server.js index c035da12..b9717b82 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/+page.server.js +++ b/src/routes/(app)/[username]/settings/[...tab]/+page.server.js @@ -3,7 +3,7 @@ import { fd, auth, get, post } from "$lib/utils"; export function load({ cookies, params, url }) { if (url.pathname.endsWith("settings")) - throw redirect(307, url.pathname + "/account"); + redirect(307, url.pathname + "/account"); params.cookies = cookies.getAll(); return params; } diff --git a/src/routes/(app)/[username]/verify/[code]/+page.server.js b/src/routes/(app)/[username]/verify/[code]/+page.server.js index 3ddcd412..19453d9d 100644 --- a/src/routes/(app)/[username]/verify/[code]/+page.server.js +++ b/src/routes/(app)/[username]/verify/[code]/+page.server.js @@ -10,5 +10,5 @@ export let load = async ({ params: { code } }) => { return { error: "Verification failed" }; } - throw redirect(307, `/${user.username}/settings/account?verified=true`); + redirect(307, `/${user.username}/settings/account?verified=true`); }; diff --git a/src/routes/(app)/admin/+layout.server.js b/src/routes/(app)/admin/+layout.server.js index e49c6e40..9250a7d4 100644 --- a/src/routes/(app)/admin/+layout.server.js +++ b/src/routes/(app)/admin/+layout.server.js @@ -3,9 +3,9 @@ import { redirect } from "@sveltejs/kit"; export async function load({ cookies, parent }) { let token = cookies.get("token"); - if (!token) throw redirect(307, "/login"); + if (!token) redirect(307, "/login"); let user = await get("/me", auth(cookies)); - if (!user) throw redirect(307, "/login"); + if (!user) redirect(307, "/login"); return { user }; } diff --git a/src/routes/(app)/admin/+page.server.js b/src/routes/(app)/admin/+page.server.js index 93931aa3..96a1cd78 100644 --- a/src/routes/(app)/admin/+page.server.js +++ b/src/routes/(app)/admin/+page.server.js @@ -3,7 +3,7 @@ import { redirect } from "@sveltejs/kit"; export async function load({ cookies, parent }) { let { user } = await parent(); - if (!user) throw redirect(307, "/login"); + if (!user) redirect(307, "/login"); let users = (await get("/users", auth(cookies))).sort( (a, b) => b.balance - a.balance diff --git a/src/routes/(app)/buy/+page.server.js b/src/routes/(app)/buy/+page.server.js index 3d3265cb..b8897741 100644 --- a/src/routes/(app)/buy/+page.server.js +++ b/src/routes/(app)/buy/+page.server.js @@ -23,6 +23,6 @@ export const actions = { auth(cookies) ); - throw redirect(307, `/${form.get("username")}/payments`); + redirect(307, `/${form.get("username")}/payments`); }, }; diff --git a/src/routes/(app)/disable2fa/+server.js b/src/routes/(app)/disable2fa/+server.js index 1e264398..0afda3b9 100644 --- a/src/routes/(app)/disable2fa/+server.js +++ b/src/routes/(app)/disable2fa/+server.js @@ -8,6 +8,6 @@ export async function POST({ cookies, request }) { return json(res); } catch (e) { - throw error(500, "Problem disabling 2fa"); + error(500, "Problem disabling 2fa"); } } diff --git a/src/routes/(app)/fund/[id]/+page.server.js b/src/routes/(app)/fund/[id]/+page.server.js index 6c5c943f..c5c8db2f 100644 --- a/src/routes/(app)/fund/[id]/+page.server.js +++ b/src/routes/(app)/fund/[id]/+page.server.js @@ -15,9 +15,9 @@ export const actions = { if (user) { await post("/redeem", params, auth(cookies)); - throw redirect(307, `/${user.username}/payments`); + redirect(307, `/${user.username}/payments`); } - throw redirect(307, "/register"); + redirect(307, "/register"); }, }; diff --git a/src/routes/(app)/fund/[id]/sweep/+page.server.js b/src/routes/(app)/fund/[id]/sweep/+page.server.js index 05fb18b6..613cf8e2 100644 --- a/src/routes/(app)/fund/[id]/sweep/+page.server.js +++ b/src/routes/(app)/fund/[id]/sweep/+page.server.js @@ -6,8 +6,8 @@ export async function load({ cookies, params, parent }) { let { id } = params; let { amount } = await get(`/fund/${id}`); - if (!amount) throw redirect(307, `/fund/${id}`); - if (!user) throw redirect(307, `/register?redirect=/fund/${id}/sweep`); + if (!amount) redirect(307, `/fund/${id}`); + if (!user) redirect(307, `/register?redirect=/fund/${id}/sweep`); await post("/take", { amount, id }, auth(cookies)); return { amount, id }; } diff --git a/src/routes/(app)/fund/[id]/withdraw/+page.server.js b/src/routes/(app)/fund/[id]/withdraw/+page.server.js index 6fb08f61..1da349f8 100644 --- a/src/routes/(app)/fund/[id]/withdraw/+page.server.js +++ b/src/routes/(app)/fund/[id]/withdraw/+page.server.js @@ -3,7 +3,7 @@ import { fd, auth, post } from "$lib/utils"; export async function load({ parent }) { let { user } = await parent(); - if (!user) throw redirect(307, "/register"); + if (!user) redirect(307, "/register"); } export const actions = { @@ -15,6 +15,6 @@ export const actions = { return fail(400, { message: e.message }); } - throw redirect(307, `/fund/${body.id}`); + redirect(307, `/fund/${body.id}`); }, }; diff --git a/src/routes/(app)/launch/purchase/+page.server.js b/src/routes/(app)/launch/purchase/+page.server.js index 58669606..d34c1f41 100644 --- a/src/routes/(app)/launch/purchase/+page.server.js +++ b/src/routes/(app)/launch/purchase/+page.server.js @@ -10,7 +10,7 @@ export const load = async ({ parent }) => { let tickets = await get("/tickets"); let { user } = await parent(); let hasTicket = !!user?.accounts.find((a) => tickets.includes(a.asset)); - if (hasTicket) throw redirect(307, "/launch/ticket"); + if (hasTicket) redirect(307, "/launch/ticket"); return { tickets }; }; @@ -24,7 +24,7 @@ export const actions = { auth(cookies) ); - throw redirect(307, `/launch/thanks/${asset}`); + redirect(307, `/launch/thanks/${asset}`); }, lightning: async ({ cookies, request }) => { @@ -44,6 +44,6 @@ export const actions = { let { id } = await post("/invoice", { invoice, user }, auth(cookies)); - throw redirect(307, `/${user.username}/invoice/${id}`); + redirect(307, `/${user.username}/invoice/${id}`); }, }; diff --git a/src/routes/(app)/launch/purchase/card/+page.server.js b/src/routes/(app)/launch/purchase/card/+page.server.js index bca601d3..416a66e4 100644 --- a/src/routes/(app)/launch/purchase/card/+page.server.js +++ b/src/routes/(app)/launch/purchase/card/+page.server.js @@ -44,9 +44,9 @@ export const actions = { }).then((r) => r.json()); if (status !== "succeeded") - throw error(500, { message: "Card payment failed" }); + error(500, { message: "Card payment failed" }); let asset = await createTicket(cookies, form.get("username")); - throw redirect(307, `/launch/thanks/${asset}`); + redirect(307, `/launch/thanks/${asset}`); }, }; diff --git a/src/routes/(app)/ln/[lnurl]/+page.server.js b/src/routes/(app)/ln/[lnurl]/+page.server.js index 332bc9e3..910ce5a5 100644 --- a/src/routes/(app)/ln/[lnurl]/+page.server.js +++ b/src/routes/(app)/ln/[lnurl]/+page.server.js @@ -3,7 +3,7 @@ import { error, fail, redirect } from "@sveltejs/kit"; export async function load({ params, parent }) { let { user } = await parent(); - if (!user) throw redirect(307, "/register"); + if (!user) redirect(307, "/register"); let data; @@ -11,11 +11,11 @@ export async function load({ params, parent }) { let { lnurl } = params; data = await get(`/decode?text=${lnurl}`); } catch (e) { - throw error(500, e.message); + error(500, e.message); } if (!["payRequest", "withdrawRequest"].includes(data.tag)) - throw error(500, "We only support LNURLp and LNURLw at this time"); + error(500, "We only support LNURLp and LNURLw at this time"); return data; } @@ -37,7 +37,7 @@ export const actions = { let { pr } = await fetch(`${callback}?amount=${amount * 1000}`).then((r) => r.json() ); - throw redirect(307, `/send/lightning/${pr}`); + redirect(307, `/send/lightning/${pr}`); }, withdraw: async ({ cookies, fetch, request }) => { @@ -70,6 +70,6 @@ export const actions = { let c = callback.includes("?") ? "&" : "?"; await fetch(`${callback}${c}k1=${k1}&pr=${pr}`).then((r) => r.json()); - throw redirect(307, `/ln/withdrawal/sent`); + redirect(307, `/ln/withdrawal/sent`); }, }; diff --git a/src/routes/(app)/login/+page.server.js b/src/routes/(app)/login/+page.server.js index 6876c93d..7b977024 100644 --- a/src/routes/(app)/login/+page.server.js +++ b/src/routes/(app)/login/+page.server.js @@ -3,7 +3,7 @@ import { login, fd } from "$lib/utils"; export const load = async ({ parent }) => { let { user } = await parent(); - if (user?.pubkey) throw redirect(307, `/${user.username}`); + if (user?.pubkey) redirect(307, `/${user.username}`); }; export const actions = { @@ -24,6 +24,6 @@ export const actions = { return fail(400, { error: "Login failed", message: e.message, ...form }); } - throw redirect(303, loginRedirect || `/${user.username}`); + redirect(307, loginRedirect || `/${user.username}`); }, }; diff --git a/src/routes/(app)/logout/+page.server.js b/src/routes/(app)/logout/+page.server.js index 60750dfa..97bb1e73 100644 --- a/src/routes/(app)/logout/+page.server.js +++ b/src/routes/(app)/logout/+page.server.js @@ -8,5 +8,5 @@ const opts = { export async function load({ cookies }) { cookies.set("username", "", opts); cookies.set("token", "", opts); - throw redirect(307, "/login"); + redirect(307, "/login"); } diff --git a/src/routes/(app)/redeem/[redeemcode]/+page.server.js b/src/routes/(app)/redeem/[redeemcode]/+page.server.js index f227f22e..25153533 100644 --- a/src/routes/(app)/redeem/[redeemcode]/+page.server.js +++ b/src/routes/(app)/redeem/[redeemcode]/+page.server.js @@ -8,10 +8,10 @@ export async function load({ cookies, locals, params }) { try { await post("/redeem", params, auth(cookies)); } catch (e) { - throw redirect(307, "/"); + redirect(307, "/"); } - throw redirect(307, `/${user.username}/payments`); + redirect(307, `/${user.username}/payments`); } - throw redirect(307, "/login"); + redirect(307, "/login"); } diff --git a/src/routes/(app)/register/+page.server.js b/src/routes/(app)/register/+page.server.js index babeeb03..cdb5736e 100644 --- a/src/routes/(app)/register/+page.server.js +++ b/src/routes/(app)/register/+page.server.js @@ -3,7 +3,7 @@ import { fd, post, login } from "$lib/utils"; export const load = async ({ parent }) => { let { user } = await parent(); - if (user) throw redirect(307, `/${user.username}`); + if (user) redirect(307, `/${user.username}`); let index = Math.floor(Math.random() * 64) + 1; @@ -32,7 +32,6 @@ export const actions = { try { await post("/register", { user }, { "cf-connecting-ip": ip }); } catch (e) { - console.log(e); if (e.message.includes("taken")) error = e.message; } @@ -44,6 +43,6 @@ export const actions = { } if (error) return fail(400, { error }); - throw redirect(307, loginRedirect || `/${user.username}`); + redirect(307, loginRedirect || `/${user.username}`); }, }; diff --git a/src/routes/(app)/reset/[code]/+page.server.js b/src/routes/(app)/reset/[code]/+page.server.js index 5dbf72d4..67f2d919 100644 --- a/src/routes/(app)/reset/[code]/+page.server.js +++ b/src/routes/(app)/reset/[code]/+page.server.js @@ -21,7 +21,7 @@ export const actions = { } if (error) return fail(400, { error }); - throw redirect(307, `/${user.username}`); + redirect(307, `/${user.username}`); } catch (e) { console.log(e.message); return fail(400, { error: e.message }); diff --git a/src/routes/(app)/send/[...text]/+page.server.js b/src/routes/(app)/send/[...text]/+page.server.js index 9a76f21d..3e6b7c13 100644 --- a/src/routes/(app)/send/[...text]/+page.server.js +++ b/src/routes/(app)/send/[...text]/+page.server.js @@ -7,8 +7,8 @@ import { PUBLIC_DOMAIN } from "$env/static/public"; let parse = async (t, host) => { if (!t) return; - if (t.startsWith("http")) throw redirect(307, t); - if (t.startsWith(host)) throw redirect(307, `http://${t}`); + if (t.startsWith("http")) redirect(307, t); + if (t.startsWith(host)) redirect(307, `http://${t}`); let amount, user, id; @@ -28,12 +28,12 @@ let parse = async (t, host) => { if (t.endsWith("@classic")) { ({ uuid: id } = await get(`/invoice/classic/${t.replace("@classic", "")}`)); - if (id) throw redirect(307, `/send/invoice/${id}`); + if (id) redirect(307, `/send/invoice/${id}`); } - if (t.includes("/fund")) throw redirect(307, t.substring(t.indexOf("/fund"))); + if (t.includes("/fund")) redirect(307, t.substring(t.indexOf("/fund"))); - if (t.toLowerCase().startsWith("lnurl")) throw redirect(307, `/ln/${t}`); + if (t.toLowerCase().startsWith("lnurl")) redirect(307, `/ln/${t}`); if (t.includes(":")) t = t.split(":")[1]; // lightning @@ -41,7 +41,7 @@ let parse = async (t, host) => { try { ({ id } = await get(`/invoice/${t}`)); } catch (e) { - throw redirect(307, `/send/lightning/${t}`); + redirect(307, `/send/lightning/${t}`); } } @@ -52,11 +52,11 @@ let parse = async (t, host) => { } catch (e) { let r = `/send/bitcoin/${t}`; if (amount) r += "/" + amount; - throw redirect(307, r); + redirect(307, r); } - if (user) throw redirect(307, `/send/${user.username}`); - else if (id) throw redirect(307, `/send/${id}`); + if (user) redirect(307, `/send/${user.username}`); + else if (id) redirect(307, `/send/${id}`); } // user @@ -65,14 +65,14 @@ let parse = async (t, host) => { if (user.anon) user = null; } catch (e) {} - if (user) throw redirect(307, `/send/user/${t}`); + if (user) redirect(307, `/send/user/${t}`); let fund; try { fund = await get(`/fund/${t}`); } catch (e) {} - if (fund) throw redirect(307, `/send/fund/${t}`); + if (fund) redirect(307, `/send/fund/${t}`); // invoice let invoice; @@ -80,7 +80,7 @@ let parse = async (t, host) => { invoice = await get(`/invoice/${t}`); } catch (e) {} - if (invoice) throw redirect(307, `/send/invoice/${invoice.hash}`); + if (invoice) redirect(307, `/send/invoice/${invoice.hash}`); }; export async function load({ cookies, params, request, url }) { diff --git a/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js b/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js index aaccf762..2998f22a 100644 --- a/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js +++ b/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js @@ -35,6 +35,6 @@ export const actions = { return fail(400, { message: e.message }); } - throw redirect(307, "/sent"); + redirect(307, "/sent"); }, }; diff --git a/src/routes/(app)/send/fund/[name]/[...amount]/+page.server.js b/src/routes/(app)/send/fund/[name]/[...amount]/+page.server.js index 3318a60b..51277e5d 100644 --- a/src/routes/(app)/send/fund/[name]/[...amount]/+page.server.js +++ b/src/routes/(app)/send/fund/[name]/[...amount]/+page.server.js @@ -12,6 +12,6 @@ export const actions = { return fail(400, { message: e.message }); } - if (p) throw redirect(307, `/fund/${body.name}`); + if (p) redirect(307, `/fund/${body.name}`); }, }; diff --git a/src/routes/(app)/send/invoice/[id]/+page.server.js b/src/routes/(app)/send/invoice/[id]/+page.server.js index aa284328..39f2a5dd 100644 --- a/src/routes/(app)/send/invoice/[id]/+page.server.js +++ b/src/routes/(app)/send/invoice/[id]/+page.server.js @@ -17,9 +17,9 @@ export async function load({ params: { id }, parent, url }) { } = await get(`/invoice/${id}`); if (prompt && tip === null) - throw redirect(307, `/${recipient.username}/invoice/${id}/tip`); + redirect(307, `/${recipient.username}/invoice/${id}/tip`); if (recipient.username === user.username) - throw error(500, { message: "Cannot send to self" }); + error(500, { message: "Cannot send to self" }); return { amount, address, @@ -43,6 +43,6 @@ export const actions = { return fail(400, { message: e.message }); } - throw redirect(307, "/sent"); + redirect(307, "/sent"); }, }; diff --git a/src/routes/(app)/send/lightning/[payreq]/+page.server.js b/src/routes/(app)/send/lightning/[payreq]/+page.server.js index d9e791e1..49c952bf 100644 --- a/src/routes/(app)/send/lightning/[payreq]/+page.server.js +++ b/src/routes/(app)/send/lightning/[payreq]/+page.server.js @@ -19,6 +19,6 @@ export const actions = { return fail(400, { message: e.message }); } - throw redirect(307, "/sent"); + redirect(307, "/sent"); }, }; diff --git a/src/routes/(app)/send/user/[username]/[...amount]/+page.server.js b/src/routes/(app)/send/user/[username]/[...amount]/+page.server.js index 1f3a0420..e5fa4452 100644 --- a/src/routes/(app)/send/user/[username]/[...amount]/+page.server.js +++ b/src/routes/(app)/send/user/[username]/[...amount]/+page.server.js @@ -9,12 +9,12 @@ export async function load({ cookies, params, parent }) { let [amount, currency] = params.amount.split("/"); if (subject.username === user?.username) - throw error(500, { message: "Cannot send to self" }); + error(500, { message: "Cannot send to self" }); let rate; if (amount) { rate = rates[currency ? currency.toUpperCase() : subject.currency]; - if (!rate) throw error(500, "Invalid currency symbol"); + if (!rate) error(500, "Invalid currency symbol"); if (currency) amount = (amount * sats) / rate; let { hash } = await post( @@ -26,7 +26,7 @@ export async function load({ cookies, params, parent }) { auth(cookies) ); - throw redirect(307, `/${username}/invoice/${hash}`); + redirect(307, `/${username}/invoice/${hash}`); } return { amount, rate, subject }; @@ -42,6 +42,6 @@ export const actions = { return fail(400, { message: e.message }); } - throw redirect(307, "/sent"); + redirect(307, "/sent"); }, }; diff --git a/src/routes/start/+server.js b/src/routes/start/+server.js index e5d93497..babe7db6 100644 --- a/src/routes/start/+server.js +++ b/src/routes/start/+server.js @@ -4,8 +4,8 @@ import { redirect } from "@sveltejs/kit"; export async function GET({ cookies }) { let username = cookies.get("username"); if (username) { - throw redirect(307, `/${username}/receive`); + redirect(307, `/${username}/receive`); } - throw redirect(307, "/"); + redirect(307, "/"); } -- cgit v1.2.3 From 2018722898a38722edebe9854707b6e622c79fb8 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Fri, 15 Dec 2023 15:43:47 -0800 Subject: update sample url --- bun.lockb | Bin 110919 -> 131285 bytes src/lib/samples.js | 30 ++++++++++++++++++------------ src/routes/(static)/docs/+page.svelte | 9 +++++++-- 3 files changed, 25 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/bun.lockb b/bun.lockb index f6282c22..ec4bc86b 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/src/lib/samples.js b/src/lib/samples.js index 1a1f5d9c..4d02ff37 100644 --- a/src/lib/samples.js +++ b/src/lib/samples.js @@ -1,32 +1,38 @@ +import { PUBLIC_DOMAIN, PUBLIC_COINOS_URL } from "$env/static/public"; + +let api = PUBLIC_DOMAIN.includes("localhost") + ? `${PUBLIC_COINOS_URL}` + : `https://${PUBLIC_DOMAIN}/api`; + export default { - register: `curl "https://coinos.io/api/register" -H "content-type: application/json" -d '{ + register: `curl "${api}/register" -H "content-type: application/json" -d '{ "user": { "username": "demo", "password": "hunter2" } }'`, - login: `curl "https://coinos.io/api/login" -H "content-type: application/json" -d '{ + login: `curl "${api}/login" -H "content-type: application/json" -d '{ "username": "demo", "password": "hunter2" }'`, - payments: `curl "https://coinos.io/api/payments" + payments: `curl "${api}/payments" -H "content-type: application/json" -H "Authorization: Bearer $token" `, - lightning: `curl "https://coinos.io/api/payments" + lightning: `curl "${api}/payments" -H "content-type: application/json" -H "Authorization: Bearer $token" -d '{ "payreq": "lnbc1pj94d8fsp5n77k340ps4m9jn7kp8he8yynpddvurv6mcsrrqpnq5l2jxdxzlwqpp5m96pqhc5nrlk8cqsu9ufdxxa43sarp8vwf9egvm2pg9nl0zu9r8qdq2vdhkjmn0wvxqztgcqpjrzjqwhmav82kntsppmkp8jp4vg4h9nns78tsy8mg7ve4lq5txrkp0h56zlarvqqdtcqqsqqqqqqqqqqp6cq9q9qyysgqzxlypywzphyujm3ga5j5csfcmqvlnae0fgnvymkaaw94eeg7py5rqzysyjkr3ev2snq63qpsc69vf54adkd0szvmvwt5cuadjnuy95sq4xfa40" }'`, - bitcoin: `curl "https://coinos.io/api/payments" + bitcoin: `curl "${api}/payments" -H "content-type: application/json" -H "Authorization: Bearer $token" -d '{ "amount": 5000, "hash": "bc1q3unh97w4rmelflrm2hvdwz37d8kray3vn4d5ca" }'`, - internal: `HASH=$(curl "https://coinos.io/api/invoice" + internal: `HASH=$(curl "${api}/invoice" -H "content-type: application/json" -H "Authorization: Bearer $token" -d '{ @@ -39,17 +45,17 @@ export default { } }' | jq -r '.hash'); - curl "https://coinos.io/api/payments" + curl "${api}/payments" -H "content-type: application/json" -H "Authorization: Bearer $token" -d '{ "amount": 5000, "hash": $HASH }'`, - rates: `curl "https://coinos.io/api/rates" + rates: `curl "${api}/rates" -H "content-type: application/json" }'`, - lightningInvoice: `curl "https://coinos.io/api/invoice" + lightningInvoice: `curl "${api}/invoice" -H "content-type: application/json" -H "Authorization: Bearer $token" -d '{ @@ -58,7 +64,7 @@ export default { "type": "lightning" } }'`, - bitcoinAddress: `curl "https://coinos.io/api/invoice" + bitcoinAddress: `curl "${api}/invoice" -H "content-type: application/json" -H "Authorization: Bearer $token" -d '{ @@ -67,7 +73,7 @@ export default { "type": "bitcoin" } }'`, - webhook: `curl "https://coinos.io/api/invoice" + webhook: `curl "${api}/invoice" -H "content-type: application/json" -H "Authorization: Bearer $token" -d '{ @@ -77,7 +83,7 @@ export default { "secret": "webhooksecret" } }'`, - fetchInvoice: `curl "https://coinos.io/api/invoice/bc1qmhfk9stzffhd9umzmld92vff7zg3mdlh7rvvaj" + fetchInvoice: `curl "${api}/invoice/bc1qmhfk9stzffhd9umzmld92vff7zg3mdlh7rvvaj" -H "content-type: application/json"'`, invoiceResponse: `{ "amount":3141 diff --git a/src/routes/(static)/docs/+page.svelte b/src/routes/(static)/docs/+page.svelte index 68791d7a..a6b1bf08 100644 --- a/src/routes/(static)/docs/+page.svelte +++ b/src/routes/(static)/docs/+page.svelte @@ -1,13 +1,18 @@
@@ -157,7 +166,8 @@
-- cgit v1.2.3 From 02a945afd4edabcc4427b02e5693f22e4a0d74bc Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Mon, 18 Dec 2023 21:56:29 -0800 Subject: fix enter button on send lnurl --- src/components/Lnurlp.svelte | 8 +++++--- src/routes/(app)/send/user/[username]/[...amount]/+page.svelte | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/components/Lnurlp.svelte b/src/components/Lnurlp.svelte index d76d11c4..6785061a 100644 --- a/src/components/Lnurlp.svelte +++ b/src/components/Lnurlp.svelte @@ -5,7 +5,7 @@ import Spinner from "$comp/Spinner.svelte"; import { pin } from "$lib/store"; - export let data, form; + export let data, form, send; let { currency } = data.user; let { minSendable, maxSendable, callback, metadata, rates } = data; @@ -36,7 +36,7 @@
{/if} - +
@@ -47,8 +47,10 @@
- {/if} + on:keydown={setAmount}> {$t("payments.next")} + {/if}
-- cgit v1.2.3 From 19a8c100da3b4281b68e9b8afc837e6f93b53230 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Mon, 18 Dec 2023 22:53:54 -0800 Subject: numpad focus --- src/components/Numpad.svelte | 26 ++++++++++++---------- .../[username]/receive/[...param]/+page.svelte | 1 + src/routes/(app)/send/invoice/[id]/+page.svelte | 3 ++- .../send/user/[username]/[...amount]/+page.svelte | 11 ++++++--- 4 files changed, 25 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/components/Numpad.svelte b/src/components/Numpad.svelte index 4dd73f6d..7006d7aa 100644 --- a/src/components/Numpad.svelte +++ b/src/components/Numpad.svelte @@ -1,7 +1,7 @@
diff --git a/src/components/Toggle.svelte b/src/components/Toggle.svelte index 1e4cf4c4..2f92837d 100644 --- a/src/components/Toggle.svelte +++ b/src/components/Toggle.svelte @@ -12,6 +12,6 @@ class="sr-only peer" />
diff --git a/src/lib/utils.js b/src/lib/utils.js index f55b47b6..5303ec35 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -281,3 +281,8 @@ export function shuffleArray(array) { [array[i], array[j]] = [array[j], array[i]]; } } + + export let closest = (a, n) => + a.reduce((prev, curr) => + Math.abs(curr - n) < Math.abs(prev - n) ? curr : prev + ); diff --git a/src/locales/en.json b/src/locales/en.json index ac8b0075..cb42fa78 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -272,6 +272,8 @@ } }, "payments": { + "networkFee": "Network fee", + "ourFee": "Our fee", "create": "Create", "fund": "Fund", "addFunds": "Add Funds", diff --git a/src/routes/(app)/+layout.svelte b/src/routes/(app)/+layout.svelte index e439d43e..0480fd79 100644 --- a/src/routes/(app)/+layout.svelte +++ b/src/routes/(app)/+layout.svelte @@ -18,7 +18,7 @@ import Password from "$comp/Password.svelte"; import Request from "$comp/Request.svelte"; import { warning, protectedRoutes } from "$lib/utils"; - import { t, locale } from "$lib/translations"; + import { t, locale, loading } from "$lib/translations"; import { goto, onNavigate } from "$app/navigation"; export let data; @@ -129,7 +129,9 @@
- + {#if !$loading} + + {/if}
{#if $invoice} diff --git a/src/routes/(app)/[username]/payments/[...page]/+page.svelte b/src/routes/(app)/[username]/payments/[...page]/+page.svelte index 317f776b..1f20ea5c 100644 --- a/src/routes/(app)/[username]/payments/[...page]/+page.svelte +++ b/src/routes/(app)/[username]/payments/[...page]/+page.svelte @@ -238,7 +238,7 @@ {format(new Date(p.created), "h:mm aaa")}
- {format(new Date(p.created), "MMM d")} + {format(new Date(p.created), "MMM d, yyyy")}
diff --git a/src/routes/(app)/payment/[id]/+page.svelte b/src/routes/(app)/payment/[id]/+page.svelte index a1c7bbed..15c17a00 100644 --- a/src/routes/(app)/payment/[id]/+page.svelte +++ b/src/routes/(app)/payment/[id]/+page.svelte @@ -1,5 +1,7 @@ @@ -124,8 +131,8 @@
Date
- {format(new Date(created), "MMMM d")}, - {format(new Date(created), "h:mm aaa")} + {format(new Date(created), "h:mmaaa")} + {format(new Date(created), "MMM d, yyyy")}
@@ -140,8 +147,6 @@ class="flex font-bold hover:opacity-80 mb-auto my-auto" on:click={() => copy(id)} > - - @@ -151,7 +156,8 @@
+ +
+

{$t("payments.send")}

+ +
{address}
+ + + +
+ + +
+ +
+
+
diff --git a/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js b/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js deleted file mode 100644 index 2998f22a..00000000 --- a/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.server.js +++ /dev/null @@ -1,40 +0,0 @@ -import { fail, redirect } from "@sveltejs/kit"; -import { auth, post, fd } from "$lib/utils"; - -let seen = {}; -export const actions = { - default: async ({ cookies, request }) => { - try { - let { - address, - amount, - confirmed, - feeRate, - subtract, - pin, - stale, - ts, - } = await await fd(request); - if (seen[ts]) return fail(400, { message: "Duplicate form submission" }); - - let estimate = await post( - "/bitcoin/fee", - { address, amount, feeRate, subtract }, - auth(cookies) - ); - - let { tx } = estimate; - - if (stale || !confirmed) return fail(400, estimate); - - seen[ts] = 1; - setTimeout(() => delete seen[ts], 30000); - - await post("/bitcoin/send", { pin, subtract, tx }, auth(cookies)); - } catch (e) { - return fail(400, { message: e.message }); - } - - redirect(307, "/sent"); - }, -}; diff --git a/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte b/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte deleted file mode 100644 index a8b86718..00000000 --- a/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte +++ /dev/null @@ -1,162 +0,0 @@ - - - - -{#if form?.message} -
- {form.message} -
-{/if} - -
-

{$t("payments.send")}

- -
{address}
- - {#if confirmed} -
-

- {f(toFiat(amount, rate), currency)} -

-

⚡️{s(amount)}

-
- -
-

with fee

- -
-

- {f(toFiat(fee + ourfee, rate), currency)} -

-

⚡️{s(fee + ourfee)}

- -
-
- {:else} - - {/if} - -
- - - - - - - - - - {#if confirmed && adjusting} -
-
- Slower (~40 blocks) -
-
- Faster (~1 block) -
- -
-
-
- -
- -
- {/if} - -
- {#if !confirmed} - - {/if} - - -
-
-
diff --git a/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.server.js b/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.server.js new file mode 100644 index 00000000..08741296 --- /dev/null +++ b/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.server.js @@ -0,0 +1,36 @@ +import { fail, redirect } from "@sveltejs/kit"; +import { auth, post, fd } from "$lib/utils"; + +let seen = {}; + +export async function load({ params: { address, amount, feeRate }, cookies }) { + try { + let fees = await fetch( + `https://mempool.space/api/v1/fees/recommended` + ).then((r) => r.json()); + + if (!feeRate) feeRate = fees.halfHourFee; + + let { fee, ourfee, hex } = await post( + "/bitcoin/fee", + { address, amount, feeRate: feeRate }, + auth(cookies) + ); + + return { amount, address, fee, fees, feeRate, ourfee, hex }; + } catch (e) { + throw redirect(307, `/send/bitcoin/${address}`); + } +} + +export const actions = { + default: async ({ cookies, request }) => { + try { + let r = await post("/bitcoin/send", await fd(request), auth(cookies)); + } catch (e) { + return fail(400, { message: e.message }); + } + + redirect(307, "/sent"); + }, +}; diff --git a/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.svelte b/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.svelte new file mode 100644 index 00000000..d583024c --- /dev/null +++ b/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.svelte @@ -0,0 +1,134 @@ + + + + +
+ {#if form?.message} +
+
{form.message}
+
+ {/if} + +

{$t("payments.send")}

+ +
{address}
+ +
+

+ {f(toFiat(amount, $rate), currency)} +

+

⚡️{s(amount)}

+
+ +
+

{$t("payments.networkFee")}

+ +
+ +
+

+ {f(toFiat(fee, $rate), currency)} +

+

⚡️{s(fee)}

+
+
+
+ +
+

{$t("payments.ourFee")}

+ +
+
+

+ {f(toFiat(ourfee, $rate), currency)} +

+

⚡️{s(ourfee)}

+
+
+
+ +
(submitting = true)}> + + + + +
+ +
+
+
+ + diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 3cffea21..23aaacfa 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,4 +1,4 @@ - - @@ -93,18 +94,18 @@
{#if ourfee} -
-

{$t("payments.ourFee")}

- -
-
-

- {f(toFiat(ourfee, $rate), currency)} -

-

⚡️{s(ourfee)}

+
+

{$t("payments.ourFee")}

+ +
+
+

+ {f(toFiat(ourfee, $rate), currency)} +

+

⚡️{s(ourfee)}

+
-
{/if}
(submitting = true)}> -- cgit v1.2.3 From 6f988f00bd49be2f34ce4055c6b684db5b6e062c Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Wed, 20 Dec 2023 14:58:13 -0800 Subject: fix back button --- .../(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.svelte b/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.svelte index 58de1000..c3a2fcdd 100644 --- a/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.svelte +++ b/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.svelte @@ -42,7 +42,7 @@ }; let setFee = () => goto(`/send/bitcoin/${address}/${amount}/${feeRate}`); - let goBack = () => goto(`/send/bitcoin/${address}/${amount}`) + let goBack = () => goto(`/send/bitcoin/${address}`) @@ -43,7 +43,7 @@ on:keydown={setMax}>Max ⚡️{s(balance)} - + -- cgit v1.2.3 From b419ccffd45add72259f4abe548ad29b61309488 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Wed, 20 Dec 2023 15:06:00 -0800 Subject: prettier --- src/components/Calendar.svelte | 3 +- src/components/Card.svelte | 3 +- src/components/Footer.svelte | 3 +- src/components/Heart.svelte | 3 +- src/components/Invoice.svelte | 3 +- src/components/LandingHeader.svelte | 22 +- src/components/LandingHero.svelte | 3 +- src/components/Left.svelte | 3 +- src/components/Lnurlw.svelte | 3 +- src/components/LocationsMap.svelte | 6 +- src/components/Lock.svelte | 3 +- src/components/Password.svelte | 9 +- src/components/Pin.svelte | 3 +- src/components/Pinpad.svelte | 6 +- src/components/Request.svelte | 3 +- src/components/Spinner.svelte | 3 +- src/lib/invoice.js | 3 +- src/lib/utils.js | 2 +- src/locales/fr.json | 658 ++++++++++----------- src/routes/(app)/+error.svelte | 3 +- .../[username]/(profile)/request/+page.svelte | 3 +- .../(app)/[username]/card/[serial]/+page.svelte | 6 +- src/routes/(app)/[username]/funds/+page.svelte | 3 +- src/routes/(app)/[username]/generate/+page.svelte | 4 +- .../[username]/invoice/[id]/+layout.server.js | 8 +- .../(app)/[username]/invoice/[id]/+page.svelte | 24 +- .../[username]/invoice/[id]/paid/+page.svelte | 12 +- .../[username]/receive/[...param]/+page.svelte | 3 +- .../[username]/settings/[...tab]/+page.svelte | 3 +- .../[username]/settings/[...tab]/_account.svelte | 1 - .../(app)/[username]/settings/[...tab]/_pos.svelte | 6 +- .../[username]/settings/[...tab]/_security.svelte | 6 +- .../[username]/settings/[...tab]/_shopify.svelte | 4 +- src/routes/(app)/buy/+page.svelte | 11 +- src/routes/(app)/forgot/+page.svelte | 9 +- src/routes/(app)/fund/[id]/+page.svelte | 12 +- src/routes/(app)/fund/[id]/withdraw/+page.svelte | 3 +- src/routes/(app)/launch/+page.svelte | 7 +- src/routes/(app)/launch/purchase/+page.svelte | 17 +- .../(app)/launch/purchase/card/+page.server.js | 3 +- src/routes/(app)/launch/purchase/card/+page.svelte | 8 +- .../(app)/launch/thanks/[asset]/+page.svelte | 7 +- src/routes/(app)/launch/ticket/+page.svelte | 7 +- src/routes/(app)/login/+page.svelte | 13 +- src/routes/(app)/register/+page.server.js | 11 +- src/routes/(app)/register/+page.svelte | 24 +- src/routes/(app)/reset/[code]/+page.svelte | 12 +- src/routes/(app)/scan/+page.svelte | 5 +- src/routes/(app)/send/[...text]/+page.svelte | 12 +- .../(app)/send/bitcoin/[address]/+page.svelte | 6 +- .../[amount]/[...feeRate]/+page.server.js | 2 +- .../[address]/[amount]/[...feeRate]/+page.svelte | 9 +- .../send/fund/[name]/[...amount]/+page.svelte | 3 +- src/routes/(app)/send/invoice/[id]/+page.svelte | 6 +- .../(app)/send/lightning/[payreq]/+page.svelte | 10 +- src/routes/(app)/support/+page.svelte | 3 +- src/routes/(static)/docs/+page.svelte | 1 - src/routes/+page.svelte | 2 +- static/lottie/success.json | 17 +- 59 files changed, 557 insertions(+), 491 deletions(-) (limited to 'src') diff --git a/src/components/Calendar.svelte b/src/components/Calendar.svelte index 7d7fa570..b07c136c 100644 --- a/src/components/Calendar.svelte +++ b/src/components/Calendar.svelte @@ -3,7 +3,8 @@ class="absolute bottom-0 left-0 -mb-0.5 transform translate-x-1/2 -translate-y-1/2 text-black peer-placeholder-shown:text-gray-300 h-6 w-6" fill="none" viewBox="0 0 24 24" - stroke="currentColor"> + stroke="currentColor" +> + stroke="currentColor" +> diff --git a/src/components/Heart.svelte b/src/components/Heart.svelte index 4304545f..9bae6500 100644 --- a/src/components/Heart.svelte +++ b/src/components/Heart.svelte @@ -4,7 +4,8 @@ class="mr-1" viewBox="0 0 24 24" fill="none" - xmlns="http://www.w3.org/2000/svg"> + xmlns="http://www.w3.org/2000/svg" +> diff --git a/src/components/LandingHeader.svelte b/src/components/LandingHeader.svelte index 72dd8c71..d1094a1d 100644 --- a/src/components/LandingHeader.svelte +++ b/src/components/LandingHeader.svelte @@ -52,12 +52,11 @@ class="border rounded-full px-6 py-2 font-bold" on:click={() => goto(`/${user.username}`)} >Home - - {:else} @@ -65,12 +64,11 @@ class="border rounded-full px-6 py-2 font-bold hover:opacity-80" on:click={() => goto("/register")} >{$t("nav.startInSeconds")} - - {/if} @@ -81,8 +79,6 @@ class="block md:hidden absolute top-[34.5px] right-10 z" on:click={() => (showMobileMenu = !showMobileMenu)} > - -
goto("/register")} >{$t("nav.startInSeconds")} - - {:else} @@ -118,12 +113,11 @@ class="border rounded-full px-6 py-2 font-bold block" on:click={() => goto(`/${user.username}`)} >{$t("nav.account")} - - {/if} diff --git a/src/components/LandingHero.svelte b/src/components/LandingHero.svelte index 14488cdd..43223499 100644 --- a/src/components/LandingHero.svelte +++ b/src/components/LandingHero.svelte @@ -29,7 +29,8 @@
diff --git a/src/components/Left.svelte b/src/components/Left.svelte index dd27a698..1e236969 100644 --- a/src/components/Left.svelte +++ b/src/components/Left.svelte @@ -4,7 +4,8 @@ height="24" viewBox="0 0 24 24" fill="none" - xmlns="http://www.w3.org/2000/svg"> + xmlns="http://www.w3.org/2000/svg" +>
diff --git a/src/components/Lock.svelte b/src/components/Lock.svelte index 23ab0699..fce994a2 100644 --- a/src/components/Lock.svelte +++ b/src/components/Lock.svelte @@ -3,7 +3,8 @@ class="absolute bottom-0 left-0 -mb-0.5 transform translate-x-1/2 -translate-y-1/2 text-black peer-placeholder-shown:text-gray-300 h-6 w-6" fill="none" viewBox="0 0 24 24" - stroke="currentColor"> + stroke="currentColor" +> (revealPassword = !revealPassword)} - class="absolute right-5 top-6"> + class="absolute right-5 top-6" + >
@@ -66,12 +67,14 @@ type="button" class="border-2 border-black rounded-xl font-semibold mx-auto py-3 w-40 hover:opacity-80 mx-auto" on:click={cancel} - on:keydown={cancel}> + on:keydown={cancel} + >
Cancel
diff --git a/src/components/Pin.svelte b/src/components/Pin.svelte index 50b0e463..9938f9a1 100644 --- a/src/components/Pin.svelte +++ b/src/components/Pin.svelte @@ -53,7 +53,8 @@
diff --git a/src/components/Pinpad.svelte b/src/components/Pinpad.svelte index 1a549654..641ddb2b 100644 --- a/src/components/Pinpad.svelte +++ b/src/components/Pinpad.svelte @@ -60,7 +60,8 @@
@@ -71,7 +72,8 @@ {:else} diff --git a/src/components/Request.svelte b/src/components/Request.svelte index 03364052..c085f9e2 100644 --- a/src/components/Request.svelte +++ b/src/components/Request.svelte @@ -28,7 +28,8 @@
diff --git a/src/components/Spinner.svelte b/src/components/Spinner.svelte index 2e9243b9..e9c3348f 100644 --- a/src/components/Spinner.svelte +++ b/src/components/Spinner.svelte @@ -2,7 +2,8 @@ class="mx-auto h-6 w-6 animate-spin text-white" xmlns="http://www.w3.org/2000/svg" fill="none" - viewBox="0 0 24 24"> + viewBox="0 0 24 24" +> { redirect(307, `/${user.username}/request/${request_id}`); } - if (invoice.prompt) - redirect(307, `/${user.username}/invoice/${id}/tip`); + if (invoice.prompt) redirect(307, `/${user.username}/invoice/${id}/tip`); else redirect(307, `/${user.username}/invoice/${id}`); }; diff --git a/src/lib/utils.js b/src/lib/utils.js index 5303ec35..755d8daf 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -282,7 +282,7 @@ export function shuffleArray(array) { } } - export let closest = (a, n) => +export let closest = (a, n) => a.reduce((prev, curr) => Math.abs(curr - n) < Math.abs(prev - n) ? curr : prev ); diff --git a/src/locales/fr.json b/src/locales/fr.json index ae2871f7..041fec34 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -1,331 +1,331 @@ { - "404": { - "404": "404", - "pageNotFound": "Page non trouvée." - }, - "about": { - "header": "À Propos", - "locations": { - "header": "Établissements", - "description": "Il y a des entreprises qui acceptent bitcoin utilisant le point de vente coinos. Si vous utilisez notre appli, s'il vous plait fais-le-nous savoir!" - }, - "team": { - "header": "L'Équipe", - "adam": { - "name": "Adam Soltys", - "position": "Officier Technique Principal", - "bio": "Adam est développeur web et passionné de bitcoin. Il croit que l'argent sûr est la clé pour augmenter la prospérité planétaire. Il habite en Vancouver de Nord avec sa femme Chelsea et deux enfants." - }, - "cole": { - "name": "Cole Goodwin", - "position": "Professionel de Bitcoin", - "bio": "Cole est un professionel de bitcoin diplômé et un homme motivé avec passion pour la liberté. Il a découvert bitcoin en 2016 et l'a etudié en détail. Maintenant, il veux introduire le réseau Lightning à autant d'utilisateurs que possible." - } - } - }, - "error": { - "header": "Erreur", - "message": "S'il vous plait réessayez ou contactez l'assistance.", - "signIn": "Vous devez connecter pour continuer.", - "unrecognizedInput": "Donnée non reconnu" - }, - "faq": { - "header": "FAQ", - "cost": { - "question": "Combien cela coûte-t-il?", - "answer": "Recevoir des paiements sur votre compte est gratuit. Les retraits vers des portefeuilles externes entraînent des frais minimes qui varient en fonction des conditions du réseau. Nous facturons 0,1% pour convertir entre le Bitcoin lightning et le Bitcoin on-chain. Envoyer à d'autres comptes Coinos est gratuit." - }, - "compatibility": { - "question": "Ai-je besoin d'un dispositif ou d'un logiciel spécial?", - "answer": "Non, Coinos est une application web qui fonctionne partout où il y a Internet. Les commerçants pourraient l'utiliser sur une tablette ou afficher un code QR pour que les clients puissent le scanner avec leur téléphone." - }, - "safety": { - "question": "Quand mes fonds sont-ils réglés?", - "answer": "Les paiements lightning sont réglés instantanément. Vous pouvez retirer votre solde vers un autre portefeuille en quelques secondes. Les dépôts on-chain prennent en moyenne 5-10 minutes pour être confirmés." - }, - "pos": { - "question": "Coinos peut-il s'intégrer à mon PoS existant?", - "answer": "Nous recommandons d'entrer les ventes dans votre PoS existant comme des transactions en espèces." - }, - "bitcoin": { - "question": "Que puis-je faire avec le Bitcoin?", - "answer": "Dépensez-le chez d'autres commerçants ou payez vos dépenses avec en incitant votre personnel, vos fournisseurs et votre propriétaire à l'accepter." - } - }, - "footer": { - "followUs": "Suivez-Nous", - "twitter": "Twitter", - "github": "GitHub", - "company": "Entreprise", - "telegram": "Telegram", - "support": "Assistance", - "jobs": "Jobs", - "linktree": "Linktree", - "documentation": "Documentation" - }, - "howItWorks": { - "header": "Comment cela Fonctionne", - "step1": { - "header": "1. Créez votre compte", - "description": "Un nom d'utilateur et mot de passe est tout ce dont vous avez besoin pour commencer." - }, - "step2": { - "header": "2. Demande pour des paiements", - "description": "Comme vous faisiez normalement, mais avec bitcoin." - }, - "step3": { - "header": "3. C'est tout!", - "description": "Vous pouvez convertir en monnaie local n'importe quand." - } - }, - "landing": { - "header_before_icon": "Le", - "header_with_icon": "façon", - "header_after_icon": "le plus façile d'accepter bitcoin dans votre magasin.", - "subheader": "Agrandir votre clientèle et chiffre d'affaires en acceptant bitcoin avec un point de vente façile à utiliser et géré. Logiciel et matériel informatique non obligatoire.", - "info1": { - "title": "Paiements instantanés avec Lightning", - "description": "Le moment où votre client envoie un paiment, c'est là. Vous ne devez pas attendre les décisions des banques ou vous inquiéter pour des rejets de débit. Décisions instantanées, en secondes. Dites au revoir aux frais de transactions de 3% des cartes de crédit." - }, - "info2": { - "title": "Simple à utiliser, en garde par défaut", - "description1": "Juste entrer une quantité, partager le code QR et c'est tout!", - "description2": "Tes comptes sont en garde par défaut, qui élimine le nécessité de comprendre comment bitcoin/lightning fonctionnent. Nous réalisons le plus gros du travail pour que vous puissiez vous concentrer sur votre entreprise.", - "description3": "Vous avez toujours l'option de gérer vos clés." - }, - "info3": { - "title": "Personalisez-le comme vous voulez", - "description": "Personalisez votre point de vente, ou utilisez les réglages par défaut - c'est votre chois." - } - }, - "login": { - "username": "Nom d'utilisateur", - "password": "Mot de passe", - "email": "Courriel", - "passwordRecommendation": "Nous recommendons un mot de passe long et aléatoire, généré par un gestionnaire de mots de passe.", - "forgotUserOrPassword": "Oublié votre nom d'utilisateur ou mot de passe ?", - "haveAccount": "Avez-vous déjà un compte ?", - "noAccount": "Pas encore de compte ?", - "register": "Enregistrer", - "signIn": "Connexion", - "failed": "Echec de Connexion", - "optional": "Optionnel", - "token": "Jeton 2FA", - "forgot": "Mot de passe oublié?", - "reset": "Reinitialiser le mot de passe", - "submit": "Soumettre", - "newPassword": "Nouveau mot de passe" - }, - "nav": { - "startInSeconds": "Commence en Secondes", - "account": "Compte", - "signIn": "Connexion", - "signOut": "Déconnexion", - "dashboard": "Tableau de bord", - "settings": "Préférences", - "support": "Assistance", - "profile": "Profil", - "map": "Carte", - "merch": "Marchandise", - "about": "À Propos", - "docs": "Documents", - "messages": "Messages", - "funds": "Fonds" - }, - "invoice": { - "addTip": "Ajoutez un pourboire", - "addTipq": "Ajouter un pourboire?", - "done": "Fini", - "paymentSuccessful": "Paiement réussi!", - "invoice": "Facture", - "total": "Total", - "tip": "Pourboire" - }, - "jobs": { - "header": "Emplois", - "subheader": "Postes disponibles actuels", - "pitch1": "coinos recherche pour des développeurs pour joindre notre équipe croissant (temps plein ou partiel, télétravail OK)", - "pitch2": "Avez-vous hâte de travailler sur bitcoin open source? Regardez sur nos dépôts sur", - "github": "GitHub", - "pitch3": "Si vous pensez que vous pouvez exercer une influence positive, nous voulons que vous contribuez. Envoyer votre CV à" - }, - "user": { - "follow": "Suivre", - "remove": "Enlève", - "scanToPayBTC": "Scanner pour payer avec bitcoin", - "dashboard": { - "dashboard": "Tableau de bord", - "accountBalance": "Solde", - "conversionFeeWarning": "Il y a des frais de 1% pour convertir entre bitcoin, Liquid et Lightning.", - "fetchingRate": "cherchant taut de change...", - "send": "Envoie", - "withdraw": "Retire", - "go": "Allez", - "receive": "Reçois un Paiement", - "deposit": "Déposer", - "voucher": "Bon" - }, - "receive": { - "lessThan1BTCWarning": "S'il vous plaît utilisez moins d'un bitcoin.", - "showQR": "Voire le QR code" - }, - "settings": { - "header": "Préférences", - "ACCOUNT": "COMPTE", - "POINT_OF_SALE": "POINT DE VENTE", - "SECURITY": "SÉCURITÉ", - "locale": "Langue", - "username": "Nom d'Utilisateur", - "email": "Courriel", - "newPassword": "Nouveau Mot de Passe", - "emailNotifications": "Notifications par Courriel", - "emailNotificationsDescription": "Nous pouvons vous notifier par courriel quand votre compte change ou quand vous recevez des paiements", - "smsNotifications": "Notifications par SMS", - "smsNotificationsDescription": "Nous vous envoyons des notifications par texte quand c'est activé", - "theme": "Thème", - "themeDescription": "Sélectionnez des thèmes dèfauts.", - "localCurrency": "Monnaie Local", - "btcUnit": "Voire bitcoin en:", - "bitcoin": "bitcoin", - "satoshis": "Satoshis", - "securityPIN": "NIP de Sécurité", - "securityPINDescription": "Choisir un NIP de sécurité qui sera necessaire pour ouvrir tes préférences et pour envoyer des paiements sortants.", - "setPIN": "Choisir Votre NIP", - "autoLock": "Auto-Verouillage", - "autoLockDescription": "Ta conte activera une mode sécuritaire après une durée spécifiée:", - "twofa": "Authentification à 2 Facteurs", - "twofaDescription": "Ajoutez un autre niveau de sécurité par activez l'authentication à deux facteurs.", - "twofaSetup": "Activer A2F", - "bannerImage": "Image de Bandeau", - "profileImage": "Image de Profil", - "oneTimeCode": "Entrez mot de passe à usage unique", - "accountId": "Secret de conte", - "twofaDisable": "Désactivez A2F", - "about": "À Propos", - "aboutPlaceholder": "Un description court de vous ou votre entreprise (adresse, bio, etc.)", - "select": "Choisir", - "verifyPIN": "Verifiez votre NIP", - "enablePIN": "Activer NIP", - "disablePIN": "Désactiver NIP", - "saveSettings": "Sauvegarder Paramètres", - "tipPrompt": "Demande pour Pourboires", - "tipPromptDescription": "Demander les gens s'ils voulent ajouter un pourboire avant payer leurs factures", - "displayName": "Nom d'Utilisateur", - "minutes": "minutes", - "hour": "heure", - "hours": "heures", - "hideSeed": "Cache phrase mnémotechnique", - "revealSeed": "Montre phrase mnémotechnique", - "notifications": "Notifications de paiement", - "notificationsDesc": "Reçevez un courriel quand un paiement arrive à ta conte", - "seedPhrase": "Phrase mnémotechnique", - "nostrKeys": "Clé nostr", - "nostrDescription": "Votre clé nostr est utilisé pour signer et décrypter vos messages, gardez-le sauf ou quelqu'un peut se faire passer pour vous.", - "seedDescription": "Cette phrase mnémotechnique à 12 mots est utilisé pour générer votre clé privée et vos clés de portefeuille que vous controllez qui déterminez vos addresses de retrait automatique. Sauvegardez-le et jamais permettez à personne de le voir.", - "emailDescription": "Pour seulement reinitialisations de mot de passe et notifications de paiements seulement.", - "hideNsec": "Cache clé privée nostr", - "saved": "Paramètres sauvegardés!", - "verifying": "Courriel de verification envoyé.", - "verified": "Courriel verifié!", - "revealNsec": "Montre clé privée nostr", - "publishNip5": "Publie identité nostr", - "nip5a": "Utilise", - "nip5b": "comme votre addresse nostr verifié publiquement" - }, - "support": { - "header": "Assistance", - "email": "Courriel", - "accountName": "Nom d'utilisateur", - "message": "Message", - "send": "Envoie" - }, - "bitcoin": "Bitcoin", - "lightning": "Lightning", - "invoice": "Facture", - "unfollow": "Ne plus suivre", - "following": "Vous suivez", - "this": "Cette", - "lightningAddress": "Adresse de lightning", - "send": { - "contacts": "Contacts", - "scan": "Scannez", - "paste": "Collez", - "next": "Prochain", - "placeholder": "Collez une adresse de bitcoin, facture de lightning ou nom d'utilisateur coinos", - "makeQR": "QR" - }, - "requestPayment": "Demander un Paiement", - "welcome": "Bienvenue! Le solde de votre conte est vide. Vous pouvez commencer par déposer ou recevoir un paiement.", - "showBalance": "Montrer Solde", - "followers": "Abonnés", - "noNotes": "Pas de notes", - "message": "Envoyer", - "messages": "Messages", - "feed": "Flux", - "notes": "Notes", - "pay": "Payer", - "profilePage": "Page de profil", - "nostrPubkey": "Clé publique nostr" - }, - "news": { - "header": "Nouvelles", - "subheader": "Dernières Informations" - }, - "payments": { - "addFunds": "Ajouter d'argent", - "takeFunds": "Prendre d'argent", - "show": "Démontrer", - "hide": "Cacher", - "qr": "QR", - "copyLink": "Copier le Lien", - "copyText": "Copier le Texte", - "openLink": "Ouvrer le Portefeuille", - "moreOptions": "Plus d'options", - "total": "Total", - "gainLoss": "Hausse/Perte", - "presentValue": "Valuer au présent", - "amount": "Quantité", - "date": "Date", - "id": "ID de Transaction", - "details": "Détails de Transaction", - "header": "Paiements", - "preimage": "Preuve de paiement", - "type": "Type", - "time": "Heure", - "sent": "Envoyé", - "received": "Reçu", - "empty": "Vous n'avez pas de transactions.", - "send": "Envoyer", - "next": "Prochain", - "sendTo": "Envoyer à", - "to": "à", - "pay": "Payer", - "requesting": "demande", - "sentInvoiceTo": "Envoyé une facture à", - "sentRequestTo": "Demande envoyé!", - "pleasePay": "S'il vous plait payez", - "day": "Jour", - "week": "Semaine", - "month": "Mois", - "all": "Toutes", - "export": "Exporter", - "invoice": "Facture", - "readyToPay": "est prêt a payer", - "describeOrder": "Utiliser ce champ pour décrire votre commande", - "requestAnInvoice": "Demander une facture", - "submit": "Soumettre", - "isRequesting": "demande", - "invoiceFrom": "Facture de", - "awaiting": "Attendant", - "tapAnywhere": "Taper n'importe où pour continuer", - "from": "de", - "redeem": "Racheter", - "redeemed": "Racheté", - "redeemedBy": "Racheté par", - "sendMessage": "Écrire une message...", - "fundsClaimed": "Les fonds sont réclamés!", - "print": "Imprime", - "create": "Crée", - "fund": "Finance" - } + "404": { + "404": "404", + "pageNotFound": "Page non trouvée." + }, + "about": { + "header": "À Propos", + "locations": { + "header": "Établissements", + "description": "Il y a des entreprises qui acceptent bitcoin utilisant le point de vente coinos. Si vous utilisez notre appli, s'il vous plait fais-le-nous savoir!" + }, + "team": { + "header": "L'Équipe", + "adam": { + "name": "Adam Soltys", + "position": "Officier Technique Principal", + "bio": "Adam est développeur web et passionné de bitcoin. Il croit que l'argent sûr est la clé pour augmenter la prospérité planétaire. Il habite en Vancouver de Nord avec sa femme Chelsea et deux enfants." + }, + "cole": { + "name": "Cole Goodwin", + "position": "Professionel de Bitcoin", + "bio": "Cole est un professionel de bitcoin diplômé et un homme motivé avec passion pour la liberté. Il a découvert bitcoin en 2016 et l'a etudié en détail. Maintenant, il veux introduire le réseau Lightning à autant d'utilisateurs que possible." + } + } + }, + "error": { + "header": "Erreur", + "message": "S'il vous plait réessayez ou contactez l'assistance.", + "signIn": "Vous devez connecter pour continuer.", + "unrecognizedInput": "Donnée non reconnu" + }, + "faq": { + "header": "FAQ", + "cost": { + "question": "Combien cela coûte-t-il?", + "answer": "Recevoir des paiements sur votre compte est gratuit. Les retraits vers des portefeuilles externes entraînent des frais minimes qui varient en fonction des conditions du réseau. Nous facturons 0,1% pour convertir entre le Bitcoin lightning et le Bitcoin on-chain. Envoyer à d'autres comptes Coinos est gratuit." + }, + "compatibility": { + "question": "Ai-je besoin d'un dispositif ou d'un logiciel spécial?", + "answer": "Non, Coinos est une application web qui fonctionne partout où il y a Internet. Les commerçants pourraient l'utiliser sur une tablette ou afficher un code QR pour que les clients puissent le scanner avec leur téléphone." + }, + "safety": { + "question": "Quand mes fonds sont-ils réglés?", + "answer": "Les paiements lightning sont réglés instantanément. Vous pouvez retirer votre solde vers un autre portefeuille en quelques secondes. Les dépôts on-chain prennent en moyenne 5-10 minutes pour être confirmés." + }, + "pos": { + "question": "Coinos peut-il s'intégrer à mon PoS existant?", + "answer": "Nous recommandons d'entrer les ventes dans votre PoS existant comme des transactions en espèces." + }, + "bitcoin": { + "question": "Que puis-je faire avec le Bitcoin?", + "answer": "Dépensez-le chez d'autres commerçants ou payez vos dépenses avec en incitant votre personnel, vos fournisseurs et votre propriétaire à l'accepter." + } + }, + "footer": { + "followUs": "Suivez-Nous", + "twitter": "Twitter", + "github": "GitHub", + "company": "Entreprise", + "telegram": "Telegram", + "support": "Assistance", + "jobs": "Jobs", + "linktree": "Linktree", + "documentation": "Documentation" + }, + "howItWorks": { + "header": "Comment cela Fonctionne", + "step1": { + "header": "1. Créez votre compte", + "description": "Un nom d'utilateur et mot de passe est tout ce dont vous avez besoin pour commencer." + }, + "step2": { + "header": "2. Demande pour des paiements", + "description": "Comme vous faisiez normalement, mais avec bitcoin." + }, + "step3": { + "header": "3. C'est tout!", + "description": "Vous pouvez convertir en monnaie local n'importe quand." + } + }, + "landing": { + "header_before_icon": "Le", + "header_with_icon": "façon", + "header_after_icon": "le plus façile d'accepter bitcoin dans votre magasin.", + "subheader": "Agrandir votre clientèle et chiffre d'affaires en acceptant bitcoin avec un point de vente façile à utiliser et géré. Logiciel et matériel informatique non obligatoire.", + "info1": { + "title": "Paiements instantanés avec Lightning", + "description": "Le moment où votre client envoie un paiment, c'est là. Vous ne devez pas attendre les décisions des banques ou vous inquiéter pour des rejets de débit. Décisions instantanées, en secondes. Dites au revoir aux frais de transactions de 3% des cartes de crédit." + }, + "info2": { + "title": "Simple à utiliser, en garde par défaut", + "description1": "Juste entrer une quantité, partager le code QR et c'est tout!", + "description2": "Tes comptes sont en garde par défaut, qui élimine le nécessité de comprendre comment bitcoin/lightning fonctionnent. Nous réalisons le plus gros du travail pour que vous puissiez vous concentrer sur votre entreprise.", + "description3": "Vous avez toujours l'option de gérer vos clés." + }, + "info3": { + "title": "Personalisez-le comme vous voulez", + "description": "Personalisez votre point de vente, ou utilisez les réglages par défaut - c'est votre chois." + } + }, + "login": { + "username": "Nom d'utilisateur", + "password": "Mot de passe", + "email": "Courriel", + "passwordRecommendation": "Nous recommendons un mot de passe long et aléatoire, généré par un gestionnaire de mots de passe.", + "forgotUserOrPassword": "Oublié votre nom d'utilisateur ou mot de passe ?", + "haveAccount": "Avez-vous déjà un compte ?", + "noAccount": "Pas encore de compte ?", + "register": "Enregistrer", + "signIn": "Connexion", + "failed": "Echec de Connexion", + "optional": "Optionnel", + "token": "Jeton 2FA", + "forgot": "Mot de passe oublié?", + "reset": "Reinitialiser le mot de passe", + "submit": "Soumettre", + "newPassword": "Nouveau mot de passe" + }, + "nav": { + "startInSeconds": "Commence en Secondes", + "account": "Compte", + "signIn": "Connexion", + "signOut": "Déconnexion", + "dashboard": "Tableau de bord", + "settings": "Préférences", + "support": "Assistance", + "profile": "Profil", + "map": "Carte", + "merch": "Marchandise", + "about": "À Propos", + "docs": "Documents", + "messages": "Messages", + "funds": "Fonds" + }, + "invoice": { + "addTip": "Ajoutez un pourboire", + "addTipq": "Ajouter un pourboire?", + "done": "Fini", + "paymentSuccessful": "Paiement réussi!", + "invoice": "Facture", + "total": "Total", + "tip": "Pourboire" + }, + "jobs": { + "header": "Emplois", + "subheader": "Postes disponibles actuels", + "pitch1": "coinos recherche pour des développeurs pour joindre notre équipe croissant (temps plein ou partiel, télétravail OK)", + "pitch2": "Avez-vous hâte de travailler sur bitcoin open source? Regardez sur nos dépôts sur", + "github": "GitHub", + "pitch3": "Si vous pensez que vous pouvez exercer une influence positive, nous voulons que vous contribuez. Envoyer votre CV à" + }, + "user": { + "follow": "Suivre", + "remove": "Enlève", + "scanToPayBTC": "Scanner pour payer avec bitcoin", + "dashboard": { + "dashboard": "Tableau de bord", + "accountBalance": "Solde", + "conversionFeeWarning": "Il y a des frais de 1% pour convertir entre bitcoin, Liquid et Lightning.", + "fetchingRate": "cherchant taut de change...", + "send": "Envoie", + "withdraw": "Retire", + "go": "Allez", + "receive": "Reçois un Paiement", + "deposit": "Déposer", + "voucher": "Bon" + }, + "receive": { + "lessThan1BTCWarning": "S'il vous plaît utilisez moins d'un bitcoin.", + "showQR": "Voire le QR code" + }, + "settings": { + "header": "Préférences", + "ACCOUNT": "COMPTE", + "POINT_OF_SALE": "POINT DE VENTE", + "SECURITY": "SÉCURITÉ", + "locale": "Langue", + "username": "Nom d'Utilisateur", + "email": "Courriel", + "newPassword": "Nouveau Mot de Passe", + "emailNotifications": "Notifications par Courriel", + "emailNotificationsDescription": "Nous pouvons vous notifier par courriel quand votre compte change ou quand vous recevez des paiements", + "smsNotifications": "Notifications par SMS", + "smsNotificationsDescription": "Nous vous envoyons des notifications par texte quand c'est activé", + "theme": "Thème", + "themeDescription": "Sélectionnez des thèmes dèfauts.", + "localCurrency": "Monnaie Local", + "btcUnit": "Voire bitcoin en:", + "bitcoin": "bitcoin", + "satoshis": "Satoshis", + "securityPIN": "NIP de Sécurité", + "securityPINDescription": "Choisir un NIP de sécurité qui sera necessaire pour ouvrir tes préférences et pour envoyer des paiements sortants.", + "setPIN": "Choisir Votre NIP", + "autoLock": "Auto-Verouillage", + "autoLockDescription": "Ta conte activera une mode sécuritaire après une durée spécifiée:", + "twofa": "Authentification à 2 Facteurs", + "twofaDescription": "Ajoutez un autre niveau de sécurité par activez l'authentication à deux facteurs.", + "twofaSetup": "Activer A2F", + "bannerImage": "Image de Bandeau", + "profileImage": "Image de Profil", + "oneTimeCode": "Entrez mot de passe à usage unique", + "accountId": "Secret de conte", + "twofaDisable": "Désactivez A2F", + "about": "À Propos", + "aboutPlaceholder": "Un description court de vous ou votre entreprise (adresse, bio, etc.)", + "select": "Choisir", + "verifyPIN": "Verifiez votre NIP", + "enablePIN": "Activer NIP", + "disablePIN": "Désactiver NIP", + "saveSettings": "Sauvegarder Paramètres", + "tipPrompt": "Demande pour Pourboires", + "tipPromptDescription": "Demander les gens s'ils voulent ajouter un pourboire avant payer leurs factures", + "displayName": "Nom d'Utilisateur", + "minutes": "minutes", + "hour": "heure", + "hours": "heures", + "hideSeed": "Cache phrase mnémotechnique", + "revealSeed": "Montre phrase mnémotechnique", + "notifications": "Notifications de paiement", + "notificationsDesc": "Reçevez un courriel quand un paiement arrive à ta conte", + "seedPhrase": "Phrase mnémotechnique", + "nostrKeys": "Clé nostr", + "nostrDescription": "Votre clé nostr est utilisé pour signer et décrypter vos messages, gardez-le sauf ou quelqu'un peut se faire passer pour vous.", + "seedDescription": "Cette phrase mnémotechnique à 12 mots est utilisé pour générer votre clé privée et vos clés de portefeuille que vous controllez qui déterminez vos addresses de retrait automatique. Sauvegardez-le et jamais permettez à personne de le voir.", + "emailDescription": "Pour seulement reinitialisations de mot de passe et notifications de paiements seulement.", + "hideNsec": "Cache clé privée nostr", + "saved": "Paramètres sauvegardés!", + "verifying": "Courriel de verification envoyé.", + "verified": "Courriel verifié!", + "revealNsec": "Montre clé privée nostr", + "publishNip5": "Publie identité nostr", + "nip5a": "Utilise", + "nip5b": "comme votre addresse nostr verifié publiquement" + }, + "support": { + "header": "Assistance", + "email": "Courriel", + "accountName": "Nom d'utilisateur", + "message": "Message", + "send": "Envoie" + }, + "bitcoin": "Bitcoin", + "lightning": "Lightning", + "invoice": "Facture", + "unfollow": "Ne plus suivre", + "following": "Vous suivez", + "this": "Cette", + "lightningAddress": "Adresse de lightning", + "send": { + "contacts": "Contacts", + "scan": "Scannez", + "paste": "Collez", + "next": "Prochain", + "placeholder": "Collez une adresse de bitcoin, facture de lightning ou nom d'utilisateur coinos", + "makeQR": "QR" + }, + "requestPayment": "Demander un Paiement", + "welcome": "Bienvenue! Le solde de votre conte est vide. Vous pouvez commencer par déposer ou recevoir un paiement.", + "showBalance": "Montrer Solde", + "followers": "Abonnés", + "noNotes": "Pas de notes", + "message": "Envoyer", + "messages": "Messages", + "feed": "Flux", + "notes": "Notes", + "pay": "Payer", + "profilePage": "Page de profil", + "nostrPubkey": "Clé publique nostr" + }, + "news": { + "header": "Nouvelles", + "subheader": "Dernières Informations" + }, + "payments": { + "addFunds": "Ajouter d'argent", + "takeFunds": "Prendre d'argent", + "show": "Démontrer", + "hide": "Cacher", + "qr": "QR", + "copyLink": "Copier le Lien", + "copyText": "Copier le Texte", + "openLink": "Ouvrer le Portefeuille", + "moreOptions": "Plus d'options", + "total": "Total", + "gainLoss": "Hausse/Perte", + "presentValue": "Valuer au présent", + "amount": "Quantité", + "date": "Date", + "id": "ID de Transaction", + "details": "Détails de Transaction", + "header": "Paiements", + "preimage": "Preuve de paiement", + "type": "Type", + "time": "Heure", + "sent": "Envoyé", + "received": "Reçu", + "empty": "Vous n'avez pas de transactions.", + "send": "Envoyer", + "next": "Prochain", + "sendTo": "Envoyer à", + "to": "à", + "pay": "Payer", + "requesting": "demande", + "sentInvoiceTo": "Envoyé une facture à", + "sentRequestTo": "Demande envoyé!", + "pleasePay": "S'il vous plait payez", + "day": "Jour", + "week": "Semaine", + "month": "Mois", + "all": "Toutes", + "export": "Exporter", + "invoice": "Facture", + "readyToPay": "est prêt a payer", + "describeOrder": "Utiliser ce champ pour décrire votre commande", + "requestAnInvoice": "Demander une facture", + "submit": "Soumettre", + "isRequesting": "demande", + "invoiceFrom": "Facture de", + "awaiting": "Attendant", + "tapAnywhere": "Taper n'importe où pour continuer", + "from": "de", + "redeem": "Racheter", + "redeemed": "Racheté", + "redeemedBy": "Racheté par", + "sendMessage": "Écrire une message...", + "fundsClaimed": "Les fonds sont réclamés!", + "print": "Imprime", + "create": "Crée", + "fund": "Finance" + } } diff --git a/src/routes/(app)/+error.svelte b/src/routes/(app)/+error.svelte index b5a5e139..6ce7979c 100644 --- a/src/routes/(app)/+error.svelte +++ b/src/routes/(app)/+error.svelte @@ -27,7 +27,8 @@
diff --git a/src/routes/(app)/[username]/(profile)/request/+page.svelte b/src/routes/(app)/[username]/(profile)/request/+page.svelte index 373a1302..a07ee914 100644 --- a/src/routes/(app)/[username]/(profile)/request/+page.svelte +++ b/src/routes/(app)/[username]/(profile)/request/+page.svelte @@ -26,7 +26,8 @@
diff --git a/src/routes/(app)/[username]/card/[serial]/+page.svelte b/src/routes/(app)/[username]/card/[serial]/+page.svelte index 1792b443..1d11ebee 100644 --- a/src/routes/(app)/[username]/card/[serial]/+page.svelte +++ b/src/routes/(app)/[username]/card/[serial]/+page.svelte @@ -13,13 +13,15 @@
diff --git a/src/routes/(app)/[username]/generate/+page.svelte b/src/routes/(app)/[username]/generate/+page.svelte index 0c83fad4..b9b077a3 100644 --- a/src/routes/(app)/[username]/generate/+page.svelte +++ b/src/routes/(app)/[username]/generate/+page.svelte @@ -62,7 +62,9 @@ {/if}
-

Generating new account keys

+

+ Generating new account keys +

diff --git a/src/routes/(app)/[username]/invoice/[id]/+layout.server.js b/src/routes/(app)/[username]/invoice/[id]/+layout.server.js index b887d407..c69da78a 100644 --- a/src/routes/(app)/[username]/invoice/[id]/+layout.server.js +++ b/src/routes/(app)/[username]/invoice/[id]/+layout.server.js @@ -27,10 +27,10 @@ export async function load({ depends, params, url, parent }) { (amount > 0 && (pending >= amount || received >= amount)); if (paid && !url.pathname.endsWith("paid")) { redirect( - 307, - `/${params.username}/invoice/${id}/paid` + - (options ? "?options=true" : "") - ); + 307, + `/${params.username}/invoice/${id}/paid` + + (options ? "?options=true" : "") + ); } let sm = Qr.drawImg(invoice.text || "", { size: 300 }); diff --git a/src/routes/(app)/[username]/invoice/[id]/+page.svelte b/src/routes/(app)/[username]/invoice/[id]/+page.svelte index 13c75fca..0ff1c21c 100644 --- a/src/routes/(app)/[username]/invoice/[id]/+page.svelte +++ b/src/routes/(app)/[username]/invoice/[id]/+page.svelte @@ -130,13 +130,17 @@ class="rounded-full border py-2 px-4 font-bold hover:opacity-80 w-full" class:bg-black={type === types.lightning} class:text-white={type === types.lightning} - on:click={toggleType}> ⚡️ Lightning + on:click={toggleType} + > + ⚡️ Lightning +
@@ -211,18 +217,16 @@
diff --git a/src/routes/(app)/[username]/settings/[...tab]/+page.svelte b/src/routes/(app)/[username]/settings/[...tab]/+page.svelte index 714ed8db..54a2d71c 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/+page.svelte +++ b/src/routes/(app)/[username]/settings/[...tab]/+page.svelte @@ -223,7 +223,8 @@ bind:this={submit} type="submit" class="border-2 border-black rounded-xl font-semibold mx-auto py-3 w-40 hover:opacity-80" - class:bg-black={submitting}> + class:bg-black={submitting} + > {#if submitting} {:else} diff --git a/src/routes/(app)/[username]/settings/[...tab]/_account.svelte b/src/routes/(app)/[username]/settings/[...tab]/_account.svelte index 773485f0..15ee7b0c 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/_account.svelte +++ b/src/routes/(app)/[username]/settings/[...tab]/_account.svelte @@ -109,7 +109,6 @@
-
{$t("user.settings.profileImage")} diff --git a/src/routes/(app)/[username]/settings/[...tab]/_pos.svelte b/src/routes/(app)/[username]/settings/[...tab]/_pos.svelte index 0e4301c4..539cfd5e 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/_pos.svelte +++ b/src/routes/(app)/[username]/settings/[...tab]/_pos.svelte @@ -25,7 +25,8 @@ + value={parseInt(user.locktime)} + > diff --git a/src/routes/(app)/[username]/settings/[...tab]/_shopify.svelte b/src/routes/(app)/[username]/settings/[...tab]/_shopify.svelte index 870803fb..0266fa9c 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/_shopify.svelte +++ b/src/routes/(app)/[username]/settings/[...tab]/_shopify.svelte @@ -28,7 +28,9 @@
admin.shopify.com/store/
+ > + admin.shopify.com/store/ +
$$ @@ -94,9 +93,8 @@ CVC/CVV @@ -115,7 +113,8 @@
@@ -71,7 +72,8 @@
@@ -81,13 +83,15 @@
diff --git a/src/routes/(app)/fund/[id]/withdraw/+page.svelte b/src/routes/(app)/fund/[id]/withdraw/+page.svelte index e7c1d852..7af07e38 100644 --- a/src/routes/(app)/fund/[id]/withdraw/+page.svelte +++ b/src/routes/(app)/fund/[id]/withdraw/+page.svelte @@ -47,7 +47,8 @@
diff --git a/src/routes/(app)/launch/purchase/+page.svelte b/src/routes/(app)/launch/purchase/+page.svelte index 3af3b186..49a51973 100644 --- a/src/routes/(app)/launch/purchase/+page.svelte +++ b/src/routes/(app)/launch/purchase/+page.svelte @@ -21,7 +21,9 @@

Purchase Ticket

+ > + Purchase Ticket +
@@ -43,21 +46,25 @@ {:else}

Payment Options

+ > + Payment Options +
diff --git a/src/routes/(app)/launch/purchase/card/+page.server.js b/src/routes/(app)/launch/purchase/card/+page.server.js index 416a66e4..9fb36b71 100644 --- a/src/routes/(app)/launch/purchase/card/+page.server.js +++ b/src/routes/(app)/launch/purchase/card/+page.server.js @@ -43,8 +43,7 @@ export const actions = { method, }).then((r) => r.json()); - if (status !== "succeeded") - error(500, { message: "Card payment failed" }); + if (status !== "succeeded") error(500, { message: "Card payment failed" }); let asset = await createTicket(cookies, form.get("username")); redirect(307, `/launch/thanks/${asset}`); diff --git a/src/routes/(app)/launch/purchase/card/+page.svelte b/src/routes/(app)/launch/purchase/card/+page.svelte index d7ef830d..6d33c87f 100644 --- a/src/routes/(app)/launch/purchase/card/+page.svelte +++ b/src/routes/(app)/launch/purchase/card/+page.svelte @@ -48,9 +48,8 @@ CVC/CVV @@ -68,7 +67,8 @@ diff --git a/src/routes/(app)/launch/ticket/+page.svelte b/src/routes/(app)/launch/ticket/+page.svelte index a4888727..6b16e804 100644 --- a/src/routes/(app)/launch/ticket/+page.svelte +++ b/src/routes/(app)/launch/ticket/+page.svelte @@ -7,7 +7,9 @@

Your Ticket

+ > + Your Ticket +

We've minted your ticket as an diff --git a/src/routes/(app)/login/+page.svelte b/src/routes/(app)/login/+page.svelte index b729d70f..cebbf41c 100644 --- a/src/routes/(app)/login/+page.svelte +++ b/src/routes/(app)/login/+page.svelte @@ -145,15 +145,14 @@

@@ -162,7 +161,8 @@ type="submit" class="bg-black text-white w-full rounded-2xl p-4 font-semibold hover:opacity-80" disabled={loading} - bind:this={btn}> + bind:this={btn} + > {#if loading} {:else} @@ -175,7 +175,8 @@ {$t("login.haveAccount")} + class="block md:inline text-black underline underline-offset-4 hover:opacity-80" + > {$t("login.register")}

diff --git a/src/routes/(app)/register/+page.server.js b/src/routes/(app)/register/+page.server.js index cdb5736e..318f6b98 100644 --- a/src/routes/(app)/register/+page.server.js +++ b/src/routes/(app)/register/+page.server.js @@ -15,15 +15,8 @@ export const actions = { let ip = request.headers.get("cf-connecting-ip"); let form = await fd(request); - let { - profile, - username, - password, - cipher, - salt, - pubkey, - loginRedirect, - } = form; + let { profile, username, password, cipher, salt, pubkey, loginRedirect } = + form; let user = { profile, username, password, cipher, salt, pubkey }; let error; diff --git a/src/routes/(app)/register/+page.svelte b/src/routes/(app)/register/+page.svelte index ef057fcf..5783059a 100644 --- a/src/routes/(app)/register/+page.svelte +++ b/src/routes/(app)/register/+page.svelte @@ -175,12 +175,14 @@
@@ -236,7 +240,8 @@ type="button" on:click={refresh} class="absolute right-0 top-4" - tabindex="5"> + tabindex="5" + >
@@ -271,7 +276,8 @@ type="button" tabindex="4" on:click={() => (revealPassword = !revealPassword)} - class="absolute right-0 top-4"> + class="absolute right-0 top-4" + >
@@ -285,7 +291,8 @@ type="submit" class="bg-black text-white w-full rounded-2xl p-4 font-semibold hover:opacity-80" disabled={loading} - bind:this={btn}> + bind:this={btn} + > {#if loading} {:else} @@ -298,7 +305,8 @@ {$t("login.haveAccount")} + class="block md:inline text-black underline underline-offset-4 hover:opacity-80" + > {$t("login.signIn")}

diff --git a/src/routes/(app)/reset/[code]/+page.svelte b/src/routes/(app)/reset/[code]/+page.svelte index 83e860ae..d93e8bdf 100644 --- a/src/routes/(app)/reset/[code]/+page.svelte +++ b/src/routes/(app)/reset/[code]/+page.svelte @@ -57,17 +57,23 @@
-
A new seed phrase will be generated for your account. You'll need to import your old seed phrase if you want to use the same nostr profile and savings account as before.
+
+ A new seed phrase will be generated for your account. You'll need to + import your old seed phrase if you want to use the same nostr profile + and savings account as before. +
+ on:click={back} + > + Cancel +
+Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3 From f29464d9300b51210191ba56e33f6f6b64df3497 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Thu, 28 Dec 2023 22:45:59 -0800 Subject: liquid --- .../[username]/invoice/[id]/+layout.server.js | 2 +- .../(app)/[username]/invoice/[id]/+page.svelte | 109 ++++++++++----------- .../[username]/invoice/[id]/paid/+page.svelte | 17 +++- .../[username]/payments/[...page]/+page.svelte | 8 ++ .../[username]/receive/[...param]/+page.svelte | 2 +- src/routes/(app)/payment/[id]/+page.svelte | 5 +- 6 files changed, 77 insertions(+), 66 deletions(-) (limited to 'src') diff --git a/src/routes/(app)/[username]/invoice/[id]/+layout.server.js b/src/routes/(app)/[username]/invoice/[id]/+layout.server.js index c69da78a..46246724 100644 --- a/src/routes/(app)/[username]/invoice/[id]/+layout.server.js +++ b/src/routes/(app)/[username]/invoice/[id]/+layout.server.js @@ -33,7 +33,7 @@ export async function load({ depends, params, url, parent }) { ); } - let sm = Qr.drawImg(invoice.text || "", { size: 300 }); + let sm = Qr.drawImg(invoice.text || "", { size: 380 }); return { id, invoice, sm, lg: sm }; } diff --git a/src/routes/(app)/[username]/invoice/[id]/+page.svelte b/src/routes/(app)/[username]/invoice/[id]/+page.svelte index 9193968a..709f214b 100644 --- a/src/routes/(app)/[username]/invoice/[id]/+page.svelte +++ b/src/routes/(app)/[username]/invoice/[id]/+page.svelte @@ -123,17 +123,49 @@ }; -
-
- +
+ {#if showQr} + + {txt} + + {/if} + + + {#if amount > 0} +
+
+ {f(amountFiat, currency)} + {#if tip} + + +{f(tip * (rate / sats), currency)} + + {/if} +
+
+ {`${sat(amount)}`} + + {#if tip} + + +{sat(tip)} + + {/if} +
+
+ {/if} + +
-
- - {#if showQr} -
- - - {/if} - {#if amount > 0} -
-
- {f(amountFiat, currency)} - - {#if tip} - - +{f(tip * (rate / sats), currency)} - - {/if} -
-
- {`${sat(amount)}`} + - {#if tip} - - +{sat(tip)} - - {/if} -
-
- {/if} +
diff --git a/src/routes/(app)/[username]/invoice/[id]/paid/+page.svelte b/src/routes/(app)/[username]/invoice/[id]/paid/+page.svelte index 9740dc92..ee00214c 100644 --- a/src/routes/(app)/[username]/invoice/[id]/paid/+page.svelte +++ b/src/routes/(app)/[username]/invoice/[id]/paid/+page.svelte @@ -8,21 +8,25 @@ export let data; let amount, currency, rate, received, pending, tip, user, id; - $: data && + $: update(data) + let update = (data) => { ({ amount, currency, rate, received, pending, tip, user, id } = data.invoice); + } toast.pop(0);
-
- -
{#if received} +
+ +
+

{$t("invoice.paymentSuccessful")}

+

{f(fiat(received - tip, rate), currency)} {#if tip} @@ -43,6 +47,10 @@ {/if} {#if pending} +
+ +
+

Payment detected

{f(fiat(pending - tip, rate), currency)} @@ -50,6 +58,7 @@ + {f(fiat(tip, rate), currency)} {/if}

+

⚡️{s(pending - tip)} {#if tip} diff --git a/src/routes/(app)/[username]/payments/[...page]/+page.svelte b/src/routes/(app)/[username]/payments/[...page]/+page.svelte index 1f20ea5c..3237011b 100644 --- a/src/routes/(app)/[username]/payments/[...page]/+page.svelte +++ b/src/routes/(app)/[username]/payments/[...page]/+page.svelte @@ -220,6 +220,14 @@ alt="Bitcoin" />

+ {:else if p.type === types.liquid} +
+ Liquid +
{/if}
diff --git a/src/routes/(app)/[username]/receive/[...param]/+page.svelte b/src/routes/(app)/[username]/receive/[...param]/+page.svelte index 6d8939a9..7a27bd67 100644 --- a/src/routes/(app)/[username]/receive/[...param]/+page.svelte +++ b/src/routes/(app)/[username]/receive/[...param]/+page.svelte @@ -28,7 +28,7 @@
diff --git a/src/routes/(app)/payment/[id]/+page.svelte b/src/routes/(app)/payment/[id]/+page.svelte index 15c17a00..49af6f70 100644 --- a/src/routes/(app)/payment/[id]/+page.svelte +++ b/src/routes/(app)/payment/[id]/+page.svelte @@ -136,7 +136,7 @@
- {#if type === "bitcoin"} + {#if type === "bitcoin" || type === "liquid"}
Txid
@@ -146,7 +146,8 @@
-- cgit v1.2.3 From 0d695d5e15c0e498dec7ed1a983e3c866d9908b1 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Thu, 28 Dec 2023 22:46:13 -0800 Subject: format --- src/locales/fr.json | 672 ++++++++++----------- .../(app)/[username]/invoice/[id]/+page.svelte | 24 +- .../[username]/invoice/[id]/paid/+page.svelte | 14 +- src/routes/(app)/payment/[id]/+page.svelte | 2 +- 4 files changed, 359 insertions(+), 353 deletions(-) (limited to 'src') diff --git a/src/locales/fr.json b/src/locales/fr.json index 8f6448e9..e274acef 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -1,338 +1,338 @@ { - "404": { - "404": "404", - "pageNotFound": "Page non trouvée." - }, - "about": { - "header": "À Propos", - "locations": { - "header": "Établissements", - "description": "Il y a des entreprises qui acceptent bitcoin utilisant le point de vente coinos. Si vous utilisez notre appli, s'il vous plait
fais-le-nous savoir!" - }, - "team": { - "header": "L'Équipe", - "adam": { - "name": "Adam Soltys", - "position": "Officier Technique Principal", - "bio": "Adam est développeur web et passionné de bitcoin. Il croit que l'argent sûr est la clé pour augmenter la prospérité planétaire. Il habite en Vancouver de Nord avec sa femme Chelsea et deux enfants." - }, - "cole": { - "name": "Cole Goodwin", - "position": "Professionel de Bitcoin", - "bio": "Cole est un professionel de bitcoin diplômé et un homme motivé avec passion pour la liberté. Il a découvert bitcoin en 2016 et l'a etudié en détail. Maintenant, il veux introduire le réseau Lightning à autant d'utilisateurs que possible." - } - } - }, - "error": { - "header": "Erreur", - "message": "S'il vous plait réessayez ou contactez l'assistance.", - "signIn": "Vous devez connecter pour continuer.", - "unrecognizedInput": "Donnée non reconnu" - }, - "faq": { - "header": "FAQ", - "cost": { - "question": "Combien cela coûte-t-il?", - "answer": "Recevoir des paiements sur votre compte est gratuit. Les retraits vers des portefeuilles externes entraînent des frais minimes qui varient en fonction des conditions du réseau. Nous facturons 0,1% pour convertir entre le Bitcoin lightning et le Bitcoin on-chain. Envoyer à d'autres comptes Coinos est gratuit." - }, - "compatibility": { - "question": "Ai-je besoin d'un dispositif ou d'un logiciel spécial?", - "answer": "Non, Coinos est une application web qui fonctionne partout où il y a Internet. Les commerçants pourraient l'utiliser sur une tablette ou afficher un code QR pour que les clients puissent le scanner avec leur téléphone." - }, - "safety": { - "question": "Quand mes fonds sont-ils réglés?", - "answer": "Les paiements lightning sont réglés instantanément. Vous pouvez retirer votre solde vers un autre portefeuille en quelques secondes. Les dépôts on-chain prennent en moyenne 5-10 minutes pour être confirmés." - }, - "pos": { - "question": "Coinos peut-il s'intégrer à mon PoS existant?", - "answer": "Nous recommandons d'entrer les ventes dans votre PoS existant comme des transactions en espèces." - }, - "bitcoin": { - "question": "Que puis-je faire avec le Bitcoin?", - "answer": "Dépensez-le chez d'autres commerçants ou payez vos dépenses avec en incitant votre personnel, vos fournisseurs et votre propriétaire à l'accepter." - } - }, - "footer": { - "followUs": "Suivez-Nous", - "twitter": "Twitter", - "github": "GitHub", - "company": "Entreprise", - "telegram": "Telegram", - "support": "Assistance", - "jobs": "Jobs", - "linktree": "Linktree", - "documentation": "Documentation" - }, - "howItWorks": { - "header": "Comment cela Fonctionne", - "step1": { - "header": "1. Créez votre compte", - "description": "Un nom d'utilateur et mot de passe est tout ce dont vous avez besoin pour commencer." - }, - "step2": { - "header": "2. Demande pour des paiements", - "description": "Comme vous faisiez normalement, mais avec bitcoin." - }, - "step3": { - "header": "3. C'est tout!", - "description": "Vous pouvez convertir en monnaie local n'importe quand." - } - }, - "landing": { - "header_before_icon": "Le", - "header_with_icon": "façon", - "header_after_icon": "le plus façile d'accepter bitcoin dans votre magasin.", - "subheader": "Agrandir votre clientèle et chiffre d'affaires en acceptant bitcoin avec un point de vente façile à utiliser et géré. Logiciel et matériel informatique non obligatoire.", - "info1": { - "title": "Paiements instantanés avec Lightning", - "description": "Le moment où votre client envoie un paiment, c'est là. Vous ne devez pas attendre les décisions des banques ou vous inquiéter pour des rejets de débit. Décisions instantanées, en secondes. Dites au revoir aux frais de transactions de 3% des cartes de crédit." - }, - "info2": { - "title": "Simple à utiliser, en garde par défaut", - "description1": "Juste entrer une quantité, partager le code QR et c'est tout!", - "description2": "Tes comptes sont en garde par défaut, qui élimine le nécessité de comprendre comment bitcoin/lightning fonctionnent. Nous réalisons le plus gros du travail pour que vous puissiez vous concentrer sur votre entreprise.", - "description3": "Vous avez toujours l'option de gérer vos clés." - }, - "info3": { - "title": "Personalisez-le comme vous voulez", - "description": "Personalisez votre point de vente, ou utilisez les réglages par défaut - c'est votre chois." - } - }, - "login": { - "username": "Nom d'utilisateur", - "password": "Mot de passe", - "email": "Courriel", - "passwordRecommendation": "Nous recommendons un mot de passe long et aléatoire, généré par un gestionnaire de mots de passe.", - "forgotUserOrPassword": "Oublié votre nom d'utilisateur ou mot de passe ?", - "haveAccount": "Avez-vous déjà un compte ?", - "noAccount": "Pas encore de compte ?", - "register": "Enregistrer", - "signIn": "Connexion", - "failed": "Echec de Connexion", - "optional": "Optionnel", - "token": "Jeton 2FA", - "forgot": "Mot de passe oublié?", - "reset": "Reinitialiser le mot de passe", - "submit": "Soumettre", - "newPassword": "Nouveau mot de passe" - }, - "nav": { - "startInSeconds": "Commence en Secondes", - "account": "Compte", - "signIn": "Connexion", - "signOut": "Déconnexion", - "dashboard": "Tableau de bord", - "settings": "Préférences", - "support": "Assistance", - "profile": "Profil", - "map": "Carte", - "merch": "Marchandise", - "about": "À Propos", - "docs": "Documents", - "messages": "Messages", - "funds": "Fonds" - }, - "invoice": { - "addTip": "Ajoutez un pourboire", - "addTipq": "Ajouter un pourboire?", - "done": "Fini", - "paymentSuccessful": "Paiement réussi!", - "invoice": "Facture", - "total": "Total", - "tip": "Pourboire" - }, - "jobs": { - "header": "Emplois", - "subheader": "Postes disponibles actuels", - "pitch1": "coinos recherche pour des développeurs pour joindre notre équipe croissant (temps plein ou partiel, télétravail OK)", - "pitch2": "Avez-vous hâte de travailler sur bitcoin open source? Regardez sur nos dépôts sur", - "github": "GitHub", - "pitch3": "Si vous pensez que vous pouvez exercer une influence positive, nous voulons que vous contribuez. Envoyer votre CV à" - }, - "user": { - "follow": "Suivre", - "remove": "Enlève", - "scanToPayBTC": "Scanner pour payer avec bitcoin", - "dashboard": { - "dashboard": "Tableau de bord", - "accountBalance": "Solde", - "conversionFeeWarning": "Il y a des frais de 1% pour convertir entre bitcoin, Liquid et Lightning.", - "fetchingRate": "cherchant taut de change...", - "send": "Envoie", - "withdraw": "Retire", - "go": "Allez", - "receive": "Reçois un Paiement", - "deposit": "Déposer", - "voucher": "Bon" - }, - "receive": { - "lessThan1BTCWarning": "S'il vous plaît utilisez moins d'un bitcoin.", - "showQR": "Voire le QR code" - }, - "settings": { - "header": "Préférences", - "ACCOUNT": "COMPTE", - "POINT_OF_SALE": "POINT DE VENTE", - "SECURITY": "SÉCURITÉ", - "locale": "Langue", - "username": "Nom d'Utilisateur", - "email": "Courriel", - "newPassword": "Nouveau Mot de Passe", - "emailNotifications": "Notifications par Courriel", - "emailNotificationsDescription": "Nous pouvons vous notifier par courriel quand votre compte change ou quand vous recevez des paiements", - "smsNotifications": "Notifications par SMS", - "smsNotificationsDescription": "Nous vous envoyons des notifications par texte quand c'est activé", - "theme": "Thème", - "themeDescription": "Sélectionnez des thèmes dèfauts.", - "localCurrency": "Monnaie Local", - "btcUnit": "Voire bitcoin en:", - "bitcoin": "bitcoin", - "satoshis": "Satoshis", - "securityPIN": "NIP de Sécurité", - "securityPINDescription": "Choisir un NIP de sécurité qui sera necessaire pour ouvrir tes préférences et pour envoyer des paiements sortants.", - "setPIN": "Choisir Votre NIP", - "autoLock": "Auto-Verouillage", - "autoLockDescription": "Ta conte activera une mode sécuritaire après une durée spécifiée:", - "twofa": "Authentification à 2 Facteurs", - "twofaDescription": "Ajoutez un autre niveau de sécurité par activez l'authentication à deux facteurs.", - "twofaSetup": "Activer A2F", - "bannerImage": "Image de Bandeau", - "profileImage": "Image de Profil", - "oneTimeCode": "Entrez mot de passe à usage unique", - "accountId": "Secret de conte", - "twofaDisable": "Désactivez A2F", - "about": "À Propos", - "aboutPlaceholder": "Un description court de vous ou votre entreprise (adresse, bio, etc.)", - "select": "Choisir", - "verifyPIN": "Verifiez votre NIP", - "enablePIN": "Activer NIP", - "disablePIN": "Désactiver NIP", - "saveSettings": "Sauvegarder Paramètres", - "tipPrompt": "Demande pour Pourboires", - "tipPromptDescription": "Demander les gens s'ils voulent ajouter un pourboire avant payer leurs factures", - "displayName": "Nom d'Utilisateur", - "minutes": "minutes", - "hour": "heure", - "hours": "heures", - "hideSeed": "Cache phrase mnémotechnique", - "revealSeed": "Montre phrase mnémotechnique", - "notifications": "Notifications de paiement", - "notificationsDesc": "Reçevez un courriel quand un paiement arrive à ta conte", - "seedPhrase": "Phrase mnémotechnique", - "nostrKeys": "Clé nostr", - "nostrDescription": "Votre clé nostr est utilisé pour signer et décrypter vos messages, gardez-le sauf ou quelqu'un peut se faire passer pour vous.", - "seedDescription": "Cette phrase mnémotechnique à 12 mots est utilisé pour générer votre clé privée et vos clés de portefeuille que vous controllez qui déterminez vos addresses de retrait automatique. Sauvegardez-le et jamais permettez à personne de le voir.", - "emailDescription": "Pour seulement reinitialisations de mot de passe et notifications de paiements seulement.", - "hideNsec": "Cache clé privée nostr", - "saved": "Paramètres sauvegardés!", - "verifying": "Courriel de verification envoyé.", - "verified": "Courriel verifié!", - "revealNsec": "Montre clé privée nostr", - "publishNip5": "Publie identité nostr", - "nip5a": "Utilise", - "nip5b": "comme votre addresse nostr verifié publiquement" - }, - "support": { - "header": "Assistance", - "email": "Courriel", - "accountName": "Nom d'utilisateur", - "message": "Message", - "send": "Envoie" - }, - "bitcoin": "Bitcoin", - "lightning": "Lightning", - "invoice": "Facture", - "unfollow": "Ne plus suivre", - "following": "Vous suivez", - "this": "Cette", - "lightningAddress": "Adresse de lightning", - "send": { - "contacts": "Contacts", - "scan": "Scannez", - "paste": "Collez", - "next": "Prochain", - "placeholder": "Collez une adresse de bitcoin, facture de lightning ou nom d'utilisateur coinos", - "makeQR": "QR" - }, - "requestPayment": "Demander un Paiement", - "welcome": "Bienvenue! Le solde de votre conte est vide. Vous pouvez commencer par déposer ou recevoir un paiement.", - "showBalance": "Montrer Solde", - "followers": "Abonnés", - "noNotes": "Pas de notes", - "message": "Envoyer", - "messages": "Messages", - "feed": "Flux", - "notes": "Notes", - "pay": "Payer", - "profilePage": "Page de profil", - "nostrPubkey": "Clé publique nostr" - }, - "news": { - "header": "Nouvelles", - "subheader": "Dernières Informations" - }, - "payments": { - "addFunds": "Ajouter d'argent", - "takeFunds": "Prendre d'argent", - "show": "Démontrer", - "hide": "Cacher", - "qr": "QR", - "copyLink": "Copier le Lien", - "copyText": "Copier le Texte", - "openLink": "Ouvrer le Portefeuille", - "moreOptions": "Plus d'options", - "total": "Total", - "gainLoss": "Hausse/Perte", - "presentValue": "Valuer au présent", - "amount": "Quantité", - "date": "Date", - "id": "ID de Transaction", - "details": "Détails de Transaction", - "header": "Paiements", - "preimage": "Preuve de paiement", - "type": "Type", - "time": "Heure", - "sent": "Envoyé", - "received": "Reçu", - "empty": "Vous n'avez pas de transactions.", - "send": "Envoyer", - "next": "Prochain", - "sendTo": "Envoyer à", - "to": "à", - "pay": "Payer", - "requesting": "demande", - "sentInvoiceTo": "Envoyé une facture à", - "sentRequestTo": "Demande envoyé!", - "pleasePay": "S'il vous plait payez", - "day": "Jour", - "week": "Semaine", - "month": "Mois", - "all": "Toutes", - "export": "Exporter", - "invoice": "Facture", - "readyToPay": "est prêt a payer", - "describeOrder": "Utiliser ce champ pour décrire votre commande", - "requestAnInvoice": "Demander une facture", - "submit": "Soumettre", - "isRequesting": "demande", - "invoiceFrom": "Facture de", - "awaiting": "Attendant", - "tapAnywhere": "Taper n'importe où pour continuer", - "from": "de", - "redeem": "Racheter", - "redeemed": "Racheté", - "redeemedBy": "Racheté par", - "sendMessage": "Écrire une message...", - "fundsClaimed": "Les fonds sont réclamés!", - "print": "Imprime", - "create": "Crée", - "fund": "Finance", - "networkFee": "Prix de réseau", - "platformFee": "Prix de plateforme", - "fastest": "Plus rapide", - "fast": "Rapide", - "medium": "Moyen", - "slow": "Lent", - "maxfee": "Prix maximum de routage" - } + "404": { + "404": "404", + "pageNotFound": "Page non trouvée." + }, + "about": { + "header": "À Propos", + "locations": { + "header": "Établissements", + "description": "Il y a des entreprises qui acceptent bitcoin utilisant le point de vente coinos. Si vous utilisez notre appli, s'il vous plait fais-le-nous savoir!" + }, + "team": { + "header": "L'Équipe", + "adam": { + "name": "Adam Soltys", + "position": "Officier Technique Principal", + "bio": "Adam est développeur web et passionné de bitcoin. Il croit que l'argent sûr est la clé pour augmenter la prospérité planétaire. Il habite en Vancouver de Nord avec sa femme Chelsea et deux enfants." + }, + "cole": { + "name": "Cole Goodwin", + "position": "Professionel de Bitcoin", + "bio": "Cole est un professionel de bitcoin diplômé et un homme motivé avec passion pour la liberté. Il a découvert bitcoin en 2016 et l'a etudié en détail. Maintenant, il veux introduire le réseau Lightning à autant d'utilisateurs que possible." + } + } + }, + "error": { + "header": "Erreur", + "message": "S'il vous plait réessayez ou contactez l'assistance.", + "signIn": "Vous devez connecter pour continuer.", + "unrecognizedInput": "Donnée non reconnu" + }, + "faq": { + "header": "FAQ", + "cost": { + "question": "Combien cela coûte-t-il?", + "answer": "Recevoir des paiements sur votre compte est gratuit. Les retraits vers des portefeuilles externes entraînent des frais minimes qui varient en fonction des conditions du réseau. Nous facturons 0,1% pour convertir entre le Bitcoin lightning et le Bitcoin on-chain. Envoyer à d'autres comptes Coinos est gratuit." + }, + "compatibility": { + "question": "Ai-je besoin d'un dispositif ou d'un logiciel spécial?", + "answer": "Non, Coinos est une application web qui fonctionne partout où il y a Internet. Les commerçants pourraient l'utiliser sur une tablette ou afficher un code QR pour que les clients puissent le scanner avec leur téléphone." + }, + "safety": { + "question": "Quand mes fonds sont-ils réglés?", + "answer": "Les paiements lightning sont réglés instantanément. Vous pouvez retirer votre solde vers un autre portefeuille en quelques secondes. Les dépôts on-chain prennent en moyenne 5-10 minutes pour être confirmés." + }, + "pos": { + "question": "Coinos peut-il s'intégrer à mon PoS existant?", + "answer": "Nous recommandons d'entrer les ventes dans votre PoS existant comme des transactions en espèces." + }, + "bitcoin": { + "question": "Que puis-je faire avec le Bitcoin?", + "answer": "Dépensez-le chez d'autres commerçants ou payez vos dépenses avec en incitant votre personnel, vos fournisseurs et votre propriétaire à l'accepter." + } + }, + "footer": { + "followUs": "Suivez-Nous", + "twitter": "Twitter", + "github": "GitHub", + "company": "Entreprise", + "telegram": "Telegram", + "support": "Assistance", + "jobs": "Jobs", + "linktree": "Linktree", + "documentation": "Documentation" + }, + "howItWorks": { + "header": "Comment cela Fonctionne", + "step1": { + "header": "1. Créez votre compte", + "description": "Un nom d'utilateur et mot de passe est tout ce dont vous avez besoin pour commencer." + }, + "step2": { + "header": "2. Demande pour des paiements", + "description": "Comme vous faisiez normalement, mais avec bitcoin." + }, + "step3": { + "header": "3. C'est tout!", + "description": "Vous pouvez convertir en monnaie local n'importe quand." + } + }, + "landing": { + "header_before_icon": "Le", + "header_with_icon": "façon", + "header_after_icon": "le plus façile d'accepter bitcoin dans votre magasin.", + "subheader": "Agrandir votre clientèle et chiffre d'affaires en acceptant bitcoin avec un point de vente façile à utiliser et géré. Logiciel et matériel informatique non obligatoire.", + "info1": { + "title": "Paiements instantanés avec Lightning", + "description": "Le moment où votre client envoie un paiment, c'est là. Vous ne devez pas attendre les décisions des banques ou vous inquiéter pour des rejets de débit. Décisions instantanées, en secondes. Dites au revoir aux frais de transactions de 3% des cartes de crédit." + }, + "info2": { + "title": "Simple à utiliser, en garde par défaut", + "description1": "Juste entrer une quantité, partager le code QR et c'est tout!", + "description2": "Tes comptes sont en garde par défaut, qui élimine le nécessité de comprendre comment bitcoin/lightning fonctionnent. Nous réalisons le plus gros du travail pour que vous puissiez vous concentrer sur votre entreprise.", + "description3": "Vous avez toujours l'option de gérer vos clés." + }, + "info3": { + "title": "Personalisez-le comme vous voulez", + "description": "Personalisez votre point de vente, ou utilisez les réglages par défaut - c'est votre chois." + } + }, + "login": { + "username": "Nom d'utilisateur", + "password": "Mot de passe", + "email": "Courriel", + "passwordRecommendation": "Nous recommendons un mot de passe long et aléatoire, généré par un gestionnaire de mots de passe.", + "forgotUserOrPassword": "Oublié votre nom d'utilisateur ou mot de passe ?", + "haveAccount": "Avez-vous déjà un compte ?", + "noAccount": "Pas encore de compte ?", + "register": "Enregistrer", + "signIn": "Connexion", + "failed": "Echec de Connexion", + "optional": "Optionnel", + "token": "Jeton 2FA", + "forgot": "Mot de passe oublié?", + "reset": "Reinitialiser le mot de passe", + "submit": "Soumettre", + "newPassword": "Nouveau mot de passe" + }, + "nav": { + "startInSeconds": "Commence en Secondes", + "account": "Compte", + "signIn": "Connexion", + "signOut": "Déconnexion", + "dashboard": "Tableau de bord", + "settings": "Préférences", + "support": "Assistance", + "profile": "Profil", + "map": "Carte", + "merch": "Marchandise", + "about": "À Propos", + "docs": "Documents", + "messages": "Messages", + "funds": "Fonds" + }, + "invoice": { + "addTip": "Ajoutez un pourboire", + "addTipq": "Ajouter un pourboire?", + "done": "Fini", + "paymentSuccessful": "Paiement réussi!", + "invoice": "Facture", + "total": "Total", + "tip": "Pourboire" + }, + "jobs": { + "header": "Emplois", + "subheader": "Postes disponibles actuels", + "pitch1": "coinos recherche pour des développeurs pour joindre notre équipe croissant (temps plein ou partiel, télétravail OK)", + "pitch2": "Avez-vous hâte de travailler sur bitcoin open source? Regardez sur nos dépôts sur", + "github": "GitHub", + "pitch3": "Si vous pensez que vous pouvez exercer une influence positive, nous voulons que vous contribuez. Envoyer votre CV à" + }, + "user": { + "follow": "Suivre", + "remove": "Enlève", + "scanToPayBTC": "Scanner pour payer avec bitcoin", + "dashboard": { + "dashboard": "Tableau de bord", + "accountBalance": "Solde", + "conversionFeeWarning": "Il y a des frais de 1% pour convertir entre bitcoin, Liquid et Lightning.", + "fetchingRate": "cherchant taut de change...", + "send": "Envoie", + "withdraw": "Retire", + "go": "Allez", + "receive": "Reçois un Paiement", + "deposit": "Déposer", + "voucher": "Bon" + }, + "receive": { + "lessThan1BTCWarning": "S'il vous plaît utilisez moins d'un bitcoin.", + "showQR": "Voire le QR code" + }, + "settings": { + "header": "Préférences", + "ACCOUNT": "COMPTE", + "POINT_OF_SALE": "POINT DE VENTE", + "SECURITY": "SÉCURITÉ", + "locale": "Langue", + "username": "Nom d'Utilisateur", + "email": "Courriel", + "newPassword": "Nouveau Mot de Passe", + "emailNotifications": "Notifications par Courriel", + "emailNotificationsDescription": "Nous pouvons vous notifier par courriel quand votre compte change ou quand vous recevez des paiements", + "smsNotifications": "Notifications par SMS", + "smsNotificationsDescription": "Nous vous envoyons des notifications par texte quand c'est activé", + "theme": "Thème", + "themeDescription": "Sélectionnez des thèmes dèfauts.", + "localCurrency": "Monnaie Local", + "btcUnit": "Voire bitcoin en:", + "bitcoin": "bitcoin", + "satoshis": "Satoshis", + "securityPIN": "NIP de Sécurité", + "securityPINDescription": "Choisir un NIP de sécurité qui sera necessaire pour ouvrir tes préférences et pour envoyer des paiements sortants.", + "setPIN": "Choisir Votre NIP", + "autoLock": "Auto-Verouillage", + "autoLockDescription": "Ta conte activera une mode sécuritaire après une durée spécifiée:", + "twofa": "Authentification à 2 Facteurs", + "twofaDescription": "Ajoutez un autre niveau de sécurité par activez l'authentication à deux facteurs.", + "twofaSetup": "Activer A2F", + "bannerImage": "Image de Bandeau", + "profileImage": "Image de Profil", + "oneTimeCode": "Entrez mot de passe à usage unique", + "accountId": "Secret de conte", + "twofaDisable": "Désactivez A2F", + "about": "À Propos", + "aboutPlaceholder": "Un description court de vous ou votre entreprise (adresse, bio, etc.)", + "select": "Choisir", + "verifyPIN": "Verifiez votre NIP", + "enablePIN": "Activer NIP", + "disablePIN": "Désactiver NIP", + "saveSettings": "Sauvegarder Paramètres", + "tipPrompt": "Demande pour Pourboires", + "tipPromptDescription": "Demander les gens s'ils voulent ajouter un pourboire avant payer leurs factures", + "displayName": "Nom d'Utilisateur", + "minutes": "minutes", + "hour": "heure", + "hours": "heures", + "hideSeed": "Cache phrase mnémotechnique", + "revealSeed": "Montre phrase mnémotechnique", + "notifications": "Notifications de paiement", + "notificationsDesc": "Reçevez un courriel quand un paiement arrive à ta conte", + "seedPhrase": "Phrase mnémotechnique", + "nostrKeys": "Clé nostr", + "nostrDescription": "Votre clé nostr est utilisé pour signer et décrypter vos messages, gardez-le sauf ou quelqu'un peut se faire passer pour vous.", + "seedDescription": "Cette phrase mnémotechnique à 12 mots est utilisé pour générer votre clé privée et vos clés de portefeuille que vous controllez qui déterminez vos addresses de retrait automatique. Sauvegardez-le et jamais permettez à personne de le voir.", + "emailDescription": "Pour seulement reinitialisations de mot de passe et notifications de paiements seulement.", + "hideNsec": "Cache clé privée nostr", + "saved": "Paramètres sauvegardés!", + "verifying": "Courriel de verification envoyé.", + "verified": "Courriel verifié!", + "revealNsec": "Montre clé privée nostr", + "publishNip5": "Publie identité nostr", + "nip5a": "Utilise", + "nip5b": "comme votre addresse nostr verifié publiquement" + }, + "support": { + "header": "Assistance", + "email": "Courriel", + "accountName": "Nom d'utilisateur", + "message": "Message", + "send": "Envoie" + }, + "bitcoin": "Bitcoin", + "lightning": "Lightning", + "invoice": "Facture", + "unfollow": "Ne plus suivre", + "following": "Vous suivez", + "this": "Cette", + "lightningAddress": "Adresse de lightning", + "send": { + "contacts": "Contacts", + "scan": "Scannez", + "paste": "Collez", + "next": "Prochain", + "placeholder": "Collez une adresse de bitcoin, facture de lightning ou nom d'utilisateur coinos", + "makeQR": "QR" + }, + "requestPayment": "Demander un Paiement", + "welcome": "Bienvenue! Le solde de votre conte est vide. Vous pouvez commencer par déposer ou recevoir un paiement.", + "showBalance": "Montrer Solde", + "followers": "Abonnés", + "noNotes": "Pas de notes", + "message": "Envoyer", + "messages": "Messages", + "feed": "Flux", + "notes": "Notes", + "pay": "Payer", + "profilePage": "Page de profil", + "nostrPubkey": "Clé publique nostr" + }, + "news": { + "header": "Nouvelles", + "subheader": "Dernières Informations" + }, + "payments": { + "addFunds": "Ajouter d'argent", + "takeFunds": "Prendre d'argent", + "show": "Démontrer", + "hide": "Cacher", + "qr": "QR", + "copyLink": "Copier le Lien", + "copyText": "Copier le Texte", + "openLink": "Ouvrer le Portefeuille", + "moreOptions": "Plus d'options", + "total": "Total", + "gainLoss": "Hausse/Perte", + "presentValue": "Valuer au présent", + "amount": "Quantité", + "date": "Date", + "id": "ID de Transaction", + "details": "Détails de Transaction", + "header": "Paiements", + "preimage": "Preuve de paiement", + "type": "Type", + "time": "Heure", + "sent": "Envoyé", + "received": "Reçu", + "empty": "Vous n'avez pas de transactions.", + "send": "Envoyer", + "next": "Prochain", + "sendTo": "Envoyer à", + "to": "à", + "pay": "Payer", + "requesting": "demande", + "sentInvoiceTo": "Envoyé une facture à", + "sentRequestTo": "Demande envoyé!", + "pleasePay": "S'il vous plait payez", + "day": "Jour", + "week": "Semaine", + "month": "Mois", + "all": "Toutes", + "export": "Exporter", + "invoice": "Facture", + "readyToPay": "est prêt a payer", + "describeOrder": "Utiliser ce champ pour décrire votre commande", + "requestAnInvoice": "Demander une facture", + "submit": "Soumettre", + "isRequesting": "demande", + "invoiceFrom": "Facture de", + "awaiting": "Attendant", + "tapAnywhere": "Taper n'importe où pour continuer", + "from": "de", + "redeem": "Racheter", + "redeemed": "Racheté", + "redeemedBy": "Racheté par", + "sendMessage": "Écrire une message...", + "fundsClaimed": "Les fonds sont réclamés!", + "print": "Imprime", + "create": "Crée", + "fund": "Finance", + "networkFee": "Prix de réseau", + "platformFee": "Prix de plateforme", + "fastest": "Plus rapide", + "fast": "Rapide", + "medium": "Moyen", + "slow": "Lent", + "maxfee": "Prix maximum de routage" + } } diff --git a/src/routes/(app)/[username]/invoice/[id]/+page.svelte b/src/routes/(app)/[username]/invoice/[id]/+page.svelte index 709f214b..17882e1a 100644 --- a/src/routes/(app)/[username]/invoice/[id]/+page.svelte +++ b/src/routes/(app)/[username]/invoice/[id]/+page.svelte @@ -109,7 +109,9 @@ } }); - $: link = [types.bitcoin, types.liquid].includes(type) ? text : `lightning:${text}`; + $: link = [types.bitcoin, types.liquid].includes(type) + ? text + : `lightning:${text}`; $: txt = [types.bitcoin, types.liquid].includes(type) ? hash : text; let setType = async (type) => { @@ -127,19 +129,18 @@ {#if showQr} - {txt} + ? invoice.text + : "lightning:" + invoice.text} + > + {txt} {/if} - {#if amount > 0}
@@ -202,7 +203,6 @@ > ⚡️ Lightning -
diff --git a/src/routes/(app)/[username]/invoice/[id]/paid/+page.svelte b/src/routes/(app)/[username]/invoice/[id]/paid/+page.svelte index ee00214c..700ac972 100644 --- a/src/routes/(app)/[username]/invoice/[id]/paid/+page.svelte +++ b/src/routes/(app)/[username]/invoice/[id]/paid/+page.svelte @@ -8,18 +8,21 @@ export let data; let amount, currency, rate, received, pending, tip, user, id; - $: update(data) + $: update(data); let update = (data) => { ({ amount, currency, rate, received, pending, tip, user, id } = data.invoice); - } + }; toast.pop(0);
{#if received} -
+
@@ -47,7 +50,10 @@ {/if} {#if pending} -
+
diff --git a/src/routes/(app)/payment/[id]/+page.svelte b/src/routes/(app)/payment/[id]/+page.svelte index 49af6f70..df2277b7 100644 --- a/src/routes/(app)/payment/[id]/+page.svelte +++ b/src/routes/(app)/payment/[id]/+page.svelte @@ -146,7 +146,7 @@
-- cgit v1.2.3 From c2c201ab314e0897476e80163eda40e7307ee21a Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Fri, 29 Dec 2023 00:04:47 -0800 Subject: tweaks --- .../[username]/invoice/[id]/+layout.server.js | 5 +- .../(app)/[username]/invoice/[id]/+page.svelte | 122 +++++++++++---------- src/routes/(app)/send/invoice/[id]/+page.svelte | 2 +- static/images/lightning.svg | 67 +++++++++++ 4 files changed, 137 insertions(+), 59 deletions(-) create mode 100644 static/images/lightning.svg (limited to 'src') diff --git a/src/routes/(app)/[username]/invoice/[id]/+layout.server.js b/src/routes/(app)/[username]/invoice/[id]/+layout.server.js index 46246724..9c5f9f77 100644 --- a/src/routes/(app)/[username]/invoice/[id]/+layout.server.js +++ b/src/routes/(app)/[username]/invoice/[id]/+layout.server.js @@ -33,7 +33,6 @@ export async function load({ depends, params, url, parent }) { ); } - let sm = Qr.drawImg(invoice.text || "", { size: 380 }); - - return { id, invoice, sm, lg: sm }; + let src = Qr.drawImg(invoice.text || "", { size: 340 }); + return { id, invoice, src }; } diff --git a/src/routes/(app)/[username]/invoice/[id]/+page.svelte b/src/routes/(app)/[username]/invoice/[id]/+page.svelte index 17882e1a..c9225998 100644 --- a/src/routes/(app)/[username]/invoice/[id]/+page.svelte +++ b/src/routes/(app)/[username]/invoice/[id]/+page.svelte @@ -35,7 +35,7 @@ let readingerror = (e) => console.log("nfc error", e); $: refresh(data); - let { invoice, id, user, sm, lg } = data; + let { invoice, id, user, src } = data; let { amount, hash, @@ -50,13 +50,12 @@ } = invoice; let showQr = true; - $: src = sm; let qr; let tipPercent = 0; let refresh = async (data) => { - ({ invoice, id, user, sm, lg } = data); + ({ invoice, id, user, src } = data); ({ amount, hash, @@ -121,24 +120,26 @@ user: { username, currency }, })); - goto(`./${id}`, { invalidateAll: true }); + goto(`./${id}`, { invalidateAll: true, noScroll: true }); }; -
+
{#if showQr} - - {txt} - +
+ + {txt} + +
{/if} {#if amount > 0} @@ -154,67 +155,80 @@
{`${sat(amount)}`}⚡️{`${s(amount)}`} {#if tip} - +{sat(tip)} + +⚡️{s(tip)} {/if}
{/if} -
+ {#if type === types.liquid} +
+
+ We only support L-BTC, + don't deposit Liquid assets +
+
+ {/if} + +
- +
- -
+ + diff --git a/src/routes/(app)/send/invoice/[id]/+page.svelte b/src/routes/(app)/send/invoice/[id]/+page.svelte index c2163a81..6970d74b 100644 --- a/src/routes/(app)/send/invoice/[id]/+page.svelte +++ b/src/routes/(app)/send/invoice/[id]/+page.svelte @@ -1,4 +1,4 @@ - {#if tags} - {#if tags.user} + {#if tags.user && tags.user.username}
-- cgit v1.2.3 From c4a7b68048d389cac3c68797ce4a44bca7979d17 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 2 Jan 2024 15:18:58 -0800 Subject: liquid payments --- .env.production | 1 + src/lib/utils.js | 14 ++++++++++++++ src/routes/(app)/payment/[id]/+page.svelte | 9 +++++++-- src/routes/(app)/send/[...text]/+page.server.js | 4 ++-- .../[address]/[amount]/[...feeRate]/+page.server.js | 8 +------- 5 files changed, 25 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/.env.production b/.env.production index c04aa886..3f7aff52 100644 --- a/.env.production +++ b/.env.production @@ -2,4 +2,5 @@ PUBLIC_COINOS_URL=http://app:3119 PUBLIC_BTC=6f0279e9ed041c3d710a9f57d0c02928416460c4b722ae3457a11eec381c526d PUBLIC_SOCKET=wss://coinos.io/ws PUBLIC_EXPLORER=https://mempool.space +PUBLIC_LIQUID_EXPLORER=https://liquid.network PUBLIC_DOMAIN=coinos.io diff --git a/src/lib/utils.js b/src/lib/utils.js index 9dbdc2ab..738413bf 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -287,3 +287,17 @@ export let closest = (a, n) => a.reduce((prev, curr) => Math.abs(curr - n) < Math.abs(prev - n) ? curr : prev ); + +export let isLiquid = (text) => + text.startsWith("Az") || + text.startsWith("lq1") || + text.startsWith("VJL") || + text.startsWith("VT") || + text.startsWith("XR") || + text.startsWith("XC") || + ((text.startsWith("H") || text.startsWith("G") || text.startsWith("Q")) && + text.length === 34) || + (text.startsWith("ert1q") && text.length === 43) || + (text.startsWith("ex1q") && text.length === 42) || + text.startsWith("el1qq") || + text.startsWith("lq1qq"); diff --git a/src/routes/(app)/payment/[id]/+page.svelte b/src/routes/(app)/payment/[id]/+page.svelte index 1acd0d3d..e07d630a 100644 --- a/src/routes/(app)/payment/[id]/+page.svelte +++ b/src/routes/(app)/payment/[id]/+page.svelte @@ -16,7 +16,7 @@ import Avatar from "$comp/Avatar.svelte"; import Icon from "$comp/Icon.svelte"; import { format } from "date-fns"; - import { PUBLIC_EXPLORER as expl } from "$env/static/public"; + import { PUBLIC_EXPLORER, PUBLIC_LIQUID_EXPLORER } from "$env/static/public"; export let data; let { user, payment: p } = data; @@ -37,6 +37,11 @@ } = p; let a = Math.abs(amount); + let expl = { + bitcoin: PUBLIC_EXPLORER, + liquid: PUBLIC_LIQUID_EXPLORER, + }[type]; + let print = async () => { await post(`/payment/${id}/print`, { id }); success("Printing!"); @@ -157,7 +162,7 @@ Txid
- {txid} { } // bitcoin - if (validate(t)) { + if (validate(t) || isLiquid(t)) { try { ({ id, user } = await get(`/invoice/${t}`)); } catch (e) { diff --git a/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.server.js b/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.server.js index 86f9fde8..6f735f32 100644 --- a/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.server.js +++ b/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.server.js @@ -5,13 +5,7 @@ let seen = {}; export async function load({ params: { address, amount, feeRate }, cookies }) { try { - let fees = await fetch( - `https://mempool.space/api/v1/fees/recommended` - ).then((r) => r.json()); - - if (!feeRate) feeRate = fees.halfHourFee; - - let { fee, ourfee, hex } = await post( + let { fee, fees, ourfee, hex } = await post( "/bitcoin/fee", { address, amount, feeRate }, auth(cookies) -- cgit v1.2.3 From 2a46f025526b6a0f3fa68576a06cab27121e30a5 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 2 Jan 2024 15:58:42 -0800 Subject: copy txid --- src/routes/(app)/payment/[id]/+page.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/routes/(app)/payment/[id]/+page.svelte b/src/routes/(app)/payment/[id]/+page.svelte index e07d630a..dbaea042 100644 --- a/src/routes/(app)/payment/[id]/+page.svelte +++ b/src/routes/(app)/payment/[id]/+page.svelte @@ -170,7 +170,7 @@
-- cgit v1.2.3 From 38eb8955db763a0674737840faa7330026d84fa4 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 2 Jan 2024 16:10:05 -0800 Subject: update bitcoin send example --- src/lib/samples.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/lib/samples.js b/src/lib/samples.js index 4d02ff37..a501bad1 100644 --- a/src/lib/samples.js +++ b/src/lib/samples.js @@ -25,12 +25,12 @@ export default { -d '{ "payreq": "lnbc1pj94d8fsp5n77k340ps4m9jn7kp8he8yynpddvurv6mcsrrqpnq5l2jxdxzlwqpp5m96pqhc5nrlk8cqsu9ufdxxa43sarp8vwf9egvm2pg9nl0zu9r8qdq2vdhkjmn0wvxqztgcqpjrzjqwhmav82kntsppmkp8jp4vg4h9nns78tsy8mg7ve4lq5txrkp0h56zlarvqqdtcqqsqqqqqqqqqqp6cq9q9qyysgqzxlypywzphyujm3ga5j5csfcmqvlnae0fgnvymkaaw94eeg7py5rqzysyjkr3ev2snq63qpsc69vf54adkd0szvmvwt5cuadjnuy95sq4xfa40" }'`, - bitcoin: `curl "${api}/payments" + bitcoin: `curl "${api}/send" -H "content-type: application/json" -H "Authorization: Bearer $token" -d '{ "amount": 5000, - "hash": "bc1q3unh97w4rmelflrm2hvdwz37d8kray3vn4d5ca" + "address": "bc1q3unh97w4rmelflrm2hvdwz37d8kray3vn4d5ca" }'`, internal: `HASH=$(curl "${api}/invoice" -H "content-type: application/json" -- cgit v1.2.3 From 5107d4f34ba72e4740631201d31c098b66182eb3 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 2 Jan 2024 16:34:21 -0800 Subject: button styles --- .../(app)/[username]/invoice/[id]/+page.svelte | 55 +++++++++------------- 1 file changed, 23 insertions(+), 32 deletions(-) (limited to 'src') diff --git a/src/routes/(app)/[username]/invoice/[id]/+page.svelte b/src/routes/(app)/[username]/invoice/[id]/+page.svelte index c9225998..e99a6d95 100644 --- a/src/routes/(app)/[username]/invoice/[id]/+page.svelte +++ b/src/routes/(app)/[username]/invoice/[id]/+page.svelte @@ -167,53 +167,44 @@
{/if} - {#if type === types.liquid} -
-
- We only support L-BTC, - don't deposit Liquid assets -
-
- {/if} -
+ {#if type === types.liquid} +
+
+ We only support L-BTC, + don't deposit any other assets +
+
+ {/if} +
-- cgit v1.2.3