From 598bd22b5aefbb8ad02ecf3bfe3ab7f653eb9b0d Mon Sep 17 00:00:00 2001 From: Rasyid <49753444+arraysid@users.noreply.github.com> Date: Sun, 11 May 2025 21:55:20 +0700 Subject: [PATCH] feat: make content data dynamic from cms and fix button and badge ui (#27) * feat: integrate payload cms to landing page * feat: add payload configuration and update TypeScript target * fix: update TypeScript paths for payload configuration * refactor: update config import paths to use local payload.config * fix: update quotation marks for testimonials to use HTML entities * fix: include withPayload in Next.js plugins for proper configuration * feat: implement HeroSection global configuration and integrate with Hero component * feat: add FeaturesSection global configuration and integrate with Features component * feat: add revalidate constant to control page revalidation interval * refactor: optimize data fetching by using Promise.all * fix: update revalidation interval to 10 seconds * feat: add CommunitiesSection configuration and integrate with Community component * refactor: move global section functions to services directory * feat: add support for s3 bucket for media * feat: update Community component to use Iconify for icons and adjust CommunitiesSection configuration * feat: replace Link component with Button for improved button styling in Community component * feat: update FeaturesSection to use Iconify icons and adjust icon properties * feat: add heroImage field to HeroSection and implement image formatting utility * feat: add Learning Resources section with dynamic data fetching and UI integration * feat: enhance LearningResourcesSection with primary and secondary button links * refactor: reorganize layout structure by moving Header and Footer components to RootLayout * feat: implement Testimonials section with dynamic data fetching and UI integration * feat: simplify joinTitle rendering in Testimonials section * feat: implement CallToAction section with dynamic data fetching and UI integration * feat: update CallToActionSection label and wrap Discord button in link * feat: update button components to use onClick for external links and improve styling * feat: wrap logo image in a link to navigate to the homepage * fix: supress scss deps warning * fix: add placeholder to .env.example * chore: add environment placeholder variables for CMS configuration in test build workflow * fix: remove unused environment variables from test build workflow * fix: text color (#26) * chore: update action * feat: integrate payload cms to landing page * feat: add payload configuration and update TypeScript target * fix: update TypeScript paths for payload configuration * refactor: update config import paths to use local payload.config * fix: include withPayload in Next.js plugins for proper configuration * feat: implement HeroSection global configuration and integrate with Hero component * feat: add FeaturesSection global configuration and integrate with Features component * feat: add revalidate constant to control page revalidation interval * refactor: optimize data fetching by using Promise.all * fix: update revalidation interval to 10 seconds * feat: add CommunitiesSection configuration and integrate with Community component * refactor: move global section functions to services directory * feat: add support for s3 bucket for media * feat: update Community component to use Iconify for icons and adjust CommunitiesSection configuration * feat: replace Link component with Button for improved button styling in Community component * feat: update FeaturesSection to use Iconify icons and adjust icon properties * feat: add heroImage field to HeroSection and implement image formatting utility * feat: add Learning Resources section with dynamic data fetching and UI integration * feat: enhance LearningResourcesSection with primary and secondary button links * refactor: reorganize layout structure by moving Header and Footer components to RootLayout * feat: implement Testimonials section with dynamic data fetching and UI integration * feat: simplify joinTitle rendering in Testimonials section * feat: implement CallToAction section with dynamic data fetching and UI integration * feat: update CallToActionSection label and wrap Discord button in link * feat: update button components to use onClick for external links and improve styling * feat: wrap logo image in a link to navigate to the homepage * fix: supress scss deps warning * fix: add placeholder to .env.example * chore: add environment placeholder variables for CMS configuration in test build workflow * fix: remove unused environment variables from test build workflow * fix: remove mistakenly added env from test-build workflow --------- Co-authored-by: Fahim Ardani Co-authored-by: Maulana Sodiqin <53475078+maulanasdqn@users.noreply.github.com> --- .env.example | 14 +- apps/landing/next.config.js | 21 +- apps/landing/public/hero.jpeg | Bin 89536 -> 0 bytes .../(frontend)/_components/call-to-action.tsx | 29 +- .../app/(frontend)/_components/community.tsx | 149 +- .../app/(frontend)/_components/features.tsx | 55 +- .../src/app/(frontend)/_components/header.tsx | 36 +- .../src/app/(frontend)/_components/hero.tsx | 110 +- .../_components/learning-resources.tsx | 135 +- .../(frontend)/_components/testimonials.tsx | 177 +- apps/landing/src/app/(frontend)/layout.tsx | 8 +- apps/landing/src/app/(frontend)/page.tsx | 48 +- .../src/app/(payload)/admin/importMap.js | 6 +- .../src/collections/CallToActionSection.ts | 51 + .../src/collections/CommunitiesSection.ts | 65 + .../src/collections/FeaturesSection.ts | 65 + apps/landing/src/collections/HeroSection.ts | 104 + .../collections/LearningResourcesSection.ts | 117 ++ .../src/collections/TestimonialsSection.ts | 93 + apps/landing/src/lib/format.ts | 10 + apps/landing/src/payload-types.ts | 310 ++- apps/landing/src/payload.config.ts | 40 +- .../get-globals-call-to-action-section.ts | 7 + .../get-globals-communitues-section.ts | 7 + .../services/get-globals-features-section.ts | 7 + .../src/services/get-globals-hero-section.ts | 7 + .../get-globals-learning-resources-section.ts | 7 + .../get-globals-testimonials-section.ts | 7 + package-lock.json | 1801 ++++++++++++++++- package.json | 3 + 30 files changed, 2999 insertions(+), 490 deletions(-) delete mode 100644 apps/landing/public/hero.jpeg create mode 100644 apps/landing/src/collections/CallToActionSection.ts create mode 100644 apps/landing/src/collections/CommunitiesSection.ts create mode 100644 apps/landing/src/collections/FeaturesSection.ts create mode 100644 apps/landing/src/collections/HeroSection.ts create mode 100644 apps/landing/src/collections/LearningResourcesSection.ts create mode 100644 apps/landing/src/collections/TestimonialsSection.ts create mode 100644 apps/landing/src/lib/format.ts create mode 100644 apps/landing/src/services/get-globals-call-to-action-section.ts create mode 100644 apps/landing/src/services/get-globals-communitues-section.ts create mode 100644 apps/landing/src/services/get-globals-features-section.ts create mode 100644 apps/landing/src/services/get-globals-hero-section.ts create mode 100644 apps/landing/src/services/get-globals-learning-resources-section.ts create mode 100644 apps/landing/src/services/get-globals-testimonials-section.ts diff --git a/.env.example b/.env.example index b6eda3e..8736213 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,14 @@ +# API Endpoint VITE_API_URL= -CMS_SECRET= -CMS_POSTGRES_URL= +# Payload CMS Secret Key (minimum 32 characters) +CMS_SECRET=your-very-long-secret-key + +# PostgreSQL Connection String +CMS_POSTGRES_URL=postgres://user:password@host:port/database + +# S3 Storage Configuration +CMS_STORAGE_ENDPOINT=https://your-s3-endpoint.com +CMS_STORAGE_ACCESS_KEY_ID=your-access-key-id +CMS_STORAGE_SECRET_ACCESS_KEY=your-secret-access-key +CMS_STORAGE_REGION=ap-southeast-1 diff --git a/apps/landing/next.config.js b/apps/landing/next.config.js index 7f7d4ff..e6eccb9 100644 --- a/apps/landing/next.config.js +++ b/apps/landing/next.config.js @@ -1,20 +1,15 @@ -//@ts-check - -// eslint-disable-next-line @typescript-eslint/no-var-requires const { composePlugins, withNx } = require('@nx/next'); const { withPayload } = require('@payloadcms/next/withPayload'); -/** - * @type {import('@nx/next/plugins/with-nx').WithNxOptions} - **/ +/** @type {import('@nx/next/plugins/with-nx').WithNxOptions} */ const nextConfig = { - nx: { - // Set this to true if you would like to to use SVGR - // See: https://github.com/gregberge/svgr - svgr: false, + nx: { svgr: false }, + sassOptions: { + quietDeps: true, + logger: { + warn: () => {}, + }, }, }; -const plugins = [withNx, withPayload]; - -module.exports = composePlugins(...plugins)(nextConfig); +module.exports = composePlugins(withNx, withPayload)(nextConfig); diff --git a/apps/landing/public/hero.jpeg b/apps/landing/public/hero.jpeg deleted file mode 100644 index 5e4ccd0b06628ae3e50d09ef583501541ed5f491..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89536 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

- Siap Menjadi{' '} + {title}{' '} - Programmer Handal? + {highlightedTitle}

- Bergabunglah dengan komunitas IMPHNEN sekarang dan mulai - perjalanan programming mu dengan cara yang menyenangkan! + {subtitle}

diff --git a/apps/landing/src/app/(frontend)/_components/community.tsx b/apps/landing/src/app/(frontend)/_components/community.tsx index f1c415c..a0d72c7 100644 --- a/apps/landing/src/app/(frontend)/_components/community.tsx +++ b/apps/landing/src/app/(frontend)/_components/community.tsx @@ -1,54 +1,16 @@ 'use client'; -import { - Button, - FacebookIcon, - InstagramIcon, - MessageCircleIcon, -} from '@imphnen-frontend-service/shadcn-ui/atoms'; +import { Icon } from '@iconify/react'; +import { Button } from '@imphnen-frontend-service/shadcn-ui/atoms'; +import { CommunitiesSection } from 'apps/landing/src/payload-types'; import { motion, useInView } from 'framer-motion'; import { useRef } from 'react'; -export function Community() { +export function Community(props: CommunitiesSection) { + const { items, stats } = props; const ref = useRef(null); const isInView = useInView(ref, { once: true, amount: 0.2 }); - const communities = [ - { - icon: ( - - ), - iconBg: 'bg-blue-100 dark:bg-blue-900', - title: 'Facebook Group', - description: - 'Bergabunglah dengan grup Facebook kami untuk diskusi santai dan berbagi artikel menarik.', - buttonText: 'Gabung Sekarang', - buttonLink: '#', - }, - { - icon: ( - - ), - iconBg: 'bg-blue-100 dark:bg-blue-900', - title: 'Instagram', - description: - 'Ikuti kami di Instagram untuk tips programming, konten inspiratif, dan info event terbaru.', - buttonText: 'Follow Kami', - buttonLink: '#', - }, - { - icon: ( - - ), - iconBg: 'bg-blue-100 dark:bg-blue-900', - title: 'Discord Server', - description: - 'Diskusikan langsung dengan sesama programmer dan dapatkan bantuan langsung dari para ahli.', - buttonText: 'Join Server', - buttonLink: '#', - }, - ]; - const containerVariants = { hidden: { opacity: 0 }, visible: { @@ -73,105 +35,74 @@ export function Community() { id="komunitas" className="w-full py-20 md:py-32 bg-muted relative overflow-hidden" > - {/* Background Elements */}
-
-
- -

- Komunitas{' '} - - Kami - -

-

- Bergabunglah dengan ribuan programmer Indonesia yang saling - membantu dan berbagi pengalaman. -

-
-
- +

+ Komunitas{' '} + + Kami + +

+

+ Bergabunglah dengan ribuan programmer Indonesia yang saling membantu + dan berbagi pengalaman. +

+
+ - {communities.map((community, index) => ( + {items?.map((c, i) => (
-
-
- {community.icon} +
+
-

{community.title}

-

- {community.description} -

+

{c.title}

+

{c.description}

-
))} - - {/* Community Stats */} -
-
- 10K+ + {stats?.map((s, i) => ( +
+
+ {s.value} +
+
{s.label}
-
Member Aktif
-
-
-
- 50+ -
-
Event Bulanan
-
-
-
- 100+ -
-
- Mentor Profesional -
-
-
-
- 5K+ -
-
- Diskusi Mingguan -
-
+ ))}
diff --git a/apps/landing/src/app/(frontend)/_components/features.tsx b/apps/landing/src/app/(frontend)/_components/features.tsx index 40ed3e1..35a970a 100644 --- a/apps/landing/src/app/(frontend)/_components/features.tsx +++ b/apps/landing/src/app/(frontend)/_components/features.tsx @@ -1,45 +1,16 @@ 'use client'; -import { - BookOpenIcon, - CodeIcon, - LaptopIcon, - UsersIcon, -} from '@imphnen-frontend-service/shadcn-ui/atoms'; +import { Icon } from '@iconify/react'; +import { FeaturesSection } from 'apps/landing/src/payload-types'; import { motion, useInView } from 'framer-motion'; import { useRef } from 'react'; -export function Features() { +export function Features(props: FeaturesSection) { + const { heading, subheading, features } = props; + const ref = useRef(null); const isInView = useInView(ref, { once: true, amount: 0.2 }); - const features = [ - { - icon: , - title: 'Belajar Tanpa Koding', - description: - 'Pelajari konsep programming dengan cara yang mudah dipahami tanpa harus menulis kode yang rumit.', - }, - { - icon: , - title: 'Komunitas Supportif', - description: - 'Bergabunglah dengan komunitas programmer Indonesia yang siap membantu dan berbagi pengalaman.', - }, - { - icon: , - title: 'Tutorial Interaktif', - description: - 'Akses tutorial interaktif yang membuat konsep programming lebih mudah untuk dipahami.', - }, - { - icon: , - title: 'Proyek Praktis', - description: - 'Terapkan pengetahuan Anda dalam proyek nyata dengan panduan langkah demi langkah.', - }, - ]; - const containerVariants = { hidden: { opacity: 0 }, visible: { @@ -64,7 +35,6 @@ export function Features() { id="fitur" className="w-full py-20 md:py-32 relative overflow-hidden" > - {/* Background Elements */}
@@ -82,14 +52,10 @@ export function Features() { Fitur Unggulan

- Belajar programming dengan{' '} - - cara yang lebih baik - + {heading}

- IMPHNEN hadir dengan berbagai fitur untuk membantu kamu menjadi - programmer handal tanpa harus pusing dengan coding. + {subheading}

@@ -100,7 +66,7 @@ export function Features() { initial="hidden" animate={isInView ? 'visible' : 'hidden'} > - {features.map((feature, index) => ( + {features?.map((feature, index) => (
- {feature.icon} +

{feature.title}

{feature.description}

diff --git a/apps/landing/src/app/(frontend)/_components/header.tsx b/apps/landing/src/app/(frontend)/_components/header.tsx index b9f5c6d..b27daa0 100644 --- a/apps/landing/src/app/(frontend)/_components/header.tsx +++ b/apps/landing/src/app/(frontend)/_components/header.tsx @@ -35,13 +35,15 @@ export function Header() {
- IMPHNEN Logo + + IMPHNEN +
@@ -82,7 +84,13 @@ export function Header() {
- @@ -134,9 +142,15 @@ export function Header() { > Testimoni - + + +
)} diff --git a/apps/landing/src/app/(frontend)/_components/hero.tsx b/apps/landing/src/app/(frontend)/_components/hero.tsx index 28d8ca3..fa543e5 100644 --- a/apps/landing/src/app/(frontend)/_components/hero.tsx +++ b/apps/landing/src/app/(frontend)/_components/hero.tsx @@ -6,11 +6,23 @@ import { SparklesIcon, UsersIcon, } from '@imphnen-frontend-service/shadcn-ui/atoms'; +import { formatCMSImageDataToMedia } from 'apps/landing/src/lib/format'; +import { HeroSection } from 'apps/landing/src/payload-types'; import { motion } from 'framer-motion'; import Image from 'next/image'; -import { useEffect, useState } from 'react'; +import { Fragment, useEffect, useState } from 'react'; + +export function Hero(props: HeroSection) { + const { + badgeText, + buttons, + description, + highlight, + title, + stats, + heroImage, + } = props; -export function Hero() { const [scrollY, setScrollY] = useState(0); useEffect(() => { @@ -24,11 +36,8 @@ export function Hero() { return (
- {/* Background Elements */}
- - {/* Animated Gradient Orbs */}
- - {/* Grid Pattern */}
@@ -56,66 +63,56 @@ export function Hero() { animate={{ opacity: 1, y: 0 }} transition={{ duration: 0.5 }} > -
+
- Komunitas Programmer Indonesia + {badgeText}

- Programmer Handal,
+ {title}
- Tanpa Ribet + {highlight}

- Temukan potensi programming Anda bersama komunitas yang - mendukung, tutorial interaktif, dan sumber daya berkualitas - tinggi. + {description}

- - - +
-
-
- 100K+ -
-
Member
-
-
-
-
- 500+ -
-
Tutorial
-
-
-
-
- 24/7 -
-
Yapping
-
+ {stats?.map(({ value, label }, i) => ( + +
+
+ {value} +
+
{label}
+
+ {i < stats.length - 1 && ( +
+ )} + + ))}
@@ -126,24 +123,27 @@ font-bold text-black hover:text-white cursor-pointer" transition={{ duration: 0.5, delay: 0.2 }} >
- {/* Decorative Elements */}
- - {/* Main Image */}
- IMPHNEN Programming Community + {(() => { + const media = formatCMSImageDataToMedia(heroImage); + if (!media) return null; + return ( + {media.alt} + ); + })()}
diff --git a/apps/landing/src/app/(frontend)/_components/learning-resources.tsx b/apps/landing/src/app/(frontend)/_components/learning-resources.tsx index 059e8dd..8f7b2b1 100644 --- a/apps/landing/src/app/(frontend)/_components/learning-resources.tsx +++ b/apps/landing/src/app/(frontend)/_components/learning-resources.tsx @@ -1,65 +1,17 @@ 'use client'; -import { - BookOpenIcon, - Button, - CodeIcon, - Share2Icon, - VideoIcon, -} from '@imphnen-frontend-service/shadcn-ui/atoms'; +import { Icon } from '@iconify/react'; +import { Button } from '@imphnen-frontend-service/shadcn-ui/atoms'; +import { LearningResourcesSection } from 'apps/landing/src/payload-types'; import { motion, useInView } from 'framer-motion'; - import { useRef } from 'react'; -export function LearningResources() { +export function LearningResources(props: LearningResourcesSection) { + const { resources, featured, title, description } = props; + const ref = useRef(null); const isInView = useInView(ref, { once: true, amount: 0.2 }); - const resources = [ - { - icon: , - iconBg: 'bg-blue-100 dark:bg-blue-900', - title: 'Video Tutorial', - description: - 'Belajar melalui tutorial video dari langkah awal hingga mahir.', - buttonText: 'Lihat Semua Video', - buttonLink: '#', - color: 'from-blue-500 to-blue-700', - }, - { - icon: ( - - ), - iconBg: 'bg-blue-100 dark:bg-blue-900', - title: 'Artikel & Tutorial', - description: - 'Pelajari konsep programming melalui artikel yang disusun secara terstruktur.', - buttonText: 'Baca Artikel', - buttonLink: '#', - color: 'from-blue-500 to-blue-700', - }, - { - icon: , - iconBg: 'bg-blue-100 dark:bg-blue-900', - title: 'Tantangan Koding', - description: - 'Uji kemampuan koding kamu dengan tantangan yang menyenangkan dan menantang.', - buttonText: 'Mulai Tantangan', - buttonLink: '#', - color: 'from-blue-500 to-blue-700', - }, - { - icon: , - iconBg: 'bg-blue-100 dark:bg-blue-900', - title: 'Sharing Session', - description: - 'Ikuti sesi berbagi pengalaman dari programmer berpengalaman dan belajar dari pengalaman mereka.', - buttonText: 'Jadwal Session', - buttonLink: '#', - color: 'from-blue-500 to-blue-700', - }, - ]; - const containerVariants = { hidden: { opacity: 0 }, visible: { @@ -84,97 +36,96 @@ export function LearningResources() { id="sumber-belajar" className="w-full py-20 md:py-32 relative overflow-hidden" > - {/* Background Elements */}
-

- Sumber{' '} - - Belajar - + {title}

- Akses berbagai materi belajar yang akan membantu kamu menguasai - konsep programming dengan cara yang menyenangkan. + {description}

- - {resources.map((resource, index) => ( + {resources.map((r, i) => (
-
-
- {resource.icon} +
+
-

{resource.title}

-

- {resource.description} -

+

{r.title}

+

{r.description}

+
-
))} - - {/* Featured Resource */}
-
- Rekomendasi Terbaik +
+ {featured.label}

- Kursus Lengkap Web Development + {featured.title}

- Pelajari HTML, CSS, JavaScript, React, dan Node.js dalam satu - kursus komprehensif yang dirancang untuk pemula hingga tingkat - menengah. + {featured.description}

- + -
diff --git a/apps/landing/src/app/(frontend)/_components/testimonials.tsx b/apps/landing/src/app/(frontend)/_components/testimonials.tsx index 1c1458c..36ee5b5 100644 --- a/apps/landing/src/app/(frontend)/_components/testimonials.tsx +++ b/apps/landing/src/app/(frontend)/_components/testimonials.tsx @@ -1,87 +1,64 @@ 'use client'; import { QuoteIcon } from '@imphnen-frontend-service/shadcn-ui/atoms'; +import { formatCMSImageDataToMedia } from 'apps/landing/src/lib/format'; +import { TestimonialsSection } from 'apps/landing/src/payload-types'; import { motion, useInView } from 'framer-motion'; import Image from 'next/image'; import { useRef } from 'react'; -export function Testimonials() { - const ref = useRef(null); - const isInView = useInView(ref, { once: true, amount: 0.2 }); +export function Testimonials(props: TestimonialsSection) { + const { title, subtitle, items, stats, joinTitle, joinText } = props; - const testimonials = [ - { - quote: - 'Saya yang tadinya tidak mengerti apa-apa tentang programming, sekarang bisa membuat website sendiri dengan mudah. Terima kasih IMPHNEN!', - name: 'Budi Santoso', - role: 'Web Developer Pemula', - avatar: '/Budi Santoso.jpg', - }, - { - quote: - 'Komunitas yang sangat supportif! Setiap pertanyaan selalu dijawab dengan cepat dan jelas. Diskusi programnya mudah dipahami.', - name: 'Anita Ratna', - role: 'Mobile App Developer', - avatar: '/Anita Ratna.jpg', - }, - { - quote: - 'Server Discord IMPHNEN adalah tempat belajar terbaik untuk programmer pemula seperti saya. Materinya lengkap dan komunitasnya sangat membantu!', - name: 'Dedi Permana', - role: 'Data Scientist', - avatar: '/Dedi Permana.jpg', - }, - ]; + const ref = useRef(null); + const isInView = useInView(ref, { once: true, amount: 0.2 }); const containerVariants = { hidden: { opacity: 0 }, - visible: { - opacity: 1, - transition: { - staggerChildren: 0.1, - }, - }, + visible: { opacity: 1, transition: { staggerChildren: 0.1 } }, }; const itemVariants = { hidden: { y: 20, opacity: 0 }, - visible: { - y: 0, - opacity: 1, - transition: { duration: 0.5 }, - }, + visible: { y: 0, opacity: 1, transition: { duration: 0.5 } }, }; return (
- {/* Background Elements */}
-
-
- -

- Testimoni{' '} - - Member - -

-

- Apa kata mereka yang telah bergabung dengan komunitas IMPHNEN? -

-
-
+
+ +

+ {title.split(' ').map((word, i) => + i === title.split(' ').length - 1 ? ( + + {word} + + ) : ( + {word} + ) + )} +

+

+ {subtitle} +

+
- {testimonials.map((testimonial, index) => ( + {items?.map((t, idx) => (
-

- “{testimonial.quote}” + “{t.quote}”

-
- {testimonial.name} + {(() => { + const media = formatCMSImageDataToMedia(t.avatar); + if (!media) return null; + return ( + {media.alt} + ); + })()}
-

{testimonial.name}

-

- {testimonial.role} -

+

{t.name}

+

{t.role}

-
))} - {/* Testimonial Stats */}

- Bergabunglah dengan{' '} - - 10,000+ - {' '} - programmer Indonesia lainnya + {joinTitle}

-

- Komunitas kami terus berkembang dengan programmer dari berbagai - latar belakang dan tingkat keahlian. Bersama-sama, kita belajar, - berbagi, dan tumbuh sebagai profesional. -

+

{joinText}

-
-
- 98% + {stats?.map((s, idx) => ( +
+
+ {s.value} +
+
{s.label}
-
- Tingkat Kemalasan -
-
-
-
- 4.9/5 -
-
- Rating Drama -
-
-
-
- 85% -
-
- Mendapat Pekerjaan -
-
-
-
- 24/7 -
-
Yapping
-
+ ))}
diff --git a/apps/landing/src/app/(frontend)/layout.tsx b/apps/landing/src/app/(frontend)/layout.tsx index 4926ba2..8cbe8a6 100644 --- a/apps/landing/src/app/(frontend)/layout.tsx +++ b/apps/landing/src/app/(frontend)/layout.tsx @@ -1,6 +1,8 @@ import { type Metadata } from 'next'; import { Inter } from 'next/font/google'; import '../../styles/globals.css'; +import Footer from './_components/footer'; +import { Header } from './_components/header'; import { ThemeProvider } from './_components/theme-provider'; const inter = Inter({ subsets: ['latin'] }); @@ -24,7 +26,11 @@ export default function RootLayout({ enableSystem disableTransitionOnChange > - {children} +
+
+
{children}
+
+
diff --git a/apps/landing/src/app/(frontend)/page.tsx b/apps/landing/src/app/(frontend)/page.tsx index 905d633..e50e601 100644 --- a/apps/landing/src/app/(frontend)/page.tsx +++ b/apps/landing/src/app/(frontend)/page.tsx @@ -1,25 +1,43 @@ +import { getGlobalsCallToActionSection } from '../../services/get-globals-call-to-action-section'; +import { getGlobalsCommunitiesSection } from '../../services/get-globals-communitues-section'; +import { getGlobalsFeaturesSection } from '../../services/get-globals-features-section'; +import { getGlobalsHeroSection } from '../../services/get-globals-hero-section'; +import { getGlobalsLearningResourcesSection } from '../../services/get-globals-learning-resources-section'; +import { getGlobalsTestimonialsSection } from '../../services/get-globals-testimonials-section'; import { CallToAction } from './_components/call-to-action'; import { Community } from './_components/community'; import { Features } from './_components/features'; -import Footer from './_components/footer'; -import { Header } from './_components/header'; import { Hero } from './_components/hero'; import { LearningResources } from './_components/learning-resources'; import { Testimonials } from './_components/testimonials'; -export default function Page() { +export const revalidate = 10; // Seconds + +export default async function Page() { + const [ + heroData, + featuresData, + communitiesData, + learningResourcesData, + testimonialsData, + callToActionData, + ] = await Promise.all([ + getGlobalsHeroSection(), + getGlobalsFeaturesSection(), + getGlobalsCommunitiesSection(), + getGlobalsLearningResourcesSection(), + getGlobalsTestimonialsSection(), + getGlobalsCallToActionSection(), + ]); + return ( -
-
-
- - - - - - -
-
-
+ <> + + + + + + + ); } diff --git a/apps/landing/src/app/(payload)/admin/importMap.js b/apps/landing/src/app/(payload)/admin/importMap.js index 73849ab..bd56203 100644 --- a/apps/landing/src/app/(payload)/admin/importMap.js +++ b/apps/landing/src/app/(payload)/admin/importMap.js @@ -1 +1,5 @@ -export const importMap = {}; +import { S3ClientUploadHandler as S3ClientUploadHandler_f97aa6c64367fa259c5bc0567239ef24 } from '@payloadcms/storage-s3/client' + +export const importMap = { + "@payloadcms/storage-s3/client#S3ClientUploadHandler": S3ClientUploadHandler_f97aa6c64367fa259c5bc0567239ef24 +} diff --git a/apps/landing/src/collections/CallToActionSection.ts b/apps/landing/src/collections/CallToActionSection.ts new file mode 100644 index 0000000..4357b7c --- /dev/null +++ b/apps/landing/src/collections/CallToActionSection.ts @@ -0,0 +1,51 @@ +import { GlobalConfig } from 'payload'; + +export const CallToActionSection: GlobalConfig = { + slug: 'call-to-action-section', + label: 'Call To Action Section', + fields: [ + { + name: 'title', + type: 'text', + required: true, + defaultValue: 'Siap Menjadi', + }, + { + name: 'highlightedTitle', + type: 'text', + required: true, + defaultValue: 'Programmer Handal?', + }, + { + name: 'subtitle', + type: 'textarea', + required: true, + defaultValue: + 'Bergabunglah dengan komunitas IMPHNEN sekarang dan mulai perjalanan programming mu dengan cara yang menyenangkan!', + }, + { + name: 'primaryButtonLabel', + type: 'text', + required: true, + defaultValue: 'Gabung Discord', + }, + { + name: 'primaryButtonLink', + type: 'text', + required: true, + defaultValue: 'https://discord.gg/imphnen', + }, + { + name: 'secondaryButtonLabel', + type: 'text', + required: true, + defaultValue: 'Join Facebook Group', + }, + { + name: 'secondaryButtonLink', + type: 'text', + required: true, + defaultValue: 'https://facebook.com/groups/programmerhandal', + }, + ], +}; diff --git a/apps/landing/src/collections/CommunitiesSection.ts b/apps/landing/src/collections/CommunitiesSection.ts new file mode 100644 index 0000000..1c04430 --- /dev/null +++ b/apps/landing/src/collections/CommunitiesSection.ts @@ -0,0 +1,65 @@ +import { GlobalConfig } from 'payload'; + +export const CommunitiesSection: GlobalConfig = { + slug: 'communities-section', + label: 'Communities Section', + fields: [ + { + name: 'items', + type: 'array', + required: true, + defaultValue: [ + { + iconName: 'tabler:brand-facebook', + title: 'Facebook Group', + description: + 'Bergabunglah dengan grup Facebook kami untuk diskusi santai dan berbagi artikel menarik.', + buttonText: 'Gabung Sekarang', + buttonLink: 'https://facebook.com/groups/programmerhandal', + }, + { + iconName: 'tabler:brand-instagram', + title: 'Instagram', + description: + 'Ikuti kami di Instagram untuk tips programming, konten inspiratif, dan info event terbaru.', + buttonText: 'Follow Kami', + buttonLink: 'https://www.instagram.com/imphnen.dev', + }, + { + iconName: 'tabler:brand-discord-filled', + title: 'Discord Server', + description: + 'Diskusikan langsung dengan sesama programmer dan dapatkan bantuan langsung dari para ahli.', + buttonText: 'Join Server', + buttonLink: 'https://discord.com/invite/imphnen', + }, + ], + fields: [ + { + name: 'iconName', + type: 'text', + required: true, + }, + { name: 'title', type: 'text', required: true }, + { name: 'description', type: 'textarea', required: true }, + { name: 'buttonText', type: 'text', required: true }, + { name: 'buttonLink', type: 'text', required: true }, + ], + }, + { + name: 'stats', + type: 'array', + required: true, + defaultValue: [ + { value: '100K+', label: 'Member Aktif' }, + { value: '50+', label: 'Event Bulanan' }, + { value: '100+', label: 'Mentor Profesional' }, + { value: '5K+', label: 'Diskusi Mingguan' }, + ], + fields: [ + { name: 'value', type: 'text', required: true }, + { name: 'label', type: 'text', required: true }, + ], + }, + ], +}; diff --git a/apps/landing/src/collections/FeaturesSection.ts b/apps/landing/src/collections/FeaturesSection.ts new file mode 100644 index 0000000..4ae5dc2 --- /dev/null +++ b/apps/landing/src/collections/FeaturesSection.ts @@ -0,0 +1,65 @@ +import { GlobalConfig } from 'payload'; + +export const FeaturesSection: GlobalConfig = { + slug: 'features-section', + label: 'Features Section', + fields: [ + { + name: 'heading', + type: 'text', + defaultValue: 'Belajar programming dengan cara yang lebih baik', + }, + { + name: 'subheading', + type: 'text', + defaultValue: + 'IMPHNEN hadir dengan berbagai fitur untuk membantu kamu menjadi programmer handal tanpa harus pusing dengan coding.', + }, + { + name: 'features', + type: 'array', + defaultValue: [ + { + iconName: 'tabler:device-laptop', + title: 'Belajar Tanpa Koding', + description: + 'Pelajari konsep programming dengan cara yang mudah dipahami tanpa harus menulis kode yang rumit.', + }, + { + iconName: 'tabler:users', + title: 'Komunitas Supportif', + description: + 'Bergabunglah dengan komunitas programmer Indonesia yang siap membantu dan berbagi pengalaman.', + }, + { + iconName: 'tabler:book', + title: 'Tutorial Interaktif', + description: + 'Akses tutorial interaktif yang membuat konsep programming lebih mudah untuk dipahami.', + }, + { + iconName: 'tabler:code', + title: 'Proyek Praktis', + description: + 'Terapkan pengetahuan Anda dalam proyek nyata dengan panduan langkah demi langkah.', + }, + ], + fields: [ + { + name: 'iconName', + type: 'text', + required: true, + }, + { + name: 'title', + type: 'text', + required: true, + }, + { + name: 'description', + type: 'textarea', + }, + ], + }, + ], +}; diff --git a/apps/landing/src/collections/HeroSection.ts b/apps/landing/src/collections/HeroSection.ts new file mode 100644 index 0000000..da1df61 --- /dev/null +++ b/apps/landing/src/collections/HeroSection.ts @@ -0,0 +1,104 @@ +import type { GlobalConfig } from 'payload'; + +export const HeroSection: GlobalConfig = { + slug: 'hero-section', + label: 'Hero Section', + fields: [ + { + name: 'heroImage', + label: 'Hero Image', + type: 'upload', + relationTo: 'media', + required: true, + }, + { + name: 'badgeText', + label: 'Badge Text', + type: 'text', + required: true, + defaultValue: 'Komunitas Programmer Indonesia', + }, + { + name: 'title', + label: 'Main Title', + type: 'text', + required: true, + defaultValue: 'Programmer Handal,', + }, + { + name: 'highlight', + label: 'Highlight Text', + type: 'text', + required: true, + defaultValue: 'Tanpa Ribet', + }, + { + name: 'description', + label: 'Description', + type: 'textarea', + required: true, + defaultValue: + 'Temukan potensi programming Anda bersama komunitas yang mendukung, tutorial interaktif, dan sumber daya berkualitas tinggi.', + }, + { + type: 'group', + name: 'buttons', + label: 'Buttons', + fields: [ + { + name: 'primaryLabel', + label: 'Primary Button Label', + type: 'text', + required: true, + defaultValue: 'Mulai Belajar', + }, + { + name: 'primaryUrl', + label: 'Primary Button URL', + type: 'text', + required: true, + defaultValue: 'https://facebook.com/groups/programmerhandal', + }, + { + name: 'secondaryLabel', + label: 'Secondary Button Label', + type: 'text', + required: true, + defaultValue: 'Gabung Discord', + }, + { + name: 'secondaryUrl', + label: 'Secondary Button URL', + type: 'text', + required: true, + defaultValue: 'https://discord.com/invite/imphnen', + }, + ], + }, + { + name: 'stats', + label: 'Statistics', + type: 'array', + minRows: 1, + fields: [ + { + name: 'value', + label: 'Value', + type: 'text', + required: true, + }, + { + name: 'label', + label: 'Label', + type: 'text', + required: true, + }, + ], + defaultValue: [ + { value: '180K+', label: 'Member' }, + { value: '500+', label: 'Tutorial' }, + { value: '24/7', label: 'Yapping' }, + ], + }, + ], +}; diff --git a/apps/landing/src/collections/LearningResourcesSection.ts b/apps/landing/src/collections/LearningResourcesSection.ts new file mode 100644 index 0000000..ddc8505 --- /dev/null +++ b/apps/landing/src/collections/LearningResourcesSection.ts @@ -0,0 +1,117 @@ +// payload config +import { GlobalConfig } from 'payload'; + +export const LearningResourcesSection: GlobalConfig = { + slug: 'learning-resources-section', + label: 'Learning Resources Section', + fields: [ + { + name: 'title', + type: 'text', + required: true, + defaultValue: 'Sumber Belajar', + }, + { + name: 'description', + type: 'textarea', + required: true, + defaultValue: + 'Akses berbagai materi belajar yang akan membantu kamu menguasai konsep programming dengan cara yang menyenangkan.', + }, + { + name: 'resources', + type: 'array', + required: true, + fields: [ + { name: 'icon', type: 'text', required: true }, + { name: 'title', type: 'text', required: true }, + { name: 'description', type: 'textarea', required: true }, + { name: 'buttonText', type: 'text', required: true }, + { name: 'buttonLink', type: 'text', required: true }, + ], + defaultValue: [ + { + icon: 'tabler:video', + title: 'Video Tutorial', + description: + 'Belajar melalui tutorial video dari langkah awal hingga mahir.', + buttonText: 'Lihat Semua Video', + buttonLink: '#', + }, + { + icon: 'tabler:article', + title: 'Artikel & Tutorial', + description: + 'Pelajari konsep programming melalui artikel yang disusun secara terstruktur.', + buttonText: 'Baca Artikel', + buttonLink: '#', + }, + { + icon: 'tabler:brand-vscode', + title: 'Tantangan Koding', + description: + 'Uji kemampuan koding kamu dengan tantangan yang menyenangkan dan menantang.', + buttonText: 'Mulai Tantangan', + buttonLink: '#', + }, + { + icon: 'tabler:device-desktop-share', + title: 'Sharing Session', + description: + 'Ikuti sesi berbagi pengalaman dari programmer berpengalaman dan belajar dari pengalaman mereka.', + buttonText: 'Jadwal Session', + buttonLink: '#', + }, + ], + }, + { + name: 'featured', + type: 'group', + fields: [ + { + name: 'label', + type: 'text', + required: true, + defaultValue: 'Rekomendasi Terbaik', + }, + { + name: 'title', + type: 'text', + required: true, + defaultValue: 'Kursus Lengkap Web Development', + }, + { + name: 'description', + type: 'textarea', + required: true, + defaultValue: + 'Pelajari HTML, CSS, JavaScript, React, dan Node.js dalam satu kursus komprehensif yang dirancang untuk pemula hingga tingkat menengah.', + }, + { + name: 'primaryButtonText', + type: 'text', + required: true, + defaultValue: 'Mulai Kursus', + }, + { + name: 'primaryButtonLink', + type: 'text', + required: true, + defaultValue: '#', + }, + { + name: 'secondaryButtonText', + type: 'text', + required: true, + defaultValue: 'Lihat Silabus', + }, + { + name: 'secondaryButtonLink', + type: 'text', + required: true, + defaultValue: '#', + }, + ], + }, + ], +}; diff --git a/apps/landing/src/collections/TestimonialsSection.ts b/apps/landing/src/collections/TestimonialsSection.ts new file mode 100644 index 0000000..92926b4 --- /dev/null +++ b/apps/landing/src/collections/TestimonialsSection.ts @@ -0,0 +1,93 @@ +import { GlobalConfig } from 'payload'; + +export const TestimonialsSection: GlobalConfig = { + slug: 'testimonials-section', + label: 'Testimonials Section', + fields: [ + { + name: 'title', + label: 'Section Title', + type: 'text', + defaultValue: 'Testimoni Member', + required: true, + }, + { + name: 'subtitle', + label: 'Section Subtitle', + type: 'textarea', + defaultValue: + 'Apa kata mereka yang telah bergabung dengan komunitas IMPHNEN?', + required: true, + }, + { + name: 'items', + label: 'Testimonials Items', + type: 'array', + fields: [ + { name: 'quote', type: 'textarea', label: 'Quote', required: true }, + { name: 'name', type: 'text', label: 'Name', required: true }, + { name: 'role', type: 'text', label: 'Role', required: true }, + { + name: 'avatar', + type: 'upload', + label: 'Avatar', + relationTo: 'media', + required: true, + }, + ], + defaultValue: [ + { + quote: + 'Saya yang tadinya tidak mengerti apa-apa tentang programming, sekarang bisa membuat website sendiri dengan mudah. Terima kasih IMPHNEN!', + name: 'Budi Santoso', + role: 'Web Developer Pemula', + avatar: { id: '', relationTo: 'media' }, + }, + { + quote: + 'Komunitas yang sangat supportif! Setiap pertanyaan selalu dijawab dengan cepat dan jelas. Diskusi programnya mudah dipahami.', + name: 'Anita Ratna', + role: 'Mobile App Developer', + avatar: { id: '', relationTo: 'media' }, + }, + { + quote: + 'Server Discord IMPHNEN adalah tempat belajar terbaik untuk programmer pemula seperti saya. Materinya lengkap dan komunitasnya sangat membantu!', + name: 'Dedi Permana', + role: 'Data Scientist', + avatar: { id: '', relationTo: 'media' }, + }, + ], + }, + { + name: 'stats', + label: 'Statistics', + type: 'array', + fields: [ + { name: 'value', type: 'text', label: 'Value', required: true }, + { name: 'label', type: 'text', label: 'Label', required: true }, + ], + defaultValue: [ + { value: '98%', label: 'Tingkat Kemalasan' }, + { value: '4.9/5', label: 'Rating Drama' }, + { value: '85%', label: 'Mendapat Pekerjaan' }, + { value: '24/7', label: 'Yapping' }, + ], + }, + { + name: 'joinTitle', + label: 'Join Section Title', + type: 'text', + defaultValue: 'Bergabunglah dengan 10,000+ programmer Indonesia lainnya', + required: true, + }, + { + name: 'joinText', + label: 'Join Section Text', + type: 'textarea', + defaultValue: + 'Komunitas kami terus berkembang dengan programmer dari berbagai latar belakang dan tingkat keahlian. Bersama-sama, kita belajar, berbagi, dan tumbuh sebagai profesional.', + required: true, + }, + ], +}; diff --git a/apps/landing/src/lib/format.ts b/apps/landing/src/lib/format.ts new file mode 100644 index 0000000..5c0dd9e --- /dev/null +++ b/apps/landing/src/lib/format.ts @@ -0,0 +1,10 @@ +import { Media } from '../payload-types'; + +export function formatCMSImageDataToMedia( + image: number | Media | null | undefined +): Media | null { + if (image && typeof image === 'object' && 'url' in image) { + return image as Media; + } + return null; +} diff --git a/apps/landing/src/payload-types.ts b/apps/landing/src/payload-types.ts index d3cacc9..4e4d9f6 100644 --- a/apps/landing/src/payload-types.ts +++ b/apps/landing/src/payload-types.ts @@ -84,8 +84,22 @@ export interface Config { db: { defaultIDType: number; }; - globals: {}; - globalsSelect: {}; + globals: { + 'hero-section': HeroSection; + 'features-section': FeaturesSection; + 'communities-section': CommunitiesSection; + 'learning-resources-section': LearningResourcesSection; + 'testimonials-section': TestimonialsSection; + 'call-to-action-section': CallToActionSection; + }; + globalsSelect: { + 'hero-section': HeroSectionSelect | HeroSectionSelect; + 'features-section': FeaturesSectionSelect | FeaturesSectionSelect; + 'communities-section': CommunitiesSectionSelect | CommunitiesSectionSelect; + 'learning-resources-section': LearningResourcesSectionSelect | LearningResourcesSectionSelect; + 'testimonials-section': TestimonialsSectionSelect | TestimonialsSectionSelect; + 'call-to-action-section': CallToActionSectionSelect | CallToActionSectionSelect; + }; locale: null; user: User & { collection: 'users'; @@ -271,6 +285,298 @@ export interface PayloadMigrationsSelect { updatedAt?: T; createdAt?: T; } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "hero-section". + */ +export interface HeroSection { + id: number; + heroImage: number | Media; + badgeText: string; + title: string; + highlight: string; + description: string; + buttons: { + primaryLabel: string; + primaryUrl: string; + secondaryLabel: string; + secondaryUrl: string; + }; + stats?: + | { + value: string; + label: string; + id?: string | null; + }[] + | null; + updatedAt?: string | null; + createdAt?: string | null; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "features-section". + */ +export interface FeaturesSection { + id: number; + heading?: string | null; + subheading?: string | null; + features?: + | { + iconName: string; + title: string; + description?: string | null; + id?: string | null; + }[] + | null; + updatedAt?: string | null; + createdAt?: string | null; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "communities-section". + */ +export interface CommunitiesSection { + id: number; + items: { + iconName: string; + title: string; + description: string; + buttonText: string; + buttonLink: string; + id?: string | null; + }[]; + stats: { + value: string; + label: string; + id?: string | null; + }[]; + updatedAt?: string | null; + createdAt?: string | null; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "learning-resources-section". + */ +export interface LearningResourcesSection { + id: number; + title: string; + description: string; + resources: { + icon: string; + title: string; + description: string; + buttonText: string; + buttonLink: string; + id?: string | null; + }[]; + featured: { + label: string; + title: string; + description: string; + primaryButtonText: string; + primaryButtonLink: string; + secondaryButtonText: string; + secondaryButtonLink: string; + }; + updatedAt?: string | null; + createdAt?: string | null; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "testimonials-section". + */ +export interface TestimonialsSection { + id: number; + title: string; + subtitle: string; + items?: + | { + quote: string; + name: string; + role: string; + avatar: number | Media; + id?: string | null; + }[] + | null; + stats?: + | { + value: string; + label: string; + id?: string | null; + }[] + | null; + joinTitle: string; + joinText: string; + updatedAt?: string | null; + createdAt?: string | null; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "call-to-action-section". + */ +export interface CallToActionSection { + id: number; + title: string; + highlightedTitle: string; + subtitle: string; + primaryButtonLabel: string; + primaryButtonLink: string; + secondaryButtonLabel: string; + secondaryButtonLink: string; + updatedAt?: string | null; + createdAt?: string | null; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "hero-section_select". + */ +export interface HeroSectionSelect { + heroImage?: T; + badgeText?: T; + title?: T; + highlight?: T; + description?: T; + buttons?: + | T + | { + primaryLabel?: T; + primaryUrl?: T; + secondaryLabel?: T; + secondaryUrl?: T; + }; + stats?: + | T + | { + value?: T; + label?: T; + id?: T; + }; + updatedAt?: T; + createdAt?: T; + globalType?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "features-section_select". + */ +export interface FeaturesSectionSelect { + heading?: T; + subheading?: T; + features?: + | T + | { + iconName?: T; + title?: T; + description?: T; + id?: T; + }; + updatedAt?: T; + createdAt?: T; + globalType?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "communities-section_select". + */ +export interface CommunitiesSectionSelect { + items?: + | T + | { + iconName?: T; + title?: T; + description?: T; + buttonText?: T; + buttonLink?: T; + id?: T; + }; + stats?: + | T + | { + value?: T; + label?: T; + id?: T; + }; + updatedAt?: T; + createdAt?: T; + globalType?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "learning-resources-section_select". + */ +export interface LearningResourcesSectionSelect { + title?: T; + description?: T; + resources?: + | T + | { + icon?: T; + title?: T; + description?: T; + buttonText?: T; + buttonLink?: T; + id?: T; + }; + featured?: + | T + | { + label?: T; + title?: T; + description?: T; + primaryButtonText?: T; + primaryButtonLink?: T; + secondaryButtonText?: T; + secondaryButtonLink?: T; + }; + updatedAt?: T; + createdAt?: T; + globalType?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "testimonials-section_select". + */ +export interface TestimonialsSectionSelect { + title?: T; + subtitle?: T; + items?: + | T + | { + quote?: T; + name?: T; + role?: T; + avatar?: T; + id?: T; + }; + stats?: + | T + | { + value?: T; + label?: T; + id?: T; + }; + joinTitle?: T; + joinText?: T; + updatedAt?: T; + createdAt?: T; + globalType?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "call-to-action-section_select". + */ +export interface CallToActionSectionSelect { + title?: T; + highlightedTitle?: T; + subtitle?: T; + primaryButtonLabel?: T; + primaryButtonLink?: T; + secondaryButtonLabel?: T; + secondaryButtonLink?: T; + updatedAt?: T; + createdAt?: T; + globalType?: T; +} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "auth". diff --git a/apps/landing/src/payload.config.ts b/apps/landing/src/payload.config.ts index de076a1..7ccc7e1 100644 --- a/apps/landing/src/payload.config.ts +++ b/apps/landing/src/payload.config.ts @@ -1,11 +1,20 @@ import { postgresAdapter } from '@payloadcms/db-postgres'; import { lexicalEditor } from '@payloadcms/richtext-lexical'; +import { s3Storage } from '@payloadcms/storage-s3'; +import { NodeHttpHandler } from '@smithy/node-http-handler'; +import https from 'https'; import path from 'path'; import { buildConfig } from 'payload'; import sharp from 'sharp'; import { fileURLToPath } from 'url'; +import { CallToActionSection } from './collections/CallToActionSection'; +import { CommunitiesSection } from './collections/CommunitiesSection'; +import { FeaturesSection } from './collections/FeaturesSection'; +import { HeroSection } from './collections/HeroSection'; +import { LearningResourcesSection } from './collections/LearningResourcesSection'; import { Media } from './collections/Media'; +import { TestimonialsSection } from './collections/TestimonialsSection'; import { Users } from './collections/Users'; const filename = fileURLToPath(import.meta.url); @@ -25,6 +34,14 @@ export default buildConfig({ }, }, collections: [Users, Media], + globals: [ + HeroSection, + FeaturesSection, + CommunitiesSection, + LearningResourcesSection, + TestimonialsSection, + CallToActionSection, + ], editor: lexicalEditor(), secret: process.env.CMS_SECRET || '', typescript: { @@ -36,5 +53,26 @@ export default buildConfig({ }, }), sharp, - plugins: [], + plugins: [ + s3Storage({ + collections: { + media: { + disableLocalStorage: true, + }, + }, + bucket: 'landing-cms', + config: { + endpoint: process.env.CMS_STORAGE_ENDPOINT, + credentials: { + accessKeyId: process.env.CMS_STORAGE_ACCESS_KEY_ID!, + secretAccessKey: process.env.CMS_STORAGE_SECRET_ACCESS_KEY!, + }, + region: process.env.CMS_STORAGE_REGION!, + forcePathStyle: true, + requestHandler: new NodeHttpHandler({ + httpsAgent: new https.Agent({ rejectUnauthorized: false }), + }), + }, + }), + ], }); diff --git a/apps/landing/src/services/get-globals-call-to-action-section.ts b/apps/landing/src/services/get-globals-call-to-action-section.ts new file mode 100644 index 0000000..c742304 --- /dev/null +++ b/apps/landing/src/services/get-globals-call-to-action-section.ts @@ -0,0 +1,7 @@ +import { payload } from '../lib/payload'; + +export async function getGlobalsCallToActionSection() { + return await payload.findGlobal({ + slug: 'call-to-action-section', + }); +} diff --git a/apps/landing/src/services/get-globals-communitues-section.ts b/apps/landing/src/services/get-globals-communitues-section.ts new file mode 100644 index 0000000..7b11ce7 --- /dev/null +++ b/apps/landing/src/services/get-globals-communitues-section.ts @@ -0,0 +1,7 @@ +import { payload } from '../lib/payload'; + +export async function getGlobalsCommunitiesSection() { + return await payload.findGlobal({ + slug: 'communities-section', + }); +} diff --git a/apps/landing/src/services/get-globals-features-section.ts b/apps/landing/src/services/get-globals-features-section.ts new file mode 100644 index 0000000..d22574d --- /dev/null +++ b/apps/landing/src/services/get-globals-features-section.ts @@ -0,0 +1,7 @@ +import { payload } from '../lib/payload'; + +export async function getGlobalsFeaturesSection() { + return await payload.findGlobal({ + slug: 'features-section', + }); +} diff --git a/apps/landing/src/services/get-globals-hero-section.ts b/apps/landing/src/services/get-globals-hero-section.ts new file mode 100644 index 0000000..cd8e3c0 --- /dev/null +++ b/apps/landing/src/services/get-globals-hero-section.ts @@ -0,0 +1,7 @@ +import { payload } from '../lib/payload'; + +export async function getGlobalsHeroSection() { + return await payload.findGlobal({ + slug: 'hero-section', + }); +} diff --git a/apps/landing/src/services/get-globals-learning-resources-section.ts b/apps/landing/src/services/get-globals-learning-resources-section.ts new file mode 100644 index 0000000..9a42e8a --- /dev/null +++ b/apps/landing/src/services/get-globals-learning-resources-section.ts @@ -0,0 +1,7 @@ +import { payload } from '../lib/payload'; + +export async function getGlobalsLearningResourcesSection() { + return await payload.findGlobal({ + slug: 'learning-resources-section', + }); +} diff --git a/apps/landing/src/services/get-globals-testimonials-section.ts b/apps/landing/src/services/get-globals-testimonials-section.ts new file mode 100644 index 0000000..2f9480d --- /dev/null +++ b/apps/landing/src/services/get-globals-testimonials-section.ts @@ -0,0 +1,7 @@ +import { payload } from '../lib/payload'; + +export async function getGlobalsTestimonialsSection() { + return await payload.findGlobal({ + slug: 'testimonials-section', + }); +} diff --git a/package-lock.json b/package-lock.json index 4a4f13e..c5d83b2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,10 +11,13 @@ "dependencies": { "@ant-design/icons": "^6.0.0", "@hookform/resolvers": "^5.0.1", + "@iconify/react": "^6.0.0", "@payloadcms/db-postgres": "^3.37.0", "@payloadcms/next": "^3.37.0", "@payloadcms/richtext-lexical": "^3.37.0", + "@payloadcms/storage-s3": "^3.37.0", "@radix-ui/react-slot": "^1.2.0", + "@smithy/node-http-handler": "^4.0.4", "@tanstack/react-query": "^5.74.4", "@tanstack/react-store": "^0.7.0", "@tanstack/react-table": "^8.21.2", @@ -202,6 +205,921 @@ "url": "https://github.com/sponsors/philsturgeon" } }, + "node_modules/@aws-crypto/crc32": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", + "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/crc32c": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz", + "integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha1-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", + "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3": { + "version": "3.806.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.806.0.tgz", + "integrity": "sha512-kQaBBBxEBU/IJ2wKG+LL2BK+uvBwpdvOA9jy1WhW+U2/DIMwMrjVs7M/ZvTlmVOJwhZaONcJbgQqsN4Yirjj4g==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha1-browser": "5.2.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.806.0", + "@aws-sdk/credential-provider-node": "3.806.0", + "@aws-sdk/middleware-bucket-endpoint": "3.806.0", + "@aws-sdk/middleware-expect-continue": "3.804.0", + "@aws-sdk/middleware-flexible-checksums": "3.806.0", + "@aws-sdk/middleware-host-header": "3.804.0", + "@aws-sdk/middleware-location-constraint": "3.804.0", + "@aws-sdk/middleware-logger": "3.804.0", + "@aws-sdk/middleware-recursion-detection": "3.804.0", + "@aws-sdk/middleware-sdk-s3": "3.806.0", + "@aws-sdk/middleware-ssec": "3.804.0", + "@aws-sdk/middleware-user-agent": "3.806.0", + "@aws-sdk/region-config-resolver": "3.806.0", + "@aws-sdk/signature-v4-multi-region": "3.806.0", + "@aws-sdk/types": "3.804.0", + "@aws-sdk/util-endpoints": "3.806.0", + "@aws-sdk/util-user-agent-browser": "3.804.0", + "@aws-sdk/util-user-agent-node": "3.806.0", + "@aws-sdk/xml-builder": "3.804.0", + "@smithy/config-resolver": "^4.1.1", + "@smithy/core": "^3.3.1", + "@smithy/eventstream-serde-browser": "^4.0.2", + "@smithy/eventstream-serde-config-resolver": "^4.1.0", + "@smithy/eventstream-serde-node": "^4.0.2", + "@smithy/fetch-http-handler": "^5.0.2", + "@smithy/hash-blob-browser": "^4.0.2", + "@smithy/hash-node": "^4.0.2", + "@smithy/hash-stream-node": "^4.0.2", + "@smithy/invalid-dependency": "^4.0.2", + "@smithy/md5-js": "^4.0.2", + "@smithy/middleware-content-length": "^4.0.2", + "@smithy/middleware-endpoint": "^4.1.3", + "@smithy/middleware-retry": "^4.1.4", + "@smithy/middleware-serde": "^4.0.3", + "@smithy/middleware-stack": "^4.0.2", + "@smithy/node-config-provider": "^4.1.0", + "@smithy/node-http-handler": "^4.0.4", + "@smithy/protocol-http": "^5.1.0", + "@smithy/smithy-client": "^4.2.3", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.11", + "@smithy/util-defaults-mode-node": "^4.0.11", + "@smithy/util-endpoints": "^3.0.3", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-retry": "^4.0.3", + "@smithy/util-stream": "^4.2.0", + "@smithy/util-utf8": "^4.0.0", + "@smithy/util-waiter": "^4.0.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.806.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.806.0.tgz", + "integrity": "sha512-X0p/9/u9e6b22rlQqKucdtjdqmjSNB4c/8zDEoD5MvgYAAbMF9HNE0ST2xaA/WsJ7uE0jFfhPY2/00pslL1DqQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.806.0", + "@aws-sdk/middleware-host-header": "3.804.0", + "@aws-sdk/middleware-logger": "3.804.0", + "@aws-sdk/middleware-recursion-detection": "3.804.0", + "@aws-sdk/middleware-user-agent": "3.806.0", + "@aws-sdk/region-config-resolver": "3.806.0", + "@aws-sdk/types": "3.804.0", + "@aws-sdk/util-endpoints": "3.806.0", + "@aws-sdk/util-user-agent-browser": "3.804.0", + "@aws-sdk/util-user-agent-node": "3.806.0", + "@smithy/config-resolver": "^4.1.1", + "@smithy/core": "^3.3.1", + "@smithy/fetch-http-handler": "^5.0.2", + "@smithy/hash-node": "^4.0.2", + "@smithy/invalid-dependency": "^4.0.2", + "@smithy/middleware-content-length": "^4.0.2", + "@smithy/middleware-endpoint": "^4.1.3", + "@smithy/middleware-retry": "^4.1.4", + "@smithy/middleware-serde": "^4.0.3", + "@smithy/middleware-stack": "^4.0.2", + "@smithy/node-config-provider": "^4.1.0", + "@smithy/node-http-handler": "^4.0.4", + "@smithy/protocol-http": "^5.1.0", + "@smithy/smithy-client": "^4.2.3", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.11", + "@smithy/util-defaults-mode-node": "^4.0.11", + "@smithy/util-endpoints": "^3.0.3", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-retry": "^4.0.3", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.806.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.806.0.tgz", + "integrity": "sha512-HJRINPncdjPK0iL3f6cBpqCMaxVwq2oDbRCzOx04tsLZ0tNgRACBfT3d/zNVRvMt6fnOVKXoN1LAtQaw50pjEA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.804.0", + "@smithy/core": "^3.3.1", + "@smithy/node-config-provider": "^4.1.0", + "@smithy/property-provider": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/signature-v4": "^5.1.0", + "@smithy/smithy-client": "^4.2.3", + "@smithy/types": "^4.2.0", + "@smithy/util-middleware": "^4.0.2", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.806.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.806.0.tgz", + "integrity": "sha512-nbPwmZn0kt6Q1XI2FaJWP6AhF9tro4cO5HlmZQx8NU+B0H1y9WMo659Q5zLLY46BXgoQVIJEsPSZpcZk27O4aw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.806.0", + "@aws-sdk/types": "3.804.0", + "@smithy/property-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.806.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.806.0.tgz", + "integrity": "sha512-e/gB2iJQQ4ZpecOVpEFhEvjGwuTqNCzhVaVsFYVc49FPfR1seuN7qBGYe1MO7mouGDQFInzJgcNup0DnYUrLiw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.806.0", + "@aws-sdk/types": "3.804.0", + "@smithy/fetch-http-handler": "^5.0.2", + "@smithy/node-http-handler": "^4.0.4", + "@smithy/property-provider": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/smithy-client": "^4.2.3", + "@smithy/types": "^4.2.0", + "@smithy/util-stream": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.806.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.806.0.tgz", + "integrity": "sha512-FogfbuYSEZgFxbNy0QcsBZHHe5mSv5HV3+JyB5n0kCyjOISCVCZD7gwxKdXjt8O1hXq5k5SOdQvydGULlB6rew==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.806.0", + "@aws-sdk/credential-provider-env": "3.806.0", + "@aws-sdk/credential-provider-http": "3.806.0", + "@aws-sdk/credential-provider-process": "3.806.0", + "@aws-sdk/credential-provider-sso": "3.806.0", + "@aws-sdk/credential-provider-web-identity": "3.806.0", + "@aws-sdk/nested-clients": "3.806.0", + "@aws-sdk/types": "3.804.0", + "@smithy/credential-provider-imds": "^4.0.2", + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.806.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.806.0.tgz", + "integrity": "sha512-fZX8xP2Kf0k70kDTog/87fh/M+CV0E2yujSw1cUBJhDSwDX3RlUahiJk7TpB/KGw6hEFESMd6+7kq3UzYuw3rg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.806.0", + "@aws-sdk/credential-provider-http": "3.806.0", + "@aws-sdk/credential-provider-ini": "3.806.0", + "@aws-sdk/credential-provider-process": "3.806.0", + "@aws-sdk/credential-provider-sso": "3.806.0", + "@aws-sdk/credential-provider-web-identity": "3.806.0", + "@aws-sdk/types": "3.804.0", + "@smithy/credential-provider-imds": "^4.0.2", + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.806.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.806.0.tgz", + "integrity": "sha512-8Y8GYEw/1e5IZRDQL02H6nsTDcRWid/afRMeWg+93oLQmbHcTtdm48tjis+7Xwqy+XazhMDmkbUht11QPTDJcQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.806.0", + "@aws-sdk/types": "3.804.0", + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.806.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.806.0.tgz", + "integrity": "sha512-hT9OBwCxWMPBydNhXm2gdNNzx5AJNheS9RglwDDvXWzQ9qDuRztjuMBilMSUMb0HF9K4IqQjYzGqczMuktz4qQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.806.0", + "@aws-sdk/core": "3.806.0", + "@aws-sdk/token-providers": "3.806.0", + "@aws-sdk/types": "3.804.0", + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.806.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.806.0.tgz", + "integrity": "sha512-XxaSY9Zd3D4ClUGENYMvi52ac5FuJPPAsvRtEfyrSdEpf6QufbMpnexWBZMYRF31h/VutgqtJwosGgNytpxMEg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.806.0", + "@aws-sdk/nested-clients": "3.806.0", + "@aws-sdk/types": "3.804.0", + "@smithy/property-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage": { + "version": "3.806.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.806.0.tgz", + "integrity": "sha512-8FjceMZWyqdu3jEa5iryqMH+XdR2iM6kcD/pcsv1JNQUfKicMcW6Db8dXVc29MdMw3f/3kokXqNLGvSKAl81SQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.0.2", + "@smithy/middleware-endpoint": "^4.1.3", + "@smithy/smithy-client": "^4.2.3", + "buffer": "5.6.0", + "events": "3.3.0", + "stream-browserify": "3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-s3": "^3.806.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "license": "MIT", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.806.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.806.0.tgz", + "integrity": "sha512-ACjuyKJw9OZl8z8HzPEaqn1o7ElVW94mowyoZvyUIDouwAPGqPGJbJ5V35qx1oDTFSAJX+N3O3AO6RyFc8nUhw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.804.0", + "@aws-sdk/util-arn-parser": "3.804.0", + "@smithy/node-config-provider": "^4.1.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "@smithy/util-config-provider": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.804.0.tgz", + "integrity": "sha512-YW1hySBolALMII6C8y7Z0CRG2UX1dGJjLEBNFeefhO/xP7ZuE1dvnmfJGaEuBMnvc3wkRS63VZ3aqX6sevM1CA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.804.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.806.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.806.0.tgz", + "integrity": "sha512-YEmuU2Nr/+blhi70gS38fnCe2IoL6OVVZXMp4MbzqZRUqeBbnxZhHQrd5YOiboJz7iq+g98xwFebHY167iejcg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@aws-crypto/crc32c": "5.2.0", + "@aws-crypto/util": "5.2.0", + "@aws-sdk/core": "3.806.0", + "@aws-sdk/types": "3.804.0", + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/node-config-provider": "^4.1.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-stream": "^4.2.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.804.0.tgz", + "integrity": "sha512-bum1hLVBrn2lJCi423Z2fMUYtsbkGI2s4N+2RI2WSjvbaVyMSv/WcejIrjkqiiMR+2Y7m5exgoKeg4/TODLDPQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.804.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.804.0.tgz", + "integrity": "sha512-AMtKnllIWKgoo7hiJfphLYotEwTERfjVMO2+cKAncz9w1g+bnYhHxiVhJJoR94y047c06X4PU5MsTxvdQ73Znw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.804.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.804.0.tgz", + "integrity": "sha512-w/qLwL3iq0KOPQNat0Kb7sKndl9BtceigINwBU7SpkYWX9L/Lem6f8NPEKrC9Tl4wDBht3Yztub4oRTy/horJA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.804.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.804.0.tgz", + "integrity": "sha512-zqHOrvLRdsUdN/ehYfZ9Tf8svhbiLLz5VaWUz22YndFv6m9qaAcijkpAOlKexsv3nLBMJdSdJ6GUTAeIy3BZzw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.804.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.806.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.806.0.tgz", + "integrity": "sha512-K1ssdovHH/kPN9EUS1LznwzoL+r89Cx8qAkp0K8MqdCQuBjZ0KRnjvo9nx69Vg5d/rg01VYTxomFUPXfcPtVXw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.806.0", + "@aws-sdk/types": "3.804.0", + "@aws-sdk/util-arn-parser": "3.804.0", + "@smithy/core": "^3.3.1", + "@smithy/node-config-provider": "^4.1.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/signature-v4": "^5.1.0", + "@smithy/smithy-client": "^4.2.3", + "@smithy/types": "^4.2.0", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-stream": "^4.2.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.804.0.tgz", + "integrity": "sha512-Tk8jK0gOIUBvEPTz/wwSlP1V70zVQ3QYqsLPAjQRMO6zfOK9ax31dln3MgKvFDJxBydS2tS3wsn53v+brxDxTA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.804.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.806.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.806.0.tgz", + "integrity": "sha512-XoIromVffgXnc+/mjlR2EVzQVIei3bPVtafIZNsHuEmUvIWJXiWsa2eJpt3BUqa0HF9YPknK7ommNEhqRb8ucg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.806.0", + "@aws-sdk/types": "3.804.0", + "@aws-sdk/util-endpoints": "3.806.0", + "@smithy/core": "^3.3.1", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients": { + "version": "3.806.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.806.0.tgz", + "integrity": "sha512-ua2gzpfQ9MF8Rny+tOAivowOWWvqEusez2rdcQK8jdBjA1ANd/0xzToSZjZh0ziN8Kl8jOhNnHbQJ0v6dT6+hg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.806.0", + "@aws-sdk/middleware-host-header": "3.804.0", + "@aws-sdk/middleware-logger": "3.804.0", + "@aws-sdk/middleware-recursion-detection": "3.804.0", + "@aws-sdk/middleware-user-agent": "3.806.0", + "@aws-sdk/region-config-resolver": "3.806.0", + "@aws-sdk/types": "3.804.0", + "@aws-sdk/util-endpoints": "3.806.0", + "@aws-sdk/util-user-agent-browser": "3.804.0", + "@aws-sdk/util-user-agent-node": "3.806.0", + "@smithy/config-resolver": "^4.1.1", + "@smithy/core": "^3.3.1", + "@smithy/fetch-http-handler": "^5.0.2", + "@smithy/hash-node": "^4.0.2", + "@smithy/invalid-dependency": "^4.0.2", + "@smithy/middleware-content-length": "^4.0.2", + "@smithy/middleware-endpoint": "^4.1.3", + "@smithy/middleware-retry": "^4.1.4", + "@smithy/middleware-serde": "^4.0.3", + "@smithy/middleware-stack": "^4.0.2", + "@smithy/node-config-provider": "^4.1.0", + "@smithy/node-http-handler": "^4.0.4", + "@smithy/protocol-http": "^5.1.0", + "@smithy/smithy-client": "^4.2.3", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.11", + "@smithy/util-defaults-mode-node": "^4.0.11", + "@smithy/util-endpoints": "^3.0.3", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-retry": "^4.0.3", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.806.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.806.0.tgz", + "integrity": "sha512-cuv5pX55JOlzKC/iLsB5nZ9eUyVgncim3VhhWHZA/KYPh7rLMjOEfZ+xyaE9uLJXGmzOJboFH7+YdTRdIcOgrg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.804.0", + "@smithy/node-config-provider": "^4.1.0", + "@smithy/types": "^4.2.0", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/s3-request-presigner": { + "version": "3.806.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.806.0.tgz", + "integrity": "sha512-/LjdkoMAr6T0EIIWVt444CJlaOCpYwjKxhTgZODSeRUPhKQxidBehg0TmXgQUc3oGUhGFPGCuQtFgLT0xvOSnw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/signature-v4-multi-region": "3.806.0", + "@aws-sdk/types": "3.804.0", + "@aws-sdk/util-format-url": "3.804.0", + "@smithy/middleware-endpoint": "^4.1.3", + "@smithy/protocol-http": "^5.1.0", + "@smithy/smithy-client": "^4.2.3", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.806.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.806.0.tgz", + "integrity": "sha512-IrbEnpKvG8d9rUWAvsF28g8qBlQ02FaOxn4cGXtTs0b0BGMK1M+cGQrYjJ7Ak08kIXDxBqsdIlZGsKYr+Ds9+w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-sdk-s3": "3.806.0", + "@aws-sdk/types": "3.804.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/signature-v4": "^5.1.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.806.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.806.0.tgz", + "integrity": "sha512-I6SxcsvV7yinJZmPgGullFHS0tsTKa7K3jEc5dmyCz8X+kZPfsWNffZmtmnCvWXPqMXWBvK6hVaxwomx79yeHA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/nested-clients": "3.806.0", + "@aws-sdk/types": "3.804.0", + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.804.0.tgz", + "integrity": "sha512-A9qnsy9zQ8G89vrPPlNG9d1d8QcKRGqJKqwyGgS0dclJpwy6d1EWgQLIolKPl6vcFpLoe6avLOLxr+h8ur5wpg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.804.0.tgz", + "integrity": "sha512-wmBJqn1DRXnZu3b4EkE6CWnoWMo1ZMvlfkqU5zPz67xx1GMaXlDCchFvKAXMjk4jn/L1O3tKnoFDNsoLV1kgNQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.806.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.806.0.tgz", + "integrity": "sha512-3YRRgZ+qFuWDdm5uAbxKsr65UAil4KkrFKua9f4m7Be3v24ETiFOOqhanFUIk9/WOtvzF7oFEiDjYKDGlwV2xg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.804.0", + "@smithy/types": "^4.2.0", + "@smithy/util-endpoints": "^3.0.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-format-url": { + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.804.0.tgz", + "integrity": "sha512-1nOwSg7B0bj5LFGor0udF/HSdvDuSCxP+NC0IuSOJ5RgJ2AphFo03pLtK2UwArHY5WWZaejAEz5VBND6xxOEhA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.804.0", + "@smithy/querystring-builder": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.804.0.tgz", + "integrity": "sha512-zVoRfpmBVPodYlnMjgVjfGoEZagyRF5IPn3Uo6ZvOZp24chnW/FRstH7ESDHDDRga4z3V+ElUQHKpFDXWyBW5A==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.804.0.tgz", + "integrity": "sha512-KfW6T6nQHHM/vZBBdGn6fMyG/MgX5lq82TDdX4HRQRRuHKLgBWGpKXqqvBwqIaCdXwWHgDrg2VQups6GqOWW2A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.804.0", + "@smithy/types": "^4.2.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.806.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.806.0.tgz", + "integrity": "sha512-Az2e4/gmPZ4BpB7QRj7U76I+fctXhNcxlcgsaHnMhvt+R30nvzM2EhsyBUvsWl8+r9bnLeYt9BpvEZeq2ANDzA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.806.0", + "@aws-sdk/types": "3.804.0", + "@smithy/node-config-provider": "^4.1.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.804.0.tgz", + "integrity": "sha512-JbGWp36IG9dgxtvC6+YXwt5WDZYfuamWFtVfK6fQpnmL96dx+GUPOXPKRWdw67WLKf2comHY28iX2d3z35I53Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@babel/code-frame": { "version": "7.26.2", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", @@ -3711,6 +4629,27 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@iconify/react": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@iconify/react/-/react-6.0.0.tgz", + "integrity": "sha512-eqNscABVZS8eCpZLU/L5F5UokMS9mnCf56iS1nM9YYHdH8ZxqZL9zyjSwW60IOQFsXZkilbBiv+1paMXBhSQnw==", + "license": "MIT", + "dependencies": { + "@iconify/types": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/cyberalien" + }, + "peerDependencies": { + "react": ">=16" + } + }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", + "license": "MIT" + }, "node_modules/@img/sharp-darwin-arm64": { "version": "0.34.1", "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.1.tgz", @@ -8781,6 +9720,22 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/@payloadcms/plugin-cloud-storage": { + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/@payloadcms/plugin-cloud-storage/-/plugin-cloud-storage-3.37.0.tgz", + "integrity": "sha512-iJVjAIQoFoVKWLdG1d2/HvXHcdlQ2alFR2siXUsyTRC0JDAbJkIgIQJvCu0goMS8fb65UnikpSeI9iYKRMoqpQ==", + "license": "MIT", + "dependencies": { + "@payloadcms/ui": "3.37.0", + "find-node-modules": "^2.1.3", + "range-parser": "^1.2.1" + }, + "peerDependencies": { + "payload": "3.37.0", + "react": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020", + "react-dom": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020" + } + }, "node_modules/@payloadcms/richtext-lexical": { "version": "3.37.0", "resolved": "https://registry.npmjs.org/@payloadcms/richtext-lexical/-/richtext-lexical-3.37.0.tgz", @@ -8857,6 +9812,24 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/@payloadcms/storage-s3": { + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/@payloadcms/storage-s3/-/storage-s3-3.37.0.tgz", + "integrity": "sha512-9lygwru7gR0mlbtWK4oMnXhENPHbUAmppW3MKqyAIUN2mpAj/Du3uc3XqyfzBOQGhPofUQ+nN44GURujeRha5g==", + "license": "MIT", + "dependencies": { + "@aws-sdk/client-s3": "^3.614.0", + "@aws-sdk/lib-storage": "^3.614.0", + "@aws-sdk/s3-request-presigner": "^3.614.0", + "@payloadcms/plugin-cloud-storage": "3.37.0" + }, + "engines": { + "node": "^18.20.2 || >=20.9.0" + }, + "peerDependencies": { + "payload": "3.37.0" + } + }, "node_modules/@payloadcms/translations": { "version": "3.37.0", "resolved": "https://registry.npmjs.org/@payloadcms/translations/-/translations-3.37.0.tgz", @@ -9842,6 +10815,723 @@ "@sinonjs/commons": "^3.0.0" } }, + "node_modules/@smithy/abort-controller": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.2.tgz", + "integrity": "sha512-Sl/78VDtgqKxN2+1qduaVE140XF+Xg+TafkncspwM4jFP/LHr76ZHmIY/y3V1M0mMLNk+Je6IGbzxy23RSToMw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.0.0.tgz", + "integrity": "sha512-+sKqDBQqb036hh4NPaUiEkYFkTUGYzRsn3EuFhyfQfMy6oGHEUJDurLP9Ufb5dasr/XiAmPNMr6wa9afjQB+Gw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader-native": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.0.0.tgz", + "integrity": "sha512-R9wM2yPmfEMsUmlMlIgSzOyICs0x9uu7UTHoccMyt7BWw8shcGM8HqB355+BZCPBcySvbTYMs62EgEQkNxz2ig==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-base64": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.1.2.tgz", + "integrity": "sha512-7r6mZGwb5LmLJ+zPtkLoznf2EtwEuSWdtid10pjGl/7HefCE4mueOkrfki8JCUm99W6UfP47/r3tbxx9CfBN5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.1.1", + "@smithy/types": "^4.2.0", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/core": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.3.1.tgz", + "integrity": "sha512-W7AppgQD3fP1aBmo8wWo0id5zeR2/aYRy067vZsDVaa6v/mdhkg6DxXwEVuSPjZl+ZnvWAQbUMCd5ckw38+tHQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^4.0.3", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-stream": "^4.2.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.4.tgz", + "integrity": "sha512-jN6M6zaGVyB8FmNGG+xOPQB4N89M1x97MMdMnm1ESjljLS3Qju/IegQizKujaNcy2vXAvrz0en8bobe6E55FEA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.1.1", + "@smithy/property-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-codec": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.0.2.tgz", + "integrity": "sha512-p+f2kLSK7ZrXVfskU/f5dzksKTewZk8pJLPvER3aFHPt76C2MxD9vNatSfLzzQSQB4FNO96RK4PSXfhD1TTeMQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^4.2.0", + "@smithy/util-hex-encoding": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-browser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.2.tgz", + "integrity": "sha512-CepZCDs2xgVUtH7ZZ7oDdZFH8e6Y2zOv8iiX6RhndH69nlojCALSKK+OXwZUgOtUZEUaZ5e1hULVCHYbCn7pug==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.1.0.tgz", + "integrity": "sha512-1PI+WPZ5TWXrfj3CIoKyUycYynYJgZjuQo8U+sphneOtjsgrttYybdqESFReQrdWJ+LKt6NEdbYzmmfDBmjX2A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-node": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.2.tgz", + "integrity": "sha512-C5bJ/C6x9ENPMx2cFOirspnF9ZsBVnBMtP6BdPl/qYSuUawdGQ34Lq0dMcf42QTjUZgWGbUIZnz6+zLxJlb9aw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-universal": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.2.tgz", + "integrity": "sha512-St8h9JqzvnbB52FtckiHPN4U/cnXcarMniXRXTKn0r4b4XesZOGiAyUdj1aXbqqn1icSqBlzzUsCl6nPB018ng==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-codec": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.2.tgz", + "integrity": "sha512-+9Dz8sakS9pe7f2cBocpJXdeVjMopUDLgZs1yWeu7h++WqSbjUYv/JAJwKwXw1HV6gq1jyWjxuyn24E2GhoEcQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.1.0", + "@smithy/querystring-builder": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/util-base64": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-blob-browser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.0.2.tgz", + "integrity": "sha512-3g188Z3DyhtzfBRxpZjU8R9PpOQuYsbNnyStc/ZVS+9nVX1f6XeNOa9IrAh35HwwIZg+XWk8bFVtNINVscBP+g==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/chunked-blob-reader": "^5.0.0", + "@smithy/chunked-blob-reader-native": "^4.0.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-node": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.2.tgz", + "integrity": "sha512-VnTpYPnRUE7yVhWozFdlxcYknv9UN7CeOqSrMH+V877v4oqtVYuoqhIhtSjmGPvYrYnAkaM61sLMKHvxL138yg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-stream-node": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.0.2.tgz", + "integrity": "sha512-POWDuTznzbIwlEXEvvXoPMS10y0WKXK790soe57tFRfvf4zBHyzE529HpZMqmDdwG9MfFflnyzndUQ8j78ZdSg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.2.tgz", + "integrity": "sha512-GatB4+2DTpgWPday+mnUkoumP54u/MDM/5u44KF9hIu8jF0uafZtQLcdfIKkIcUNuF/fBojpLEHZS/56JqPeXQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz", + "integrity": "sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/md5-js": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.0.2.tgz", + "integrity": "sha512-Hc0R8EiuVunUewCse2syVgA2AfSRco3LyAv07B/zCOMa+jpXI9ll+Q21Nc6FAlYPcpNcAXqBzMhNs1CD/pP2bA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.2.tgz", + "integrity": "sha512-hAfEXm1zU+ELvucxqQ7I8SszwQ4znWMbNv6PLMndN83JJN41EPuS93AIyh2N+gJ6x8QFhzSO6b7q2e6oClDI8A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.4.tgz", + "integrity": "sha512-qWyYvszzvDjT2AxRvEpNhnMTo8QX9MCAtuSA//kYbXewb+2mEGQCk1UL4dNIrKLcF5KT11dOJtxFYT0kzajq5g==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.3.1", + "@smithy/middleware-serde": "^4.0.3", + "@smithy/node-config-provider": "^4.1.1", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", + "@smithy/util-middleware": "^4.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.5.tgz", + "integrity": "sha512-eQguCTA2TRGyg4P7gDuhRjL2HtN5OKJXysq3Ufj0EppZe4XBmSyKIvVX9ws9KkD3lkJskw1tfE96wMFsiUShaw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.1.1", + "@smithy/protocol-http": "^5.1.0", + "@smithy/service-error-classification": "^4.0.3", + "@smithy/smithy-client": "^4.2.4", + "@smithy/types": "^4.2.0", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-retry": "^4.0.3", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.3.tgz", + "integrity": "sha512-rfgDVrgLEVMmMn0BI8O+8OVr6vXzjV7HZj57l0QxslhzbvVfikZbVfBVthjLHqib4BW44QhcIgJpvebHlRaC9A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.2.tgz", + "integrity": "sha512-eSPVcuJJGVYrFYu2hEq8g8WWdJav3sdrI4o2c6z/rjnYDd3xH9j9E7deZQCzFn4QvGPouLngH3dQ+QVTxv5bOQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.1.1.tgz", + "integrity": "sha512-1slS5jf5icHETwl5hxEVBj+mh6B+LbVW4yRINsGtUKH+nxM5Pw2H59+qf+JqYFCHp9jssG4vX81f5WKnjMN3Vw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.4.tgz", + "integrity": "sha512-/mdqabuAT3o/ihBGjL94PUbTSPSRJ0eeVTdgADzow0wRJ0rN4A27EOrtlK56MYiO1fDvlO3jVTCxQtQmK9dZ1g==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/querystring-builder": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.2.tgz", + "integrity": "sha512-wNRoQC1uISOuNc2s4hkOYwYllmiyrvVXWMtq+TysNRVQaHm4yoafYQyjN/goYZS+QbYlPIbb/QRjaUZMuzwQ7A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.1.0.tgz", + "integrity": "sha512-KxAOL1nUNw2JTYrtviRRjEnykIDhxc84qMBzxvu1MUfQfHTuBlCG7PA6EdVwqpJjH7glw7FqQoFxUJSyBQgu7g==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.2.tgz", + "integrity": "sha512-NTOs0FwHw1vimmQM4ebh+wFQvOwkEf/kQL6bSM1Lock+Bv4I89B3hGYoUEPkmvYPkDKyp5UdXJYu+PoTQ3T31Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "@smithy/util-uri-escape": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.2.tgz", + "integrity": "sha512-v6w8wnmZcVXjfVLjxw8qF7OwESD9wnpjp0Dqry/Pod0/5vcEA3qxCr+BhbOHlxS8O+29eLpT3aagxXGwIoEk7Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.3.tgz", + "integrity": "sha512-FTbcajmltovWMjj3tksDQdD23b2w6gH+A0DYA1Yz3iSpjDj8fmkwy62UnXcWMy4d5YoMoSyLFHMfkEVEzbiN8Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.2.tgz", + "integrity": "sha512-J9/gTWBGVuFZ01oVA6vdb4DAjf1XbDhK6sLsu3OS9qmLrS6KB5ygpeHiM3miIbj1qgSJ96GYszXFWv6ErJ8QEw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.1.0.tgz", + "integrity": "sha512-4t5WX60sL3zGJF/CtZsUQTs3UrZEDO2P7pEaElrekbLqkWPYkgqNW1oeiNYC6xXifBnT9dVBOnNQRvOE9riU9w==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-uri-escape": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.2.4.tgz", + "integrity": "sha512-oolSEpr/ABUtVmFMdNgi6sSXsK4csV9n4XM9yXgvDJGRa32tQDUdv9s+ztFZKccay1AiTWLSGsyDj2xy1gsv7Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.3.1", + "@smithy/middleware-endpoint": "^4.1.4", + "@smithy/middleware-stack": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "@smithy/util-stream": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.2.0.tgz", + "integrity": "sha512-7eMk09zQKCO+E/ivsjQv+fDlOupcFUCSC/L2YUPgwhvowVGWbPQHjEFcmjt7QQ4ra5lyowS92SV53Zc6XD4+fg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.2.tgz", + "integrity": "sha512-Bm8n3j2ScqnT+kJaClSVCMeiSenK6jVAzZCNewsYWuZtnBehEz4r2qP0riZySZVfzB+03XZHJeqfmJDkeeSLiQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz", + "integrity": "sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz", + "integrity": "sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz", + "integrity": "sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz", + "integrity": "sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz", + "integrity": "sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.12.tgz", + "integrity": "sha512-0vPKiC+rXWMq397tsa/RFcO/kJ1UsibgNCXScMsRwzm9WMT4QjGf43zVPWZ5hPLu3z/1XddiZFIlKcu2j/yUuQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.0.2", + "@smithy/smithy-client": "^4.2.4", + "@smithy/types": "^4.2.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.12.tgz", + "integrity": "sha512-zCx9noceM3Pw2jvcJ3w3RbvKnPe3lCo6txH9ksZj6CeRZPkvRZPLXmKVSOvDr9QQP3VRq/WnBLd+LTZAL7+0IQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^4.1.2", + "@smithy/credential-provider-imds": "^4.0.4", + "@smithy/node-config-provider": "^4.1.1", + "@smithy/property-provider": "^4.0.2", + "@smithy/smithy-client": "^4.2.4", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-endpoints": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.4.tgz", + "integrity": "sha512-VfFATC1bmZLV2858B/O1NpMcL32wYo8DPPhHxYxDCodDl3f3mSZ5oJheW1IF91A0EeAADz2WsakM/hGGPGNKLg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.1.1", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz", + "integrity": "sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.2.tgz", + "integrity": "sha512-6GDamTGLuBQVAEuQ4yDQ+ti/YINf/MEmIegrEeg7DdB/sld8BX1lqt9RRuIcABOhAGTA50bRbPzErez7SlDtDQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.3.tgz", + "integrity": "sha512-DPuYjZQDXmKr/sNvy9Spu8R/ESa2e22wXZzSAY6NkjOLj6spbIje/Aq8rT97iUMdDj0qHMRIe+bTxvlU74d9Ng==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/service-error-classification": "^4.0.3", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.2.0.tgz", + "integrity": "sha512-Vj1TtwWnuWqdgQI6YTUF5hQ/0jmFiOYsc51CSMgj7QfyO+RF4EnT2HNjoviNlOOmgzgvf3f5yno+EiC4vrnaWQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^5.0.2", + "@smithy/node-http-handler": "^4.0.4", + "@smithy/types": "^4.2.0", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz", + "integrity": "sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz", + "integrity": "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-waiter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.0.3.tgz", + "integrity": "sha512-JtaY3FxmD+te+KSI2FJuEcfNC9T/DGGVf551babM7fAaXhjJUt7oSYurH1Devxd2+BOSUACCgt3buinx4UnmEA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@standard-schema/utils": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz", @@ -15561,7 +17251,6 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, "funding": [ { "type": "github", @@ -15796,6 +17485,12 @@ "dev": true, "license": "ISC" }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", + "license": "MIT" + }, "node_modules/boxen": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.0.tgz", @@ -18269,6 +19964,15 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/detect-libc": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", @@ -20298,7 +22002,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.8.x" @@ -20341,7 +22044,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", - "dev": true, "license": "MIT", "dependencies": { "homedir-polyfill": "^1.0.1" @@ -20677,6 +22379,28 @@ ], "license": "BSD-3-Clause" }, + "node_modules/fast-xml-parser": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", + "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/fastq": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", @@ -20997,6 +22721,16 @@ "node": ">=8" } }, + "node_modules/find-node-modules": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.1.3.tgz", + "integrity": "sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==", + "license": "MIT", + "dependencies": { + "findup-sync": "^4.0.0", + "merge": "^2.1.1" + } + }, "node_modules/find-pkg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/find-pkg/-/find-pkg-2.0.0.tgz", @@ -21074,6 +22808,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/findup-sync": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", + "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", + "license": "MIT", + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^4.0.2", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", @@ -21777,7 +23526,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, "license": "MIT", "dependencies": { "global-prefix": "^1.0.1", @@ -21792,7 +23540,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", - "dev": true, "license": "MIT", "dependencies": { "expand-tilde": "^2.0.2", @@ -21809,7 +23556,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -22206,7 +23952,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, "license": "MIT", "dependencies": { "parse-passwd": "^1.0.0" @@ -22733,14 +24478,12 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, "license": "ISC" }, "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, "license": "ISC" }, "node_modules/inspect-with-kind": { @@ -23472,7 +25215,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -23502,7 +25244,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, "license": "ISC" }, "node_modules/isobject": { @@ -26699,6 +28440,12 @@ "map-or-similar": "^1.5.0" } }, + "node_modules/merge": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz", + "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==", + "license": "MIT" + }, "node_modules/merge-descriptors": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", @@ -27257,7 +29004,6 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, "license": "MIT", "dependencies": { "braces": "^3.0.3", @@ -27271,7 +29017,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -29460,7 +31205,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -31476,7 +33220,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -31829,7 +33572,6 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -32169,7 +33911,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", - "dev": true, "license": "MIT", "dependencies": { "expand-tilde": "^2.0.0", @@ -32431,7 +34172,6 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, "funding": [ { "type": "github", @@ -34140,6 +35880,16 @@ } } }, + "node_modules/stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "license": "MIT", + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, "node_modules/stream-shift": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", @@ -34223,7 +35973,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" @@ -34536,6 +36285,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strnum": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", + "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, "node_modules/strtok3": { "version": "9.1.1", "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-9.1.1.tgz", @@ -36644,7 +38405,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, "license": "MIT" }, "node_modules/utils-merge": { @@ -36661,7 +38421,6 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "dev": true, "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" diff --git a/package.json b/package.json index 83c78d8..6069068 100644 --- a/package.json +++ b/package.json @@ -28,10 +28,13 @@ "dependencies": { "@ant-design/icons": "^6.0.0", "@hookform/resolvers": "^5.0.1", + "@iconify/react": "^6.0.0", "@payloadcms/db-postgres": "^3.37.0", "@payloadcms/next": "^3.37.0", "@payloadcms/richtext-lexical": "^3.37.0", + "@payloadcms/storage-s3": "^3.37.0", "@radix-ui/react-slot": "^1.2.0", + "@smithy/node-http-handler": "^4.0.4", "@tanstack/react-query": "^5.74.4", "@tanstack/react-store": "^0.7.0", "@tanstack/react-table": "^8.21.2",