diff --git a/apps/netlogo/.env b/apps/netlogo/.env
index fb725665..357f179c 100644
--- a/apps/netlogo/.env
+++ b/apps/netlogo/.env
@@ -3,6 +3,8 @@ PROJECT_ROOT="."
PRODUCT_NAME="NetLogo"
PRODUCT_WEBSITE="https://www.netlogo.org"
+PUBLIC_BACKEND_URL="https://backend.netlogo.org"
+
REPO_ROOT=../..
EXTENSIONS_DIR="$REPO_ROOT/external/extensions"
diff --git a/apps/netlogo/.env.development b/apps/netlogo/.env.development
index e26ed85f..a8202e21 100644
--- a/apps/netlogo/.env.development
+++ b/apps/netlogo/.env.development
@@ -7,5 +7,7 @@ PROJECT_ROOT="."
PRODUCT_NAME="NetLogo"
PRODUCT_WEBSITE="https://learn.netlogo.org"
+PUBLIC_BACKEND_URL="https://backend.netlogo.org"
+
REPO_ROOT=../..
EXTENSIONS_DIR="$REPO_ROOT/external/extensions"
diff --git a/apps/netlogo/app/app.config.ts b/apps/netlogo/app/app.config.ts
index dc0faedf..2fb4f73a 100644
--- a/apps/netlogo/app/app.config.ts
+++ b/apps/netlogo/app/app.config.ts
@@ -6,38 +6,7 @@ export default defineAppConfig({
},
container: {
- base: "max-w-[110ch] mx-auto px-0 mx-auto px-[var(--space-xl)] lg:px-0",
- },
-
- breadcrumb: {
- slots: {
- list: "[&_li]:m-0! p-0",
- },
- },
-
- contentNavigation: {
- slots: {
- list: "mx-0 px-2 lg:mt-[var(--block-top)]",
- listWithChildren: "px-0",
- },
- },
- contentToc: {
- slots: {
- root: "px-0! w-full -mx-0",
- trailing: "hidden",
- title:
- "w-full px-[var(--space-lg)] py-2 bg-[var(--secondary-heading-background-color)] text-[var(--secondary-heading-text-color)] w-full",
- },
- },
- pageAside: {
- slots: {
- root: "pt-0",
- },
- },
- blogPost: {
- slots: {
- footer: "p-4 sm:p-6",
- },
+ base: "max-w-[150ch] px-4 lg:px-12 mx-auto",
},
},
});
diff --git a/apps/netlogo/app/app.vue b/apps/netlogo/app/app.vue
index 81018a76..c90826e6 100644
--- a/apps/netlogo/app/app.vue
+++ b/apps/netlogo/app/app.vue
@@ -3,7 +3,9 @@
-
+
+
+
diff --git a/apps/netlogo/app/assets/styles/main.scss b/apps/netlogo/app/assets/styles/main.scss
index c68670f2..462b17e5 100644
--- a/apps/netlogo/app/assets/styles/main.scss
+++ b/apps/netlogo/app/assets/styles/main.scss
@@ -1,14 +1,22 @@
-@use 'sass:meta';
+@use "sass:meta";
@layer theme, base, components, website, utilities;
@layer utilities {
- @include meta.load-css('@repo/tailwind-config/scss/utilities.scss');
+ @include meta.load-css("@repo/tailwind-config/scss/utilities.scss");
}
@layer website {
- @include meta.load-css('@repo/tailwind-config/scss/normalize.scss');
- @include meta.load-css('@repo/tailwind-config/scss/docs-theme.scss');
+ @include meta.load-css("@repo/tailwind-config/scss/normalize.scss");
+
+ h1,
+ h2,
+ h3,
+ h4,
+ h5 {
+ margin-bottom: 0;
+ }
+ // @include meta.load-css('@repo/tailwind-config/scss/docs-theme.scss');
}
-@include meta.load-css('@repo/vue-ui/styles.scss');
+@include meta.load-css("@repo/vue-ui/styles.scss");
diff --git a/apps/netlogo/app/assets/website-logo.ts b/apps/netlogo/app/assets/website-logo.ts
index 70d3afe6..b71e8540 100644
--- a/apps/netlogo/app/assets/website-logo.ts
+++ b/apps/netlogo/app/assets/website-logo.ts
@@ -1,3 +1,3 @@
-import WebsiteLogo from "@repo/vue-ui/assets/brands/NetLogoLearnGuide.svg";
+import WebsiteLogo from "@repo/vue-ui/assets/brands/NetLogoOrgLogo.svg";
export { WebsiteLogo };
diff --git a/apps/netlogo/app/assets/website-meta.json b/apps/netlogo/app/assets/website-meta.json
index 06de3676..f6f0fef9 100644
--- a/apps/netlogo/app/assets/website-meta.json
+++ b/apps/netlogo/app/assets/website-meta.json
@@ -1,5 +1,5 @@
{
- "name": "NetLogo",
+ "name": "NetLogo Home",
"fullName": "NetLogo: Agent-Based Modeling Environment",
"description": "Agent-Based Modeling Environment for Simulating Natural and Social Phenomena.",
"longDescription": "NetLogo is a multi-agent programmable modeling environment used for simulating natural and social phenomena. It is widely used in education, research, and industry to create complex models with ease. Explore NetLogo's features, download the software, and access extensive documentation and resources to get started with agent-based modeling.",
@@ -18,4 +18,4 @@
"Programming",
"Agent-based Modeling"
]
-}
\ No newline at end of file
+}
diff --git a/apps/netlogo/app/components/ClientFooter.vue b/apps/netlogo/app/components/ClientFooter.vue
index 4ba93372..137eb991 100644
--- a/apps/netlogo/app/components/ClientFooter.vue
+++ b/apps/netlogo/app/components/ClientFooter.vue
@@ -5,10 +5,23 @@
:brand="WebsiteLogo"
brand-href="/"
:href-aria-label="hrefAriaLabel"
- class="w-fit mx-auto"
+ :span="2"
+ class="w-fit"
>
+
+ © {{ currentYear }} NetLogo Center at Northwestern University
+
-
+
+
+
+
{{ meta.longDescription }}
@@ -17,6 +30,7 @@
+
+
diff --git a/apps/netlogo/app/components/ClientNavbar.vue b/apps/netlogo/app/components/ClientNavbar.vue
index 3be3e596..112c61e4 100644
--- a/apps/netlogo/app/components/ClientNavbar.vue
+++ b/apps/netlogo/app/components/ClientNavbar.vue
@@ -23,9 +23,9 @@
-
-
-
+
@@ -38,14 +38,8 @@ import type { Navbar as _Navbar } from "@repo/vue-ui/components/navbar/index";
import { useMediaQuery } from "@vueuse/core";
import { onMounted, ref, watch } from "vue";
import { WebsiteLogo } from "~/assets/website-logo";
-
-interface NavbarLink {
- title: string;
- href: string;
- columns?: number;
- children?: Array>;
- active?: boolean;
-}
+import { useNavigation, type NavbarLink } from "~/composables/useNavigation";
+import Button from "../../../../packages/vue-ui/src/components/Button.vue";
const route = useRoute();
@@ -72,13 +66,14 @@ const handleMediaQueryChange = (): void => {
}
};
-const navbarLinks = ref>([
- {
- title: "Home",
- href: "/",
- columns: 2,
- },
-]);
+const navigateToDonate = () => {
+ navigateTo("/donate");
+};
+
+const { navbarLinks: apiNavbarLinks } = await useNavigation();
+
+// Reactive navbar links with active states
+const navbarLinks = ref(apiNavbarLinks.value);
const updateActiveStates = () => {
navbarRef.value?.blur();
@@ -120,7 +115,16 @@ const isLinkParentActive = (link: NavbarLink, currentPath: string): boolean => {
);
};
-updateActiveStates();
+watch(
+ apiNavbarLinks,
+ (newLinks) => {
+ if (newLinks.length > 0) {
+ navbarLinks.value = newLinks;
+ updateActiveStates();
+ }
+ },
+ { immediate: true },
+);
onMounted(() => {
if (import.meta.client) {
diff --git a/apps/netlogo/app/components/Community.vue b/apps/netlogo/app/components/Community.vue
new file mode 100644
index 00000000..876e727c
--- /dev/null
+++ b/apps/netlogo/app/components/Community.vue
@@ -0,0 +1,77 @@
+
+
+
+
Community
+
+ Join NetLogo community and start contributing today.
+
+
+
+
+
+
+
+
![]()
+
+
+
+
+ {{ community.title }}
+
+
+
+
+
+
+ {{ community.description }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/netlogo/app/components/GetNetLogo.vue b/apps/netlogo/app/components/GetNetLogo.vue
new file mode 100644
index 00000000..d9833c76
--- /dev/null
+++ b/apps/netlogo/app/components/GetNetLogo.vue
@@ -0,0 +1,78 @@
+
+
+
+
Get NetLogo
+
+ There are five different products in NetLogo. Find the one that suits your need.
+
+
+
+
+
+
+
+
![]()
+
+
+
+
+ {{ product.title }}
+
+
+
+
+
+
+ {{ product.content }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/netlogo/app/components/Intro.vue b/apps/netlogo/app/components/Intro.vue
new file mode 100644
index 00000000..3e24ba10
--- /dev/null
+++ b/apps/netlogo/app/components/Intro.vue
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+ {{ description }}
+
+
+
+
+
+ 100% Free
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/netlogo/app/components/IntroSplash.vue b/apps/netlogo/app/components/IntroSplash.vue
new file mode 100644
index 00000000..b5c6f86d
--- /dev/null
+++ b/apps/netlogo/app/components/IntroSplash.vue
@@ -0,0 +1,204 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.word_column_title || "Example Topics" }}
+
+
+
+
+ {{ word.word }}
+
+ and many more...
+
+
+
+
+
+
+ {{ item.image_column_title }}
+
+
+
+
+ and many more...
+
+
+
+
+
+
+
+
+
+
+
![]()
+
+
+ Demo Image
+
+
+
+
+
+
+
+
+
+ {{ item.word_column_title || "Example Topics" }}
+
+
+
+ -
+ {{ word.word }}
+
+ - and many more...
+
+
+
+
+
+
+
+ {{ item.image_column_title }}
+
+
+
+ -
+
+
+ - and many more...
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/netlogo/app/components/Newsfeed.vue b/apps/netlogo/app/components/Newsfeed.vue
new file mode 100644
index 00000000..2b23f139
--- /dev/null
+++ b/apps/netlogo/app/components/Newsfeed.vue
@@ -0,0 +1,146 @@
+
+
+
+ News and Social Media
+
+
+
+
+
+
+
+
+
+
+ (and
+
+ on X )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/netlogo/app/components/announcements/AnnouncementsSection.vue b/apps/netlogo/app/components/announcements/AnnouncementsSection.vue
new file mode 100644
index 00000000..a434f45a
--- /dev/null
+++ b/apps/netlogo/app/components/announcements/AnnouncementsSection.vue
@@ -0,0 +1,41 @@
+
+
+
Announcements
+
+
No announcements available.
+
+
+
+
{{ announcement.title }}
+
+ {{ formatDate(announcement.date) }}
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/netlogo/app/components/contact/ContactSection.vue b/apps/netlogo/app/components/contact/ContactSection.vue
new file mode 100644
index 00000000..7abb6936
--- /dev/null
+++ b/apps/netlogo/app/components/contact/ContactSection.vue
@@ -0,0 +1,24 @@
+
+
+
Contact
+
+
No contact info available.
+
+
+
+
{{ item.heading }}
+
+
+
+
+
+
+
+
+
diff --git a/apps/netlogo/app/composables/useNavigation.ts b/apps/netlogo/app/composables/useNavigation.ts
new file mode 100644
index 00000000..3e1104de
--- /dev/null
+++ b/apps/netlogo/app/composables/useNavigation.ts
@@ -0,0 +1,74 @@
+import { computed, ref } from "vue";
+import NetLogoAPI, { type NavigationSection } from "~/utils/api";
+
+export interface NavbarLink {
+ title: string;
+ href: string;
+ columns?: number;
+ children?: Array>;
+ active?: boolean;
+}
+
+export async function useNavigation() {
+ const config = useRuntimeConfig();
+ const navigationSections = ref([]);
+
+ const { data } = await useAsyncData("nav-data", async () => {
+ const api = new NetLogoAPI(config.public.backendUrl as string);
+ return await api.getNavigationData();
+ });
+
+ if (data.value) {
+ navigationSections.value = data.value.navigation_sections;
+ }
+
+ /**
+ * Transform API navigation sections into NavbarLink format
+ */
+ const navbarLinks = computed(() => {
+ return navigationSections.value.map((section) => {
+ const children = section.items
+ .filter((item) => item.url !== section.items[0]?.url) // Exclude first item if it's the parent link
+ .map((item) => ({
+ title: item.display_title,
+ href: item.url,
+ active: false,
+ }));
+
+ return {
+ title: section.name,
+ href: section.items[0]?.url || "/",
+ columns: children.length > 6 ? 2 : undefined,
+ children: children.length > 0 ? children : undefined,
+ active: false,
+ };
+ });
+ });
+
+ const footerSections = computed(() => {
+ return navigationSections.value
+ .map((section) => {
+ const links = section.items
+ .filter((item) => item.in_footer)
+ .map((item) => ({
+ title: item.display_title,
+ href: item.url,
+ external: false,
+ }));
+
+ return links.length > 0
+ ? {
+ title: section.name,
+ links,
+ }
+ : null;
+ })
+ .filter((section) => section !== null);
+ });
+
+ return {
+ navigationSections,
+ navbarLinks,
+ footerSections,
+ };
+}
diff --git a/apps/netlogo/app/pages/announcements.vue b/apps/netlogo/app/pages/announcements.vue
new file mode 100644
index 00000000..f87f9612
--- /dev/null
+++ b/apps/netlogo/app/pages/announcements.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
diff --git a/apps/netlogo/app/pages/contact.vue b/apps/netlogo/app/pages/contact.vue
new file mode 100644
index 00000000..06014f61
--- /dev/null
+++ b/apps/netlogo/app/pages/contact.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
diff --git a/apps/netlogo/app/pages/index.vue b/apps/netlogo/app/pages/index.vue
index 3b5c9974..ce319ed5 100644
--- a/apps/netlogo/app/pages/index.vue
+++ b/apps/netlogo/app/pages/index.vue
@@ -1,11 +1,36 @@
-
- Welcome to {{ meta.name }}
- This is the home page for the NetLogo application.
-
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/netlogo/app/utils/api.ts b/apps/netlogo/app/utils/api.ts
new file mode 100644
index 00000000..6ce3519b
--- /dev/null
+++ b/apps/netlogo/app/utils/api.ts
@@ -0,0 +1,369 @@
+import { GraphQLClient } from "graphql-request";
+// import { type FormData } from "../components/download/download-form";
+// import { type AnnouncementObj } from "../components/layout/announcement";
+import queries from "./queries";
+
+// Types for the API responses
+interface ApiResponse {
+ data: T;
+}
+
+interface Image {
+ id: string;
+}
+
+export interface Introduction {
+ id: string;
+ title: string;
+ description: string;
+}
+
+export interface IntroSplashEntry {
+ id: string;
+ title: string;
+ description: string;
+ demo_image: Image;
+ learn_more_link: string;
+ featured_items: FeaturedItem[];
+}
+
+export interface FeaturedItem {
+ id: string;
+ type: number;
+ image: Image;
+ image_description: string;
+ word_column_title: string;
+ column_words: ColumnWord[];
+ image_column_title: string;
+ column_images: ColumnImage[];
+}
+
+export interface ColumnWord {
+ word: string;
+ url: string;
+}
+
+export interface ColumnImage {
+ image: Image;
+ word: string;
+}
+
+export interface WhyNetLogoEntry {
+ title: string;
+ content: string;
+ icon: Image;
+ order: number;
+}
+
+export interface GetNetLogoEntry {
+ id: string;
+ title: string;
+ content: string;
+ icon: Image;
+ link: string;
+ order: number;
+ button_text: string;
+}
+
+export interface CommunityEntry {
+ id: string;
+ title: string;
+ description: string;
+ icon: Image;
+ link: string;
+ order: number;
+ bordered: boolean;
+}
+
+export interface PartnerEntry {
+ id: string;
+ partner_name: string;
+ partner_image: Image;
+}
+
+export interface NavigationSection {
+ name: string;
+ items: NavigationItem[];
+}
+
+export interface NavigationItem {
+ display_title: string;
+ url: string;
+ in_footer: boolean;
+}
+
+export interface ContactItem {
+ heading: string;
+ body: string;
+}
+
+export interface AnnouncementEntry {
+ id: number;
+ title: string;
+ date: string;
+ content: string;
+}
+
+export interface NewsEntry {
+ id: number;
+ title: string;
+ date: string;
+ body: string;
+}
+
+export interface AboutEntry {
+ body: string;
+}
+
+export interface EducatorsEntry {
+ body: string;
+}
+
+export interface CampaignEntry {
+ body: string;
+}
+
+export interface NetlogoCon2026Entry {
+ body: string;
+}
+
+export interface ReferenceEntry {
+ year: number;
+ reference: string;
+ is_ccl: boolean;
+ //in_press: boolean;
+}
+
+export interface GroupedReference {
+ year: number;
+ references: string[];
+}
+
+export interface AllData {
+ introduction: Introduction;
+ intro_splash: IntroSplashEntry[];
+ why_netlogo: WhyNetLogoEntry[];
+ get_netlogo: GetNetLogoEntry[];
+ community: CommunityEntry[];
+ featured_partners: PartnerEntry[];
+ // announcement: AnnouncementObj;
+}
+
+export interface PlatformIcon {
+ icon: Image;
+}
+
+export interface DownloadLink {
+ platform: string;
+ download_url: string;
+ primary: boolean;
+ subplatform: string;
+ platform_icon: PlatformIcon;
+}
+
+export interface NetLogoVersion {
+ version: string;
+ download_links: DownloadLink[];
+}
+
+export interface DonationData {
+ title: string;
+ text: string;
+ image: Image;
+ url: string;
+}
+
+export interface DownloadPageData {
+ netlogo_versions: NetLogoVersion[];
+ donation_data: DonationData[];
+}
+
+export interface PageEntry {
+ section_title: string;
+ section_content: string;
+}
+
+class NetLogoAPI {
+ private readonly baseUrl: string;
+ private client: GraphQLClient;
+
+ constructor(baseUrl: string = import.meta.env.PUBLIC_BACKEND_URL) {
+ this.baseUrl = baseUrl;
+ this.client = new GraphQLClient(this.baseUrl + "/graphql");
+ }
+
+ async fetchData(endpoint: string): Promise {
+ try {
+ const url = `${this.baseUrl}${endpoint}`;
+ const response = await fetch(url);
+ if (!response.ok) {
+ throw new Error(`HTTP error! status: ${response.status}`);
+ }
+ const data: ApiResponse = await response.json();
+ return data.data;
+ } catch (error) {
+ console.error(`Error fetching ${endpoint}:`, error);
+ throw error;
+ }
+ }
+
+ async graphqlFetchData(query: string): Promise {
+ try {
+ const data = await this.client.request(query);
+ return data;
+ } catch (error) {
+ console.error("GraphQL query error:", error);
+ throw error;
+ }
+ }
+
+ async getMainPageData() {
+ return await this.graphqlFetchData(queries.mainPageData);
+ }
+
+ async getDownloadPageData() {
+ return await this.graphqlFetchData(queries.downloadPageData);
+ }
+
+ async getDonationData() {
+ const donationData = await this.graphqlFetchData<{
+ donation_data: DonationData[];
+ }>(queries.donationData);
+
+ return donationData.donation_data;
+ }
+
+ async getNetLogoVersions() {
+ return await this.graphqlFetchData(queries.netLogoVersions);
+ }
+
+ async getContact() {
+ const dict = await this.graphqlFetchData<{ contact_data: ContactItem[] }>(queries.contacts);
+ return dict.contact_data;
+ }
+
+ async getAnnouncements() {
+ const result = await this.graphqlFetchData<{ announcements: AnnouncementEntry[] }>(
+ queries.mainAnnouncements,
+ );
+ return result.announcements;
+ }
+
+ async getNews() {
+ const result = await this.graphqlFetchData<{ official_news: NewsEntry[] }>(
+ queries.officialNews,
+ );
+ return result.official_news;
+ }
+
+ async getAboutContent() {
+ const dict = await this.graphqlFetchData<{ about: AboutEntry }>(queries.aboutContent);
+ return dict.about;
+ }
+
+ async getEducatorsContent() {
+ const dict = await this.graphqlFetchData<{ educators: EducatorsEntry }>(
+ queries.educatorsContent,
+ );
+ return dict.educators;
+ }
+
+ async getCampaignContent() {
+ const dict = await this.graphqlFetchData<{ campaign: CampaignEntry }>(queries.campaignContent);
+ return dict.campaign;
+ }
+
+ async getNetLogoCon2026Content() {
+ const dict = await this.graphqlFetchData<{ netlogo_con_2026: NetlogoCon2026Entry }>(
+ queries.netlogoCon2026Content,
+ );
+ return dict.netlogo_con_2026;
+ }
+
+ async getReferences() {
+ const references: { References: ReferenceEntry[] } = await this.graphqlFetchData<{
+ References: ReferenceEntry[];
+ }>(queries.referenceData);
+
+ // ***new fix stores is ccl and the refrence not jsut ref
+ let groupedReferences: Map = new Map();
+
+ //let groupedReferences: Map = new Map();
+
+ // Loop through the references and group them by year
+ references["References"].forEach((item) => {
+ const year = item.year; // Convert year to string for the key
+
+ // Check if the year already exists in the map
+ if (!groupedReferences.has(year)) {
+ // If not, create a new entry with an empty array
+ groupedReferences.set(year, []);
+ }
+ //data is not consistent
+ //indexing data that i cant work with it
+ //how did i organize data from directus
+ //The issue is inconsistent data indexing or formatting when calling the getReferences() method and attempting to process or display the data. The line:
+ //suggests that your grouped data may not be properly returned, consumed, or structured.
+
+ // add some console log stmts in the api and make sure it get the data how you expect the go to typesript file
+
+ // Push the reference into the array for that year
+ //groupedReferences.get(year)?.push(item.reference);
+
+ //***new fix 2: ensure that each reference is stored with the text and the is_ccl field proper rendering
+
+ groupedReferences.get(year)?.push({
+ reference: item.reference,
+ is_ccl: item.is_ccl,
+ });
+ });
+ // *** new fix 3: return in coreect strucure
+ //console.log('Grouped References:', groupedReferences);
+ //return groupedReferences;
+
+ // *** new fix 4: make sure the data is formatted into the array shape your frontend expects
+ const groupedArray = Array.from(groupedReferences.entries()).map(([year, refs]) => ({
+ year,
+ references: refs,
+ }));
+
+ //console.log('Grouped References:', groupedArray);
+
+ // sort the array by year in descending order
+ groupedArray.sort((a, b) => b.year - a.year);
+
+ return groupedArray;
+
+ //return references['References']
+ }
+
+ async getNavigationData() {
+ return await this.graphqlFetchData<{
+ navigation_sections: NavigationSection[];
+ }>(queries.navigationData);
+ }
+
+ async getResourcesData() {
+ const resourcesData = await this.graphqlFetchData<{
+ resources: PageEntry[];
+ }>(queries.resourcesData);
+
+ return resourcesData.resources;
+ }
+
+ // async sendDownloadForm(formData: FormData) {
+ // const url = this.baseUrl + "/items/download_responses";
+
+ // const response = await fetch(url, {
+ // method: "POST",
+ // headers: {
+ // "Content-Type": "application/json",
+ // },
+ // body: JSON.stringify(formData),
+ // });
+
+ // return response;
+ // }
+}
+
+export default NetLogoAPI;
diff --git a/apps/netlogo/app/utils/queries.ts b/apps/netlogo/app/utils/queries.ts
new file mode 100644
index 00000000..1ea9d869
--- /dev/null
+++ b/apps/netlogo/app/utils/queries.ts
@@ -0,0 +1,299 @@
+import { gql } from "graphql-request";
+
+const queries = {
+ introduction: gql`
+ query {
+ introduction {
+ title
+ description
+ }
+ }
+ `,
+
+ introSplash: gql`
+ query GetIntroSplash {
+ intro_splash {
+ title
+ description
+ learn_more_link
+ demo_image {
+ id
+ }
+ featured_items {
+ id
+ image {
+ id
+ }
+ type
+ image_description
+ column_title
+ column_words {
+ word
+ url
+ }
+ }
+ }
+ }
+ `,
+
+ whyNetLogo: gql`
+ query GetWhyNetLogo {
+ why_netlogo {
+ id
+ title
+ content
+ icon
+ order
+ }
+ }
+ `,
+
+ getNetLogo: gql`
+ query GetGetNetLogo {
+ get_netlogo {
+ id
+ title
+ content
+ icon
+ link
+ order
+ }
+ }
+ `,
+
+ community: gql`
+ query GetCommunity {
+ community {
+ id
+ Title
+ Description
+ Icon
+ Link
+ order
+ Bordered
+ }
+ }
+ `,
+
+ partners: gql`
+ query GetPartners {
+ featured_partners {
+ id
+ partner_name
+ partner_image
+ }
+ }
+ `,
+
+ contacts: gql`
+ query getContacts {
+ contact_data {
+ heading
+ body
+ }
+ }
+ `,
+
+ mainAnnouncements: gql`
+ query getAnnouncements {
+ announcements(sort: ["-date"]) {
+ title
+ date
+ content
+ }
+ }
+ `,
+
+ officialNews: gql`
+ query getNews {
+ official_news(sort: ["-date"]) {
+ id
+ title
+ date
+ body
+ }
+ }
+ `,
+
+ referenceData: gql`
+ query getReferences {
+ References(limit: -1) {
+ year
+ reference
+ is_ccl
+ }
+ }
+ `,
+
+ navigationData: gql`
+ query GetNavigation {
+ navigation_sections {
+ name
+ items {
+ display_title
+ url
+ in_footer
+ }
+ }
+ }
+ `,
+
+ aboutContent: gql`
+ query getAbout {
+ about {
+ body
+ }
+ }
+ `,
+
+ educatorsContent: gql`
+ query getEducators {
+ educators {
+ body
+ }
+ }
+ `,
+
+ campaignContent: gql`
+ query getCampaign {
+ campaign {
+ body
+ }
+ }
+ `,
+
+ netlogoCon2026Content: gql`
+ query getNetlogoCon2026 {
+ netlogo_con_2026 {
+ body
+ }
+ }
+ `,
+
+ netLogoVersions: gql`
+ query GetNetLogoVersions {
+ netlogo_versions {
+ version
+ download_links {
+ platform
+ download_url
+ }
+ }
+ }
+ `,
+
+ resourcesData: gql`
+ query GetResources {
+ resources {
+ section_title
+ section_content
+ }
+ }
+ `,
+
+ mainPageData: gql`
+ query GetAllData {
+ introduction {
+ title
+ description
+ }
+ intro_splash {
+ title
+
+ description
+ learn_more_link
+ featured_items {
+ id
+ type
+ image {
+ id
+ }
+ image_description
+ word_column_title
+ column_words {
+ word
+ url
+ }
+ image_column_title
+ column_images {
+ image {
+ id
+ }
+ word
+ }
+ }
+ }
+ why_netlogo {
+ title
+ content
+ icon {
+ id
+ }
+ }
+ get_netlogo {
+ title
+ content
+ icon {
+ id
+ }
+ link
+ button_text
+ }
+ community {
+ title
+ description
+ icon {
+ id
+ }
+ link
+ }
+ featured_partners {
+ partner_name
+ partner_image {
+ id
+ }
+ }
+ }
+ `,
+
+ downloadPageData: gql`
+ query GetDownloadPageData {
+ netlogo_versions {
+ version
+ download_links {
+ platform
+ download_url
+ primary
+ subplatform
+ platform_icon {
+ icon {
+ id
+ }
+ }
+ }
+ }
+ donation_data {
+ title
+ text
+ image {
+ id
+ }
+ url
+ }
+ }
+ `,
+ donationData: gql`
+ query GetDonationData {
+ donation_data {
+ title
+ text
+ image {
+ id
+ }
+ url
+ }
+ }
+ `,
+};
+
+export default queries;
diff --git a/apps/netlogo/nuxt.config.ts b/apps/netlogo/nuxt.config.ts
index ad60b465..573d539a 100644
--- a/apps/netlogo/nuxt.config.ts
+++ b/apps/netlogo/nuxt.config.ts
@@ -7,5 +7,25 @@ export default defineNuxtConfig(
enabled: true,
},
ssr: true,
+ runtimeConfig: {
+ public: {
+ backendUrl: process.env.PUBLIC_BACKEND_URL || "https://backend.netlogo.org",
+ },
+ },
+ app: {
+ head: {
+ script: [
+ {
+ src: "https://unpkg.com/bsky-embed/dist/bsky-embed.es.js",
+ type: "module",
+ },
+ ],
+ },
+ },
+ vue: {
+ compilerOptions: {
+ isCustomElement: (tag: string) => tag === "bsky-embed",
+ },
+ },
}),
);
diff --git a/apps/netlogo/package.json b/apps/netlogo/package.json
index 36b659f1..3e17cb7d 100644
--- a/apps/netlogo/package.json
+++ b/apps/netlogo/package.json
@@ -25,18 +25,6 @@
"turbo:postinstall": "nuxt prepare"
},
"dependencies": {
- "nuxt": "^4.1.2",
- "nuxt-gtag": "4.1.0",
- "nuxt-link-checker": "4.3.6",
- "nuxt-og-image": "^5.1.12",
- "nuxt-svgo": "4.2.6",
- "radix-vue": "1.9.17",
- "reka-ui": "^2.6.0",
- "tailwind-merge": "^3.3.1",
- "tailwindcss": "^4.1.18",
- "tw-animate-css": "^1.4.0",
- "vue": "^3.5.24",
- "vue-router": "^4.6.3",
"@nuxt/content": "^3.7.1",
"@nuxt/eslint": "1.10.0",
"@nuxt/fonts": "0.12.1",
@@ -49,20 +37,34 @@
"@repo/markdown": "0.0.0",
"@repo/netlogo-docs": "0.0.0",
"@repo/nuxt-content-assets": "1.5.0",
+ "@repo/nuxt-core": "0.0.0",
"@repo/tailwind-config": "0.0.0",
"@repo/template": "0.0.0",
"@repo/typescript-config": "0.0.0",
"@repo/utils": "0.0.0",
"@repo/vue-ui": "1.0.0",
- "@repo/nuxt-core": "0.0.0"
+ "graphql": "^16.10.0",
+ "graphql-request": "^7.1.2",
+ "nuxt": "^4.1.2",
+ "nuxt-gtag": "4.1.0",
+ "nuxt-link-checker": "4.3.6",
+ "nuxt-og-image": "^5.1.12",
+ "nuxt-svgo": "4.2.6",
+ "radix-vue": "1.9.17",
+ "reka-ui": "^2.6.0",
+ "tailwind-merge": "^3.3.1",
+ "tailwindcss": "^4.1.18",
+ "tw-animate-css": "^1.4.0",
+ "vue": "^3.5.24",
+ "vue-router": "^4.6.3"
},
"devDependencies": {
"@nuxt/kit": "^4.2.1",
"@repo/nuxt-content-assets": "1.5.0",
+ "eslint": "^9.31.0",
+ "sass": "^1.93.3",
"turbo-meta-utilities": "^1.0.1",
"typescript": "^5.4.0",
- "zod": "^4.1.12",
- "sass": "^1.93.3",
- "eslint": "^9.31.0"
+ "zod": "^4.1.12"
}
}
diff --git a/apps/netlogo/public/favicon.ico b/apps/netlogo/public/favicon.ico
index 18993ad9..2fc95425 100644
Binary files a/apps/netlogo/public/favicon.ico and b/apps/netlogo/public/favicon.ico differ
diff --git a/packages/vue-ui/assets/brands/NetLogoOrgLogo.svg b/packages/vue-ui/assets/brands/NetLogoOrgLogo.svg
new file mode 100644
index 00000000..ec1ab9ac
--- /dev/null
+++ b/packages/vue-ui/assets/brands/NetLogoOrgLogo.svg
@@ -0,0 +1,10 @@
+
diff --git a/packages/vue-ui/assets/brands/intro-turtles.svg b/packages/vue-ui/assets/brands/intro-turtles.svg
new file mode 100644
index 00000000..1b6c43b1
--- /dev/null
+++ b/packages/vue-ui/assets/brands/intro-turtles.svg
@@ -0,0 +1,26 @@
+
diff --git a/packages/vue-ui/assets/brands/logo-text.svg b/packages/vue-ui/assets/brands/logo-text.svg
new file mode 100644
index 00000000..1e33867c
--- /dev/null
+++ b/packages/vue-ui/assets/brands/logo-text.svg
@@ -0,0 +1,4 @@
+
diff --git a/yarn.lock b/yarn.lock
index fa90e16b..dd5d73a5 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1167,11 +1167,23 @@
dependencies:
eslint-visitor-keys "^3.4.3"
+"@eslint-community/eslint-utils@^4.9.1":
+ version "4.9.1"
+ resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz#4e90af67bc51ddee6cdef5284edf572ec376b595"
+ integrity sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==
+ dependencies:
+ eslint-visitor-keys "^3.4.3"
+
"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.11.0", "@eslint-community/regexpp@^4.12.1", "@eslint-community/regexpp@^4.8.0":
version "4.12.1"
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0"
integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==
+"@eslint-community/regexpp@^4.12.2", "@eslint-community/regexpp@^4.5.1":
+ version "4.12.2"
+ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b"
+ integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==
+
"@eslint/compat@^1.2.5":
version "1.4.0"
resolved "https://registry.yarnpkg.com/@eslint/compat/-/compat-1.4.0.tgz#6d6b2f198ddfecda3d4cbd5a6e9324fca54f2dfb"
@@ -1330,6 +1342,11 @@
"@floating-ui/utils" "^0.2.10"
vue-demi ">=0.13.0"
+"@graphql-typed-document-node/core@^3.2.0":
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.2.0.tgz#5f3d96ec6b2354ad6d8a28bf216a1d97b5426861"
+ integrity sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==
+
"@humanfs/core@^0.19.1":
version "0.19.1"
resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77"
@@ -2209,7 +2226,7 @@
ufo "^1.6.1"
youch "^4.1.0-beta.11"
-"@nuxt/content@3.7.1", "@nuxt/content@^3.7.1":
+"@nuxt/content@^3.7.1":
version "3.7.1"
resolved "https://registry.yarnpkg.com/@nuxt/content/-/content-3.7.1.tgz#0b1e61a5ffb37c24033f7ab257811d3d5c8c7062"
integrity sha512-QjUyxvC3IhLca9gZuGGZslL+L2PkxFwiPD/fbXN1X0EuUfbe17H/AMt53ZRezWrxs6MOaLbyWLHzcllcjEB/jQ==
@@ -4759,7 +4776,7 @@
expect "^29.0.0"
pretty-format "^29.0.0"
-"@types/json-schema@^7.0.15":
+"@types/json-schema@^7.0.12", "@types/json-schema@^7.0.15":
version "7.0.15"
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"
integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
@@ -4847,6 +4864,11 @@
resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975"
integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==
+"@types/semver@^7.5.0":
+ version "7.7.1"
+ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.7.1.tgz#3ce3af1a5524ef327d2da9e4fd8b6d95c8d70528"
+ integrity sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==
+
"@types/stack-utils@^2.0.0":
version "2.0.3"
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8"
@@ -4867,6 +4889,11 @@
resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.11.tgz#11af57b127e32487774841f7a4e54eab166d03c4"
integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==
+"@types/web-bluetooth@^0.0.20":
+ version "0.0.20"
+ resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz#f066abfcd1cbe66267cdbbf0de010d8a41b41597"
+ integrity sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==
+
"@types/web-bluetooth@^0.0.21":
version "0.0.21"
resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz#525433c784aed9b457aaa0ee3d92aeb71f346b63"
@@ -4898,7 +4925,38 @@
dependencies:
"@types/node" "*"
-"@typescript-eslint/eslint-plugin@8.45.0", "@typescript-eslint/eslint-plugin@^6.5.0", "@typescript-eslint/eslint-plugin@^8.45.0", "@typescript-eslint/eslint-plugin@^8.46.2":
+"@typescript-eslint/eslint-plugin@8.53.0", "@typescript-eslint/eslint-plugin@^8.46.2":
+ version "8.53.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.53.0.tgz#afb966c66a2fdc6158cf81118204a971a36d0fc5"
+ integrity sha512-eEXsVvLPu8Z4PkFibtuFJLJOTAV/nPdgtSjkGoPpddpFk3/ym2oy97jynY6ic2m6+nc5M8SE1e9v/mHKsulcJg==
+ dependencies:
+ "@eslint-community/regexpp" "^4.12.2"
+ "@typescript-eslint/scope-manager" "8.53.0"
+ "@typescript-eslint/type-utils" "8.53.0"
+ "@typescript-eslint/utils" "8.53.0"
+ "@typescript-eslint/visitor-keys" "8.53.0"
+ ignore "^7.0.5"
+ natural-compare "^1.4.0"
+ ts-api-utils "^2.4.0"
+
+"@typescript-eslint/eslint-plugin@^6.5.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3"
+ integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==
+ dependencies:
+ "@eslint-community/regexpp" "^4.5.1"
+ "@typescript-eslint/scope-manager" "6.21.0"
+ "@typescript-eslint/type-utils" "6.21.0"
+ "@typescript-eslint/utils" "6.21.0"
+ "@typescript-eslint/visitor-keys" "6.21.0"
+ debug "^4.3.4"
+ graphemer "^1.4.0"
+ ignore "^5.2.4"
+ natural-compare "^1.4.0"
+ semver "^7.5.4"
+ ts-api-utils "^1.0.1"
+
+"@typescript-eslint/eslint-plugin@^8.45.0":
version "8.45.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.45.0.tgz#9f251d4e85ec5089e7cccb09257ce93dbf0d7744"
integrity sha512-HC3y9CVuevvWCl/oyZuI47dOeDF9ztdMEfMH8/DW/Mhwa9cCLnK1oD7JoTVGW/u7kFzNZUKUoyJEqkaJh5y3Wg==
@@ -4913,15 +4971,26 @@
natural-compare "^1.4.0"
ts-api-utils "^2.1.0"
-"@typescript-eslint/parser@8.45.0", "@typescript-eslint/parser@^6.5.0", "@typescript-eslint/parser@^8.46.2":
- version "8.45.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.45.0.tgz#571660c98824aefb4a6ec3b3766655d1348520a4"
- integrity sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ==
+"@typescript-eslint/parser@8.53.0", "@typescript-eslint/parser@^8.46.2":
+ version "8.53.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.53.0.tgz#d8bed6f12dc74e03751e5f947510ff2b165990c6"
+ integrity sha512-npiaib8XzbjtzS2N4HlqPvlpxpmZ14FjSJrteZpPxGUaYPlvhzlzUZ4mZyABo0EFrOWnvyd0Xxroq//hKhtAWg==
dependencies:
- "@typescript-eslint/scope-manager" "8.45.0"
- "@typescript-eslint/types" "8.45.0"
- "@typescript-eslint/typescript-estree" "8.45.0"
- "@typescript-eslint/visitor-keys" "8.45.0"
+ "@typescript-eslint/scope-manager" "8.53.0"
+ "@typescript-eslint/types" "8.53.0"
+ "@typescript-eslint/typescript-estree" "8.53.0"
+ "@typescript-eslint/visitor-keys" "8.53.0"
+ debug "^4.4.3"
+
+"@typescript-eslint/parser@^6.5.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b"
+ integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==
+ dependencies:
+ "@typescript-eslint/scope-manager" "6.21.0"
+ "@typescript-eslint/types" "6.21.0"
+ "@typescript-eslint/typescript-estree" "6.21.0"
+ "@typescript-eslint/visitor-keys" "6.21.0"
debug "^4.3.4"
"@typescript-eslint/project-service@8.45.0":
@@ -4933,6 +5002,23 @@
"@typescript-eslint/types" "^8.45.0"
debug "^4.3.4"
+"@typescript-eslint/project-service@8.53.0":
+ version "8.53.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.53.0.tgz#327c67c61c16a1c8b12a440b0779b41eb77cc7df"
+ integrity sha512-Bl6Gdr7NqkqIP5yP9z1JU///Nmes4Eose6L1HwpuVHwScgDPPuEWbUVhvlZmb8hy0vX9syLk5EGNL700WcBlbg==
+ dependencies:
+ "@typescript-eslint/tsconfig-utils" "^8.53.0"
+ "@typescript-eslint/types" "^8.53.0"
+ debug "^4.4.3"
+
+"@typescript-eslint/scope-manager@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1"
+ integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==
+ dependencies:
+ "@typescript-eslint/types" "6.21.0"
+ "@typescript-eslint/visitor-keys" "6.21.0"
+
"@typescript-eslint/scope-manager@8.45.0":
version "8.45.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.45.0.tgz#59615ba506a9e3479d1efb0d09d6ab52f2a19142"
@@ -4941,16 +5027,39 @@
"@typescript-eslint/types" "8.45.0"
"@typescript-eslint/visitor-keys" "8.45.0"
+"@typescript-eslint/scope-manager@8.53.0":
+ version "8.53.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.53.0.tgz#f922fcbf0d42e72f065297af31779ccf19de9a97"
+ integrity sha512-kWNj3l01eOGSdVBnfAF2K1BTh06WS0Yet6JUgb9Cmkqaz3Jlu0fdVUjj9UI8gPidBWSMqDIglmEXifSgDT/D0g==
+ dependencies:
+ "@typescript-eslint/types" "8.53.0"
+ "@typescript-eslint/visitor-keys" "8.53.0"
+
"@typescript-eslint/tsconfig-utils@8.45.0":
version "8.45.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.45.0.tgz#63d38282790a2566c571bad423e7c1cad1f3d64c"
integrity sha512-aFdr+c37sc+jqNMGhH+ajxPXwjv9UtFZk79k8pLoJ6p4y0snmYpPA52GuWHgt2ZF4gRRW6odsEj41uZLojDt5w==
+"@typescript-eslint/tsconfig-utils@8.53.0", "@typescript-eslint/tsconfig-utils@^8.53.0":
+ version "8.53.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.53.0.tgz#105279d7969a7abdc8345cc9c57cff83cf910f8f"
+ integrity sha512-K6Sc0R5GIG6dNoPdOooQ+KtvT5KCKAvTcY8h2rIuul19vxH5OTQk7ArKkd4yTzkw66WnNY0kPPzzcmWA+XRmiA==
+
"@typescript-eslint/tsconfig-utils@^8.45.0":
version "8.50.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.50.1.tgz#ee4894bec14ef13db305d0323b14b109d996f116"
integrity sha512-ooHmotT/lCWLXi55G4mvaUF60aJa012QzvLK0Y+Mp4WdSt17QhMhWOaBWeGTFVkb2gDgBe19Cxy1elPXylslDw==
+"@typescript-eslint/type-utils@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e"
+ integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==
+ dependencies:
+ "@typescript-eslint/typescript-estree" "6.21.0"
+ "@typescript-eslint/utils" "6.21.0"
+ debug "^4.3.4"
+ ts-api-utils "^1.0.1"
+
"@typescript-eslint/type-utils@8.45.0":
version "8.45.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.45.0.tgz#04004bdf2598844faa29fb936fb6b0ee10d6d3f3"
@@ -4962,11 +5071,46 @@
debug "^4.3.4"
ts-api-utils "^2.1.0"
-"@typescript-eslint/types@8.45.0", "@typescript-eslint/types@^8.34.0", "@typescript-eslint/types@^8.35.0", "@typescript-eslint/types@^8.38.0", "@typescript-eslint/types@^8.45.0", "@typescript-eslint/types@^8.46.0", "@typescript-eslint/types@^8.46.2", "@typescript-eslint/types@^8.47.0":
+"@typescript-eslint/type-utils@8.53.0":
+ version "8.53.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.53.0.tgz#81a0de5c01fc68f6df0591d03cd8226bda01c91f"
+ integrity sha512-BBAUhlx7g4SmcLhn8cnbxoxtmS7hcq39xKCgiutL3oNx1TaIp+cny51s8ewnKMpVUKQUGb41RAUWZ9kxYdovuw==
+ dependencies:
+ "@typescript-eslint/types" "8.53.0"
+ "@typescript-eslint/typescript-estree" "8.53.0"
+ "@typescript-eslint/utils" "8.53.0"
+ debug "^4.4.3"
+ ts-api-utils "^2.4.0"
+
+"@typescript-eslint/types@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d"
+ integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==
+
+"@typescript-eslint/types@8.45.0", "@typescript-eslint/types@^8.34.0", "@typescript-eslint/types@^8.35.0", "@typescript-eslint/types@^8.38.0", "@typescript-eslint/types@^8.45.0":
version "8.45.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.45.0.tgz#fc01cd2a4690b9713b02f895e82fb43f7d960684"
integrity sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA==
+"@typescript-eslint/types@8.53.0", "@typescript-eslint/types@^8.46.0", "@typescript-eslint/types@^8.46.2", "@typescript-eslint/types@^8.47.0", "@typescript-eslint/types@^8.53.0":
+ version "8.53.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.53.0.tgz#1adcad3fa32bc2c4cbf3785ba07a5e3151819efb"
+ integrity sha512-Bmh9KX31Vlxa13+PqPvt4RzKRN1XORYSLlAE+sO1i28NkisGbTtSLFVB3l7PWdHtR3E0mVMuC7JilWJ99m2HxQ==
+
+"@typescript-eslint/typescript-estree@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46"
+ integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==
+ dependencies:
+ "@typescript-eslint/types" "6.21.0"
+ "@typescript-eslint/visitor-keys" "6.21.0"
+ debug "^4.3.4"
+ globby "^11.1.0"
+ is-glob "^4.0.3"
+ minimatch "9.0.3"
+ semver "^7.5.4"
+ ts-api-utils "^1.0.1"
+
"@typescript-eslint/typescript-estree@8.45.0":
version "8.45.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.45.0.tgz#3498500f109a89b104d2770497c707e56dfe062d"
@@ -4983,7 +5127,35 @@
semver "^7.6.0"
ts-api-utils "^2.1.0"
-"@typescript-eslint/utils@8.45.0", "@typescript-eslint/utils@^8.38.0", "@typescript-eslint/utils@^8.46.2":
+"@typescript-eslint/typescript-estree@8.53.0":
+ version "8.53.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.53.0.tgz#7805b46b7a8ce97e91b7bb56fc8b1ba26ca8ef52"
+ integrity sha512-pw0c0Gdo7Z4xOG987u3nJ8akL9093yEEKv8QTJ+Bhkghj1xyj8cgPaavlr9rq8h7+s6plUJ4QJYw2gCZodqmGw==
+ dependencies:
+ "@typescript-eslint/project-service" "8.53.0"
+ "@typescript-eslint/tsconfig-utils" "8.53.0"
+ "@typescript-eslint/types" "8.53.0"
+ "@typescript-eslint/visitor-keys" "8.53.0"
+ debug "^4.4.3"
+ minimatch "^9.0.5"
+ semver "^7.7.3"
+ tinyglobby "^0.2.15"
+ ts-api-utils "^2.4.0"
+
+"@typescript-eslint/utils@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134"
+ integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.4.0"
+ "@types/json-schema" "^7.0.12"
+ "@types/semver" "^7.5.0"
+ "@typescript-eslint/scope-manager" "6.21.0"
+ "@typescript-eslint/types" "6.21.0"
+ "@typescript-eslint/typescript-estree" "6.21.0"
+ semver "^7.5.4"
+
+"@typescript-eslint/utils@8.45.0", "@typescript-eslint/utils@^8.38.0":
version "8.45.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.45.0.tgz#6e68e92d99019fdf56018d0e6664c76a70470c95"
integrity sha512-bxi1ht+tLYg4+XV2knz/F7RVhU0k6VrSMc9sb8DQ6fyCTrGQLHfo7lDtN0QJjZjKkLA2ThrKuCdHEvLReqtIGg==
@@ -4993,6 +5165,24 @@
"@typescript-eslint/types" "8.45.0"
"@typescript-eslint/typescript-estree" "8.45.0"
+"@typescript-eslint/utils@8.53.0", "@typescript-eslint/utils@^8.46.2":
+ version "8.53.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.53.0.tgz#bf0a4e2edaf1afc9abce209fc02f8cab0b74af13"
+ integrity sha512-XDY4mXTez3Z1iRDI5mbRhH4DFSt46oaIFsLg+Zn97+sYrXACziXSQcSelMybnVZ5pa1P6xYkPr5cMJyunM1ZDA==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.9.1"
+ "@typescript-eslint/scope-manager" "8.53.0"
+ "@typescript-eslint/types" "8.53.0"
+ "@typescript-eslint/typescript-estree" "8.53.0"
+
+"@typescript-eslint/visitor-keys@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47"
+ integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==
+ dependencies:
+ "@typescript-eslint/types" "6.21.0"
+ eslint-visitor-keys "^3.4.1"
+
"@typescript-eslint/visitor-keys@8.45.0":
version "8.45.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.45.0.tgz#4e3bcc55da64ac61069ebfe62ca240567ac7d784"
@@ -5001,6 +5191,14 @@
"@typescript-eslint/types" "8.45.0"
eslint-visitor-keys "^4.2.1"
+"@typescript-eslint/visitor-keys@8.53.0":
+ version "8.53.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.53.0.tgz#9a785664ddae7e3f7e570ad8166e48dbc9c6cf02"
+ integrity sha512-LZ2NqIHFhvFwxG0qZeLL9DvdNAHPGCY5dIRwBhyYeU+LfLhcStE1ImjsuTG/WaVh3XysGaeLW8Rqq7cGkPCFvw==
+ dependencies:
+ "@typescript-eslint/types" "8.53.0"
+ eslint-visitor-keys "^4.2.1"
+
"@ungap/structured-clone@^1.0.0":
version "1.3.0"
resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8"
@@ -5608,12 +5806,31 @@
"@vue/compiler-ssr" "3.5.24"
"@vue/shared" "3.5.24"
-"@vue/shared@3.5.22", "@vue/shared@3.5.24", "@vue/shared@3.5.26", "@vue/shared@^3.5.0", "@vue/shared@^3.5.18", "@vue/shared@^3.5.21", "@vue/shared@^3.5.23", "@vue/shared@^3.5.25":
+"@vue/shared@3.5.22":
+ version "3.5.22"
+ resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.22.tgz#9d56a1644a3becb8af1e34655928b0e288d827f8"
+ integrity sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==
+
+"@vue/shared@3.5.24", "@vue/shared@^3.5.0", "@vue/shared@^3.5.18", "@vue/shared@^3.5.21", "@vue/shared@^3.5.23":
version "3.5.24"
resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.24.tgz#45ea9e6e037e53cfb8141ffa6bcad75b8be11e9c"
integrity sha512-9cwHL2EsJBdi8NY22pngYYWzkTDhld6fAD6jlaeloNGciNSJL6bLpbxVgXl96X00Jtc6YWQv96YA/0sxex/k1A==
-"@vueuse/core@13.9.0", "@vueuse/core@14.1.0", "@vueuse/core@^10.11.0", "@vueuse/core@^10.8.0", "@vueuse/core@^12.5.0", "@vueuse/core@^13.9.0", "@vueuse/core@^14.1.0":
+"@vue/shared@3.5.26", "@vue/shared@^3.5.25":
+ version "3.5.26"
+ resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.26.tgz#1e02ef2d64aced818cd31d81ce5175711dc90a9f"
+ integrity sha512-7Z6/y3uFI5PRoKeorTOSXKcDj0MSasfNNltcslbFrPpcw6aXRUALq4IfJlaTRspiWIUOEZbrpM+iQGmCOiWe4A==
+
+"@vueuse/core@13.9.0", "@vueuse/core@^13.9.0":
+ version "13.9.0"
+ resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-13.9.0.tgz#051aeff47a259e9e4d7d0cc3e54879817b0cbcad"
+ integrity sha512-ts3regBQyURfCE2BcytLqzm8+MmLlo5Ln/KLoxDVcsZ2gzIwVNnQpQOL/UKV8alUqjSZOlpFZcRNsLRqj+OzyA==
+ dependencies:
+ "@types/web-bluetooth" "^0.0.21"
+ "@vueuse/metadata" "13.9.0"
+ "@vueuse/shared" "13.9.0"
+
+"@vueuse/core@14.1.0", "@vueuse/core@^14.1.0":
version "14.1.0"
resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-14.1.0.tgz#274e98e591a505333b7dfb2bcaf7b4530a10b9c9"
integrity sha512-rgBinKs07hAYyPF834mDTigH7BtPqvZ3Pryuzt1SD/lg5wEcWqvwzXXYGEDb2/cP0Sj5zSvHl3WkmMELr5kfWw==
@@ -5622,6 +5839,26 @@
"@vueuse/metadata" "14.1.0"
"@vueuse/shared" "14.1.0"
+"@vueuse/core@^10.11.0", "@vueuse/core@^10.8.0":
+ version "10.11.1"
+ resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-10.11.1.tgz#15d2c0b6448d2212235b23a7ba29c27173e0c2c6"
+ integrity sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==
+ dependencies:
+ "@types/web-bluetooth" "^0.0.20"
+ "@vueuse/metadata" "10.11.1"
+ "@vueuse/shared" "10.11.1"
+ vue-demi ">=0.14.8"
+
+"@vueuse/core@^12.5.0":
+ version "12.8.2"
+ resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-12.8.2.tgz#007c6dd29a7d1f6933e916e7a2f8ef3c3f968eaa"
+ integrity sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==
+ dependencies:
+ "@types/web-bluetooth" "^0.0.21"
+ "@vueuse/metadata" "12.8.2"
+ "@vueuse/shared" "12.8.2"
+ vue "^3.5.13"
+
"@vueuse/integrations@^13.9.0":
version "13.9.0"
resolved "https://registry.yarnpkg.com/@vueuse/integrations/-/integrations-13.9.0.tgz#1bd1d77093a327321cca00e2bbf5da7b18aa6b43"
@@ -5638,35 +5875,50 @@
"@vueuse/core" "14.1.0"
"@vueuse/shared" "14.1.0"
-"@vueuse/metadata@14.1.0":
- version "14.1.0"
- resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-14.1.0.tgz#70fc2e94775e4a07369f11f86f6f0a465b04a381"
- integrity sha512-7hK4g015rWn2PhKcZ99NyT+ZD9sbwm7SGvp7k+k+rKGWnLjS/oQozoIZzWfCewSUeBmnJkIb+CNr7Zc/EyRnnA==
+"@vueuse/metadata@10.11.1":
+ version "10.11.1"
+ resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-10.11.1.tgz#209db7bb5915aa172a87510b6de2ca01cadbd2a7"
+ integrity sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==
-"@vueuse/shared@13.9.0":
+"@vueuse/metadata@12.8.2":
+ version "12.8.2"
+ resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-12.8.2.tgz#6cb3a4e97cdcf528329eebc1bda73cd7f64318d3"
+ integrity sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==
+
+"@vueuse/metadata@13.9.0":
version "13.9.0"
- resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-13.9.0.tgz#7168b4ed647e625b05eb4e7e80fe8aabd00e3923"
- integrity sha512-e89uuTLMh0U5cZ9iDpEI2senqPGfbPRTHM/0AaQkcxnpqjkZqDYP8rpfm7edOz8s+pOCOROEy1PIveSW8+fL5g==
+ resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-13.9.0.tgz#57c738d99661c33347080c0bc4cd11160e0d0881"
+ integrity sha512-1AFRvuiGphfF7yWixZa0KwjYH8ulyjDCC0aFgrGRz8+P4kvDFSdXLVfTk5xAN9wEuD1J6z4/myMoYbnHoX07zg==
-"@vueuse/shared@14.1.0":
+"@vueuse/metadata@14.1.0":
version "14.1.0"
- resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-14.1.0.tgz#49b2face86a9c0c52e20eaf4c732a0223276c11f"
- integrity sha512-EcKxtYvn6gx1F8z9J5/rsg3+lTQnvOruQd8fUecW99DCK04BkWD7z5KQ/wTAx+DazyoEE9dJt/zV8OIEQbM6kw==
+ resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-14.1.0.tgz#70fc2e94775e4a07369f11f86f6f0a465b04a381"
+ integrity sha512-7hK4g015rWn2PhKcZ99NyT+ZD9sbwm7SGvp7k+k+rKGWnLjS/oQozoIZzWfCewSUeBmnJkIb+CNr7Zc/EyRnnA==
-"@vueuse/shared@^10.11.0":
+"@vueuse/shared@10.11.1", "@vueuse/shared@^10.11.0":
version "10.11.1"
resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-10.11.1.tgz#62b84e3118ae6e1f3ff38f4fbe71b0c5d0f10938"
integrity sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==
dependencies:
vue-demi ">=0.14.8"
-"@vueuse/shared@^12.5.0":
+"@vueuse/shared@12.8.2", "@vueuse/shared@^12.5.0":
version "12.8.2"
resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-12.8.2.tgz#b9e4611d0603629c8e151f982459da394e22f930"
integrity sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==
dependencies:
vue "^3.5.13"
+"@vueuse/shared@13.9.0":
+ version "13.9.0"
+ resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-13.9.0.tgz#7168b4ed647e625b05eb4e7e80fe8aabd00e3923"
+ integrity sha512-e89uuTLMh0U5cZ9iDpEI2senqPGfbPRTHM/0AaQkcxnpqjkZqDYP8rpfm7edOz8s+pOCOROEy1PIveSW8+fL5g==
+
+"@vueuse/shared@14.1.0":
+ version "14.1.0"
+ resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-14.1.0.tgz#49b2face86a9c0c52e20eaf4c732a0223276c11f"
+ integrity sha512-EcKxtYvn6gx1F8z9J5/rsg3+lTQnvOruQd8fUecW99DCK04BkWD7z5KQ/wTAx+DazyoEE9dJt/zV8OIEQbM6kw==
+
"@webcontainer/env@^1.1.1":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@webcontainer/env/-/env-1.1.1.tgz#23021b2bb24befeeef53dba8996d1886b7016515"
@@ -6206,7 +6458,7 @@ bcrypt-pbkdf@^1.0.0:
dependencies:
tweetnacl "^0.14.3"
-better-sqlite3@12.4.1, better-sqlite3@^12.4.1:
+better-sqlite3@^12.4.1:
version "12.4.1"
resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-12.4.1.tgz#f78df6c80530d1a0b750b538033e6199b7d30d26"
integrity sha512-3yVdyZhklTiNrtg+4WqHpJpFDd+WHTg2oM7UcR80GqL05AOV0xEJzc6qNvFYoEtE+hRp1n9MpN6/+4yhlGkDXQ==
@@ -9205,7 +9457,7 @@ globalthis@^1.0.4:
define-properties "^1.2.1"
gopd "^1.0.1"
-globby@^11.0.4:
+globby@^11.0.4, globby@^11.1.0:
version "11.1.0"
resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
@@ -9282,6 +9534,18 @@ graphemer@^1.4.0:
resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
+graphql-request@^7.1.2:
+ version "7.4.0"
+ resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-7.4.0.tgz#97a1fc871e79f682d816963446ac6b7f99c963f9"
+ integrity sha512-xfr+zFb/QYbs4l4ty0dltqiXIp07U6sl+tOKAb0t50/EnQek6CVVBLjETXi+FghElytvgaAWtIOt3EV7zLzIAQ==
+ dependencies:
+ "@graphql-typed-document-node/core" "^3.2.0"
+
+graphql@^16.10.0:
+ version "16.12.0"
+ resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.12.0.tgz#28cc2462435b1ac3fdc6976d030cef83a0c13ac7"
+ integrity sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==
+
gzip-size@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-7.0.0.tgz#9f9644251f15bc78460fccef4055ae5a5562ac60"
@@ -10839,16 +11103,11 @@ jsdom@^25.0.0:
ws "^8.18.0"
xml-name-validator "^5.0.0"
-jsesc@^3.0.2, jsesc@^3.1.0:
+jsesc@^3.0.2, jsesc@^3.1.0, jsesc@~3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d"
integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==
-jsesc@~3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e"
- integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==
-
json-buffer@3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
@@ -12073,6 +12332,13 @@ minimark@^0.2.0:
resolved "https://registry.yarnpkg.com/minimark/-/minimark-0.2.0.tgz#bb18fb25cfaf1c9cceccf1633c07852c17b427f9"
integrity sha512-AmtWU9pO0C2/3AM2pikaVhJ//8E5rOpJ7+ioFQfjIq+wCsBeuZoxPd97hBFZ9qrI7DMHZudwGH3r8A7BMnsIew==
+minimatch@9.0.3:
+ version "9.0.3"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825"
+ integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
+ dependencies:
+ brace-expansion "^2.0.1"
+
minimatch@^10.0.1, minimatch@^10.0.3, "minimatch@^9.0.3 || ^10.0.1":
version "10.0.3"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.3.tgz#cf7a0314a16c4d9ab73a7730a0e8e3c3502d47aa"
@@ -12101,7 +12367,7 @@ minimatch@^5.0.1, minimatch@^5.1.0:
dependencies:
brace-expansion "^2.0.1"
-minimatch@^9.0.3, minimatch@^9.0.4:
+minimatch@^9.0.3, minimatch@^9.0.4, minimatch@^9.0.5:
version "9.0.5"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5"
integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==
@@ -12759,7 +13025,7 @@ nuxt-svgo@4.2.6:
mini-svg-data-uri "^1.4.4"
svgo "3.0.2"
-nuxt@4.1.2, nuxt@^4.1.2:
+nuxt@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/nuxt/-/nuxt-4.1.2.tgz#0d3b57a0a6a672ab21b7e3f3f2a0481d50d5902e"
integrity sha512-g5mwszCZT4ZeGJm83nxoZvtvZoAEaY65VDdn7p7UgznePbRaEJJ1KS1OIld4FPVkoDZ8TEVuDNqI9gUn12Exvg==
@@ -13858,7 +14124,7 @@ prettier-plugin-tailwindcss@^0.6.11:
resolved "https://registry.yarnpkg.com/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.14.tgz#06701a580f7104c034ae3b699dbd17a80d67f0cd"
integrity sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg==
-prettier@3.6.2, prettier@^3.2.5, prettier@^3.6.2:
+prettier@^3.2.5, prettier@^3.6.2:
version "3.6.2"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.6.2.tgz#ccda02a1003ebbb2bfda6f83a074978f608b9393"
integrity sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==
@@ -14422,12 +14688,12 @@ regexp.prototype.flags@^1.5.3, regexp.prototype.flags@^1.5.4:
gopd "^1.2.0"
set-function-name "^2.0.2"
-regjsparser@^0.12.0, regjsparser@^0.13.0:
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.12.0.tgz#0e846df6c6530586429377de56e0475583b088dc"
- integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==
+regjsparser@^0.13.0:
+ version "0.13.0"
+ resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.13.0.tgz#01f8351335cf7898d43686bc74d2dd71c847ecc0"
+ integrity sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==
dependencies:
- jsesc "~3.0.2"
+ jsesc "~3.1.0"
rehype-autolink-headings@^7.1.0:
version "7.1.0"
@@ -14509,7 +14775,39 @@ rehype-sort-attributes@^5.0.1:
"@types/hast" "^3.0.0"
unist-util-visit "^5.0.0"
-reka-ui@2.6.0, reka-ui@2.6.1, reka-ui@^2.0.0, reka-ui@^2.6.0:
+reka-ui@2.6.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/reka-ui/-/reka-ui-2.6.0.tgz#3b96712744decb9da8f4b1af79d16a499c84b826"
+ integrity sha512-NrGMKrABD97l890mFS3TNUzB0BLUfbL3hh0NjcJRIUSUljb288bx3Mzo31nOyUcdiiW0HqFGXJwyCBh9cWgb0w==
+ dependencies:
+ "@floating-ui/dom" "^1.6.13"
+ "@floating-ui/vue" "^1.1.6"
+ "@internationalized/date" "^3.5.0"
+ "@internationalized/number" "^3.5.0"
+ "@tanstack/vue-virtual" "^3.12.0"
+ "@vueuse/core" "^12.5.0"
+ "@vueuse/shared" "^12.5.0"
+ aria-hidden "^1.2.4"
+ defu "^6.1.4"
+ ohash "^2.0.11"
+
+reka-ui@2.6.1:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/reka-ui/-/reka-ui-2.6.1.tgz#08f6b8a8ee774887b6bcde3d8ea54b608acfe82c"
+ integrity sha512-XK7cJDQoNuGXfCNzBBo/81Yg/OgjPwvbabnlzXG2VsdSgNsT6iIkuPBPr+C0Shs+3bb0x0lbPvgQAhMSCKm5Ww==
+ dependencies:
+ "@floating-ui/dom" "^1.6.13"
+ "@floating-ui/vue" "^1.1.6"
+ "@internationalized/date" "^3.5.0"
+ "@internationalized/number" "^3.5.0"
+ "@tanstack/vue-virtual" "^3.12.0"
+ "@vueuse/core" "^12.5.0"
+ "@vueuse/shared" "^12.5.0"
+ aria-hidden "^1.2.4"
+ defu "^6.1.4"
+ ohash "^2.0.11"
+
+reka-ui@^2.0.0, reka-ui@^2.6.0:
version "2.7.0"
resolved "https://registry.yarnpkg.com/reka-ui/-/reka-ui-2.7.0.tgz#906697e744e9a9682f89372a46ef384d4500eae7"
integrity sha512-m+XmxQN2xtFzBP3OAdIafKq7C8OETo2fqfxcIIxYmNN2Ch3r5oAf6yEYCIJg5tL/yJU2mHqF70dCCekUkrAnXA==
@@ -15952,7 +16250,12 @@ tailwindcss-animate@^1.0.7:
resolved "https://registry.yarnpkg.com/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz#318b692c4c42676cc9e67b19b78775742388bef4"
integrity sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==
-tailwindcss@4.1.13, tailwindcss@4.1.18, tailwindcss@^4.1.17, tailwindcss@^4.1.18:
+tailwindcss@4.1.13:
+ version "4.1.13"
+ resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-4.1.13.tgz#ade3471fdfd0a2a86da3a679bfc10c623e645b09"
+ integrity sha512-i+zidfmTqtwquj4hMEwdjshYYgMbOrPzb9a0M3ZgNa0JMoZeFC6bxZvO8yr8ozS6ix2SDz0+mvryPeBs2TFE+w==
+
+tailwindcss@4.1.18, tailwindcss@^4.1.17, tailwindcss@^4.1.18:
version "4.1.18"
resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-4.1.18.tgz#f488ba47853abdb5354daf9679d3e7791fc4f4e3"
integrity sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==
@@ -16211,11 +16514,21 @@ trough@^2.0.0:
resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f"
integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==
+ts-api-utils@^1.0.1:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064"
+ integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==
+
ts-api-utils@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91"
integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==
+ts-api-utils@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.4.0.tgz#2690579f96d2790253bdcf1ca35d569ad78f9ad8"
+ integrity sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==
+
ts-jest@^29.1.2:
version "29.4.4"
resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.4.4.tgz#fc6fefe28652ed81b8e1381ef8391901d9f81417"
@@ -16434,15 +16747,15 @@ typedarray@^0.0.6:
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
-typescript-eslint@8.45.0, typescript-eslint@^8.46.2:
- version "8.45.0"
- resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.45.0.tgz#98ab164234dc04c112747ec0a4ae29a94efe123b"
- integrity sha512-qzDmZw/Z5beNLUrXfd0HIW6MzIaAV5WNDxmMs9/3ojGOpYavofgNAAD/nC6tGV2PczIi0iw8vot2eAe/sBn7zg==
+typescript-eslint@^8.46.2:
+ version "8.53.0"
+ resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.53.0.tgz#c35ca6403cd381753aee325f67e10d6101d55f04"
+ integrity sha512-xHURCQNxZ1dsWn0sdOaOfCSQG0HKeqSj9OexIxrz6ypU6wHYOdX2I3D2b8s8wFSsSOYJb+6q283cLiLlkEsBYw==
dependencies:
- "@typescript-eslint/eslint-plugin" "8.45.0"
- "@typescript-eslint/parser" "8.45.0"
- "@typescript-eslint/typescript-estree" "8.45.0"
- "@typescript-eslint/utils" "8.45.0"
+ "@typescript-eslint/eslint-plugin" "8.53.0"
+ "@typescript-eslint/parser" "8.53.0"
+ "@typescript-eslint/typescript-estree" "8.53.0"
+ "@typescript-eslint/utils" "8.53.0"
typescript@^5.2.2, typescript@^5.4.0, typescript@^5.9.3:
version "5.9.3"