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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + 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 @@ + + + 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 @@ 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"