diff --git a/.github/prompts/audit-docs.md b/.github/prompts/audit-docs.md
index e956219..26a5a11 100644
--- a/.github/prompts/audit-docs.md
+++ b/.github/prompts/audit-docs.md
@@ -11,7 +11,7 @@ labels:
---
**Purpose:**
-While reviewing this #activePullRequest, analyze the entire #codebase and ensure the #file:docs directory is accurate, up to date, and fully aligned with the current implementation.
+While reviewing this #activePullRequest #changes, analyze the entire #codebase and ensure the #file:docs directory is accurate, up to date, and fully aligned with the current implementation.
---
@@ -35,6 +35,19 @@ While reviewing this #activePullRequest, analyze the entire #codebase and ensure
---
+---
+
+## Execution Order (IMPORTANT)
+
+1. **Audit `docs/` first**
+2. **Only if `docs/` is already accurate**, then:
+ - Audit markdown files elsewhere in the repository (root or subdirectories)
+ - Audit in-code documentation/comments where clarity or accuracy is lacking
+
+Do **not** skip ahead.
+
+---
+
## What to Do
### 1. Audit the `docs/` directory
diff --git a/docs/architecture/components/avatar.md b/docs/architecture/components/avatar.md
new file mode 100644
index 0000000..a3d2b05
--- /dev/null
+++ b/docs/architecture/components/avatar.md
@@ -0,0 +1,205 @@
+# Banner & Avatar Components
+
+This document details the Banner and Avatar components that create the introductory section of the portfolio.
+
+## Overview
+
+The Banner component displays the header section with profile information and an animated avatar that includes an Easter egg feature.
+
+## Component Structure
+
+```mermaid
+flowchart TD
+ Banner[Banner Component] -->|Contains| Avatar[Avatar Component]
+ Banner -->|Displays| Title[Title & Subtitle]
+ Avatar -->|Hover| Sneeze[Sneeze Animation]
+ Avatar -->|6x Sneeze| AAAAHHHH[Easter Egg Trigger]
+ AAAAHHHH -->|Calls| Helper[aaaahhhh helper]
+ Helper -->|Transforms| Page[Entire Page]
+```
+
+## Banner Component
+
+Location: [`src/components/banner/Banner.tsx`](../../src/components/banner/Banner.tsx)
+
+**Purpose:** Displays the introductory section with profile image and text.
+
+**Key Features:**
+
+- Responsive layout using MUI Grid/Stack
+- Profile avatar with animations
+- Title and subtitle text
+- Accessibility attributes
+
+**Usage Example:**
+
+```tsx
+import Banner from '@components/banner/Banner';
+
+;
+```
+
+## Avatar Component
+
+Location: [`src/components/banner/Avatar.tsx`](../../src/components/banner/Avatar.tsx)
+
+**Purpose:** Displays an animated profile picture with an interactive sneeze animation and Easter egg.
+
+### Key Features
+
+1. **Sneeze Animation:** Triggered every 5 hovers
+2. **Easter Egg:** After 6 sneezes, triggers the "AAAAHHHH" transformation
+3. **Analytics Tracking:** Logs user interactions
+4. **Image Optimization:** Uses Next.js Image component
+
+### State Management
+
+```typescript
+const hoverProfilePic = useRef(0); // Hover count
+const totalSneeze = useRef(0); // Total sneezes
+const sneezing = useRef(false); // Animation lock
+const [image, setImage] = useState(imageList['default']); // Current image
+```
+
+### Image Assets
+
+```typescript
+const imageList = {
+ default: '/images/drawn/profile_pic_drawn.webp',
+ sneeze_1: '/images/drawn/profile_pic_drawn_2.webp',
+ sneeze_2: '/images/drawn/profile_pic_drawn_3.webp',
+ sneeze_3: '/images/drawn/profile_pic_drawn_4.webp',
+};
+```
+
+### Sneeze Animation Sequence
+
+```typescript
+handleTriggerSneeze() {
+ hoverProfilePic.current += 1;
+
+ if (hoverProfilePic.current % 5 === 0 && !sneezing.current) {
+ totalSneeze.current += 1;
+
+ if (totalSneeze.current >= 6) {
+ logAnalyticsEvent('trigger_aaaahhhh', {...});
+ aaaahhhh(); // Transform entire page
+ } else {
+ sneezing.current = true;
+
+ // Animate through sneeze sequence
+ setImage('sneeze_1');
+ setTimeout(() => setImage('sneeze_2'), 500);
+ setTimeout(() => setImage('sneeze_3'), 800);
+ setTimeout(() => {
+ setImage('default');
+ sneezing.current = false;
+ }, 1800);
+
+ logAnalyticsEvent('trigger_sneeze', {...});
+ }
+ }
+}
+```
+
+### AAAAHHHH Easter Egg
+
+When the avatar sneezes 6 times, it triggers [`aaaahhhh()`](../../src/helpers/aaaahhhh.ts) which:
+
+1. Converts all text to "AAAAHHHH" format
+2. Replaces all images with the AAAAHHHH image
+3. Changes background images
+4. Creates a playful page transformation
+
+See [AAAAHHHH Helper Documentation](../helpers.md#aaaahhhh-helper) for details.
+
+### Analytics Integration
+
+The component logs two event types:
+
+```typescript
+// Sneeze event
+logAnalyticsEvent('trigger_sneeze', {
+ name: 'trigger_sneeze',
+ type: 'hover',
+});
+
+// Easter egg event
+logAnalyticsEvent('trigger_aaaahhhh', {
+ name: 'trigger_aaaahhhh',
+ type: 'hover',
+});
+```
+
+### Usage Example
+
+```tsx
+import Avatar from '@components/banner/Avatar';
+
+; // No props required
+```
+
+### Performance Considerations
+
+- **Debounced Hover:** Uses `lodash.debounce` to prevent rapid triggering
+- **Ref-based State:** Uses refs for counters to avoid unnecessary re-renders
+- **Animation Lock:** Prevents overlapping sneeze animations
+- **Image Preloading:** All sneeze images should be optimized as WebP
+
+### Accessibility
+
+```tsx
+
+
+
+```
+
+## Component Interaction
+
+```mermaid
+sequenceDiagram
+ participant User
+ participant Avatar
+ participant State
+ participant Helper
+ participant Analytics
+
+ User->>Avatar: Hover (5th time)
+ Avatar->>State: Increment counter
+ State->>Avatar: Trigger sneeze
+ Avatar->>Avatar: Animate sneeze sequence
+ Avatar->>Analytics: Log sneeze event
+
+ User->>Avatar: Hover (6th sneeze)
+ Avatar->>Helper: Call aaaahhhh()
+ Helper->>Helper: Transform page
+ Avatar->>Analytics: Log AAAAHHHH event
+```
+
+## Testing
+
+Test file: [`src/components/banner/Avatar.test.tsx`](../../src/components/banner/Avatar.test.tsx)
+
+**Test Coverage:**
+
+- Component renders
+- Image changes on hover
+- Sneeze animation triggers
+- Easter egg activation
+- Analytics event logging
+
+## Related Documentation
+
+- [Helpers: AAAAHHHH](./helpers.md#aaaahhhh-helper)
+- [Components Overview](./components/index.md)
+- [Firebase Analytics](./configs.md#firebase-configuration-and-usage)
+
+---
+
+💡 **Tip:** Try hovering over the profile picture to discover the sneeze animation and Easter egg!
diff --git a/docs/architecture/components/index.md b/docs/architecture/components/index.md
index 31cd84a..1757c2d 100644
--- a/docs/architecture/components/index.md
+++ b/docs/architecture/components/index.md
@@ -2,54 +2,252 @@
This document describes the internal architecture, relationships, and usage of major UI components in the AlexJSully Portfolio project. Components are modular, reusable, and styled with Material-UI and Emotion.
-## 📦 Component List & Hierarchy
+## Component List & Hierarchy
-- [ProjectsGrid](./projects.md): Displays a grid of projects.
-- [Publications](./publications.md): Lists publications.
-- [Footer](./socials.md): Shows social media links.
-- [Navbar](../architecture/index.md): Navigation bar (see architecture for layout details).
-- [Banner, CookieSnackbar, StarsBackground]: Utility and visual components.
+### Core Components
+
+- [Navbar](./navbar.md): Top navigation bar with smooth scrolling
+- [Banner & Avatar](./avatar.md): Header section with animated profile picture
+- [ProjectsGrid](./projects.md): Displays project cards in a grid
+- [Publications](./publications.md): Lists publications with metadata
+- [Footer](./socials.md): Social media links and copyright
+- [StarsBackground](./stars.md): Animated starfield background
+- [CookieSnackbar](./cookie-snackbar.md): Cookie consent notification
+- [ServiceWorkerRegister](../service-worker.md): PWA service worker registration
### Component Hierarchy
```mermaid
flowchart TD
- App --> Navbar
- App --> Banner
- App --> ProjectsGrid
- App --> Publications
- App --> Footer
- App --> CookieSnackbar
- App --> StarsBackground
+ RootLayout[Root Layout] --> Navbar
+ RootLayout --> Main[Main Content]
+ RootLayout --> Footer
+ RootLayout --> ServiceWorkerRegister
+
+ Main --> Banner
+ Main --> ProjectsGrid
+ Main --> Publications
+ Main --> StarsBackground
+ Main --> CookieSnackbar
+
+ Banner --> Avatar
+
+ ProjectsGrid --> ProjectCards[Project Cards]
+ Publications --> PublicationCards[Publication Cards]
+ Footer --> SocialLinks[Social Links]
+```
+
+## Component Details
+
+### Navbar
+
+**Location:** [`src/components/navbar/Navbar.tsx`](../../src/components/navbar/Navbar.tsx)
+
+Top navigation bar with smooth scrolling to page sections.
+
+**Features:**
+
+- Smooth scroll navigation
+- Firebase Analytics tracking
+- Responsive design
+- Path-aware behavior
+
+**See:** [Navbar Documentation](./navbar.md)
+
+### Banner & Avatar
+
+**Location:** [`src/components/banner/Banner.tsx`](../../src/components/banner/Banner.tsx), [`Avatar.tsx`](../../src/components/banner/Avatar.tsx)
+
+Header section with animated profile picture featuring a sneeze animation and Easter egg.
+
+**Features:**
+
+- Interactive avatar with sneeze animation
+- Easter egg trigger (6 sneezes activates AAAAHHHH transformation)
+- Analytics tracking
+- Image optimization
+
+**See:** [Banner & Avatar Documentation](./avatar.md)
+
+### ProjectsGrid
+
+**Location:** [`src/components/projects/ProjectsGrid.tsx`](../../src/components/projects/ProjectsGrid.tsx)
+
+Displays project cards in a responsive grid layout.
+
+**Features:**
+
+- Grid layout with MUI
+- Project thumbnails and metadata
+- External links with icons
+- YouTube video embeds
+- Analytics tracking
+- Responsive design
+
+**See:** [Projects Documentation](./projects.md)
+
+### Publications
+
+**Location:** [`src/components/publications/Publications.tsx`](../../src/components/publications/Publications.tsx)
+
+Lists publications with authors, abstracts, and metadata.
+
+**Features:**
+
+- Publication cards with metadata
+- DOI and journal links
+- Related project linking
+- Analytics tracking
+
+**See:** [Publications Documentation](./publications.md)
+
+### Footer
+
+**Location:** [`src/components/footer/Footer.tsx`](../../src/components/footer/Footer.tsx)
+
+Social media links and copyright information.
+
+**Features:**
+
+- Social media icon buttons
+- Tooltips with platform names
+- Responsive grid layout
+- Analytics tracking
+
+**See:** [Socials Documentation](./socials.md)
+
+### StarsBackground
+
+**Location:** [`src/components/Stars/StarsBackground.tsx`](../../src/components/Stars/StarsBackground.tsx)
+
+Animated starfield background with twinkling stars.
+
+**Features:**
+
+- Dynamic star generation (50-100 stars)
+- CSS animations for twinkling
+- Fixed position background
+- Performance optimized
+
+**See:** [Stars Documentation](./stars.md)
+
+### CookieSnackbar
+
+**Location:** [`src/components/cookie-snackbar/CookieSnackbar.tsx`](../../src/components/cookie-snackbar/CookieSnackbar.tsx)
+
+Cookie consent notification with localStorage persistence.
+
+**Features:**
+
+- Cookie consent management
+- localStorage persistence
+- MUI Snackbar integration
+- Privacy compliance
+
+**See:** [Cookie Snackbar Documentation](./cookie-snackbar.md)
+
+### ServiceWorkerRegister
+
+**Location:** [`src/components/ServiceWorkerRegister.tsx`](../../src/components/ServiceWorkerRegister.tsx)
+
+Client component that registers the service worker for PWA functionality.
+
+**Features:**
+
+- Service worker registration
+- Error handling
+- Browser compatibility check
+
+**See:** [Service Worker Documentation](../service-worker.md)
+
+## Relationships & Composition
+
+Components are composed in the [`GeneralLayout`](../../src/layouts/GeneralLayout.tsx):
+
+```tsx
+export default function GeneralLayout({ children }) {
+ return (
+
+
+
+ {children}
+
+
+
+
+
+ );
+}
```
-## 🔍 Component Details
+Data flow:
+
+```mermaid
+sequenceDiagram
+ participant Page
+ participant Data
+ participant Component
+ participant Firebase
-- **Navbar:** Top navigation bar, links to sections. Handles navigation, accessibility, and logs analytics via `logAnalyticsEvent`.
-- **Banner:** Header section, may include avatar and intro. Displays profile and branding.
-- **ProjectsGrid:** Displays project cards in a grid. Located at `src/components/projects/ProjectsGrid.tsx`. Handles filtering, analytics (uses `logAnalyticsEvent`), and responsive layout.
-- **Publications:** Lists publications with metadata. Located at `src/components/publications/Publications.tsx`. Supports external links and logs analytics on interactions.
-- **Footer:** Social media links and copyright. Located at `src/components/footer/Footer.tsx`. Includes contact and resume links and logs analytics.
-- **CookieSnackbar:** Shows cookie consent. Manages cookie state and user interaction.
-- **StarsBackground:** Visual background effect. Renders animated stars for visual appeal.
+ Page->>Data: Import projects, publications, socials
+ Data-->>Page: Static data arrays
+ Page->>Component: Pass data as props
+ Component->>Component: Render UI
+ Component->>Firebase: Log analytics events
+ Firebase-->>Component: Event logged
+```
-## 🏗️ Relationships & Composition
+## How Components Work
-- Components are composed in page layouts (see `GeneralLayout.tsx`).
-- Data is passed via props or imported from `src/data/`.
-- Styling is handled via MUI and Emotion.
-- Utility components (Banner, CookieSnackbar, StarsBackground) are used for branding and user experience.
+**Component Organization:**
-## 🧩 How Components Work
+- Located in `src/components/`
+- Grouped by feature (e.g., `banner/`, `projects/`)
+- TypeScript with strong typing
+- Path aliases for clean imports (`@components/`)
-Components are located in `src/components/` and are imported using TypeScript path aliases (see `tsconfig.json`).
-Each component is tested with Jest and/or Cypress for reliability.
+**Data Integration:**
-## 🔗 Related Docs
+- Import from `src/data/`
+- TypeScript interfaces for type safety
+- Props for component composition
-- [Architecture Overview](../architecture/index.md)
-- [Usage Guides](../usage/index.md)
+**Styling:**
+
+- Material-UI (MUI) components
+- Emotion for CSS-in-JS
+- Responsive design with MUI Grid/Stack
+- Theme colors and typography
+
+**Testing:**
+
+- Jest for unit tests
+- Cypress for E2E tests
+- Test files colocated with components
+
+## Component Data Flow
+
+```mermaid
+flowchart LR
+ Data[src/data/] -->|Import| Page[page.tsx]
+ Page -->|Props| ProjectsGrid
+ Page -->|Props| Publications
+ Page -->|Static| Footer
+ Page -->|Static| Navbar
+ Page -->|Static| Avatar
+
+ Navbar -->|Events| Firebase[Firebase]
+ Avatar -->|Events| Firebase
+ ProjectsGrid -->|Events| Firebase
+ Publications -->|Events| Firebase
+ Footer -->|Events| Firebase
+```
----
+## Related Docs
-💡 **Tip:** See each component's documentation for usage examples, diagrams, and integration details.
+- [Architecture Overview](../index.md)
+- [Data Architecture](../data.md)
+- [GeneralLayout](../layouts.md)
+- [Firebase Configuration](../configs.md)
diff --git a/docs/architecture/components/navbar.md b/docs/architecture/components/navbar.md
new file mode 100644
index 0000000..38af186
--- /dev/null
+++ b/docs/architecture/components/navbar.md
@@ -0,0 +1,260 @@
+# Navbar Component Documentation
+
+This document details the navigation bar component that provides site-wide navigation and smooth scrolling.
+
+## Overview
+
+The Navbar component is a fixed-position navigation bar located in [`src/components/navbar/Navbar.tsx`](../../src/components/navbar/Navbar.tsx). It provides navigation links with smooth scrolling behavior and analytics tracking.
+
+## Component Structure
+
+```mermaid
+flowchart LR
+ Navbar[Navbar] -->|Contains| Home[Home Button]
+ Navbar -->|Contains| Projects[Projects Link]
+ Navbar -->|Contains| Pubs[Publications Link]
+ Navbar -->|Contains| Resume[Resume Link]
+
+ Home -->|Scroll to| Top[Page Top]
+ Projects -->|Scroll to| ProjectsGrid[Projects Grid]
+ Pubs -->|Scroll to| PublicationsList[Publications]
+ Resume -->|Opens| PDF[Resume PDF]
+```
+
+## Key Features
+
+### 1. Smooth Scrolling Navigation
+
+The navbar uses smooth scrolling to navigate to page sections:
+
+```typescript
+onClick={(e) => {
+ logAnalyticsEvent('navbar_projects', {
+ name: 'navbar_projects',
+ type: 'click',
+ });
+
+ if (pathname === '/') {
+ e.preventDefault();
+ document.getElementById('projects-grid')?.scrollIntoView({ behavior: 'smooth' });
+ }
+}};
+```
+
+### 2. Analytics Integration
+
+Each navigation action is logged using Firebase Analytics:
+
+```typescript
+logAnalyticsEvent('navbar_home', {
+ name: 'navbar_home',
+ type: 'click',
+});
+```
+
+**Tracked Events:**
+
+- `navbar_home` - Home button click
+- `navbar_projects` - Projects link click
+- `navbar_publications` - Publications link click
+- `navbar_resume` - Resume link click
+
+### 3. Responsive Design
+
+Built with Material-UI AppBar and Toolbar:
+
+```typescript
+
+
+ {/* Navigation items */}
+
+
+```
+
+### 4. Path-aware Behavior
+
+Uses Next.js `usePathname` hook to determine behavior:
+
+```typescript
+const pathname = usePathname();
+
+// On home page, prevent default and smooth scroll
+// On other pages, navigate to home first
+if (pathname === '/') {
+ e.preventDefault();
+ document.getElementById('content')?.scrollIntoView({ behavior: 'smooth' });
+}
+```
+
+## Navigation Items
+
+### Home Button
+
+**Icon:** `HomeRoundedIcon` from MUI
+**Target:** Page top (`#content`)
+**Tooltip:** "Home"
+
+```tsx
+
+
+
+
+
+
+
+```
+
+### Projects Link
+
+**Target:** `#projects-grid` section
+**Text:** "Projects"
+
+### Publications Link
+
+**Target:** `#publications` section
+**Text:** "Publications"
+
+### Resume Link
+
+**Target:** External PDF (`/resume/resume.pdf`)
+**Behavior:** Opens in new tab
+
+```tsx
+ {
+ logAnalyticsEvent('navbar_resume', {
+ name: 'navbar_resume',
+ type: 'click',
+ });
+ }}
+ rel='noopener noreferrer'
+ target='_blank'
+>
+ Resume
+
+```
+
+## Interaction Flow
+
+```mermaid
+sequenceDiagram
+ participant User
+ participant Navbar
+ participant Router
+ participant Analytics
+ participant DOM
+
+ User->>Navbar: Click Projects
+ Navbar->>Analytics: Log event
+ Navbar->>Router: Check pathname
+
+ alt On Home Page
+ Navbar->>DOM: getElementById('projects-grid')
+ DOM->>DOM: scrollIntoView({behavior: 'smooth'})
+ else On Other Page
+ Navbar->>Router: Navigate to /#projects-grid
+ Router->>DOM: Scroll to section
+ end
+```
+
+## Accessibility Features
+
+1. **ARIA Labels:** All links have descriptive `aria-label` attributes
+2. **Tooltips:** Visual feedback for icon buttons
+3. **Keyboard Navigation:** Fully keyboard accessible
+4. **Focus Management:** Proper focus indicators
+5. **Semantic HTML:** Uses proper `` and `` components
+
+## Styling
+
+**Colors:**
+
+- Background: `#131518` (dark gray)
+- Text: Inherited from theme
+- Hover: MUI default hover state
+
+**Transitions:**
+
+- All transitions: `0.5s ease-in-out`
+- Height: `2rem`
+- z-index: `10` (ensures navbar stays on top)
+
+## Testing
+
+Test file: [`src/components/navbar/Navbar.test.tsx`](../../src/components/navbar/Navbar.test.tsx)
+
+**Test Coverage:**
+
+- Component renders
+- Navigation links present
+- Click handlers fire
+- Analytics events logged
+- Smooth scroll behavior
+- External links open correctly
+
+## Usage Example
+
+```tsx
+import Navbar from '@components/navbar/Navbar';
+
+// In layout or page
+;
+```
+
+## Integration with Layout
+
+The Navbar is rendered in the [`GeneralLayout`](../../src/layouts/GeneralLayout.tsx):
+
+```tsx
+export default function GeneralLayout({ children }) {
+ return (
+
+
+ {children}
+
+
+ );
+}
+```
+
+## Scroll Target IDs
+
+The component relies on the following element IDs:
+
+- `content` - Page container
+- `projects-grid` - Projects section
+- `publications` - Publications section
+
+Ensure these IDs exist in your page structure.
+
+## Performance Considerations
+
+- **Client Component:** Uses `'use client'` for browser APIs
+- **Lightweight:** Minimal re-renders
+- **Fixed Position:** Always visible during scroll
+- **Analytics Batching:** Firebase handles event batching
+
+## Related Documentation
+
+- [GeneralLayout](../layouts.md)
+- [Firebase Analytics](../configs.md#firebase-configuration-and-usage)
+- [Components Overview](./index.md)
+
+---
+
+💡 **Tip:** Use descriptive `aria-label` and `id` attributes for smooth scrolling to work correctly.
diff --git a/docs/architecture/components/stars.md b/docs/architecture/components/stars.md
new file mode 100644
index 0000000..b8e8592
--- /dev/null
+++ b/docs/architecture/components/stars.md
@@ -0,0 +1,242 @@
+# Stars Background Component
+
+This document details the StarsBackground component that creates an animated starfield background effect.
+
+## Overview
+
+Location: [`src/components/Stars/StarsBackground.tsx`](../../src/components/Stars/StarsBackground.tsx)
+
+The StarsBackground component creates a visually appealing animated background with twinkling stars and occasional shooting stars.
+
+## Component Structure
+
+```mermaid
+flowchart TD
+ StarsBackground[StarsBackground] -->|Creates| Container[Sky Container]
+ Container -->|Generates| Stars[Star Elements]
+ Stars -->|Random| Position[Random Positions]
+ Stars -->|Random| Size[Random Sizes]
+ Stars -->|Random| Animation[Twinkle Animation]
+ Stars -->|Occasional| Shooting[Shooting Stars]
+```
+
+## Key Features
+
+### 1. Dynamic Star Generation
+
+Stars are generated on component mount with random properties:
+
+```typescript
+useEffect(() => {
+ const starCount = Math.floor(Math.random() * 50) + 50; // 50-100 stars
+
+ const newStars = Array.from({ length: starCount }, (_, i) => ({
+ id: i,
+ top: `${Math.random() * 100}%`,
+ left: `${Math.random() * 100}%`,
+ size: Math.random() * 3 + 1, // 1-4px
+ animationDuration: `${Math.random() * 3 + 2}s`, // 2-5s
+ animationDelay: `${Math.random() * 5}s`,
+ }));
+
+ setStars(newStars);
+}, []);
+```
+
+### 2. Star Properties
+
+Each star has:
+
+- **Position:** Random top and left coordinates (0-100%)
+- **Size:** Random size between 1-4px
+- **Animation Duration:** Random duration 2-5 seconds
+- **Animation Delay:** Random delay 0-5 seconds
+
+### 3. Twinkle Animation
+
+Stars twinkle using CSS animations:
+
+```typescript
+sx={{
+ animation: `twinkle ${star.animationDuration} infinite`,
+ animationDelay: star.animationDelay,
+}};
+```
+
+The `twinkle` animation should be defined in global styles:
+
+```scss
+@keyframes twinkle {
+ 0%,
+ 100% {
+ opacity: 1;
+ }
+ 50% {
+ opacity: 0.3;
+ }
+}
+```
+
+### 4. Shooting Stars
+
+Occasionally, stars become shooting stars (implementation detail may vary).
+
+## Component Implementation
+
+```tsx
+'use client';
+
+import { Box } from '@mui/material';
+import { useEffect, useState } from 'react';
+
+export default function StarsBackground() {
+ const [stars, setStars] = useState([]);
+
+ useEffect(() => {
+ // Generate stars on mount
+ const starCount = Math.floor(Math.random() * 50) + 50;
+ const newStars = Array.from({ length: starCount }, (_, i) => ({
+ id: i,
+ top: `${Math.random() * 100}%`,
+ left: `${Math.random() * 100}%`,
+ size: Math.random() * 3 + 1,
+ animationDuration: `${Math.random() * 3 + 2}s`,
+ animationDelay: `${Math.random() * 5}s`,
+ }));
+ setStars(newStars);
+ }, []);
+
+ return (
+
+ {stars.map((star) => (
+
+ ))}
+
+ );
+}
+```
+
+## Rendering Flow
+
+```mermaid
+sequenceDiagram
+ participant Component
+ participant State
+ participant DOM
+ participant CSS
+
+ Component->>Component: Mount
+ Component->>State: Calculate star count (50-100)
+ Component->>State: Generate star properties
+ State-->>Component: Update stars array
+ Component->>DOM: Render star elements
+ DOM->>CSS: Apply animations
+ CSS->>DOM: Animate stars
+```
+
+## Accessibility
+
+The component uses `aria-hidden='true'` because the background is purely decorative:
+
+```tsx
+
+```
+
+## Performance Considerations
+
+1. **Fixed Position:** Uses `position: fixed` to avoid reflow
+2. **z-index: -1:** Renders behind content
+3. **GPU Acceleration:** CSS animations use GPU when possible
+4. **Random Generation:** Stars generated once on mount, not on every render
+5. **Controlled Count:** Limited to 50-100 stars for performance
+
+## Integration
+
+The component is rendered in [`GeneralLayout`](../../src/layouts/GeneralLayout.tsx):
+
+```tsx
+export default function GeneralLayout({ children }) {
+ return (
+
+
+
+ {children}
+
+
+
+
+
+ );
+}
+```
+
+## Testing
+
+Test file: [`src/components/Stars/StarsBackground.test.tsx`](../../src/components/Stars/StarsBackground.test.tsx)
+
+**Test Coverage:**
+
+- Component renders
+- Stars are created on mount
+- Star count is within range (50-100)
+- Stars have proper data-testid
+- Accessibility attributes present
+- Performance with large star counts
+
+## Customization
+
+To customize the background:
+
+1. **Star Count:** Adjust `Math.floor(Math.random() * 50) + 50`
+2. **Star Size:** Modify `Math.random() * 3 + 1`
+3. **Animation Speed:** Change `Math.random() * 3 + 2`
+4. **Background Color:** Update `backgroundColor` in sky container
+5. **Star Color:** Modify star `backgroundColor`
+
+## Visual Effect
+
+```mermaid
+stateDiagram-v2
+ [*] --> Visible: opacity 1
+ Visible --> Fading: 2-5s random
+ Fading --> Dim: opacity 0.3
+ Dim --> Brightening: 2-5s random
+ Brightening --> Visible: opacity 1
+```
+
+## Related Documentation
+
+- [GeneralLayout](../layouts.md)
+- [Components Overview](./index.md)
+- [Global Styles](../../src/styles/globals.scss)
+
+---
+
+💡 **Tip:** The starfield creates depth and visual interest without distracting from content. Keep star count reasonable for performance.
diff --git a/docs/architecture/index.md b/docs/architecture/index.md
index e166206..bb12974 100644
--- a/docs/architecture/index.md
+++ b/docs/architecture/index.md
@@ -2,49 +2,94 @@
This document provides a high-level overview of the architecture for AlexJSully's Portfolio project. The system is modular, maintainable, and leverages modern web technologies for performance and scalability.
-## 🏗️ Architectural Patterns
+## Architectural Patterns
-- **Framework:** Next.js (React)
+- **Framework:** Next.js 16+ (React 19+)
+- **Routing:** App Router (Next.js App Directory)
- **Language:** TypeScript
-- **UI:** Material-UI (MUI)
+- **UI:** Material-UI (MUI) + Emotion
- **Testing:** Cypress (E2E), Jest (unit)
- **Error Tracking:** Sentry
-- **Backend/Data:** Firebase
-- **PWA Support:** Native Next.js
+- **Analytics:** Firebase Analytics & Performance
+- **PWA Support:** Native Next.js manifest + Service Worker
## 📂 Directory Structure
```text
src/
- app/
- components/
- configs/
- data/
- helpers/
- images/
- layouts/
- styles/
- util/
+ app/ # Next.js App Router
+ layout.tsx # Root layout with metadata
+ page.tsx # Home page
+ manifest.ts # PWA manifest generator
+ robots.ts # SEO robots.txt generator
+ error.tsx # Error boundary
+ global-error.tsx # Global error boundary
+ not-found.tsx # 404 page
+ loading.tsx # Loading UI
+ sw.js/ # Service worker route handler
+ components/ # React components
+ banner/ # Banner with avatar
+ cookie-snackbar/ # Cookie consent
+ footer/ # Footer with socials
+ navbar/ # Navigation bar
+ projects/ # Projects grid
+ publications/ # Publications list
+ Stars/ # Animated background
+ ServiceWorkerRegister.tsx
+ configs/ # Configuration files
+ firebase.ts # Firebase initialization
+ data/ # Static data sources
+ keywords.ts # SEO keywords
+ projects.ts # Project data
+ publications.ts # Publication data
+ socials.ts # Social media links
+ helpers/ # Helper functions
+ aaaahhhh.ts # Fun Easter egg logic
+ ascii.ts # ASCII art generation
+ images/ # SVG icons
+ icons/
+ layouts/ # Layout components
+ GeneralLayout.tsx # Main layout wrapper
+ styles/ # Global styles
+ globals.scss
+ util/ # Utility functions
+ isNetworkFast.ts # Network speed detection
public/
- images/
- resume/
- icon/
+ images/ # Static images
+ projects/ # Project thumbnails
+ drawn/ # Hand-drawn graphics
+ aaaahhhh/ # Easter egg images
+ resume/ # Resume files
+ icon/ # PWA icons
+ sw.js # Service worker implementation
+ sitemap.xml # SEO sitemap
```
-## 🔄 System Flow
+## System Flow
```mermaid
flowchart TD
- User -->|HTTP| NextJS_App
- NextJS_App -->|SSR/SSG| React_Components
- React_Components -->|UI| MUI
- NextJS_App -->|API| Firebase
- NextJS_App -->|Error| Sentry
- NextJS_App -->|Metadata| PWA_Manifest
- PWA_Manifest -->|Install| User_Device
+ User[User Browser] -->|Request| NextJS[Next.js Server]
+ NextJS -->|SSR/RSC| Layout[Root Layout]
+ Layout -->|Renders| Navbar[Navbar]
+ Layout -->|Renders| Page[Page Content]
+ Layout -->|Renders| Footer[Footer]
+ Page -->|Fetches| Data[Static Data]
+ Data -->|Projects| ProjectsGrid[ProjectsGrid]
+ Data -->|Publications| Pubs[Publications]
+ Data -->|Socials| Footer
+ Page -->|Initializes| Firebase[Firebase SDK]
+ Firebase -->|Analytics| Events[User Events]
+ Firebase -->|Performance| Metrics[Performance Metrics]
+ NextJS -->|Errors| Sentry[Sentry Error Tracking]
+ NextJS -->|Generates| Manifest[PWA Manifest]
+ NextJS -->|Generates| Robots[robots.txt]
+ User -->|Installs| SW[Service Worker]
+ SW -->|Caches| Assets[Static Assets]
+ Manifest -->|Enables| Install[App Install Prompt]
```
-## 🧩 Subsystems
+## Subsystems
- **Components:** UI elements (see [Components Docs](./components/index.md))
- **Data:** Static and dynamic data sources
@@ -53,11 +98,7 @@ flowchart TD
- **Testing:** E2E and unit tests
- **Config:** Environment and service configuration
-## 🔗 Related Docs
+## Related Docs
- [Usage Guides](../usage/index.md)
- [Component Documentation](./components/index.md)
-
----
-
-💡 **Tip:** See subsystem docs for detailed breakdowns and diagrams.
diff --git a/docs/index.md b/docs/index.md
index e7373e5..ea7c279 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -2,7 +2,7 @@
Welcome to the comprehensive documentation for AlexJSully's Portfolio project. This site is designed for both newcomers and experienced developers to understand, use, and extend the codebase with ease.
-## 📚 Documentation Structure
+## Documentation Structure
```text
/docs
@@ -27,9 +27,10 @@ Welcome to the comprehensive documentation for AlexJSully's Portfolio project. T
│ └── testing.md # How to run and contribute tests
```
-## 🏗️ Architecture
+## Architecture
- [Architecture Overview](./architecture/index.md)
+- [App Directory (Next.js)](./architecture/app-directory.md)
- [Data Architecture](./architecture/data.md)
- [Helpers](./architecture/helpers.md)
- [Images & Icons](./architecture/images.md)
@@ -39,24 +40,20 @@ Welcome to the comprehensive documentation for AlexJSully's Portfolio project. T
- [Utils](./architecture/utils.md)
- [Detailed Components](./architecture/components/index.md)
-## 🚀 Usage Guides
+## Usage Guides
- [Usage Overview](./usage/index.md)
- [Setup & Installation](./usage/setup.md)
- [Testing Guide](./usage/testing.md)
-## 🧩 Components
+## Components
- [Component Overview](./architecture/components/index.md)
- [Projects Component](./architecture/components/projects.md)
- [Publications Component](./architecture/components/publications.md)
- [Socials Component](./architecture/components/socials.md)
-## 📝 Contributing & Code of Conduct
+## Contributing & Code of Conduct
- [Contributing Guide](../CONTRIBUTING.md)
- [Code of Conduct](../CODE_OF_CONDUCT.md)
-
----
-
-For any questions, see the [README.md](../README.md) or open an issue.
diff --git a/docs/usage/testing.md b/docs/usage/testing.md
index f1c74d8..b6d7d51 100644
--- a/docs/usage/testing.md
+++ b/docs/usage/testing.md
@@ -17,52 +17,80 @@ The testing setup in this codebase uses Cypress for end-to-end (E2E) testing. Th
### Flowchart
```mermaid
-flowchart LR
- A[Cypress Configuration] -->|Defines| B[Test Settings]
- B --> C[Test Files]
- B --> D[Support Files]
- C --> E[Run Tests]
- D --> F[Custom Commands]
- D --> G[Global Configuration]
- L[Code Quality and Linting] -->|Runs| H[Prettier]
- L --> I[ESLint]
- T[TypeScript] -->|Runs| J[Type Checking]
- K[NextJS Build] -->|Runs| M[Build Tests]
+flowchart TD
+ Validate[npm run validate] --> Prettier[Prettier Format]
+ Prettier --> ESLint[ESLint Check]
+ ESLint --> TSC[TypeScript Check]
+ TSC --> Jest[Jest Unit Tests]
+ Jest --> Cypress[Cypress E2E Tests]
+ Cypress --> Build[Next.js Build]
+ Build --> Markdown[Markdown Lint]
+ Markdown --> Success[✓ All Checks Passed]
+
+ Prettier -->|Fails| PrettierFix[Run: npm run prettier]
+ ESLint -->|Fails| ESLintFix[Run: npm run eslint]
+ TSC -->|Fails| TSCFix[Fix TypeScript errors]
+ Jest -->|Fails| JestFix[Fix unit tests]
+ Cypress -->|Fails| CypressFix[Fix E2E tests]
+ Build -->|Fails| BuildFix[Fix build errors]
+ Markdown -->|Fails| MarkdownFix[Fix markdown issues]
```
## Running Tests
To run the tests, you can use the following commands:
+### Running Jest Unit Tests
+
+1. **Run all Jest tests:**
+
+ ```sh
+ npm run test:jest
+ ```
+
+2. **Run Jest with coverage:**
+
+ ```sh
+ npm run test:jest:coverage
+ ```
+
+ This generates a coverage report showing which parts of the code are tested.
+
### Running Cypress Tests
-1. **Open Cypress**: This command opens the Cypress Test Runner, allowing you to run tests interactively.
+1. **Open Cypress Test Runner:** This command opens the Cypress Test Runner, allowing you to run tests interactively.
```sh
npm run cypress
+ # or
+ npm run test:cypress:open
```
-2. **Run Cypress Tests in Headless Mode**: This command runs all Cypress tests in headless mode, which is useful for CI/CD pipelines.
+2. **Run Cypress Tests in Headless Mode:** This command runs all Cypress tests in headless mode, which is useful for CI/CD pipelines.
```sh
npm run e2e:headless
+ # or
+ npm run test:cypress:e2e
```
### Running All Tests
-To run all tests, including linting and type checking, use the following command:
+To run all tests, linting, type checking, and build, use the following command:
```sh
npm run validate
```
-This command runs the following checks:
+This command runs the following checks in order:
-- **Prettier**: Ensures code formatting is consistent.
-- **ESLint**: Checks for code quality and potential issues.
-- **TypeScript**: Ensures type safety.
-- **Cypress**: Runs end-to-end tests.
-- **Build**: Ensures the project builds successfully.
+1. **Prettier**: Ensures code formatting is consistent.
+2. **ESLint**: Checks for code quality and potential issues.
+3. **TypeScript**: Ensures type safety with `tsc --noEmit`.
+4. **Jest**: Runs unit tests.
+5. **Cypress**: Runs end-to-end tests.
+6. **Build**: Ensures the project builds successfully with `next build`.
+7. **Markdown Lint**: Validates markdown files.
### Cypress Test Example
diff --git a/package-lock.json b/package-lock.json
index 02f34b9..2d8d6d4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,33 +13,33 @@
"@mui/icons-material": "^7.3.6",
"@mui/material": "^7.3.6",
"@sentry/integrations": "^7.114.0",
- "@sentry/nextjs": "^10.30.0",
+ "@sentry/nextjs": "^10.32.1",
"@vercel/speed-insights": "^1.3.1",
- "firebase": "^12.6.0",
+ "firebase": "^12.7.0",
"lodash": "^4.17.21",
- "next": "^16.0.10",
+ "next": "^16.1.1",
"react": "^19.2.3",
"react-dom": "^19.2.3",
"sharp": "^0.34.5",
- "webpack": "^5.103.0"
+ "webpack": "^5.104.1"
},
"devDependencies": {
- "@sentry/core": "^10.30.0",
- "@sentry/types": "^10.30.0",
+ "@sentry/core": "^10.32.1",
+ "@sentry/types": "^10.32.1",
"@svgr/webpack": "^8.1.0",
"@testing-library/jest-dom": "^6.9.1",
- "@testing-library/react": "^16.3.0",
+ "@testing-library/react": "^16.3.1",
"@trivago/prettier-plugin-sort-imports": "^6.0.0",
"@types/jest": "^30.0.0",
"@types/lodash": "^4.17.21",
- "@types/node": "^25.0.1",
+ "@types/node": "^25.0.3",
"@types/react": "^19.2.7",
"@types/react-dom": "^19.2.3",
- "caniuse-lite": "^1.0.30001760",
+ "caniuse-lite": "^1.0.30001761",
"concurrently": "^9.2.1",
- "cypress": "^15.7.1",
+ "cypress": "^15.8.1",
"cypress-axe": "^1.7.0",
- "eslint": "^9.39.1",
+ "eslint": "^9.39.2",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-cypress": "^5.2.0",
"eslint-plugin-prettier": "^5.5.4",
@@ -51,7 +51,7 @@
"jest-transform-stub": "^2.0.0",
"markdownlint-cli": "^0.47.0",
"prettier": "^3.7.4",
- "sass": "^1.96.0",
+ "sass": "^1.97.1",
"start-server-and-test": "^2.1.3",
"ts-jest": "^29.4.6",
"typescript": "^5.9.3"
@@ -2541,9 +2541,9 @@
}
},
"node_modules/@eslint/js": {
- "version": "9.39.1",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz",
- "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==",
+ "version": "9.39.2",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz",
+ "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2578,9 +2578,9 @@
}
},
"node_modules/@firebase/ai": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/@firebase/ai/-/ai-2.6.0.tgz",
- "integrity": "sha512-NGyE7NQDFznOv683Xk4+WoUv39iipa9lEfrwvvPz33ChzVbCCiB69FJQTK2BI/11pRtzYGbHo1/xMz7gxWWhJw==",
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/@firebase/ai/-/ai-2.6.1.tgz",
+ "integrity": "sha512-qJd9bpABqsanFnwdbjZEDbKKr1jRtuUZ+cHyNBLWsxobH4pd73QncvuO3XlMq4eKBLlg1f5jNdFpJ3G3ABu2Tg==",
"license": "Apache-2.0",
"dependencies": {
"@firebase/app-check-interop-types": "0.3.3",
@@ -2727,9 +2727,9 @@
"peer": true
},
"node_modules/@firebase/auth": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.11.1.tgz",
- "integrity": "sha512-Mea0G/BwC1D0voSG+60Ylu3KZchXAFilXQ/hJXWCw3gebAu+RDINZA0dJMNeym7HFxBaBaByX8jSa7ys5+F2VA==",
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.12.0.tgz",
+ "integrity": "sha512-zkvLpsrxynWHk07qGrUDfCSqKf4AvfZGEqJ7mVCtYGjNNDbGE71k0Yn84rg8QEZu4hQw1BC0qDEHzpNVBcSVmA==",
"license": "Apache-2.0",
"dependencies": {
"@firebase/component": "0.7.0",
@@ -2742,7 +2742,7 @@
},
"peerDependencies": {
"@firebase/app": "0.x",
- "@react-native-async-storage/async-storage": "^1.18.1"
+ "@react-native-async-storage/async-storage": "^2.2.0"
},
"peerDependenciesMeta": {
"@react-native-async-storage/async-storage": {
@@ -2751,12 +2751,12 @@
}
},
"node_modules/@firebase/auth-compat": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.6.1.tgz",
- "integrity": "sha512-I0o2ZiZMnMTOQfqT22ur+zcGDVSAfdNZBHo26/Tfi8EllfR1BO7aTVo2rt/ts8o/FWsK8pOALLeVBGhZt8w/vg==",
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.6.2.tgz",
+ "integrity": "sha512-8UhCzF6pav9bw/eXA8Zy1QAKssPRYEYXaWagie1ewLTwHkXv6bKp/j6/IwzSYQP67sy/BMFXIFaCCsoXzFLr7A==",
"license": "Apache-2.0",
"dependencies": {
- "@firebase/auth": "1.11.1",
+ "@firebase/auth": "1.12.0",
"@firebase/auth-types": "0.13.0",
"@firebase/component": "0.7.0",
"@firebase/util": "1.13.0",
@@ -2860,9 +2860,9 @@
}
},
"node_modules/@firebase/firestore": {
- "version": "4.9.2",
- "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.9.2.tgz",
- "integrity": "sha512-iuA5+nVr/IV/Thm0Luoqf2mERUvK9g791FZpUJV1ZGXO6RL2/i/WFJUj5ZTVXy5pRjpWYO+ZzPcReNrlilmztA==",
+ "version": "4.9.3",
+ "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.9.3.tgz",
+ "integrity": "sha512-RVuvhcQzs1sD5Osr2naQS71H0bQMbSnib16uOWAKk3GaKb/WBPyCYSr2Ry7MqlxDP/YhwknUxECL07lw9Rq1nA==",
"license": "Apache-2.0",
"dependencies": {
"@firebase/component": "0.7.0",
@@ -2881,13 +2881,13 @@
}
},
"node_modules/@firebase/firestore-compat": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.4.2.tgz",
- "integrity": "sha512-cy7ov6SpFBx+PHwFdOOjbI7kH00uNKmIFurAn560WiPCZXy9EMnil1SOG7VF4hHZKdenC+AHtL4r3fNpirpm0w==",
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.4.3.tgz",
+ "integrity": "sha512-1ylF/njF68Pmb6p0erP0U78XQv1w77Wap4bUmqZ7ZVkmN1oMgplyu0TyirWtCBoKFRV2+SUZfWXvIij/z39LYg==",
"license": "Apache-2.0",
"dependencies": {
"@firebase/component": "0.7.0",
- "@firebase/firestore": "4.9.2",
+ "@firebase/firestore": "4.9.3",
"@firebase/firestore-types": "3.0.3",
"@firebase/util": "1.13.0",
"tslib": "^2.1.0"
@@ -4723,15 +4723,15 @@
}
},
"node_modules/@next/env": {
- "version": "16.0.10",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-16.0.10.tgz",
- "integrity": "sha512-8tuaQkyDVgeONQ1MeT9Mkk8pQmZapMKFh5B+OrFUlG3rVmYTXcXlBetBgTurKXGaIZvkoqRT9JL5K3phXcgang==",
+ "version": "16.1.1",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-16.1.1.tgz",
+ "integrity": "sha512-3oxyM97Sr2PqiVyMyrZUtrtM3jqqFxOQJVuKclDsgj/L728iZt/GyslkN4NwarledZATCenbk4Offjk1hQmaAA==",
"license": "MIT"
},
"node_modules/@next/swc-darwin-arm64": {
- "version": "16.0.10",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.0.10.tgz",
- "integrity": "sha512-4XgdKtdVsaflErz+B5XeG0T5PeXKDdruDf3CRpnhN+8UebNa5N2H58+3GDgpn/9GBurrQ1uWW768FfscwYkJRg==",
+ "version": "16.1.1",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.1.1.tgz",
+ "integrity": "sha512-JS3m42ifsVSJjSTzh27nW+Igfha3NdBOFScr9C80hHGrWx55pTrVL23RJbqir7k7/15SKlrLHhh/MQzqBBYrQA==",
"cpu": [
"arm64"
],
@@ -4745,9 +4745,9 @@
}
},
"node_modules/@next/swc-darwin-x64": {
- "version": "16.0.10",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.0.10.tgz",
- "integrity": "sha512-spbEObMvRKkQ3CkYVOME+ocPDFo5UqHb8EMTS78/0mQ+O1nqE8toHJVioZo4TvebATxgA8XMTHHrScPrn68OGw==",
+ "version": "16.1.1",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.1.1.tgz",
+ "integrity": "sha512-hbyKtrDGUkgkyQi1m1IyD3q4I/3m9ngr+V93z4oKHrPcmxwNL5iMWORvLSGAf2YujL+6HxgVvZuCYZfLfb4bGw==",
"cpu": [
"x64"
],
@@ -4761,9 +4761,9 @@
}
},
"node_modules/@next/swc-linux-arm64-gnu": {
- "version": "16.0.10",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.0.10.tgz",
- "integrity": "sha512-uQtWE3X0iGB8apTIskOMi2w/MKONrPOUCi5yLO+v3O8Mb5c7K4Q5KD1jvTpTF5gJKa3VH/ijKjKUq9O9UhwOYw==",
+ "version": "16.1.1",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.1.1.tgz",
+ "integrity": "sha512-/fvHet+EYckFvRLQ0jPHJCUI5/B56+2DpI1xDSvi80r/3Ez+Eaa2Yq4tJcRTaB1kqj/HrYKn8Yplm9bNoMJpwQ==",
"cpu": [
"arm64"
],
@@ -4777,9 +4777,9 @@
}
},
"node_modules/@next/swc-linux-arm64-musl": {
- "version": "16.0.10",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.0.10.tgz",
- "integrity": "sha512-llA+hiDTrYvyWI21Z0L1GiXwjQaanPVQQwru5peOgtooeJ8qx3tlqRV2P7uH2pKQaUfHxI/WVarvI5oYgGxaTw==",
+ "version": "16.1.1",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.1.1.tgz",
+ "integrity": "sha512-MFHrgL4TXNQbBPzkKKur4Fb5ICEJa87HM7fczFs2+HWblM7mMLdco3dvyTI+QmLBU9xgns/EeeINSZD6Ar+oLg==",
"cpu": [
"arm64"
],
@@ -4793,9 +4793,9 @@
}
},
"node_modules/@next/swc-linux-x64-gnu": {
- "version": "16.0.10",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.0.10.tgz",
- "integrity": "sha512-AK2q5H0+a9nsXbeZ3FZdMtbtu9jxW4R/NgzZ6+lrTm3d6Zb7jYrWcgjcpM1k8uuqlSy4xIyPR2YiuUr+wXsavA==",
+ "version": "16.1.1",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.1.1.tgz",
+ "integrity": "sha512-20bYDfgOQAPUkkKBnyP9PTuHiJGM7HzNBbuqmD0jiFVZ0aOldz+VnJhbxzjcSabYsnNjMPsE0cyzEudpYxsrUQ==",
"cpu": [
"x64"
],
@@ -4809,9 +4809,9 @@
}
},
"node_modules/@next/swc-linux-x64-musl": {
- "version": "16.0.10",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.0.10.tgz",
- "integrity": "sha512-1TDG9PDKivNw5550S111gsO4RGennLVl9cipPhtkXIFVwo31YZ73nEbLjNC8qG3SgTz/QZyYyaFYMeY4BKZR/g==",
+ "version": "16.1.1",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.1.1.tgz",
+ "integrity": "sha512-9pRbK3M4asAHQRkwaXwu601oPZHghuSC8IXNENgbBSyImHv/zY4K5udBusgdHkvJ/Tcr96jJwQYOll0qU8+fPA==",
"cpu": [
"x64"
],
@@ -4825,9 +4825,9 @@
}
},
"node_modules/@next/swc-win32-arm64-msvc": {
- "version": "16.0.10",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.0.10.tgz",
- "integrity": "sha512-aEZIS4Hh32xdJQbHz121pyuVZniSNoqDVx1yIr2hy+ZwJGipeqnMZBJHyMxv2tiuAXGx6/xpTcQJ6btIiBjgmg==",
+ "version": "16.1.1",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.1.1.tgz",
+ "integrity": "sha512-bdfQkggaLgnmYrFkSQfsHfOhk/mCYmjnrbRCGgkMcoOBZ4n+TRRSLmT/CU5SATzlBJ9TpioUyBW/vWFXTqQRiA==",
"cpu": [
"arm64"
],
@@ -4841,9 +4841,9 @@
}
},
"node_modules/@next/swc-win32-x64-msvc": {
- "version": "16.0.10",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.0.10.tgz",
- "integrity": "sha512-E+njfCoFLb01RAFEnGZn6ERoOqhK1Gl3Lfz1Kjnj0Ulfu7oJbuMyvBKNj/bw8XZnenHDASlygTjZICQW+rYW1Q==",
+ "version": "16.1.1",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.1.1.tgz",
+ "integrity": "sha512-Ncwbw2WJ57Al5OX0k4chM68DKhEPlrXBaSXDCi2kPi5f4d8b3ejr3RRJGfKBLrn2YJL5ezNS7w2TZLHSti8CMw==",
"cpu": [
"x64"
],
@@ -5823,9 +5823,9 @@
}
},
"node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.3.tgz",
- "integrity": "sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==",
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.54.0.tgz",
+ "integrity": "sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==",
"cpu": [
"arm"
],
@@ -5836,9 +5836,9 @@
]
},
"node_modules/@rollup/rollup-android-arm64": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.3.tgz",
- "integrity": "sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==",
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.54.0.tgz",
+ "integrity": "sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==",
"cpu": [
"arm64"
],
@@ -5849,9 +5849,9 @@
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.3.tgz",
- "integrity": "sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==",
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.54.0.tgz",
+ "integrity": "sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==",
"cpu": [
"arm64"
],
@@ -5862,9 +5862,9 @@
]
},
"node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.3.tgz",
- "integrity": "sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==",
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.54.0.tgz",
+ "integrity": "sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==",
"cpu": [
"x64"
],
@@ -5875,9 +5875,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.3.tgz",
- "integrity": "sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==",
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.54.0.tgz",
+ "integrity": "sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==",
"cpu": [
"arm64"
],
@@ -5888,9 +5888,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.3.tgz",
- "integrity": "sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==",
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.54.0.tgz",
+ "integrity": "sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==",
"cpu": [
"x64"
],
@@ -5901,9 +5901,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.3.tgz",
- "integrity": "sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==",
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.54.0.tgz",
+ "integrity": "sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==",
"cpu": [
"arm"
],
@@ -5914,9 +5914,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.3.tgz",
- "integrity": "sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==",
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.54.0.tgz",
+ "integrity": "sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==",
"cpu": [
"arm"
],
@@ -5927,9 +5927,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.3.tgz",
- "integrity": "sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==",
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.54.0.tgz",
+ "integrity": "sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==",
"cpu": [
"arm64"
],
@@ -5940,9 +5940,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.3.tgz",
- "integrity": "sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==",
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.54.0.tgz",
+ "integrity": "sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==",
"cpu": [
"arm64"
],
@@ -5953,9 +5953,9 @@
]
},
"node_modules/@rollup/rollup-linux-loong64-gnu": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.3.tgz",
- "integrity": "sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==",
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.54.0.tgz",
+ "integrity": "sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==",
"cpu": [
"loong64"
],
@@ -5966,9 +5966,9 @@
]
},
"node_modules/@rollup/rollup-linux-ppc64-gnu": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.3.tgz",
- "integrity": "sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==",
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.54.0.tgz",
+ "integrity": "sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==",
"cpu": [
"ppc64"
],
@@ -5979,9 +5979,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.3.tgz",
- "integrity": "sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==",
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.54.0.tgz",
+ "integrity": "sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==",
"cpu": [
"riscv64"
],
@@ -5992,9 +5992,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.3.tgz",
- "integrity": "sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==",
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.54.0.tgz",
+ "integrity": "sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==",
"cpu": [
"riscv64"
],
@@ -6005,9 +6005,9 @@
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.3.tgz",
- "integrity": "sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==",
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.54.0.tgz",
+ "integrity": "sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==",
"cpu": [
"s390x"
],
@@ -6018,9 +6018,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz",
- "integrity": "sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==",
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.54.0.tgz",
+ "integrity": "sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==",
"cpu": [
"x64"
],
@@ -6031,9 +6031,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.3.tgz",
- "integrity": "sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==",
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.54.0.tgz",
+ "integrity": "sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==",
"cpu": [
"x64"
],
@@ -6044,9 +6044,9 @@
]
},
"node_modules/@rollup/rollup-openharmony-arm64": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.3.tgz",
- "integrity": "sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==",
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.54.0.tgz",
+ "integrity": "sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==",
"cpu": [
"arm64"
],
@@ -6057,9 +6057,9 @@
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.3.tgz",
- "integrity": "sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==",
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.54.0.tgz",
+ "integrity": "sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==",
"cpu": [
"arm64"
],
@@ -6070,9 +6070,9 @@
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.3.tgz",
- "integrity": "sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==",
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.54.0.tgz",
+ "integrity": "sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==",
"cpu": [
"ia32"
],
@@ -6083,9 +6083,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-gnu": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.3.tgz",
- "integrity": "sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==",
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.54.0.tgz",
+ "integrity": "sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==",
"cpu": [
"x64"
],
@@ -6096,9 +6096,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.3.tgz",
- "integrity": "sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==",
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.54.0.tgz",
+ "integrity": "sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==",
"cpu": [
"x64"
],
@@ -6109,50 +6109,50 @@
]
},
"node_modules/@sentry-internal/browser-utils": {
- "version": "10.30.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-10.30.0.tgz",
- "integrity": "sha512-dVsHTUbvgaLNetWAQC6yJFnmgD0xUbVgCkmzNB7S28wIP570GcZ4cxFGPOkXbPx6dEBUfoOREeXzLqjJLtJPfg==",
+ "version": "10.32.1",
+ "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-10.32.1.tgz",
+ "integrity": "sha512-sjLLep1es3rTkbtAdTtdpc/a6g7v7bK5YJiZJsUigoJ4NTiFeMI5uIDCxbH/tjJ1q23YE1LzVn7T96I+qBRjHA==",
"license": "MIT",
"dependencies": {
- "@sentry/core": "10.30.0"
+ "@sentry/core": "10.32.1"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@sentry-internal/feedback": {
- "version": "10.30.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-10.30.0.tgz",
- "integrity": "sha512-+bnQZ6SNF265nTXrRlXTmq5Ila1fRfraDOAahlOT/VM4j6zqCvNZzmeDD9J6IbxiAdhlp/YOkrG3zbr5vgYo0A==",
+ "version": "10.32.1",
+ "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-10.32.1.tgz",
+ "integrity": "sha512-O24G8jxbfBY1RE/v2qFikPJISVMOrd/zk8FKyl+oUVYdOxU2Ucjk2cR3EQruBFlc7irnL6rT3GPfRZ/kBgLkmQ==",
"license": "MIT",
"dependencies": {
- "@sentry/core": "10.30.0"
+ "@sentry/core": "10.32.1"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@sentry-internal/replay": {
- "version": "10.30.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-10.30.0.tgz",
- "integrity": "sha512-Pj/fMIZQkXzIw6YWpxKWUE5+GXffKq6CgXwHszVB39al1wYz1gTIrTqJqt31IBLIihfCy8XxYddglR2EW0BVIQ==",
+ "version": "10.32.1",
+ "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-10.32.1.tgz",
+ "integrity": "sha512-KKmLUgIaLRM0VjrMA1ByQTawZyRDYSkG2evvEOVpEtR9F0sumidAQdi7UY71QEKE1RYe/Jcp/3WoaqsMh8tbnQ==",
"license": "MIT",
"dependencies": {
- "@sentry-internal/browser-utils": "10.30.0",
- "@sentry/core": "10.30.0"
+ "@sentry-internal/browser-utils": "10.32.1",
+ "@sentry/core": "10.32.1"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@sentry-internal/replay-canvas": {
- "version": "10.30.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-10.30.0.tgz",
- "integrity": "sha512-RIlIz+XQ4DUWaN60CjfmicJq2O2JRtDKM5lw0wB++M5ha0TBh6rv+Ojf6BDgiV3LOQ7lZvCM57xhmNUtrGmelg==",
+ "version": "10.32.1",
+ "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-10.32.1.tgz",
+ "integrity": "sha512-/XGTzWNWVc+B691fIVekV2KeoHFEDA5KftrLFAhEAW7uWOwk/xy3aQX4TYM0LcPm2PBKvoumlAD+Sd/aXk63oA==",
"license": "MIT",
"dependencies": {
- "@sentry-internal/replay": "10.30.0",
- "@sentry/core": "10.30.0"
+ "@sentry-internal/replay": "10.32.1",
+ "@sentry/core": "10.32.1"
},
"engines": {
"node": ">=18"
@@ -6168,16 +6168,16 @@
}
},
"node_modules/@sentry/browser": {
- "version": "10.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-10.30.0.tgz",
- "integrity": "sha512-7M/IJUMLo0iCMLNxDV/OHTPI0WKyluxhCcxXJn7nrCcolu8A1aq9R8XjKxm0oTCO8ht5pz8bhGXUnYJj4eoEBA==",
+ "version": "10.32.1",
+ "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-10.32.1.tgz",
+ "integrity": "sha512-NPNCXTZ05ZGTFyJdKNqjykpFm+urem0ebosILQiw3C4BxNVNGH4vfYZexyl6prRhmg91oB6GjVNiVDuJiap1gg==",
"license": "MIT",
"dependencies": {
- "@sentry-internal/browser-utils": "10.30.0",
- "@sentry-internal/feedback": "10.30.0",
- "@sentry-internal/replay": "10.30.0",
- "@sentry-internal/replay-canvas": "10.30.0",
- "@sentry/core": "10.30.0"
+ "@sentry-internal/browser-utils": "10.32.1",
+ "@sentry-internal/feedback": "10.32.1",
+ "@sentry-internal/replay": "10.32.1",
+ "@sentry-internal/replay-canvas": "10.32.1",
+ "@sentry/core": "10.32.1"
},
"engines": {
"node": ">=18"
@@ -6380,9 +6380,9 @@
}
},
"node_modules/@sentry/core": {
- "version": "10.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.30.0.tgz",
- "integrity": "sha512-IfNuqIoGVO9pwphwbOptAEJJI1SCAfewS5LBU1iL7hjPBHYAnE8tCVzyZN+pooEkQQ47Q4rGanaG1xY8mjTT1A==",
+ "version": "10.32.1",
+ "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.32.1.tgz",
+ "integrity": "sha512-PH2ldpSJlhqsMj2vCTyU0BI2Fx1oIDhm7Izo5xFALvjVCS0gmlqHt1udu6YlKn8BtpGH6bGzssvv5APrk+OdPQ==",
"license": "MIT",
"engines": {
"node": ">=18"
@@ -6426,21 +6426,21 @@
}
},
"node_modules/@sentry/nextjs": {
- "version": "10.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/nextjs/-/nextjs-10.30.0.tgz",
- "integrity": "sha512-/WgH8m5Zi14pJMWbOGojm8BpzXpVQ0dXCuotSJ61MtKd6nW+yoaUBvbPdDcvzyAap1wVosXMe8T8HaMZbEQSdA==",
+ "version": "10.32.1",
+ "resolved": "https://registry.npmjs.org/@sentry/nextjs/-/nextjs-10.32.1.tgz",
+ "integrity": "sha512-MlgQiKg9P2clKeyH+ZLdmNiMNfTMs/2DBK9V/enLZvYJd1sy5hmrkAV/NiLxVP0uXAeMEVtrgFMIb64cH7ZcXQ==",
"license": "MIT",
"dependencies": {
"@opentelemetry/api": "^1.9.0",
"@opentelemetry/semantic-conventions": "^1.37.0",
"@rollup/plugin-commonjs": "28.0.1",
- "@sentry-internal/browser-utils": "10.30.0",
+ "@sentry-internal/browser-utils": "10.32.1",
"@sentry/bundler-plugin-core": "^4.6.1",
- "@sentry/core": "10.30.0",
- "@sentry/node": "10.30.0",
- "@sentry/opentelemetry": "10.30.0",
- "@sentry/react": "10.30.0",
- "@sentry/vercel-edge": "10.30.0",
+ "@sentry/core": "10.32.1",
+ "@sentry/node": "10.32.1",
+ "@sentry/opentelemetry": "10.32.1",
+ "@sentry/react": "10.32.1",
+ "@sentry/vercel-edge": "10.32.1",
"@sentry/webpack-plugin": "^4.6.1",
"resolve": "1.22.8",
"rollup": "^4.35.0",
@@ -6454,9 +6454,9 @@
}
},
"node_modules/@sentry/node": {
- "version": "10.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/node/-/node-10.30.0.tgz",
- "integrity": "sha512-Ov++em+Y4H4gNRW9u3d9JDF46BNvnCNW4/jJ/6Dsw0T+Em9dyLXfqyDBEe8VKD0E7ZjuO+Z1W3ldpbhCj5HlSg==",
+ "version": "10.32.1",
+ "resolved": "https://registry.npmjs.org/@sentry/node/-/node-10.32.1.tgz",
+ "integrity": "sha512-oxlybzt8QW0lx/QaEj1DcvZDRXkgouewFelu/10dyUwv5So3YvipfvWInda+yMLmn25OggbloDQ0gyScA2jU3g==",
"license": "MIT",
"dependencies": {
"@opentelemetry/api": "^1.9.0",
@@ -6489,9 +6489,9 @@
"@opentelemetry/sdk-trace-base": "^2.2.0",
"@opentelemetry/semantic-conventions": "^1.37.0",
"@prisma/instrumentation": "6.19.0",
- "@sentry/core": "10.30.0",
- "@sentry/node-core": "10.30.0",
- "@sentry/opentelemetry": "10.30.0",
+ "@sentry/core": "10.32.1",
+ "@sentry/node-core": "10.32.1",
+ "@sentry/opentelemetry": "10.32.1",
"import-in-the-middle": "^2",
"minimatch": "^9.0.0"
},
@@ -6500,14 +6500,14 @@
}
},
"node_modules/@sentry/node-core": {
- "version": "10.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-10.30.0.tgz",
- "integrity": "sha512-IDgCf0sTtHpnMfdM7nnqdkjFPzNrMKQUZCeoW2msAb+fXIfev2nae43fL4ffGL+S3rnkZp3OL8HDG/4C+Q0iZA==",
+ "version": "10.32.1",
+ "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-10.32.1.tgz",
+ "integrity": "sha512-w56rxdBanBKc832zuwnE+zNzUQ19fPxfHEtOhK8JGPu3aSwQYcIxwz9z52lOx3HN7k/8Fj5694qlT3x/PokhRw==",
"license": "MIT",
"dependencies": {
"@apm-js-collab/tracing-hooks": "^0.3.1",
- "@sentry/core": "10.30.0",
- "@sentry/opentelemetry": "10.30.0",
+ "@sentry/core": "10.32.1",
+ "@sentry/opentelemetry": "10.32.1",
"import-in-the-middle": "^2"
},
"engines": {
@@ -6524,12 +6524,12 @@
}
},
"node_modules/@sentry/opentelemetry": {
- "version": "10.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-10.30.0.tgz",
- "integrity": "sha512-b4q868+L2uhqKn4xIlf+VLDthBLnUzG60FceJ2Oq8nD2Lk70F2ZxLfHA2eL1F6Oc776gnGd8Tmc1NM6RGRnp0g==",
+ "version": "10.32.1",
+ "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-10.32.1.tgz",
+ "integrity": "sha512-YLssSz5Y+qPvufrh2cDaTXDoXU8aceOhB+YTjT8/DLF6SOj7Tzen52aAcjNaifawaxEsLCC8O+B+A2iA+BllvA==",
"license": "MIT",
"dependencies": {
- "@sentry/core": "10.30.0"
+ "@sentry/core": "10.32.1"
},
"engines": {
"node": ">=18"
@@ -6543,13 +6543,13 @@
}
},
"node_modules/@sentry/react": {
- "version": "10.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/react/-/react-10.30.0.tgz",
- "integrity": "sha512-3co0QwAU9VrCVBWgpRf/4G19MwzR+DM0sDe9tgN7P3pv/tMlEHhnPFv88nPfuSa2W8uVCpHehvV+GnUPF4V7Ag==",
+ "version": "10.32.1",
+ "resolved": "https://registry.npmjs.org/@sentry/react/-/react-10.32.1.tgz",
+ "integrity": "sha512-/tX0HeACbAmVP57x8txTrGk/U3fa9pDBaoAtlOrnPv5VS/aC5SGkehXWeTGSAa+ahlOWwp3IF8ILVXRiOoG/Vg==",
"license": "MIT",
"dependencies": {
- "@sentry/browser": "10.30.0",
- "@sentry/core": "10.30.0",
+ "@sentry/browser": "10.32.1",
+ "@sentry/core": "10.32.1",
"hoist-non-react-statics": "^3.3.2"
},
"engines": {
@@ -6560,13 +6560,13 @@
}
},
"node_modules/@sentry/types": {
- "version": "10.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/types/-/types-10.30.0.tgz",
- "integrity": "sha512-tSyzG/JunWjbuQDDwP3DKgt8KP23ZSuNUEudMSv2jCF/956o8ksamPeidCTSVMXoEyTt5tvimWNeNvUFIFq3EA==",
+ "version": "10.32.1",
+ "resolved": "https://registry.npmjs.org/@sentry/types/-/types-10.32.1.tgz",
+ "integrity": "sha512-aB3L32+s//gSRW6fFOEENUsZPNqHy3dg0lDwnGwh1qs8VctFIToI1SojP1o55m8kO37oFtS3BvfsjM2IAg3ADA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@sentry/core": "10.30.0"
+ "@sentry/core": "10.32.1"
},
"engines": {
"node": ">=18"
@@ -6594,14 +6594,14 @@
}
},
"node_modules/@sentry/vercel-edge": {
- "version": "10.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/vercel-edge/-/vercel-edge-10.30.0.tgz",
- "integrity": "sha512-aXiVlIy5JjiyuZ9JlkMwIFCqwnYcUfC2uae0qhnIaSuQwMDgl1z3iE0vA8TOlLMJrTmHJjszeVhr40AFo9W0AA==",
+ "version": "10.32.1",
+ "resolved": "https://registry.npmjs.org/@sentry/vercel-edge/-/vercel-edge-10.32.1.tgz",
+ "integrity": "sha512-3hrc7TVs4ZeYSCOZdgmv9D1Bke2osnImfupceW8THecNv3uEUjYbrC2UkS/TFMiVHc9qpYzUnKbsGezMp3Bcaw==",
"license": "MIT",
"dependencies": {
"@opentelemetry/api": "^1.9.0",
"@opentelemetry/resources": "^2.2.0",
- "@sentry/core": "10.30.0"
+ "@sentry/core": "10.32.1"
},
"engines": {
"node": ">=18"
@@ -6652,9 +6652,9 @@
}
},
"node_modules/@standard-schema/spec": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz",
- "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz",
+ "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==",
"dev": true,
"license": "MIT"
},
@@ -6988,9 +6988,9 @@
"license": "MIT"
},
"node_modules/@testing-library/react": {
- "version": "16.3.0",
- "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.0.tgz",
- "integrity": "sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw==",
+ "version": "16.3.1",
+ "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.1.tgz",
+ "integrity": "sha512-gr4KtAWqIOQoucWYD/f6ki+j5chXfcPc74Col/6poTyqTmn7zRmodWahWRCp8tYd+GMqBonw6hstNzqjbs6gjw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7296,9 +7296,9 @@
}
},
"node_modules/@types/node": {
- "version": "25.0.1",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.1.tgz",
- "integrity": "sha512-czWPzKIAXucn9PtsttxmumiQ9N0ok9FrBwgRWrwmVLlp86BrMExzvXRLFYRJ+Ex3g6yqj+KuaxfX1JTgV2lpfg==",
+ "version": "25.0.3",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.3.tgz",
+ "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==",
"license": "MIT",
"dependencies": {
"undici-types": "~7.16.0"
@@ -8623,9 +8623,9 @@
"license": "MIT"
},
"node_modules/baseline-browser-mapping": {
- "version": "2.9.6",
- "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.6.tgz",
- "integrity": "sha512-v9BVVpOTLB59C9E7aSnmIF8h7qRsFpx+A2nugVMTszEOMcfjlZMsXRm4LF23I3Z9AJxc8ANpIvzbzONoX9VJlg==",
+ "version": "2.9.11",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.11.tgz",
+ "integrity": "sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==",
"license": "Apache-2.0",
"bin": {
"baseline-browser-mapping": "dist/cli.js"
@@ -8876,9 +8876,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001760",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz",
- "integrity": "sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==",
+ "version": "1.0.30001761",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001761.tgz",
+ "integrity": "sha512-JF9ptu1vP2coz98+5051jZ4PwQgd2ni8A+gYSN7EA7dPKIMf0pDlSUxhdmVOaV3/fYK5uWBkgSXJaRLr4+3A6g==",
"funding": [
{
"type": "opencollective",
@@ -9435,9 +9435,9 @@
"license": "MIT"
},
"node_modules/cypress": {
- "version": "15.7.1",
- "resolved": "https://registry.npmjs.org/cypress/-/cypress-15.7.1.tgz",
- "integrity": "sha512-U3sYnJ+Cnpgr6IPycxsznTg//mGVXfPGeGV+om7VQCyp5XyVkhG4oPr3X3hTq1+OB0Om0O5DxusYmt7cbvwqMQ==",
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/cypress/-/cypress-15.8.1.tgz",
+ "integrity": "sha512-ogc62stTQGh1395ipKxfCE5hQuSApTzeH5e0d9U6m7wYO9HQeCpgnkYtBtd0MbkN2Fnch5Od2mX9u4hoTlrH4Q==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
@@ -9479,7 +9479,7 @@
"proxy-from-env": "1.0.0",
"request-progress": "^3.0.0",
"supports-color": "^8.1.1",
- "systeminformation": "5.27.7",
+ "systeminformation": "^5.27.14",
"tmp": "~0.2.4",
"tree-kill": "1.2.2",
"untildify": "^4.0.0",
@@ -9640,9 +9640,9 @@
}
},
"node_modules/dedent": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.0.tgz",
- "integrity": "sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==",
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.1.tgz",
+ "integrity": "sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==",
"dev": true,
"license": "MIT",
"peerDependencies": {
@@ -10012,9 +10012,9 @@
}
},
"node_modules/es-abstract": {
- "version": "1.24.0",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz",
- "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==",
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz",
+ "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10101,27 +10101,27 @@
}
},
"node_modules/es-iterator-helpers": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz",
- "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.2.tgz",
+ "integrity": "sha512-BrUQ0cPTB/IwXj23HtwHjS9n7O4h9FX94b4xc5zlTHxeLgTAdzYUDyy6KdExAl9lbN5rtfe44xpjpmj9grxs5w==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
+ "call-bound": "^1.0.4",
"define-properties": "^1.2.1",
- "es-abstract": "^1.23.6",
+ "es-abstract": "^1.24.1",
"es-errors": "^1.3.0",
- "es-set-tostringtag": "^2.0.3",
+ "es-set-tostringtag": "^2.1.0",
"function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.6",
+ "get-intrinsic": "^1.3.0",
"globalthis": "^1.0.4",
"gopd": "^1.2.0",
"has-property-descriptors": "^1.0.2",
"has-proto": "^1.2.0",
"has-symbols": "^1.1.0",
"internal-slot": "^1.1.0",
- "iterator.prototype": "^1.1.4",
+ "iterator.prototype": "^1.1.5",
"safe-array-concat": "^1.1.3"
},
"engines": {
@@ -10129,9 +10129,9 @@
}
},
"node_modules/es-module-lexer": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
- "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz",
+ "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==",
"license": "MIT"
},
"node_modules/es-object-atoms": {
@@ -10216,9 +10216,9 @@
}
},
"node_modules/eslint": {
- "version": "9.39.1",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz",
- "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==",
+ "version": "9.39.2",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz",
+ "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==",
"dev": true,
"license": "MIT",
"peer": true,
@@ -10229,7 +10229,7 @@
"@eslint/config-helpers": "^0.4.2",
"@eslint/core": "^0.17.0",
"@eslint/eslintrc": "^3.3.1",
- "@eslint/js": "9.39.1",
+ "@eslint/js": "9.39.2",
"@eslint/plugin-kit": "^0.4.1",
"@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
@@ -10869,12 +10869,12 @@
}
},
"node_modules/firebase": {
- "version": "12.6.0",
- "resolved": "https://registry.npmjs.org/firebase/-/firebase-12.6.0.tgz",
- "integrity": "sha512-8ZD1Gcv916Qp8/nsFH2+QMIrfX/76ti6cJwxQUENLXXnKlOX/IJZaU2Y3bdYf5r1mbownrQKfnWtrt+MVgdwLA==",
+ "version": "12.7.0",
+ "resolved": "https://registry.npmjs.org/firebase/-/firebase-12.7.0.tgz",
+ "integrity": "sha512-ZBZg9jFo8uH4Emd7caOqtalKJfDGHnHQSrCPiqRAdTFQd0wL3ERilUBfhnhBLnlernugkN/o7nJa0p+sE71Izg==",
"license": "Apache-2.0",
"dependencies": {
- "@firebase/ai": "2.6.0",
+ "@firebase/ai": "2.6.1",
"@firebase/analytics": "0.10.19",
"@firebase/analytics-compat": "0.2.25",
"@firebase/app": "0.14.6",
@@ -10882,13 +10882,13 @@
"@firebase/app-check-compat": "0.4.0",
"@firebase/app-compat": "0.5.6",
"@firebase/app-types": "0.9.3",
- "@firebase/auth": "1.11.1",
- "@firebase/auth-compat": "0.6.1",
+ "@firebase/auth": "1.12.0",
+ "@firebase/auth-compat": "0.6.2",
"@firebase/data-connect": "0.3.12",
"@firebase/database": "1.1.0",
"@firebase/database-compat": "2.1.0",
- "@firebase/firestore": "4.9.2",
- "@firebase/firestore-compat": "0.4.2",
+ "@firebase/firestore": "4.9.3",
+ "@firebase/firestore-compat": "0.4.3",
"@firebase/functions": "0.13.1",
"@firebase/functions-compat": "0.4.1",
"@firebase/installations": "0.6.19",
@@ -11686,9 +11686,9 @@
}
},
"node_modules/import-in-the-middle": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-2.0.0.tgz",
- "integrity": "sha512-yNZhyQYqXpkT0AKq3F3KLasUSK4fHvebNH5hOsKQw2dhGSALvQ4U0BqUc5suziKvydO5u5hgN2hy1RJaho8U5A==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-2.0.1.tgz",
+ "integrity": "sha512-bruMpJ7xz+9jwGzrwEhWgvRrlKRYCRDBrfU+ur3FcasYXLJDxTruJ//8g2Noj+QFyRBeqbpj8Bhn4Fbw6HjvhA==",
"license": "Apache-2.0",
"dependencies": {
"acorn": "^8.14.0",
@@ -13876,9 +13876,9 @@
"license": "MIT"
},
"node_modules/lodash-es": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
- "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
+ "version": "4.17.22",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.22.tgz",
+ "integrity": "sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q==",
"dev": true,
"license": "MIT"
},
@@ -14972,14 +14972,15 @@
"license": "MIT"
},
"node_modules/next": {
- "version": "16.0.10",
- "resolved": "https://registry.npmjs.org/next/-/next-16.0.10.tgz",
- "integrity": "sha512-RtWh5PUgI+vxlV3HdR+IfWA1UUHu0+Ram/JBO4vWB54cVPentCD0e+lxyAYEsDTqGGMg7qpjhKh6dc6aW7W/sA==",
+ "version": "16.1.1",
+ "resolved": "https://registry.npmjs.org/next/-/next-16.1.1.tgz",
+ "integrity": "sha512-QI+T7xrxt1pF6SQ/JYFz95ro/mg/1Znk5vBebsWwbpejj1T0A23hO7GYEaVac9QUOT2BIMiuzm0L99ooq7k0/w==",
"license": "MIT",
"peer": true,
"dependencies": {
- "@next/env": "16.0.10",
+ "@next/env": "16.1.1",
"@swc/helpers": "0.5.15",
+ "baseline-browser-mapping": "^2.8.3",
"caniuse-lite": "^1.0.30001579",
"postcss": "8.4.31",
"styled-jsx": "5.1.6"
@@ -14991,14 +14992,14 @@
"node": ">=20.9.0"
},
"optionalDependencies": {
- "@next/swc-darwin-arm64": "16.0.10",
- "@next/swc-darwin-x64": "16.0.10",
- "@next/swc-linux-arm64-gnu": "16.0.10",
- "@next/swc-linux-arm64-musl": "16.0.10",
- "@next/swc-linux-x64-gnu": "16.0.10",
- "@next/swc-linux-x64-musl": "16.0.10",
- "@next/swc-win32-arm64-msvc": "16.0.10",
- "@next/swc-win32-x64-msvc": "16.0.10",
+ "@next/swc-darwin-arm64": "16.1.1",
+ "@next/swc-darwin-x64": "16.1.1",
+ "@next/swc-linux-arm64-gnu": "16.1.1",
+ "@next/swc-linux-arm64-musl": "16.1.1",
+ "@next/swc-linux-x64-gnu": "16.1.1",
+ "@next/swc-linux-x64-musl": "16.1.1",
+ "@next/swc-win32-arm64-msvc": "16.1.1",
+ "@next/swc-win32-x64-msvc": "16.1.1",
"sharp": "^0.34.4"
},
"peerDependencies": {
@@ -15749,9 +15750,9 @@
}
},
"node_modules/postgres-bytea": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz",
- "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.1.tgz",
+ "integrity": "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -16308,9 +16309,9 @@
"license": "MIT"
},
"node_modules/rollup": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.3.tgz",
- "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==",
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.54.0.tgz",
+ "integrity": "sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==",
"license": "MIT",
"peer": true,
"dependencies": {
@@ -16324,28 +16325,28 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.53.3",
- "@rollup/rollup-android-arm64": "4.53.3",
- "@rollup/rollup-darwin-arm64": "4.53.3",
- "@rollup/rollup-darwin-x64": "4.53.3",
- "@rollup/rollup-freebsd-arm64": "4.53.3",
- "@rollup/rollup-freebsd-x64": "4.53.3",
- "@rollup/rollup-linux-arm-gnueabihf": "4.53.3",
- "@rollup/rollup-linux-arm-musleabihf": "4.53.3",
- "@rollup/rollup-linux-arm64-gnu": "4.53.3",
- "@rollup/rollup-linux-arm64-musl": "4.53.3",
- "@rollup/rollup-linux-loong64-gnu": "4.53.3",
- "@rollup/rollup-linux-ppc64-gnu": "4.53.3",
- "@rollup/rollup-linux-riscv64-gnu": "4.53.3",
- "@rollup/rollup-linux-riscv64-musl": "4.53.3",
- "@rollup/rollup-linux-s390x-gnu": "4.53.3",
- "@rollup/rollup-linux-x64-gnu": "4.53.3",
- "@rollup/rollup-linux-x64-musl": "4.53.3",
- "@rollup/rollup-openharmony-arm64": "4.53.3",
- "@rollup/rollup-win32-arm64-msvc": "4.53.3",
- "@rollup/rollup-win32-ia32-msvc": "4.53.3",
- "@rollup/rollup-win32-x64-gnu": "4.53.3",
- "@rollup/rollup-win32-x64-msvc": "4.53.3",
+ "@rollup/rollup-android-arm-eabi": "4.54.0",
+ "@rollup/rollup-android-arm64": "4.54.0",
+ "@rollup/rollup-darwin-arm64": "4.54.0",
+ "@rollup/rollup-darwin-x64": "4.54.0",
+ "@rollup/rollup-freebsd-arm64": "4.54.0",
+ "@rollup/rollup-freebsd-x64": "4.54.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.54.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.54.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.54.0",
+ "@rollup/rollup-linux-arm64-musl": "4.54.0",
+ "@rollup/rollup-linux-loong64-gnu": "4.54.0",
+ "@rollup/rollup-linux-ppc64-gnu": "4.54.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.54.0",
+ "@rollup/rollup-linux-riscv64-musl": "4.54.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.54.0",
+ "@rollup/rollup-linux-x64-gnu": "4.54.0",
+ "@rollup/rollup-linux-x64-musl": "4.54.0",
+ "@rollup/rollup-openharmony-arm64": "4.54.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.54.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.54.0",
+ "@rollup/rollup-win32-x64-gnu": "4.54.0",
+ "@rollup/rollup-win32-x64-msvc": "4.54.0",
"fsevents": "~2.3.2"
}
},
@@ -16475,9 +16476,9 @@
"license": "MIT"
},
"node_modules/sass": {
- "version": "1.96.0",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.96.0.tgz",
- "integrity": "sha512-8u4xqqUeugGNCYwr9ARNtQKTOj4KmYiJAVKXf2CTIivTCR51j96htbMKWDru8H5SaQWpyVgTfOF8Ylyf5pun1Q==",
+ "version": "1.97.1",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.97.1.tgz",
+ "integrity": "sha512-uf6HoO8fy6ClsrShvMgaKUn14f2EHQLQRtpsZZLeU/Mv0Q1K5P0+x2uvH6Cub39TVVbWNSrraUhDAoFph6vh0A==",
"devOptional": true,
"license": "MIT",
"peer": true,
@@ -17427,9 +17428,9 @@
}
},
"node_modules/systeminformation": {
- "version": "5.27.7",
- "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.27.7.tgz",
- "integrity": "sha512-saaqOoVEEFaux4v0K8Q7caiauRwjXC4XbD2eH60dxHXbpKxQ8kH9Rf7Jh+nryKpOUSEFxtCdBlSUx0/lO6rwRg==",
+ "version": "5.27.16",
+ "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.27.16.tgz",
+ "integrity": "sha512-aimHO/bE7QFtu3uB3vtpwn7V2DXXGX7NyTY7V1g+hPa7in2k10Bp3AL+Enmg3X71n7HbgLfwy/bbf+2cBSKURQ==",
"dev": true,
"license": "MIT",
"os": [
@@ -18186,9 +18187,9 @@
}
},
"node_modules/update-browserslist-db": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.2.tgz",
- "integrity": "sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==",
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
+ "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
"funding": [
{
"type": "opencollective",
@@ -18319,9 +18320,9 @@
}
},
"node_modules/watchpack": {
- "version": "2.4.4",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz",
- "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==",
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.0.tgz",
+ "integrity": "sha512-e6vZvY6xboSwLz2GD36c16+O/2Z6fKvIf4pOXptw2rY9MVwE/TXc6RGqxD3I3x0a28lwBY7DE+76uTPSsBrrCA==",
"license": "MIT",
"dependencies": {
"glob-to-regexp": "^0.4.1",
@@ -18348,9 +18349,9 @@
}
},
"node_modules/webpack": {
- "version": "5.103.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.103.0.tgz",
- "integrity": "sha512-HU1JOuV1OavsZ+mfigY0j8d1TgQgbZ6M+J75zDkpEAwYeXjWSqrGJtgnPblJjd/mAyTNQ7ygw0MiKOn6etz8yw==",
+ "version": "5.104.1",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.1.tgz",
+ "integrity": "sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==",
"license": "MIT",
"peer": true,
"dependencies": {
@@ -18362,10 +18363,10 @@
"@webassemblyjs/wasm-parser": "^1.14.1",
"acorn": "^8.15.0",
"acorn-import-phases": "^1.0.3",
- "browserslist": "^4.26.3",
+ "browserslist": "^4.28.1",
"chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.17.3",
- "es-module-lexer": "^1.2.1",
+ "enhanced-resolve": "^5.17.4",
+ "es-module-lexer": "^2.0.0",
"eslint-scope": "5.1.1",
"events": "^3.2.0",
"glob-to-regexp": "^0.4.1",
@@ -18376,7 +18377,7 @@
"neo-async": "^2.6.2",
"schema-utils": "^4.3.3",
"tapable": "^2.3.0",
- "terser-webpack-plugin": "^5.3.11",
+ "terser-webpack-plugin": "^5.3.16",
"watchpack": "^2.4.4",
"webpack-sources": "^3.3.3"
},
@@ -18868,9 +18869,9 @@
}
},
"node_modules/zod": {
- "version": "4.1.13",
- "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.13.tgz",
- "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-4.2.1.tgz",
+ "integrity": "sha512-0wZ1IRqGGhMP76gLqz8EyfBXKk0J2qo2+H3fi4mcUP/KtTocoX08nmIAHl1Z2kJIZbZee8KOpBCSNPRgauucjw==",
"dev": true,
"license": "MIT",
"peer": true,
diff --git a/package.json b/package.json
index 2289514..4479bce 100644
--- a/package.json
+++ b/package.json
@@ -37,33 +37,33 @@
"@mui/icons-material": "^7.3.6",
"@mui/material": "^7.3.6",
"@sentry/integrations": "^7.114.0",
- "@sentry/nextjs": "^10.30.0",
+ "@sentry/nextjs": "^10.32.1",
"@vercel/speed-insights": "^1.3.1",
- "firebase": "^12.6.0",
+ "firebase": "^12.7.0",
"lodash": "^4.17.21",
- "next": "^16.0.10",
+ "next": "^16.1.1",
"react": "^19.2.3",
"react-dom": "^19.2.3",
"sharp": "^0.34.5",
- "webpack": "^5.103.0"
+ "webpack": "^5.104.1"
},
"devDependencies": {
- "@sentry/core": "^10.30.0",
- "@sentry/types": "^10.30.0",
+ "@sentry/core": "^10.32.1",
+ "@sentry/types": "^10.32.1",
"@svgr/webpack": "^8.1.0",
"@testing-library/jest-dom": "^6.9.1",
- "@testing-library/react": "^16.3.0",
+ "@testing-library/react": "^16.3.1",
"@trivago/prettier-plugin-sort-imports": "^6.0.0",
"@types/jest": "^30.0.0",
"@types/lodash": "^4.17.21",
- "@types/node": "^25.0.1",
+ "@types/node": "^25.0.3",
"@types/react": "^19.2.7",
"@types/react-dom": "^19.2.3",
- "caniuse-lite": "^1.0.30001760",
+ "caniuse-lite": "^1.0.30001761",
"concurrently": "^9.2.1",
- "cypress": "^15.7.1",
+ "cypress": "^15.8.1",
"cypress-axe": "^1.7.0",
- "eslint": "^9.39.1",
+ "eslint": "^9.39.2",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-cypress": "^5.2.0",
"eslint-plugin-prettier": "^5.5.4",
@@ -75,7 +75,7 @@
"jest-transform-stub": "^2.0.0",
"markdownlint-cli": "^0.47.0",
"prettier": "^3.7.4",
- "sass": "^1.96.0",
+ "sass": "^1.97.1",
"start-server-and-test": "^2.1.3",
"ts-jest": "^29.4.6",
"typescript": "^5.9.3"