From 0c07121548723c7707421bf2544ed36e3446e009 Mon Sep 17 00:00:00 2001 From: conradolandia Date: Tue, 3 Sep 2024 16:51:58 -0500 Subject: [PATCH 01/57] Start creating the About page --- src/routes/about/+page.js | 7 +++++++ src/routes/about/+page.svelte | 23 ++++++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 src/routes/about/+page.js diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js new file mode 100644 index 00000000..f35085fc --- /dev/null +++ b/src/routes/about/+page.js @@ -0,0 +1,7 @@ +const dataSrc = `https://api.github.com/repos/spyder-ide/spyder/contributors`; + +export async function load({ fetch }) { + const response = await fetch(dataSrc); + const contributors = await response.json(); + return { contributors }; +} diff --git a/src/routes/about/+page.svelte b/src/routes/about/+page.svelte index c172252a..af4ea09a 100644 --- a/src/routes/about/+page.svelte +++ b/src/routes/about/+page.svelte @@ -1,3 +1,24 @@ + +
- About page +

+ {pageTitle} +

+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo debitis eligendi dolorem optio adipisci voluptatem inventore eius recusandae reiciendis nisi aspernatur quas exercitationem nihil dolorum aliquam, ex aliquid qui distinctio. +

+
+ {#each data.contributors as contributor} +
+ {contributor.login} +
+ {contributor.login} +

{contributor.contributions} contributions

+
+
+ {/each} +
\ No newline at end of file From ab58d8954f2bc46705e76bd13fc5aa12a11a18af Mon Sep 17 00:00:00 2001 From: conradolandia Date: Tue, 3 Sep 2024 17:04:01 -0500 Subject: [PATCH 02/57] Create ContributorCard and implement data fetching for 48 top contributors (divisible by 2 and 3) --- src/routes/about/+page.js | 2 +- src/routes/about/+page.svelte | 37 ++++++++++++++++++----------------- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index f35085fc..acebbcd2 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -1,4 +1,4 @@ -const dataSrc = `https://api.github.com/repos/spyder-ide/spyder/contributors`; +const dataSrc = `https://api.github.com/repos/spyder-ide/spyder/contributors?per_page=48`; export async function load({ fetch }) { const response = await fetch(dataSrc); diff --git a/src/routes/about/+page.svelte b/src/routes/about/+page.svelte index af4ea09a..469784ca 100644 --- a/src/routes/about/+page.svelte +++ b/src/routes/about/+page.svelte @@ -1,24 +1,25 @@ -
-

- {pageTitle} -

-

- Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo debitis eligendi dolorem optio adipisci voluptatem inventore eius recusandae reiciendis nisi aspernatur quas exercitationem nihil dolorum aliquam, ex aliquid qui distinctio. -

-
- {#each data.contributors as contributor} -
- {contributor.login} -
- {contributor.login} -

{contributor.contributions} contributions

-
-
- {/each} +{#if data.contributors} +
+

+ {pageTitle} +

+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo debitis eligendi dolorem optio adipisci voluptatem inventore eius recusandae reiciendis nisi aspernatur quas exercitationem nihil dolorum aliquam, ex aliquid qui distinctio. +

+
+ {#each data.contributors as contributor} + + {/each} +
-
\ No newline at end of file +{:else} + +{/if} \ No newline at end of file From 7080b60e88cb755bf106128adad766c2e02e3c75 Mon Sep 17 00:00:00 2001 From: conradolandia Date: Tue, 3 Sep 2024 17:22:00 -0500 Subject: [PATCH 03/57] Add some error handling --- src/routes/about/+page.js | 12 +++++++++--- src/routes/about/+page.svelte | 30 ++++++++++++++++++++---------- 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index acebbcd2..a67400b4 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -1,7 +1,13 @@ const dataSrc = `https://api.github.com/repos/spyder-ide/spyder/contributors?per_page=48`; export async function load({ fetch }) { - const response = await fetch(dataSrc); - const contributors = await response.json(); - return { contributors }; + try { + const response = await fetch(dataSrc); + if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`); + const contributors = await response.json(); + return { contributors }; + } catch (error) { + console.error("Failed to fetch contributors:", error); + return { contributors: null, error: error.message }; + } } diff --git a/src/routes/about/+page.svelte b/src/routes/about/+page.svelte index 469784ca..9a127808 100644 --- a/src/routes/about/+page.svelte +++ b/src/routes/about/+page.svelte @@ -1,25 +1,35 @@ -{#if data.contributors} -
-

+
+ {#if data.error} +

Error: {data.error}

+ {:else if data.contributors && data.contributors.length > 0} +

{pageTitle}

- Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo debitis eligendi dolorem optio adipisci voluptatem inventore eius recusandae reiciendis nisi aspernatur quas exercitationem nihil dolorum aliquam, ex aliquid qui distinctio. + {pageIntro}

{#each data.contributors as contributor} {/each}
-
-{:else} - -{/if} \ No newline at end of file + {:else if data.contributors && data.contributors.length === 0} +

No contributors found.

+ {:else} + + {/if} +

From 8f141f869352198e3ca0c1e96b9f45aedf4ae5ec Mon Sep 17 00:00:00 2001 From: conradolandia Date: Tue, 3 Sep 2024 18:10:03 -0500 Subject: [PATCH 04/57] Add ContributorCard component and disable a line in `.gitignore` causing issues with the `$lib` directory --- .gitignore | 2 +- src/lib/components/ContributorCard.svelte | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 src/lib/components/ContributorCard.svelte diff --git a/.gitignore b/.gitignore index 34c3a6a6..6848f485 100644 --- a/.gitignore +++ b/.gitignore @@ -40,7 +40,7 @@ develop-eggs/ dist/ downloads/ eggs/ -lib/ +#lib/ # Producing an error: can't add files within Svelte's $lib/ directory lib64/ MANIFEST parts/ diff --git a/src/lib/components/ContributorCard.svelte b/src/lib/components/ContributorCard.svelte new file mode 100644 index 00000000..9538d367 --- /dev/null +++ b/src/lib/components/ContributorCard.svelte @@ -0,0 +1,21 @@ + + +
+ + {contributor.login} + +
+ {contributor.login} +

+ {contributor.contributions} contributions +

+
+
From b7a0567d83118d9339ec2990441a81aaee693cfa Mon Sep 17 00:00:00 2001 From: conradolandia Date: Tue, 10 Sep 2024 21:48:28 -0500 Subject: [PATCH 05/57] Improve desing and implementation of about page --- src/lib/blocks/ContributorBlock.svelte | 36 +++++++++++ src/lib/components/ContributorCard.svelte | 45 ++++++++++--- src/routes/about/+page.js | 73 ++++++++++++++++++++- src/routes/about/+page.svelte | 78 +++++++++++++++++------ tailwind.config.js | 4 ++ 5 files changed, 206 insertions(+), 30 deletions(-) create mode 100644 src/lib/blocks/ContributorBlock.svelte diff --git a/src/lib/blocks/ContributorBlock.svelte b/src/lib/blocks/ContributorBlock.svelte new file mode 100644 index 00000000..ae492599 --- /dev/null +++ b/src/lib/blocks/ContributorBlock.svelte @@ -0,0 +1,36 @@ + + +
+

+ {title} +

+

+ {intro} +

+
+ {#each contributors as contributor} + + {/each} +
+
diff --git a/src/lib/components/ContributorCard.svelte b/src/lib/components/ContributorCard.svelte index 9538d367..bf132ac5 100644 --- a/src/lib/components/ContributorCard.svelte +++ b/src/lib/components/ContributorCard.svelte @@ -1,21 +1,48 @@ -
+
{contributor.login} -
- {contributor.login} -

- {contributor.contributions} contributions -

-
+ + {contributor.name || contributor.login} + + {#if contributor.role} +

+ {contributor.role} +

+ {/if} +

+ {contributor.contributions} contributions +

+
+ {/if}
diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index a67400b4..212691e4 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -1,13 +1,80 @@ -const dataSrc = `https://api.github.com/repos/spyder-ide/spyder/contributors?per_page=48`; +const dataSrc = `https://api.github.com/repos/spyder-ide/spyder/contributors?per_page=100`; + +const currentContributors = [ + { + id: 365293, + name: "Carlos Córdoba", + role: "Lead mantainer" + }, + { + id: 16781833, + name: "Daniel Althviz", + role: "Co-mantainer" + }, + { + id: 17051931, + name: "C.A.M. Gerlach", + role: "Documentation and technical writing" + }, + { + id: 9618975, + name: "Ryan Clary", + role: "Installers" + }, + { + id: 7941918, + name: "Jitse Niesen", + role: "External plugins" + }, + { + id: 5204788, + name: "Hendrik Louzada", + role: "Remote development" + }, + { + id: 42411448, + name: "Juan Sebastian Bautista", + role: "Junior Developer" + }, + { + id: 5027583, + name: "Andrés Montoya", + role: "UI/UX Designer and Social Media" + } +]; + +function processContributors(current, all) { + // Update current contributors with the latest data from GitHub + const updatedCurrent = current.map(contributor => { + const match = all.find(c => c.id === contributor.id); + return match ? { ...contributor, ...match } : contributor; + }); + + // Get the remaining contributors that are not in the current list + const remainingContributors = all.filter(contributor => + !current.some(c => c.id === contributor.id) + ); + + // Just some random contributors to show as examples in the "past contributors" section + // TODO: Remove this after we have the past contributors from GitHub + const pastContributors = remainingContributors.sort(() => 0.5 - Math.random()).slice(0, 12); + + // Return the updated current contributors, past contributors, and remaining contributors + return { updatedCurrent, pastContributors, remainingContributors }; +} export async function load({ fetch }) { try { const response = await fetch(dataSrc); if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`); const contributors = await response.json(); - return { contributors }; + + // Process the contributors and get the updated current contributors, past contributors, and remaining contributors + const { updatedCurrent, pastContributors, remainingContributors } = processContributors(currentContributors, contributors); + + return { currentContributors: updatedCurrent, pastContributors, remainingContributors }; } catch (error) { console.error("Failed to fetch contributors:", error); - return { contributors: null, error: error.message }; + return { currentContributors, pastContributors: [], remainingContributors: [], error: error.message }; } } diff --git a/src/routes/about/+page.svelte b/src/routes/about/+page.svelte index 9a127808..1a9efc03 100644 --- a/src/routes/about/+page.svelte +++ b/src/routes/about/+page.svelte @@ -1,35 +1,77 @@
+

+ {pageTitle} +

+

+ {pageIntro} +

{#if data.error}

Error: {data.error}

- {:else if data.contributors && data.contributors.length > 0} -

- {pageTitle} -

-

- {pageIntro} -

-
- {#each data.contributors as contributor} - - {/each} -
- {:else if data.contributors && data.contributors.length === 0} -

No contributors found.

- {:else} + {:else if data.loading} + {:else} + {#if data.currentContributors && data.currentContributors.length > 0} + + {:else} + + {/if} + {#if data.pastContributors && data.pastContributors.length > 0} + + {:else} + + {/if} + {#if data.remainingContributors && data.remainingContributors.length > 0} + + {:else} + + {/if} {/if}
diff --git a/tailwind.config.js b/tailwind.config.js index 78728ea9..51e9a80b 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -22,6 +22,10 @@ export default { "4/3": "4 / 3", "16/10": "16 / 10", }, + gridTemplateColumns: { + '16': 'repeat(16, minmax(0, 1fr))', + '23': 'repeat(23, minmax(0, 1fr))', + }, typography: (theme) => ({ DEFAULT: { css: { From d058838da7147105da74f317019cf86dc89ce2ba Mon Sep 17 00:00:00 2001 From: conradolandia Date: Wed, 11 Sep 2024 15:03:10 -0500 Subject: [PATCH 06/57] Remove number of contributions and add roles to past contributors (as a placeholder for now) --- src/lib/blocks/Header.svelte | 2 +- src/lib/components/ContributorCard.svelte | 3 --- src/lib/config/index.js | 7 +++++-- src/routes/about/+page.js | 1 + 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/lib/blocks/Header.svelte b/src/lib/blocks/Header.svelte index 419fffd8..65674ed7 100644 --- a/src/lib/blocks/Header.svelte +++ b/src/lib/blocks/Header.svelte @@ -27,7 +27,7 @@
-
{/if}
diff --git a/src/lib/config/index.js b/src/lib/config/index.js index 803b5457..b5bbc319 100644 --- a/src/lib/config/index.js +++ b/src/lib/config/index.js @@ -43,8 +43,11 @@ export const navigation = [ href: `${base}/download/`, target: "_self", }, - ], - [ + { + text: "About", + href: `${base}/about/`, + target: "_self", + }, { text: "Blog", href: `${base}/blog/`, diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index 212691e4..455a5b94 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -58,6 +58,7 @@ function processContributors(current, all) { // Just some random contributors to show as examples in the "past contributors" section // TODO: Remove this after we have the past contributors from GitHub const pastContributors = remainingContributors.sort(() => 0.5 - Math.random()).slice(0, 12); + pastContributors.forEach(element => { element.role = "Lorem Ipsum" }); // Return the updated current contributors, past contributors, and remaining contributors return { updatedCurrent, pastContributors, remainingContributors }; From 1f619934e802d83f7a8460ba672171caf0fa91a7 Mon Sep 17 00:00:00 2001 From: conradolandia Date: Wed, 11 Sep 2024 18:29:51 -0500 Subject: [PATCH 07/57] Improve example and remove some unneeded elements --- src/lib/blocks/ContributorBlock.svelte | 28 +++++++++++++---------- src/lib/components/ContributorCard.svelte | 3 ++- src/routes/about/+page.js | 7 +++++- src/routes/about/+page.svelte | 17 +++----------- 4 files changed, 27 insertions(+), 28 deletions(-) diff --git a/src/lib/blocks/ContributorBlock.svelte b/src/lib/blocks/ContributorBlock.svelte index ae492599..e31473ee 100644 --- a/src/lib/blocks/ContributorBlock.svelte +++ b/src/lib/blocks/ContributorBlock.svelte @@ -12,18 +12,22 @@ class:max-w-4xl={size === "medium"} class:max-w-6xl={size === "large"} > -

- {title} -

-

- {intro} -

+ {#if title} +

+ {title} +

+ {/if} + {#if intro} +

+ {intro} +

+ {/if}
@@ -30,6 +30,7 @@ href={contributor.html_url} target="_blank" rel="noopener noreferrer" + class="break-all" class:text-xl={size === "large"} class:text-base={size !== "large"} > diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index 455a5b94..196580e4 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -60,8 +60,13 @@ function processContributors(current, all) { const pastContributors = remainingContributors.sort(() => 0.5 - Math.random()).slice(0, 12); pastContributors.forEach(element => { element.role = "Lorem Ipsum" }); + // Remove pastContributors elements from remainingContributors + const remainingContributorsFiltered = remainingContributors.filter(contributor => + !pastContributors.some(pastContributor => pastContributor.id === contributor.id) + ); + // Return the updated current contributors, past contributors, and remaining contributors - return { updatedCurrent, pastContributors, remainingContributors }; + return { updatedCurrent, pastContributors, remainingContributors: remainingContributorsFiltered }; } export async function load({ fetch }) { diff --git a/src/routes/about/+page.svelte b/src/routes/about/+page.svelte index 1a9efc03..c0becb72 100644 --- a/src/routes/about/+page.svelte +++ b/src/routes/about/+page.svelte @@ -4,23 +4,14 @@ export let data; - let pageTitle = "About Spyder IDE"; + let pageTitle = "Who We Are"; let pageIntro = `Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo debitis eligendi dolorem optio adipisci voluptatem inventore eius recusandae reiciendis nisi aspernatur quas exercitationem nihil dolorum aliquam, ex aliquid qui distinctio.`; - let currentTitle = "Current Contributors"; - let currentIntro = `Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo debitis - eligendi dolorem optio adipisci voluptatem inventore eius recusandae - reiciendis nisi aspernatur quas exercitationem nihil dolorum aliquam, ex - aliquid qui distinctio.`; - - let pastTitle = "Past Contributors"; - let pastIntro = `Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo debitis - eligendi dolorem optio adipisci voluptatem inventore eius recusandae - reiciendis nisi aspernatur quas exercitationem nihil dolorum aliquam, ex - aliquid qui distinctio.`; + let currentTitle = "Team Members"; + let pastTitle = "Former Team Members"; let remainingTitle = "We are an open source project"; let remainingIntro = `Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo debitis @@ -46,7 +37,6 @@ {#if data.currentContributors && data.currentContributors.length > 0} @@ -56,7 +46,6 @@ {#if data.pastContributors && data.pastContributors.length > 0} From 82adcfaccd7d5da2d8a38813d7fa41a4e86af47c Mon Sep 17 00:00:00 2001 From: conradolandia Date: Fri, 13 Sep 2024 13:23:49 -0500 Subject: [PATCH 08/57] Add past contributors and improve visualization of team members --- src/lib/blocks/ContributorBlock.svelte | 8 +-- src/lib/components/ContributorCard.svelte | 3 +- src/routes/about/+page.js | 80 ++++++++++++++++++----- 3 files changed, 69 insertions(+), 22 deletions(-) diff --git a/src/lib/blocks/ContributorBlock.svelte b/src/lib/blocks/ContributorBlock.svelte index e31473ee..30a0b2d5 100644 --- a/src/lib/blocks/ContributorBlock.svelte +++ b/src/lib/blocks/ContributorBlock.svelte @@ -9,17 +9,17 @@
{#if title} -

+

{title}

{/if} {#if intro}

{contributor.name || contributor.login} {#if contributor.role} -

+

{contributor.role}

{/if} diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index 196580e4..51273d10 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -28,7 +28,7 @@ const currentContributors = [ }, { id: 5204788, - name: "Hendrik Louzada", + name: "Hendrik D. Louzada", role: "Remote development" }, { @@ -43,30 +43,78 @@ const currentContributors = [ } ]; -function processContributors(current, all) { +const pastContributors = [ + { + id: 1311787, + name: "Pierre Raybaut", + role: "Spyder Creator" + }, + { + id: 1878982, + name: "Edgar Andrés Margffoy Tuay", + role: "LSP Support" + }, + { + id: 50221806, + name: "Isabela Presedo-Floyd", + role: "UX/UI Redesign" + }, + { + id: 3627835, + name: "Gonzalo Peña-Castellanos", + role: "API Redesign" + }, + { + id: 18587879, + name: "Juanita Gómez", + role: "Docs & Social Media" + }, + { + id: 10170372, + name: "Jean-Sébastien Gosselin", + role: "Plots pane" + }, + { + id: 20992645, + name: "Stephannie Jimenez Gacha", + role: "Spyder-terminal maintainer" + }, + { + id: 2397974, + name: "Sylvain Corlay", + role: "New Icon Theme" + }, + { + id: 2024217, + name: "Rafael Laverde", + role: "Editor improvements" + }, + { + id: 10513354, + name: "Brian Olsen", + role: "Console improvements" + }, +]; + +function processContributors(current, past, all) { // Update current contributors with the latest data from GitHub const updatedCurrent = current.map(contributor => { const match = all.find(c => c.id === contributor.id); return match ? { ...contributor, ...match } : contributor; }); + const updatedPast = past.map(contributor => { + const match = all.find(c => c.id === contributor.id); + return match ? { ...contributor, ...match } : contributor; + }); + // Get the remaining contributors that are not in the current list const remainingContributors = all.filter(contributor => - !current.some(c => c.id === contributor.id) - ); - - // Just some random contributors to show as examples in the "past contributors" section - // TODO: Remove this after we have the past contributors from GitHub - const pastContributors = remainingContributors.sort(() => 0.5 - Math.random()).slice(0, 12); - pastContributors.forEach(element => { element.role = "Lorem Ipsum" }); - - // Remove pastContributors elements from remainingContributors - const remainingContributorsFiltered = remainingContributors.filter(contributor => - !pastContributors.some(pastContributor => pastContributor.id === contributor.id) + !current.some(c => c.id === contributor.id) && !past.some(p => p.id === contributor.id) ); // Return the updated current contributors, past contributors, and remaining contributors - return { updatedCurrent, pastContributors, remainingContributors: remainingContributorsFiltered }; + return { updatedCurrent, updatedPast, remainingContributors }; } export async function load({ fetch }) { @@ -76,9 +124,9 @@ export async function load({ fetch }) { const contributors = await response.json(); // Process the contributors and get the updated current contributors, past contributors, and remaining contributors - const { updatedCurrent, pastContributors, remainingContributors } = processContributors(currentContributors, contributors); + const { updatedCurrent, updatedPast, remainingContributors } = processContributors(currentContributors, pastContributors, contributors); - return { currentContributors: updatedCurrent, pastContributors, remainingContributors }; + return { currentContributors: updatedCurrent, pastContributors: updatedPast, remainingContributors }; } catch (error) { console.error("Failed to fetch contributors:", error); return { currentContributors, pastContributors: [], remainingContributors: [], error: error.message }; From ede7b3ea63674a388c60ec47127b1ee76cb3f648 Mon Sep 17 00:00:00 2001 From: conradolandia Date: Tue, 3 Sep 2024 16:51:58 -0500 Subject: [PATCH 09/57] Start creating the About page --- src/routes/about/+page.js | 7 +++++++ src/routes/about/+page.svelte | 23 ++++++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 src/routes/about/+page.js diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js new file mode 100644 index 00000000..f35085fc --- /dev/null +++ b/src/routes/about/+page.js @@ -0,0 +1,7 @@ +const dataSrc = `https://api.github.com/repos/spyder-ide/spyder/contributors`; + +export async function load({ fetch }) { + const response = await fetch(dataSrc); + const contributors = await response.json(); + return { contributors }; +} diff --git a/src/routes/about/+page.svelte b/src/routes/about/+page.svelte index c172252a..af4ea09a 100644 --- a/src/routes/about/+page.svelte +++ b/src/routes/about/+page.svelte @@ -1,3 +1,24 @@ + +
- About page +

+ {pageTitle} +

+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo debitis eligendi dolorem optio adipisci voluptatem inventore eius recusandae reiciendis nisi aspernatur quas exercitationem nihil dolorum aliquam, ex aliquid qui distinctio. +

+
+ {#each data.contributors as contributor} +
+ {contributor.login} +
+ {contributor.login} +

{contributor.contributions} contributions

+
+
+ {/each} +
\ No newline at end of file From e5395b4c699601e9351a4ea858618381ae2963dd Mon Sep 17 00:00:00 2001 From: conradolandia Date: Tue, 3 Sep 2024 17:04:01 -0500 Subject: [PATCH 10/57] Create ContributorCard and implement data fetching for 48 top contributors (divisible by 2 and 3) --- src/routes/about/+page.js | 2 +- src/routes/about/+page.svelte | 37 ++++++++++++++++++----------------- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index f35085fc..acebbcd2 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -1,4 +1,4 @@ -const dataSrc = `https://api.github.com/repos/spyder-ide/spyder/contributors`; +const dataSrc = `https://api.github.com/repos/spyder-ide/spyder/contributors?per_page=48`; export async function load({ fetch }) { const response = await fetch(dataSrc); diff --git a/src/routes/about/+page.svelte b/src/routes/about/+page.svelte index af4ea09a..469784ca 100644 --- a/src/routes/about/+page.svelte +++ b/src/routes/about/+page.svelte @@ -1,24 +1,25 @@ -
-

- {pageTitle} -

-

- Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo debitis eligendi dolorem optio adipisci voluptatem inventore eius recusandae reiciendis nisi aspernatur quas exercitationem nihil dolorum aliquam, ex aliquid qui distinctio. -

-
- {#each data.contributors as contributor} -
- {contributor.login} -
- {contributor.login} -

{contributor.contributions} contributions

-
-
- {/each} +{#if data.contributors} +
+

+ {pageTitle} +

+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo debitis eligendi dolorem optio adipisci voluptatem inventore eius recusandae reiciendis nisi aspernatur quas exercitationem nihil dolorum aliquam, ex aliquid qui distinctio. +

+
+ {#each data.contributors as contributor} + + {/each} +
-
\ No newline at end of file +{:else} + +{/if} \ No newline at end of file From 55357cbe3f019dd1d74009e202441ef8d5adba6a Mon Sep 17 00:00:00 2001 From: conradolandia Date: Tue, 3 Sep 2024 17:22:00 -0500 Subject: [PATCH 11/57] Add some error handling --- src/routes/about/+page.js | 12 +++++++++--- src/routes/about/+page.svelte | 30 ++++++++++++++++++++---------- 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index acebbcd2..a67400b4 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -1,7 +1,13 @@ const dataSrc = `https://api.github.com/repos/spyder-ide/spyder/contributors?per_page=48`; export async function load({ fetch }) { - const response = await fetch(dataSrc); - const contributors = await response.json(); - return { contributors }; + try { + const response = await fetch(dataSrc); + if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`); + const contributors = await response.json(); + return { contributors }; + } catch (error) { + console.error("Failed to fetch contributors:", error); + return { contributors: null, error: error.message }; + } } diff --git a/src/routes/about/+page.svelte b/src/routes/about/+page.svelte index 469784ca..9a127808 100644 --- a/src/routes/about/+page.svelte +++ b/src/routes/about/+page.svelte @@ -1,25 +1,35 @@ -{#if data.contributors} -
-

+
+ {#if data.error} +

Error: {data.error}

+ {:else if data.contributors && data.contributors.length > 0} +

{pageTitle}

- Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo debitis eligendi dolorem optio adipisci voluptatem inventore eius recusandae reiciendis nisi aspernatur quas exercitationem nihil dolorum aliquam, ex aliquid qui distinctio. + {pageIntro}

{#each data.contributors as contributor} {/each}
-
-{:else} - -{/if} \ No newline at end of file + {:else if data.contributors && data.contributors.length === 0} +

No contributors found.

+ {:else} + + {/if} +

From c09dad7aaae0c22df5adcf355c238d2e72d366f6 Mon Sep 17 00:00:00 2001 From: conradolandia Date: Tue, 3 Sep 2024 18:10:03 -0500 Subject: [PATCH 12/57] Add ContributorCard component and disable a line in `.gitignore` causing issues with the `$lib` directory --- .gitignore | 2 +- src/lib/components/ContributorCard.svelte | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 src/lib/components/ContributorCard.svelte diff --git a/.gitignore b/.gitignore index 34c3a6a6..6848f485 100644 --- a/.gitignore +++ b/.gitignore @@ -40,7 +40,7 @@ develop-eggs/ dist/ downloads/ eggs/ -lib/ +#lib/ # Producing an error: can't add files within Svelte's $lib/ directory lib64/ MANIFEST parts/ diff --git a/src/lib/components/ContributorCard.svelte b/src/lib/components/ContributorCard.svelte new file mode 100644 index 00000000..9538d367 --- /dev/null +++ b/src/lib/components/ContributorCard.svelte @@ -0,0 +1,21 @@ + + +
+ + {contributor.login} + +
+ {contributor.login} +

+ {contributor.contributions} contributions +

+
+
From 79d77a0f173f1cd5604f7bb272d1c587e74c6453 Mon Sep 17 00:00:00 2001 From: conradolandia Date: Tue, 10 Sep 2024 21:48:28 -0500 Subject: [PATCH 13/57] Improve desing and implementation of about page --- src/lib/blocks/ContributorBlock.svelte | 36 +++++++++++ src/lib/components/ContributorCard.svelte | 45 ++++++++++--- src/routes/about/+page.js | 73 ++++++++++++++++++++- src/routes/about/+page.svelte | 78 +++++++++++++++++------ tailwind.config.js | 4 ++ 5 files changed, 206 insertions(+), 30 deletions(-) create mode 100644 src/lib/blocks/ContributorBlock.svelte diff --git a/src/lib/blocks/ContributorBlock.svelte b/src/lib/blocks/ContributorBlock.svelte new file mode 100644 index 00000000..ae492599 --- /dev/null +++ b/src/lib/blocks/ContributorBlock.svelte @@ -0,0 +1,36 @@ + + +
+

+ {title} +

+

+ {intro} +

+
+ {#each contributors as contributor} + + {/each} +
+
diff --git a/src/lib/components/ContributorCard.svelte b/src/lib/components/ContributorCard.svelte index 9538d367..bf132ac5 100644 --- a/src/lib/components/ContributorCard.svelte +++ b/src/lib/components/ContributorCard.svelte @@ -1,21 +1,48 @@ -
+
{contributor.login} -
- {contributor.login} -

- {contributor.contributions} contributions -

-
+ + {contributor.name || contributor.login} + + {#if contributor.role} +

+ {contributor.role} +

+ {/if} +

+ {contributor.contributions} contributions +

+
+ {/if}
diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index a67400b4..212691e4 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -1,13 +1,80 @@ -const dataSrc = `https://api.github.com/repos/spyder-ide/spyder/contributors?per_page=48`; +const dataSrc = `https://api.github.com/repos/spyder-ide/spyder/contributors?per_page=100`; + +const currentContributors = [ + { + id: 365293, + name: "Carlos Córdoba", + role: "Lead mantainer" + }, + { + id: 16781833, + name: "Daniel Althviz", + role: "Co-mantainer" + }, + { + id: 17051931, + name: "C.A.M. Gerlach", + role: "Documentation and technical writing" + }, + { + id: 9618975, + name: "Ryan Clary", + role: "Installers" + }, + { + id: 7941918, + name: "Jitse Niesen", + role: "External plugins" + }, + { + id: 5204788, + name: "Hendrik Louzada", + role: "Remote development" + }, + { + id: 42411448, + name: "Juan Sebastian Bautista", + role: "Junior Developer" + }, + { + id: 5027583, + name: "Andrés Montoya", + role: "UI/UX Designer and Social Media" + } +]; + +function processContributors(current, all) { + // Update current contributors with the latest data from GitHub + const updatedCurrent = current.map(contributor => { + const match = all.find(c => c.id === contributor.id); + return match ? { ...contributor, ...match } : contributor; + }); + + // Get the remaining contributors that are not in the current list + const remainingContributors = all.filter(contributor => + !current.some(c => c.id === contributor.id) + ); + + // Just some random contributors to show as examples in the "past contributors" section + // TODO: Remove this after we have the past contributors from GitHub + const pastContributors = remainingContributors.sort(() => 0.5 - Math.random()).slice(0, 12); + + // Return the updated current contributors, past contributors, and remaining contributors + return { updatedCurrent, pastContributors, remainingContributors }; +} export async function load({ fetch }) { try { const response = await fetch(dataSrc); if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`); const contributors = await response.json(); - return { contributors }; + + // Process the contributors and get the updated current contributors, past contributors, and remaining contributors + const { updatedCurrent, pastContributors, remainingContributors } = processContributors(currentContributors, contributors); + + return { currentContributors: updatedCurrent, pastContributors, remainingContributors }; } catch (error) { console.error("Failed to fetch contributors:", error); - return { contributors: null, error: error.message }; + return { currentContributors, pastContributors: [], remainingContributors: [], error: error.message }; } } diff --git a/src/routes/about/+page.svelte b/src/routes/about/+page.svelte index 9a127808..1a9efc03 100644 --- a/src/routes/about/+page.svelte +++ b/src/routes/about/+page.svelte @@ -1,35 +1,77 @@
+

+ {pageTitle} +

+

+ {pageIntro} +

{#if data.error}

Error: {data.error}

- {:else if data.contributors && data.contributors.length > 0} -

- {pageTitle} -

-

- {pageIntro} -

-
- {#each data.contributors as contributor} - - {/each} -
- {:else if data.contributors && data.contributors.length === 0} -

No contributors found.

- {:else} + {:else if data.loading} + {:else} + {#if data.currentContributors && data.currentContributors.length > 0} + + {:else} + + {/if} + {#if data.pastContributors && data.pastContributors.length > 0} + + {:else} + + {/if} + {#if data.remainingContributors && data.remainingContributors.length > 0} + + {:else} + + {/if} {/if}
diff --git a/tailwind.config.js b/tailwind.config.js index 78728ea9..51e9a80b 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -22,6 +22,10 @@ export default { "4/3": "4 / 3", "16/10": "16 / 10", }, + gridTemplateColumns: { + '16': 'repeat(16, minmax(0, 1fr))', + '23': 'repeat(23, minmax(0, 1fr))', + }, typography: (theme) => ({ DEFAULT: { css: { From 76e81fb236b7366a684f8d7f601ac4c415ca4500 Mon Sep 17 00:00:00 2001 From: conradolandia Date: Wed, 11 Sep 2024 15:03:10 -0500 Subject: [PATCH 14/57] Remove number of contributions and add roles to past contributors (as a placeholder for now) --- src/lib/blocks/Header.svelte | 2 +- src/lib/components/ContributorCard.svelte | 3 --- src/lib/config/index.js | 7 +++++-- src/routes/about/+page.js | 1 + 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/lib/blocks/Header.svelte b/src/lib/blocks/Header.svelte index 419fffd8..65674ed7 100644 --- a/src/lib/blocks/Header.svelte +++ b/src/lib/blocks/Header.svelte @@ -27,7 +27,7 @@
-
{/if}
diff --git a/src/lib/config/index.js b/src/lib/config/index.js index be07c7e2..b3fa37df 100644 --- a/src/lib/config/index.js +++ b/src/lib/config/index.js @@ -43,8 +43,11 @@ export const navigation = [ href: `${base}/download/`, target: "_self", }, - ], - [ + { + text: "About", + href: `${base}/about/`, + target: "_self", + }, { text: "Blog", href: `${base}/blog/`, diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index 212691e4..455a5b94 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -58,6 +58,7 @@ function processContributors(current, all) { // Just some random contributors to show as examples in the "past contributors" section // TODO: Remove this after we have the past contributors from GitHub const pastContributors = remainingContributors.sort(() => 0.5 - Math.random()).slice(0, 12); + pastContributors.forEach(element => { element.role = "Lorem Ipsum" }); // Return the updated current contributors, past contributors, and remaining contributors return { updatedCurrent, pastContributors, remainingContributors }; From 0803ef0164413a74863fb8b41d836ef6ad704bd3 Mon Sep 17 00:00:00 2001 From: conradolandia Date: Wed, 11 Sep 2024 18:29:51 -0500 Subject: [PATCH 15/57] Improve example and remove some unneeded elements --- src/lib/blocks/ContributorBlock.svelte | 28 +++++++++++++---------- src/lib/components/ContributorCard.svelte | 3 ++- src/routes/about/+page.js | 7 +++++- src/routes/about/+page.svelte | 17 +++----------- 4 files changed, 27 insertions(+), 28 deletions(-) diff --git a/src/lib/blocks/ContributorBlock.svelte b/src/lib/blocks/ContributorBlock.svelte index ae492599..e31473ee 100644 --- a/src/lib/blocks/ContributorBlock.svelte +++ b/src/lib/blocks/ContributorBlock.svelte @@ -12,18 +12,22 @@ class:max-w-4xl={size === "medium"} class:max-w-6xl={size === "large"} > -

- {title} -

-

- {intro} -

+ {#if title} +

+ {title} +

+ {/if} + {#if intro} +

+ {intro} +

+ {/if}
@@ -30,6 +30,7 @@ href={contributor.html_url} target="_blank" rel="noopener noreferrer" + class="break-all" class:text-xl={size === "large"} class:text-base={size !== "large"} > diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index 455a5b94..196580e4 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -60,8 +60,13 @@ function processContributors(current, all) { const pastContributors = remainingContributors.sort(() => 0.5 - Math.random()).slice(0, 12); pastContributors.forEach(element => { element.role = "Lorem Ipsum" }); + // Remove pastContributors elements from remainingContributors + const remainingContributorsFiltered = remainingContributors.filter(contributor => + !pastContributors.some(pastContributor => pastContributor.id === contributor.id) + ); + // Return the updated current contributors, past contributors, and remaining contributors - return { updatedCurrent, pastContributors, remainingContributors }; + return { updatedCurrent, pastContributors, remainingContributors: remainingContributorsFiltered }; } export async function load({ fetch }) { diff --git a/src/routes/about/+page.svelte b/src/routes/about/+page.svelte index 1a9efc03..c0becb72 100644 --- a/src/routes/about/+page.svelte +++ b/src/routes/about/+page.svelte @@ -4,23 +4,14 @@ export let data; - let pageTitle = "About Spyder IDE"; + let pageTitle = "Who We Are"; let pageIntro = `Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo debitis eligendi dolorem optio adipisci voluptatem inventore eius recusandae reiciendis nisi aspernatur quas exercitationem nihil dolorum aliquam, ex aliquid qui distinctio.`; - let currentTitle = "Current Contributors"; - let currentIntro = `Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo debitis - eligendi dolorem optio adipisci voluptatem inventore eius recusandae - reiciendis nisi aspernatur quas exercitationem nihil dolorum aliquam, ex - aliquid qui distinctio.`; - - let pastTitle = "Past Contributors"; - let pastIntro = `Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo debitis - eligendi dolorem optio adipisci voluptatem inventore eius recusandae - reiciendis nisi aspernatur quas exercitationem nihil dolorum aliquam, ex - aliquid qui distinctio.`; + let currentTitle = "Team Members"; + let pastTitle = "Former Team Members"; let remainingTitle = "We are an open source project"; let remainingIntro = `Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo debitis @@ -46,7 +37,6 @@ {#if data.currentContributors && data.currentContributors.length > 0} @@ -56,7 +46,6 @@ {#if data.pastContributors && data.pastContributors.length > 0} From 395fbf128b072229fb7219f9f398f4ac76e19556 Mon Sep 17 00:00:00 2001 From: conradolandia Date: Fri, 13 Sep 2024 13:23:49 -0500 Subject: [PATCH 16/57] Add past contributors and improve visualization of team members --- src/lib/blocks/ContributorBlock.svelte | 8 +-- src/lib/components/ContributorCard.svelte | 3 +- src/routes/about/+page.js | 80 ++++++++++++++++++----- 3 files changed, 69 insertions(+), 22 deletions(-) diff --git a/src/lib/blocks/ContributorBlock.svelte b/src/lib/blocks/ContributorBlock.svelte index e31473ee..30a0b2d5 100644 --- a/src/lib/blocks/ContributorBlock.svelte +++ b/src/lib/blocks/ContributorBlock.svelte @@ -9,17 +9,17 @@
{#if title} -

+

{title}

{/if} {#if intro}

{contributor.name || contributor.login} {#if contributor.role} -

+

{contributor.role}

{/if} diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index 196580e4..51273d10 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -28,7 +28,7 @@ const currentContributors = [ }, { id: 5204788, - name: "Hendrik Louzada", + name: "Hendrik D. Louzada", role: "Remote development" }, { @@ -43,30 +43,78 @@ const currentContributors = [ } ]; -function processContributors(current, all) { +const pastContributors = [ + { + id: 1311787, + name: "Pierre Raybaut", + role: "Spyder Creator" + }, + { + id: 1878982, + name: "Edgar Andrés Margffoy Tuay", + role: "LSP Support" + }, + { + id: 50221806, + name: "Isabela Presedo-Floyd", + role: "UX/UI Redesign" + }, + { + id: 3627835, + name: "Gonzalo Peña-Castellanos", + role: "API Redesign" + }, + { + id: 18587879, + name: "Juanita Gómez", + role: "Docs & Social Media" + }, + { + id: 10170372, + name: "Jean-Sébastien Gosselin", + role: "Plots pane" + }, + { + id: 20992645, + name: "Stephannie Jimenez Gacha", + role: "Spyder-terminal maintainer" + }, + { + id: 2397974, + name: "Sylvain Corlay", + role: "New Icon Theme" + }, + { + id: 2024217, + name: "Rafael Laverde", + role: "Editor improvements" + }, + { + id: 10513354, + name: "Brian Olsen", + role: "Console improvements" + }, +]; + +function processContributors(current, past, all) { // Update current contributors with the latest data from GitHub const updatedCurrent = current.map(contributor => { const match = all.find(c => c.id === contributor.id); return match ? { ...contributor, ...match } : contributor; }); + const updatedPast = past.map(contributor => { + const match = all.find(c => c.id === contributor.id); + return match ? { ...contributor, ...match } : contributor; + }); + // Get the remaining contributors that are not in the current list const remainingContributors = all.filter(contributor => - !current.some(c => c.id === contributor.id) - ); - - // Just some random contributors to show as examples in the "past contributors" section - // TODO: Remove this after we have the past contributors from GitHub - const pastContributors = remainingContributors.sort(() => 0.5 - Math.random()).slice(0, 12); - pastContributors.forEach(element => { element.role = "Lorem Ipsum" }); - - // Remove pastContributors elements from remainingContributors - const remainingContributorsFiltered = remainingContributors.filter(contributor => - !pastContributors.some(pastContributor => pastContributor.id === contributor.id) + !current.some(c => c.id === contributor.id) && !past.some(p => p.id === contributor.id) ); // Return the updated current contributors, past contributors, and remaining contributors - return { updatedCurrent, pastContributors, remainingContributors: remainingContributorsFiltered }; + return { updatedCurrent, updatedPast, remainingContributors }; } export async function load({ fetch }) { @@ -76,9 +124,9 @@ export async function load({ fetch }) { const contributors = await response.json(); // Process the contributors and get the updated current contributors, past contributors, and remaining contributors - const { updatedCurrent, pastContributors, remainingContributors } = processContributors(currentContributors, contributors); + const { updatedCurrent, updatedPast, remainingContributors } = processContributors(currentContributors, pastContributors, contributors); - return { currentContributors: updatedCurrent, pastContributors, remainingContributors }; + return { currentContributors: updatedCurrent, pastContributors: updatedPast, remainingContributors }; } catch (error) { console.error("Failed to fetch contributors:", error); return { currentContributors, pastContributors: [], remainingContributors: [], error: error.message }; From 7a035d7f168c7c57a8bfd0ecdaa21e1bab03f39d Mon Sep 17 00:00:00 2001 From: conradolandia Date: Fri, 13 Sep 2024 19:32:04 -0500 Subject: [PATCH 17/57] Improve About page, add diversity data and graphic of statisitics. Add menu item, and normalize spacing in header menu --- package-lock.json | 43 +++- package.json | 2 + src/lib/blocks/ContributorBlock.svelte | 15 +- src/lib/components/DonutGraph.svelte | 47 ++++ src/routes/about/+page.js | 327 ++++++++++++++++--------- src/routes/about/+page.svelte | 58 +++-- 6 files changed, 345 insertions(+), 147 deletions(-) create mode 100644 src/lib/components/DonutGraph.svelte diff --git a/package-lock.json b/package-lock.json index 9ccd3213..cf263d31 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,12 +4,15 @@ "requires": true, "packages": { "": { + "name": "website-proposal", "license": "MIT", "dependencies": { + "chart.js": "^4.4.4", "rehype-class-names": "^2.0.0", "rehype-figure": "^1.0.1", "rehype-plugin-image-native-lazy-loading": "^1.2.0", "rehype-rewrite": "^4.0.2", + "svelte-chartjs": "^3.1.5", "svelte-icons-pack": "^3.1.3" }, "devDependencies": { @@ -511,6 +514,12 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@kurkle/color": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", + "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==", + "license": "MIT" + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1240,6 +1249,18 @@ ], "license": "CC-BY-4.0" }, + "node_modules/chart.js": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.4.tgz", + "integrity": "sha512-emICKGBABnxhMjUjlYRR12PmOXhJ2eJjEHL2/dZlWjxRAZT1D8xplLFq5M0tMQK8ja+wBS/tuVEJB5C6r7VxJA==", + "license": "MIT", + "dependencies": { + "@kurkle/color": "^0.3.0" + }, + "engines": { + "pnpm": ">=8" + } + }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -2402,9 +2423,9 @@ "license": "MIT" }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { @@ -3597,9 +3618,9 @@ } }, "node_modules/svelte": { - "version": "4.2.17", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.17.tgz", - "integrity": "sha512-N7m1YnoXtRf5wya5Gyx3TWuTddI4nAyayyIWFojiWV5IayDYNV5i2mRp/7qNGol4DtxEYxljmrbgp1HM6hUbmQ==", + "version": "4.2.19", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.19.tgz", + "integrity": "sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==", "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.1", @@ -3621,6 +3642,16 @@ "node": ">=16" } }, + "node_modules/svelte-chartjs": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/svelte-chartjs/-/svelte-chartjs-3.1.5.tgz", + "integrity": "sha512-ka2zh7v5FiwfAX1oMflZ0HkNkgjHjFqANgRyC+vNYXfxtx2ku68Zo+2KgbKeBH2nS1ThDqkIACPzGxy4T0UaoA==", + "license": "MIT", + "peerDependencies": { + "chart.js": "^3.5.0 || ^4.0.0", + "svelte": "^4.0.0" + } + }, "node_modules/svelte-hmr": { "version": "0.16.0", "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.16.0.tgz", diff --git a/package.json b/package.json index 9c114286..2dd597a3 100644 --- a/package.json +++ b/package.json @@ -24,10 +24,12 @@ "vite": "^5.1.6" }, "dependencies": { + "chart.js": "^4.4.4", "rehype-class-names": "^2.0.0", "rehype-figure": "^1.0.1", "rehype-plugin-image-native-lazy-loading": "^1.2.0", "rehype-rewrite": "^4.0.2", + "svelte-chartjs": "^3.1.5", "svelte-icons-pack": "^3.1.3" } } diff --git a/src/lib/blocks/ContributorBlock.svelte b/src/lib/blocks/ContributorBlock.svelte index 30a0b2d5..3853258d 100644 --- a/src/lib/blocks/ContributorBlock.svelte +++ b/src/lib/blocks/ContributorBlock.svelte @@ -13,9 +13,9 @@ class:max-w-full={size === "large"} > {#if title} -

+

{title} -

+

{/if} {#if intro}

{/if}
{#each contributors as contributor} diff --git a/src/lib/components/DonutGraph.svelte b/src/lib/components/DonutGraph.svelte new file mode 100644 index 00000000..690d66e0 --- /dev/null +++ b/src/lib/components/DonutGraph.svelte @@ -0,0 +1,47 @@ + + + diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index 51273d10..ed331f51 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -1,134 +1,229 @@ const dataSrc = `https://api.github.com/repos/spyder-ide/spyder/contributors?per_page=100`; const currentContributors = [ - { - id: 365293, - name: "Carlos Córdoba", - role: "Lead mantainer" - }, - { - id: 16781833, - name: "Daniel Althviz", - role: "Co-mantainer" - }, - { - id: 17051931, - name: "C.A.M. Gerlach", - role: "Documentation and technical writing" - }, - { - id: 9618975, - name: "Ryan Clary", - role: "Installers" - }, - { - id: 7941918, - name: "Jitse Niesen", - role: "External plugins" - }, - { - id: 5204788, - name: "Hendrik D. Louzada", - role: "Remote development" - }, - { - id: 42411448, - name: "Juan Sebastian Bautista", - role: "Junior Developer" - }, - { - id: 5027583, - name: "Andrés Montoya", - role: "UI/UX Designer and Social Media" - } + { + id: 365293, + name: "Carlos Córdoba", + role: "Lead mantainer", + latino: true, + }, + { + id: 16781833, + name: "Daniel Althviz", + role: "Co-mantainer", + }, + { + id: 17051931, + name: "C.A.M. Gerlach", + role: "Documentation and technical writing", + }, + { + id: 9618975, + name: "Ryan Clary", + role: "Installers", + }, + { + id: 7941918, + name: "Jitse Niesen", + role: "External plugins", + }, + { + id: 5204788, + name: "Hendrik D. Louzada", + role: "Remote development", + latino: true, + }, + { + id: 42411448, + name: "Juan Sebastian Bautista", + role: "Junior Developer", + latino: true, + }, + { + id: 5027583, + name: "Andrés Montoya", + role: "UI/UX Designer and Social Media", + latino: true, + }, ]; const pastContributors = [ - { - id: 1311787, - name: "Pierre Raybaut", - role: "Spyder Creator" - }, - { - id: 1878982, - name: "Edgar Andrés Margffoy Tuay", - role: "LSP Support" - }, - { - id: 50221806, - name: "Isabela Presedo-Floyd", - role: "UX/UI Redesign" - }, - { - id: 3627835, - name: "Gonzalo Peña-Castellanos", - role: "API Redesign" - }, - { - id: 18587879, - name: "Juanita Gómez", - role: "Docs & Social Media" - }, - { - id: 10170372, - name: "Jean-Sébastien Gosselin", - role: "Plots pane" - }, - { - id: 20992645, - name: "Stephannie Jimenez Gacha", - role: "Spyder-terminal maintainer" - }, - { - id: 2397974, - name: "Sylvain Corlay", - role: "New Icon Theme" - }, - { - id: 2024217, - name: "Rafael Laverde", - role: "Editor improvements" - }, - { - id: 10513354, - name: "Brian Olsen", - role: "Console improvements" - }, + { + id: 1311787, + name: "Pierre Raybaut", + role: "Spyder Creator", + }, + { + id: 1878982, + name: "Edgar Margffoy", + role: "LSP Support", + }, + { + id: 50221806, + name: "Isabela Presedo-Floyd", + role: "UX/UI Redesign", + female: true, + }, + { + id: 3627835, + name: "Gonzalo Peña-Castellanos", + role: "API Redesign", + latino: true, + }, + { + id: 18587879, + name: "Juanita Gómez", + role: "Docs & Social Media", + latino: true, + female: true, + }, + { + id: 10170372, + name: "Jean-Sébastien Gosselin", + role: "Plots pane", + }, + { + id: 20992645, + name: "Stephannie Jimenez", + role: "Spyder-terminal maintainer", + latino: true, + female: true, + }, + { + id: 2397974, + name: "Sylvain Corlay", + role: "New Icon Theme", + }, + { + id: 2024217, + name: "Rafael Laverde", + role: "Editor improvements", + latino: true, + }, + { + id: 10513354, + name: "Brian Olsen", + role: "Console improvements", + }, ]; +const textData = { + pageTitle: "Who We Are", + pageIntro: `Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo debitis + eligendi dolorem optio adipisci voluptatem inventore eius recusandae + reiciendis nisi aspernatur quas exercitationem nihil dolorum aliquam, ex + aliquid qui distinctio.`, + currentTitle: "Team Members", + pastTitle: "Former Team Members", + remainingTitle: "We are an open source project", + remainingIntro: `Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo debitis + eligendi dolorem optio adipisci voluptatem inventore eius recusandae + reiciendis nisi aspernatur quas exercitationem nihil dolorum aliquam, ex + aliquid qui distinctio.`, + diversityTitle: `Diversity in Our Core Contributors`, + diversityIntro: `Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo debitis + eligendi dolorem optio adipisci voluptatem inventore eius recusandae + reiciendis nisi aspernatur quas exercitationem nihil dolorum aliquam, ex + aliquid qui distinctio.`, +}; + function processContributors(current, past, all) { - // Update current contributors with the latest data from GitHub - const updatedCurrent = current.map(contributor => { - const match = all.find(c => c.id === contributor.id); - return match ? { ...contributor, ...match } : contributor; - }); + // Update current contributors with the latest data from GitHub + const updatedCurrent = current.map((contributor) => { + const match = all.find((c) => c.id === contributor.id); + return match ? { ...contributor, ...match } : contributor; + }); - const updatedPast = past.map(contributor => { - const match = all.find(c => c.id === contributor.id); - return match ? { ...contributor, ...match } : contributor; - }); + const updatedPast = past.map((contributor) => { + const match = all.find((c) => c.id === contributor.id); + return match ? { ...contributor, ...match } : contributor; + }); - // Get the remaining contributors that are not in the current list - const remainingContributors = all.filter(contributor => - !current.some(c => c.id === contributor.id) && !past.some(p => p.id === contributor.id) - ); + // Get the remaining contributors that are not in the current list + const remainingContributors = all.filter( + (contributor) => + !current.some((c) => c.id === contributor.id) && + !past.some((p) => p.id === contributor.id) + ); + + const totalContributorsPool = [...updatedCurrent, ...updatedPast]; + const totalContributors = totalContributorsPool.length; + + // Count the number of female and latinos contributors + const totalLatinos = totalContributorsPool.filter( + (contributor) => contributor.latino + ).length; + const totalFemales = totalContributorsPool.filter( + (contributor) => contributor.female + ).length; - // Return the updated current contributors, past contributors, and remaining contributors - return { updatedCurrent, updatedPast, remainingContributors }; + // Calculate percentages + const percentageLatinos = (totalLatinos / totalContributors) * 100; + const percentageFemales = (totalFemales / totalContributors) * 100; + + // Return the updated current contributors, past contributors, and remaining contributors + return { + updatedCurrent, + updatedPast, + remainingContributors, + totalContributors, + totalLatinos, + totalFemales, + percentageLatinos, + percentageFemales, + }; } export async function load({ fetch }) { - try { - const response = await fetch(dataSrc); - if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`); - const contributors = await response.json(); - - // Process the contributors and get the updated current contributors, past contributors, and remaining contributors - const { updatedCurrent, updatedPast, remainingContributors } = processContributors(currentContributors, pastContributors, contributors); + try { + // Fetch the contributors data + const contributors = []; - return { currentContributors: updatedCurrent, pastContributors: updatedPast, remainingContributors }; - } catch (error) { - console.error("Failed to fetch contributors:", error); - return { currentContributors, pastContributors: [], remainingContributors: [], error: error.message }; + for (let n = 1; n <= 3; n++) { + const response = await fetch(`${dataSrc}&page=${n}`); + if (!response.ok) + throw new Error(`HTTP error! status: ${response.status}`); + const data = await response.json(); + contributors.push(...data); } + + // Process the contributors and get the updated current contributors, + // past contributors, and remaining contributors + const { + updatedCurrent, + updatedPast, + remainingContributors, + totalContributors, + totalLatinos, + totalFemales, + percentageLatinos, + percentageFemales, + } = processContributors( + currentContributors, + pastContributors, + contributors + ); + + return { + currentContributors: updatedCurrent, + pastContributors: updatedPast, + remainingContributors, + textData, + totalContributors, + totalLatinos, + totalFemales, + percentageLatinos, + percentageFemales, + loading: false, + error: null, + }; + } catch (error) { + console.error("Failed to fetch contributors:", error); + return { + currentContributors, + pastContributors: [], + remainingContributors: [], + error: error.message, + }; + } } diff --git a/src/routes/about/+page.svelte b/src/routes/about/+page.svelte index c0becb72..ab7515a2 100644 --- a/src/routes/about/+page.svelte +++ b/src/routes/about/+page.svelte @@ -1,23 +1,28 @@
@@ -29,38 +34,49 @@

{pageIntro}

- {#if data.error} -

Error: {data.error}

- {:else if data.loading} + {#if error} +

Error: {error}

+ {:else if loading} {:else} - {#if data.currentContributors && data.currentContributors.length > 0} + {#if currentContributors && currentContributors.length > 0} {:else} {/if} - {#if data.pastContributors && data.pastContributors.length > 0} + {#if pastContributors && pastContributors.length > 0} {:else} {/if} - {#if data.remainingContributors && data.remainingContributors.length > 0} + {#if remainingContributors && remainingContributors.length > 0} {:else} {/if} +
+

{diversityTitle}

+
+
+

{diversityIntro}

+
+
+ +
+
+
{/if}
From 2b93510ab40c5cf1ed33d72085423c82ac35b285 Mon Sep 17 00:00:00 2001 From: conradolandia Date: Mon, 16 Sep 2024 12:36:05 -0500 Subject: [PATCH 18/57] Fix a small spacing issue that affect mobile browsers --- src/routes/about/+page.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/about/+page.svelte b/src/routes/about/+page.svelte index ab7515a2..ad4459cb 100644 --- a/src/routes/about/+page.svelte +++ b/src/routes/about/+page.svelte @@ -73,7 +73,7 @@

{diversityIntro}

-
+
From 28b40a04039072ccce0900baeaafc3e6638b3986 Mon Sep 17 00:00:00 2001 From: conradolandia Date: Tue, 17 Sep 2024 22:05:19 -0500 Subject: [PATCH 19/57] Add C.A.M. new pic for the About page. Simplified a function --- package-lock.json | 3 +-- src/routes/about/+page.js | 17 ++++++++--------- static/assets/authors/camgerlach/pic.webp | Bin 0 -> 81984 bytes 3 files changed, 9 insertions(+), 11 deletions(-) create mode 100644 static/assets/authors/camgerlach/pic.webp diff --git a/package-lock.json b/package-lock.json index a6dbd972..52620008 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,15 +4,14 @@ "requires": true, "packages": { "": { - "name": "website-proposal", "license": "MIT", "dependencies": { "chart.js": "^4.4.4", "rehype-class-names": "^2.0.0", "rehype-rewrite": "^4.0.2", - "svelte-chartjs": "^3.1.5", "rehype-title-figure": "^0.1.2", "remark-smartypants": "^3.0.2", + "svelte-chartjs": "^3.1.5", "svelte-icons-pack": "^3.1.3" }, "devDependencies": { diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index ed331f51..a81e0b19 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -16,6 +16,7 @@ const currentContributors = [ id: 17051931, name: "C.A.M. Gerlach", role: "Documentation and technical writing", + avatar_url: "/assets/authors/camgerlach/pic.webp" }, { id: 9618975, @@ -128,16 +129,14 @@ const textData = { }; function processContributors(current, past, all) { - // Update current contributors with the latest data from GitHub - const updatedCurrent = current.map((contributor) => { - const match = all.find((c) => c.id === contributor.id); - return match ? { ...contributor, ...match } : contributor; - }); + // Update current contributors from GitHub with custom data + const updateContributor = (contributor, allContributors) => { + const match = allContributors.find((c) => c.id === contributor.id); + return match ? { ...match, ...contributor } : contributor; + }; - const updatedPast = past.map((contributor) => { - const match = all.find((c) => c.id === contributor.id); - return match ? { ...contributor, ...match } : contributor; - }); + const updatedCurrent = current.map((contributor) => updateContributor(contributor, all)); + const updatedPast = past.map((contributor) => updateContributor(contributor, all)); // Get the remaining contributors that are not in the current list const remainingContributors = all.filter( diff --git a/static/assets/authors/camgerlach/pic.webp b/static/assets/authors/camgerlach/pic.webp new file mode 100644 index 0000000000000000000000000000000000000000..a0337292c9b3243b43bf8a2240872cdf89e091f0 GIT binary patch literal 81984 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 Date: Tue, 17 Sep 2024 23:07:05 -0500 Subject: [PATCH 20/57] Update src/routes/about/+page.js Co-authored-by: C.A.M. Gerlach --- src/routes/about/+page.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index a81e0b19..720b3da0 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -114,8 +114,8 @@ const textData = { eligendi dolorem optio adipisci voluptatem inventore eius recusandae reiciendis nisi aspernatur quas exercitationem nihil dolorum aliquam, ex aliquid qui distinctio.`, - currentTitle: "Team Members", - pastTitle: "Former Team Members", + currentTitle: "Core team", + pastTitle: "Past team members", remainingTitle: "We are an open source project", remainingIntro: `Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo debitis eligendi dolorem optio adipisci voluptatem inventore eius recusandae From 0d627918a710a3dd1eed1a7c0c402e42b614cae1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Conrado=20Montoya=20Acosta?= Date: Tue, 17 Sep 2024 23:07:18 -0500 Subject: [PATCH 21/57] Update src/routes/about/+page.js Co-authored-by: C.A.M. Gerlach --- src/routes/about/+page.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index 720b3da0..11f702ce 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -116,7 +116,7 @@ const textData = { aliquid qui distinctio.`, currentTitle: "Core team", pastTitle: "Past team members", - remainingTitle: "We are an open source project", + remainingTitle: "Contributor community", remainingIntro: `Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo debitis eligendi dolorem optio adipisci voluptatem inventore eius recusandae reiciendis nisi aspernatur quas exercitationem nihil dolorum aliquam, ex From addb107f04c83f6696c7d7b5a95e1ffa8560963d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Conrado=20Montoya=20Acosta?= Date: Tue, 17 Sep 2024 23:07:32 -0500 Subject: [PATCH 22/57] Update src/routes/about/+page.js Co-authored-by: C.A.M. Gerlach --- src/routes/about/+page.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index 11f702ce..c787e338 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -121,7 +121,7 @@ const textData = { eligendi dolorem optio adipisci voluptatem inventore eius recusandae reiciendis nisi aspernatur quas exercitationem nihil dolorum aliquam, ex aliquid qui distinctio.`, - diversityTitle: `Diversity in Our Core Contributors`, + diversityTitle: `Diversity and Inclusion`, diversityIntro: `Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo debitis eligendi dolorem optio adipisci voluptatem inventore eius recusandae reiciendis nisi aspernatur quas exercitationem nihil dolorum aliquam, ex From 402a1b849532250b2ccf9d2aeb1c7a4b69cdafcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Conrado=20Montoya=20Acosta?= Date: Tue, 17 Sep 2024 23:07:57 -0500 Subject: [PATCH 23/57] Update src/routes/about/+page.js Co-authored-by: C.A.M. Gerlach --- src/routes/about/+page.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index c787e338..1c7ca866 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -110,10 +110,8 @@ const pastContributors = [ const textData = { pageTitle: "Who We Are", - pageIntro: `Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo debitis - eligendi dolorem optio adipisci voluptatem inventore eius recusandae - reiciendis nisi aspernatur quas exercitationem nihil dolorum aliquam, ex - aliquid qui distinctio.`, + pageIntro: `Spyder is an open source, community-developed scientific environment and IDE written in Python, for Python. + As scientists, engineers and analysts just like you, we built it to combine the power of a comprehensive development tool with the speed of an interactive data exploration package, all in one easy-to-use interface.`, currentTitle: "Core team", pastTitle: "Past team members", remainingTitle: "Contributor community", From 8467b3e279f526aab36a4b7e9b09387555714ea4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Conrado=20Montoya=20Acosta?= Date: Tue, 17 Sep 2024 23:09:23 -0500 Subject: [PATCH 24/57] Update src/routes/about/+page.js Co-authored-by: C.A.M. Gerlach --- src/routes/about/+page.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index 1c7ca866..c80957da 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -115,10 +115,8 @@ const textData = { currentTitle: "Core team", pastTitle: "Past team members", remainingTitle: "Contributor community", - remainingIntro: `Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo debitis - eligendi dolorem optio adipisci voluptatem inventore eius recusandae - reiciendis nisi aspernatur quas exercitationem nihil dolorum aliquam, ex - aliquid qui distinctio.`, + remainingIntro: `Spyder is made possible by a collective of developers, testers, translators and donors, hailing from all around the globe! + We exist by and for our worldwide community, and even the smallest contribution makes a world of different for us all.`, diversityTitle: `Diversity and Inclusion`, diversityIntro: `Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo debitis eligendi dolorem optio adipisci voluptatem inventore eius recusandae From 315ecbb8e17be2ef1e276e17c642062d2f2adb59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Conrado=20Montoya=20Acosta?= Date: Tue, 17 Sep 2024 23:09:46 -0500 Subject: [PATCH 25/57] Update src/routes/about/+page.js Co-authored-by: C.A.M. Gerlach --- src/routes/about/+page.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index c80957da..15c84234 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -118,10 +118,11 @@ const textData = { remainingIntro: `Spyder is made possible by a collective of developers, testers, translators and donors, hailing from all around the globe! We exist by and for our worldwide community, and even the smallest contribution makes a world of different for us all.`, diversityTitle: `Diversity and Inclusion`, - diversityIntro: `Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo debitis - eligendi dolorem optio adipisci voluptatem inventore eius recusandae - reiciendis nisi aspernatur quas exercitationem nihil dolorum aliquam, ex - aliquid qui distinctio.`, + diversityIntro: `We're proud of our highly diverse core devs contributors and user community, + bringing numerous distinct backgrounds and perspectives to the table. + The Spyder team is led by, majority-composed-of, and recruits heavily from countries, languages, ethnicities and gender identities historically underrepresented in science and open source software, particularly in Latin America. + Our contributors come from every inhabited continent on Earth and dozens of countries all around the world, each bringing unique needs and perspectives to the table. + What's more, we help translate Spyder into almost a dozen languages for our user community across the globe, and we welcome you to join us!`, }; function processContributors(current, past, all) { From 9d9394c2bd60e77afde7c3b64813be6ab85f6ff8 Mon Sep 17 00:00:00 2001 From: conradolandia Date: Tue, 17 Sep 2024 23:43:22 -0500 Subject: [PATCH 26/57] Improve formatting of src/routes/about/+page.svelte --- src/routes/about/+page.svelte | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/routes/about/+page.svelte b/src/routes/about/+page.svelte index ad4459cb..6d464aa7 100644 --- a/src/routes/about/+page.svelte +++ b/src/routes/about/+page.svelte @@ -27,7 +27,15 @@

{pageTitle}

@@ -68,13 +76,25 @@ {/if}
-

{diversityTitle}

+

+ {diversityTitle} +

{diversityIntro}

- +
From 2415f8c5e4e8ee347f45da203048d3e89acdd7cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Conrado=20Montoya=20Acosta?= Date: Wed, 18 Sep 2024 14:01:44 -0500 Subject: [PATCH 27/57] Apply suggestions from code review Co-authored-by: C.A.M. Gerlach --- src/routes/about/+page.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index 15c84234..5b934c55 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -15,7 +15,7 @@ const currentContributors = [ { id: 17051931, name: "C.A.M. Gerlach", - role: "Documentation and technical writing", + role: "Docs & tech writing", avatar_url: "/assets/authors/camgerlach/pic.webp" }, { @@ -43,7 +43,7 @@ const currentContributors = [ { id: 5027583, name: "Andrés Montoya", - role: "UI/UX Designer and Social Media", + role: "UI/UX Design & Social Media", latino: true, }, ]; @@ -86,7 +86,7 @@ const pastContributors = [ { id: 20992645, name: "Stephannie Jimenez", - role: "Spyder-terminal maintainer", + role: "Spyder-Terminal maintainer", latino: true, female: true, }, From 91a5723a9530c2f4c08039f20a70fbb4d86cf907 Mon Sep 17 00:00:00 2001 From: conradolandia Date: Mon, 23 Sep 2024 18:52:00 -0500 Subject: [PATCH 28/57] Add preliminar support for tooltips with html content, we'll see if this is enough --- package-lock.json | 41 +++++++++++++++++++++++ package.json | 3 +- src/lib/components/ContributorCard.svelte | 21 ++++++++++++ src/routes/about/+page.js | 17 +++++++--- 4 files changed, 77 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 52620008..693c8c6b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,6 +26,7 @@ "postcss": "^8.4.38", "svelte": "^4.2.12", "svelte-youtube-embed": "^0.2.3", + "svooltip": "^0.8.3", "tailwindcss": "^3.4.3", "vite": "^5.1.6" } @@ -447,6 +448,34 @@ "node": ">=12" } }, + "node_modules/@floating-ui/core": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", + "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.8" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.11.tgz", + "integrity": "sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.8" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", + "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==", + "dev": true, + "license": "MIT" + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -3663,6 +3692,18 @@ "integrity": "sha512-+HYK224eJ5tSEM6chZgODuSOuaXqv/l5Xj6tvvjqQfrQzdG33jyjYVNzREXIVTerdWSvyqbm5A2BpL8tdwNhQw==", "dev": true }, + "node_modules/svooltip": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/svooltip/-/svooltip-0.8.3.tgz", + "integrity": "sha512-ruSxiF0nc3WvqY2wEwOI4pIfOZhC52b5K5L9t8bofEfHcxbME+QodvzRbuIcpp64r0XXXT+OYJmwIFDsFimXrg==", + "dev": true, + "dependencies": { + "@floating-ui/dom": "^1.6.10" + }, + "peerDependencies": { + "svelte": "^4.0.0" + } + }, "node_modules/tailwindcss": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz", diff --git a/package.json b/package.json index 87b6fe3d..0b8db58c 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "postcss": "^8.4.38", "svelte": "^4.2.12", "svelte-youtube-embed": "^0.2.3", + "svooltip": "^0.8.3", "tailwindcss": "^3.4.3", "vite": "^5.1.6" }, @@ -27,9 +28,9 @@ "chart.js": "^4.4.4", "rehype-class-names": "^2.0.0", "rehype-rewrite": "^4.0.2", - "svelte-chartjs": "^3.1.5", "rehype-title-figure": "^0.1.2", "remark-smartypants": "^3.0.2", + "svelte-chartjs": "^3.1.5", "svelte-icons-pack": "^3.1.3" } } diff --git a/src/lib/components/ContributorCard.svelte b/src/lib/components/ContributorCard.svelte index dfa97b1f..0596b142 100644 --- a/src/lib/components/ContributorCard.svelte +++ b/src/lib/components/ContributorCard.svelte @@ -1,6 +1,19 @@
{contributor.role} + {#if contributor.tooltip} + + {/if}

{/if}
diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index 5b934c55..dcf4c5fe 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -1,3 +1,5 @@ +import { compile } from 'mdsvex'; + const dataSrc = `https://api.github.com/repos/spyder-ide/spyder/contributors?per_page=100`; const currentContributors = [ @@ -6,6 +8,13 @@ const currentContributors = [ name: "Carlos Córdoba", role: "Lead mantainer", latino: true, + tooltip: ` +
    +
  • Revolutionized everything
  • +
  • Changed the world for the better
  • +
  • Made things better for everyone
  • +
+ ` }, { id: 16781833, @@ -118,15 +127,15 @@ const textData = { remainingIntro: `Spyder is made possible by a collective of developers, testers, translators and donors, hailing from all around the globe! We exist by and for our worldwide community, and even the smallest contribution makes a world of different for us all.`, diversityTitle: `Diversity and Inclusion`, - diversityIntro: `We're proud of our highly diverse core devs contributors and user community, + diversityIntro: `We're proud of our highly diverse core devs contributors and user community, bringing numerous distinct backgrounds and perspectives to the table. The Spyder team is led by, majority-composed-of, and recruits heavily from countries, languages, ethnicities and gender identities historically underrepresented in science and open source software, particularly in Latin America. Our contributors come from every inhabited continent on Earth and dozens of countries all around the world, each bringing unique needs and perspectives to the table. What's more, we help translate Spyder into almost a dozen languages for our user community across the globe, and we welcome you to join us!`, }; -function processContributors(current, past, all) { - // Update current contributors from GitHub with custom data +const processContributors = (current, past, all) => { + // Update current/past contributors from GitHub with custom data const updateContributor = (contributor, allContributors) => { const match = allContributors.find((c) => c.id === contributor.id); return match ? { ...match, ...contributor } : contributor; @@ -135,7 +144,7 @@ function processContributors(current, past, all) { const updatedCurrent = current.map((contributor) => updateContributor(contributor, all)); const updatedPast = past.map((contributor) => updateContributor(contributor, all)); - // Get the remaining contributors that are not in the current list + // Get the remaining contributors that are not in the current/past lists const remainingContributors = all.filter( (contributor) => !current.some((c) => c.id === contributor.id) && From bec99efc84aa7140231199f8bd31fc74984ffd48 Mon Sep 17 00:00:00 2001 From: conradolandia Date: Mon, 23 Sep 2024 18:52:00 -0500 Subject: [PATCH 29/57] Add preliminar support for tooltips with html content, we'll see if this is enough --- package-lock.json | 41 +++++++++++++++++++++++ package.json | 3 +- src/lib/components/ContributorCard.svelte | 21 ++++++++++++ src/routes/about/+page.js | 15 ++++++--- 4 files changed, 75 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 52620008..693c8c6b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,6 +26,7 @@ "postcss": "^8.4.38", "svelte": "^4.2.12", "svelte-youtube-embed": "^0.2.3", + "svooltip": "^0.8.3", "tailwindcss": "^3.4.3", "vite": "^5.1.6" } @@ -447,6 +448,34 @@ "node": ">=12" } }, + "node_modules/@floating-ui/core": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", + "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.8" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.11.tgz", + "integrity": "sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.8" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", + "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==", + "dev": true, + "license": "MIT" + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -3663,6 +3692,18 @@ "integrity": "sha512-+HYK224eJ5tSEM6chZgODuSOuaXqv/l5Xj6tvvjqQfrQzdG33jyjYVNzREXIVTerdWSvyqbm5A2BpL8tdwNhQw==", "dev": true }, + "node_modules/svooltip": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/svooltip/-/svooltip-0.8.3.tgz", + "integrity": "sha512-ruSxiF0nc3WvqY2wEwOI4pIfOZhC52b5K5L9t8bofEfHcxbME+QodvzRbuIcpp64r0XXXT+OYJmwIFDsFimXrg==", + "dev": true, + "dependencies": { + "@floating-ui/dom": "^1.6.10" + }, + "peerDependencies": { + "svelte": "^4.0.0" + } + }, "node_modules/tailwindcss": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz", diff --git a/package.json b/package.json index 87b6fe3d..0b8db58c 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "postcss": "^8.4.38", "svelte": "^4.2.12", "svelte-youtube-embed": "^0.2.3", + "svooltip": "^0.8.3", "tailwindcss": "^3.4.3", "vite": "^5.1.6" }, @@ -27,9 +28,9 @@ "chart.js": "^4.4.4", "rehype-class-names": "^2.0.0", "rehype-rewrite": "^4.0.2", - "svelte-chartjs": "^3.1.5", "rehype-title-figure": "^0.1.2", "remark-smartypants": "^3.0.2", + "svelte-chartjs": "^3.1.5", "svelte-icons-pack": "^3.1.3" } } diff --git a/src/lib/components/ContributorCard.svelte b/src/lib/components/ContributorCard.svelte index dfa97b1f..0596b142 100644 --- a/src/lib/components/ContributorCard.svelte +++ b/src/lib/components/ContributorCard.svelte @@ -1,6 +1,19 @@
{contributor.role} + {#if contributor.tooltip} + + {/if}

{/if}
diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index 5b934c55..8e395177 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -6,6 +6,13 @@ const currentContributors = [ name: "Carlos Córdoba", role: "Lead mantainer", latino: true, + tooltip: ` +
    +
  • Revolutionized everything
  • +
  • Changed the world for the better
  • +
  • Made things better for everyone
  • +
+ ` }, { id: 16781833, @@ -118,15 +125,15 @@ const textData = { remainingIntro: `Spyder is made possible by a collective of developers, testers, translators and donors, hailing from all around the globe! We exist by and for our worldwide community, and even the smallest contribution makes a world of different for us all.`, diversityTitle: `Diversity and Inclusion`, - diversityIntro: `We're proud of our highly diverse core devs contributors and user community, + diversityIntro: `We're proud of our highly diverse core devs contributors and user community, bringing numerous distinct backgrounds and perspectives to the table. The Spyder team is led by, majority-composed-of, and recruits heavily from countries, languages, ethnicities and gender identities historically underrepresented in science and open source software, particularly in Latin America. Our contributors come from every inhabited continent on Earth and dozens of countries all around the world, each bringing unique needs and perspectives to the table. What's more, we help translate Spyder into almost a dozen languages for our user community across the globe, and we welcome you to join us!`, }; -function processContributors(current, past, all) { - // Update current contributors from GitHub with custom data +const processContributors = (current, past, all) => { + // Update current/past contributors from GitHub with custom data const updateContributor = (contributor, allContributors) => { const match = allContributors.find((c) => c.id === contributor.id); return match ? { ...match, ...contributor } : contributor; @@ -135,7 +142,7 @@ function processContributors(current, past, all) { const updatedCurrent = current.map((contributor) => updateContributor(contributor, all)); const updatedPast = past.map((contributor) => updateContributor(contributor, all)); - // Get the remaining contributors that are not in the current list + // Get the remaining contributors that are not in the current/past lists const remainingContributors = all.filter( (contributor) => !current.some((c) => c.id === contributor.id) && From 1ca3bc6ef2dfccf2a135fcf3bedf20de7cab100c Mon Sep 17 00:00:00 2001 From: conradolandia Date: Mon, 23 Sep 2024 18:54:08 -0500 Subject: [PATCH 30/57] Fix a mistake --- src/routes/about/+page.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index dcf4c5fe..8e395177 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -1,5 +1,3 @@ -import { compile } from 'mdsvex'; - const dataSrc = `https://api.github.com/repos/spyder-ide/spyder/contributors?per_page=100`; const currentContributors = [ From 80c9664f2e285a2cda84e65d053ce8b2c531e05e Mon Sep 17 00:00:00 2001 From: conradolandia Date: Tue, 24 Sep 2024 18:56:05 -0500 Subject: [PATCH 31/57] Improve support for tooltips and remove last section of About page --- src/lib/components/ContributorCard.svelte | 46 +++++++++++++++++++--- src/lib/components/DonutGraph.svelte | 47 ----------------------- src/routes/about/+page.js | 25 ++++++++---- src/routes/about/+page.svelte | 30 --------------- 4 files changed, 58 insertions(+), 90 deletions(-) delete mode 100644 src/lib/components/DonutGraph.svelte diff --git a/src/lib/components/ContributorCard.svelte b/src/lib/components/ContributorCard.svelte index 0596b142..db199c1c 100644 --- a/src/lib/components/ContributorCard.svelte +++ b/src/lib/components/ContributorCard.svelte @@ -7,13 +7,37 @@ export let contributor; export let size = "medium"; - export let tooltipOptions = { - content: contributor.tooltip, - placement: "bottom", - delay: [300, 300], - offset: 15, - html: true + + // Function to generate HTML string from tooltip + const generateTooltipHTML = (content) => { + let htmlString = `
`; + content.forEach((item) => { + htmlString += "
"; + htmlString += `

${item.title}

`; + htmlString += '
    '; + item.list.forEach((listItem) => { + htmlString += `
  • ${listItem}
  • `; + }); + htmlString += "
"; + htmlString += "
"; + }); + htmlString += "
" + + return htmlString; }; + + let tooltipHTML, tooltipOptions; + + if (contributor.tooltip) { + tooltipHTML = generateTooltipHTML(contributor.tooltip); + tooltipOptions = { + content: tooltipHTML, + placement: "bottom", + delay: [300, 300], + offset: 15, + html: true, + }; + }
{/if}
+ + diff --git a/src/lib/components/DonutGraph.svelte b/src/lib/components/DonutGraph.svelte deleted file mode 100644 index 690d66e0..00000000 --- a/src/lib/components/DonutGraph.svelte +++ /dev/null @@ -1,47 +0,0 @@ - - - diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index 8e395177..aee04bb6 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -6,13 +6,24 @@ const currentContributors = [ name: "Carlos Córdoba", role: "Lead mantainer", latino: true, - tooltip: ` -
    -
  • Revolutionized everything
  • -
  • Changed the world for the better
  • -
  • Made things better for everyone
  • -
- ` + tooltip: [ + { + title: "Header 1", + list: [ + "Revolutionized everything", + "Changed the world for the better", + "Made things better for everyone" + ] + }, + { + title: "Header 2", + list: [ + "More items", + "a lot of different stuff", + "The salted pork is particulary good" + ] + } + ] }, { id: 16781833, diff --git a/src/routes/about/+page.svelte b/src/routes/about/+page.svelte index 6d464aa7..ec9b7cba 100644 --- a/src/routes/about/+page.svelte +++ b/src/routes/about/+page.svelte @@ -1,7 +1,6 @@ @@ -75,28 +68,5 @@ {:else} {/if} -
-

- {diversityTitle} -

-
-
-

{diversityIntro}

-
-
- -
-
-
{/if}
From 8533d13f0130d08b39a8b7fa2e6883d9dc86be72 Mon Sep 17 00:00:00 2001 From: conradolandia Date: Tue, 24 Sep 2024 20:38:02 -0500 Subject: [PATCH 32/57] Convert tooltip flex to vertical layout --- src/lib/components/ContributorCard.svelte | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/lib/components/ContributorCard.svelte b/src/lib/components/ContributorCard.svelte index db199c1c..efb81089 100644 --- a/src/lib/components/ContributorCard.svelte +++ b/src/lib/components/ContributorCard.svelte @@ -10,18 +10,15 @@ // Function to generate HTML string from tooltip const generateTooltipHTML = (content) => { - let htmlString = `
`; + let htmlString = `
`; content.forEach((item) => { - htmlString += "
"; - htmlString += `

${item.title}

`; - htmlString += '
    '; + htmlString += `

    ${item.title}

      `; item.list.forEach((listItem) => { htmlString += `
    • ${listItem}
    • `; }); - htmlString += "
    "; - htmlString += "
    "; + htmlString += "
"; }); - htmlString += "
" + htmlString += "
"; return htmlString; }; From fb58d41a79de6a259944086a4ad7607bdaaa1bc4 Mon Sep 17 00:00:00 2001 From: conradolandia Date: Tue, 24 Sep 2024 21:26:09 -0500 Subject: [PATCH 33/57] Add a max-width to the tooltip content --- src/lib/components/ContributorCard.svelte | 6 ++++-- src/routes/about/+page.js | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/lib/components/ContributorCard.svelte b/src/lib/components/ContributorCard.svelte index efb81089..9fa18c34 100644 --- a/src/lib/components/ContributorCard.svelte +++ b/src/lib/components/ContributorCard.svelte @@ -10,9 +10,11 @@ // Function to generate HTML string from tooltip const generateTooltipHTML = (content) => { - let htmlString = `
`; + let htmlString = `
`; content.forEach((item) => { - htmlString += `

${item.title}

    `; + htmlString += `
    +

    ${item.title}

    +
      `; item.list.forEach((listItem) => { htmlString += `
    • ${listItem}
    • `; }); diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index aee04bb6..6604b83e 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -19,7 +19,7 @@ const currentContributors = [ title: "Header 2", list: [ "More items", - "a lot of different stuff", + "A lot of different stuff. This can be a particularly long line, for example", "The salted pork is particulary good" ] } From 6c376ba7736e7d0dcff02079e33627e0ab14d35c Mon Sep 17 00:00:00 2001 From: conradolandia Date: Thu, 26 Sep 2024 22:02:21 -0500 Subject: [PATCH 34/57] Updated package-lock.json to solve vulnerability --- package-lock.json | 134 +++++++++++++++++++++++----------------------- 1 file changed, 67 insertions(+), 67 deletions(-) diff --git a/package-lock.json b/package-lock.json index 693c8c6b..b5b0cef4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -605,9 +605,9 @@ "license": "MIT" }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.3.tgz", - "integrity": "sha512-MmKSfaB9GX+zXl6E8z4koOr/xU63AMVleLEa64v7R0QF/ZloMs5vcD1sHgM64GXXS1csaJutG+ddtzcueI/BLg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz", + "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==", "cpu": [ "arm" ], @@ -619,9 +619,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.3.tgz", - "integrity": "sha512-zrt8ecH07PE3sB4jPOggweBjJMzI1JG5xI2DIsUbkA+7K+Gkjys6eV7i9pOenNSDJH3eOr/jLb/PzqtmdwDq5g==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz", + "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==", "cpu": [ "arm64" ], @@ -633,9 +633,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.3.tgz", - "integrity": "sha512-P0UxIOrKNBFTQaXTxOH4RxuEBVCgEA5UTNV6Yz7z9QHnUJ7eLX9reOd/NYMO3+XZO2cco19mXTxDMXxit4R/eQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz", + "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==", "cpu": [ "arm64" ], @@ -647,9 +647,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.3.tgz", - "integrity": "sha512-L1M0vKGO5ASKntqtsFEjTq/fD91vAqnzeaF6sfNAy55aD+Hi2pBI5DKwCO+UNDQHWsDViJLqshxOahXyLSh3EA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz", + "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==", "cpu": [ "x64" ], @@ -661,9 +661,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.3.tgz", - "integrity": "sha512-btVgIsCjuYFKUjopPoWiDqmoUXQDiW2A4C3Mtmp5vACm7/GnyuprqIDPNczeyR5W8rTXEbkmrJux7cJmD99D2g==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz", + "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==", "cpu": [ "arm" ], @@ -675,9 +675,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.3.tgz", - "integrity": "sha512-zmjbSphplZlau6ZTkxd3+NMtE4UKVy7U4aVFMmHcgO5CUbw17ZP6QCgyxhzGaU/wFFdTfiojjbLG3/0p9HhAqA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz", + "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==", "cpu": [ "arm" ], @@ -689,9 +689,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.3.tgz", - "integrity": "sha512-nSZfcZtAnQPRZmUkUQwZq2OjQciR6tEoJaZVFvLHsj0MF6QhNMg0fQ6mUOsiCUpTqxTx0/O6gX0V/nYc7LrgPw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz", + "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==", "cpu": [ "arm64" ], @@ -703,9 +703,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.3.tgz", - "integrity": "sha512-MnvSPGO8KJXIMGlQDYfvYS3IosFN2rKsvxRpPO2l2cum+Z3exiExLwVU+GExL96pn8IP+GdH8Tz70EpBhO0sIQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz", + "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==", "cpu": [ "arm64" ], @@ -717,9 +717,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.3.tgz", - "integrity": "sha512-+W+p/9QNDr2vE2AXU0qIy0qQE75E8RTwTwgqS2G5CRQ11vzq0tbnfBd6brWhS9bCRjAjepJe2fvvkvS3dno+iw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz", + "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==", "cpu": [ "ppc64" ], @@ -731,9 +731,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.3.tgz", - "integrity": "sha512-yXH6K6KfqGXaxHrtr+Uoy+JpNlUlI46BKVyonGiaD74ravdnF9BUNC+vV+SIuB96hUMGShhKV693rF9QDfO6nQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz", + "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==", "cpu": [ "riscv64" ], @@ -745,9 +745,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.3.tgz", - "integrity": "sha512-R8cwY9wcnApN/KDYWTH4gV/ypvy9yZUHlbJvfaiXSB48JO3KpwSpjOGqO4jnGkLDSk1hgjYkTbTt6Q7uvPf8eg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz", + "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==", "cpu": [ "s390x" ], @@ -759,9 +759,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.3.tgz", - "integrity": "sha512-kZPbX/NOPh0vhS5sI+dR8L1bU2cSO9FgxwM8r7wHzGydzfSjLRCFAT87GR5U9scj2rhzN3JPYVC7NoBbl4FZ0g==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz", + "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==", "cpu": [ "x64" ], @@ -773,9 +773,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.3.tgz", - "integrity": "sha512-S0Yq+xA1VEH66uiMNhijsWAafffydd2X5b77eLHfRmfLsRSpbiAWiRHV6DEpz6aOToPsgid7TI9rGd6zB1rhbg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz", + "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==", "cpu": [ "x64" ], @@ -787,9 +787,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.3.tgz", - "integrity": "sha512-9isNzeL34yquCPyerog+IMCNxKR8XYmGd0tHSV+OVx0TmE0aJOo9uw4fZfUuk2qxobP5sug6vNdZR6u7Mw7Q+Q==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz", + "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==", "cpu": [ "arm64" ], @@ -801,9 +801,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.3.tgz", - "integrity": "sha512-nMIdKnfZfzn1Vsk+RuOvl43ONTZXoAPUUxgcU0tXooqg4YrAqzfKzVenqqk2g5efWh46/D28cKFrOzDSW28gTA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz", + "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==", "cpu": [ "ia32" ], @@ -815,9 +815,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.3.tgz", - "integrity": "sha512-fOvu7PCQjAj4eWDEuD8Xz5gpzFqXzGlxHZozHP4b9Jxv9APtdxL6STqztDzMLuRXEc4UpXGGhx029Xgm91QBeA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz", + "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==", "cpu": [ "x64" ], @@ -3258,9 +3258,9 @@ } }, "node_modules/rollup": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.3.tgz", - "integrity": "sha512-7sqRtBNnEbcBtMeRVc6VRsJMmpI+JU1z9VTvW8D4gXIYQFz0aLcsE6rRkyghZkLfEgUZgVvOG7A5CVz/VW5GIA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz", + "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==", "dev": true, "license": "MIT", "dependencies": { @@ -3274,22 +3274,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.21.3", - "@rollup/rollup-android-arm64": "4.21.3", - "@rollup/rollup-darwin-arm64": "4.21.3", - "@rollup/rollup-darwin-x64": "4.21.3", - "@rollup/rollup-linux-arm-gnueabihf": "4.21.3", - "@rollup/rollup-linux-arm-musleabihf": "4.21.3", - "@rollup/rollup-linux-arm64-gnu": "4.21.3", - "@rollup/rollup-linux-arm64-musl": "4.21.3", - "@rollup/rollup-linux-powerpc64le-gnu": "4.21.3", - "@rollup/rollup-linux-riscv64-gnu": "4.21.3", - "@rollup/rollup-linux-s390x-gnu": "4.21.3", - "@rollup/rollup-linux-x64-gnu": "4.21.3", - "@rollup/rollup-linux-x64-musl": "4.21.3", - "@rollup/rollup-win32-arm64-msvc": "4.21.3", - "@rollup/rollup-win32-ia32-msvc": "4.21.3", - "@rollup/rollup-win32-x64-msvc": "4.21.3", + "@rollup/rollup-android-arm-eabi": "4.22.4", + "@rollup/rollup-android-arm64": "4.22.4", + "@rollup/rollup-darwin-arm64": "4.22.4", + "@rollup/rollup-darwin-x64": "4.22.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.22.4", + "@rollup/rollup-linux-arm-musleabihf": "4.22.4", + "@rollup/rollup-linux-arm64-gnu": "4.22.4", + "@rollup/rollup-linux-arm64-musl": "4.22.4", + "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4", + "@rollup/rollup-linux-riscv64-gnu": "4.22.4", + "@rollup/rollup-linux-s390x-gnu": "4.22.4", + "@rollup/rollup-linux-x64-gnu": "4.22.4", + "@rollup/rollup-linux-x64-musl": "4.22.4", + "@rollup/rollup-win32-arm64-msvc": "4.22.4", + "@rollup/rollup-win32-ia32-msvc": "4.22.4", + "@rollup/rollup-win32-x64-msvc": "4.22.4", "fsevents": "~2.3.2" } }, From 927cca6fbc93e513b96cdb6a23ff14debfa47cd0 Mon Sep 17 00:00:00 2001 From: conradolandia Date: Tue, 1 Oct 2024 16:39:37 -0500 Subject: [PATCH 35/57] Fix a couple bugs --- src/lib/blocks/ContributorBlock.svelte | 2 +- src/routes/about/+page.svelte | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/blocks/ContributorBlock.svelte b/src/lib/blocks/ContributorBlock.svelte index 3853258d..aab08e95 100644 --- a/src/lib/blocks/ContributorBlock.svelte +++ b/src/lib/blocks/ContributorBlock.svelte @@ -13,7 +13,7 @@ class:max-w-full={size === "large"} > {#if title} -

      +

      {title}

      {/if} diff --git a/src/routes/about/+page.svelte b/src/routes/about/+page.svelte index ec9b7cba..fe558f92 100644 --- a/src/routes/about/+page.svelte +++ b/src/routes/about/+page.svelte @@ -32,7 +32,7 @@ > {pageTitle}

-

+

{pageIntro}

{#if error} From e43fb942f6b20e75d5a06911e3aa933cced0a7b2 Mon Sep 17 00:00:00 2001 From: conradolandia Date: Mon, 7 Oct 2024 23:17:34 -0500 Subject: [PATCH 36/57] Update content of tooltips, start figuring out centering last items of the grid (not so simple) --- package-lock.json | 884 +++++++++++++++------- package.json | 1 + src/lib/blocks/ContributorBlock.svelte | 41 +- src/lib/components/ContributorCard.svelte | 5 +- src/routes/about/+page.js | 240 ++++-- 5 files changed, 831 insertions(+), 340 deletions(-) diff --git a/package-lock.json b/package-lock.json index 82acbcc9..d2b2137e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,36 +6,33 @@ "": { "license": "MIT", "dependencies": { - "chart.js": "^4.4.4", + "@sveltejs/adapter-static": "^3.0.5", + "@sveltejs/kit": "^2.6.3", + "@sveltejs/vite-plugin-svelte": "^3.1.2", + "@tailwindcss/typography": "^0.5.15", + "@types/three": "^0.169.0", + "autoprefixer": "^10.4.20", + "gh-pages": "^6.1.1", + "gray-matter": "^4.0.3", + "mdsvex": "^0.12.3", + "postcss": "^8.4.47", "rehype-class-names": "^2.0.0", "rehype-rewrite": "^4.0.2", "rehype-title-figure": "^0.1.2", "remark-smartypants": "^3.0.2", - "svelte-chartjs": "^3.1.5", - "svelte-icons-pack": "^3.1.3" - }, - "devDependencies": { - "@sveltejs/adapter-static": "^3.0.1", - "@sveltejs/kit": "^2.5.4", - "@sveltejs/vite-plugin-svelte": "^3.0.2", - "@tailwindcss/typography": "^0.5.13", - "@types/three": "^0.164.1", - "autoprefixer": "^10.4.19", - "gh-pages": "^6.1.1", - "mdsvex": "^0.11.0", - "postcss": "^8.4.38", - "svelte": "^4.2.12", - "svelte-youtube-embed": "^0.2.3", + "sharp": "^0.33.5", + "svelte": "^4.2.19", + "svelte-icons-pack": "^3.1.3", + "svelte-youtube-embed": "^0.3.0", "svooltip": "^0.8.3", - "tailwindcss": "^3.4.3", - "vite": "^5.1.6" + "tailwindcss": "^3.4.13", + "vite": "^5.4.8" } }, "node_modules/@alloc/quick-lru": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -57,6 +54,16 @@ "node": ">=6.0.0" } }, + "node_modules/@emnapi/runtime": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.0.tgz", + "integrity": "sha512-XMBySMuNZs3DM96xcJmLW4EfGnf+uGmFNjzpehMjuX5PLB5j87ar2Zc4e3PVeZ3I5g3tYtAqskB28manlF69Zw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@esbuild/linux-x64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", @@ -64,7 +71,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -78,7 +84,6 @@ "version": "1.6.8", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", - "dev": true, "license": "MIT", "dependencies": { "@floating-ui/utils": "^0.2.8" @@ -88,7 +93,6 @@ "version": "1.6.11", "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.11.tgz", "integrity": "sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==", - "dev": true, "license": "MIT", "dependencies": { "@floating-ui/core": "^1.6.0", @@ -99,14 +103,373 @@ "version": "0.2.8", "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==", - "dev": true, "license": "MIT" }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.2.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, "license": "ISC", "dependencies": { "string-width": "^5.1.2", @@ -168,17 +531,10 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@kurkle/color": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", - "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==", - "license": "MIT" - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", @@ -192,7 +548,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -202,7 +557,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", @@ -216,7 +570,6 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, "license": "MIT", "optional": true, "engines": { @@ -227,7 +580,6 @@ "version": "1.0.0-next.28", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", - "dev": true, "license": "MIT" }, "node_modules/@rollup/rollup-linux-x64-gnu": { @@ -237,7 +589,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -251,7 +602,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -262,7 +612,6 @@ "version": "3.0.5", "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-3.0.5.tgz", "integrity": "sha512-kFJR7RxeB6FBvrKZWAEzIALatgy11ISaaZbcPup8JdWUdrmmfUHHTJ738YHJTEfnCiiXi6aX8Q6ePY7tnSMD6Q==", - "dev": true, "license": "MIT", "peerDependencies": { "@sveltejs/kit": "^2.0.0" @@ -272,7 +621,6 @@ "version": "2.6.3", "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.6.3.tgz", "integrity": "sha512-baIAnmfMqAISrPtTC/22w6ay5kTEIQ/vq9bctiaQgRIoLCPBNhb6LEidTuWQS7OzPYCDBMuMX1t/fMvi4r3q/g==", - "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -305,7 +653,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.1.2.tgz", "integrity": "sha512-Txsm1tJvtiYeLUVRNqxZGKR/mI+CzuIQuc2gn+YCs9rMTowpNZ2Nqt53JdL8KF9bLhAf2ruR/dr9eZCwdTriRA==", - "dev": true, "license": "MIT", "dependencies": { "@sveltejs/vite-plugin-svelte-inspector": "^2.1.0", @@ -328,7 +675,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-2.1.0.tgz", "integrity": "sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg==", - "dev": true, "license": "MIT", "dependencies": { "debug": "^4.3.4" @@ -346,7 +692,6 @@ "version": "0.5.15", "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.15.tgz", "integrity": "sha512-AqhlCXl+8grUz8uqExv5OTtgpjuVIwFTSXTrh8y9/pw6q2ek7fJ+Y8ZEVw7EB2DCcuCOtEjf9w3+J3rzts01uA==", - "dev": true, "license": "MIT", "dependencies": { "lodash.castarray": "^4.4.0", @@ -362,14 +707,12 @@ "version": "23.1.3", "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-23.1.3.tgz", "integrity": "sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==", - "dev": true, "license": "MIT" }, "node_modules/@types/cookie": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", - "dev": true, "license": "MIT" }, "node_modules/@types/estree": { @@ -400,19 +743,18 @@ "version": "0.17.3", "resolved": "https://registry.npmjs.org/@types/stats.js/-/stats.js-0.17.3.tgz", "integrity": "sha512-pXNfAD3KHOdif9EQXZ9deK82HVNaXP5ZIF5RP2QG6OQFNTaY2YIetfrE9t528vEreGQvEPRDDc8muaoYeK0SxQ==", - "dev": true, "license": "MIT" }, "node_modules/@types/three": { - "version": "0.164.1", - "resolved": "https://registry.npmjs.org/@types/three/-/three-0.164.1.tgz", - "integrity": "sha512-dR/trWDhyaNqJV38rl1TonlCA9DpnX7OPYDWD81bmBGn/+uEc3+zNalFxQcV4FlPTeDBhCY3SFWKvK6EJwL88g==", - "dev": true, + "version": "0.169.0", + "resolved": "https://registry.npmjs.org/@types/three/-/three-0.169.0.tgz", + "integrity": "sha512-oan7qCgJBt03wIaK+4xPWclYRPG9wzcg7Z2f5T8xYTNEF95kh0t0lklxLLYBDo7gQiGLYzE6iF4ta7nXF2bcsw==", "license": "MIT", "dependencies": { - "@tweenjs/tween.js": "~23.1.1", + "@tweenjs/tween.js": "~23.1.3", "@types/stats.js": "*", "@types/webxr": "*", + "@webgpu/types": "*", "fflate": "~0.8.2", "meshoptimizer": "~0.18.1" } @@ -427,9 +769,14 @@ "version": "0.5.20", "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.20.tgz", "integrity": "sha512-JGpU6qiIJQKUuVSKx1GtQnHJGxRjtfGIhzO2ilq43VZZS//f1h1Sgexbdk+Lq+7569a6EYhOWrUpIruR/1Enmg==", - "dev": true, "license": "MIT" }, + "node_modules/@webgpu/types": { + "version": "0.1.48", + "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.48.tgz", + "integrity": "sha512-e3zmDEPih4Rle+JrP5cT8nCCtDizoUpEaN72OuD1clbhXGERtn0wwuMdxOrBymu3kMLWKDd8hd+ERhSheLuLTg==", + "license": "BSD-3-Clause" + }, "node_modules/acorn": { "version": "8.12.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", @@ -446,7 +793,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -459,7 +805,6 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -472,14 +817,12 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true, "license": "MIT" }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", @@ -493,9 +836,17 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true, "license": "MIT" }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, "node_modules/aria-query": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", @@ -519,7 +870,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "dev": true, "license": "MIT", "dependencies": { "array-uniq": "^1.0.1" @@ -532,7 +882,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -542,14 +891,12 @@ "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true, "license": "MIT" }, "node_modules/autoprefixer": { "version": "10.4.20", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", - "dev": true, "funding": [ { "type": "opencollective", @@ -606,7 +953,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, "license": "MIT" }, "node_modules/bcp-47-match": { @@ -623,7 +969,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -642,7 +987,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -653,7 +997,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -666,7 +1009,6 @@ "version": "4.24.0", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", - "dev": true, "funding": [ { "type": "opencollective", @@ -699,7 +1041,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 6" @@ -709,7 +1050,6 @@ "version": "1.0.30001664", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001664.tgz", "integrity": "sha512-AmE7k4dXiNKQipgn7a2xg558IRqPN3jMQY/rOsbxDhrd0tyChwbITBfiwtnqz8bi2M5mIWbxAYBvk7W7QBUS2g==", - "dev": true, "funding": [ { "type": "opencollective", @@ -726,23 +1066,10 @@ ], "license": "CC-BY-4.0" }, - "node_modules/chart.js": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.4.tgz", - "integrity": "sha512-emICKGBABnxhMjUjlYRR12PmOXhJ2eJjEHL2/dZlWjxRAZT1D8xplLFq5M0tMQK8ja+wBS/tuVEJB5C6r7VxJA==", - "license": "MIT", - "dependencies": { - "@kurkle/color": "^0.3.0" - }, - "engines": { - "pnpm": ">=8" - } - }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, "license": "MIT", "dependencies": { "anymatch": "~3.1.2", @@ -767,7 +1094,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -789,11 +1115,23 @@ "periscopic": "^3.1.0" } }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -806,9 +1144,18 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, "license": "MIT" }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "node_modules/comma-separated-tokens": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", @@ -823,7 +1170,6 @@ "version": "11.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=16" @@ -833,21 +1179,18 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true, "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, "license": "MIT" }, "node_modules/cookie": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -857,7 +1200,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -901,7 +1243,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, "license": "MIT", "bin": { "cssesc": "bin/cssesc" @@ -914,7 +1255,6 @@ "version": "4.3.7", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -932,7 +1272,6 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -947,11 +1286,19 @@ "node": ">=6" } }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, "node_modules/devalue": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz", "integrity": "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==", - "dev": true, "license": "MIT" }, "node_modules/devlop": { @@ -971,7 +1318,6 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true, "license": "Apache-2.0" }, "node_modules/direction": { @@ -991,42 +1337,36 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true, "license": "MIT" }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, "license": "MIT" }, "node_modules/electron-to-chromium": { "version": "1.5.29", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.29.tgz", "integrity": "sha512-PF8n2AlIhCKXQ+gTpiJi0VhcHDb69kYX4MtCiivctc2QD3XuNZ/XIOlbGzt7WAjjEev0TtaH6Cu3arZExm5DOw==", - "dev": true, "license": "ISC" }, "node_modules/email-addresses": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-5.0.0.tgz", "integrity": "sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==", - "dev": true, "license": "MIT" }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, "license": "MIT" }, "node_modules/esbuild": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, "hasInstallScript": true, "license": "MIT", "bin": { @@ -1065,7 +1405,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -1075,7 +1414,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.8.0" @@ -1085,9 +1423,21 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.0.0.tgz", "integrity": "sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==", - "dev": true, "license": "MIT" }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/estree-walker": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", @@ -1103,11 +1453,22 @@ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "license": "MIT" }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -1124,7 +1485,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -1137,7 +1497,6 @@ "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -1147,14 +1506,12 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", - "dev": true, "license": "MIT" }, "node_modules/filename-reserved-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -1164,7 +1521,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", - "dev": true, "license": "MIT", "dependencies": { "filename-reserved-regex": "^2.0.0", @@ -1182,7 +1538,6 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -1195,7 +1550,6 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, "license": "MIT", "dependencies": { "commondir": "^1.0.1", @@ -1213,7 +1567,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, "license": "MIT", "dependencies": { "locate-path": "^5.0.0", @@ -1227,7 +1580,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "dev": true, "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", @@ -1244,7 +1596,6 @@ "version": "4.3.7", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "dev": true, "license": "MIT", "engines": { "node": "*" @@ -1258,7 +1609,6 @@ "version": "11.2.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -1273,14 +1623,12 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, "license": "ISC" }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1290,7 +1638,6 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-6.1.1.tgz", "integrity": "sha512-upnohfjBwN5hBP9w2dPE7HO5JJTHzSGMV1JrLrHvNuqmjoYHg6TBrCcnEoorjG/e0ejbuvnwyKMdTyM40PEByw==", - "dev": true, "license": "MIT", "dependencies": { "async": "^3.2.4", @@ -1314,7 +1661,6 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -1335,7 +1681,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.3" @@ -1348,14 +1693,12 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", - "dev": true, "license": "MIT" }, "node_modules/globby": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", - "dev": true, "license": "MIT", "dependencies": { "array-union": "^1.0.1", @@ -1372,21 +1715,33 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true, "license": "MIT" }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, "license": "ISC" }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "license": "MIT", + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -1555,7 +1910,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", - "dev": true, "license": "MIT", "funding": { "type": "github", @@ -1567,7 +1921,6 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -1578,14 +1931,18 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, "license": "ISC" }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT" + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" @@ -1598,7 +1955,6 @@ "version": "2.15.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", - "dev": true, "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -1610,11 +1966,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -1624,7 +1988,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -1634,7 +1997,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -1647,7 +2009,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -1678,14 +2039,12 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, "license": "ISC" }, "node_modules/jackspeak": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -1701,17 +2060,28 @@ "version": "1.21.6", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", - "dev": true, "license": "MIT", "bin": { "jiti": "bin/jiti.js" } }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, "license": "MIT", "dependencies": { "universalify": "^2.0.0" @@ -1720,11 +2090,19 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/kleur": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -1734,7 +2112,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -1744,7 +2121,6 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, "license": "MIT" }, "node_modules/locate-character": { @@ -1757,7 +2133,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, "license": "MIT", "dependencies": { "p-locate": "^4.1.0" @@ -1770,28 +2145,24 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", - "dev": true, "license": "MIT" }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true, "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, "license": "MIT" }, "node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, "license": "ISC" }, "node_modules/magic-string": { @@ -1807,7 +2178,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, "license": "MIT", "dependencies": { "semver": "^6.0.0" @@ -1826,10 +2196,9 @@ "license": "CC0-1.0" }, "node_modules/mdsvex": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/mdsvex/-/mdsvex-0.11.2.tgz", - "integrity": "sha512-Y4ab+vLvTJS88196Scb/RFNaHMHVSWw6CwfsgWIQP8f42D57iDII0/qABSu530V4pkv8s6T2nx3ds0MC1VwFLA==", - "dev": true, + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/mdsvex/-/mdsvex-0.12.3.tgz", + "integrity": "sha512-C/uIJamjNo5PHHnR3JHqsBPoLcfUBpzRmAEB6FLMXI/s7XHOceswjDMKqSPEW2WHmYpKm0taZ3U20GSyhMridA==", "license": "MIT", "dependencies": { "@types/unist": "^2.0.3", @@ -1845,7 +2214,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -1855,14 +2223,12 @@ "version": "0.18.1", "resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-0.18.1.tgz", "integrity": "sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==", - "dev": true, "license": "MIT" }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, "license": "MIT", "dependencies": { "braces": "^3.0.3", @@ -1876,7 +2242,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -1889,7 +2254,6 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" @@ -1899,7 +2263,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -1909,7 +2272,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -1919,14 +2281,12 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, "license": "MIT" }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, "license": "MIT", "dependencies": { "any-promise": "^1.0.0", @@ -1938,7 +2298,6 @@ "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true, "funding": [ { "type": "github", @@ -1970,14 +2329,12 @@ "version": "2.0.18", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "dev": true, "license": "MIT" }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -1987,7 +2344,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -2014,7 +2370,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -2024,7 +2379,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 6" @@ -2034,7 +2388,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -2044,7 +2397,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, "license": "MIT", "dependencies": { "p-try": "^2.0.0" @@ -2060,7 +2412,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, "license": "MIT", "dependencies": { "p-limit": "^2.2.0" @@ -2073,7 +2424,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -2083,7 +2433,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, "license": "BlueOak-1.0.0" }, "node_modules/parse-latin": { @@ -2114,7 +2463,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -2124,7 +2472,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -2134,7 +2481,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -2144,14 +2490,12 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, "license": "MIT" }, "node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", @@ -2179,14 +2523,12 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", - "dev": true, "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -2199,7 +2541,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -2209,7 +2550,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -2219,7 +2559,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dev": true, "license": "MIT", "dependencies": { "pinkie": "^2.0.0" @@ -2232,7 +2571,6 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 6" @@ -2242,7 +2580,6 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, "license": "MIT", "dependencies": { "find-up": "^4.0.0" @@ -2255,7 +2592,6 @@ "version": "8.4.47", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -2284,7 +2620,6 @@ "version": "15.1.0", "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, "license": "MIT", "dependencies": { "postcss-value-parser": "^4.0.0", @@ -2302,7 +2637,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dev": true, "license": "MIT", "dependencies": { "camelcase-css": "^2.0.1" @@ -2322,7 +2656,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -2358,7 +2691,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", - "dev": true, "license": "MIT", "engines": { "node": ">=14" @@ -2371,7 +2703,6 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -2397,7 +2728,6 @@ "version": "6.1.2", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -2411,7 +2741,6 @@ "version": "6.0.10", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dev": true, "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -2425,21 +2754,18 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true, "license": "MIT" }, "node_modules/prism-svelte": { "version": "0.4.7", "resolved": "https://registry.npmjs.org/prism-svelte/-/prism-svelte-0.4.7.tgz", "integrity": "sha512-yABh19CYbM24V7aS7TuPYRNMqthxwbvx6FF/Rw920YbyBWO3tnyPIqRMgHuSVsLmuHkkBS1Akyof463FVdkeDQ==", - "dev": true, "license": "MIT" }, "node_modules/prismjs": { "version": "1.29.0", "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -2459,7 +2785,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, "funding": [ { "type": "github", @@ -2480,7 +2805,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, "license": "MIT", "dependencies": { "pify": "^2.3.0" @@ -2490,7 +2814,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, "license": "MIT", "dependencies": { "picomatch": "^2.2.1" @@ -2596,7 +2919,6 @@ "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", @@ -2675,7 +2997,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, "license": "MIT", "engines": { "iojs": ">=1.0.0", @@ -2686,7 +3007,6 @@ "version": "4.22.5", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.5.tgz", "integrity": "sha512-WoinX7GeQOFMGznEcWA1WrTQCd/tpEbMkc3nuMs9BT0CPjMdSjPMTVClwWd4pgSQwJdP65SK9mTCNvItlr5o7w==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree": "1.0.6" @@ -2722,7 +3042,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, "funding": [ { "type": "github", @@ -2746,7 +3065,6 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dev": true, "license": "MIT", "dependencies": { "mri": "^1.1.0" @@ -2755,11 +3073,23 @@ "node": ">=6" } }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -2769,14 +3099,63 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.0.tgz", "integrity": "sha512-lXLOiqpkUumhRdFF3k1osNXCy9akgx/dyPZ5p8qAg9seJzXr5ZrlqZuWIMuY6ejOsVLE6flJ5/h3lsn57fQ/PQ==", - "dev": true, "license": "MIT" }, + "node_modules/sharp": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" + } + }, + "node_modules/sharp/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -2789,7 +3168,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -2799,7 +3177,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, "license": "ISC", "engines": { "node": ">=14" @@ -2808,11 +3185,19 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, "node_modules/sirv": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", - "dev": true, "license": "MIT", "dependencies": { "@polka/url": "^1.0.0-next.24", @@ -2842,11 +3227,16 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, "node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", @@ -2865,7 +3255,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -2880,7 +3269,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -2890,14 +3278,12 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, "license": "MIT" }, "node_modules/string-width-cjs/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -2910,7 +3296,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -2927,7 +3312,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -2940,17 +3324,24 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/strip-outer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", - "dev": true, "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.2" @@ -2963,7 +3354,6 @@ "version": "3.35.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", @@ -2986,7 +3376,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -2996,7 +3385,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 6" @@ -3006,7 +3394,6 @@ "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", @@ -3027,7 +3414,6 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -3043,7 +3429,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -3077,21 +3462,10 @@ "node": ">=16" } }, - "node_modules/svelte-chartjs": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/svelte-chartjs/-/svelte-chartjs-3.1.5.tgz", - "integrity": "sha512-ka2zh7v5FiwfAX1oMflZ0HkNkgjHjFqANgRyC+vNYXfxtx2ku68Zo+2KgbKeBH2nS1ThDqkIACPzGxy4T0UaoA==", - "license": "MIT", - "peerDependencies": { - "chart.js": "^3.5.0 || ^4.0.0", - "svelte": "^4.0.0" - } - }, "node_modules/svelte-hmr": { "version": "0.16.0", "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.16.0.tgz", "integrity": "sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA==", - "dev": true, "license": "ISC", "engines": { "node": "^12.20 || ^14.13.1 || >= 16" @@ -3110,16 +3484,17 @@ } }, "node_modules/svelte-youtube-embed": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/svelte-youtube-embed/-/svelte-youtube-embed-0.2.9.tgz", - "integrity": "sha512-daC+1314HkEx3u/nNGJG0/4uS7fixgxB3OGgxetmxVvDfAGKAc9ZFsKL7Fh3ABTLwwSN4VNwUQMm4I7oWrzpLg==", - "dev": true + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/svelte-youtube-embed/-/svelte-youtube-embed-0.3.0.tgz", + "integrity": "sha512-Hg0IzZHSHgc8wvA1vhSqf3nPZolWSCClEjsCLscLPZRE9EDE2SjbBGsk7KvSfAgKJ5fIYmc5KqWHlC4b8wa5mw==", + "peerDependencies": { + "svelte": "^4.0.0" + } }, "node_modules/svooltip": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/svooltip/-/svooltip-0.8.3.tgz", "integrity": "sha512-ruSxiF0nc3WvqY2wEwOI4pIfOZhC52b5K5L9t8bofEfHcxbME+QodvzRbuIcpp64r0XXXT+OYJmwIFDsFimXrg==", - "dev": true, "dependencies": { "@floating-ui/dom": "^1.6.10" }, @@ -3131,7 +3506,6 @@ "version": "3.4.13", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.13.tgz", "integrity": "sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw==", - "dev": true, "license": "MIT", "dependencies": { "@alloc/quick-lru": "^5.2.0", @@ -3169,7 +3543,6 @@ "version": "6.1.2", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -3183,7 +3556,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, "license": "MIT", "dependencies": { "any-promise": "^1.0.0" @@ -3193,7 +3565,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, "license": "MIT", "dependencies": { "thenify": ">= 3.1.0 < 4" @@ -3206,7 +3577,6 @@ "version": "0.2.9", "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", - "dev": true, "license": "MIT", "dependencies": { "globalyzer": "0.1.0", @@ -3217,7 +3587,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -3230,7 +3599,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -3240,7 +3608,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", - "dev": true, "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.2" @@ -3263,9 +3630,15 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true, "license": "Apache-2.0" }, + "node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD", + "optional": true + }, "node_modules/unified": { "version": "11.0.5", "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", @@ -3334,7 +3707,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "dev": true, "license": "MIT", "dependencies": { "@types/unist": "^2.0.2" @@ -3408,7 +3780,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 10.0.0" @@ -3418,7 +3789,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", - "dev": true, "funding": [ { "type": "opencollective", @@ -3449,7 +3819,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, "license": "MIT" }, "node_modules/vfile": { @@ -3470,7 +3839,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "dev": true, "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", @@ -3518,7 +3886,6 @@ "version": "5.4.8", "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.8.tgz", "integrity": "sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==", - "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.21.3", @@ -3578,7 +3945,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz", "integrity": "sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==", - "dev": true, "license": "MIT", "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" @@ -3593,7 +3959,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -3609,7 +3974,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", @@ -3628,7 +3992,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -3646,7 +4009,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -3656,7 +4018,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -3672,14 +4033,12 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, "license": "MIT" }, "node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -3694,7 +4053,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -3707,7 +4065,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, "license": "ISC" }, "node_modules/xtend": { @@ -3723,7 +4080,6 @@ "version": "2.5.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", - "dev": true, "license": "ISC", "bin": { "yaml": "bin.mjs" diff --git a/package.json b/package.json index dc774654..708e1b6d 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "svelte": "^4.2.19", "svelte-icons-pack": "^3.1.3", "svelte-youtube-embed": "^0.3.0", + "svooltip": "^0.8.3", "tailwindcss": "^3.4.13", "vite": "^5.4.8" } diff --git a/src/lib/blocks/ContributorBlock.svelte b/src/lib/blocks/ContributorBlock.svelte index aab08e95..6d5b7b70 100644 --- a/src/lib/blocks/ContributorBlock.svelte +++ b/src/lib/blocks/ContributorBlock.svelte @@ -5,6 +5,12 @@ export let intro; export let contributors; export let size = "medium"; + + function isLastRow(index, columns) { + const total = contributors.length; + const lastRowStart = Math.floor(total / columns) * columns; + return index >= lastRowStart; + }
{/if}
- {#each contributors as contributor} - + {#each contributors as contributor, index} +
+ +
{/each}
+ + \ No newline at end of file diff --git a/src/lib/components/ContributorCard.svelte b/src/lib/components/ContributorCard.svelte index 9fa18c34..e907aca1 100644 --- a/src/lib/components/ContributorCard.svelte +++ b/src/lib/components/ContributorCard.svelte @@ -11,9 +11,10 @@ // Function to generate HTML string from tooltip const generateTooltipHTML = (content) => { let htmlString = `
`; - content.forEach((item) => { + content.forEach((item) => { + let titleString = item.title ? `

${item.title}

` : ''; htmlString += `
-

${item.title}

+ ${titleString}
    `; item.list.forEach((listItem) => { htmlString += `
  • ${listItem}
  • `; diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index 6604b83e..54e70547 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -1,3 +1,5 @@ +import { tooltip } from 'svooltip'; + const dataSrc = `https://api.github.com/repos/spyder-ide/spyder/contributors?per_page=100`; const currentContributors = [ @@ -5,64 +7,117 @@ const currentContributors = [ id: 365293, name: "Carlos Córdoba", role: "Lead mantainer", - latino: true, tooltip: [ { - title: "Header 1", list: [ - "Revolutionized everything", - "Changed the world for the better", - "Made things better for everyone" + "Maintainer since 2013" ] }, - { - title: "Header 2", - list: [ - "More items", - "A lot of different stuff. This can be a particularly long line, for example", - "The salted pork is particulary good" - ] - } ] }, { id: 16781833, name: "Daniel Althviz", role: "Co-mantainer", + tooltip: [ + { + list: [ + "Release manager", + "Maintainer of QtPy and QtAwesome", + "Manager of NumFOCUS small development grants" + ] + } + ] }, { id: 17051931, name: "C.A.M. Gerlach", - role: "Docs & tech writing", - avatar_url: "/assets/authors/camgerlach/pic.webp" + role: "Core developer", + avatar_url: "/assets/authors/camgerlach/pic.webp", + tooltip: [ + { + list: [ + "Docs maintainer", + "Technical writer" + ] + } + ] + }, + { + id: 6740194, + name: "Quentin Peter", + role: "Core developer", + tooltip: [ + { + list: [ + "Re-architecture communications between Spyder and Spyder-kernels", + "Creator of the Debugger pane", + "Many improvements to the IPython console" + ] + } + ] }, { id: 9618975, name: "Ryan Clary", - role: "Installers", + role: "Core developer", + tooltip: [ + { + list: [ + "Maintainer of the standalone installers" + ] + } + ] }, { id: 7941918, name: "Jitse Niesen", - role: "External plugins", - }, - { - id: 5204788, - name: "Hendrik D. Louzada", - role: "Remote development", - latino: true, + role: "Core developer", + tooltip: [ + { + list: [ + "External plugins maintainer" + ] + } + ] }, { id: 42411448, name: "Juan Sebastian Bautista", role: "Junior Developer", - latino: true, + tooltip: [ + { + list: [ + "Improvements to the Windows installer, QtConsole and Spyder's UI/UX" + ] + } + ] + }, + { + id: 5204788, + name: "Hendrik D. Louzada", + role: "Junior Developer", + tooltip: [ + { + list: [ + "Backend for the Remote client plugin" + ] + } + ] }, { id: 5027583, name: "Andrés Montoya", - role: "UI/UX Design & Social Media", - latino: true, + role: "Grpahic and web designer", + tooltip: [ + { + list: [ + "Developer and maintainer of this website", + "UI/UX improvements", + "Social media graphics designer" + ] + } + ] }, ]; @@ -71,58 +126,135 @@ const pastContributors = [ id: 1311787, name: "Pierre Raybaut", role: "Spyder Creator", + tooltip: [ + { + list: [ + "Started Spyder in 2009", + "Lead maintainer until 2013", + ] + } + ] }, { id: 1878982, name: "Edgar Margffoy", - role: "LSP Support", + role: "Core developer", + tooltip: [ + { + list: [ + "LSP support for the entire application", + "Re-architecture plugin registration and interactions", + "New architecture for the Run plugin", + "Add global registries for actions, menus and toolbars", + ] + } + ] }, { id: 50221806, name: "Isabela Presedo-Floyd", - role: "UX/UI Redesign", - female: true, + role: "Designer", + tooltip: [ + { + list: [ + "New color system and palette for the application", + "Many UI/UX improvements" + ] + } + ] }, { id: 3627835, name: "Gonzalo Peña-Castellanos", - role: "API Redesign", - latino: true, + role: "Core developer", + tooltip: [ + { + list: [ + "Redesign of plugins API", + "Creator of Qtpy", + "Test and improve configuration system", + "Many improvements to the Editor" + ] + } + ] }, { id: 18587879, name: "Juanita Gómez", - role: "Docs & Social Media", - latino: true, - female: true, + role: "Core developer", + tooltip: [ + { + list: [ + "Docs maintainer", + "Main content creator for Spyder's YouTube channel", + "Community manager" + ] + } + ] }, { id: 10170372, name: "Jean-Sébastien Gosselin", - role: "Plots pane", + role: "Core developer", + tooltip: [ + { + list: [ + "Creator of the Plots plane", + "Many improvements across the application", + ] + } + ] }, { id: 20992645, name: "Stephannie Jimenez", - role: "Spyder-Terminal maintainer", - latino: true, - female: true, + role: "Core developer", + tooltip: [ + { + list: [ + "Spyder-terminal maintainer", + "New architecture for the Run plugin", + "Enhance icon manager", + ] + } + ] }, { id: 2397974, name: "Sylvain Corlay", - role: "New Icon Theme", + role: "Core developer", + tooltip: [ + { + list: [ + "New icon theme for Spyder", + "Creator of QtAwesome", + ] + } + ] }, { id: 2024217, name: "Rafael Laverde", - role: "Editor improvements", - latino: true, + role: "Core developer", + tooltip: [ + { + list: [ + "Improvements to the Editor", + ] + } + ] }, { id: 10513354, name: "Brian Olsen", - role: "Console improvements", + role: "Core developer", + tooltip: [ + { + list: [ + "Improvements to the IPython console" + ] + } + ] }, ]; @@ -163,28 +295,12 @@ const processContributors = (current, past, all) => { const totalContributorsPool = [...updatedCurrent, ...updatedPast]; const totalContributors = totalContributorsPool.length; - // Count the number of female and latinos contributors - const totalLatinos = totalContributorsPool.filter( - (contributor) => contributor.latino - ).length; - const totalFemales = totalContributorsPool.filter( - (contributor) => contributor.female - ).length; - - // Calculate percentages - const percentageLatinos = (totalLatinos / totalContributors) * 100; - const percentageFemales = (totalFemales / totalContributors) * 100; - // Return the updated current contributors, past contributors, and remaining contributors return { updatedCurrent, updatedPast, remainingContributors, totalContributors, - totalLatinos, - totalFemales, - percentageLatinos, - percentageFemales, }; } @@ -208,10 +324,6 @@ export async function load({ fetch }) { updatedPast, remainingContributors, totalContributors, - totalLatinos, - totalFemales, - percentageLatinos, - percentageFemales, } = processContributors( currentContributors, pastContributors, @@ -224,10 +336,6 @@ export async function load({ fetch }) { remainingContributors, textData, totalContributors, - totalLatinos, - totalFemales, - percentageLatinos, - percentageFemales, loading: false, error: null, }; From 573dbc0cffd504ae0c4e9986b101209945849ff1 Mon Sep 17 00:00:00 2001 From: conradolandia Date: Tue, 8 Oct 2024 09:59:49 -0500 Subject: [PATCH 37/57] Fix mobile issues and improve column layout --- src/lib/blocks/ContributorBlock.svelte | 43 +++++++++-------------- src/lib/components/ContributorCard.svelte | 2 +- src/routes/about/+page.svelte | 3 +- 3 files changed, 19 insertions(+), 29 deletions(-) diff --git a/src/lib/blocks/ContributorBlock.svelte b/src/lib/blocks/ContributorBlock.svelte index 6d5b7b70..f1834336 100644 --- a/src/lib/blocks/ContributorBlock.svelte +++ b/src/lib/blocks/ContributorBlock.svelte @@ -2,24 +2,29 @@ import ContributorCard from "$lib/components/ContributorCard.svelte"; export let title; - export let intro; + export let intro = ""; export let contributors; export let size = "medium"; function isLastRow(index, columns) { + if (contributors.length === 0) { + console.error("There are no contributors to count"); + return + }; const total = contributors.length; const lastRowStart = Math.floor(total / columns) * columns; return index >= lastRowStart; } +{#if contributors && contributors.length > 0}
    {#if title} -

    +

    {title}

    {/if} @@ -35,38 +40,24 @@

{/if}
{#each contributors as contributor, index} -
+
{/each}
- - \ No newline at end of file +{/if} diff --git a/src/lib/components/ContributorCard.svelte b/src/lib/components/ContributorCard.svelte index e907aca1..f11601f3 100644 --- a/src/lib/components/ContributorCard.svelte +++ b/src/lib/components/ContributorCard.svelte @@ -49,7 +49,7 @@ {contributor.login} {pageTitle} From 6463d3ca93428b95e3bd51658a30768739eb6d94 Mon Sep 17 00:00:00 2001 From: Carlos Cordoba Date: Wed, 9 Oct 2024 19:04:42 -0500 Subject: [PATCH 38/57] Improve contributions a bit --- src/routes/about/+page.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index 54e70547..27d7dfe9 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -158,6 +158,7 @@ const pastContributors = [ { list: [ "New color system and palette for the application", + "Logo redesign", "Many UI/UX improvements" ] } @@ -170,7 +171,7 @@ const pastContributors = [ tooltip: [ { list: [ - "Redesign of plugins API", + "Redesign of the plugins API", "Creator of Qtpy", "Test and improve configuration system", "Many improvements to the Editor" @@ -200,7 +201,7 @@ const pastContributors = [ { list: [ "Creator of the Plots plane", - "Many improvements across the application", + "Many improvements across the entire application", ] } ] @@ -214,7 +215,7 @@ const pastContributors = [ list: [ "Spyder-terminal maintainer", "New architecture for the Run plugin", - "Enhance icon manager", + "Enhancements to the icon manager", ] } ] From 07d1dbf41b6c19c179025bc04ecedb08f5d807f9 Mon Sep 17 00:00:00 2001 From: conradolandia Date: Wed, 16 Oct 2024 13:37:55 -0500 Subject: [PATCH 39/57] Adapt behaviour of tooltips so if only one item is available in a single list, render it as a paragraph, not as a list item --- src/lib/components/ContributorCard.svelte | 32 +++++++++++------------ 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/lib/components/ContributorCard.svelte b/src/lib/components/ContributorCard.svelte index f11601f3..befd2387 100644 --- a/src/lib/components/ContributorCard.svelte +++ b/src/lib/components/ContributorCard.svelte @@ -9,22 +9,22 @@ export let size = "medium"; // Function to generate HTML string from tooltip - const generateTooltipHTML = (content) => { - let htmlString = `
`; - content.forEach((item) => { - let titleString = item.title ? `

${item.title}

` : ''; - htmlString += `
- ${titleString} -
    `; - item.list.forEach((listItem) => { - htmlString += `
  • ${listItem}
  • `; - }); - htmlString += "
"; - }); - htmlString += "
"; - - return htmlString; - }; + const generateTooltipHTML = (content) => ` +
+ ${content.map(item => ` +
+ ${item.title ? `

${item.title}

` : ''} + ${item.list.length === 1 + ? `

${item.list[0]}

` + : ` +
    + ${item.list.map(listItem => `
  • ${listItem}
  • `).join('')} +
+ `} +
+ `).join('')} +
+ `; let tooltipHTML, tooltipOptions; From 0b24c228a5269e2e04415022f0284955780626e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Conrado=20Montoya=20Acosta?= Date: Fri, 18 Oct 2024 11:58:28 -0500 Subject: [PATCH 40/57] Update src/routes/about/+page.js Co-authored-by: C.A.M. Gerlach --- src/routes/about/+page.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index 27d7dfe9..1ad4edaf 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -96,7 +96,7 @@ const currentContributors = [ { id: 5204788, name: "Hendrik D. Louzada", - role: "Junior Developer", + role: "Junior developer", tooltip: [ { list: [ From e2788481fc6a132260415cc1c88ba3f9ce768f43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Conrado=20Montoya=20Acosta?= Date: Fri, 18 Oct 2024 11:58:43 -0500 Subject: [PATCH 41/57] Update src/routes/about/+page.js Co-authored-by: C.A.M. Gerlach --- src/routes/about/+page.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index 1ad4edaf..722fcfa0 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -10,7 +10,7 @@ const currentContributors = [ tooltip: [ { list: [ - "Maintainer since 2013" + "Lead maintainer since 2013" ] }, ] From 4d9699b4d1ff5fca30c0510649d9ddfbcf292836 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Conrado=20Montoya=20Acosta?= Date: Fri, 18 Oct 2024 11:58:50 -0500 Subject: [PATCH 42/57] Update src/routes/about/+page.js Co-authored-by: C.A.M. Gerlach --- src/routes/about/+page.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index 722fcfa0..f7220439 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -50,7 +50,7 @@ const currentContributors = [ tooltip: [ { list: [ - "Re-architecture communications between Spyder and Spyder-kernels", + "Re-architectured communications between Spyder and Spyder-Kernels", "Creator of the Debugger pane", "Many improvements to the IPython console" ] From 3351810dac8a4c4743406a6e16e5f200e5c211b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Conrado=20Montoya=20Acosta?= Date: Fri, 18 Oct 2024 11:59:24 -0500 Subject: [PATCH 43/57] Update src/routes/about/+page.js Co-authored-by: C.A.M. Gerlach --- src/routes/about/+page.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index f7220439..56a14bbc 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -38,7 +38,8 @@ const currentContributors = [ { list: [ "Docs maintainer", - "Technical writer" + "Technical, grant and blog writer", + "Outreach lead" ] } ] From 578d6cdaa1ad8b6b48ba591bb3181798fc39bc37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Conrado=20Montoya=20Acosta?= Date: Fri, 18 Oct 2024 11:59:36 -0500 Subject: [PATCH 44/57] Update src/routes/about/+page.js Co-authored-by: C.A.M. Gerlach --- src/routes/about/+page.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index 56a14bbc..280d4cdb 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -101,7 +101,7 @@ const currentContributors = [ tooltip: [ { list: [ - "Backend for the Remote client plugin" + "Developed backend for the remote client plugin" ] } ] From 6fca31b2fc913b1fe4359382961fe0a92561df0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Conrado=20Montoya=20Acosta?= Date: Fri, 18 Oct 2024 11:59:52 -0500 Subject: [PATCH 45/57] Update src/routes/about/+page.js Co-authored-by: C.A.M. Gerlach --- src/routes/about/+page.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index 280d4cdb..010ed239 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -109,7 +109,7 @@ const currentContributors = [ { id: 5027583, name: "Andrés Montoya", - role: "Grpahic and web designer", + role: "Graphic and web designer", tooltip: [ { list: [ From 502c93dd32682dc5451f3613946d844123b77fa3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Conrado=20Montoya=20Acosta?= Date: Fri, 18 Oct 2024 12:00:09 -0500 Subject: [PATCH 46/57] Update src/routes/about/+page.js Co-authored-by: C.A.M. Gerlach --- src/routes/about/+page.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index 010ed239..21cfadbd 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -130,7 +130,7 @@ const pastContributors = [ tooltip: [ { list: [ - "Started Spyder in 2009", + "Created Spyder in 2009", "Lead maintainer until 2013", ] } From b3a60ecddcb76908b26d0bfb96a30aa19b6dae21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Conrado=20Montoya=20Acosta?= Date: Fri, 18 Oct 2024 12:01:01 -0500 Subject: [PATCH 47/57] Update src/routes/about/+page.js Co-authored-by: C.A.M. Gerlach --- src/routes/about/+page.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index 21cfadbd..71169314 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -144,7 +144,7 @@ const pastContributors = [ { list: [ "LSP support for the entire application", - "Re-architecture plugin registration and interactions", + "Re-architectured plugin registration and interactions", "New architecture for the Run plugin", "Add global registries for actions, menus and toolbars", ] From 082ec3e1c068204cc708ae5bf9b2570ab904e22c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Conrado=20Montoya=20Acosta?= Date: Fri, 18 Oct 2024 12:02:26 -0500 Subject: [PATCH 48/57] Update src/routes/about/+page.js Co-authored-by: C.A.M. Gerlach --- src/routes/about/+page.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index 71169314..d5410c34 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -174,7 +174,7 @@ const pastContributors = [ list: [ "Redesign of the plugins API", "Creator of Qtpy", - "Test and improve configuration system", + "Improved configuration system", "Many improvements to the Editor" ] } From d288e7be823cdc47e0a5839bc74871d63d63bf1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Conrado=20Montoya=20Acosta?= Date: Fri, 18 Oct 2024 12:02:37 -0500 Subject: [PATCH 49/57] Update src/routes/about/+page.js Co-authored-by: C.A.M. Gerlach --- src/routes/about/+page.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index d5410c34..cebf334c 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -173,7 +173,7 @@ const pastContributors = [ { list: [ "Redesign of the plugins API", - "Creator of Qtpy", + "Creator of QtPy", "Improved configuration system", "Many improvements to the Editor" ] From e857b400b97a60322fbe36e272b306eb8a733d6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Conrado=20Montoya=20Acosta?= Date: Fri, 18 Oct 2024 12:02:49 -0500 Subject: [PATCH 50/57] Update src/routes/about/+page.js Co-authored-by: C.A.M. Gerlach --- src/routes/about/+page.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index cebf334c..27d701fe 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -172,7 +172,7 @@ const pastContributors = [ tooltip: [ { list: [ - "Redesign of the plugins API", + "Redesigned the plugins API", "Creator of QtPy", "Improved configuration system", "Many improvements to the Editor" From 52ee285b961702c666246b3c8ff2f3f6bb0d7dde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Conrado=20Montoya=20Acosta?= Date: Fri, 18 Oct 2024 12:02:58 -0500 Subject: [PATCH 51/57] Update src/routes/about/+page.js Co-authored-by: C.A.M. Gerlach --- src/routes/about/+page.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index 27d701fe..509efa2b 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -187,7 +187,7 @@ const pastContributors = [ tooltip: [ { list: [ - "Docs maintainer", + "Docs writer", "Main content creator for Spyder's YouTube channel", "Community manager" ] From 558bae5fb3e1cfd8bc2e1b5b6bdd29bff780042d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Conrado=20Montoya=20Acosta?= Date: Fri, 18 Oct 2024 12:03:08 -0500 Subject: [PATCH 52/57] Update src/routes/about/+page.js Co-authored-by: C.A.M. Gerlach --- src/routes/about/+page.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index 509efa2b..4d10e864 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -214,7 +214,7 @@ const pastContributors = [ tooltip: [ { list: [ - "Spyder-terminal maintainer", + "Spyder-Terminal maintainer", "New architecture for the Run plugin", "Enhancements to the icon manager", ] From a78024f13ddeda019c241217175096213ec5231b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Conrado=20Montoya=20Acosta?= Date: Fri, 18 Oct 2024 12:03:22 -0500 Subject: [PATCH 53/57] Update src/routes/about/+page.js Co-authored-by: C.A.M. Gerlach --- src/routes/about/+page.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index 4d10e864..b9543869 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -85,7 +85,7 @@ const currentContributors = [ { id: 42411448, name: "Juan Sebastian Bautista", - role: "Junior Developer", + role: "Junior developer", tooltip: [ { list: [ From ddbb56be4ddd5ab9e255c721981a639ba15765e7 Mon Sep 17 00:00:00 2001 From: conradolandia Date: Fri, 18 Oct 2024 12:13:05 -0500 Subject: [PATCH 54/57] Accept CAM suggestions for text --- src/lib/blocks/ContributorBlock.svelte | 2 +- src/routes/about/+page.js | 2 +- src/routes/about/+page.svelte | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib/blocks/ContributorBlock.svelte b/src/lib/blocks/ContributorBlock.svelte index f1834336..f0a352cd 100644 --- a/src/lib/blocks/ContributorBlock.svelte +++ b/src/lib/blocks/ContributorBlock.svelte @@ -36,7 +36,7 @@ class:text-md={size === "small"} class:text-xl={size === "medium" || size === "large"} > - {intro} + {@html intro} {/if}

- {pageIntro} + {@html pageIntro}

{#if error}

Error: {error}

From 2821fcb6ef75d20ca28ffc3a60607a19aca7c8b5 Mon Sep 17 00:00:00 2001 From: Carlos Cordoba Date: Sat, 19 Oct 2024 12:46:46 -0500 Subject: [PATCH 55/57] Improve one item description for Gonzalo --- src/routes/about/+page.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index fde48b15..993d97fe 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -174,7 +174,7 @@ const pastContributors = [ list: [ "Redesigned the plugins API", "Creator of QtPy", - "Improved configuration system", + "Improved configuration system and added tests for it", "Many improvements to the Editor" ] } From 61f1be6b9d6b749f386187891f75926b36a64c5b Mon Sep 17 00:00:00 2001 From: conradolandia Date: Tue, 22 Oct 2024 23:04:58 -0500 Subject: [PATCH 56/57] Remove an unneded import --- src/routes/about/+page.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index fde48b15..562c9ceb 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -1,5 +1,3 @@ -import { tooltip } from 'svooltip'; - const dataSrc = `https://api.github.com/repos/spyder-ide/spyder/contributors?per_page=100`; const currentContributors = [ From 13994f84a78f782f134c5e96df68cdb8e70cf876 Mon Sep 17 00:00:00 2001 From: conradolandia Date: Fri, 25 Oct 2024 12:38:05 -0500 Subject: [PATCH 57/57] Add Steve Silvester to list of past team members --- src/routes/about/+page.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/routes/about/+page.js b/src/routes/about/+page.js index d2b04412..813924c5 100644 --- a/src/routes/about/+page.js +++ b/src/routes/about/+page.js @@ -256,6 +256,18 @@ const pastContributors = [ } ] }, + { + id: 2096628, + name: "Steve Silvester", + role: "Core developer", + tooltip: [ + { + list: [ + "Code completion, keybindings and file opening improvements" + ] + } + ] + }, ]; const textData = {